UNPKG

@geek-fun/serverless-adapter

Version:

Adapter for web frame work express, koa, springboot to run in serverless function as backend of apigateway cross multi cloud provider like aliyun, huawei

65 lines (64 loc) 2.37 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.constructFrameworkContext = void 0; const serverlessRequest_1 = __importDefault(require("./serverlessRequest")); const node_url_1 = __importDefault(require("node:url")); const common_1 = require("./common"); // const requestRemoteAddress = (event) => { // if (event.version === '2.0') { // return event.requestContext.http.sourceIp; // } // return event.requestContext.identity.sourceIp; // }; const requestBody = (event) => { if (!event.body) { return undefined; } const type = typeof event.body; if (Buffer.isBuffer(event.body)) { return event.body; } else if (type === 'string') { return Buffer.from(event.body, event.isBase64Encoded ? 'base64' : 'utf8'); } else if (type === 'object') { return Buffer.from(JSON.stringify(event.body)); } throw new Error(`Unexpected event.body type: ${typeof event.body}`); }; const requestHeaders = (event) => { const initialHeader = {}; // if (event.multiValueHeaders) { // Object.keys(event.multiValueHeaders).reduce((headers, key) => { // headers[key.toLowerCase()] = event.multiValueHeaders[key].join(', '); // return headers; // }, initialHeader); // } return Object.keys(event.headers ?? {}).reduce((headers, key) => { headers[key.toLowerCase()] = event.headers[key]; return headers; }, initialHeader); }; const constructFrameworkContext = (rawEvent, rawContext) => { (0, common_1.debug)(`constructFrameworkContext: ${JSON.stringify({ rawEvent, rawContext })}`); const event = JSON.parse(Buffer.from(rawEvent).toString()); const body = requestBody(event); const headers = requestHeaders(event); const request = new serverlessRequest_1.default({ method: event.httpMethod, path: event.path, headers, body, remoteAddress: '', url: node_url_1.default.format({ pathname: event.path, query: event.queryParameters, }), isBase64Encoded: event.isBase64Encoded, }); return { request }; }; exports.constructFrameworkContext = constructFrameworkContext;