uvd-x402-sdk 2.87.0 → 2.89.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/README.md +235 -0
  2. package/dist/adapters/index.d.mts +1 -1
  3. package/dist/adapters/index.d.ts +1 -1
  4. package/dist/adapters/index.js.map +1 -1
  5. package/dist/adapters/index.mjs.map +1 -1
  6. package/dist/backend/index.d.mts +2 -2
  7. package/dist/backend/index.d.ts +2 -2
  8. package/dist/backend/index.js +138 -0
  9. package/dist/backend/index.js.map +1 -1
  10. package/dist/backend/index.mjs +137 -1
  11. package/dist/backend/index.mjs.map +1 -1
  12. package/dist/erc8128/index.js.map +1 -1
  13. package/dist/erc8128/index.mjs.map +1 -1
  14. package/dist/{index-D8buGZWY.d.mts → index-13ZUDF7c.d.mts} +32 -2
  15. package/dist/{index-CWZUj5mz.d.ts → index-B5B9EK3x.d.ts} +32 -2
  16. package/dist/{index-DOBhTF-j.d.mts → index-BWN0Haa0.d.mts} +476 -2
  17. package/dist/{index-DOBhTF-j.d.ts → index-BWN0Haa0.d.ts} +476 -2
  18. package/dist/{index-BHfYxpzI.d.mts → index-CAJg-_cr.d.mts} +181 -2
  19. package/dist/{index-D67eNxY8.d.ts → index-Cd1Mpznb.d.ts} +181 -2
  20. package/dist/index.d.mts +4 -4
  21. package/dist/index.d.ts +4 -4
  22. package/dist/index.js +472 -8
  23. package/dist/index.js.map +1 -1
  24. package/dist/index.mjs +464 -9
  25. package/dist/index.mjs.map +1 -1
  26. package/dist/providers/algorand/index.d.mts +1 -1
  27. package/dist/providers/algorand/index.d.ts +1 -1
  28. package/dist/providers/algorand/index.js.map +1 -1
  29. package/dist/providers/algorand/index.mjs.map +1 -1
  30. package/dist/providers/evm/index.d.mts +1 -1
  31. package/dist/providers/evm/index.d.ts +1 -1
  32. package/dist/providers/evm/index.js.map +1 -1
  33. package/dist/providers/evm/index.mjs.map +1 -1
  34. package/dist/providers/near/index.d.mts +1 -1
  35. package/dist/providers/near/index.d.ts +1 -1
  36. package/dist/providers/near/index.js.map +1 -1
  37. package/dist/providers/near/index.mjs.map +1 -1
  38. package/dist/providers/solana/index.d.mts +1 -1
  39. package/dist/providers/solana/index.d.ts +1 -1
  40. package/dist/providers/solana/index.js.map +1 -1
  41. package/dist/providers/solana/index.mjs.map +1 -1
  42. package/dist/providers/stellar/index.d.mts +1 -1
  43. package/dist/providers/stellar/index.d.ts +1 -1
  44. package/dist/providers/stellar/index.js.map +1 -1
  45. package/dist/providers/stellar/index.mjs.map +1 -1
  46. package/dist/providers/sui/index.d.mts +1 -1
  47. package/dist/providers/sui/index.d.ts +1 -1
  48. package/dist/providers/sui/index.js.map +1 -1
  49. package/dist/providers/sui/index.mjs.map +1 -1
  50. package/dist/providers/xrpl/index.d.mts +1 -1
  51. package/dist/providers/xrpl/index.d.ts +1 -1
  52. package/dist/providers/xrpl/index.js.map +1 -1
  53. package/dist/providers/xrpl/index.mjs.map +1 -1
  54. package/dist/react/index.d.mts +3 -3
  55. package/dist/react/index.d.ts +3 -3
  56. package/dist/react/index.js +463 -8
  57. package/dist/react/index.js.map +1 -1
  58. package/dist/react/index.mjs +463 -8
  59. package/dist/react/index.mjs.map +1 -1
  60. package/dist/react/picker/index.d.mts +1 -1
  61. package/dist/react/picker/index.d.ts +1 -1
  62. package/dist/utils/index.d.mts +2 -2
  63. package/dist/utils/index.d.ts +2 -2
  64. package/dist/utils/index.js.map +1 -1
  65. package/dist/utils/index.mjs.map +1 -1
  66. package/dist/{validation-mSLW4tcO.d.mts → validation-B95g0MqC.d.mts} +1 -1
  67. package/dist/{validation-C7p3a6Ep.d.ts → validation-_Tcjm2gu.d.ts} +1 -1
  68. package/package.json +1 -1
  69. package/src/backend/index.ts +260 -0
  70. package/src/client/X402Client.ts +232 -9
  71. package/src/index.ts +28 -0
  72. package/src/policy.ts +804 -0
  73. package/src/types/index.ts +41 -0
