summaryrefslogtreecommitdiff
path: root/srv/src/http/static/trading-in-the-rain/CW.js
diff options
context:
space:
mode:
authorBrian Picciano <mediocregopher@gmail.com>2022-05-20 13:37:43 -0600
committerBrian Picciano <mediocregopher@gmail.com>2022-05-20 13:37:43 -0600
commit16cfbd19157df76e7296dddb287412f1099feb33 (patch)
treee4bbf892066cceeaeeaee4c25e5365152412a1c3 /srv/src/http/static/trading-in-the-rain/CW.js
parent3cdee89c961ae9c836234f5aec87174a04a800a8 (diff)
Move static assets to within srv
Diffstat (limited to 'srv/src/http/static/trading-in-the-rain/CW.js')
-rw-r--r--srv/src/http/static/trading-in-the-rain/CW.js43
1 files changed, 43 insertions, 0 deletions
diff --git a/srv/src/http/static/trading-in-the-rain/CW.js b/srv/src/http/static/trading-in-the-rain/CW.js
new file mode 100644
index 0000000..043c1a8
--- /dev/null
+++ b/srv/src/http/static/trading-in-the-rain/CW.js
@@ -0,0 +1,43 @@
+function CW(resource) {
+ this.conn = new WebSocket('wss://stream.cryptowat.ch/connect?apikey=GPDLXH702E1NAD96OSBO');
+ this.conn.binaryType = "arraybuffer";
+
+ this.conn.onopen = () => {
+ console.log("CW websocket connected");
+ if (this.onconnect) this.onconnect();
+ }
+
+ let decoder = new TextDecoder();
+ this.conn.onmessage = (msg) => {
+ let d = JSON.parse(decoder.decode(msg.data));
+
+ // The server will always send an AUTHENTICATED signal when you establish a valid connection
+ // At this point you can subscribe to resources
+ if (d.authenticationResult && d.authenticationResult.status === 'AUTHENTICATED') {
+ if (this.onauth) this.onauth();
+ this.conn.send(JSON.stringify({
+ subscribe: {
+ subscriptions: [
+ {streamSubscription: {resource: resource}},
+ ],
+ }
+ }));
+ return;
+ }
+
+ // Market data comes in a marketUpdate
+ // In this case, we're expecting trades so we look for marketUpdate.tradesUpdate
+ if (!d.marketUpdate || !d.marketUpdate.tradesUpdate) {
+ return;
+ }
+
+ let trades = d.marketUpdate.tradesUpdate.trades;
+ for (let i in trades) {
+ trades[i].price = parseFloat(trades[i].priceStr);
+ trades[i].volume = parseFloat(trades[i].amountStr);
+ }
+ if (this.ontrades) this.ontrades(trades);
+ }
+
+ this.close = () => this.conn.close();
+}