uvd-x402-sdk 2.40.0 → 2.42.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 (82) hide show
  1. package/README.md +48 -20
  2. package/dist/adapters/index.d.mts +1 -1
  3. package/dist/adapters/index.d.ts +1 -1
  4. package/dist/adapters/index.js +80 -1
  5. package/dist/adapters/index.js.map +1 -1
  6. package/dist/adapters/index.mjs +80 -1
  7. package/dist/adapters/index.mjs.map +1 -1
  8. package/dist/backend/index.d.mts +246 -231
  9. package/dist/backend/index.d.ts +246 -231
  10. package/dist/backend/index.js +208 -332
  11. package/dist/backend/index.js.map +1 -1
  12. package/dist/backend/index.mjs +204 -333
  13. package/dist/backend/index.mjs.map +1 -1
  14. package/dist/{index-DMPuzJv-.d.ts → index-BJrBRC2u.d.mts} +3 -3
  15. package/dist/{index-DNcDDyee.d.mts → index-DBCFd6mO.d.mts} +2 -1
  16. package/dist/{index-DNcDDyee.d.ts → index-DBCFd6mO.d.ts} +2 -1
  17. package/dist/{index-Cz0xHYGy.d.mts → index-m2PwYmcQ.d.ts} +3 -3
  18. package/dist/index.d.mts +2 -2
  19. package/dist/index.d.ts +2 -2
  20. package/dist/index.js +80 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/index.mjs +80 -1
  23. package/dist/index.mjs.map +1 -1
  24. package/dist/providers/algorand/index.d.mts +1 -1
  25. package/dist/providers/algorand/index.d.ts +1 -1
  26. package/dist/providers/algorand/index.js +80 -1
  27. package/dist/providers/algorand/index.js.map +1 -1
  28. package/dist/providers/algorand/index.mjs +80 -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 +80 -1
  33. package/dist/providers/evm/index.js.map +1 -1
  34. package/dist/providers/evm/index.mjs +80 -1
  35. package/dist/providers/evm/index.mjs.map +1 -1
  36. package/dist/providers/near/index.d.mts +1 -1
  37. package/dist/providers/near/index.d.ts +1 -1
  38. package/dist/providers/near/index.js +80 -1
  39. package/dist/providers/near/index.js.map +1 -1
  40. package/dist/providers/near/index.mjs +80 -1
  41. package/dist/providers/near/index.mjs.map +1 -1
  42. package/dist/providers/solana/index.d.mts +1 -1
  43. package/dist/providers/solana/index.d.ts +1 -1
  44. package/dist/providers/solana/index.js +80 -1
  45. package/dist/providers/solana/index.js.map +1 -1
  46. package/dist/providers/solana/index.mjs +80 -1
  47. package/dist/providers/solana/index.mjs.map +1 -1
  48. package/dist/providers/stellar/index.d.mts +1 -1
  49. package/dist/providers/stellar/index.d.ts +1 -1
  50. package/dist/providers/stellar/index.js +80 -1
  51. package/dist/providers/stellar/index.js.map +1 -1
  52. package/dist/providers/stellar/index.mjs +80 -1
  53. package/dist/providers/stellar/index.mjs.map +1 -1
  54. package/dist/providers/sui/index.d.mts +1 -1
  55. package/dist/providers/sui/index.d.ts +1 -1
  56. package/dist/providers/sui/index.js +80 -1
  57. package/dist/providers/sui/index.js.map +1 -1
  58. package/dist/providers/sui/index.mjs +80 -1
  59. package/dist/providers/sui/index.mjs.map +1 -1
  60. package/dist/providers/xrpl/index.d.mts +1 -1
  61. package/dist/providers/xrpl/index.d.ts +1 -1
  62. package/dist/providers/xrpl/index.js +80 -1
  63. package/dist/providers/xrpl/index.js.map +1 -1
  64. package/dist/providers/xrpl/index.mjs +80 -1
  65. package/dist/providers/xrpl/index.mjs.map +1 -1
  66. package/dist/react/index.d.mts +3 -3
  67. package/dist/react/index.d.ts +3 -3
  68. package/dist/react/index.js +80 -1
  69. package/dist/react/index.js.map +1 -1
  70. package/dist/react/index.mjs +80 -1
  71. package/dist/react/index.mjs.map +1 -1
  72. package/dist/utils/index.d.mts +1 -1
  73. package/dist/utils/index.d.ts +1 -1
  74. package/dist/utils/index.js +80 -1
  75. package/dist/utils/index.js.map +1 -1
  76. package/dist/utils/index.mjs +80 -1
  77. package/dist/utils/index.mjs.map +1 -1
  78. package/package.json +5 -2
  79. package/src/backend/index.ts +361 -560
  80. package/src/chains/index.ts +76 -3
  81. package/src/index.ts +2 -2
  82. package/src/types/index.ts +4 -1
