{"version":3,"sources":["../../src/facilitator/facilitator.ts"],"sourcesContent":["import { verify as verifyExactEvm, settle as settleExactEvm } from \"../schemes/exact/evm\";\nimport { verify as verifyExactSvm, settle as settleExactSvm } from \"../schemes/exact/svm\";\nimport { SupportedEVMNetworks, SupportedSVMNetworks } from \"../types/shared\";\nimport { X402Config } from \"../types/config\";\nimport {\n  ConnectedClient as EvmConnectedClient,\n  SignerWallet as EvmSignerWallet,\n} from \"../types/shared/evm\";\nimport { ConnectedClient, Signer } from \"../types/shared/wallet\";\nimport {\n  PaymentPayload,\n  PaymentRequirements,\n  SettleResponse,\n  VerifyResponse,\n  ExactEvmPayload,\n} from \"../types/verify\";\nimport { Chain, Transport, Account } from \"viem\";\nimport { TransactionSigner } from \"@solana/kit\";\n\n/**\n * Verifies a payment payload against the required payment details regardless of the scheme\n * this function wraps all verify functions for each specific scheme\n *\n * @param client - The public client used for blockchain interactions\n * @param payload - The signed payment payload containing transfer parameters and signature\n * @param paymentRequirements - The payment requirements that the payload must satisfy\n * @param config - Optional configuration for X402 operations (e.g., custom RPC URLs)\n * @returns A ValidPaymentRequest indicating if the payment is valid and any invalidation reason\n */\nexport async function verify<\n  transport extends Transport,\n  chain extends Chain,\n  account extends Account | undefined,\n>(\n  client: ConnectedClient | Signer,\n  payload: PaymentPayload,\n  paymentRequirements: PaymentRequirements,\n  config?: X402Config,\n): Promise<VerifyResponse> {\n  // exact scheme\n  if (paymentRequirements.scheme === \"exact\") {\n    // evm\n    if (SupportedEVMNetworks.includes(paymentRequirements.network)) {\n      return verifyExactEvm(\n        client as EvmConnectedClient<transport, chain, account>,\n        payload,\n        paymentRequirements,\n      );\n    }\n\n    // svm\n    if (SupportedSVMNetworks.includes(paymentRequirements.network)) {\n      return await verifyExactSvm(\n        client as TransactionSigner,\n        payload,\n        paymentRequirements,\n        config,\n      );\n    }\n  }\n\n  // unsupported scheme\n  return {\n    isValid: false,\n    invalidReason: \"invalid_scheme\",\n    payer: SupportedEVMNetworks.includes(paymentRequirements.network)\n      ? (payload.payload as ExactEvmPayload).authorization.from\n      : \"\",\n  };\n}\n\n/**\n * Settles a payment payload against the required payment details regardless of the scheme\n * this function wraps all settle functions for each specific scheme\n *\n * @param client - The signer wallet used for blockchain interactions\n * @param payload - The signed payment payload containing transfer parameters and signature\n * @param paymentRequirements - The payment requirements that the payload must satisfy\n * @param config - Optional configuration for X402 operations (e.g., custom RPC URLs)\n * @returns A SettleResponse indicating if the payment is settled and any settlement reason\n */\nexport async function settle<transport extends Transport, chain extends Chain>(\n  client: Signer,\n  payload: PaymentPayload,\n  paymentRequirements: PaymentRequirements,\n  config?: X402Config,\n): Promise<SettleResponse> {\n  // exact scheme\n  if (paymentRequirements.scheme === \"exact\") {\n    // evm\n    if (SupportedEVMNetworks.includes(paymentRequirements.network)) {\n      return await settleExactEvm(\n        client as EvmSignerWallet<chain, transport>,\n        payload,\n        paymentRequirements,\n      );\n    }\n\n    // svm\n    if (SupportedSVMNetworks.includes(paymentRequirements.network)) {\n      return await settleExactSvm(\n        client as TransactionSigner,\n        payload,\n        paymentRequirements,\n        config,\n      );\n    }\n  }\n\n  return {\n    success: false,\n    errorReason: \"invalid_scheme\",\n    transaction: \"\",\n    network: paymentRequirements.network,\n    payer: SupportedEVMNetworks.includes(paymentRequirements.network)\n      ? (payload.payload as ExactEvmPayload).authorization.from\n      : \"\",\n  };\n}\n\nexport type Supported = {\n  x402Version: number;\n  kind: {\n    scheme: string;\n    networkId: string;\n    extra: object;\n  }[];\n};\n"],"mappings":";;;;;;;;;;;;AA6BA,eAAsBA,QAKpB,QACA,SACA,qBACA,QACyB;AAEzB,MAAI,oBAAoB,WAAW,SAAS;AAE1C,QAAI,qBAAqB,SAAS,oBAAoB,OAAO,GAAG;AAC9D,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAGA,QAAI,qBAAqB,SAAS,oBAAoB,OAAO,GAAG;AAC9D,aAAO,MAAM;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,SAAO;AAAA,IACL,SAAS;AAAA,IACT,eAAe;AAAA,IACf,OAAO,qBAAqB,SAAS,oBAAoB,OAAO,IAC3D,QAAQ,QAA4B,cAAc,OACnD;AAAA,EACN;AACF;AAYA,eAAsBC,QACpB,QACA,SACA,qBACA,QACyB;AAEzB,MAAI,oBAAoB,WAAW,SAAS;AAE1C,QAAI,qBAAqB,SAAS,oBAAoB,OAAO,GAAG;AAC9D,aAAO,MAAMA;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAGA,QAAI,qBAAqB,SAAS,oBAAoB,OAAO,GAAG;AAC9D,aAAO,MAAM;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,SAAS;AAAA,IACT,aAAa;AAAA,IACb,aAAa;AAAA,IACb,SAAS,oBAAoB;AAAA,IAC7B,OAAO,qBAAqB,SAAS,oBAAoB,OAAO,IAC3D,QAAQ,QAA4B,cAAc,OACnD;AAAA,EACN;AACF;","names":["verify","settle"]}