websocketzlibdeflateuint8tuint8array

javascript: from a websocket I receive messages as zlib deflate: how to read OR "unflate" OR "deflate" (not inflate)


This question is about converting a gzip deflate message from a websocket message and convert it to array OR raw text that I can apply JSON.parse on it...

*** to be also clear: In this question : i use a websocket from a crypto exchange.... but the question is about the received message NOT about crypto exchange

in the documentation they say "please use zlib deflate"

HERE THE JAVASCRIPT

digifinexopen = '{"id":12312,"method":"trades.subscribe","params":["btc_usdt"]}';
digifinex_market_ws = new WebSocket("wss://openapi.digifinex.com/ws/v1/"); 
digifinex_market_ws.binaryType = "arraybuffer";
digifinex_market_ws.onmessage = event => digifinex_trades(event.data);
digifinex_market_ws.onopen = event => digifinex_market_ws.send(digifinexopen);

function fu_bitmex_trades (jsonx) { console.log(jsonx); }

I have this in the log

object=>[[Int8Array]]: Int8Array(1129) 0 … 99]
0: 120
1: -38

I tried with <script src="https://cdnjs.cloudflare.com/ajax/libs/pako/2.0.4/pako.min.js" ...></script> if I do pako.deflate(jsonx); I get

object=> Uint8Array(78) [120, 156, 1, 67, 0, 188, 255, 120, 218, 4, 192, 177, 13, 196, 32, 12, 133, 225, 93, 254, 154, 6, 174, 243, 54, 39, 66, 17, 201, 74, 36, 63, 187, 66, 236, 158, 111, 179, 34, 222, 192, 158, 114, 111, 196, 82, 121, 98, 27, 229, 63, 75, 24, 170, 57, 151, 196, 105, 220, 23, 214, 199, 175, 143, 243, 5, 0, 0, 255, 255, 32, 108, 18, 108, 62, 68, 31, 

If I add decoder = new TextDecoder("utf8"); and log(decoder.decode(jsonx)); I get

string=> x�E��xڜ��n\7����'5���*
���$pƋ Ȼ�*�֋�g��#����|�����������������v\�//�_������������

but, HOW TO RETREIVE the array or raw data that I could json.parse ????


Solution

  • If I decompress your data twice, I get:

    {"error":null,"result":{"status":"success"},"id":12312}
    

    It looks like you compressed instead of decompressed. Use pako.inflate().