{"version":3,"file":"getSnsDomainsForAddress.cjs","sources":["../../../src/address/getSnsDomainsForAddress.ts"],"sourcesContent":["import {\r\n  Address,\r\n  Base58EncodedBytes,\r\n  GetMultipleAccountsApi,\r\n  GetProgramAccountsApi,\r\n  Rpc,\r\n} from \"@solana/kit\";\r\n\r\nimport {\r\n  NAME_PROGRAM_ADDRESS,\r\n  SNS_ROOT_DOMAIN_ACCOUNT,\r\n} from \"../constants/addresses\";\r\nimport { reverseLookupBatch } from \"../utils/reverseLookupBatch\";\r\n\r\n/**\r\n * Parameters for retrieving SNS domains owned by an address.\r\n *\r\n * @example\r\n * ```ts\r\n * const params: GetSnsDomainsForAddressParams = { rpc, address };\r\n * ```\r\n */\r\nexport interface GetSnsDomainsForAddressParams {\r\n  /** RPC client. */\r\n  rpc: Rpc<GetProgramAccountsApi & GetMultipleAccountsApi>;\r\n  /** Owner address. */\r\n  address: Address;\r\n}\r\n\r\n/**\r\n * An SNS domain owned directly by a registry address.\r\n *\r\n * @example\r\n * ```ts\r\n * const domain: GetSnsDomainsForAddressResult = {\r\n *   domain: \"example\",\r\n *   domainAddress,\r\n * };\r\n * ```\r\n */\r\nexport interface GetSnsDomainsForAddressResult {\r\n  /** TLD-less domain name. */\r\n  domain: string;\r\n  /** Domain account address. */\r\n  domainAddress: Address;\r\n}\r\n\r\n/**\r\n * Retrieves directly registry-owned top-level SNS domains for an address.\r\n *\r\n * Tokenized domains and subdomains are not included. Entries without reverse\r\n * lookup results are omitted.\r\n *\r\n * @param params Domain retrieval parameters\r\n * @param params.rpc RPC client implementing program account and multiple-account APIs\r\n * @param params.address Address whose directly registry-owned SNS domains are retrieved\r\n * @returns Domain records with names without a TLD suffix and domain addresses.\r\n *\r\n * @example\r\n * ```ts\r\n * const domains = await getSnsDomainsForAddress({ rpc, address });\r\n * ```\r\n */\r\nexport const getSnsDomainsForAddress = async ({\r\n  rpc,\r\n  address,\r\n}: GetSnsDomainsForAddressParams): Promise<GetSnsDomainsForAddressResult[]> => {\r\n  const results = await rpc\r\n    .getProgramAccounts(NAME_PROGRAM_ADDRESS, {\r\n      encoding: \"base64\",\r\n      filters: [\r\n        {\r\n          memcmp: {\r\n            offset: 32n,\r\n            bytes: address as string as Base58EncodedBytes,\r\n            encoding: \"base58\",\r\n          },\r\n        },\r\n        {\r\n          memcmp: {\r\n            offset: 0n,\r\n            bytes: SNS_ROOT_DOMAIN_ACCOUNT as string as Base58EncodedBytes,\r\n            encoding: \"base58\",\r\n          },\r\n        },\r\n      ],\r\n      dataSlice: {\r\n        offset: 0,\r\n        length: 0,\r\n      },\r\n    })\r\n    .send();\r\n\r\n  const domains = await reverseLookupBatch({\r\n    rpc,\r\n    domainAddresses: results.map((r) => r.pubkey),\r\n  });\r\n\r\n  return domains\r\n    .map((domain, idx) =>\r\n      domain\r\n        ? {\r\n            domain,\r\n            domainAddress: results[idx].pubkey,\r\n          }\r\n        : undefined\r\n    )\r\n    .filter((e) => e !== undefined);\r\n};\r\n"],"names":["NAME_PROGRAM_ADDRESS","SNS_ROOT_DOMAIN_ACCOUNT","reverseLookupBatch"],"mappings":";;;;;;;AA+CA;;;;;;;;;;;;;;;AAeG;AACI,MAAM,uBAAuB,GAAG,OAAO,EAC5C,GAAG,EACH,OAAO,GACuB,KAA8C;IAC5E,MAAM,OAAO,GAAG,MAAM;SACnB,kBAAkB,CAACA,8BAAoB,EAAE;AACxC,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,OAAO,EAAE;AACP,YAAA;AACE,gBAAA,MAAM,EAAE;AACN,oBAAA,MAAM,EAAE,GAAG;AACX,oBAAA,KAAK,EAAE,OAAuC;AAC9C,oBAAA,QAAQ,EAAE,QAAQ;AACnB,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,MAAM,EAAE;AACN,oBAAA,MAAM,EAAE,EAAE;AACV,oBAAA,KAAK,EAAEC,iCAAuD;AAC9D,oBAAA,QAAQ,EAAE,QAAQ;AACnB,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,SAAS,EAAE;AACT,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,MAAM,EAAE,CAAC;AACV,SAAA;KACF;AACA,SAAA,IAAI,EAAE;AAET,IAAA,MAAM,OAAO,GAAG,MAAMC,qCAAkB,CAAC;QACvC,GAAG;AACH,QAAA,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;AAC9C,KAAA,CAAC;AAEF,IAAA,OAAO;SACJ,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,KACf;AACE,UAAE;YACE,MAAM;AACN,YAAA,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM;AACnC;UACD,SAAS;SAEd,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC;AACnC;;;;"}