@@ -3150,6 +3150,13 @@ var RELAYED_FEEDBACK_NETWORKS = [
3150
3150
  function supportsRelayedFeedback(network) {
3151
3151
  return RELAYED_FEEDBACK_NETWORKS.includes(wireNetwork(network));
3152
3152
  }
3153
+ var SOLANA_FEEDBACK_NETWORKS = [
3154
+ "solana",
3155
+ "solana-devnet"
3156
+ ];
3157
+ function supportsSolanaFeedback(network) {
3158
+ return SOLANA_FEEDBACK_NETWORKS.includes(wireNetwork(network));
3159
+ }
3153
3160
  var Erc8004LookupError = class extends Error {
3154
3161
  /** HTTP status returned by the facilitator */
3155
3162
  status;
@@ -3630,6 +3637,135 @@ var Erc8004Client = class {
3630
3637
  };
3631
3638
  }
3632
3639
  }
3640
+ /**
3641
+ * Ask the facilitator for the Solana transaction the rater must sign.
3642
+ *
3643
+ * Step 1 of the rater-authored rail on Solana. Writes nothing on-chain and
3644
+ * costs nothing: it resolves the programs and the agent asset, reads the
3645
+ * registry collection and a finalized blockhash, and hands back an UNSIGNED
3646
+ * transaction whose `client` account is the rater.
3647
+ *
3648
+ * Why this exists, and why it is not the EVM rail: the program's
3649
+ * `give_feedback` instruction declares account 0 as
3650
+ * `[signer, writable] client (feedback author / fee payer)`, and plain
3651
+ * `POST /feedback` puts the FACILITATOR's keypair there — so the chain
3652
+ * records the facilitator as the author of the rating. Solana carries several
3653
+ * signers per transaction natively, so the rater signs as `client` while the
3654
+ * facilitator stays the fee payer. **No delegation and no program change**,
3655
+ * which is why {@link SOLANA_FEEDBACK_NETWORKS} is its own list and `solana`
3656
+ * must never appear in {@link RELAYED_FEEDBACK_NETWORKS} — that one routes to
3657
+ * `/feedback/evm/*`, which answers 400 here.
3658
+ *
3659
+ * What to do with the answer:
3660
+ * 1. Deserialise `transaction` — base64 of the bincode-serialised **legacy**
3661
+ * transaction, which is `@solana/web3.js`'s `Transaction.from()`, not
3662
+ * `VersionedTransaction` — and add the RATER's ed25519 signature. Sign the
3663
+ * message as it came: re-encoding it changes bytes the facilitator will
3664
+ * compare. The fee payer's slot stays empty; `submit` fills it.
3665
+ * 2. Hand it back to {@link Erc8004Client.submitSolanaFeedback} with the SAME
3666
+ * feedback parameters, before `lastValidBlockHeight` passes.
3667
+ *
3668
+ * @param request - Network, rater pubkey and feedback parameters
3669
+ * @returns The unsigned transaction, the fee payer and the blockhash window
3670
+ *
3671
+ * @example
3672
+ * ```ts
3673
+ * import { Transaction } from '@solana/web3.js';
3674
+ *
3675
+ * const prep = await erc8004.prepareSolanaFeedback({
3676
+ * x402Version: 1,
3677
+ * network: 'solana',
3678
+ * feedback: {
3679
+ * agentId: '7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgHkv',
3680
+ * rater: raterPubkey, // base58: who the chain records as the author
3681
+ * value: 87,
3682
+ * score: 95, // without it the rating counts for nothing
3683
+ * tag1: 'quality',
3684
+ * },
3685
+ * });
3686
+ *
3687
+ * const tx = Transaction.from(Buffer.from(prep.transaction!, 'base64'));
3688
+ * tx.partialSign(raterKeypair);
3689
+ * ```
3690
+ */
3691
+ async prepareSolanaFeedback(request) {
3692
+ const url = `${this.baseUrl}/feedback/solana/prepare`;
3693
+ const controller = new AbortController();
3694
+ const timeoutId = setTimeout(() => controller.abort(), this.timeout);
3695
+ try {
3696
+ const response = await fetch(url, {
3697
+ method: "POST",
3698
+ headers: {
3699
+ "Content-Type": "application/json",
3700
+ "Accept": "application/json"
3701
+ },
3702
+ body: JSON.stringify({ ...request, network: wireNetwork(request.network) }),
3703
+ signal: controller.signal
3704
+ });
3705
+ clearTimeout(timeoutId);
3706
+ if (!response.ok) {
3707
+ const errorText = await response.text();
3708
+ return {
3709
+ success: false,
3710
+ error: `Facilitator error: ${response.status} - ${errorText}`,
3711
+ network: request.network
3712
+ };
3713
+ }
3714
+ return await response.json();
3715
+ } catch (error) {
3716
+ clearTimeout(timeoutId);
3717
+ return {
3718
+ success: false,
3719
+ error: error instanceof Error ? error.message : "Unknown error",
3720
+ network: request.network
3721
+ };
3722
+ }
3723
+ }
3724
+ /**
3725
+ * Co-sign and send a rater-signed Solana feedback transaction.
3726
+ *
3727
+ * Step 2 of the rater-authored rail on Solana. What lands on-chain has the
3728
+ * RATER as `client`, so the agent's feedback lists the rater rather than the
3729
+ * facilitator — and only the rater can revoke it.
3730
+ *
3731
+ * Pass back the same feedback parameters {@link Erc8004Client.prepareSolanaFeedback}
3732
+ * was given. They are not redundant: the facilitator re-derives the message
3733
+ * from them plus the blockhash inside the submitted transaction, and refuses
3734
+ * to co-sign anything that is not byte-for-byte what it built
3735
+ * (`400 "submitted transaction does not match the one this facilitator built"`).
3736
+ * The rater's signature is verified BEFORE the facilitator adds its own, so a
3737
+ * transaction the network would reject never costs a fee.
3738
+ *
3739
+ * @param request - Feedback parameters plus the rater-signed transaction
3740
+ * @returns Feedback response with the transaction signature
3741
+ */
3742
+ async submitSolanaFeedback(request) {
3743
+ const url = `${this.baseUrl}/feedback/solana/submit`;
3744
+ try {
3745
+ const { response, error } = await this.writeJson(url, {
3746
+ ...request,
3747
+ network: wireNetwork(request.network)
3748
+ });
3749
+ if (error) {
3750
+ return {
3751
+ success: false,
3752
+ error: error.error,
3753
+ network: request.network,
3754
+ ...failureFields(error)
3755
+ };
3756
+ }
3757
+ return await response.json();
3758
+ } catch (error) {
3759
+ return {
3760
+ success: false,
3761
+ error: error instanceof Error ? error.message : "Unknown error",
3762
+ network: request.network,
3763
+ retryable: true,
3764
+ safeToReplay: false,
3765
+ retryAfterSeconds: DEFAULT_RETRY_AFTER_SECONDS
3766
+ };
3767
+ }
3768
+ }
3633
3769
  /**
3634
3770
  * Revoke previously submitted feedback
3635
3771
  *
@@ -5128,6 +5264,6 @@ var AdvancedEscrowClient = class {
5128
5264
  }
5129
5265
  };
5130
5266
 
5131
- export { AMBIGUOUS_LEASE_REASONS, AdvancedEscrowClient, BASE_MAINNET_CONTRACTS, BazaarClient, DEFAULT_FACILITATOR_RETRIES, DEFAULT_RETRY_AFTER_SECONDS, DEPOSIT_LIMIT_USDC, ERC8004_CONTRACTS, ERC8004_EXTENSION_ID, ESCROW_CONTRACTS, ESCROW_TIMEOUT_MS, Erc8004Client, Erc8004LookupError, EscrowClient, FacilitatorClient, HEALTH_FILTERS, MAX_RETRY_AFTER_SECONDS, MAX_SEARCH_LEN, OPERATOR_ABI, OPERATOR_ABI_CREATE3, PAYMENT_INFO_TYPEHASH, RELAYED_FEEDBACK_NETWORKS, REPLAYABLE_LEASE_REASONS, RegistrationPendingError, SETTLEMENT_UNCONFIRMED, TIER_FILTERS, TIER_TIMINGS, USDC_DOMAIN_NAME, WRITER_LEASE_REASONS, X402_CORS_HEADERS, X402_HEADER_NAMES, ZERO_ADDRESS, buildErc8004PaymentRequirements, buildPaymentRequirements, buildSettleRequest, buildSettleRequestForVersion, buildSettleRequestV2, buildUnavailableResponse, buildVerifyRequest, buildVerifyRequestForVersion, buildVerifyRequestV2, canRefundEscrow, canReleaseEscrow, carryFailureFields, create402Response, createHonoMiddleware, createPaymentMiddleware, epochToDate, escrowTimeRemaining, extractPaymentFromHeaders, facilitatorFetch, getCorsHeaders, getEscrowContractsByChainId, getEscrowSupportedChainIds, isAlive, isAmbiguousLeaseReason, isEscrowExpired, isEscrowSupportedOnChain, isRegisterJobTerminal, isReplayableLeaseReason, isSettlementUnconfirmed, parseFacilitatorErrorBody, parsePaymentHeader, parseRetryAfterSeconds, readFacilitatorError, resolveEnvelopeVersion, supportsRelayedFeedback, toPaymentRequirementsV2, toResourceInfoV2, wireNetwork };
5267
+ export { AMBIGUOUS_LEASE_REASONS, AdvancedEscrowClient, BASE_MAINNET_CONTRACTS, BazaarClient, DEFAULT_FACILITATOR_RETRIES, DEFAULT_RETRY_AFTER_SECONDS, DEPOSIT_LIMIT_USDC, ERC8004_CONTRACTS, ERC8004_EXTENSION_ID, ESCROW_CONTRACTS, ESCROW_TIMEOUT_MS, Erc8004Client, Erc8004LookupError, EscrowClient, FacilitatorClient, HEALTH_FILTERS, MAX_RETRY_AFTER_SECONDS, MAX_SEARCH_LEN, OPERATOR_ABI, OPERATOR_ABI_CREATE3, PAYMENT_INFO_TYPEHASH, RELAYED_FEEDBACK_NETWORKS, REPLAYABLE_LEASE_REASONS, RegistrationPendingError, SETTLEMENT_UNCONFIRMED, SOLANA_FEEDBACK_NETWORKS, TIER_FILTERS, TIER_TIMINGS, USDC_DOMAIN_NAME, WRITER_LEASE_REASONS, X402_CORS_HEADERS, X402_HEADER_NAMES, ZERO_ADDRESS, buildErc8004PaymentRequirements, buildPaymentRequirements, buildSettleRequest, buildSettleRequestForVersion, buildSettleRequestV2, buildUnavailableResponse, buildVerifyRequest, buildVerifyRequestForVersion, buildVerifyRequestV2, canRefundEscrow, canReleaseEscrow, carryFailureFields, create402Response, createHonoMiddleware, createPaymentMiddleware, epochToDate, escrowTimeRemaining, extractPaymentFromHeaders, facilitatorFetch, getCorsHeaders, getEscrowContractsByChainId, getEscrowSupportedChainIds, isAlive, isAmbiguousLeaseReason, isEscrowExpired, isEscrowSupportedOnChain, isRegisterJobTerminal, isReplayableLeaseReason, isSettlementUnconfirmed, parseFacilitatorErrorBody, parsePaymentHeader, parseRetryAfterSeconds, readFacilitatorError, resolveEnvelopeVersion, supportsRelayedFeedback, supportsSolanaFeedback, toPaymentRequirementsV2, toResourceInfoV2, wireNetwork };
5132
5268
  //# sourceMappingURL=index.mjs.map
5133
5269
  //# sourceMappingURL=index.mjs.map