@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
JavaScript
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
;