{"version":3,"file":"getDomainRecords.cjs","sources":["../../../src/domain/getDomainRecords.ts"],"sourcesContent":["import {\r\n  GetAccountInfoApi,\r\n  GetMultipleAccountsApi,\r\n  GetSlotApi,\r\n  GetTokenLargestAccountsApi,\r\n  ReadonlyUint8Array,\r\n  Rpc,\r\n} from \"@solana/kit\";\r\n\r\nimport { MissingVerifierError } from \"../errors\";\r\nimport { getRecordV2Address } from \"../record/getRecordV2Address\";\r\nimport {\r\n  _getDefaultVerifier,\r\n  _verifyRoaSync,\r\n} from \"../record/verifyRecordRightOfAssociation\";\r\nimport { _verifyStalenessSync } from \"../record/verifyRecordStaleness\";\r\nimport { RecordState } from \"../states/record\";\r\nimport { Record } from \"../types/record\";\r\nimport { assertTldSupported } from \"../utils/assertTldSupported\";\r\nimport { deserializeRecordContent } from \"../utils/deserializers/deserializeRecordContent\";\r\nimport { _getSnsDomainOwner } from \"./getSnsDomainOwner\";\r\n\r\n/**\r\n * Options for retrieving domain records.\r\n *\r\n * @example\r\n * ```ts\r\n * const options: GetDomainRecordsOptions<[Record.Url], [undefined]> = {\r\n *   deserialize: true,\r\n *   verifiers: [undefined],\r\n * };\r\n * ```\r\n */\r\nexport interface GetDomainRecordsOptions<\r\n  T extends Record[],\r\n  U extends { [K in keyof T]: ReadonlyUint8Array | undefined },\r\n> {\r\n  /** Whether to decode record content. */\r\n  deserialize?: boolean;\r\n  /** Right of Association verifiers by record position. */\r\n  verifiers?: [...U];\r\n}\r\n\r\n/**\r\n * Parameters for retrieving domain records.\r\n *\r\n * @example\r\n * ```ts\r\n * const params: GetDomainRecordsParams<[Record.Url], [undefined]> = {\r\n *   rpc,\r\n *   domain: \"example.sns\",\r\n *   records: [Record.Url],\r\n * };\r\n * ```\r\n */\r\nexport interface GetDomainRecordsParams<\r\n  T extends Record[],\r\n  U extends { [K in keyof T]: ReadonlyUint8Array | undefined },\r\n> {\r\n  /** RPC client. */\r\n  rpc: Rpc<\r\n    GetAccountInfoApi &\r\n      GetMultipleAccountsApi &\r\n      GetTokenLargestAccountsApi &\r\n      GetSlotApi\r\n  >;\r\n  /** Full domain name. */\r\n  domain: string;\r\n  /** Record types to retrieve. */\r\n  records: [...T];\r\n  /** Record retrieval options. */\r\n  options?: GetDomainRecordsOptions<T, U>;\r\n}\r\n\r\n/**\r\n * Verification status for a domain record.\r\n *\r\n * @example\r\n * ```ts\r\n * const verified: GetDomainRecordsVerification = { staleness: true };\r\n * ```\r\n */\r\nexport interface GetDomainRecordsVerification {\r\n  /** Whether the record is current. */\r\n  staleness: boolean;\r\n  /** Right of Association verification result. */\r\n  roa?: boolean;\r\n}\r\n\r\n/**\r\n * A retrieved domain record.\r\n *\r\n * @example\r\n * ```ts\r\n * const result: GetDomainRecordsResult = {\r\n *   record: Record.Url,\r\n *   retrievedRecord,\r\n *   verified: { staleness: true },\r\n * };\r\n * ```\r\n */\r\nexport interface GetDomainRecordsResult {\r\n  /** Record type. */\r\n  record: Record;\r\n  /** Retrieved record state. */\r\n  retrievedRecord: RecordState;\r\n  /** Verification status. */\r\n  verified: GetDomainRecordsVerification;\r\n  /** Decoded record content. */\r\n  deserializedContent?: string;\r\n}\r\n\r\n/**\r\n * Retrieves V2 records under a domain, verifies them, and optionally decodes their content.\r\n *\r\n * @param params Record retrieval parameters\r\n * @param params.rpc RPC client implementing account, multiple-account, and token-largest-account APIs\r\n * @param params.domain Full domain name including a `.sns` or `.sol` suffix\r\n * @param params.records Record types to retrieve\r\n * @param params.options Optional record processing options\r\n * @returns Results aligned with `records`; missing V2 record accounts produce `undefined`\r\n *\r\n * @example\r\n * ```ts\r\n * const results = await getDomainRecords({ rpc, domain: \"example.sns\", records: [Record.Url] });\r\n * ```\r\n */\r\nexport async function getDomainRecords<\r\n  T extends Record[],\r\n  U extends { [K in keyof T]: ReadonlyUint8Array | undefined },\r\n>({\r\n  rpc,\r\n  domain,\r\n  records,\r\n  options = {},\r\n}: GetDomainRecordsParams<T, U>): Promise<\r\n  (GetDomainRecordsResult | undefined)[]\r\n> {\r\n  const verifiers = options.verifiers;\r\n  if (verifiers && verifiers.length !== records.length) {\r\n    throw new MissingVerifierError(\r\n      \"The number of verifiers must be the same as the number of records\"\r\n    );\r\n  }\r\n\r\n  const [trimmedDomain] = await assertTldSupported({ rpc, domain });\r\n\r\n  const [domainOwner, states] = await Promise.all([\r\n    _getSnsDomainOwner({ rpc, domain: trimmedDomain }),\r\n    Promise.all(\r\n      records.map((record) =>\r\n        getRecordV2Address({ domain: trimmedDomain, record })\r\n      )\r\n    ).then((addresses) => RecordState.retrieveBatch(rpc, addresses)),\r\n  ]);\r\n\r\n  return states.map((state, idx) => {\r\n    if (!state) return undefined;\r\n\r\n    const record = records[idx];\r\n    const verifier =\r\n      options.verifiers?.[idx] || _getDefaultVerifier({ record, state });\r\n    const verified = {\r\n      staleness: _verifyStalenessSync({ domainOwner, state }),\r\n      ...(verifier && {\r\n        roa: _verifyRoaSync({ record, state, verifier }),\r\n      }),\r\n    };\r\n\r\n    return {\r\n      record,\r\n      retrievedRecord: state,\r\n      verified,\r\n      ...(options.deserialize && {\r\n        deserializedContent: deserializeRecordContent({\r\n          content: state.getContent(),\r\n          record,\r\n        }),\r\n      }),\r\n    };\r\n  });\r\n}\r\n"],"names":["MissingVerifierError","assertTldSupported","_getSnsDomainOwner","getRecordV2Address","RecordState","_getDefaultVerifier","_verifyStalenessSync","_verifyRoaSync","deserializeRecordContent"],"mappings":";;;;;;;;;;;;;AAgHA;;;;;;;;;;;;;;AAcG;AACI,eAAe,gBAAgB,CAGpC,EACA,GAAG,EACH,MAAM,EACN,OAAO,EACP,OAAO,GAAG,EAAE,GACiB,EAAA;AAG7B,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS;IACnC,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE;AACpD,QAAA,MAAM,IAAIA,2BAAoB,CAC5B,mEAAmE,CACpE;;AAGH,IAAA,MAAM,CAAC,aAAa,CAAC,GAAG,MAAMC,qCAAkB,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IAEjE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC9CC,oCAAkB,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;AAClD,QAAA,OAAO,CAAC,GAAG,CACT,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KACjBC,qCAAkB,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CACtD,CACF,CAAC,IAAI,CAAC,CAAC,SAAS,KAAKC,kBAAW,CAAC,aAAa,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AACjE,KAAA,CAAC;IAEF,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,KAAI;AAC/B,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,SAAS;AAE5B,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;AAC3B,QAAA,MAAM,QAAQ,GACZ,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC,IAAIC,kDAAmB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACpE,QAAA,MAAM,QAAQ,GAAG;YACf,SAAS,EAAEC,0CAAoB,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;YACvD,IAAI,QAAQ,IAAI;gBACd,GAAG,EAAEC,6CAAc,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;aACjD,CAAC;SACH;QAED,OAAO;YACL,MAAM;AACN,YAAA,eAAe,EAAE,KAAK;YACtB,QAAQ;AACR,YAAA,IAAI,OAAO,CAAC,WAAW,IAAI;gBACzB,mBAAmB,EAAEC,iDAAwB,CAAC;AAC5C,oBAAA,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE;oBAC3B,MAAM;iBACP,CAAC;aACH,CAAC;SACH;AACH,KAAC,CAAC;AACJ;;;;"}