UNPKG

@multicloud/sls-aws

Version:

Amazon AWS specific middleware and components for Serverless @multicloud.

48 lines (47 loc) 2.25 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const sls_core_1 = require("@multicloud/sls-core"); /** * Normalizes S3 messages into a generic records array */ exports.SimpleStorageMiddleware = () => (context, next) => __awaiter(this, void 0, void 0, function* () { if (context.providerType === "aws") { const logger = context.logger || new sls_core_1.ConsoleLogger(); if (!context.storage) { logger.error("Storage API missing from CloudContext. Ensure the CloudStorage middleware has been registered before the SimpleStorageMiddleware"); } const tasks = context.runtime.event.Records.map((message) => __awaiter(this, void 0, void 0, function* () { let stream; try { stream = yield context.storage.read({ container: message.s3.bucket.name, path: message.s3.object.key, }); } catch (e) { logger.warn(`Error reading object, container: ${message.s3.bucket.name}, path: ${message.s3.object.key}`); logger.error(e); stream = null; } const cloudMessage = { id: `${message.s3.bucket.name}/${message.s3.object.key}`, body: stream, timestamp: new Date(message.eventTime), eventName: message.eventName, eventSource: "aws:s3", }; return cloudMessage; })); const records = yield Promise.all(tasks); context.event = { records }; } yield next(); });