@zkp2p/reclaim-witness-sdk
Version:
<div> <div> <img src="https://raw.githubusercontent.com/reclaimprotocol/.github/main/assets/banners/Attestor-Core.png" /> </div> </div>
120 lines • 11.8 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.RES_CHUNKED_PARTIAL_BODY = void 0;
const tls_1 = require("@reclaimprotocol/tls");
const generics_1 = require("../utils/generics");
const http_parser_1 = require("../utils/http-parser");
describe.each(['complete', 'byte-by-byte'])('HTTP Parser tests (mode=%s)', (parseMode) => {
it('should parse a response', () => {
const res = parseHttpResponse(RES1, parseMode);
expect(RES1
.subarray(0, res.statusLineEndIndex)
.toString()).toEqual('HTTP/1.1 401 Unauthorized');
expect(res.complete).toEqual(true);
expect(res.statusCode).toEqual(401);
expect(res.body.length).toBeGreaterThan(0);
const json = JSON.parse((0, generics_1.uint8ArrayToStr)(res.body));
expect(json.error.code).toEqual(401);
});
it('should parse an empty body response', () => {
const res = parseHttpResponse((0, tls_1.strToUint8Array)(RES_EMPTY), parseMode);
expect(res.complete).toEqual(true);
expect(res.statusCode).toEqual(200);
expect(res.body.length).toEqual(0);
});
it('should parse an empty chunked response', () => {
const res = parseHttpResponse((0, tls_1.strToUint8Array)(RES_EMPTY_CHUNKED), parseMode);
expect(res.complete).toEqual(true);
expect(res.statusCode).toEqual(200);
expect(res.body.length).toEqual(0);
});
it('should read a set content-length', () => {
const buff = (0, tls_1.strToUint8Array)(RES_BODY);
const res = parseHttpResponse(buff, parseMode);
expect(res.complete).toEqual(true);
expect(res.bodyStartIndex).toBeTruthy();
expect(buff.slice(res.bodyStartIndex)).toEqual(res.body);
const json = JSON.parse((0, generics_1.uint8ArrayToStr)(res.body));
expect(json.name).toBeTruthy();
});
it('should correctly set chunk indices', () => {
var _a;
const buff = (0, tls_1.strToUint8Array)(exports.RES_CHUNKED_PARTIAL_BODY);
const res = parseHttpResponse(buff, parseMode);
expect(res.complete).toEqual(true);
// ensure all chunks are parsed correctly
const parsedChunks = (_a = res.chunks) === null || _a === void 0 ? void 0 : _a.map((chunk) => {
return (0, generics_1.uint8ArrayToStr)(buff.slice(chunk.fromIndex, chunk.toIndex));
});
expect(parsedChunks).toEqual(CHUNKS);
const json = JSON.parse((0, generics_1.uint8ArrayToStr)(res.body));
expect(json.name).toBeTruthy();
});
});
describe('General HTTP Parser Tests', () => {
it('should correctly parse an empty body response', () => {
const str = 'HTTP/1.1 302 \r\nset-cookie: JSESSIONID=X; Path=/; Secure; HttpOnly\r\nx-content-type-options: nosniff\r\nx-xss-protection: 1; mode=block\r\nstrict-transport-security: max-age=31536000 ; includeSubDomains\r\nlocation: https://xyz.com/abcd\r\ncontent-length: 0\r\ndate: Sun, 16 Jun 2024 07:12:03 GMT\r\nconnection: close\r\nSet-Cookie: XYZ; path=/; Httponly; Secure\r\nSet-Cookie: ROUTEID=.node-U01; Path=/; Httponly; Secure\r\n\r\n';
const buff = (0, tls_1.strToUint8Array)(str);
const parser = (0, http_parser_1.makeHttpResponseParser)();
parser.onChunk(buff);
expect(parser.res.complete).toEqual(true);
});
});
function parseHttpResponse(buff, mode) {
const parser = (0, http_parser_1.makeHttpResponseParser)();
if (mode === 'complete') {
parser.onChunk(buff);
}
else {
for (const byte of buff) {
parser.onChunk(new Uint8Array([byte]));
}
}
parser.streamEnded();
return parser.res;
}
const RES1 = Buffer.from('SFRUUC8xLjEgNDAxIFVuYXV0aG9yaXplZA0KV1dXLUF1dGhlbnRpY2F0ZTogQmVhcmVyIHJlYWxtPSJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20vIiwgZXJyb3I9ImludmFsaWRfdG9rZW4iDQpWYXJ5OiBYLU9yaWdpbg0KVmFyeTogUmVmZXJlcg0KQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PVVURi04DQpEYXRlOiBUdWUsIDEzIERlYyAyMDIyIDAzOjU1OjM1IEdNVA0KU2VydmVyOiBFU0YNCkNhY2hlLUNvbnRyb2w6IHByaXZhdGUNClgtWFNTLVByb3RlY3Rpb246IDANClgtRnJhbWUtT3B0aW9uczogU0FNRU9SSUdJTg0KWC1Db250ZW50LVR5cGUtT3B0aW9uczogbm9zbmlmZg0KQWNjZXB0LVJhbmdlczogbm9uZQ0KVmFyeTogT3JpZ2luLEFjY2VwdC1FbmNvZGluZw0KVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQNCkFsdC1TdmM6IGgzPSI6NDQzIjsgbWE9MjU5MjAwMCxoMy0yOT0iOjQ0MyI7IG1hPTI1OTIwMDAsaDMtUTA1MD0iOjQ0MyI7IG1hPTI1OTIwMDAsaDMtUTA0Nj0iOjQ0MyI7IG1hPTI1OTIwMDAsaDMtUTA0Mz0iOjQ0MyI7IG1hPTI1OTIwMDAscXVpYz0iOjQ0MyI7IG1hPTI1OTIwMDA7IHY9IjQ2LDQzIg0KQ29ubmVjdGlvbjogY2xvc2UNCg0KMTI5DQp7CiAgImVycm9yIjogewogICAgImNvZGUiOiA0MDEsCiAgICAibWVzc2FnZSI6ICJSZXF1ZXN0IGhhZCBpbnZhbGlkIGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzLiBFeHBlY3RlZCBPQXV0aCAyIGFjY2VzcyB0b2tlbiwgbG9naW4gY29va2llIG9yIG90aGVyIHZhbGlkIGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWwuIFNlZSBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9pZGVudGl0eS9zaWduLWluL3dlYi9kZXZjb25zb2xlLXByb2plY3QuIiwKICAgICJzdGF0dXMiOiAiVU5BVVRIRU5USUNBVEVEIgogIH0KfQoNCg==', 'base64');
const RES_EMPTY = [
'HTTP/1.1 200 OK',
'Content-Type: application/json',
'Content-Length: 0',
'', //empty line
'',
].join('\r\n');
const BODY_JSON = '{"name":"John","age":30,"car":null}';
const RES_BODY = [
'HTTP/1.1 200 OK',
'Content-Type: application/json',
'Content-Length: ' + BODY_JSON.length,
'',
BODY_JSON
].join('\r\n');
const RES_EMPTY_CHUNKED = [
'HTTP/1.1 200 OK',
'Content-Type: application/json',
'Transfer-Encoding: chunked',
'',
'0',
'',
].join('\r\n');
const CHUNKS = [
'{"name":"John",',
'"age":30,',
'"car":null,',
'"house":"some',
'where"}'
];
exports.RES_CHUNKED_PARTIAL_BODY = [
'HTTP/1.1 200 OK',
'Content-Type: application/json',
'Transfer-Encoding: chunked',
'',
...CHUNKS.flatMap((chunk) => {
const chunkSize = chunk.length.toString(16);
return [chunkSize, chunk];
}),
'0',
'',
''
].join('\r\n');
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5odHRwLXBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0cy90ZXN0Lmh0dHAtcGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDhDQUFzRDtBQUN0RCxpREFBb0Q7QUFDcEQsdURBQThEO0FBRTlELFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFVLENBQUMsQ0FBQyw2QkFBNkIsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFO0lBRWpHLEVBQUUsQ0FBQyx5QkFBeUIsRUFBRSxHQUFHLEVBQUU7UUFDbEMsTUFBTSxHQUFHLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBQzlDLE1BQU0sQ0FDTCxJQUFJO2FBQ0YsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsa0JBQWtCLENBQUM7YUFDbkMsUUFBUSxFQUFFLENBQ1osQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQTtRQUV0QyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNsQyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNuQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFFMUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFBLDBCQUFlLEVBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDbEQsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3JDLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLHFDQUFxQyxFQUFF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
;