{"version":3,"file":"verifyRecordRightOfAssociation.cjs","sources":["../../../src/record/verifyRecordRightOfAssociation.ts"],"sourcesContent":["import {\r\n  GetAccountInfoApi,\r\n  GetTokenLargestAccountsApi,\r\n  ReadonlyUint8Array,\r\n  Rpc,\r\n} from \"@solana/kit\";\r\n\r\nimport { addressCodec } from \"../codecs\";\r\nimport {\r\n  ETH_ROA_RECORDS,\r\n  GUARDIANS,\r\n  SELF_SIGNED_RECORDS,\r\n} from \"../constants/records\";\r\nimport { MissingVerifierError } from \"../errors\";\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 { uint8ArraysEqual } from \"../utils/uint8Array/uint8ArraysEqual\";\r\n\r\n/**\r\n * Gets the default verifier for a given record and record state.\r\n * This is an internal utility function.\r\n *\r\n * @param record - The record whose verifier is to be determined.\r\n * @param state - The state of the record.\r\n * @returns The default verifier as a ReadonlyUint8Array or undefined if no verifier is found.\r\n */\r\nexport const _getDefaultVerifier = ({\r\n  record,\r\n  state,\r\n}: {\r\n  record: Record;\r\n  state: RecordState;\r\n}) => {\r\n  if (SELF_SIGNED_RECORDS.has(record)) {\r\n    return state.getContent();\r\n  } else {\r\n    const guardian = GUARDIANS.get(record);\r\n    if (guardian) {\r\n      return addressCodec.encode(guardian);\r\n    }\r\n  }\r\n  return undefined;\r\n};\r\n\r\n/**\r\n * Verifies the right of association for a record synchronously.\r\n * This function is intended for internal use only.\r\n *\r\n * @param record - The record to verify.\r\n * @param state - The state of the record.\r\n * @param verifier - The verifier for the record.\r\n * @returns True if the association is valid, false otherwise.\r\n */\r\nexport const _verifyRoaSync = ({\r\n  record,\r\n  state,\r\n  verifier,\r\n}: {\r\n  record: Record;\r\n  state: RecordState;\r\n  verifier: ReadonlyUint8Array;\r\n}) => {\r\n  const roaId = state.getRoAId();\r\n\r\n  const validation = ETH_ROA_RECORDS.has(record)\r\n    ? Validation.Ethereum\r\n    : Validation.Solana;\r\n\r\n  return (\r\n    uint8ArraysEqual(roaId, verifier) &&\r\n    state.header.rightOfAssociationValidation === validation\r\n  );\r\n};\r\n\r\n/**\r\n * Verifies the right of association for a record asynchronously.\r\n *\r\n * @param rpc - The RPC interface implementing GetAccountInfoApi and GetTokenLargestAccountsApi.\r\n * @param domain - The domain under which the record resides.\r\n * @param record - The record to verify.\r\n * @param verifier - (Optional) The verifier for the record. If not specified, a default verifier is derived.\r\n * @returns A promise that resolves to true if the association is valid, false otherwise.\r\n * @throws MissingVerifierError - If no verifier is specified and no default verifier is found.\r\n */\r\nexport const verifyRecordRightOfAssociation = async (\r\n  rpc: Rpc<GetAccountInfoApi & GetTokenLargestAccountsApi>,\r\n  domain: string,\r\n  record: Record,\r\n  verifier?: ReadonlyUint8Array\r\n) => {\r\n  const address = await getRecordV2Address({ domain, record });\r\n  const state = await RecordState.retrieve(rpc, address);\r\n\r\n  verifier = verifier || _getDefaultVerifier({ record, state });\r\n  if (!verifier) {\r\n    throw new MissingVerifierError(\"You must specify the verifier\");\r\n  }\r\n\r\n  return _verifyRoaSync({ record, state, verifier });\r\n};\r\n"],"names":["_getDefaultVerifier","record","state","SELF_SIGNED_RECORDS","has","getContent","guardian","GUARDIANS","get","addressCodec","encode","_verifyRoaSync","verifier","roaId","getRoAId","validation","ETH_ROA_RECORDS","Validation","Ethereum","Solana","uint8ArraysEqual","header","rightOfAssociationValidation","async","rpc","domain","address","getRecordV2Address","RecordState","retrieve","MissingVerifierError"],"mappings":"gRA4Ba,MAAAA,EAAsB,EACjCC,SACAC,YAKA,GAAIC,EAAmBA,oBAACC,IAAIH,GAC1B,OAAOC,EAAMG,aACR,CACL,MAAMC,EAAWC,EAAAA,UAAUC,IAAIP,GAC/B,GAAIK,EACF,OAAOG,EAAYA,aAACC,OAAOJ,GAGf,EAYLK,EAAiB,EAC5BV,SACAC,QACAU,eAMA,MAAMC,EAAQX,EAAMY,WAEdC,EAAaC,kBAAgBZ,IAAIH,GACnCgB,aAAWC,SACXD,EAAAA,WAAWE,OAEf,OACEC,EAAgBA,iBAACP,EAAOD,IACxBV,EAAMmB,OAAOC,+BAAiCP,CAAU,gGAcdQ,MAC5CC,EACAC,EACAxB,EACAW,KAEA,MAAMc,QAAgBC,EAAAA,mBAAmB,CAAEF,SAAMxB,OAAEA,IAC7CC,QAAc0B,EAAAA,YAAYC,SAASL,EAAKE,GAG9C,KADAd,EAAWA,GAAYZ,EAAoB,CAAAC,OAAEA,EAAQC,WAEnD,MAAM,IAAI4B,EAAoBA,qBAAC,iCAGjC,OAAOnB,EAAe,CAAEV,OAAAA,EAAQC,QAAOU,YAAW"}