{"version":3,"file":"index.mjs","names":["URLSearchParams","URLSearchParams","URL"],"sources":["../src/array.ts","../src/config.ts","../src/content-type.ts","../src/date.ts","../src/encoding.ts","../src/error/OpenId4VcBaseError.ts","../src/error/InvalidFetchResponseError.ts","../src/error/JsonParseError.ts","../src/zod-error.ts","../src/error/ValidationError.ts","../src/error/FetchError.ts","../src/globals.ts","../src/fetcher.ts","../src/object.ts","../src/parse.ts","../src/path.ts","../src/url.ts","../src/validation.ts","../src/www-authenticate.ts"],"sourcesContent":["/**\n * Only primitive types allowed\n * Must have not duplicate entries (will always return false in this case)\n */\nexport function arrayEqualsIgnoreOrder<Item extends string | number | boolean>(\n  a: Array<Item>,\n  b: Array<Item>\n): boolean {\n  if (new Set(a).size !== new Set(b).size) return false\n  if (a.length !== b.length) return false\n\n  return a.every((k) => b.includes(k))\n}\n","export interface Oid4vcTsConfig {\n  /**\n   * Whether to allow insecure http urls.\n   *\n   * @default false\n   */\n  allowInsecureUrls: boolean\n}\n\nlet GLOBAL_CONFIG: Oid4vcTsConfig = {\n  allowInsecureUrls: false,\n}\n\nexport function setGlobalConfig(config: Oid4vcTsConfig) {\n  GLOBAL_CONFIG = config\n}\n\nexport function getGlobalConfig(): Oid4vcTsConfig {\n  return GLOBAL_CONFIG\n}\n","import type { FetchResponse } from './globals'\n\nexport enum ContentType {\n  XWwwFormUrlencoded = 'application/x-www-form-urlencoded',\n  Json = 'application/json',\n  JwkSet = 'application/jwk-set+json',\n  OAuthAuthorizationRequestJwt = 'application/oauth-authz-req+jwt',\n  Jwt = 'application/jwt',\n  Html = 'text/html',\n}\n\nexport function isContentType(contentType: ContentType, value: string) {\n  return value.toLowerCase().includes(contentType)\n}\n\nexport function isResponseContentType(contentType: ContentType | ContentType[], response: FetchResponse) {\n  const contentTypeArray = Array.isArray(contentType) ? contentType : [contentType]\n\n  const header = response.headers.get('Content-Type')\n  if (!header) return false\n  return contentTypeArray.some((contentTypeEntry) => isContentType(contentTypeEntry, header))\n}\n","/**\n * Get the time in seconds since epoch for a date.\n * If date is not provided the current time will be used.\n */\nexport function dateToSeconds(date?: Date) {\n  const milliseconds = date?.getTime() ?? Date.now()\n\n  return Math.floor(milliseconds / 1000)\n}\n\nexport function addSecondsToDate(date: Date, seconds: number) {\n  return new Date(date.getTime() + seconds * 1000)\n}\n","import { Buffer } from 'buffer'\n\nexport function decodeUtf8String(string: string): Uint8Array {\n  return new Uint8Array(Buffer.from(string, 'utf-8'))\n}\n\nexport function encodeToUtf8String(data: Uint8Array) {\n  return Buffer.from(data).toString('utf-8')\n}\n\n/**\n * Also supports base64 url\n */\nexport function decodeBase64(base64: string): Uint8Array {\n  return new Uint8Array(Buffer.from(base64, 'base64'))\n}\n\nexport function encodeToBase64(data: Uint8Array | string) {\n  // To make ts happy. Somehow Uint8Array or string is no bueno\n  if (typeof data === 'string') {\n    return Buffer.from(data).toString('base64')\n  }\n\n  return Buffer.from(data).toString('base64')\n}\n\nexport function encodeToBase64Url(data: Uint8Array | string) {\n  return base64ToBase64Url(encodeToBase64(data))\n}\n\n/**\n * The 'buffer' npm library does not support base64url.\n */\nfunction base64ToBase64Url(base64: string) {\n  return base64.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '')\n}\n","export abstract class OpenId4VcBaseError extends Error {}\n","import { ContentType, isResponseContentType } from '../content-type'\nimport type { FetchResponse } from '../globals'\nimport { OpenId4VcBaseError } from './OpenId4VcBaseError'\n\nexport class InvalidFetchResponseError extends OpenId4VcBaseError {\n  public readonly response: FetchResponse\n\n  public constructor(\n    message: string,\n    public readonly textResponse: string,\n    response: FetchResponse\n  ) {\n    // We don't want to put html content in pages. For other content we take the first 1000 characters\n    // to prevent ridiculously long errors.\n    const textResponseMessage = isResponseContentType(ContentType.Html, response)\n      ? undefined\n      : textResponse.substring(0, 1000)\n\n    super(textResponseMessage ? `${message}\\n${textResponseMessage}` : message)\n\n    this.response = response.clone()\n  }\n}\n","import { OpenId4VcBaseError } from './OpenId4VcBaseError'\n\nexport class JsonParseError extends OpenId4VcBaseError {\n  public constructor(message: string, jsonString: string) {\n    super(`${message}\\n${jsonString}`)\n  }\n}\n","import z from 'zod'\nimport { createErrorMap, fromError } from 'zod-validation-error'\n\nz.config({\n  customError: createErrorMap(),\n})\n\nexport function formatZodError(error?: z.ZodError): string {\n  if (!error) return ''\n\n  return fromError(error, { prefix: '', prefixSeparator: '✖ ', issueSeparator: '\\n✖ ' }).toString()\n}\n","import type { ZodError } from 'zod'\nimport { formatZodError } from '../zod-error'\nimport { OpenId4VcBaseError } from './OpenId4VcBaseError'\n\nexport class ValidationError extends OpenId4VcBaseError {\n  public zodError: ZodError | undefined\n\n  constructor(message: string, zodError?: ZodError) {\n    super(message)\n\n    const formattedError = zodError ? formatZodError(zodError) : ''\n    this.message = `${message}\\n${formattedError}`\n\n    Object.defineProperty(this, 'zodError', {\n      value: zodError,\n      writable: false,\n      enumerable: false,\n    })\n  }\n}\n","import { OpenId4VcBaseError } from './OpenId4VcBaseError'\n\nexport class FetchError extends OpenId4VcBaseError {\n  public readonly cause?: Error\n\n  public constructor(message: string, { cause }: { cause?: Error } = {}) {\n    super(`${message}\\nCause: ${cause?.message}`)\n    this.cause = cause\n  }\n}\n","// Theses types are provided by the platform (so @types/node, @types/react-native, DOM)\n\n// biome-ignore lint/style/noRestrictedGlobals: no explanation\nconst _URL = URL\n\n// biome-ignore lint/style/noRestrictedGlobals: no explanation\nconst _URLSearchParams = URLSearchParams\n\n// biome-ignore lint/style/noRestrictedGlobals: no explanation\nexport type Fetch = typeof fetch\n// biome-ignore lint/style/noRestrictedGlobals: no explanation\nexport type FetchResponse = Response\n// biome-ignore lint/style/noRestrictedGlobals: no explanation\nconst _Headers = Headers as typeof globalThis.Headers\nexport type FetchHeaders = globalThis.Headers\nexport type FetchRequestInit = RequestInit\n\nexport { _Headers as Headers, _URL as URL, _URLSearchParams as URLSearchParams }\n","import type z from 'zod'\nimport { ContentType, isResponseContentType } from './content-type'\nimport { FetchError } from './error/FetchError'\nimport { InvalidFetchResponseError } from './error/InvalidFetchResponseError'\nimport { type Fetch, URLSearchParams } from './globals'\n\n/**\n * A type utility which represents the function returned\n * from createZodFetcher\n */\nexport type ZodFetcher = <Schema extends z.ZodTypeAny>(\n  schema: Schema,\n  expectedContentType: ContentType | ContentType[],\n  ...args: Parameters<Fetch>\n) => Promise<{ response: Awaited<ReturnType<Fetch>>; result?: z.ZodSafeParseResult<z.infer<Schema>> }>\n\n/**\n * The default fetcher used by createZodFetcher when no\n * fetcher is provided.\n */\n// biome-ignore lint/style/noRestrictedGlobals: this is the only place where we use the global\nconst defaultFetcher = fetch\n\nexport function createFetcher(fetcher = defaultFetcher): Fetch {\n  return (input, init, ...args) => {\n    return fetcher(\n      input,\n      init\n        ? {\n            ...init,\n            // React Native does not seem to handle the toString(). This is hard to catch when running\n            // tests in Node.JS where this does work correctly. so we handle it here.\n            body: init.body instanceof URLSearchParams ? init.body.toString() : init.body,\n          }\n        : undefined,\n      ...args\n    ).catch((error) => {\n      throw new FetchError(`Unknown error occurred during fetch to '${input}'`, { cause: error })\n    })\n  }\n}\n\n/**\n * Creates a `fetchWithZod` function that takes in a schema of\n * the expected response, and the arguments to the fetcher\n * you provided.\n *\n * @example\n *\n * const fetchWithZod = createZodFetcher((url) => {\n *   return fetch(url).then((res) => res.json());\n * });\n *\n * const response = await fetchWithZod(\n *   z.object({\n *     hello: z.string(),\n *   }),\n *   \"https://example.com\",\n * );\n */\nexport function createZodFetcher(fetcher?: Fetch): ZodFetcher {\n  return async (schema, expectedContentType, ...args) => {\n    const response = await createFetcher(fetcher)(...args)\n\n    const expectedContentTypeArray = Array.isArray(expectedContentType) ? expectedContentType : [expectedContentType]\n\n    if (response.ok && !isResponseContentType(expectedContentTypeArray, response)) {\n      throw new InvalidFetchResponseError(\n        `Expected response to match content type ${expectedContentTypeArray.join(' | ')}, but received '${response.headers.get('Content-Type')}'`,\n        await response.clone().text(),\n        response\n      )\n    }\n\n    if (isResponseContentType([ContentType.OAuthAuthorizationRequestJwt, ContentType.Jwt], response)) {\n      return {\n        response,\n        result: response.ok ? schema.safeParse(await response.text()) : undefined,\n      }\n    }\n\n    return {\n      response,\n      result: response.ok ? schema.safeParse(await response.json()) : undefined,\n    }\n  }\n}\n","export function isObject(item: unknown): item is Record<string, unknown> {\n  return item != null && typeof item === 'object' && !Array.isArray(item)\n}\n\n/**\n * Deep merge two objects.\n * @param target\n * @param ...sources\n */\nexport function mergeDeep(target: unknown, ...sources: Array<unknown>): unknown {\n  if (!sources.length) return target\n  const source = sources.shift()\n\n  if (isObject(target) && isObject(source)) {\n    for (const key in source) {\n      if (isObject(source[key])) {\n        if (!target[key]) Object.assign(target, { [key]: {} })\n        mergeDeep(target[key], source[key])\n      } else {\n        Object.assign(target, { [key]: source[key] })\n      }\n    }\n  }\n\n  return mergeDeep(target, ...sources)\n}\n","import type z from 'zod'\nimport { JsonParseError } from './error/JsonParseError'\nimport { ValidationError } from './error/ValidationError'\n\nexport type BaseSchema = z.ZodTypeAny\n// biome-ignore lint/suspicious/noExplicitAny: no explanation\nexport type InferOutputUnion<T extends readonly any[]> = {\n  [K in keyof T]: z.infer<T[K]>\n}[number]\n\nexport function stringToJsonWithErrorHandling(string: string, errorMessage?: string) {\n  try {\n    return JSON.parse(string)\n  } catch (_error) {\n    throw new JsonParseError(errorMessage ?? 'Unable to parse string to JSON.', string)\n  }\n}\n\nexport function parseIfJson<T>(data: T): T | Record<string, unknown> {\n  if (typeof data !== 'string') {\n    return data\n  }\n\n  try {\n    // Try to parse the string as JSON\n    return JSON.parse(data)\n  } catch (_error) {}\n\n  return data\n}\n\nexport function parseWithErrorHandling<Schema extends BaseSchema>(\n  schema: Schema,\n  data: unknown,\n  customErrorMessage?: string\n): z.infer<Schema> {\n  const parseResult = schema.safeParse(data)\n\n  if (!parseResult.success) {\n    throw new ValidationError(\n      customErrorMessage ?? `Error validating schema with data ${JSON.stringify(data)}`,\n      parseResult.error\n    )\n  }\n\n  return parseResult.data\n}\n","/**\n * Combine multiple uri parts into a single uri taking into account slashes.\n *\n * @param parts the parts to combine\n * @returns the combined url\n */\nexport function joinUriParts(base: string, parts: string[]) {\n  if (parts.length === 0) return base\n\n  // take base without trailing /\n  let combined = base.trim()\n  combined = base.endsWith('/') ? base.slice(0, base.length - 1) : base\n\n  for (const part of parts) {\n    // Remove leading and trailing /\n    let strippedPart = part.trim()\n    strippedPart = strippedPart.startsWith('/') ? strippedPart.slice(1) : strippedPart\n    strippedPart = strippedPart.endsWith('/') ? strippedPart.slice(0, strippedPart.length - 1) : strippedPart\n\n    // Don't want to add if empty\n    if (strippedPart === '') continue\n\n    combined += `/${strippedPart}`\n  }\n\n  return combined\n}\n","import { URL, URLSearchParams } from './globals'\n\nexport function getQueryParams(url: string) {\n  const parsedUrl = new URL(url)\n  const searchParams = new URLSearchParams(parsedUrl.search)\n  const params: Record<string, string> = {}\n\n  searchParams.forEach((value, key) => {\n    params[key] = value\n  })\n\n  return params\n}\n\nexport function objectToQueryParams(object: Record<string, unknown>): InstanceType<typeof URLSearchParams> {\n  const params = new URLSearchParams()\n\n  for (const [key, value] of Object.entries(object)) {\n    if (value != null) {\n      params.append(key, typeof value === 'object' ? JSON.stringify(value) : String(value))\n    }\n  }\n\n  return params\n}\n","import z from 'zod'\nimport { getGlobalConfig } from './config'\n\nexport const zHttpsUrl = z.url().refine(\n  (url) => {\n    const { allowInsecureUrls } = getGlobalConfig()\n    return allowInsecureUrls ? url.startsWith('http://') || url.startsWith('https://') : url.startsWith('https://')\n  },\n  { message: 'url must be an https:// url' }\n)\n\nexport const zDataUrl = z.string().regex(/data:[\\w/\\-.]+;\\w+,.*/, 'url must be a data URL')\n\nexport const zInteger = z.number().int()\n\n/**\n * NumericDate as defined in RFC 7519 Section 2\n * A JSON numeric value representing the number of seconds from\n * 1970-01-01T00:00:00Z UTC until the specified UTC date/time,\n * ignoring leap seconds. Non-integer values can be represented.\n */\nexport const zNumericDate = z.number()\n\nexport const zHttpMethod = z.enum(['GET', 'POST', 'PUT', 'DELETE', 'HEAD', 'OPTIONS', 'TRACE', 'CONNECT', 'PATCH'])\nexport type HttpMethod = z.infer<typeof zHttpMethod>\n\nexport const zStringToJson = z.string().transform((string, ctx) => {\n  try {\n    return JSON.parse(string)\n  } catch (_error) {\n    ctx.addIssue({\n      code: 'custom',\n      message: 'Expected a JSON string, but could not parse the string to JSON',\n    })\n    return z.NEVER\n  }\n})\n\nexport const zIs = <Schema extends z.ZodSchema>(schema: Schema, data: unknown): data is z.infer<typeof schema> =>\n  schema.safeParse(data).success\n","const unquote = (value: string) => value.substring(1, value.length - 1).replace(/\\\\\"/g, '\"')\n// Fixup quoted strings and tokens with spaces around them\nconst sanitize = (value: string) => (value.charAt(0) === '\"' ? unquote(value) : value.trim())\n\n// lol dis\nconst body =\n  // biome-ignore lint/suspicious/noControlCharactersInRegex: no explanation\n  /((?:[a-zA-Z0-9._~+/-]+=*(?:\\s+|$))|[^\\u0000-\\u001F\\u007F()<>@,;:\\\\\"/?={}[\\]\\u0020\\u0009]+)(?:=([^\\\\\"=\\s,]+|\"(?:[^\"\\\\]|\\\\.)*\"))?/g\n\nexport interface WwwAuthenticateHeaderChallenge {\n  scheme: string\n\n  /**\n   * Record where the keys are the names, and the value can be 0 (null), 1 (string) or multiple (string[])\n   * entries\n   */\n  payload: Record<string, string | string[] | null>\n}\n\nconst parsePayload = (scheme: string, string: string): WwwAuthenticateHeaderChallenge => {\n  const payload: Record<string, string | string[] | null> = {}\n\n  while (true) {\n    const res = body.exec(string)\n    if (!res) break\n\n    const [, key, newValue] = res\n\n    const payloadValue = payload[key]\n    if (newValue) {\n      const sanitizedValue = sanitize(newValue)\n      payload[key] = payloadValue\n        ? Array.isArray(payloadValue)\n          ? [...payloadValue, sanitizedValue]\n          : [payloadValue, sanitizedValue]\n        : sanitizedValue\n    } else if (!payloadValue) {\n      payload[key] = null\n    }\n  }\n\n  return { scheme, payload }\n}\n\nexport function parseWwwAuthenticateHeader(str: string): WwwAuthenticateHeaderChallenge[] {\n  const start = str.indexOf(' ')\n  let scheme = str.substring(0, start)\n  let value = str.substring(start)\n\n  const challenges: WwwAuthenticateHeaderChallenge[] = []\n\n  // Some well-known schemes to support-multi parsing\n  const endsWithSchemeRegex = /, ?(Bearer|DPoP|Basic)$/\n  const endsWithSchemeTest = endsWithSchemeRegex.exec(value)\n  let endsWithScheme: string | undefined\n  if (endsWithSchemeTest) {\n    value = value.substring(0, value.length - endsWithSchemeTest[0].length)\n    endsWithScheme = endsWithSchemeTest[1]\n  }\n\n  const additionalSchemesRegex = /(.*?)(, ?)(Bearer|DPoP|Basic)[, ]/\n  let match = additionalSchemesRegex.exec(value)\n  while (match) {\n    challenges.push(parsePayload(scheme, match[1]))\n    value = value.substring(match[0].length - 1)\n    scheme = match[3]\n\n    match = additionalSchemesRegex.exec(value)\n  }\n  challenges.push(parsePayload(scheme, value))\n  if (endsWithScheme) {\n    challenges.push({ scheme: endsWithScheme, payload: {} })\n  }\n  return challenges\n}\n\nexport function encodeWwwAuthenticateHeader(challenges: WwwAuthenticateHeaderChallenge[]) {\n  const entries: string[] = []\n\n  for (const challenge of challenges) {\n    // Encode each parameter according to RFC 7235\n    const encodedParams = Object.entries(challenge.payload).flatMap(([key, value]) => {\n      const encode = (s: string) => s.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')\n      // Convert value to string and escape special characters\n      if (Array.isArray(value)) {\n        return value.map((v) => `${key}=\"${encode(v)}\"`)\n      }\n\n      return value ? `${key}=\"${encode(value)}\"` : key\n    })\n\n    entries.push(encodedParams.length === 0 ? challenge.scheme : `${challenge.scheme} ${encodedParams.join(', ')}`)\n  }\n\n  return entries.join(', ')\n}\n"],"mappings":"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"}