UNPKG

@bsv/authsocket-client

Version:
59 lines (58 loc) 1.66 kB
//#region src/SocketClientTransport.ts const DEFAULT_MAX_PENDING_MESSAGES = 32; var SocketClientTransport = class { socket; onDataCallback; maxPendingMessages; onError; pendingMessages = 0; failed = false; constructor(socket, options = {}) { this.socket = socket; const maxPendingMessages = options.maxPendingMessages ?? DEFAULT_MAX_PENDING_MESSAGES; if (!Number.isSafeInteger(maxPendingMessages) || maxPendingMessages < 1) throw new RangeError("maxPendingMessages must be a positive safe integer"); this.maxPendingMessages = maxPendingMessages; this.onError = options.onError; this.socket.on("authMessage", (msg) => { return this.processMessage(msg); }); } /** * Send an AuthMessage to the server. */ async send(message) { this.socket.emit("authMessage", message); } /** * Register a callback to handle incoming AuthMessages. */ async onData(callback) { this.onDataCallback = callback; } async processMessage(message) { if (this.failed || this.onDataCallback === void 0) return; if (this.pendingMessages >= this.maxPendingMessages) { this.fail(/* @__PURE__ */ new Error("Authentication message concurrency limit exceeded")); return; } this.pendingMessages += 1; try { await this.onDataCallback(message); } catch (error) { this.fail(error); } finally { this.pendingMessages -= 1; } } fail(error) { if (this.failed) return; this.failed = true; Promise.resolve().then(async () => await this.onError?.(error)).catch(() => {}); try { this.socket.disconnect(); } catch {} } }; //#endregion export { SocketClientTransport }; //# sourceMappingURL=SocketClientTransport.js.map