"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.decodePayload = exports.decodePacket = exports.encodePayload = exports.encodePacket = exports.protocol = void 0; const encodePacket_js_1 = require("./encodePacket.js"); exports.encodePacket = encodePacket_js_1.default; const decodePacket_js_1 = require("./decodePacket.js"); exports.decodePacket = decodePacket_js_1.default; const SEPARATOR = String.fromCharCode(30); // see https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text const encodePayload = (packets, callback) => { // some packets may be added to the array while encoding, so the initial length must be saved const length = packets.length; const encodedPackets = new Array(length); let count = 0; packets.forEach((packet, i) => { // force base64 encoding for binary packets (0, encodePacket_js_1.default)(packet, false, encodedPacket => { encodedPackets[i] = encodedPacket; if (++count === length) { callback(encodedPackets.join(SEPARATOR)); } }); }); }; exports.encodePayload = encodePayload; const decodePayload = (encodedPayload, binaryType) => { const encodedPackets = encodedPayload.split(SEPARATOR); const packets = []; for (let i = 0; i < encodedPackets.length; i++) { const decodedPacket = (0, decodePacket_js_1.default)(encodedPackets[i], binaryType); packets.push(decodedPacket); if (decodedPacket.type === "error") { break; } } return packets; }; exports.decodePayload = decodePayload; exports.protocol = 4;