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