{"version":3,"file":"utils.mjs","sources":["../src/utils.ts"],"sourcesContent":["import type { AwsCredentialIdentity } from '@aws-sdk/types';\nimport type { DefaultOptions, InitOptions } from '.';\n\nconst ENDPOINT_PATTERN = /^(.+\\.)?s3[.-]([a-z0-9-]+)\\./;\n\ninterface BucketInfo {\n  bucket?: string | null;\n  err?: string;\n}\n\nexport function isUrlFromBucket(fileUrl: string, bucketName: string, baseUrl = ''): boolean {\n  try {\n    const url = new URL(fileUrl);\n\n    if (baseUrl) {\n      return false;\n    }\n\n    const { bucket } = getBucketFromAwsUrl(fileUrl);\n\n    if (bucket) {\n      return bucket === bucketName;\n    }\n\n    return url.host.startsWith(`${bucketName}.`) || url.pathname.includes(`/${bucketName}/`);\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Parse the bucket name from a URL.\n * See all URL formats in https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-bucket-intro.html\n *\n * @param {string} fileUrl - the URL to parse\n * @returns {object} result\n * @returns {string} result.bucket - the bucket name\n * @returns {string} result.err - if any\n */\nfunction getBucketFromAwsUrl(fileUrl: string): BucketInfo {\n  const url = new URL(fileUrl);\n\n  // S3://<bucket-name>/<key>\n  if (url.protocol === 's3:') {\n    const bucket = url.host;\n\n    if (!bucket) {\n      return { err: `Invalid S3 url: no bucket: ${url}` };\n    }\n    return { bucket };\n  }\n\n  if (!url.host) {\n    return { err: `Invalid S3 url: no hostname: ${url}` };\n  }\n\n  const matches = url.host.match(ENDPOINT_PATTERN);\n  if (!matches) {\n    return { err: `Invalid S3 url: hostname does not appear to be a valid S3 endpoint: ${url}` };\n  }\n\n  const prefix = matches[1];\n  // https://s3.amazonaws.com/<bucket-name>\n  if (!prefix) {\n    if (url.pathname === '/') {\n      return { bucket: null };\n    }\n\n    const index = url.pathname.indexOf('/', 1);\n\n    // https://s3.amazonaws.com/<bucket-name>\n    if (index === -1) {\n      return { bucket: url.pathname.substring(1) };\n    }\n\n    // https://s3.amazonaws.com/<bucket-name>/\n    if (index === url.pathname.length - 1) {\n      return { bucket: url.pathname.substring(1, index) };\n    }\n\n    // https://s3.amazonaws.com/<bucket-name>/key\n    return { bucket: url.pathname.substring(1, index) };\n  }\n\n  // https://<bucket-name>.s3.amazonaws.com/\n  return { bucket: prefix.substring(0, prefix.length - 1) };\n}\n\nexport const extractCredentials = (options: InitOptions): AwsCredentialIdentity | null => {\n  const s3Options = (options as { s3Options?: DefaultOptions }).s3Options;\n\n  if (s3Options?.credentials) {\n    return {\n      accessKeyId: s3Options.credentials.accessKeyId,\n      secretAccessKey: s3Options.credentials.secretAccessKey,\n      ...(s3Options.credentials.sessionToken\n        ? { sessionToken: s3Options.credentials.sessionToken }\n        : {}),\n    };\n  }\n\n  // Support root-level accessKeyId/secretAccessKey in s3Options for backwards\n  // compatibility. AWS SDK v3 requires these inside a `credentials` object;\n  // passing them at the top level silently fails (Access Denied).\n  if (s3Options?.accessKeyId && s3Options?.secretAccessKey) {\n    console.warn(\n      \"[upload-aws-s3] Passing 'accessKeyId' and 'secretAccessKey' directly in s3Options is deprecated. \" +\n        \"Please wrap them in a 'credentials' object: s3Options: { credentials: { accessKeyId, secretAccessKey } }.\"\n    );\n    return {\n      accessKeyId: s3Options.accessKeyId,\n      secretAccessKey: s3Options.secretAccessKey,\n    };\n  }\n\n  return null;\n};\n"],"names":["ENDPOINT_PATTERN","isUrlFromBucket","fileUrl","bucketName","baseUrl","url","URL","bucket","getBucketFromAwsUrl","host","startsWith","pathname","includes","protocol","err","matches","match","prefix","index","indexOf","substring","length","extractCredentials","options","s3Options","credentials","accessKeyId","secretAccessKey","sessionToken","console","warn"],"mappings":"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"}