{"version":3,"file":"primaryDomain.cjs","sources":["../../../src/states/primaryDomain.ts"],"sourcesContent":["import {\r\n  Address,\r\n  GetAccountInfoApi,\r\n  GetMultipleAccountsApi,\r\n  Rpc,\r\n  fetchEncodedAccount,\r\n  fetchEncodedAccounts,\r\n  getProgramDerivedAddress,\r\n} from \"@solana/kit\";\r\nimport { deserialize } from \"borsh\";\r\n\r\nimport { addressCodec, utf8Codec } from \"../codecs\";\r\nimport {\r\n  InvalidSerializedDataError,\r\n  PrimaryDomainNotFoundError,\r\n} from \"../errors\";\r\n\r\nexport class PrimaryDomainState {\r\n  tag: number;\r\n  nameAccount: Address;\r\n\r\n  static schema = {\r\n    struct: {\r\n      tag: \"u8\",\r\n      nameAccount: { array: { type: \"u8\", len: 32 } },\r\n    },\r\n  };\r\n\r\n  constructor(obj: { tag: number; nameAccount: Uint8Array }) {\r\n    this.tag = obj.tag;\r\n    this.nameAccount = addressCodec.decode(obj.nameAccount);\r\n  }\r\n\r\n  static deserialize(data: Uint8Array): PrimaryDomainState {\r\n    try {\r\n      return new PrimaryDomainState(deserialize(this.schema, data) as any);\r\n    } catch {\r\n      throw new InvalidSerializedDataError(\r\n        \"Failed to deserialize PrimaryDomainState data\"\r\n      );\r\n    }\r\n  }\r\n\r\n  static async retrieve(rpc: Rpc<GetAccountInfoApi>, address: Address) {\r\n    const primaryDomainAccount = await fetchEncodedAccount(rpc, address);\r\n    if (!primaryDomainAccount.exists) {\r\n      throw new PrimaryDomainNotFoundError(\r\n        \"The favourite account does not exist\"\r\n      );\r\n    }\r\n    return this.deserialize(primaryDomainAccount.data);\r\n  }\r\n\r\n  static async _retrieveBatch(\r\n    rpc: Rpc<GetMultipleAccountsApi>,\r\n    primaryAddresses: Address[]\r\n  ): Promise<(PrimaryDomainState | undefined)[]> {\r\n    const domainAccounts = await fetchEncodedAccounts(rpc, primaryAddresses);\r\n\r\n    return domainAccounts.map((account) =>\r\n      account.exists ? this.deserialize(account.data) : undefined\r\n    );\r\n  }\r\n\r\n  public static async retrieveBatch(\r\n    rpc: Rpc<GetMultipleAccountsApi>,\r\n    primaryAddresses: Address[]\r\n  ): Promise<(PrimaryDomainState | undefined)[]> {\r\n    const result: (PrimaryDomainState | undefined)[] = [];\r\n    const addresses = [...primaryAddresses];\r\n    while (addresses.length > 0) {\r\n      result.push(\r\n        ...(await this._retrieveBatch(rpc, addresses.splice(0, 100)))\r\n      );\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  static async getAddress(programAddress: Address, walletAddress: Address) {\r\n    const [address] = await getProgramDerivedAddress({\r\n      programAddress,\r\n      seeds: [\r\n        utf8Codec.encode(\"favourite_domain\"),\r\n        addressCodec.encode(walletAddress),\r\n      ],\r\n    });\r\n\r\n    return address;\r\n  }\r\n}\r\n"],"names":["PrimaryDomainState","tag","nameAccount","static","struct","array","type","len","constructor","obj","this","addressCodec","decode","deserialize","data","schema","InvalidSerializedDataError","retrieve","rpc","address","primaryDomainAccount","fetchEncodedAccount","exists","PrimaryDomainNotFoundError","_retrieveBatch","primaryAddresses","fetchEncodedAccounts","map","account","undefined","retrieveBatch","result","addresses","length","push","splice","getAddress","programAddress","walletAddress","getProgramDerivedAddress","seeds","utf8Codec","encode"],"mappings":"2JAiBaA,EACXC,IACAC,YAEAC,cAAgB,CACdC,OAAQ,CACNH,IAAK,KACLC,YAAa,CAAEG,MAAO,CAAEC,KAAM,KAAMC,IAAK,OAI7C,WAAAC,CAAYC,GACVC,KAAKT,IAAMQ,EAAIR,IACfS,KAAKR,YAAcS,EAAAA,aAAaC,OAAOH,EAAIP,aAG7C,kBAAOW,CAAYC,GACjB,IACE,OAAO,IAAId,EAAmBa,EAAWA,YAACH,KAAKK,OAAQD,IACvD,MACA,MAAM,IAAIE,EAA0BA,2BAClC,kDAKN,qBAAaC,CAASC,EAA6BC,GACjD,MAAMC,QAA6BC,sBAAoBH,EAAKC,GAC5D,IAAKC,EAAqBE,OACxB,MAAM,IAAIC,EAA0BA,2BAClC,wCAGJ,OAAOb,KAAKG,YAAYO,EAAqBN,MAG/C,2BAAaU,CACXN,EACAO,GAIA,aAF6BC,uBAAqBR,EAAKO,IAEjCE,KAAKC,GACzBA,EAAQN,OAASZ,KAAKG,YAAYe,EAAQd,WAAQe,IAI/C,0BAAaC,CAClBZ,EACAO,GAEA,MAAMM,EAA6C,GAC7CC,EAAY,IAAIP,GACtB,KAAOO,EAAUC,OAAS,GACxBF,EAAOG,cACKxB,KAAKc,eAAeN,EAAKc,EAAUG,OAAO,EAAG,OAI3D,OAAOJ,EAGT,uBAAaK,CAAWC,EAAyBC,GAC/C,MAAOnB,SAAiBoB,2BAAyB,CAC/CF,iBACAG,MAAO,CACLC,EAASA,UAACC,OAAO,oBACjB/B,EAAYA,aAAC+B,OAAOJ,MAIxB,OAAOnB"}