in source/custom-resources/lib/shared/cfResponse.js [88:150]
async send(data, physicalResourceId) {
return new Promise((resolve, reject) => {
const [
responseStatus,
responseData,
] = CloudFormationResponse.parseResponseData(data);
console.log(`parseResponseData = ${JSON.stringify({ responseStatus, responseData }, null, 2)}`);
/* TODO: remove the testing code */
if (this.isUnitTest()) {
resolve(responseData);
return;
}
const responseBody = JSON.stringify({
Status: responseStatus,
Reason: `See details in CloudWatch Log Stream: ${this.logStreamName}`,
PhysicalResourceId: physicalResourceId || this.logStreamName,
StackId: this.stackId,
RequestId: this.requestId,
LogicalResourceId: this.logicalResourceId,
Data: responseData,
});
let result = '';
const url = URL.parse(this.responseUrl);
const params = {
hostname: url.hostname,
port: 443,
path: url.path,
method: 'PUT',
headers: {
'Content-Type': '',
'Content-Length': responseBody.length,
},
};
const request = HTTPS.request(params, (response) => {
response.setEncoding('utf8');
response.on('data', (chunk) => {
result += chunk.toString();
});
response.on('end', () => {
if (response.statusCode >= 400) {
const e = new Error(`${params.method} ${url.path} ${response.statusCode}`);
e.statusCode = response.statusCode;
reject(e);
} else {
resolve(result);
}
});
});
request.once('error', (e) => {
e.message = `${params.method} ${url.path} - ${e.message}`;
reject(e);
});
if (responseBody.length > 0) {
request.write(responseBody);
}
request.end();
});
}