{"version":3,"file":"getPrimaryDomain.cjs","sources":["../../../src/address/getPrimaryDomain.ts"],"sourcesContent":["import {\r\n  Address,\r\n  GetAccountInfoApi,\r\n  GetTokenLargestAccountsApi,\r\n  Rpc,\r\n} from \"@solana/kit\";\r\n\r\nimport {\r\n  NAME_OFFERS_ADDRESS,\r\n  SNS_ROOT_DOMAIN_ACCOUNT,\r\n} from \"../constants/addresses\";\r\nimport { getSnsNftOwner } from \"../nft/getSnsNftOwner\";\r\nimport { PrimaryDomainState } from \"../states/primaryDomain\";\r\nimport { RegistryState } from \"../states/registry\";\r\nimport { reverseLookup } from \"../utils/reverseLookup\";\r\n\r\n/**\r\n * Parameters for retrieving a wallet's primary domain.\r\n *\r\n * @example\r\n * ```ts\r\n * const params: GetPrimaryDomainParams = { rpc, walletAddress };\r\n * ```\r\n */\r\nexport interface GetPrimaryDomainParams {\r\n  /** RPC client. */\r\n  rpc: Rpc<GetAccountInfoApi & GetTokenLargestAccountsApi>;\r\n  /** Wallet address. */\r\n  walletAddress: Address;\r\n}\r\n\r\n/**\r\n * A wallet's primary domain.\r\n *\r\n * @example\r\n * ```ts\r\n * const primary: GetPrimaryDomainResult = {\r\n *   domainAddress,\r\n *   domainName: \"example\",\r\n *   stale: false,\r\n * };\r\n * ```\r\n */\r\nexport interface GetPrimaryDomainResult {\r\n  /** Primary domain account address. */\r\n  domainAddress: Address;\r\n  /** TLD-less primary domain name. */\r\n  domainName: string;\r\n  /** Whether the wallet is no longer the domain's effective owner. */\r\n  stale: boolean;\r\n}\r\n\r\n/**\r\n * Retrieves the primary SNS domain associated with a wallet address.\r\n *\r\n * Returned domain names omit the TLD suffix; subdomain primary names can\r\n * include parent labels such as `sub.parent`.\r\n *\r\n * @param params Primary domain retrieval parameters\r\n * @param params.rpc RPC client implementing account and token-largest-account APIs\r\n * @param params.walletAddress Wallet address whose primary domain is retrieved\r\n * @returns Primary domain address, domain name, and stale status.\r\n *\r\n * @example\r\n * ```ts\r\n * const primary = await getPrimaryDomain({ rpc, walletAddress });\r\n * ```\r\n */\r\nexport const getPrimaryDomain = async ({\r\n  rpc,\r\n  walletAddress,\r\n}: GetPrimaryDomainParams): Promise<GetPrimaryDomainResult> => {\r\n  const primaryAddress = await PrimaryDomainState.getAddress(\r\n    NAME_OFFERS_ADDRESS,\r\n    walletAddress\r\n  );\r\n  const primary = await PrimaryDomainState.retrieve(rpc, primaryAddress);\r\n  const [registry, nftOwner] = await Promise.all([\r\n    RegistryState.retrieve(rpc, primary.nameAccount),\r\n    getSnsNftOwner({ rpc, domainAddress: primary.nameAccount }),\r\n  ]);\r\n  const domainOwner = nftOwner || registry.owner;\r\n  const isSub = registry.parentName !== SNS_ROOT_DOMAIN_ACCOUNT;\r\n\r\n  const lookups = [\r\n    reverseLookup({\r\n      rpc,\r\n      domainAddress: primary.nameAccount,\r\n      parentAddress: isSub ? registry.parentName : undefined,\r\n    }),\r\n  ];\r\n\r\n  if (isSub) {\r\n    lookups.push(reverseLookup({ rpc, domainAddress: registry.parentName }));\r\n  }\r\n\r\n  const domainName = (await Promise.all(lookups)).join(\".\");\r\n\r\n  return {\r\n    domainAddress: primary.nameAccount,\r\n    domainName,\r\n    stale: walletAddress !== domainOwner,\r\n  };\r\n};\r\n"],"names":["PrimaryDomainState","NAME_OFFERS_ADDRESS","registry","RegistryState","getSnsNftOwner","SNS_ROOT_DOMAIN_ACCOUNT","reverseLookup"],"mappings":";;;;;;;;;;AAoDA;;;;;;;;;;;;;;;AAeG;AACI,MAAM,gBAAgB,GAAG,OAAO,EACrC,GAAG,EACH,aAAa,GACU,KAAqC;IAC5D,MAAM,cAAc,GAAG,MAAMA,gCAAkB,CAAC,UAAU,CACxDC,6BAAmB,EACnB,aAAa,CACd;IACD,MAAM,OAAO,GAAG,MAAMD,gCAAkB,CAAC,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;IACtE,MAAM,CAACE,UAAQ,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC7CC,sBAAa,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC;QAChDC,6BAAc,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;AAC5D,KAAA,CAAC;AACF,IAAA,MAAM,WAAW,GAAG,QAAQ,IAAIF,UAAQ,CAAC,KAAK;AAC9C,IAAA,MAAM,KAAK,GAAGA,UAAQ,CAAC,UAAU,KAAKG,iCAAuB;AAE7D,IAAA,MAAM,OAAO,GAAG;AACd,QAAAC,2BAAa,CAAC;YACZ,GAAG;YACH,aAAa,EAAE,OAAO,CAAC,WAAW;YAClC,aAAa,EAAE,KAAK,GAAGJ,UAAQ,CAAC,UAAU,GAAG,SAAS;SACvD,CAAC;KACH;IAED,IAAI,KAAK,EAAE;AACT,QAAA,OAAO,CAAC,IAAI,CAACI,2BAAa,CAAC,EAAE,GAAG,EAAE,aAAa,EAAEJ,UAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;;AAG1E,IAAA,MAAM,UAAU,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC;IAEzD,OAAO;QACL,aAAa,EAAE,OAAO,CAAC,WAAW;QAClC,UAAU;QACV,KAAK,EAAE,aAAa,KAAK,WAAW;KACrC;AACH;;;;"}