package/README.md CHANGED
@@ -1,13 +1,13 @@
1
1
  # uvd-x402-sdk
2
2
 
3
- Gasless crypto payments across 23 blockchain networks using the x402 protocol.
3
+ Gasless crypto payments across 25 blockchain networks using the x402 protocol.
4
4
 
5
5
  Users sign a message or transaction, and the Ultravioleta facilitator handles on-chain settlement. No gas fees for users.
6
6
 
7
7
  ## Features
8
8
 
9
- - **23 Networks**: EVM (13 including Scroll, SKALE Base), Solana, Fogo, Stellar, NEAR, Algorand, Sui, XRP Ledger (mainnet + testnet)
10
- - **Multi-Stablecoin**: USDC, EURC, AUSD, PYUSD, USDT
9
+ - **25 Networks**: EVM (15 including Scroll, SKALE Base, Robinhood Chain), Solana, Fogo, Stellar, NEAR, Algorand, Sui, XRP Ledger (mainnet + testnet)
10
+ - **Multi-Stablecoin**: USDC, EURC, AUSD, PYUSD, USDT, USDG (Robinhood Chain)
11
11
  - **x402 v1 & v2**: Both protocol versions with auto-detection
12
12
  - **Gasless**: Facilitator pays all network fees
13
13
  - **Type-Safe**: Full TypeScript support
@@ -624,7 +624,7 @@ const header = svm.encodePaymentHeader(payload, chainConfig);
624
624
 
625
625
  ## Supported Networks
626
626
 
627
- ### EVM (13)
627
+ ### EVM (15)
628
628
 
629
629
  | Network | Chain ID | Tokens |
630
630
  |---------|----------|--------|
@@ -641,6 +641,10 @@ const header = svm.encodePaymentHeader(payload, chainConfig);
641
641
  | Scroll | 534352 | USDC |
642
642
  | SKALE Base | 1187947933 | USDC.e |
643
643
  | SKALE Base Sepolia | 324705682 | USDC.e |
644
+ | Robinhood Chain | 4663 | USDG |
645
+ | Robinhood Chain Testnet | 46630 | USDG |
646
+
647
+ > **Robinhood Chain / USDG:** Robinhood Chain has no USDC — the settlement stablecoin is Paxos **USDG** (Global Dollar, 6 decimals, EIP-3009). Its on-chain `version()` getter reverts, so the EIP-712 domain `{ name: "Global Dollar", version: "1" }` can never be resolved on-chain. The SDK carries this domain in the chain config; when constructing `PaymentRequirements` yourself, send it in `extra`: `{ "name": "Global Dollar", "version": "1" }`. Use `tokenType: 'usdg'` (or the default, which resolves to USDG on these networks).
644
648
 
645
649
  ### SVM (2)
646
650
 
@@ -1010,34 +1014,58 @@ The facilitator's `/supported` endpoint advertises both `'escrow'` and `'commerc
1010
1014
 
1011
1015
  Register and discover paid x402 resources across the network.
1012
1016
 
