UNPKG

@csermet/multiprovider

Version:

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

213 lines (212 loc) 7.55 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const sdk_1 = __importDefault(require("@cloudgraph/sdk")); const aws_sdk_1 = require("aws-sdk"); const lodash_1 = require("lodash"); const logger_1 = __importDefault(require("../../properties/logger")); const utils_1 = require("../../utils"); const errorLog_1 = __importDefault(require("../../utils/errorLog")); const lt = { ...logger_1.default }; const { logger } = sdk_1.default; const serviceName = 'AppSync'; const errorLog = new errorLog_1.default(serviceName); const endpoint = utils_1.initTestEndpoint(serviceName); const listGraphqlApiData = async (appSync) => { try { const fullResources = []; let graphqlApis = await appSync.listGraphqlApis().promise(); fullResources.push(...graphqlApis.graphqlApis); let { nextToken } = graphqlApis; while (nextToken) { graphqlApis = await appSync.listGraphqlApis({ nextToken }).promise(); fullResources.push(...graphqlApis.graphqlApis); nextToken = graphqlApis.nextToken; } logger.debug(lt.fetchedAppSync(fullResources.length)); return fullResources; } catch (err) { errorLog.generateAwsErrorLog({ functionName: 'AppSync:listGraphqlApiData', err, }); } return []; }; const listApiKeysData = async (appSync, apiId) => { try { const fullResources = []; let apiKeys = await appSync.listApiKeys({ apiId }).promise(); fullResources.push(...apiKeys.apiKeys); let { nextToken } = apiKeys; while (nextToken) { apiKeys = await appSync.listApiKeys({ apiId, nextToken }).promise(); fullResources.push(...apiKeys.apiKeys); nextToken = apiKeys.nextToken; } return fullResources; } catch (err) { errorLog.generateAwsErrorLog({ functionName: 'AppSync:listApiKeysData', err, }); } return []; }; const listDataSourcesData = async (appSync, apiId) => { try { const fullResources = []; let dataSources = await appSync.listDataSources({ apiId }).promise(); fullResources.push(...dataSources.dataSources); let { nextToken } = dataSources; while (nextToken) { dataSources = await appSync .listDataSources({ apiId, nextToken }) .promise(); fullResources.push(...dataSources.dataSources); nextToken = dataSources.nextToken; } return fullResources; } catch (err) { errorLog.generateAwsErrorLog({ functionName: 'AppSync:listDataSourcesData', err, }); } return []; }; const listFunctionsData = async (appSync, apiId) => { try { const fullResources = []; let functions = await appSync.listFunctions({ apiId }).promise(); fullResources.push(...functions.functions); let { nextToken } = functions; while (nextToken) { functions = await appSync.listFunctions({ apiId, nextToken }).promise(); fullResources.push(...functions.functions); nextToken = functions.nextToken; } return fullResources; } catch (err) { errorLog.generateAwsErrorLog({ functionName: 'AppSync:listFunctionsData', err, }); } return []; }; const listResolversByFunction = async (appSync, apiId, functionId) => { try { const fullResources = []; let resolvers = await appSync .listResolversByFunction({ apiId, functionId }) .promise(); fullResources.push(...resolvers.resolvers); let { nextToken } = resolvers; while (nextToken) { resolvers = await appSync .listResolversByFunction({ apiId, functionId }) .promise(); fullResources.push(...resolvers.resolvers); nextToken = resolvers.nextToken; } return fullResources; } catch (err) { errorLog.generateAwsErrorLog({ functionName: 'AppSync:listResolversByFunction', err, }); } return null; }; const listTypesData = async (appSync, apiId) => { try { const fullResources = []; let types = await appSync.listTypes({ apiId, format: 'JSON' }).promise(); fullResources.push(...types.types); let { nextToken } = types; while (nextToken) { types = await appSync.listApiKeys({ apiId, nextToken }).promise(); fullResources.push(...types.types); nextToken = types.nextToken; } return fullResources; } catch (err) { errorLog.generateAwsErrorLog({ functionName: 'AppSync:listTypesData', err, }); } return []; }; const listTypesResolverData = async (appSync, apiId, typeName) => { try { const fullResources = []; let resolvers = await appSync.listResolvers({ apiId, typeName }).promise(); fullResources.push(...resolvers.resolvers); let { nextToken } = resolvers; while (nextToken) { resolvers = await appSync.listResolvers({ apiId, typeName }).promise(); fullResources.push(...resolvers.resolvers); nextToken = resolvers.nextToken; } return fullResources; } catch (err) { errorLog.generateAwsErrorLog({ functionName: 'AppSync:listTypesData', err, }); } return []; }; exports.default = async ({ regions, config, }) => { const graphqlApiData = []; for (const region of regions.split(',')) { const appSync = new aws_sdk_1.AppSync({ ...config, region, endpoint }); const graphqlApis = await listGraphqlApiData(appSync); for (const graphqlApi of graphqlApis) { const apiKeyList = await listApiKeysData(appSync, graphqlApi.apiId); const dataSourceList = await listDataSourcesData(appSync, graphqlApi.apiId); const functionList = await listFunctionsData(appSync, graphqlApi.apiId); const functions = []; for (const functionData of functionList) { const resolvers = await listResolversByFunction(appSync, graphqlApi.apiId, functionData.functionId); functions.push({ ...functionData, resolvers, }); } const typeList = await listTypesData(appSync, graphqlApi.apiId); const types = []; for (const typeData of typeList) { const resolvers = await listTypesResolverData(appSync, graphqlApi.apiId, typeData.name); types.push({ ...typeData, resolvers, }); } const { tags: Tags, ...appSyncApi } = graphqlApi; graphqlApiData.push({ ...appSyncApi, awsApiKeys: apiKeyList, awsDataSources: dataSourceList, awsFunctions: functions, awsTypes: types, Tags, region, }); } } errorLog.reset(); logger.debug(lt.doneFetchedAppSync); return lodash_1.groupBy(graphqlApiData, 'region'); };