{"version":3,"file":"primaryDomain.mjs","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\n/**\r\n * Input for decoding an SNS primary-domain account.\r\n *\r\n * @example\r\n * ```ts\r\n * const params: PrimaryDomainStateParams = { tag: 0, nameAccount };\r\n * ```\r\n */\r\nexport interface PrimaryDomainStateParams {\r\n  /** Account state tag. */\r\n  tag: number;\r\n  /** Encoded primary domain account address. */\r\n  nameAccount: Uint8Array;\r\n}\r\n\r\n/** Decoded state of an SNS primary-domain account. */\r\nexport class PrimaryDomainState {\r\n  /** Account state tag. */\r\n  tag: number;\r\n  /** Primary domain account address. */\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: PrimaryDomainStateParams) {\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":[],"mappings":";;;;;AAgCA;MACa,kBAAkB,CAAA;;AAE7B,IAAA,GAAG;;AAEH,IAAA,WAAW;IAEX,OAAO,MAAM,GAAG;AACd,QAAA,MAAM,EAAE;AACN,YAAA,GAAG,EAAE,IAAI;AACT,YAAA,WAAW,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE;AAChD,SAAA;KACF;AAED,IAAA,WAAA,CAAY,GAA6B,EAAA;AACvC,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG;QAClB,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC;;IAGzD,OAAO,WAAW,CAAC,IAAgB,EAAA;AACjC,QAAA,IAAI;AACF,YAAA,OAAO,IAAI,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAQ,CAAC;;AACpE,QAAA,MAAM;AACN,YAAA,MAAM,IAAI,0BAA0B,CAClC,+CAA+C,CAChD;;;AAIL,IAAA,aAAa,QAAQ,CAAC,GAA2B,EAAE,OAAgB,EAAA;QACjE,MAAM,oBAAoB,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC;AACpE,QAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE;AAChC,YAAA,MAAM,IAAI,0BAA0B,CAClC,sCAAsC,CACvC;;QAEH,OAAO,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC;;AAGpD,IAAA,aAAa,cAAc,CACzB,GAAgC,EAChC,gBAA2B,EAAA;QAE3B,MAAM,cAAc,GAAG,MAAM,oBAAoB,CAAC,GAAG,EAAE,gBAAgB,CAAC;AAExE,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,gBAA2B,EAAA;QAE3B,MAAM,MAAM,GAAuC,EAAE;AACrD,QAAA,MAAM,SAAS,GAAG,CAAC,GAAG,gBAAgB,CAAC;AACvC,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;;AAGf,IAAA,aAAa,UAAU,CAAC,cAAuB,EAAE,aAAsB,EAAA;AACrE,QAAA,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,wBAAwB,CAAC;YAC/C,cAAc;AACd,YAAA,KAAK,EAAE;AACL,gBAAA,SAAS,CAAC,MAAM,CAAC,kBAAkB,CAAC;AACpC,gBAAA,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC;AACnC,aAAA;AACF,SAAA,CAAC;AAEF,QAAA,OAAO,OAAO;;;;;;"}