@csermet/multiprovider
Version:
cloud-graph provider plugin for AWS used to fetch AWS cloud data.
66 lines (65 loc) • 2.45 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const isEmpty_1 = __importDefault(require("lodash/isEmpty"));
const flatMap_1 = __importDefault(require("lodash/flatMap"));
const services_1 = __importDefault(require("../../enums/services"));
const ids_1 = require("../../utils/ids");
/**
* Route53 Hosted Zone
*/
exports.default = ({ service: hostedZone, data, }) => {
const connections = [];
const { Id, VPCs = [] } = hostedZone;
const id = ids_1.getHostedZoneId(Id);
/**
* Find Records
* related to this Hosted Zone
*/
const records = data.find(({ name }) => name === services_1.default.route53Record);
if (records?.data?.global) {
const recordsFound = records.data.global.filter(({ HostedZoneId }) => HostedZoneId.includes(id));
if (!isEmpty_1.default(recordsFound)) {
for (const record of recordsFound) {
const hostedZoneId = ids_1.getHostedZoneId(record.HostedZoneId);
const recordId = ids_1.getRecordId({
hostedZoneId,
name: record.Name,
type: record.Type,
identifier: record.SetIdentifier || '',
});
connections.push({
id: recordId,
resourceType: services_1.default.route53Record,
relation: 'child',
field: 'route53Record',
});
}
}
}
/**
* Find VPCs
* related to this Hosted zone
*/
const vpcs = flatMap_1.default(data.find(({ name: serviceName }) => serviceName === services_1.default.vpc)?.data) || [];
const vpcIds = VPCs.map(({ VPCId }) => VPCId);
if (vpcs && VPCs.length > 0) {
const associatedVPCs = vpcs.filter(({ VpcId }) => vpcIds.includes(VpcId));
if (!isEmpty_1.default(associatedVPCs)) {
for (const vpc of associatedVPCs) {
connections.push({
id: vpc.VpcId,
resourceType: services_1.default.vpc,
relation: 'child',
field: 'vpc',
});
}
}
}
const hostedZoneResult = {
[id]: connections,
};
return hostedZoneResult;
};