Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | 1x 1x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 1x 1x 2x 2x | import {PayloadTooLarge} from '../errors';
import type {ConnectionContext} from '../types';
import type * as http from 'http';
import type {RpcCodecs} from '@jsonjoy.com/rpc-codec';
export const getBody = (request: http.IncomingMessage, max: number): Promise<Buffer[]> => {
return new Promise<Buffer[]>((resolve, reject) => {
let size = 0;
const chunks: Buffer[] = [];
request.on('error', (error) => {
request.removeAllListeners();
reject(error);
});
request.on('data', (chunk) => {
size += chunk.length;
Iif (size > max) {
request.removeAllListeners();
reject(new PayloadTooLarge());
return;
}
chunks.push(chunk);
});
request.on('end', () => {
// request.removeAllListeners();
resolve(chunks);
});
});
};
const REGEX_CODECS_SPECIFIER = /rpc\.(\w{0,32})\.(\w{0,32})\.(\w{0,32})(?:\-(\w{0,32}))?/;
/**
* @param specifier A string which may contain a codec specifier. For example:
* - `rpc.rx.compact.cbor` for Rx-RPC with compact messages and CBOR values.
* - `rpc.json2.verbose.json` for JSON-RPC 2.0 with verbose messages encoded as JSON.
*/
export const setCodecs = (ctx: ConnectionContext, specifier: string, codecs: RpcCodecs): void => {
const match = REGEX_CODECS_SPECIFIER.exec(specifier);
Eif (!match) return;
const [, protocol, messageFormat, request, response] = match;
switch (protocol) {
case 'rx': {
switch (messageFormat) {
case 'compact': {
ctx.msgCodec = codecs.msg.compact;
break;
}
case 'binary': {
ctx.msgCodec = codecs.msg.binary;
break;
}
}
break;
}
case 'json2': {
ctx.msgCodec = codecs.msg.jsonRpc2;
break;
}
}
switch (request) {
case 'cbor': {
ctx.resCodec = ctx.reqCodec = codecs.val.cbor;
break;
}
case 'json': {
ctx.resCodec = ctx.reqCodec = codecs.val.json;
break;
}
case 'msgpack': {
ctx.resCodec = ctx.reqCodec = codecs.val.msgpack;
break;
}
}
switch (response) {
case 'cbor': {
ctx.resCodec = codecs.val.cbor;
break;
}
case 'json': {
ctx.resCodec = codecs.val.json;
break;
}
case 'msgpack': {
ctx.resCodec = codecs.val.msgpack;
break;
}
}
};
|