@mathieuc/tradingview
Version:
Tradingview instant stocks API, indicator alerts, trading bot, and more !
61 lines (55 loc) • 1.39 kB
JavaScript
const JSZip = require('jszip');
/**
* @typedef {Object} TWPacket
* @prop {string} [m] Packet type
* @prop {[session: string, {}]} [p] Packet data
*/
const cleanerRgx = /~h~/g;
const splitterRgx = /~m~[0-9]{1,}~m~/g;
module.exports = {
/**
* Parse websocket packet
* @function parseWSPacket
* @param {string} str Websocket raw data
* @returns {TWPacket[]} TradingView packets
*/
parseWSPacket(str) {
return str.replace(cleanerRgx, '').split(splitterRgx)
.map((p) => {
if (!p) return false;
try {
return JSON.parse(p);
} catch (error) {
console.warn('Cant parse', p);
return false;
}
})
.filter((p) => p);
},
/**
* Format websocket packet
* @function formatWSPacket
* @param {TWPacket} packet TradingView packet
* @returns {string} Websocket raw data
*/
formatWSPacket(packet) {
const msg = typeof packet === 'object'
? JSON.stringify(packet)
: packet;
return `~m~${msg.length}~m~${msg}`;
},
/**
* Parse compressed data
* @function parseCompressed
* @param {string} data Compressed data
* @returns {Promise<{}>} Parsed data
*/
async parseCompressed(data) {
const zip = new JSZip();
return JSON.parse(
await (
await zip.loadAsync(data, { base64: true })
).file('').async('text'),
);
},
};