1017
+ The Bazaar is served by the facilitator itself under `/discovery/*`. No API key, no separate host.
1018
+
1013
1019
  ```typescript
1014
- import { BazaarClient } from 'uvd-x402-sdk/backend';
1020
+ import { BazaarClient, isAlive } from 'uvd-x402-sdk/backend';
1015
1021
 
1016
- const bazaar = new BazaarClient({ apiKey: 'your-api-key' });
1022
+ const bazaar = new BazaarClient();
1017
1023
 
1018
- // Discover resources
1019
- const results = await bazaar.discover({
1020
- category: 'ai',
1021
- network: 'base',
1022
- maxPrice: '0.10',
1024
+ // List resources. Every filter is applied server-side over the whole catalog,
1025
+ // so `pagination.total` is the real number of matches -- filtering one page
1026
+ // locally is not the same thing and will under-report.
1027
+ const page = await bazaar.listResources({
1028
+ network: 'eip155:8453',
1029
+ health: 'alive', // only endpoints a probe actually reached
1030
+ tier: 'vip', // first_party | vip | verified | listed
1031
+ limit: 20,
1023
1032
  });
1024
1033
 
1025
- for (const resource of results.resources) {
1026
- console.log(`${resource.name}: ${resource.url}`);
1034
+ for (const r of page.items) {
1035
+ console.log(r.url, r.health?.status, `${r.health?.latencyMs}ms`, r.curation?.label);
1036
+ }
1037
+ console.log(`${page.items.length} of ${page.pagination.total}`);
1038
+
1039
+ // Free-text search. The parameter is `q`; anything else is rejected with a 400.
1040
+ const hits = await bazaar.listResources({ q: 'logs' });
1041
+
1042
+ // Walk the whole filtered catalog, one page at a time
1043
+ for await (const r of bazaar.iterateResources({ health: 'alive' })) {
1044
+ if (isAlive(r)) console.log(r.url);
1027
1045
  }
1028
1046
 
1029
- // Register a resource
1030
- const resource = await bazaar.register({
1047
+ // Register a resource. Registration is open and rate limited.
1048
+ await bazaar.registerResource({
1031
1049
  url: 'https://api.example.com/v1/generate',
1032
- name: 'Image Generator API',
1033
1050
  description: 'Generate images with AI',
1034
- category: 'ai',
1035
- networks: ['base', 'ethereum'],
1036
- price: '0.05',
1037
- payTo: '0x1234...',
1051
+ accepts: [{
1052
+ scheme: 'exact',
1053
+ network: 'eip155:8453',
1054
+ asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
1055
+ amount: '50000',
1056
+ payTo: '0x1234...',
1057
+ maxTimeoutSeconds: 60,
1058
+ }],
1059
+ metadata: { category: 'ai', tags: ['image'] },
1038
1060
  });
1061
+
1062
+ // Aggregate catalog metrics
1063
+ const stats = await bazaar.getStats();
1064
+ console.log(stats.total, stats.visible, stats.byHealth.alive);
1039
1065
  ```
1040
1066
 
1067
+ Timestamps (`firstSeen`, `lastSeen`, `lastUpdated`, `health.lastChecked`) are Unix epoch **seconds**. Use `epochToDate()` to get a `Date`.
1068
+
1041
1069
  ## Facilitator Info
1042
1070
 
1043
1071
  Query the facilitator for version, supported networks, and compliance data.
@@ -1,4 +1,4 @@
1
- import { O as X402Version, k as PaymentResult } from '../index-DNcDDyee.mjs';
1
+ import { O as X402Version, k as PaymentResult } from '../index-DBCFd6mO.mjs';
2
2
  export { E as EnvKeyAdapter, O as OWSWallet, a as OWSWalletAdapter } from '../ows-CYIVd4xO.mjs';
3
3
  import '../wallet-0cX9Pw2F.mjs';
4
4
 
@@ -1,4 +1,4 @@
1
- import { O as X402Version, k as PaymentResult } from '../index-DNcDDyee.js';
1
+ import { O as X402Version, k as PaymentResult } from '../index-DBCFd6mO.js';
2
2
  export { E as EnvKeyAdapter, O as OWSWallet, a as OWSWalletAdapter } from '../ows-DTDixPzO.js';
3
3
  import '../wallet-0cX9Pw2F.js';
4
4
 
@@ -6,7 +6,7 @@ var ethers = require('ethers');
6
6
  var DEFAULT_FACILITATOR_URL = "https://facilitator.ultravioletadao.xyz";
