UNPKG

lambda-live-debugger

Version:

Debug Lambda functions locally like it is running in the cloud

95 lines (94 loc) 3.79 kB
import { NormalizedSchema } from "@smithy/core/schema"; import { HttpRequest } from "@smithy/protocol-http"; import { collectBody } from "./collect-stream-body"; import { HttpProtocol } from "./HttpProtocol"; export class RpcProtocol extends HttpProtocol { async serializeRequest(operationSchema, input, context) { const serializer = this.serializer; const query = {}; const headers = {}; const endpoint = await context.endpoint(); const ns = NormalizedSchema.of(operationSchema?.input); const schema = ns.getSchema(); let payload; const request = new HttpRequest({ protocol: "", hostname: "", port: undefined, path: "/", fragment: undefined, query: query, headers: headers, body: undefined, }); if (endpoint) { this.updateServiceEndpoint(request, endpoint); this.setHostPrefix(request, operationSchema, input); } const _input = { ...input, }; if (input) { const eventStreamMember = ns.getEventStreamMember(); if (eventStreamMember) { if (_input[eventStreamMember]) { const initialRequest = {}; for (const [memberName, memberSchema] of ns.structIterator()) { if (memberName !== eventStreamMember && _input[memberName]) { serializer.write(memberSchema, _input[memberName]); initialRequest[memberName] = serializer.flush(); } } payload = await this.serializeEventStream({ eventStream: _input[eventStreamMember], requestSchema: ns, initialRequest, }); } } else { serializer.write(schema, _input); payload = serializer.flush(); } } request.headers = headers; request.query = query; request.body = payload; request.method = "POST"; return request; } async deserializeResponse(operationSchema, context, response) { const deserializer = this.deserializer; const ns = NormalizedSchema.of(operationSchema.output); const dataObject = {}; if (response.statusCode >= 300) { const bytes = await collectBody(response.body, context); if (bytes.byteLength > 0) { Object.assign(dataObject, await deserializer.read(15, bytes)); } await this.handleError(operationSchema, context, response, dataObject, this.deserializeMetadata(response)); throw new Error("@smithy/core/protocols - RPC Protocol error handler failed to throw."); } for (const header in response.headers) { const value = response.headers[header]; delete response.headers[header]; response.headers[header.toLowerCase()] = value; } const eventStreamMember = ns.getEventStreamMember(); if (eventStreamMember) { dataObject[eventStreamMember] = await this.deserializeEventStream({ response, responseSchema: ns, initialResponseContainer: dataObject, }); } else { const bytes = await collectBody(response.body, context); if (bytes.byteLength > 0) { Object.assign(dataObject, await deserializer.read(ns, bytes)); } } dataObject.$metadata = this.deserializeMetadata(response); return dataObject; } }