aws-spa
Version:
A no-brainer script to deploy a single page app on AWS
95 lines (72 loc) • 3.08 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.upsertOriginAccessControl = exports.getOriginAccessControlName = exports.getExistingOAC = exports.createOAC = exports.cleanExistingOriginAccessControl = void 0;
var _awsServices = require("../aws-services");
var _logger = require("../logger");
const getExistingOAC = async originAccessControlName => {
const {
OriginAccessControlList
} = await _awsServices.cloudfront.listOriginAccessControls();
const existingOACSummary = OriginAccessControlList?.Items?.find(oac => oac.Name === originAccessControlName);
if (!existingOACSummary) {
return null;
}
const oac = await _awsServices.cloudfront.getOriginAccessControl({
Id: existingOACSummary.Id
});
return {
originAccessControl: oac.OriginAccessControl,
ETag: oac.ETag
};
};
exports.getExistingOAC = getExistingOAC;
const createOAC = async (originAccessControlName, domainName, distributionId) => {
try {
_logger.logger.info(`[Cloudfront] ✏️ Creating an Origin Access Control for "${domainName}"...`);
const oac = await _awsServices.cloudfront.createOriginAccessControl({
OriginAccessControlConfig: {
Name: originAccessControlName,
OriginAccessControlOriginType: 's3',
SigningBehavior: 'always',
SigningProtocol: 'sigv4',
Description: `OAC used by ${domainName} associated to distributionId: ${distributionId}`
}
});
return {
originAccessControl: oac.OriginAccessControl,
ETag: oac.ETag
};
} catch (error) {
throw error;
}
};
exports.createOAC = createOAC;
const getOriginAccessControlName = (domainName, distributionId) => `${domainName}-${distributionId}`;
exports.getOriginAccessControlName = getOriginAccessControlName;
const upsertOriginAccessControl = async (domainName, distributionId) => {
_logger.logger.info(`[Cloudfront] ✨ Upserting Origin Access Control for "${domainName}"...`);
const originAccessControlName = getOriginAccessControlName(domainName, distributionId);
const existingOAC = await getExistingOAC(originAccessControlName);
if (existingOAC !== null) {
_logger.logger.info(`[Cloudfront] ✅ Origin Access Control "${originAccessControlName}" already exists.`);
return existingOAC;
}
return await createOAC(originAccessControlName, domainName, distributionId);
};
exports.upsertOriginAccessControl = upsertOriginAccessControl;
const cleanExistingOriginAccessControl = async (domainName, distributionId) => {
const originAccessControlName = getOriginAccessControlName(domainName, distributionId);
const existingOAC = await getExistingOAC(originAccessControlName);
if (existingOAC === null) {
return;
}
_logger.logger.info(`[Cloudfront] 🧹 Deleting Origin Access Control "${originAccessControlName}"...`);
await _awsServices.cloudfront.deleteOriginAccessControl({
Id: existingOAC.originAccessControl.Id,
IfMatch: existingOAC.ETag
});
return;
};
exports.cleanExistingOriginAccessControl = cleanExistingOriginAccessControl;