{"version":3,"file":"getNftsForAddress.cjs","sources":["../../../src/address/getNftsForAddress.ts"],"sourcesContent":["import {\r\n  Address,\r\n  GetMultipleAccountsApi,\r\n  GetProgramAccountsApi,\r\n  Rpc,\r\n} from \"@solana/kit\";\r\n\r\nimport { base64Codec, tokenCodec } from \"../codecs\";\r\nimport { TOKEN_PROGRAM_ADDRESS } from \"../constants/addresses\";\r\nimport { NftState } from \"../states/nft\";\r\nimport { reverseLookupBatch } from \"../utils/reverseLookupBatch\";\r\n\r\ninterface GetNftsForAddressParams {\r\n  rpc: Rpc<GetMultipleAccountsApi & GetProgramAccountsApi>;\r\n  address: Address;\r\n}\r\n\r\ninterface Result {\r\n  domain: string;\r\n  domainAddress: Address;\r\n  mint: Address;\r\n}\r\n\r\n/**\r\n * Fetches NFT states for a given address.\r\n *\r\n * @param params - An object containing the following properties:\r\n *   - `rpc`: An RPC interface implementing GetProgramAccountsApi.\r\n *   - `address`: The address whose associated NFT states are to be fetched.\r\n * @returns A promise resolving to an array of NftState objects.\r\n */\r\nconst getNftStatesForAddress = async ({\r\n  rpc,\r\n  address,\r\n}: {\r\n  rpc: Rpc<GetProgramAccountsApi>;\r\n  address: Address;\r\n}): Promise<NftState[]> => {\r\n  try {\r\n    const results = await rpc\r\n      .getProgramAccounts(TOKEN_PROGRAM_ADDRESS, {\r\n        encoding: \"base64\",\r\n        filters: [\r\n          {\r\n            memcmp: { offset: 32n, bytes: address, encoding: \"base58\" },\r\n          },\r\n          { memcmp: { offset: 64n, bytes: \"2\", encoding: \"base58\" } },\r\n          { dataSize: 165n },\r\n        ],\r\n      })\r\n      .send();\r\n\r\n    const nftStates = await Promise.all(\r\n      results.map(({ account }) => {\r\n        const { mint } = tokenCodec.decode(base64Codec.encode(account.data[0]));\r\n        return NftState.retrieveFromMint(rpc, mint).catch(() => undefined);\r\n      })\r\n    );\r\n\r\n    return nftStates.filter((state) => state !== undefined);\r\n  } catch (error) {\r\n    console.error(\"Error retrieving NFT records:\", error);\r\n    return [];\r\n  }\r\n};\r\n\r\n/**\r\n * Retrieves NFTs owned by a given address.\r\n *\r\n * @param params - An object containing the following properties:\r\n *   - `rpc`: An RPC interface implementing GetMultipleAccountsApi and GetProgramAccountsApi.\r\n *   - `address`: The address for which NFTs are to be fetched.\r\n * @returns A promise resolving to an array of Result objects containing domain, domainAddress, and mint.\r\n */\r\nexport const getNftsForAddress = async ({\r\n  rpc,\r\n  address,\r\n}: GetNftsForAddressParams): Promise<Result[]> => {\r\n  const nftStates = await getNftStatesForAddress({ rpc, address });\r\n  const nftNameAccounts = nftStates.map((state) => state.nameAccount);\r\n  const domains = await reverseLookupBatch({\r\n    rpc,\r\n    domainAddresses: nftNameAccounts,\r\n  });\r\n\r\n  return domains\r\n    .map((domain, idx) =>\r\n      domain\r\n        ? {\r\n            domain,\r\n            domainAddress: nftStates[idx].nameAccount,\r\n            mint: nftStates[idx].nftMint,\r\n          }\r\n        : undefined\r\n    )\r\n    .filter((e) => e !== undefined);\r\n};\r\n"],"names":["async","rpc","address","nftStates","results","getProgramAccounts","TOKEN_PROGRAM_ADDRESS","encoding","filters","memcmp","offset","bytes","dataSize","send","Promise","all","map","account","mint","tokenCodec","decode","base64Codec","encode","data","NftState","retrieveFromMint","catch","filter","state","undefined","error","console","getNftStatesForAddress","nftNameAccounts","nameAccount","reverseLookupBatch","domainAddresses","domain","idx","domainAddress","nftMint","e"],"mappings":"0LA0EiCA,OAC/BC,MACAC,cAEA,MAAMC,OA/CuBH,QAC7BC,MACAC,cAKA,IACE,MAAME,QAAgBH,EACnBI,mBAAmBC,EAAAA,sBAAuB,CACzCC,SAAU,SACVC,QAAS,CACP,CACEC,OAAQ,CAAEC,OAAQ,IAAKC,MAAOT,EAASK,SAAU,WAEnD,CAAEE,OAAQ,CAAEC,OAAQ,IAAKC,MAAO,IAAKJ,SAAU,WAC/C,CAAEK,SAAU,SAGfC,OASH,aAPwBC,QAAQC,IAC9BX,EAAQY,KAAI,EAAGC,cACb,MAAMC,KAAEA,GAASC,EAAUA,WAACC,OAAOC,EAAAA,YAAYC,OAAOL,EAAQM,KAAK,KACnE,OAAOC,EAAAA,SAASC,iBAAiBxB,EAAKiB,GAAMQ,OAAM,KAAe,GAAC,MAIrDC,QAAQC,QAAoBC,IAAVD,IACnC,MAAOE,GAEP,OADAC,QAAQD,MAAM,gCAAiCA,GACxC,KAgBeE,CAAuB,CAAE/B,MAAKC,YAChD+B,EAAkB9B,EAAUa,KAAKY,GAAUA,EAAMM,cAMvD,aALsBC,qBAAmB,CACvClC,MACAmC,gBAAiBH,KAIhBjB,KAAI,CAACqB,EAAQC,IACZD,EACI,CACEA,SACAE,cAAepC,EAAUmC,GAAKJ,YAC9BhB,KAAMf,EAAUmC,GAAKE,cAEvBX,IAELF,QAAQc,QAAYZ,IAANY,GAAgB"}