{"version":3,"file":"verifyRecordStaleness.mjs","sources":["../../../src/record/verifyRecordStaleness.ts"],"sourcesContent":["import {\r\n  Address,\r\n  GetAccountInfoApi,\r\n  GetSlotApi,\r\n  GetTokenLargestAccountsApi,\r\n  Rpc,\r\n} from \"@solana/kit\";\r\n\r\nimport { addressCodec } from \"../codecs\";\r\nimport { _getSnsDomainOwner } from \"../domain/getSnsDomainOwner\";\r\nimport { getRecordV2Address } from \"../record/getRecordV2Address\";\r\nimport { RecordState } from \"../states/record\";\r\nimport { Record } from \"../types/record\";\r\nimport { Validation } from \"../types/validation\";\r\nimport { assertTldSupported } from \"../utils/assertTldSupported\";\r\nimport { uint8ArraysEqual } from \"../utils/uint8Array/uint8ArraysEqual\";\r\n\r\n/**\r\n * Internal helper that verifies a record's staleness validation.\r\n *\r\n * @param params Staleness verification parameters\r\n * @param params.domainOwner Current owner of the domain\r\n * @param params.state Record state to verify\r\n * @returns True if the record's staleness validation passes, false otherwise.\r\n *\r\n * @example\r\n * ```ts\r\n * const valid = _verifyStalenessSync({ domainOwner, state });\r\n * ```\r\n */\r\nexport const _verifyStalenessSync = ({\r\n  domainOwner,\r\n  state,\r\n}: {\r\n  domainOwner: Address;\r\n  state: RecordState;\r\n}) => {\r\n  const stalenessId = state.getStalenessId();\r\n\r\n  return (\r\n    uint8ArraysEqual(addressCodec.encode(domainOwner), stalenessId) &&\r\n    state.header.stalenessValidation === Validation.Solana\r\n  );\r\n};\r\n\r\n/**\r\n * Parameters for verifying record staleness.\r\n *\r\n * @example\r\n * ```ts\r\n * const params: VerifyRecordStalenessParams = {\r\n *   rpc,\r\n *   domain: \"example.sns\",\r\n *   record: Record.Url,\r\n * };\r\n * ```\r\n */\r\nexport interface VerifyRecordStalenessParams {\r\n  /** RPC client. */\r\n  rpc: Rpc<GetAccountInfoApi & GetTokenLargestAccountsApi & GetSlotApi>;\r\n  /** Full domain name. */\r\n  domain: string;\r\n  /** Record type. */\r\n  record: Record;\r\n}\r\n\r\n/**\r\n * Verifies a record's staleness validation.\r\n *\r\n * @param params Staleness verification parameters\r\n * @param params.rpc RPC client implementing 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 verify\r\n * @returns True if the record's staleness validation passes, false otherwise.\r\n *\r\n * @example\r\n * ```ts\r\n * const valid = await verifyRecordStaleness({ rpc, domain: \"example.sns\", record: Record.Url });\r\n * ```\r\n */\r\nexport const verifyRecordStaleness = async ({\r\n  rpc,\r\n  domain,\r\n  record,\r\n}: VerifyRecordStalenessParams): Promise<boolean> => {\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  return _verifyStalenessSync({ domainOwner, state });\r\n};\r\n"],"names":[],"mappings":";;;;;;;;AAiBA;;;;;;;;;;;;AAYG;AACU,MAAA,oBAAoB,GAAG,CAAC,EACnC,WAAW,EACX,KAAK,GAIN,KAAI;AACH,IAAA,MAAM,WAAW,GAAG,KAAK,CAAC,cAAc,EAAE;IAE1C,QACE,gBAAgB,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;QAC/D,KAAK,CAAC,MAAM,CAAC,mBAAmB,KAAK,UAAU,CAAC,MAAM;AAE1D;AAuBA;;;;;;;;;;;;;AAaG;AACI,MAAM,qBAAqB,GAAG,OAAO,EAC1C,GAAG,EACH,MAAM,EACN,MAAM,GACsB,KAAsB;AAClD,IAAA,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,kBAAkB,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IACjE,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC7C,kBAAkB,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;QAClD,kBAAkB,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KACjE,WAAW,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CACnC;AACF,KAAA,CAAC;IAEF,OAAO,oBAAoB,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AACrD;;;;"}