44 lines
1.3 KiB
JavaScript
44 lines
1.3 KiB
JavaScript
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();
|
|
}
|