UNPKG

8.51 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.makeTrampoline = exports.INVOCATION_TEST_QUEUE = exports.filename = void 0;
4const aws_sdk_1 = require("aws-sdk");
5const process_1 = require("process");
6const error_1 = require("../error");
7const serialize_1 = require("../serialize");
8const aws_queue_1 = require("./aws-queue");
9const aws_shared_1 = require("./aws-shared");
10exports.filename = module.filename;
11exports.INVOCATION_TEST_QUEUE = "*test*";
12const CallIdAttribute = "callId";
13function errorCallback(err) {
14 if (err.message.match(/SIGKILL/)) {
15 return new error_1.FaastError({ cause: err, name: error_1.FaastErrorNames.EMEMORY }, "possibly out of memory");
16 }
17 return err;
18}
19function makeTrampoline(wrapper) {
20 async function trampoline(event, context) {
21 const startTime = Date.now();
22 const region = process_1.env.AWS_REGION;
23 context.callbackWaitsForEmptyEventLoop = false;
24 const executionId = context.awsRequestId;
25 const { logGroupName, logStreamName } = context;
26 const logUrl = (0, aws_shared_1.getExecutionLogUrl)(region, logGroupName, logStreamName, executionId);
27 const callingContext = {
28 startTime,
29 logUrl,
30 executionId,
31 instanceId: logStreamName
32 };
33 if (CallIdAttribute in event) {
34 const call = event;
35 const cc = { call, ...callingContext };
36 await execute(cc, wrapper);
37 }
38 else {
39 const snsEvent = event;
40 for (const record of snsEvent.Records) {
41 const call = (0, serialize_1.deserialize)(record.Sns.Message);
42 const cc = { call, ...callingContext };
43 await execute(cc, wrapper);
44 }
45 }
46 }
47 return { trampoline };
48}
49exports.makeTrampoline = makeTrampoline;
50async function execute(cc, wrapper) {
51 const { call } = cc;
52 const { ResponseQueueId: Queue } = call;
53 if (Queue === exports.INVOCATION_TEST_QUEUE) {
54 return;
55 }
56 const region = process_1.env.AWS_REGION;
57 const sqs = new aws_sdk_1.SQS({ apiVersion: "2012-11-05", maxRetries: 6, region });
58 await wrapper.execute(cc, {
59 errorCallback,
60 onMessage: msg => (0, aws_queue_1.sendResponseQueueMessage)(sqs, Queue, msg)
61 });
62}
63//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXRyYW1wb2xpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2F3cy10cmFtcG9saW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFDQUE4QjtBQUM5QixxQ0FBOEI7QUFDOUIsb0NBQXVEO0FBQ3ZELDRDQUEyQztBQUUzQywyQ0FBdUQ7QUFDdkQsNkNBQWtEO0FBRXJDLFFBQUEsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7QUFFM0IsUUFBQSxxQkFBcUIsR0FBRyxRQUFRLENBQUM7QUFFOUMsTUFBTSxlQUFlLEdBQTBDLFFBQVEsQ0FBQztBQUV4RSxTQUFTLGFBQWEsQ0FBQyxHQUFVO0lBQzdCLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDOUIsT0FBTyxJQUFJLGtCQUFVLENBQ2pCLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsdUJBQWUsQ0FBQyxPQUFPLEVBQUUsRUFDN0Msd0JBQXdCLENBQzNCLENBQUM7S0FDTDtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQztBQUVELFNBQWdCLGNBQWMsQ0FBQyxPQUFnQjtJQUMzQyxLQUFLLFVBQVUsVUFBVSxDQUFDLEtBQThCLEVBQUUsT0FBZ0I7UUFDdEUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzdCLE1BQU0sTUFBTSxHQUFHLGFBQUcsQ0FBQyxVQUFXLENBQUM7UUFDL0IsT0FBTyxDQUFDLDhCQUE4QixHQUFHLEtBQUssQ0FBQztRQUMvQyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDO1FBQ3pDLE1BQU0sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQ2hELE1BQU0sTUFBTSxHQUFHLElBQUEsK0JBQWtCLEVBQzdCLE1BQU0sRUFDTixZQUFZLEVBQ1osYUFBYSxFQUNiLFdBQVcsQ0FDZCxDQUFDO1FBQ0YsTUFBTSxjQUFjLEdBQUc7WUFDbkIsU0FBUztZQUNULE1BQU07WUFDTixXQUFXO1lBQ1gsVUFBVSxFQUFFLGFBQWE7U0FDNUIsQ0FBQztRQUNGLElBQUksZUFBZSxJQUFJLEtBQUssRUFBRTtZQUMxQixNQUFNLElBQUksR0FBRyxLQUFxQixDQUFDO1lBQ25DLE1BQU0sRUFBRSxHQUFtQixFQUFFLElBQUksRUFBRSxHQUFHLGNBQWMsRUFBRSxDQUFDO1lBQ3ZELE1BQU0sT0FBTyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUM5QjthQUFNO1lBQ0gsTUFBTSxRQUFRLEdBQUcsS0FBaUIsQ0FBQztZQUNuQyxLQUFLLE1BQU0sTUFBTSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUU7Z0JBQ25DLE1BQU0sSUFBSSxHQUFpQixJQUFBLHVCQUFXLEVBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDM0QsTUFBTSxFQUFFLEdBQW1CLEVBQUUsSUFBSSxFQUFFLEdBQUcsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZELE1BQU0sT0FBTyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQzthQUM5QjtTQUNKO0lBQ0wsQ0FBQztJQUNELE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUMxQixDQUFDO0FBakNELHdDQWlDQztBQUVELEtBQUssVUFBVSxPQUFPLENBQUMsRUFBa0IsRUFBRSxPQUFnQjtJQUN2RCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3BCLE1BQU0sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3hDLElBQUksS0FBSyxLQUFLLDZCQUFxQixFQUFFO1FBQ2pDLE9BQU87S0FDVjtJQUNELE1BQU0sTUFBTSxHQUFHLGFBQUcsQ0FBQyxVQUFXLENBQUM7SUFDL0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxhQUFHLENBQUMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN6RSxNQUFNLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFO1FBQ3RCLGFBQWE7UUFDYixTQUFTLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFBLG9DQUF3QixFQUFDLEdBQUcsRUFBRSxLQUFNLEVBQUUsR0FBRyxDQUFDO0tBQy9ELENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb250ZXh0LCBTTlNFdmVudCB9IGZyb20gXCJhd3MtbGFtYmRhXCI7XG5pbXBvcnQgeyBTUVMgfSBmcm9tIFwiYXdzLXNka1wiO1xuaW1wb3J0IHsgZW52IH0gZnJvbSBcInByb2Nlc3NcIjtcbmltcG9ydCB7IEZhYXN0RXJyb3IsIEZhYXN0RXJyb3JOYW1lcyB9IGZyb20gXCIuLi9lcnJvclwiO1xuaW1wb3J0IHsgZGVzZXJpYWxpemUgfSBmcm9tIFwiLi4vc2VyaWFsaXplXCI7XG5pbXBvcnQgeyBDYWxsaW5nQ29udGV4dCwgRnVuY3Rpb25DYWxsLCBXcmFwcGVyIH0gZnJvbSBcIi4uL3dyYXBwZXJcIjtcbmltcG9ydCB7IHNlbmRSZXNwb25zZVF1ZXVlTWVzc2FnZSB9IGZyb20gXCIuL2F3cy1xdWV1ZVwiO1xuaW1wb3J0IHsgZ2V0RXhlY3V0aW9uTG9nVXJsIH0gZnJvbSBcIi4vYXdzLXNoYXJlZFwiO1xuXG5leHBvcnQgY29uc3QgZmlsZW5hbWUgPSBtb2R1bGUuZmlsZW5hbWU7XG5cbmV4cG9ydCBjb25zdCBJTlZPQ0FUSU9OX1RFU1RfUVVFVUUgPSBcIip0ZXN0KlwiO1xuXG5jb25zdCBDYWxsSWRBdHRyaWJ1dGU6IEV4dHJhY3Q8a2V5b2YgRnVuY3Rpb25DYWxsLCBcImNhbGxJZFwiPiA9IFwiY2FsbElkXCI7XG5cbmZ1bmN0aW9uIGVycm9yQ2FsbGJhY2soZXJyOiBFcnJvcikge1xuICAgIGlmIChlcnIubWVzc2FnZS5tYXRjaCgvU0lHS0lMTC8pKSB7XG4gICAgICAgIHJldHVybiBuZXcgRmFhc3RFcnJvcihcbiAgICAgICAgICAgIHsgY2F1c2U6IGVyciwgbmFtZTogRmFhc3RFcnJvck5hbWVzLkVNRU1PUlkgfSxcbiAgICAgICAgICAgIFwicG9zc2libHkgb3V0IG9mIG1lbW9yeVwiXG4gICAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBlcnI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlVHJhbXBvbGluZSh3cmFwcGVyOiBXcmFwcGVyKSB7XG4gICAgYXN5bmMgZnVuY3Rpb24gdHJhbXBvbGluZShldmVudDogRnVuY3Rpb25DYWxsIHwgU05TRXZlbnQsIGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgcmVnaW9uID0gZW52LkFXU19SRUdJT04hO1xuICAgICAgICBjb250ZXh0LmNhbGxiYWNrV2FpdHNGb3JFbXB0eUV2ZW50TG9vcCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBleGVjdXRpb25JZCA9IGNvbnRleHQuYXdzUmVxdWVzdElkO1xuICAgICAgICBjb25zdCB7IGxvZ0dyb3VwTmFtZSwgbG9nU3RyZWFtTmFtZSB9ID0gY29udGV4dDtcbiAgICAgICAgY29uc3QgbG9nVXJsID0gZ2V0RXhlY3V0aW9uTG9nVXJsKFxuICAgICAgICAgICAgcmVnaW9uLFxuICAgICAgICAgICAgbG9nR3JvdXBOYW1lLFxuICAgICAgICAgICAgbG9nU3RyZWFtTmFtZSxcbiAgICAgICAgICAgIGV4ZWN1dGlvbklkXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNhbGxpbmdDb250ZXh0ID0ge1xuICAgICAgICAgICAgc3RhcnRUaW1lLFxuICAgICAgICAgICAgbG9nVXJsLFxuICAgICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgICBpbnN0YW5jZUlkOiBsb2dTdHJlYW1OYW1lXG4gICAgICAgIH07XG4gICAgICAgIGlmIChDYWxsSWRBdHRyaWJ1dGUgaW4gZXZlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbGwgPSBldmVudCBhcyBGdW5jdGlvbkNhbGw7XG4gICAgICAgICAgICBjb25zdCBjYzogQ2FsbGluZ0NvbnRleHQgPSB7IGNhbGwsIC4uLmNhbGxpbmdDb250ZXh0IH07XG4gICAgICAgICAgICBhd2FpdCBleGVjdXRlKGNjLCB3cmFwcGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNuc0V2ZW50ID0gZXZlbnQgYXMgU05TRXZlbnQ7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBzbnNFdmVudC5SZWNvcmRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2FsbDogRnVuY3Rpb25DYWxsID0gZGVzZXJpYWxpemUocmVjb3JkLlNucy5NZXNzYWdlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjYzogQ2FsbGluZ0NvbnRleHQgPSB7IGNhbGwsIC4uLmNhbGxpbmdDb250ZXh0IH07XG4gICAgICAgICAgICAgICAgYXdhaXQgZXhlY3V0ZShjYywgd3JhcHBlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgdHJhbXBvbGluZSB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlKGNjOiBDYWxsaW5nQ29udGV4dCwgd3JhcHBlcjogV3JhcHBlcikge1xuICAgIGNvbnN0IHsgY2FsbCB9ID0gY2M7XG4gICAgY29uc3QgeyBSZXNwb25zZVF1ZXVlSWQ6IFF1ZXVlIH0gPSBjYWxsO1xuICAgIGlmIChRdWV1ZSA9PT0gSU5WT0NBVElPTl9URVNUX1FVRVVFKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVnaW9uID0gZW52LkFXU19SRUdJT04hO1xuICAgIGNvbnN0IHNxcyA9IG5ldyBTUVMoeyBhcGlWZXJzaW9uOiBcIjIwMTItMTEtMDVcIiwgbWF4UmV0cmllczogNiwgcmVnaW9uIH0pO1xuICAgIGF3YWl0IHdyYXBwZXIuZXhlY3V0ZShjYywge1xuICAgICAgICBlcnJvckNhbGxiYWNrLFxuICAgICAgICBvbk1lc3NhZ2U6IG1zZyA9PiBzZW5kUmVzcG9uc2VRdWV1ZU1lc3NhZ2Uoc3FzLCBRdWV1ZSEsIG1zZylcbiAgICB9KTtcbn1cbiJdfQ==
\No newline at end of file