{"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 {\r\n  AccountDoesNotExistError,\r\n  InvalidSerializedDataError,\r\n} from \"../errors\";\r\n\r\n/**\r\n * Input for decoding an SNS name-registry account.\r\n *\r\n * @example\r\n * ```ts\r\n * const params: RegistryStateParams = { parentName, owner, class: classAddress };\r\n * ```\r\n */\r\nexport interface RegistryStateParams {\r\n  /** Encoded parent registry address. */\r\n  parentName: Uint8Array;\r\n  /** Encoded registry owner address. */\r\n  owner: Uint8Array;\r\n  /** Encoded registry class address. */\r\n  class: Uint8Array;\r\n}\r\n\r\n/** Decoded state of an SNS name-registry account. */\r\nexport class RegistryState {\r\n  /** Parent registry address. */\r\n  parentName: Address;\r\n  /** Registry owner address. */\r\n  owner: Address;\r\n  /** Registry class address. */\r\n  class: Address;\r\n  /** Registry data after the fixed header. */\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: RegistryStateParams) {\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 InvalidSerializedDataError(\r\n        \"Failed to deserialize RegistryState data\"\r\n      );\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":["addressCodec","deserialize","InvalidSerializedDataError","fetchEncodedAccount","AccountDoesNotExistError","fetchEncodedAccounts"],"mappings":";;;;;;;;;AAiCA;MACa,aAAa,CAAA;;AAExB,IAAA,UAAU;;AAEV,IAAA,KAAK;;AAEL,IAAA,KAAK;;AAEL,IAAA,IAAI;IAEJ,OAAO,MAAM,GAAG;AACd,QAAA,MAAM,EAAE;AACN,YAAA,UAAU,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE;AAC9C,YAAA,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE;AACzC,YAAA,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE;AAC1C,SAAA;KACF;;;;;AAMD,IAAA,OAAO,UAAU,GAAG,EAAE;AAEtB,IAAA,WAAA,CAAY,GAAwB,EAAA;QAClC,IAAI,CAAC,UAAU,GAAGA,mBAAY,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;QACrD,IAAI,CAAC,KAAK,GAAGA,mBAAY,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QAC3C,IAAI,CAAC,KAAK,GAAGA,mBAAY,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;;IAG7C,OAAO,WAAW,CAAC,IAAgB,EAAA;AACjC,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,GAAG,IAAI,aAAa,CAACC,iBAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAQ,CAAC;YACpE,GAAG,CAAC,IAAI,GAAG,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;AAEvC,YAAA,OAAO,GAAG;;AACV,QAAA,MAAM;AACN,YAAA,MAAM,IAAIC,iCAA0B,CAClC,0CAA0C,CAC3C;;;AAIL,IAAA,aAAa,QAAQ,CACnB,GAA2B,EAC3B,OAAgB,EAAA;QAEhB,MAAM,aAAa,GAAG,MAAMC,uBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC;AAC7D,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;AACzB,YAAA,MAAM,IAAIC,+BAAwB,CAAC,mCAAmC,CAAC;;QAGzE,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC;;AAG7C,IAAA,aAAa,cAAc,CACzB,GAAgC,EAChC,eAA0B,EAAA;QAE1B,MAAM,cAAc,GAAG,MAAMC,wBAAoB,CAAC,GAAG,EAAE,eAAe,CAAC;AAEvE,QAAA,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,OAAO,KAChC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAC5D;;AAGI,IAAA,aAAa,aAAa,CAC/B,GAAgC,EAChC,eAA0B,EAAA;QAE1B,MAAM,MAAM,GAAkC,EAAE;AAChD,QAAA,MAAM,SAAS,GAAG,CAAC,GAAG,eAAe,CAAC;AACtC,QAAA,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3B,MAAM,CAAC,IAAI,CACT,IAAI,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAC9D;;AAGH,QAAA,OAAO,MAAM;;;;;;"}