UNPKG

@riddance/aws-host

Version:

This is `@riddance/aws-host`, a TypeScript AWS Lambda host adapter for the Riddance serverless framework. It provides AWS-specific implementations for HTTP, event, timer, and context handling in Lambda functions by providing Lambda entry points that trans

49 lines 11.3 kB
import { clientFromHeaders, executeRequest } from '@riddance/host/http'; import { measure } from '@riddance/host/lib/http'; import { getHandlers } from '@riddance/host/registry'; import { createAwsContext } from './context.js'; export { setMeta } from '@riddance/host/registry'; export * from '@riddance/service/http'; function isHttpRequest(request) { return 'version' in request; } async function asyncIndex(req, awsContext, callback) { const [handler] = getHandlers('http'); if (!handler) { throw new Error('No http handler registered.'); } const { log, context, success, flush } = createAwsContext(awsContext, { default: 15 }, req.stageVariables, clientFromHeaders(req.headers), handler.config, handler.meta, awsContext.invokedFunctionArn.split(':')[4]); if (req.body && req.isBase64Encoded) { req.body = Buffer.from(req.body, 'base64').toString('utf-8'); } const result = await executeRequest(log, context, handler, { headers: req.headers, uri: isHttpRequest(req) ? `https://${req.requestContext.domainName}${req.rawPath}${req.rawQueryString ? '?' + req.rawQueryString : ''}` : `https://${req.requestContext.domainName}${req.requestContext.path}`, json: req.body ? JSON.parse(req.body) : undefined, }, success); try { callback(undefined, Buffer.isBuffer(result.body) ? { statusCode: result.status, headers: result.headers, body: result.body.toString('base64'), isBase64Encoded: true, } : { statusCode: result.status, headers: result.headers, body: result.body, }); } catch (e) { log.fatal('Error sending response to Lambda.', e); } await measure(log.enrichReserved({ meta: handler.meta }), 'flush', flush); } export function awsHandler(req, context, callback) { context.callbackWaitsForEmptyEventLoop = false; asyncIndex(req, context, callback).catch((e) => setImmediate(callback, e, undefined)); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImh0dHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3ZFLE9BQU8sRUFBUSxPQUFPLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDckQsT0FBTyxFQUFjLGdCQUFnQixFQUFFLE1BQU0sY0FBYyxDQUFBO0FBRTNELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUNqRCxjQUFjLHdCQUF3QixDQUFBO0FBc0V0QyxTQUFTLGFBQWEsQ0FBQyxPQUFxQjtJQUN4QyxPQUFPLFNBQVMsSUFBSSxPQUFPLENBQUE7QUFDL0IsQ0FBQztBQUVELEtBQUssVUFBVSxVQUFVLENBQ3JCLEdBQWlCLEVBQ2pCLFVBQXNCLEVBQ3RCLFFBQXNFO0lBRXRFLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDckMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFBO0lBQ2xELENBQUM7SUFDRCxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsZ0JBQWdCLENBQ3JELFVBQVUsRUFDVixFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFDZixHQUFHLENBQUMsY0FBYyxFQUNsQixpQkFBaUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQzlCLE9BQU8sQ0FBQyxNQUFNLEVBQ2QsT0FBTyxDQUFDLElBQUksRUFDWixVQUFVLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUM5QyxDQUFBO0lBRUQsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNsQyxHQUFHLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDaEUsQ0FBQztJQUNELE1BQU0sTUFBTSxHQUFHLE1BQU0sY0FBYyxDQUMvQixHQUFHLEVBQ0gsT0FBTyxFQUNQLE9BQU8sRUFDUDtRQUNJLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTztRQUNwQixHQUFHLEVBQUUsYUFBYSxDQUFDLEdBQUcsQ0FBQztZQUNuQixDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsY0FBYyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsT0FBTyxHQUNsRCxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFDcEQsRUFBRTtZQUNKLENBQUMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxjQUFjLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFO1FBQzFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUztLQUM5RCxFQUNELE9BQU8sQ0FDVixDQUFBO0lBRUQsSUFBSSxDQUFDO1FBQ0QsUUFBUSxDQUNKLFNBQVMsRUFDVCxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDeEIsQ0FBQyxDQUFDO2dCQUNJLFVBQVUsRUFBRSxNQUFNLENBQUMsTUFBTTtnQkFDekIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO2dCQUN2QixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO2dCQUNwQyxlQUFlLEVBQUUsSUFBSTthQUN4QjtZQUNILENBQUMsQ0FBQztnQkFDSSxVQUFVLEVBQUUsTUFBTSxDQUFDLE1BQU07Z0JBQ3pCLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztnQkFDdkIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2FBQ3BCLENBQ1YsQ0FBQTtJQUNMLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1QsR0FBRyxDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUNyRCxDQUFDO0lBRUQsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUE7QUFDN0UsQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQ3RCLEdBQXFCLEVBQ3JCLE9BQW1CLEVBQ25CLFFBQXNFO0lBRXRFLE9BQU8sQ0FBQyw4QkFBOEIsR0FBRyxLQUFLLENBQUE7SUFDOUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBVSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFBO0FBQ2xHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjbGllbnRGcm9tSGVhZGVycywgZXhlY3V0ZVJlcXVlc3QgfSBmcm9tICdAcmlkZGFuY2UvaG9zdC9odHRwJ1xuaW1wb3J0IHsgSnNvbiwgbWVhc3VyZSB9IGZyb20gJ0ByaWRkYW5jZS9ob3N0L2xpYi9odHRwJ1xuaW1wb3J0IHsgZ2V0SGFuZGxlcnMgfSBmcm9tICdAcmlkZGFuY2UvaG9zdC9yZWdpc3RyeSdcbmltcG9ydCB7IEF3c0NvbnRleHQsIGNyZWF0ZUF3c0NvbnRleHQgfSBmcm9tICcuL2NvbnRleHQuanMnXG5cbmV4cG9ydCB7IHNldE1ldGEgfSBmcm9tICdAcmlkZGFuY2UvaG9zdC9yZWdpc3RyeSdcbmV4cG9ydCAqIGZyb20gJ0ByaWRkYW5jZS9zZXJ2aWNlL2h0dHAnXG5cbnR5cGUgSHR0cFJlc3BvbnNlID0ge1xuICAgIHN0YXR1c0NvZGU6IHN0cmluZyB8IG51bWJlclxuICAgIGhlYWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XG4gICAgbXVsdGlWYWx1ZUhlYWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH1cbiAgICBib2R5Pzogc3RyaW5nXG4gICAgaXNCYXNlNjRFbmNvZGVkPzogYm9vbGVhblxufVxuXG50eXBlIENvbW1vblJlcXVlc3RFdmVudCA9IHtcbiAgICBwYXRoUGFyYW1ldGVyczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVxuICAgIHN0YWdlVmFyaWFibGVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XG4gICAgYm9keT86IHN0cmluZ1xuICAgIGlzQmFzZTY0RW5jb2RlZDogYm9vbGVhblxufVxuXG50eXBlIFJlc3RSZXF1ZXN0RXZlbnQgPSB7XG4gICAgcmVzb3VyY2U6IHN0cmluZ1xuICAgIHBhdGg6IHN0cmluZ1xuICAgIGh0dHBNZXRob2Q6IHN0cmluZ1xuICAgIHJlcXVlc3RDb250ZXh0OiB7XG4gICAgICAgIHJlc291cmNlUGF0aDogc3RyaW5nXG4gICAgICAgIGh0dHBNZXRob2Q6IHN0cmluZ1xuICAgICAgICBkb21haW5OYW1lOiBzdHJpbmdcbiAgICAgICAgcGF0aDogc3RyaW5nXG4gICAgICAgIHByb3RvY29sOiBzdHJpbmdcbiAgICAgICAgc3RhZ2U6IHN0cmluZ1xuICAgICAgICByZXF1ZXN0SWQ6IHN0cmluZ1xuICAgICAgICBpZGVudGl0eToge1xuICAgICAgICAgICAgYWNjb3VudElkOiBzdHJpbmdcbiAgICAgICAgICAgIHNvdXJjZUlwOiBzdHJpbmdcbiAgICAgICAgICAgIHVzZXJBZ2VudDogc3RyaW5nXG4gICAgICAgIH1cbiAgICB9XG4gICAgaGVhZGVyczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVxuICAgIG11bHRpVmFsdWVIZWFkZXJzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH1cbiAgICBtdWx0aVZhbHVlUXVlcnlTdHJpbmdQYXJhbWV0ZXJzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH1cbn0gJiBDb21tb25SZXF1ZXN0RXZlbnRcblxudHlwZSBIdHRwUmVxdWVzdEV2ZW50ID0ge1xuICAgIHZlcnNpb246ICcyLjAnXG4gICAgcm91dGVLZXk6IHN0cmluZ1xuICAgIHJhd1BhdGg6IHN0cmluZ1xuICAgIHJhd1F1ZXJ5U3RyaW5nOiBzdHJpbmdcbiAgICBoZWFkZXJzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XG4gICAgY29va2llczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVxuICAgIHF1ZXJ5U3RyaW5nUGFyYW1ldGVyczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVxuICAgIHJlcXVlc3RDb250ZXh0OiB7XG4gICAgICAgIGFjY291bnRJZDogc3RyaW5nXG4gICAgICAgIGFwaUlkOiBzdHJpbmdcbiAgICAgICAgZG9tYWluTmFtZTogc3RyaW5nXG4gICAgICAgIGRvbWFpblByZWZpeDogc3RyaW5nXG4gICAgICAgIGh0dHA6IHtcbiAgICAgICAgICAgIG1ldGhvZDogc3RyaW5nXG4gICAgICAgICAgICBwYXRoOiBzdHJpbmdcbiAgICAgICAgICAgIHByb3RvY29sOiBzdHJpbmdcbiAgICAgICAgICAgIHNvdXJjZUlwOiBzdHJpbmdcbiAgICAgICAgICAgIHVzZXJBZ2VudDogc3RyaW5nXG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdElkOiBzdHJpbmdcbiAgICAgICAgcm91dGVLZXk6IHN0cmluZ1xuICAgICAgICBzdGFnZTogc3RyaW5nXG4gICAgICAgIHRpbWU6IHN0cmluZ1xuICAgICAgICB0aW1lRXBvY2g6IG51bWJlclxuICAgIH1cbn0gJiBDb21tb25SZXF1ZXN0RXZlbnRcblxudHlwZSBSZXF1ZXN0RXZlbnQgPSBIdHRwUmVxdWVzdEV2ZW50IHwgUmVzdFJlcXVlc3RFdmVudFxuXG5mdW5jdGlvbiBpc0h0dHBSZXF1ZXN0KHJlcXVlc3Q6IFJlcXVlc3RFdmVudCkge1xuICAgIHJldHVybiAndmVyc2lvbicgaW4gcmVxdWVzdFxufVxuXG5hc3luYyBmdW5jdGlvbiBhc3luY0luZGV4KFxuICAgIHJlcTogUmVxdWVzdEV2ZW50LFxuICAgIGF3c0NvbnRleHQ6IEF3c0NvbnRleHQsXG4gICAgY2FsbGJhY2s6IChlcnJvcjogdW5rbm93biwgcmVzcG9uc2U6IEh0dHBSZXNwb25zZSB8IHVuZGVmaW5lZCkgPT4gdm9pZCxcbikge1xuICAgIGNvbnN0IFtoYW5kbGVyXSA9IGdldEhhbmRsZXJzKCdodHRwJylcbiAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBodHRwIGhhbmRsZXIgcmVnaXN0ZXJlZC4nKVxuICAgIH1cbiAgICBjb25zdCB7IGxvZywgY29udGV4dCwgc3VjY2VzcywgZmx1c2ggfSA9IGNyZWF0ZUF3c0NvbnRleHQoXG4gICAgICAgIGF3c0NvbnRleHQsXG4gICAgICAgIHsgZGVmYXVsdDogMTUgfSxcbiAgICAgICAgcmVxLnN0YWdlVmFyaWFibGVzLFxuICAgICAgICBjbGllbnRGcm9tSGVhZGVycyhyZXEuaGVhZGVycyksXG4gICAgICAgIGhhbmRsZXIuY29uZmlnLFxuICAgICAgICBoYW5kbGVyLm1ldGEsXG4gICAgICAgIGF3c0NvbnRleHQuaW52b2tlZEZ1bmN0aW9uQXJuLnNwbGl0KCc6JylbNF0sXG4gICAgKVxuXG4gICAgaWYgKHJlcS5ib2R5ICYmIHJlcS5pc0Jhc2U2NEVuY29kZWQpIHtcbiAgICAgICAgcmVxLmJvZHkgPSBCdWZmZXIuZnJvbShyZXEuYm9keSwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCd1dGYtOCcpXG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWN1dGVSZXF1ZXN0KFxuICAgICAgICBsb2csXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGhhbmRsZXIsXG4gICAgICAgIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHJlcS5oZWFkZXJzLFxuICAgICAgICAgICAgdXJpOiBpc0h0dHBSZXF1ZXN0KHJlcSlcbiAgICAgICAgICAgICAgICA/IGBodHRwczovLyR7cmVxLnJlcXVlc3RDb250ZXh0LmRvbWFpbk5hbWV9JHtyZXEucmF3UGF0aH0ke1xuICAgICAgICAgICAgICAgICAgICAgIHJlcS5yYXdRdWVyeVN0cmluZyA/ICc/JyArIHJlcS5yYXdRdWVyeVN0cmluZyA6ICcnXG4gICAgICAgICAgICAgICAgICB9YFxuICAgICAgICAgICAgICAgIDogYGh0dHBzOi8vJHtyZXEucmVxdWVzdENvbnRleHQuZG9tYWluTmFtZX0ke3JlcS5yZXF1ZXN0Q29udGV4dC5wYXRofWAsXG4gICAgICAgICAgICBqc29uOiByZXEuYm9keSA/IChKU09OLnBhcnNlKHJlcS5ib2R5KSBhcyBKc29uKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgICAgc3VjY2VzcyxcbiAgICApXG5cbiAgICB0cnkge1xuICAgICAgICBjYWxsYmFjayhcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIEJ1ZmZlci5pc0J1ZmZlcihyZXN1bHQuYm9keSlcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiByZXN1bHQuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHJlc3VsdC5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IHJlc3VsdC5ib2R5LnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgICAgICAgICAgICAgICBpc0Jhc2U2NEVuY29kZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdHVzQ29kZTogcmVzdWx0LnN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiByZXN1bHQuaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgICBib2R5OiByZXN1bHQuYm9keSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgIClcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZy5mYXRhbCgnRXJyb3Igc2VuZGluZyByZXNwb25zZSB0byBMYW1iZGEuJywgZSlcbiAgICB9XG5cbiAgICBhd2FpdCBtZWFzdXJlKGxvZy5lbnJpY2hSZXNlcnZlZCh7IG1ldGE6IGhhbmRsZXIubWV0YSB9KSwgJ2ZsdXNoJywgZmx1c2gpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhd3NIYW5kbGVyKFxuICAgIHJlcTogSHR0cFJlcXVlc3RFdmVudCxcbiAgICBjb250ZXh0OiBBd3NDb250ZXh0LFxuICAgIGNhbGxiYWNrOiAoZXJyb3I6IHVua25vd24sIHJlc3BvbnNlOiBIdHRwUmVzcG9uc2UgfCB1bmRlZmluZWQpID0+IHZvaWQsXG4pIHtcbiAgICBjb250ZXh0LmNhbGxiYWNrV2FpdHNGb3JFbXB0eUV2ZW50TG9vcCA9IGZhbHNlXG4gICAgYXN5bmNJbmRleChyZXEsIGNvbnRleHQsIGNhbGxiYWNrKS5jYXRjaCgoZTogdW5rbm93bikgPT4gc2V0SW1tZWRpYXRlKGNhbGxiYWNrLCBlLCB1bmRlZmluZWQpKVxufVxuIl19