@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
JavaScript
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
});