UNPKG

@csermet/multiprovider

Version:

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

116 lines (115 loc) 4.91 kB
"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 services_1 = __importDefault(require("../../enums/services")); const regions_1 = require("../../enums/regions"); /** * AppSync */ exports.default = ({ service: appSync, data, region, }) => { const connections = []; const { apiId: id, awsDataSources, userPoolConfig } = appSync; /** * Find cognito user pools * related to this App Sync */ const cognitoUserPools = data.find(({ name }) => name === services_1.default.cognitoUserPool); if (cognitoUserPools?.data?.[region]) { const associatedCognitoUserPools = cognitoUserPools.data[region].filter(({ Id }) => Id === userPoolConfig?.userPoolId); if (!isEmpty_1.default(associatedCognitoUserPools)) { for (const cognitoUserPool of associatedCognitoUserPools) { connections.push({ id: cognitoUserPool.Id, resourceType: services_1.default.cognitoUserPool, relation: 'child', field: 'cognitoUserPool', }); } } } /** * Find dynamodb tables * related to this App Sync */ const dynamoDbTables = data.find(({ name }) => name === services_1.default.dynamodb); const dynamodbTableNames = awsDataSources ?.filter(({ dynamodbConfig }) => !isEmpty_1.default(dynamodbConfig?.tableName)) .map(({ dynamodbConfig }) => dynamodbConfig?.tableName); if (dynamoDbTables?.data?.[region]) { const associatedDynamoDbTables = dynamoDbTables.data[region].filter(({ TableName }) => dynamodbTableNames.includes(TableName)); if (!isEmpty_1.default(associatedDynamoDbTables)) { for (const dynamoDbTable of associatedDynamoDbTables) { connections.push({ id: dynamoDbTable.TableId || dynamoDbTable.TableArn, resourceType: services_1.default.dynamodb, relation: 'child', field: 'dynamodb', }); } } } /** * Find lambda functions * related to this App Sync */ const lambdaFunctions = data.find(({ name }) => name === services_1.default.lambda); const functionArns = awsDataSources?.map(({ lambdaConfig }) => lambdaConfig?.lambdaFunctionArn); if (lambdaFunctions?.data?.[region]) { const associatedLambdaFunctions = lambdaFunctions.data[region].filter(({ FunctionArn }) => functionArns.includes(FunctionArn)); if (!isEmpty_1.default(associatedLambdaFunctions)) { for (const lambdaFunction of associatedLambdaFunctions) { connections.push({ id: lambdaFunction.FunctionArn, resourceType: services_1.default.lambda, relation: 'child', field: 'lambda', }); } } } /** * Find rds clusters * related to this App Sync */ const rdsClusters = data.find(({ name }) => name === services_1.default.rdsCluster); const rdsClusterArns = awsDataSources?.map(({ relationalDatabaseConfig }) => relationalDatabaseConfig?.rdsHttpEndpointConfig?.dbClusterIdentifier); if (rdsClusters?.data?.[region]) { const associatedRdsClusters = rdsClusters.data[region].filter(({ DBClusterArn }) => rdsClusterArns.includes(DBClusterArn)); if (!isEmpty_1.default(associatedRdsClusters)) { for (const rdsCluster of associatedRdsClusters) { connections.push({ id: rdsCluster.DBClusterArn, resourceType: services_1.default.rdsCluster, relation: 'child', field: 'rdsCluster', }); } } } /** * Find related IAM Roles */ const roles = data.find(({ name }) => name === services_1.default.iamRole); const roleArns = awsDataSources?.map(({ serviceRoleArn }) => serviceRoleArn); if (roles?.data?.[regions_1.globalRegionName]) { const dataAtRegion = roles.data[regions_1.globalRegionName].filter(role => roleArns.includes(role.Arn)); if (!isEmpty_1.default(dataAtRegion)) { for (const instance of dataAtRegion) { const { Arn: arn } = instance; connections.push({ id: arn, resourceType: services_1.default.iamRole, relation: 'child', field: 'iamRoles', }); } } } const appSyncResult = { [id]: connections, }; return appSyncResult; };