{"version":3,"file":"getDomainRecord.cjs","sources":["../../../src/domain/getDomainRecord.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 { 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 a domain record.\r\n *\r\n * @example\r\n * ```ts\r\n * const options: GetDomainRecordOptions = { deserialize: true };\r\n * ```\r\n */\r\nexport interface GetDomainRecordOptions {\r\n  /** Whether to decode record content. */\r\n  deserialize?: boolean;\r\n  /** Custom Right of Association verifier. */\r\n  verifier?: ReadonlyUint8Array;\r\n}\r\n\r\n/**\r\n * Parameters for retrieving a domain record.\r\n *\r\n * @example\r\n * ```ts\r\n * const params: GetDomainRecordParams = {\r\n *   rpc,\r\n *   domain: \"example.sns\",\r\n *   record: Record.Url,\r\n * };\r\n * ```\r\n */\r\nexport interface GetDomainRecordParams {\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 type to retrieve. */\r\n  record: Record;\r\n  /** Record retrieval options. */\r\n  options?: GetDomainRecordOptions;\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: GetDomainRecordVerification = { staleness: true };\r\n * ```\r\n */\r\nexport interface GetDomainRecordVerification {\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: GetDomainRecordResult = {\r\n *   record: Record.Url,\r\n *   retrievedRecord,\r\n *   verified: { staleness: true },\r\n * };\r\n * ```\r\n */\r\nexport interface GetDomainRecordResult {\r\n  /** Record type. */\r\n  record: Record;\r\n  /** Retrieved record state. */\r\n  retrievedRecord: RecordState;\r\n  /** Verification status. */\r\n  verified: GetDomainRecordVerification;\r\n  /** Decoded record content. */\r\n  deserializedContent?: string;\r\n}\r\n\r\n/**\r\n * Retrieves a V2 record under a domain, verifies it, and optionally decodes its 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.record Record type to retrieve\r\n * @param params.options Optional record processing options\r\n * @returns The V2 record state, its verification result, and optional decoded content\r\n *\r\n * @example\r\n * ```ts\r\n * const result = await getDomainRecord({ rpc, domain: \"example.sns\", record: Record.Url });\r\n * ```\r\n */\r\nexport async function getDomainRecord({\r\n  rpc,\r\n  domain,\r\n  record,\r\n  options = {},\r\n}: GetDomainRecordParams): Promise<GetDomainRecordResult> {\r\n  const [trimmedDomain] = await assertTldSupported({ rpc, domain });\r\n  const [domainOwner, state] = await Promise.all([\r\n    _getSnsDomainOwner({ rpc, domain: trimmedDomain }),\r\n    getRecordV2Address({ domain: trimmedDomain, record }).then((address) =>\r\n      RecordState.retrieve(rpc, address)\r\n    ),\r\n  ]);\r\n\r\n  const verifier = options.verifier || _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"],"names":["record","assertTldSupported","_getSnsDomainOwner","getRecordV2Address","RecordState","_getDefaultVerifier","_verifyStalenessSync","_verifyRoaSync","deserializeRecordContent"],"mappings":";;;;;;;;;;;;AAsGA;;;;;;;;;;;;;;AAcG;AACI,eAAe,eAAe,CAAC,EACpC,GAAG,EACH,MAAM,UACNA,QAAM,EACN,OAAO,GAAG,EAAE,GACU,EAAA;AACtB,IAAA,MAAM,CAAC,aAAa,CAAC,GAAG,MAAMC,qCAAkB,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IACjE,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC7CC,oCAAkB,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;QAClDC,qCAAkB,CAAC,EAAE,MAAM,EAAE,aAAa,UAAEH,QAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KACjEI,kBAAW,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CACnC;AACF,KAAA,CAAC;AAEF,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAIC,kDAAmB,CAAC,UAAEL,QAAM,EAAE,KAAK,EAAE,CAAC;AAC3E,IAAA,MAAM,QAAQ,GAAG;QACf,SAAS,EAAEM,0CAAoB,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;QACvD,IAAI,QAAQ,IAAI;YACd,GAAG,EAAEC,6CAAc,CAAC,UAAEP,QAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;SACjD,CAAC;KACH;IAED,OAAO;gBACLA,QAAM;AACN,QAAA,eAAe,EAAE,KAAK;QACtB,QAAQ;AACR,QAAA,IAAI,OAAO,CAAC,WAAW,IAAI;YACzB,mBAAmB,EAAEQ,iDAAwB,CAAC;AAC5C,gBAAA,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE;wBAC3BR,QAAM;aACP,CAAC;SACH,CAAC;KACH;AACH;;;;"}