{"version":3,"file":"awsCredentials.js","sourceRoot":"","sources":["../../src/s3/awsCredentials.ts"],"names":[],"mappings":";;AA0CA,sDA0BC;AApED,yBAAwB;AACxB,yBAAwB;AACxB,6BAA4B;AAQ5B,SAAS,eAAe,CAAC,OAAe,EAAE,WAAmB;IAC3D,IAAI,SAAS,GAAG,KAAK,CAAA;IACrB,IAAI,KAAK,GAAG,KAAK,CAAA;IACjB,MAAM,MAAM,GAA2B,EAAE,CAAA;IAEzC,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAA;QAC3B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;YACpD,SAAS,GAAG,IAAI,KAAK,WAAW,CAAA;YAChC,IAAI,SAAS,EAAE,CAAC;gBACd,KAAK,GAAG,IAAI,CAAA;YACd,CAAC;QACH,CAAC;aAAM,IAAI,SAAS,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/E,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAC5B,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;YAC9D,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAA;AAC9B,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,qBAAqB;;IACnC,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;QACvE,OAAO;YACL,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;YAC1C,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB;YAClD,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,SAAS;SACzD,CAAA;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAA,OAAO,CAAC,GAAG,CAAC,WAAW,mCAAI,SAAS,CAAA;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,CAAC,CAAA;QAChE,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;QAC9C,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QAC7C,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,iBAAiB,MAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,qBAAqB,CAAA,EAAE,CAAC;YACjE,OAAO;gBACL,WAAW,EAAE,OAAO,CAAC,iBAAiB;gBACtC,eAAe,EAAE,OAAO,CAAC,qBAAqB;gBAC9C,YAAY,EAAE,OAAO,CAAC,iBAAiB,IAAI,SAAS;aACrD,CAAA;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,2CAA2C;IAC7C,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC","sourcesContent":["import * as fs from \"fs\"\nimport * as os from \"os\"\nimport * as path from \"path\"\n\nexport interface AwsCredentials {\n  accessKeyId: string\n  secretAccessKey: string\n  sessionToken?: string\n}\n\nfunction parseIniSection(content: string, sectionName: string): Record<string, string> | null {\n  let inSection = false\n  let found = false\n  const result: Record<string, string> = {}\n\n  for (const rawLine of content.split(/\\r?\\n/)) {\n    const line = rawLine.trim()\n    if (line.startsWith(\"[\")) {\n      const name = line.slice(1, line.indexOf(\"]\")).trim()\n      inSection = name === sectionName\n      if (inSection) {\n        found = true\n      }\n    } else if (inSection && line && !line.startsWith(\"#\") && !line.startsWith(\";\")) {\n      const eq = line.indexOf(\"=\")\n      if (eq > 0) {\n        result[line.slice(0, eq).trim()] = line.slice(eq + 1).trim()\n      }\n    }\n  }\n\n  return found ? result : null\n}\n\n/**\n * Resolves AWS credentials using the standard provider chain:\n *   1. Environment variables (AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY)\n *   2. Shared credentials file (~/.aws/credentials, respects AWS_PROFILE)\n *\n * Returns undefined when no credentials are found — callers should let aws4 sign\n * with anonymous credentials or throw a descriptive error as appropriate.\n */\nexport function resolveAwsCredentials(): AwsCredentials | undefined {\n  if (process.env.AWS_ACCESS_KEY_ID && process.env.AWS_SECRET_ACCESS_KEY) {\n    return {\n      accessKeyId: process.env.AWS_ACCESS_KEY_ID,\n      secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,\n      sessionToken: process.env.AWS_SESSION_TOKEN || undefined,\n    }\n  }\n\n  try {\n    const profile = process.env.AWS_PROFILE ?? \"default\"\n    const credsPath = path.join(os.homedir(), \".aws\", \"credentials\")\n    const raw = fs.readFileSync(credsPath, \"utf8\")\n    const section = parseIniSection(raw, profile)\n    if (section?.aws_access_key_id && section?.aws_secret_access_key) {\n      return {\n        accessKeyId: section.aws_access_key_id,\n        secretAccessKey: section.aws_secret_access_key,\n        sessionToken: section.aws_session_token || undefined,\n      }\n    }\n  } catch {\n    // file absent or unreadable — fall through\n  }\n\n  return undefined\n}\n"]}