{"version":3,"sources":["jsdelivr-header.js","/npm/@mhlabs/aws-sso-client-auth@1.1.4/index.js"],"names":[],"mappings":"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","file":"/npm/@mhlabs/aws-sso-client-auth@1.1.4/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@mhlabs/aws-sso-client-auth@1.1.4/index.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 opn = require(\"opn\");\nconst AWS = require(\"aws-sdk\");\nconst storage = require(\"node-persist\");\nconst os = require(\"os\");\nconst sharedIni = require(\"@aws-sdk/shared-ini-file-loader\");\n\nlet intervalId;\nlet tokenResponse;\nlet oidc;\nconst options = {\n  clientName: \"unknown\",\n  startUrl: null,\n  accountId: null,\n};\nconst cacheDir = `${os.homedir()}/.aws-sso-client-credentials`;\n\n// Deprecated - not needed when using requestAuth\nfunction configure(opts) {\n  options.accountId = opts.accountId;\n  options.clientName = opts.clientName;\n  options.startUrl = opts.startUrl;\n  AWS.config.update({ region: opts.region });\n}\n\nasync function listProfiles() {\n  const configFiles = await sharedIni.loadSharedConfigFiles();\n  return Object.keys(configFiles.configFile);\n}\n\nasync function requestAuth(clientName, profile) {\n  profile = profile || process.env.AWS_CONFIG_FILE || \"default\";\n  const configFiles = await sharedIni.loadSharedConfigFiles();\n  let configProfile = configFiles.configFile[profile];\n  if (!configProfile) {\n    console.warn(`Profile ${profile} not found. Using default`);\n    configProfile = configFiles.configFile[\"default\"];\n  }\n  if (!configProfile[\"sso_start_url\"]) {\n    process.env.AWS_SDK_LOAD_CONFIG = true;\n    process.env.AWS_PROFILE = profile;\n    return { region: configProfile[\"sso_region\"] };\n  }\n  AWS.config.update({ region: configProfile[\"sso_region\"] });\n\n  oidc = new AWS.SSOOIDC();\n  const sso = new AWS.SSO();\n\n  await storage.init({\n    dir: cacheDir,\n    expiredInterval: 24 * 60 * 60 * 1000, // 24h\n  });\n  let storedCredentials = await storage.getItem(`${clientName}_${profile}`);\n  if (\n    !storedCredentials ||\n    Date.now() > storedCredentials.expiration - 60 * 1000\n  ) {\n    const registration = await oidc\n      .registerClient({ clientName: clientName, clientType: \"public\" })\n      .promise();\n    const auth = await oidc\n      .startDeviceAuthorization({\n        clientId: registration.clientId,\n        clientSecret: registration.clientSecret,\n        startUrl: configProfile[\"sso_start_url\"],\n      })\n      .promise();\n    opn(auth.verificationUriComplete);\n    let count = 0;\n    console.log(`Waiting for token... Ctrl+C to cancel.`);\n\n    await new Promise((resolve) => {\n      intervalId = setInterval(async () => {\n        tokenResponse = await createToken(registration, auth, resolve, count++);\n      }, auth.interval * 1000);\n    });\n    const request = {\n      accessToken: tokenResponse.accessToken,\n      accountId: configProfile[\"sso_account_id\"],\n      roleName: configProfile[\"sso_role_name\"],\n    };\n    const credentials = await sso.getRoleCredentials(request).promise();\n    storedCredentials = credentials.roleCredentials;\n    await storage.setItem(`${clientName}_${profile}`, storedCredentials);\n  }\n  const credentials = {\n    accessKeyId: storedCredentials.accessKeyId,\n    secretAccessKey: storedCredentials.secretAccessKey,\n    sessionToken: storedCredentials.sessionToken,\n  };\n\n  AWS.config.update({\n    credentials: credentials,\n    region: configProfile[\"region\"],\n  });\n\n  return {\n    credentials,\n    region: configProfile[\"region\"],\n  };\n}\n\n// Deprecated use profile instead in requestAuth(). Here for backwards compatability\nasync function authenticate(roleName) {\n  oidc = new AWS.SSOOIDC();\n  const sso = new AWS.SSO();\n\n  await storage.init({\n    dir: cacheDir,\n    expiredInterval: 24 * 60 * 60 * 1000, // 24h\n  });\n  let storedCredentials = await storage.getItem(\n    `${options.clientName}_${roleName}`\n  );\n  if (\n    !storedCredentials ||\n    Date.now() > storedCredentials.expiration - 60 * 1000\n  ) {\n    const registration = await oidc\n      .registerClient({ clientName: options.clientName, clientType: \"public\" })\n      .promise();\n    const auth = await oidc\n      .startDeviceAuthorization({\n        clientId: registration.clientId,\n        clientSecret: registration.clientSecret,\n        startUrl: options.startUrl,\n      })\n      .promise();\n    opn(auth.verificationUriComplete);\n    let count = 0;\n    console.log(`Waiting for token... Ctrl+C to cancel.`);\n\n    await new Promise((resolve) => {\n      intervalId = setInterval(async () => {\n        tokenResponse = await createToken(registration, auth, resolve, count++);\n      }, auth.interval * 1000);\n    });\n    const request = {\n      accessToken: tokenResponse.accessToken,\n      accountId: options.accountId,\n      roleName: roleName,\n    };\n    const credentials = await sso.getRoleCredentials(request).promise();\n    storedCredentials = credentials.roleCredentials;\n    await storage.setItem(\n      `${options.clientName}_${roleName}`,\n      storedCredentials\n    );\n  }\n  const credentials = {\n    accessKeyId: storedCredentials.accessKeyId,\n    secretAccessKey: storedCredentials.secretAccessKey,\n    sessionToken: storedCredentials.sessionToken,\n  };\n\n  AWS.config.update({\n    credentials: credentials,\n  });\n\n  return credentials;\n}\n\nasync function createToken(reg, auth, done, count) {\n  let keys;\n  try {\n    keys = await oidc\n      .createToken({\n        clientId: reg.clientId,\n        clientSecret: reg.clientSecret,\n        deviceCode: auth.deviceCode,\n        grantType: \"urn:ietf:params:oauth:grant-type:device_code\",\n      })\n      .promise();\n  } catch (err) {\n    return;\n  }\n  tokenResponse = keys;\n  clearInterval(intervalId);\n  done();\n}\n\nmodule.exports = {\n  configure,\n  authenticate,\n  requestAuth,\n  listProfiles\n};\n"]}