Skip to content

Instantly share code, notes, and snippets.

@erikzrekz
Created July 26, 2018 21:09
Show Gist options
  • Save erikzrekz/c4562664d20ac79d7ca7a632d863790d to your computer and use it in GitHub Desktop.
Save erikzrekz/c4562664d20ac79d7ca7a632d863790d to your computer and use it in GitHub Desktop.
Polo Websockets
/*
To run:
- npm install ws && npm install autobahn
- node websocket {ws, wss} {v1, v2} {if v2 --> channels}
*/
var protocol = process.argv[2];
var api = process.argv[3];
var channel = process.argv[4];
var API2_CHANNELS = {
"10": "BTC_BLK",
"100": "BTC_VTC",
"1002": "Ticker",
"1003": "24 hour Exchange Volume",
"1010": "Heartbeat",
"104": "BTC_XBC",
"108": "BTC_XCP",
"112": "BTC_XEM",
"114": "BTC_XMR",
"116": "BTC_XPM",
"117": "BTC_XRP",
"12": "BTC_BTCD",
"121": "USDT_BTC",
"122": "USDT_DASH",
"123": "USDT_LTC",
"124": "USDT_NXT",
"125": "USDT_STR",
"126": "USDT_XMR",
"127": "USDT_XRP",
"129": "XMR_BCN",
"13": "BTC_BTM",
"130": "XMR_BLK",
"131": "XMR_BTCD",
"132": "XMR_DASH",
"137": "XMR_LTC",
"138": "XMR_MAID",
"14": "BTC_BTS",
"140": "XMR_NXT",
"148": "BTC_ETH",
"149": "USDT_ETH",
"15": "BTC_BURST",
"150": "BTC_SC",
"151": "BTC_BCY",
"153": "BTC_EXP",
"155": "BTC_FCT",
"158": "BTC_RADS",
"160": "BTC_AMP",
"162": "BTC_DCR",
"163": "BTC_LSK",
"166": "ETH_LSK",
"167": "BTC_LBC",
"168": "BTC_STEEM",
"169": "ETH_STEEM",
"170": "BTC_SBD",
"171": "BTC_ETC",
"172": "ETH_ETC",
"173": "USDT_ETC",
"174": "BTC_REP",
"175": "USDT_REP",
"176": "ETH_REP",
"177": "BTC_ARDR",
"178": "BTC_ZEC",
"179": "ETH_ZEC",
"180": "USDT_ZEC",
"181": "XMR_ZEC",
"182": "BTC_STRAT",
"183": "BTC_NXC",
"184": "BTC_PASC",
"185": "BTC_GNT",
"186": "ETH_GNT",
"187": "BTC_GNO",
"188": "ETH_GNO",
"189": "BTC_BCH",
"190": "ETH_BCH",
"191": "USDT_BCH",
"192": "BTC_ZRX",
"193": "ETH_ZRX",
"194": "BTC_CVC",
"195": "ETH_CVC",
"196": "BTC_OMG",
"197": "ETH_OMG",
"198": "BTC_GAS",
"199": "ETH_GAS",
"20": "BTC_CLAM",
"200": "BTC_STORJ",
"24": "BTC_DASH",
"25": "BTC_DGB",
"27": "BTC_DOGE",
"28": "BTC_EMC2",
"31": "BTC_FLDC",
"32": "BTC_FLO",
"38": "BTC_GAME",
"40": "BTC_GRC",
"43": "BTC_HUC",
"50": "BTC_LTC",
"51": "BTC_MAID",
"58": "BTC_OMNI",
"61": "BTC_NAV",
"63": "BTC_NEOS",
"64": "BTC_NMC",
"69": "BTC_NXT",
"7": "BTC_BCN",
"73": "BTC_PINK",
"74": "BTC_POT",
"75": "BTC_PPC",
"8": "BTC_BELA",
"83": "BTC_RIC",
"89": "BTC_STR",
"92": "BTC_SYS",
"97": "BTC_VIA",
"98": "BTC_XVC",
"99": "BTC_VRC"
};
var base = 'poloniex.com';
var url = '';
function urlBuild(protocol, api) {
p = protocol === 'ws' ? 'ws' : 'wss';
a = api === 'v1' ? 'api.' : 'api2.';
return p + '://' + a + base;
}
url += urlBuild(protocol, api)
console.info(`
You are testing websockets for ${url}
`);
if (api === 'v1') {
var autobahn = require('autobahn');
var connection = new autobahn.Connection({
url: url,
realm: "realm1"
});
connection.onopen = function(session) {
function heartBeat(args, kwargs) {
console.log('On Heartbeat:', {
args
});
}
session.subscribe('heartbeat', heartBeat);
}
connection.onclose = function(close) {
console.log('On Close:', {
close
})
}
connection.open();
} else {
var WebSocket = require('ws');
var ws = new WebSocket(url);
ws.on('open', () => {
console.log('On Open...')
if (channel) {
var channelArray = channel.split(",");
for (var x in channelArray) {
var c = channelArray[x];
var subscription = {
'command': 'subscribe',
'channel': c
};
console.log(`Subscribing to ${c}: ${API2_CHANNELS[c]}`);
ws.send(JSON.stringify(subscription));
}
}
})
ws.on('connection', (connection) => {
console.log('On Connection:', {
connection
})
})
ws.on('message', (message) => {
console.log('On Message:', {
message
});
});
ws.on('close', (closeCode, closeReason) => {
console.log('On Close:', {
closeCode,
closeReason
})
})
ws.on('error', (err) => {
console.log('On Error:', {
err
})
})
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment