UNPKG

@jsonjoy.com/reactive-rpc

Version:

Reactive-RPC is a library for building reactive APIs over WebSocket, HTTP, and other RPCs.

83 lines 2.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.setCodecs = exports.getBody = void 0; const errors_1 = require("../errors"); const getBody = (request, max) => { return new Promise((resolve, reject) => { let size = 0; const chunks = []; request.on('error', (error) => { request.removeAllListeners(); reject(error); }); request.on('data', (chunk) => { size += chunk.length; if (size > max) { request.removeAllListeners(); reject(new errors_1.PayloadTooLarge()); return; } chunks.push(chunk); }); request.on('end', () => { resolve(chunks); }); }); }; exports.getBody = getBody; const REGEX_CODECS_SPECIFIER = /rpc\.(\w{0,32})\.(\w{0,32})\.(\w{0,32})(?:\-(\w{0,32}))?/; const setCodecs = (ctx, specifier, codecs) => { const match = REGEX_CODECS_SPECIFIER.exec(specifier); if (!match) return; const [, protocol, messageFormat, request, response] = match; switch (protocol) { case 'rx': { switch (messageFormat) { case 'compact': { ctx.msgCodec = codecs.messages.compact; break; } case 'binary': { ctx.msgCodec = codecs.messages.binary; break; } } break; } case 'json2': { ctx.msgCodec = codecs.messages.jsonRpc2; break; } } switch (request) { case 'cbor': { ctx.resCodec = ctx.reqCodec = codecs.value.cbor; break; } case 'json': { ctx.resCodec = ctx.reqCodec = codecs.value.json; break; } case 'msgpack': { ctx.resCodec = ctx.reqCodec = codecs.value.msgpack; break; } } switch (response) { case 'cbor': { ctx.resCodec = codecs.value.cbor; break; } case 'json': { ctx.resCodec = codecs.value.json; break; } case 'msgpack': { ctx.resCodec = codecs.value.msgpack; break; } } }; exports.setCodecs = setCodecs; //# sourceMappingURL=util.js.map