@csermet/multiprovider
Version:
cloud-graph provider plugin for AWS used to fetch AWS cloud data.
85 lines (84 loc) • 3.8 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 lodash_1 = require("lodash");
const services_1 = __importDefault(require("../../enums/services"));
const generateArns_1 = require("../../utils/generateArns");
const regions_1 = require("../../enums/regions");
/**
* Kinesis Firehose
*/
exports.default = ({ service: firehose, data, region, }) => {
const connections = [];
const { DeliveryStreamARN: id, Destinations: destinations = [], Source = {}, } = firehose;
const kinesisStreamSourceARN = firehose.Source?.KinesisStreamSourceDescription?.KinesisStreamARN;
/**
* Find Kinesis Stream
* related to this Kinesis Firehose
*/
if (kinesisStreamSourceARN) {
const kinesisStreams = data.find(({ name }) => name === services_1.default.kinesisStream);
if (kinesisStreams?.data?.[region]) {
const kinesisStreamInRegion = kinesisStreams.data[region].filter(kinesisStream => kinesisStream.StreamARN === kinesisStreamSourceARN);
if (!lodash_1.isEmpty(kinesisStreamInRegion)) {
for (const kinesisStream of kinesisStreamInRegion) {
const kinesisStreamId = kinesisStream.StreamARN;
connections.push({
id: kinesisStreamId,
resourceType: services_1.default.kinesisStream,
relation: 'child',
field: 'kinesisStream',
});
}
}
}
}
if (!lodash_1.isEmpty(destinations)) {
destinations.map((destination) => {
const { ExtendedS3DestinationDescription, S3DestinationDescription } = destination;
const s3DestinationDescription = ExtendedS3DestinationDescription || S3DestinationDescription;
if (s3DestinationDescription) {
const s3Buckets = data.find(({ name }) => name === services_1.default.s3);
if (s3Buckets?.data?.[region]) {
const s3BucketsInRegion = s3Buckets.data[region].filter(({ Name }) => generateArns_1.s3BucketArn({ name: Name }) === s3DestinationDescription.BucketARN);
if (!lodash_1.isEmpty(s3BucketsInRegion)) {
for (const s3Bucket of s3BucketsInRegion) {
connections.push({
id: s3Bucket.Id,
resourceType: services_1.default.s3,
relation: 'child',
field: 's3',
});
}
}
}
}
// TODO Redshift, Elasticsearch, Splunk, HttpEndpoint
});
}
/**
* Find related IAM Roles
*/
const roles = data.find(({ name }) => name === services_1.default.iamRole);
if (roles?.data?.[regions_1.globalRegionName] &&
Source?.KinesisStreamSourceDescription?.RoleARN) {
const dataAtRegion = roles.data[regions_1.globalRegionName].filter(role => role.Arn === Source.KinesisStreamSourceDescription.RoleARN);
if (!lodash_1.isEmpty(dataAtRegion)) {
for (const instance of dataAtRegion) {
const { Arn: roleId } = instance;
connections.push({
id: roleId,
resourceType: services_1.default.iamRole,
relation: 'child',
field: 'iamRole',
});
}
}
}
const kinesisFirehoseResult = {
[id]: connections,
};
return kinesisFirehoseResult;
};