UNPKG

@scloud/lambda-local

Version:

Run typical Lambda handlers locally.

81 lines 9.67 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.sqsLocal = void 0; // eslint-disable-next-line import/no-extraneous-dependencies const express_1 = __importDefault(require("express")); const eventTemplate = { Records: [ { body: '', awsRegion: '', eventSource: '', eventSourceARN: '', md5OfBody: '', messageAttributes: {}, messageId: '1', receiptHandle: '', attributes: { ApproximateFirstReceiveTimestamp: '', ApproximateReceiveCount: '', SenderId: '', SentTimestamp: '', }, }, ], }; const contextTemplate = { awsRequestId: '', callbackWaitsForEmptyEventLoop: false, functionName: 'test', functionVersion: '', invokedFunctionArn: '', logGroupName: '', logStreamName: '', memoryLimitInMB: '', getRemainingTimeInMillis: () => 0, done: () => { }, fail: () => { }, succeed: () => { }, }; // eslint-disable-next-line no-unused-vars function sqsLocal(handler) { const port = +(process.env.port || '3000'); const app = (0, express_1.default)(); // https://stackoverflow.com/questions/12345166/how-to-force-parse-request-body-as-plain-text-instead-of-json-in-express app.use(express_1.default.text({ type: '*/*' })); app.post('/*', async (req, res) => { try { // Print out the event that will be sent to the handler console.log('Event:'); const event = { ...eventTemplate, body: req.body }; console.log(JSON.stringify(event)); Object.keys(event.Records[0]).forEach((key) => { console.log(` - ${key}: ${JSON.stringify(event.Records[0][key])}`); }); // Invoke the function handler: const result = await handler(event, contextTemplate); if (result) { console.log('Result:'); Object.keys(result).forEach((key) => { console.log(` - ${key}: ${JSON.stringify(result[key])}`); }); } // Send the response res.status(200).send(JSON.stringify(result.batchItemFailures)); } catch (e) { // Log the error and send a 500 response console.log(e); console.log(e.stack); res.status(500).send(`${e}`); } }); app.listen(port, () => { console.log(`Lambda handler can be invoked via POST http://localhost:${port}. The request body will be sent as an SQS message body`); }); } exports.sqsLocal = sqsLocal; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3FzTG9jYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3FzTG9jYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsNkRBQTZEO0FBQzdELHNEQUFxRDtBQUtyRCxNQUFNLGFBQWEsR0FBYTtJQUM5QixPQUFPLEVBQUU7UUFDUDtZQUNFLElBQUksRUFBRSxFQUFFO1lBQ1IsU0FBUyxFQUFFLEVBQUU7WUFDYixXQUFXLEVBQUUsRUFBRTtZQUNmLGNBQWMsRUFBRSxFQUFFO1lBQ2xCLFNBQVMsRUFBRSxFQUFFO1lBQ2IsaUJBQWlCLEVBQUUsRUFBRTtZQUNyQixTQUFTLEVBQUUsR0FBRztZQUNkLGFBQWEsRUFBRSxFQUFFO1lBQ2pCLFVBQVUsRUFBRTtnQkFDVixnQ0FBZ0MsRUFBRSxFQUFFO2dCQUNwQyx1QkFBdUIsRUFBRSxFQUFFO2dCQUMzQixRQUFRLEVBQUUsRUFBRTtnQkFDWixhQUFhLEVBQUUsRUFBRTthQUNsQjtTQUNGO0tBQ0Y7Q0FDRixDQUFDO0FBRUYsTUFBTSxlQUFlLEdBQVk7SUFDL0IsWUFBWSxFQUFFLEVBQUU7SUFDaEIsOEJBQThCLEVBQUUsS0FBSztJQUNyQyxZQUFZLEVBQUUsTUFBTTtJQUNwQixlQUFlLEVBQUUsRUFBRTtJQUNuQixrQkFBa0IsRUFBRSxFQUFFO0lBQ3RCLFlBQVksRUFBRSxFQUFFO0lBQ2hCLGFBQWEsRUFBRSxFQUFFO0lBQ2pCLGVBQWUsRUFBRSxFQUFFO0lBQ25CLHdCQUF3QixFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDakMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDZixJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUNmLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0NBQ25CLENBQUM7QUFFRiwwQ0FBMEM7QUFDMUMsU0FBZ0IsUUFBUSxDQUFDLE9BQXlFO0lBQ2hHLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQztJQUMzQyxNQUFNLEdBQUcsR0FBRyxJQUFBLGlCQUFPLEdBQUUsQ0FBQztJQUV0Qix3SEFBd0g7SUFDeEgsR0FBRyxDQUFDLEdBQUcsQ0FBQyxpQkFBTyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFdkMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQVksRUFBRSxHQUFhLEVBQUUsRUFBRTtRQUNuRCxJQUFJLENBQUM7WUFDSCx1REFBdUQ7WUFDdkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0QixNQUFNLEtBQUssR0FBRyxFQUFFLEdBQUcsYUFBYSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDbkMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQzVDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQXNCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN4RixDQUFDLENBQUMsQ0FBQztZQUVILCtCQUErQjtZQUMvQixNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFFckQsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN2QixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQTZCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDckYsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQsb0JBQW9CO1lBQ3BCLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLHdDQUF3QztZQUN4QyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBRSxDQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRTtRQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLDJEQUEyRCxJQUFJLHdEQUF3RCxDQUFDLENBQUM7SUFDdkksQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBeENELDRCQXdDQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcbmltcG9ydCBleHByZXNzLCB7IFJlcXVlc3QsIFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQge1xuICBDb250ZXh0LCBTUVNCYXRjaFJlc3BvbnNlLCBTUVNFdmVudCwgU1FTUmVjb3JkLFxufSBmcm9tICdhd3MtbGFtYmRhJztcblxuY29uc3QgZXZlbnRUZW1wbGF0ZTogU1FTRXZlbnQgPSB7XG4gIFJlY29yZHM6IFtcbiAgICB7XG4gICAgICBib2R5OiAnJyxcbiAgICAgIGF3c1JlZ2lvbjogJycsXG4gICAgICBldmVudFNvdXJjZTogJycsXG4gICAgICBldmVudFNvdXJjZUFSTjogJycsXG4gICAgICBtZDVPZkJvZHk6ICcnLFxuICAgICAgbWVzc2FnZUF0dHJpYnV0ZXM6IHt9LFxuICAgICAgbWVzc2FnZUlkOiAnMScsXG4gICAgICByZWNlaXB0SGFuZGxlOiAnJyxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgQXBwcm94aW1hdGVGaXJzdFJlY2VpdmVUaW1lc3RhbXA6ICcnLFxuICAgICAgICBBcHByb3hpbWF0ZVJlY2VpdmVDb3VudDogJycsXG4gICAgICAgIFNlbmRlcklkOiAnJyxcbiAgICAgICAgU2VudFRpbWVzdGFtcDogJycsXG4gICAgICB9LFxuICAgIH0sXG4gIF0sXG59O1xuXG5jb25zdCBjb250ZXh0VGVtcGxhdGU6IENvbnRleHQgPSB7XG4gIGF3c1JlcXVlc3RJZDogJycsXG4gIGNhbGxiYWNrV2FpdHNGb3JFbXB0eUV2ZW50TG9vcDogZmFsc2UsXG4gIGZ1bmN0aW9uTmFtZTogJ3Rlc3QnLFxuICBmdW5jdGlvblZlcnNpb246ICcnLFxuICBpbnZva2VkRnVuY3Rpb25Bcm46ICcnLFxuICBsb2dHcm91cE5hbWU6ICcnLFxuICBsb2dTdHJlYW1OYW1lOiAnJyxcbiAgbWVtb3J5TGltaXRJbk1COiAnJyxcbiAgZ2V0UmVtYWluaW5nVGltZUluTWlsbGlzOiAoKSA9PiAwLFxuICBkb25lOiAoKSA9PiB7IH0sXG4gIGZhaWw6ICgpID0+IHsgfSxcbiAgc3VjY2VlZDogKCkgPT4geyB9LFxufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5leHBvcnQgZnVuY3Rpb24gc3FzTG9jYWwoaGFuZGxlcjogKGV2ZW50OiBTUVNFdmVudCwgY29udGV4dDogQ29udGV4dCkgPT4gUHJvbWlzZTxTUVNCYXRjaFJlc3BvbnNlPikge1xuICBjb25zdCBwb3J0ID0gKyhwcm9jZXNzLmVudi5wb3J0IHx8ICczMDAwJyk7XG4gIGNvbnN0IGFwcCA9IGV4cHJlc3MoKTtcblxuICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMjM0NTE2Ni9ob3ctdG8tZm9yY2UtcGFyc2UtcmVxdWVzdC1ib2R5LWFzLXBsYWluLXRleHQtaW5zdGVhZC1vZi1qc29uLWluLWV4cHJlc3NcbiAgYXBwLnVzZShleHByZXNzLnRleHQoeyB0eXBlOiAnKi8qJyB9KSk7XG5cbiAgYXBwLnBvc3QoJy8qJywgYXN5bmMgKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBQcmludCBvdXQgdGhlIGV2ZW50IHRoYXQgd2lsbCBiZSBzZW50IHRvIHRoZSBoYW5kbGVyXG4gICAgICBjb25zb2xlLmxvZygnRXZlbnQ6Jyk7XG4gICAgICBjb25zdCBldmVudCA9IHsgLi4uZXZlbnRUZW1wbGF0ZSwgYm9keTogcmVxLmJvZHkgfTtcbiAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGV2ZW50KSk7XG4gICAgICBPYmplY3Qua2V5cyhldmVudC5SZWNvcmRzWzBdKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coYCAtICR7a2V5fTogJHtKU09OLnN0cmluZ2lmeShldmVudC5SZWNvcmRzWzBdW2tleSBhcyBrZXlvZiBTUVNSZWNvcmRdKX1gKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBJbnZva2UgdGhlIGZ1bmN0aW9uIGhhbmRsZXI6XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyKGV2ZW50LCBjb250ZXh0VGVtcGxhdGUpO1xuXG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdSZXN1bHQ6Jyk7XG4gICAgICAgIE9iamVjdC5rZXlzKHJlc3VsdCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAtICR7a2V5fTogJHtKU09OLnN0cmluZ2lmeShyZXN1bHRba2V5IGFzIGtleW9mIFNRU0JhdGNoUmVzcG9uc2VdKX1gKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNlbmQgdGhlIHJlc3BvbnNlXG4gICAgICByZXMuc3RhdHVzKDIwMCkuc2VuZChKU09OLnN0cmluZ2lmeShyZXN1bHQuYmF0Y2hJdGVtRmFpbHVyZXMpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBMb2cgdGhlIGVycm9yIGFuZCBzZW5kIGEgNTAwIHJlc3BvbnNlXG4gICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgIGNvbnNvbGUubG9nKChlIGFzIEVycm9yKS5zdGFjayk7XG4gICAgICByZXMuc3RhdHVzKDUwMCkuc2VuZChgJHtlfWApO1xuICAgIH1cbiAgfSk7XG5cbiAgYXBwLmxpc3Rlbihwb3J0LCAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coYExhbWJkYSBoYW5kbGVyIGNhbiBiZSBpbnZva2VkIHZpYSBQT1NUIGh0dHA6Ly9sb2NhbGhvc3Q6JHtwb3J0fS4gVGhlIHJlcXVlc3QgYm9keSB3aWxsIGJlIHNlbnQgYXMgYW4gU1FTIG1lc3NhZ2UgYm9keWApO1xuICB9KTtcbn1cbiJdfQ==