@csermet/multiprovider
Version:
cloud-graph provider plugin for AWS used to fetch AWS cloud data.
81 lines (80 loc) • 3.38 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");
const generateArns_1 = require("../../utils/generateArns");
/**
* Route53 Record
*/
exports.default = ({ service: record, data, }) => {
const connections = [];
const { HostedZoneId: Id, Name: name, Type: type, AliasTarget: alias, SetIdentifier: identifier = '', } = record;
const hostedZoneId = ids_1.getHostedZoneId(Id);
const id = ids_1.getRecordId({ hostedZoneId, name, type, identifier });
/**
* Find ELBs
* related to this Record
*/
const elbs = flatMap_1.default(data.find(({ name: serviceName }) => serviceName === services_1.default.elb)?.data) || [];
if (elbs && alias?.HostedZoneId) {
const elbsInRegion = elbs.filter(({ CanonicalHostedZoneNameID: hostedZoneNameId }) => hostedZoneNameId === alias?.HostedZoneId);
if (!isEmpty_1.default(elbsInRegion)) {
for (const instance of elbsInRegion) {
const { LoadBalancerName: lbName, region: elbRegion, account: elbAccount, } = instance;
connections.push({
id: generateArns_1.elbArn({ region: elbRegion, account: elbAccount, name: lbName }),
resourceType: services_1.default.elb,
relation: 'child',
field: 'elb',
});
}
}
}
/**
* Find ALBs
* related to this Record
*/
const albs = flatMap_1.default(data.find(({ name: serviceName }) => serviceName === services_1.default.alb)?.data) || [];
if (albs && alias?.HostedZoneId) {
const albsInRegion = albs.filter(({ CanonicalHostedZoneId }) => CanonicalHostedZoneId === alias?.HostedZoneId);
if (!isEmpty_1.default(albsInRegion)) {
for (const instance of albsInRegion) {
const { LoadBalancerArn: arn } = instance;
connections.push({
id: arn,
resourceType: services_1.default.alb,
relation: 'child',
field: 'alb',
});
}
}
}
/**
* Find APIGWs
* related to this Record
*/
const restApis = flatMap_1.default(data.find(({ name: serviceName }) => serviceName === services_1.default.apiGatewayRestApi)?.data) || [];
if (!isEmpty_1.default(restApis)) {
const restApisInRegion = restApis.filter(({ domainNames }) => domainNames.find(dn => name.includes(dn)));
if (!isEmpty_1.default(restApisInRegion)) {
for (const instance of restApisInRegion) {
const { id: restApiId } = instance;
connections.push({
id: restApiId,
resourceType: services_1.default.apiGatewayRestApi,
relation: 'child',
field: 'restApi',
});
}
}
}
const recordResult = {
[id]: connections,
};
return recordResult;
};