deep-package-manager
Version:
DEEP Package Manager
123 lines (101 loc) • 3.31 kB
JavaScript
/**
* Created by CCristi on 3/22/17.
*/
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Route53Service = undefined;
var _AbstractService = require('./AbstractService');
var _RecordSetNotFoundException = require('../Exception/RecordSetNotFoundException');
class Route53Service extends _AbstractService.AbstractService {
/**
* @param {Object[]} args
*/
constructor(...args) {
super(...args);
this._route53 = null;
}
/**
* @param {AWS.Route53|Object} route53
*/
set route53(route53) {
this._route53 = route53;
}
/**
* @returns {*}
*/
name() {
return 'route53';
}
/**
* @param {String} domainName
* @param {String} cfDistributionHost
* @param {Object|null} _hostedZone
* @param {String|null} _startRecordIdentifier
* @param {Object[]} _matchingRecords
* @returns {Promise}
*/
findRoute53RecordsByCfCNameDomain(domainName, cfDistributionHost, _hostedZone = null, _startRecordIdentifier = null, _matchingRecords = []) {
return (_hostedZone ? Promise.resolve(_hostedZone) : this.findHostedZoneByDomain(domainName)).then(hostedZone => {
if (!hostedZone) {
return { HostedZone: null, Records: [] };
}
let payload = {
HostedZoneId: hostedZone.Id
};
if (_startRecordIdentifier) {
payload.StartRecordIdentifier = _startRecordIdentifier;
}
return this._route53.listResourceRecordSets(payload).promise().then(response => {
let recordSets = response.ResourceRecordSets;
for (let recordSet of recordSets) {
if (recordSet.AliasTarget && recordSet.AliasTarget.DNSName.indexOf(cfDistributionHost) !== -1) {
_matchingRecords.push(recordSet);
}
}
return response.IsTruncated ? this.findRoute53RecordsByCfCNameDomain(domainName, cfDistributionHost, hostedZone, response.NextRecordIdentifier, _matchingRecords) : { HostedZone: hostedZone, Records: _matchingRecords };
});
}).then(result => {
if (result.Records.length === 0) {
throw new _RecordSetNotFoundException.RecordSetNotFoundException(domainName, cfDistributionHost);
}
return result;
});
}
/**
* @param {String} domainName
* @param {String|null} _marker
* @returns {Promise}
*/
findHostedZoneByDomain(domainName, _marker = null) {
let payload = {};
if (_marker) {
payload.Marker = _marker;
}
return this._route53.listHostedZones(payload).promise().then(response => {
let hostedZones = response.HostedZones;
for (let hostedZone of hostedZones) {
if (hostedZone.Name.indexOf(domainName) !== -1) {
return hostedZone;
}
}
return response.IsTruncated ? this.findHostedZoneByDomain(domainName, response.NextMarker) : null;
});
}
/**
* @param {String} hostedZoneId
* @param {RecordSetAction[]} recordSetActions
* @returns {Promise}
*/
applyRecordSetActions(hostedZoneId, recordSetActions) {
let payload = {
HostedZoneId: hostedZoneId,
ChangeBatch: {
Changes: recordSetActions.map(rSetA => rSetA.extract())
}
};
return this._route53.changeResourceRecordSets(payload).promise();
}
}
exports.Route53Service = Route53Service;