UNPKG

@csermet/multiprovider

Version:

cloud-graph provider plugin for AWS used to fetch AWS cloud data.

85 lines (84 loc) 3.8 kB
"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; };