UNPKG

metaapi.cloud-sdk

Version:

SDK for MetaApi, a professional cloud forex API which includes MetaTrader REST API and MetaTrader websocket API. Supports both MetaTrader 5 (MT5) and MetaTrader 4 (MT4). CopyFactory copy trading API included. (https://metaapi.cloud)

47 lines (46 loc) 6.09 kB
/** * Returns socket sticky session ID * @param socket native socket.io socket * @returns sticky session ID */ export function getSocketStickySessionId(socket) { return socket.handshake.query['stickySocketConnectionId'] || socket.id; // eslint-disable-line dot-notation } /** * Returns whether a socket supports sticky socket protocol * @param socket native socket.io socket * @returns whether supports the protocol */ export function supportsStickySocketProtocol(socket) { return !!socket.handshake.query['stickySocketConnectionId']; // eslint-disable-line dot-notation } /** * Returns client socket.io socket transport * @param socket native socket.io socket * @returns current transport name */ export function getClientSocketIoTransportName(socket) { return socket.io.engine.transport.name; } /** * Destroys underlying socket of a client socket, using socket.io internals. The socket must have `websocket` transport * @param socket native socket.io socket * @param err optional error */ export function destroyInternalClientSocket(socket, err) { socket.io.engine.transport.ws._socket.destroy(err); } /** * Sends history events to a socket * @param socket socket to send to * @param history history to send from (will be modified) * @param startIndex start packet index to stream from */ export function sendHistory(socket, history, startIndex) { while(history.length && history.front().index < startIndex){ history.shift(); } for (let packet of history){ packet.time = new Date(); socket.emit(packet.event, { index: packet.index, data: packet.data }); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjxhbm9uPiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU29ja2V0SU8gZnJvbSAnc29ja2V0LmlvJztcbmltcG9ydCB7RW1pdEhpc3RvcnlQYWNrZXQsIEVtaXRQYWNrZXR9IGZyb20gJy4vY29tbW9uLnR5cGVzJztcbmltcG9ydCBRdWV1ZSBmcm9tICcuLi8uLi90b29scy9xdWV1ZSc7XG5cbi8qKlxuICogUmV0dXJucyBzb2NrZXQgc3RpY2t5IHNlc3Npb24gSURcbiAqIEBwYXJhbSBzb2NrZXQgbmF0aXZlIHNvY2tldC5pbyBzb2NrZXRcbiAqIEByZXR1cm5zIHN0aWNreSBzZXNzaW9uIElEXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTb2NrZXRTdGlja3lTZXNzaW9uSWQoc29ja2V0OiBTb2NrZXRJTy5Tb2NrZXQpOiBzdHJpbmcge1xuICByZXR1cm4gc29ja2V0LmhhbmRzaGFrZS5xdWVyeVsnc3RpY2t5U29ja2V0Q29ubmVjdGlvbklkJ10gfHwgc29ja2V0LmlkOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGRvdC1ub3RhdGlvblxufVxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBhIHNvY2tldCBzdXBwb3J0cyBzdGlja3kgc29ja2V0IHByb3RvY29sXG4gKiBAcGFyYW0gc29ja2V0IG5hdGl2ZSBzb2NrZXQuaW8gc29ja2V0XG4gKiBAcmV0dXJucyB3aGV0aGVyIHN1cHBvcnRzIHRoZSBwcm90b2NvbFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9ydHNTdGlja3lTb2NrZXRQcm90b2NvbChzb2NrZXQ6IFNvY2tldElPLlNvY2tldCk6IGJvb2xlYW4ge1xuICByZXR1cm4gISFzb2NrZXQuaGFuZHNoYWtlLnF1ZXJ5WydzdGlja3lTb2NrZXRDb25uZWN0aW9uSWQnXTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGNsaWVudCBzb2NrZXQuaW8gc29ja2V0IHRyYW5zcG9ydFxuICogQHBhcmFtIHNvY2tldCBuYXRpdmUgc29ja2V0LmlvIHNvY2tldFxuICogQHJldHVybnMgY3VycmVudCB0cmFuc3BvcnQgbmFtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xpZW50U29ja2V0SW9UcmFuc3BvcnROYW1lKHNvY2tldDogU29ja2V0SU9DbGllbnQuU29ja2V0KTogc3RyaW5nIHtcbiAgcmV0dXJuIChzb2NrZXQuaW8gYXMgYW55KS5lbmdpbmUudHJhbnNwb3J0Lm5hbWU7XG59XG5cbi8qKlxuICogRGVzdHJveXMgdW5kZXJseWluZyBzb2NrZXQgb2YgYSBjbGllbnQgc29ja2V0LCB1c2luZyBzb2NrZXQuaW8gaW50ZXJuYWxzLiBUaGUgc29ja2V0IG11c3QgaGF2ZSBgd2Vic29ja2V0YCB0cmFuc3BvcnRcbiAqIEBwYXJhbSBzb2NrZXQgbmF0aXZlIHNvY2tldC5pbyBzb2NrZXRcbiAqIEBwYXJhbSBlcnIgb3B0aW9uYWwgZXJyb3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlc3Ryb3lJbnRlcm5hbENsaWVudFNvY2tldChzb2NrZXQ6IFNvY2tldElPQ2xpZW50LlNvY2tldCwgZXJyPzogRXJyb3IpIHtcbiAgKHNvY2tldC5pbyBhcyBhbnkpLmVuZ2luZS50cmFuc3BvcnQud3MuX3NvY2tldC5kZXN0cm95KGVycik7XG59XG5cbi8qKlxuICogU2VuZHMgaGlzdG9yeSBldmVudHMgdG8gYSBzb2NrZXRcbiAqIEBwYXJhbSBzb2NrZXQgc29ja2V0IHRvIHNlbmQgdG9cbiAqIEBwYXJhbSBoaXN0b3J5IGhpc3RvcnkgdG8gc2VuZCBmcm9tICh3aWxsIGJlIG1vZGlmaWVkKVxuICogQHBhcmFtIHN0YXJ0SW5kZXggc3RhcnQgcGFja2V0IGluZGV4IHRvIHN0cmVhbSBmcm9tXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZW5kSGlzdG9yeShcbiAgc29ja2V0OiBTb2NrZXRJT0NsaWVudC5Tb2NrZXQgfCBTb2NrZXRJTy5Tb2NrZXQsIGhpc3Rvcnk6IFF1ZXVlPEVtaXRIaXN0b3J5UGFja2V0Piwgc3RhcnRJbmRleDogbnVtYmVyXG4pIHtcbiAgd2hpbGUgKGhpc3RvcnkubGVuZ3RoICYmIGhpc3RvcnkuZnJvbnQoKS5pbmRleCA8IHN0YXJ0SW5kZXgpIHtcbiAgICBoaXN0b3J5LnNoaWZ0KCk7XG4gIH1cbiAgZm9yIChsZXQgcGFja2V0IG9mIGhpc3RvcnkpIHtcbiAgICBwYWNrZXQudGltZSA9IG5ldyBEYXRlKCk7XG4gICAgc29ja2V0LmVtaXQocGFja2V0LmV2ZW50LCB7XG4gICAgICBpbmRleDogcGFja2V0LmluZGV4LFxuICAgICAgZGF0YTogcGFja2V0LmRhdGFcbiAgICB9IHNhdGlzZmllcyBFbWl0UGFja2V0KTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbImdldFNvY2tldFN0aWNreVNlc3Npb25JZCIsInNvY2tldCIsImhhbmRzaGFrZSIsInF1ZXJ5IiwiaWQiLCJzdXBwb3J0c1N0aWNreVNvY2tldFByb3RvY29sIiwiZ2V0Q2xpZW50U29ja2V0SW9UcmFuc3BvcnROYW1lIiwiaW8iLCJlbmdpbmUiLCJ0cmFuc3BvcnQiLCJuYW1lIiwiZGVzdHJveUludGVybmFsQ2xpZW50U29ja2V0IiwiZXJyIiwid3MiLCJfc29ja2V0IiwiZGVzdHJveSIsInNlbmRIaXN0b3J5IiwiaGlzdG9yeSIsInN0YXJ0SW5kZXgiLCJsZW5ndGgiLCJmcm9udCIsImluZGV4Iiwic2hpZnQiLCJwYWNrZXQiLCJ0aW1lIiwiRGF0ZSIsImVtaXQiLCJldmVudCIsImRhdGEiXSwibWFwcGluZ3MiOiJBQUlBOzs7O0NBSUMsR0FDRCxPQUFPLFNBQVNBLHlCQUF5QkMsTUFBdUI7SUFDOUQsT0FBT0EsT0FBT0MsU0FBUyxDQUFDQyxLQUFLLENBQUMsMkJBQTJCLElBQUlGLE9BQU9HLEVBQUUsRUFBRSxtQ0FBbUM7QUFDN0c7QUFFQTs7OztDQUlDLEdBQ0QsT0FBTyxTQUFTQyw2QkFBNkJKLE1BQXVCO0lBQ2xFLE9BQU8sQ0FBQyxDQUFDQSxPQUFPQyxTQUFTLENBQUNDLEtBQUssQ0FBQywyQkFBMkIsRUFBRSxtQ0FBbUM7QUFDbEc7QUFFQTs7OztDQUlDLEdBQ0QsT0FBTyxTQUFTRywrQkFBK0JMLE1BQTZCO0lBQzFFLE9BQU8sQUFBQ0EsT0FBT00sRUFBRSxDQUFTQyxNQUFNLENBQUNDLFNBQVMsQ0FBQ0MsSUFBSTtBQUNqRDtBQUVBOzs7O0NBSUMsR0FDRCxPQUFPLFNBQVNDLDRCQUE0QlYsTUFBNkIsRUFBRVcsR0FBVztJQUNuRlgsT0FBT00sRUFBRSxDQUFTQyxNQUFNLENBQUNDLFNBQVMsQ0FBQ0ksRUFBRSxDQUFDQyxPQUFPLENBQUNDLE9BQU8sQ0FBQ0g7QUFDekQ7QUFFQTs7Ozs7Q0FLQyxHQUNELE9BQU8sU0FBU0ksWUFDZGYsTUFBK0MsRUFBRWdCLE9BQWlDLEVBQUVDLFVBQWtCO0lBRXRHLE1BQU9ELFFBQVFFLE1BQU0sSUFBSUYsUUFBUUcsS0FBSyxHQUFHQyxLQUFLLEdBQUdILFdBQVk7UUFDM0RELFFBQVFLLEtBQUs7SUFDZjtJQUNBLEtBQUssSUFBSUMsVUFBVU4sUUFBUztRQUMxQk0sT0FBT0MsSUFBSSxHQUFHLElBQUlDO1FBQ2xCeEIsT0FBT3lCLElBQUksQ0FBQ0gsT0FBT0ksS0FBSyxFQUFFO1lBQ3hCTixPQUFPRSxPQUFPRixLQUFLO1lBQ25CTyxNQUFNTCxPQUFPSyxJQUFJO1FBQ25CO0lBQ0Y7QUFDRiJ9