{"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  ROOT_DOMAIN_ADDRESS,\r\n} from \"../constants/addresses\";\r\nimport { getNftOwner } from \"../nft/getNftOwner\";\r\nimport { PrimaryDomainState } from \"../states/primaryDomain\";\r\nimport { RegistryState } from \"../states/registry\";\r\nimport { reverseLookup } from \"../utils/reverseLookup\";\r\n\r\ninterface GetPrimaryDomainParams {\r\n  rpc: Rpc<GetAccountInfoApi & GetTokenLargestAccountsApi>;\r\n  walletAddress: Address;\r\n}\r\n\r\n/**\r\n * Fetches the primary domain associated with a given wallet address.\r\n *\r\n * @param params - An object containing the following properties:\r\n *   - `rpc`: An RPC interface implementing GetAccountInfoApi and GetTokenLargestAccountsApi.\r\n *   - `walletAddress`: The wallet address for which the primary domain is retrieved.\r\n * @returns A promise resolving to an object containing:\r\n *   - `domainAddress`: The address of the primary domain.\r\n *   - `domainName`: The primary domain name (without .sol suffix).\r\n *   - `stale`: false if primary domain was set by the current domain owner, true otherwise.\r\n */\r\nexport const getPrimaryDomain = async ({\r\n  rpc,\r\n  walletAddress,\r\n}: GetPrimaryDomainParams): Promise<{\r\n  domainAddress: Address;\r\n  domainName: string;\r\n  stale: boolean;\r\n}> => {\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    getNftOwner({ rpc, domainAddress: primary.nameAccount }),\r\n  ]);\r\n  const domainOwner = nftOwner || registry.owner;\r\n  const isSub = registry.parentName !== ROOT_DOMAIN_ADDRESS;\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":["async","rpc","walletAddress","primaryAddress","PrimaryDomainState","getAddress","NAME_OFFERS_ADDRESS","primary","retrieve","registry","nftOwner","Promise","all","RegistryState","nameAccount","getNftOwner","domainAddress","domainOwner","owner","isSub","parentName","ROOT_DOMAIN_ADDRESS","lookups","reverseLookup","parentAddress","undefined","push","domainName","join","stale"],"mappings":"2OAgCgCA,OAC9BC,MACAC,oBAMA,MAAMC,QAAuBC,EAAAA,mBAAmBC,WAC9CC,EAAAA,oBACAJ,GAEIK,QAAgBH,EAAAA,mBAAmBI,SAASP,EAAKE,IAChDM,EAAUC,SAAkBC,QAAQC,IAAI,CAC7CC,EAAAA,cAAcL,SAASP,EAAKM,EAAQO,aACpCC,EAAAA,YAAY,CAAEd,MAAKe,cAAeT,EAAQO,gBAEtCG,EAAcP,GAAYD,EAASS,MACnCC,EAAQV,EAASW,aAAeC,EAAmBA,oBAEnDC,EAAU,CACdC,gBAAc,CACZtB,MACAe,cAAeT,EAAQO,YACvBU,cAAeL,EAAQV,EAASW,gBAAaK,KAI7CN,GACFG,EAAQI,KAAKH,EAAAA,cAAc,CAAEtB,MAAKe,cAAeP,EAASW,cAG5D,MAAMO,SAAoBhB,QAAQC,IAAIU,IAAUM,KAAK,KAErD,MAAO,CACLZ,cAAeT,EAAQO,YACvBa,aACAE,MAAO3B,IAAkBe,EAC1B"}