{"version":3,"file":"resolve.cjs","sources":["../../../src/domain/resolve.ts"],"sourcesContent":["import { Address } from \"@solana/kit\";\r\n\r\nimport { SOL_SRS_RESOLUTION_ENABLED } from \"../config\";\r\nimport { SnsSolResolutionMismatchError, UnsupportedTldError } from \"../errors\";\r\nimport { assertTldSupported } from \"../utils/assertTldSupported\";\r\nimport { SNS_TLD, SOL_TLD, parseSupportedTld } from \"../utils/tld\";\r\nimport { resolveSns } from \"./resolveSns\";\r\nimport { resolveSol } from \"./resolveSol\";\r\nimport { ResolveParams } from \"./resolveTypes\";\r\n\r\nexport type { ResolveOptions, ResolveParams } from \"./resolveTypes\";\r\n\r\n/**\r\n * Resolves a `.sns` or `.sol` domain to its target address.\r\n *\r\n * @param params Resolution parameters\r\n * @param params.rpc RPC client implementing account, multiple-account, token-largest-account, and slot APIs\r\n * @param params.domain Full domain name including a `.sns` or `.sol` suffix\r\n * @param params.options Optional PDA owner resolution options. Defaults to `{ allowPda: false }`\r\n * @returns The resolved target address.\r\n *\r\n * @see {@link safeResolve} for `.sol` resolution that verifies the SRS and\r\n * corresponding SNS targets match when SRS-backed resolution is enabled.\r\n *\r\n * @example\r\n * ```ts\r\n * const address = await resolve({ rpc, domain: \"example.sns\" });\r\n * ```\r\n */\r\nexport const resolve = async ({\r\n  rpc,\r\n  domain,\r\n  options = { allowPda: false },\r\n}: ResolveParams): Promise<Address> => {\r\n  if (domain.endsWith(SOL_TLD)) {\r\n    const trimmedSolDomain = domain.slice(0, -SOL_TLD.length);\r\n\r\n    if (SOL_SRS_RESOLUTION_ENABLED) {\r\n      return resolveSol({ rpc, domain: trimmedSolDomain, options });\r\n    }\r\n\r\n    await assertTldSupported({ rpc, domain });\r\n    return resolveSns({ rpc, domain: trimmedSolDomain, options });\r\n  }\r\n\r\n  const [trimmedDomain, tld] = parseSupportedTld(domain);\r\n  if (tld === SNS_TLD) {\r\n    return resolveSns({ rpc, domain: trimmedDomain, options });\r\n  }\r\n\r\n  throw new UnsupportedTldError(`Domain \"${domain}\" has an unsupported TLD`);\r\n};\r\n\r\n/**\r\n * Resolves a `.sns` or `.sol` domain using the same routing as {@link resolve}.\r\n *\r\n * When SRS-backed `.sol` resolution is enabled, both the `.sol` domain and its\r\n * corresponding `.sns` domain must resolve to the same target; otherwise,\r\n * {@link Errors.SnsSolResolutionMismatchError} is thrown.\r\n *\r\n * @param params Resolution parameters\r\n * @param params.rpc RPC client implementing account, multiple-account, token-largest-account, and slot APIs\r\n * @param params.domain Full domain name including a `.sns` or `.sol` suffix\r\n * @param params.options Optional PDA owner resolution options. Defaults to `{ allowPda: false }`\r\n * @returns The matching SRS and SNS target when compared; otherwise the target returned by {@link resolve}\r\n * @throws\r\n * - {@link Errors.SnsSolResolutionMismatchError} when SRS and SNS resolve a `.sol` domain to different addresses.\r\n * - Any resolution error propagated by {@link resolve}, `resolveSol`, or `resolveSns`.\r\n * @example\r\n * ```ts\r\n * const address = await safeResolve({ rpc, domain: \"example.sol\" });\r\n * ```\r\n */\r\nexport const safeResolve = async ({\r\n  rpc,\r\n  domain,\r\n  options = { allowPda: false },\r\n}: ResolveParams): Promise<Address> => {\r\n  if (domain.endsWith(SOL_TLD) && SOL_SRS_RESOLUTION_ENABLED) {\r\n    const trimmedSolDomain = domain.slice(0, -SOL_TLD.length);\r\n    const [srsTarget, snsTarget] = await Promise.all([\r\n      resolveSol({ rpc, domain: trimmedSolDomain, options }),\r\n      resolveSns({ rpc, domain: trimmedSolDomain, options }),\r\n    ]);\r\n\r\n    if (srsTarget !== snsTarget) {\r\n      throw new SnsSolResolutionMismatchError(\r\n        `SRS resolved ${domain} to ${srsTarget}, but SNS resolved it to ${snsTarget}`\r\n      );\r\n    }\r\n\r\n    return srsTarget;\r\n  }\r\n\r\n  return resolve({ rpc, domain, options });\r\n};\r\n"],"names":["SOL_TLD","assertTldSupported","resolveSns","tld","parseSupportedTld","SNS_TLD","UnsupportedTldError","SOL_SRS_RESOLUTION_ENABLED"],"mappings":";;;;;;;;;;AAYA;;;;;;;;;;;;;;;;AAgBG;MACU,OAAO,GAAG,OAAO,EAC5B,GAAG,EACH,MAAM,EACN,OAAO,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,GACf,KAAsB;AACpC,IAAA,IAAI,MAAM,CAAC,QAAQ,CAACA,WAAO,CAAC,EAAE;AAC5B,QAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAACA,WAAO,CAAC,MAAM,CAAC;QAMzD,MAAMC,qCAAkB,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AACzC,QAAA,OAAOC,qBAAU,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC;;IAG/D,MAAM,CAAC,aAAa,EAAEC,KAAG,CAAC,GAAGC,qBAAiB,CAAC,MAAM,CAAC;AACtD,IAAA,IAAID,KAAG,KAAKE,WAAO,EAAE;AACnB,QAAA,OAAOH,qBAAU,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC;;AAG5D,IAAA,MAAM,IAAII,0BAAmB,CAAC,WAAW,MAAM,CAAA,wBAAA,CAA0B,CAAC;AAC5E;AAEA;;;;;;;;;;;;;;;;;;;AAmBG;MACU,WAAW,GAAG,OAAO,EAChC,GAAG,EACH,MAAM,EACN,OAAO,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,GACf,KAAsB;IACpC,IAAI,MAAM,CAAC,QAAQ,CAACN,WAAO,CAAC,IAAIO,iCAA0B,EAAE;IAgB5D,OAAO,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC1C;;;;;"}