7
7
  var SUPPORTED_CHAINS = {
8
8
  // ============================================================================
9
- // EVM CHAINS (10 networks)
9
+ // EVM CHAINS (15 networks)
10
10
  // ============================================================================
11
11
  base: {
12
12
  chainId: 8453,
@@ -516,6 +516,83 @@ var SUPPORTED_CHAINS = {
516
516
  enabled: true
517
517
  }
518
518
  },
519
+ // Robinhood Chain (Arbitrum Orbit L2). NOTE: there is NO USDC on this chain -
520
+ // the settlement stablecoin is Paxos USDG (Global Dollar). The `usdc` field
521
+ // below carries USDG for interface compatibility (same pattern as XRPL's native
522
+ // asset), and `tokens.usdg` is the canonical entry.
523
+ // CRITICAL: USDG's on-chain version() getter REVERTS, so the EIP-712 domain
524
+ // { name: 'Global Dollar', version: '1' } can NEVER be resolved on-chain and
525
+ // MUST come from this config (mirrored into PaymentRequirements.extra by callers).
526
+ robinhood: {
527
+ chainId: 4663,
528
+ chainIdHex: "0x1237",
529
+ name: "robinhood",
530
+ displayName: "Robinhood Chain",
531
+ networkType: "evm",
532
+ rpcUrl: "https://rpc.mainnet.chain.robinhood.com",
533
+ explorerUrl: "https://robinhoodchain.blockscout.com",
534
+ nativeCurrency: {
535
+ name: "Ethereum",
536
+ symbol: "ETH",
537
+ decimals: 18
538
+ },
539
+ usdc: {
540
+ address: "0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",
541
+ // Paxos USDG (no USDC on this chain)
542
+ decimals: 6,
543
+ name: "Global Dollar",
544
+ // on-chain version() reverts; domain must be supplied off-chain
545
+ version: "1"
546
+ },
547
+ tokens: {
548
+ usdg: {
549
+ address: "0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",
550
+ decimals: 6,
551
+ name: "Global Dollar",
552
+ // on-chain version() reverts; domain must be supplied off-chain
553
+ version: "1"
554
+ }
555
+ },
556
+ x402: {
557
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
558
+ enabled: true
559
+ }
560
+ },
561
+ "robinhood-testnet": {
562
+ chainId: 46630,
563
+ chainIdHex: "0xb626",
564
+ name: "robinhood-testnet",
565
+ displayName: "Robinhood Chain Testnet",
566
+ networkType: "evm",
567
+ rpcUrl: "https://rpc.testnet.chain.robinhood.com",
568
+ explorerUrl: "https://explorer.testnet.chain.robinhood.com",
569
+ nativeCurrency: {
570
+ name: "Ethereum",
571
+ symbol: "ETH",
572
+ decimals: 18
573
+ },
574
+ usdc: {
575
+ address: "0x7E955252E15c84f5768B83c41a71F9eba181802F",
576
+ // Paxos USDG testnet (no USDC on this chain)
577
+ decimals: 6,
578
+ name: "Global Dollar",
579
+ // on-chain version() reverts; domain must be supplied off-chain
580
+ version: "1"
581
+ },
582
+ tokens: {
583
+ usdg: {
584
+ address: "0x7E955252E15c84f5768B83c41a71F9eba181802F",
585
+ decimals: 6,
586
+ name: "Global Dollar",
587
+ // on-chain version() reverts; domain must be supplied off-chain
588
+ version: "1"
589
+ }
590
+ },
591
+ x402: {
592
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
593
+ enabled: true
594
+ }
595
+ },
519
596
  // ============================================================================
520
597
  // SVM CHAINS (2 networks) - Solana Virtual Machine
521
598
  // ============================================================================
@@ -881,6 +958,8 @@ var CAIP2_IDENTIFIERS = {
881
958
  scroll: "eip155:534352",
882
959
  "skale-base": "eip155:1187947933",
883
960
  "skale-base-sepolia": "eip155:324705682",
961
+ robinhood: "eip155:4663",
962
+ "robinhood-testnet": "eip155:46630",
884
963
  // SVM chains
885
964
  solana: "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
886
965
  fogo: "svm:fogo",