{"version":3,"sources":["jsdelivr-header.js","/npm/@grucloud/provider-aws@13.2.5/AwsProvider.js"],"names":[],"mappings":"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","file":"/npm/@grucloud/provider-aws@13.2.5/AwsProvider.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@grucloud/provider-aws@13.2.5/AwsProvider.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","const assert = require(\"assert\");\nconst {\n  omit,\n  pipe,\n  get,\n  tap,\n  tryCatch,\n  filter,\n  not,\n  map,\n  fork,\n  assign,\n} = require(\"rubico\");\nconst { isFunction, size, defaultsDeep, when, isEmpty } = require(\"rubico/x\");\n\nconst { loadConfig } = require(\"@aws-sdk/node-config-provider\");\nconst path = require(\"path\");\n\nconst { STS } = require(\"@aws-sdk/client-sts\");\nconst {\n  AssumeRoleWithWebIdentityCommand,\n  STSClient,\n} = require(\"@aws-sdk/client-sts\");\n\nconst logger = require(\"@grucloud/core/logger\")({ prefix: \"AwsProvider\" });\nconst CoreProvider = require(\"@grucloud/core/CoreProvider\");\nconst { assignTagsSort, createEndpointOption } = require(\"./AwsCommon\");\nconst { mergeConfig } = require(\"@grucloud/core/ProviderCommon\");\nconst { getWebIdentityToken } = require(\"@grucloud/core/getJwt\");\n\nconst {\n  createProjectAws,\n} = require(\"@grucloud/core/cli/providers/createProjectAws\");\n\nconst { generateCode } = require(\"./Aws2gc\");\nconst { fnSpecs } = require(\"./AwsProviderSpec\");\n\nexports.AwsProvider = async ({\n  name = \"aws\",\n  stage = \"dev\",\n  config,\n  programOptions,\n  configs = [],\n  mapGloblalNameToResource,\n  ...other\n}) => {\n  assert(config ? isFunction(config) : true, \"config must be a function\");\n\n  let accountId;\n  let _credentials;\n  //TODO wrap for retry\n  const fetchAccountId = (config) =>\n    tryCatch(\n      pipe([\n        tap(() => {\n          assert(config);\n          //logger.debug(`fetchAccountId ${name}`);\n        }),\n        createEndpointOption(config),\n        (options) => new STS(options),\n        (sts) => sts.getCallerIdentity({}),\n        get(\"Account\"),\n        tap((accountId) => {\n          logger.debug(`fetchAccountId ${name}, accountId: ${accountId}`);\n        }),\n      ]),\n      (error) => {\n        throw error;\n      }\n    )();\n\n  const getRegionFromCredentialFiles = (config) =>\n    pipe([\n      tap((params) => {\n        assert(config);\n        //logger.debug(`getRegionFromCredentialFiles ${name}`);\n      }),\n      () => config,\n      get(\"credentials.profile\", \"default\"),\n      (profile) =>\n        pipe([\n          () =>\n            loadConfig(\n              {\n                configFileSelector: get(\"region\"),\n              },\n              { profile }\n            ),\n          (awsConfig) => awsConfig({}),\n          tap((region) => {\n            //assert(region);\n          }),\n        ])(),\n      tap((region) => {\n        //logger.debug(`getRegionFromCredentialFiles ${name} region: ${region}`);\n      }),\n    ])();\n\n  const getRegion = (config) =>\n    pipe([\n      tap((params) => {\n        assert(config);\n      }),\n      () => config,\n      getRegionFromCredentialFiles,\n      (regionFromCredentialFiles) =>\n        pipe([\n          () => ({}),\n          defaultsDeep({ region: config.region }),\n          defaultsDeep({ region: regionFromCredentialFiles }),\n          when(\n            () => process.env.AWS_REGION,\n            defaultsDeep({ region: process.env.AWS_REGION })\n          ),\n          defaultsDeep(config),\n          get(\"region\"),\n          tap((region) => {\n            //assert(region);\n            logger.info(\n              `using region '${region}', regionFromCredential: ${regionFromCredentialFiles}, AWS_REGION:${process.env.AWS_REGION}`\n            );\n          }),\n        ])(),\n      tap((params) => {\n        assert(true);\n      }),\n    ])();\n\n  //let region;\n  let region = await getRegion(\n    mergeConfig({\n      config,\n      configs,\n    })\n  );\n\n  const makeConfig = pipe([\n    tap((params) => {\n      assert(true);\n    }),\n    () =>\n      mergeConfig({\n        configDefault: {\n          credentials: _credentials,\n          stage,\n          accountId: pipe([\n            () => accountId,\n            tap(() => {\n              assert(accountId);\n            }),\n          ]),\n          region,\n          partition: \"aws\",\n        },\n        config,\n        configs,\n      }),\n  ]);\n\n  const assumeRoleWebIdentity = ({ RoleArn, RoleSessionName }) =>\n    pipe([\n      tap((WebIdentityToken) => {\n        assert(WebIdentityToken);\n        assert(RoleArn);\n      }),\n      (WebIdentityToken) => ({\n        WebIdentityToken,\n        RoleSessionName,\n        RoleArn,\n      }),\n      (input) => new AssumeRoleWithWebIdentityCommand(input),\n      (command) =>\n        new STSClient({\n          region: \"us-east-1\",\n        }).send(command),\n      get(\"Credentials\"),\n      ({ AccessKeyId, SecretAccessKey, SessionToken }) => ({\n        accessKeyId: AccessKeyId,\n        secretAccessKey: SecretAccessKey,\n        sessionToken: SessionToken,\n      }),\n    ]);\n\n  const information = () => ({\n    accountId,\n    region,\n    config: omit([\"accountId\"])(makeConfig()),\n  });\n\n  const start = pipe([\n    () => process.env,\n    tap.if(\n      get(\"GRUCLOUD_ROLE_WEB_IDENTITY_ARN\"),\n      pipe([\n        () => ({\n          audience: process.env.AWS_OAUTH_AUDIENCE ?? \"aws.workload.identity\",\n        }),\n        getWebIdentityToken,\n        assumeRoleWebIdentity({\n          RoleArn: process.env.GRUCLOUD_ROLE_WEB_IDENTITY_ARN,\n          RoleSessionName: \"grucloud-session\",\n        }),\n        tap((credentials) => {\n          _credentials = credentials;\n        }),\n      ])\n    ),\n    tap(async (params) => {\n      const merged = makeConfig();\n      accountId = await fetchAccountId(\n        defaultsDeep(merged)({\n          credentials: { clientConfig: { region: \"us-east-1\" } },\n        })\n      );\n    }),\n    information,\n  ]);\n\n  const init = ({ options, programOptions }) =>\n    pipe([\n      tap(() => {\n        assert(programOptions.workingDirectory);\n      }),\n      fork({\n        dirs: () => ({\n          destination: path.resolve(programOptions.workingDirectory),\n          providerDirectory: other.directory,\n        }),\n        config: makeConfig,\n      }),\n      assign({ profile: get(\"config.credentials.profile\", \"default\") }),\n      createProjectAws({}),\n    ])();\n\n  const getListHof = ({ getList, spec }) =>\n    tryCatch(\n      pipe([\n        tap(() => {\n          logger.debug(`getList ${spec.groupType}`);\n        }),\n        getList,\n        tap((items) => {\n          Array.isArray(items);\n        }),\n        map(assignTagsSort),\n        filter(not(isEmpty)),\n        (items) => ({ items, total: size(items) }),\n        tap(({ total, items }) => {\n          logger.debug(`getList ${spec.groupType} total: ${total}`);\n        }),\n      ]),\n      (error) =>\n        pipe([\n          tap((params) => {\n            logger.error(`getList #${spec.groupType}, ${error}`);\n          }),\n          () => {\n            throw error;\n          },\n        ])()\n    );\n\n  return CoreProvider({\n    ...other,\n    type: \"aws\",\n    name,\n    displayName: pipe([\n      () => ({\n        config,\n        configs,\n      }),\n      mergeConfig,\n      get(\"credentials.profile\", \"\"),\n      (profile) => `${name} ${region} ${profile}`,\n    ]),\n    programOptions,\n    makeConfig,\n    fnSpecs,\n    start,\n    info: information,\n    init,\n    generateCode: ({ commandOptions, programOptions, providers }) =>\n      generateCode({\n        providerName: name,\n        providers,\n        providerConfig: makeConfig(),\n        specs: fnSpecs(makeConfig()),\n        commandOptions,\n        programOptions,\n      }),\n    getListHof,\n    mapGloblalNameToResource,\n  });\n};\n"]}