"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(module, "exports", { enumerable: true, get: function() { return _default; } }); const _util = require("@middy/util"); const _clientsts = require("@aws-sdk/client-sts"); const defaults = { AwsClient: _clientsts.STSClient, awsClientOptions: {}, // awsClientAssumeRole: undefined, // Not Applicable, as this is the middleware that defines the roles awsClientCapture: undefined, fetchData: {}, disablePrefetch: false, cacheKey: 'sts', cacheKeyExpiry: {}, cacheExpiry: -1, setToContext: false }; const stsMiddleware = (opts = {})=>{ const options = { ...defaults, ...opts }; const fetch = (request, cachedValues = {})=>{ const values = {}; for (const internalKey of Object.keys(options.fetchData)){ if (cachedValues[internalKey]) continue; const assumeRoleOptions = options.fetchData[internalKey]; // Date cannot be used here to assign default session name, possibility of collision when > 1 role defined assumeRoleOptions.RoleSessionName ??= 'middy-sts-session-' + Math.ceil(Math.random() * 99999); values[internalKey] = client.send(new _clientsts.AssumeRoleCommand(assumeRoleOptions)).then((resp)=>({ accessKeyId: resp.Credentials.AccessKeyId, secretAccessKey: resp.Credentials.SecretAccessKey, sessionToken: resp.Credentials.SessionToken })).catch((e)=>{ const value = (0, _util.getCache)(options.cacheKey).value ?? {}; value[internalKey] = undefined; (0, _util.modifyCache)(options.cacheKey, value); throw e; }); } return values; }; let client; if ((0, _util.canPrefetch)(options)) { client = (0, _util.createPrefetchClient)(options); (0, _util.processCache)(options, fetch); } const stsMiddlewareBefore = async (request)=>{ if (!client) { client = await (0, _util.createClient)(options, request); } const { value } = (0, _util.processCache)(options, fetch, request); Object.assign(request.internal, value); if (options.setToContext) { const data = await (0, _util.getInternal)(Object.keys(options.fetchData), request); if (options.setToContext) Object.assign(request.context, data); } }; return { before: stsMiddlewareBefore }; }; const _default = stsMiddleware;