{
  "version": 3,
  "sources": ["../../../../src/packages/network.auth-header/index.ts"],
  "sourcesContent": ["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport nerfDart from 'nerf-dart';\nimport {\n  getAuthHeadersFromConfig,\n  loadToken,\n} from './getAuthHeadersFromConfig.ts';\nimport type {\n  ConfigSettings,\n  AuthHeadersByURI,\n} from './getAuthHeadersFromConfig.ts';\nimport { removePort } from './helpers/removePort.ts';\n\nexport { loadToken };\n\ntype AuthHeaderFunction = (uri: string) => string | undefined;\n\ntype CreateAuthHeaderOptions = {\n  allSettings: ConfigSettings;\n  userSettings?: ConfigSettings | undefined;\n};\n\nexport function createGetAuthHeaderByURI(\n  opts: CreateAuthHeaderOptions\n): AuthHeaderFunction {\n  const authHeaders = getAuthHeadersFromConfig({\n    allSettings: opts.allSettings,\n    userSettings: opts.userSettings ?? {},\n  });\n\n  if (Object.keys(authHeaders).length === 0) {\n    return (uri: string): string | undefined => {\n      return basicAuth(new URL(uri));\n    };\n  }\n\n  return getAuthHeaderByURI.bind(\n    null,\n    authHeaders,\n    getMaxParts(Object.keys(authHeaders))\n  );\n}\n\nfunction getMaxParts(uris: string[]): number {\n  return uris.reduce((max, uri) => {\n    const parts = uri.split('/').length;\n\n    return parts > max ? parts : max;\n  }, 0);\n}\n\nfunction getAuthHeaderByURI(\n  authHeaders: AuthHeadersByURI,\n  maxParts: number,\n  uri: string\n): string | undefined {\n  let newUrl = uri;\n\n  if (!uri.endsWith('/')) {\n    newUrl += '/';\n  }\n\n  const parsedUri = new URL(newUrl);\n\n  const basic = basicAuth(parsedUri);\n\n  if (typeof basic === 'string') {\n    return basic;\n  }\n\n  const nerfed = nerfDart(newUrl);\n\n  const parts = nerfed.split('/');\n\n  for (let i = Math.min(parts.length, maxParts) - 1; i >= 3; i--) {\n    const key = `${parts.slice(0, i).join('/')}/`;\n\n    if (typeof authHeaders[key] !== 'undefined') {\n      return authHeaders[key];\n    }\n  }\n\n  const urlWithoutPort = removePort(parsedUri);\n\n  if (urlWithoutPort !== newUrl) {\n    return getAuthHeaderByURI(authHeaders, maxParts, urlWithoutPort);\n  }\n\n  return undefined;\n}\n\nfunction basicAuth(uri: URL): string | undefined {\n  if (!uri.username && !uri.password) {\n    return undefined;\n  }\n\n  const auth64 = btoa(`${uri.username}:${uri.password}`);\n\n  return `Basic ${auth64}`;\n}\n"],
  "mappings": "AAEA,OAAO,cAAc;AACrB;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAKP,SAAS,kBAAkB;AAWpB,SAAS,yBACd,MACoB;AACpB,QAAM,cAAc,yBAAyB;AAAA,IAC3C,aAAa,KAAK;AAAA,IAClB,cAAc,KAAK,gBAAgB,CAAC;AAAA,EACtC,CAAC;AAED,MAAI,OAAO,KAAK,WAAW,EAAE,WAAW,GAAG;AACzC,WAAO,CAAC,QAAoC;AAC1C,aAAO,UAAU,IAAI,IAAI,GAAG,CAAC;AAAA,IAC/B;AAAA,EACF;AAEA,SAAO,mBAAmB;AAAA,IACxB;AAAA,IACA;AAAA,IACA,YAAY,OAAO,KAAK,WAAW,CAAC;AAAA,EACtC;AACF;AAEA,SAAS,YAAY,MAAwB;AAC3C,SAAO,KAAK,OAAO,CAAC,KAAK,QAAQ;AAC/B,UAAM,QAAQ,IAAI,MAAM,GAAG,EAAE;AAE7B,WAAO,QAAQ,MAAM,QAAQ;AAAA,EAC/B,GAAG,CAAC;AACN;AAEA,SAAS,mBACP,aACA,UACA,KACoB;AACpB,MAAI,SAAS;AAEb,MAAI,CAAC,IAAI,SAAS,GAAG,GAAG;AACtB,cAAU;AAAA,EACZ;AAEA,QAAM,YAAY,IAAI,IAAI,MAAM;AAEhC,QAAM,QAAQ,UAAU,SAAS;AAEjC,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,SAAS,MAAM;AAE9B,QAAM,QAAQ,OAAO,MAAM,GAAG;AAE9B,WAAS,IAAI,KAAK,IAAI,MAAM,QAAQ,QAAQ,IAAI,GAAG,KAAK,GAAG,KAAK;AAC9D,UAAM,MAAM,GAAG,MAAM,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC;AAE1C,QAAI,OAAO,YAAY,GAAG,MAAM,aAAa;AAC3C,aAAO,YAAY,GAAG;AAAA,IACxB;AAAA,EACF;AAEA,QAAM,iBAAiB,WAAW,SAAS;AAE3C,MAAI,mBAAmB,QAAQ;AAC7B,WAAO,mBAAmB,aAAa,UAAU,cAAc;AAAA,EACjE;AAEA,SAAO;AACT;AAEA,SAAS,UAAU,KAA8B;AAC/C,MAAI,CAAC,IAAI,YAAY,CAAC,IAAI,UAAU;AAClC,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,KAAK,GAAG,IAAI,QAAQ,IAAI,IAAI,QAAQ,EAAE;AAErD,SAAO,SAAS,MAAM;AACxB;",
  "names": []
}
