{"version":3,"file":"registry.cjs","sources":["../../../src/states/registry.ts"],"sourcesContent":["import {\r\n  Address,\r\n  GetAccountInfoApi,\r\n  GetMultipleAccountsApi,\r\n  Rpc,\r\n  fetchEncodedAccount,\r\n  fetchEncodedAccounts,\r\n} from \"@solana/kit\";\r\nimport { deserialize } from \"borsh\";\r\n\r\nimport { addressCodec } from \"../codecs\";\r\nimport { AccountDoesNotExistError } from \"../errors\";\r\n\r\nexport class RegistryState {\r\n  parentName: Address;\r\n  owner: Address;\r\n  class: Address;\r\n  data: Uint8Array | undefined;\r\n\r\n  static schema = {\r\n    struct: {\r\n      parentName: { array: { type: \"u8\", len: 32 } },\r\n      owner: { array: { type: \"u8\", len: 32 } },\r\n      class: { array: { type: \"u8\", len: 32 } },\r\n    },\r\n  };\r\n\r\n  // The total length is calculated as the sum of:\r\n  // - `parentName`: 32 bytes (array of `u8` with length 32)\r\n  // - `owner`: 32 bytes (array of `u8` with length 32)\r\n  // - `class`: 32 bytes (array of `u8` with length 32)\r\n  static HEADER_LEN = 96;\r\n\r\n  constructor(obj: {\r\n    parentName: Uint8Array;\r\n    owner: Uint8Array;\r\n    class: Uint8Array;\r\n  }) {\r\n    this.parentName = addressCodec.decode(obj.parentName);\r\n    this.owner = addressCodec.decode(obj.owner);\r\n    this.class = addressCodec.decode(obj.class);\r\n  }\r\n\r\n  static deserialize(data: Uint8Array): RegistryState {\r\n    try {\r\n      const res = new RegistryState(deserialize(this.schema, data) as any);\r\n      res.data = data?.slice(this.HEADER_LEN);\r\n\r\n      return res;\r\n    } catch {\r\n      throw new Error(\"Failed to deserialize RegistryState data\");\r\n    }\r\n  }\r\n\r\n  static async retrieve(\r\n    rpc: Rpc<GetAccountInfoApi>,\r\n    address: Address\r\n  ): Promise<RegistryState> {\r\n    const domainAccount = await fetchEncodedAccount(rpc, address);\r\n    if (!domainAccount.exists) {\r\n      throw new AccountDoesNotExistError(\"The domain account does not exist\");\r\n    }\r\n\r\n    return this.deserialize(domainAccount.data);\r\n  }\r\n\r\n  static async _retrieveBatch(\r\n    rpc: Rpc<GetMultipleAccountsApi>,\r\n    domainAddresses: Address[]\r\n  ): Promise<(RegistryState | undefined)[]> {\r\n    const domainAccounts = await fetchEncodedAccounts(rpc, domainAddresses);\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    domainAddresses: Address[]\r\n  ): Promise<(RegistryState | undefined)[]> {\r\n    const result: (RegistryState | undefined)[] = [];\r\n    const addresses = [...domainAddresses];\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"],"names":["RegistryState","parentName","owner","class","data","static","struct","array","type","len","constructor","obj","this","addressCodec","decode","deserialize","res","schema","slice","HEADER_LEN","Error","retrieve","rpc","address","domainAccount","fetchEncodedAccount","exists","AccountDoesNotExistError","_retrieveBatch","domainAddresses","fetchEncodedAccounts","map","account","undefined","retrieveBatch","result","addresses","length","push","splice"],"mappings":"2JAaaA,EACXC,WACAC,MACAC,MACAC,KAEAC,cAAgB,CACdC,OAAQ,CACNL,WAAY,CAAEM,MAAO,CAAEC,KAAM,KAAMC,IAAK,KACxCP,MAAO,CAAEK,MAAO,CAAEC,KAAM,KAAMC,IAAK,KACnCN,MAAO,CAAEI,MAAO,CAAEC,KAAM,KAAMC,IAAK,OAQvCJ,kBAAoB,GAEpB,WAAAK,CAAYC,GAKVC,KAAKX,WAAaY,EAAAA,aAAaC,OAAOH,EAAIV,YAC1CW,KAAKV,MAAQW,EAAAA,aAAaC,OAAOH,EAAIT,OACrCU,KAAKT,MAAQU,EAAAA,aAAaC,OAAOH,EAAIR,OAGvC,kBAAOY,CAAYX,GACjB,IACE,MAAMY,EAAM,IAAIhB,EAAce,EAAAA,YAAYH,KAAKK,OAAQb,IAGvD,OAFAY,EAAIZ,KAAOA,GAAMc,MAAMN,KAAKO,YAErBH,EACP,MACA,MAAM,IAAII,MAAM,6CAIpB,qBAAaC,CACXC,EACAC,GAEA,MAAMC,QAAsBC,sBAAoBH,EAAKC,GACrD,IAAKC,EAAcE,OACjB,MAAM,IAAIC,EAAwBA,yBAAC,qCAGrC,OAAOf,KAAKG,YAAYS,EAAcpB,MAGxC,2BAAawB,CACXN,EACAO,GAIA,aAF6BC,uBAAqBR,EAAKO,IAEjCE,KAAKC,GACzBA,EAAQN,OAASd,KAAKG,YAAYiB,EAAQ5B,WAAQ6B,IAI/C,0BAAaC,CAClBZ,EACAO,GAEA,MAAMM,EAAwC,GACxCC,EAAY,IAAIP,GACtB,KAAOO,EAAUC,OAAS,GACxBF,EAAOG,cACK1B,KAAKgB,eAAeN,EAAKc,EAAUG,OAAO,EAAG,OAI3D,OAAOJ"}