UNPKG

@fogwarts/cfn-response

Version:

Helps you in sending http responses for lambda-based custom resources in AWS CloudFormation

84 lines (82 loc) 3.33 kB
var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __markAsModule = (target) => __defProp(target, "__esModule", { value: true }); var __export = (target, all) => { __markAsModule(target); for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __reExport = (target, module2, desc) => { if (module2 && typeof module2 === "object" || typeof module2 === "function") { for (let key of __getOwnPropNames(module2)) if (!__hasOwnProp.call(target, key) && key !== "default") __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable }); } return target; }; var __toModule = (module2) => { return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2); }; // index.ts __export(exports, { CustomResourceResponseStatus: () => CustomResourceResponseStatus, send: () => send }); var import_https = __toModule(require("https")); var import_url = __toModule(require("url")); var CustomResourceResponseStatus; (function(CustomResourceResponseStatus2) { CustomResourceResponseStatus2["success"] = "SUCCESS"; CustomResourceResponseStatus2["failed"] = "FAILED"; })(CustomResourceResponseStatus || (CustomResourceResponseStatus = {})); var send = async (props) => new Promise(async (resolve, reject) => { const url = new import_url.URL(props.event.ResponseURL); const responseBody = JSON.stringify({ Status: props.status, Reason: props.reason || `More information can be found by accessing the following CloudWatch Log Stream: ${props.context.logStreamName}`, PhysicalResourceId: props.physicalResourceId || props.context.logStreamName, StackId: props.event.StackId, RequestId: props.event.RequestId, LogicalResourceId: props.event.LogicalResourceId, Data: props.data }); const httpsRequest = (0, import_https.request)(url, { method: "PUT", port: 443, headers: { "content-type": "application/json", "content-length": responseBody.length } }, (response) => { console.log(`[cfn-response] Status code: ${response.statusCode}`); console.log(`[cfn-response] Status message: ${response.statusMessage}`); if (response.statusCode !== 200) { console.error(`[cfn-response] Invalid response status code ${response.statusCode}`); return resolve(); } response.on("end", () => { return resolve(); }); response.on("error", (err) => { console.error(`[cfn-response] Response error`); console.error(err); return resolve(); }); }); httpsRequest.on("error", (err) => { console.error(`[cfn-response] Request failed`); console.error(err); return resolve(); }); httpsRequest.write(responseBody); httpsRequest.end(); }); // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { CustomResourceResponseStatus, send });