@zkp2p/sdk 0.1.0-rc.8 → 0.1.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 (37) hide show
  1. package/README.md +73 -14
  2. package/dist/{chunk-6YLLNF6Q.mjs → chunk-JH74HXTS.mjs} +103 -11
  3. package/dist/chunk-JH74HXTS.mjs.map +1 -0
  4. package/dist/{chunk-456CSWDT.mjs → chunk-YLITJ7SI.mjs} +2 -2
  5. package/dist/{chunk-456CSWDT.mjs.map → chunk-YLITJ7SI.mjs.map} +1 -1
  6. package/dist/{chunk-PQQWQF3C.mjs → chunk-ZFBH4HD7.mjs} +10 -4
  7. package/dist/chunk-ZFBH4HD7.mjs.map +1 -0
  8. package/dist/{currency-5RZ6VCEA.mjs → currency-PKI2EGJD.mjs} +3 -4
  9. package/dist/{currency-5RZ6VCEA.mjs.map → currency-PKI2EGJD.mjs.map} +1 -1
  10. package/dist/index.cjs +3152 -5150
  11. package/dist/index.cjs.map +1 -1
  12. package/dist/index.d.mts +73 -34
  13. package/dist/index.d.ts +73 -34
  14. package/dist/index.mjs +2553 -1604
  15. package/dist/index.mjs.map +1 -1
  16. package/dist/protocolViewerParsers-QVG4JP23.mjs +4 -0
  17. package/dist/{protocolViewerParsers-EUBHHIPL.mjs.map → protocolViewerParsers-QVG4JP23.mjs.map} +1 -1
  18. package/dist/react.cjs.map +1 -1
  19. package/dist/react.d.mts +3 -2
  20. package/dist/react.d.ts +3 -2
  21. package/dist/react.mjs +2 -2
  22. package/dist/{vaultUtils-CZKrvm9v.d.mts → vaultUtils-J1WboG1T.d.mts} +123 -228
  23. package/dist/{vaultUtils-CZKrvm9v.d.ts → vaultUtils-J1WboG1T.d.ts} +123 -228
  24. package/package.json +10 -3
  25. package/dist/chunk-37HJPVJE.mjs +0 -11
  26. package/dist/chunk-37HJPVJE.mjs.map +0 -1
  27. package/dist/chunk-6YLLNF6Q.mjs.map +0 -1
  28. package/dist/chunk-E5SYWOUK.mjs +0 -231
  29. package/dist/chunk-E5SYWOUK.mjs.map +0 -1
  30. package/dist/chunk-F7USDS7O.mjs +0 -408
  31. package/dist/chunk-F7USDS7O.mjs.map +0 -1
  32. package/dist/chunk-PQQWQF3C.mjs.map +0 -1
  33. package/dist/constants-YK56UVLH.mjs +0 -5
  34. package/dist/constants-YK56UVLH.mjs.map +0 -1
  35. package/dist/paymentResolution-3TC4HRHU.mjs +0 -4
  36. package/dist/paymentResolution-3TC4HRHU.mjs.map +0 -1
  37. package/dist/protocolViewerParsers-EUBHHIPL.mjs +0 -6
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  TypeScript SDK for ZKP2P liquidity providers and integrators.
7
7
 
8
- Current version: `0.1.0-rc.7`. Includes V1/V2 contract routing, vault/delegated rate-management (DRM) operations, oracle/spread configuration, and indexer helpers.
8
+ Current version: `0.1.0-rc.14`. Includes V1/V2 contract routing, referral-fee intent signaling, signed oracle spreads, EscrowV2 batch currency-config updates, Pyth oracle feeds, on-chain oracle feed validation, and indexer helpers.
9
9
 
10
10
  ## Who This Is For
11
11
 
@@ -16,15 +16,15 @@ Current version: `0.1.0-rc.7`. Includes V1/V2 contract routing, vault/delegated
16
16
 
17
17
  ## Core Capabilities
18
18
 
19
- | Area | Highlights |
20
- | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
21
- | Deposit lifecycle | `createDeposit`, `addFunds`, `removeFunds`, `withdrawDeposit` |
22
- | Intent lifecycle | `signalIntent`, `fulfillIntent`, `cancelIntent`, `releaseFundsToPayer` |
23
- | Vault/DRM | `createRateManager`, `setRateManager`, `clearRateManager`, `setVaultFee`, `setVaultMinRate`, `setVaultMinRatesBatch`, `setVaultConfig` |
24
- | Oracle config | `setOracleRateConfig`, `setOracleRateConfigBatch` |
25
- | RPC-first reads | `getDeposits`, `getDeposit`, `getIntents`, `getIntent` |
26
- | Indexer services | `client.indexer.*`, `IndexerRateManagerService`, `getIntentFulfillmentAmounts` |
27
- | React hooks | `@zkp2p/sdk/react` hooks for deposit/intent/vault operations |
19
+ | Area | Highlights |
20
+ | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
21
+ | Deposit lifecycle | `createDeposit`, `addFunds`, `removeFunds`, `withdrawDeposit` |
22
+ | Intent lifecycle | `signalIntent`, `fulfillIntent`, `cancelIntent`, `releaseFundsToPayer` |
23
+ | Vault/DRM | `createRateManager`, `setRateManager`, `clearRateManager`, `setVaultFee`, `setVaultMinRate`, `setVaultMinRatesBatch`, `setVaultConfig` |
24
+ | Oracle config | `setOracleRateConfig`, `setOracleRateConfigBatch`, `updateCurrencyConfigBatch`, `deactivateCurrenciesBatch`, `validateOracleFeedsOnChain` |
25
+ | RPC-first reads | `getDeposits`, `getDeposit`, `getIntents`, `getIntent` |
26
+ | Indexer services | `client.indexer.*`, `IndexerRateManagerService`, `getIntentFulfillmentAmounts` |
27
+ | React hooks | `@zkp2p/sdk/react` hooks for deposit/intent/vault operations |
28
28
 
29
29
  ## Installation
30
30
 
@@ -52,7 +52,6 @@ const client = new Zkp2pClient({
52
52
  walletClient,
53
53
  chainId: base.id,
54
54
  runtimeEnv: 'staging', // 'production' | 'staging'
55
- apiKey: 'YOUR_CURATOR_API_KEY',
56
55
  indexerApiKey: 'YOUR_INDEXER_API_KEY',
57
56
  });
58
57
  ```
@@ -65,8 +64,8 @@ const client = new Zkp2pClient({
65
64
 
66
65
  ## Authentication
67
66
 
68
- - `apiKey` is used for curator API endpoints (for example quote/deposit helper endpoints).
69
- - `authorizationToken` and `getAuthorizationToken` support bearer auth.
67
+ - `apiKey` is optional and is forwarded to curator API endpoints when provided.
68
+ - `authorizationToken` and `getAuthorizationToken` support optional bearer auth.
70
69
  - `indexerApiKey` adds `x-api-key` for indexer proxy auth.
71
70
 
72
71
  If you provide both bearer and indexer API key, both headers are sent.
@@ -104,12 +103,41 @@ await client.setOracleRateConfig({
104
103
  config: {
105
104
  adapter: '0x...',
106
105
  adapterConfig: '0x',
107
- spreadBps: 50,
106
+ spreadBps: -50, // signed int16 bps: -0.50% below market
108
107
  maxStaleness: 180,
109
108
  },
110
109
  });
111
110
  ```
112
111
 
112
+ ### Validate Oracle Feed Availability
113
+
114
+ ```ts
115
+ import { validateOracleFeedsOnChain } from '@zkp2p/sdk';
116
+
117
+ // Validate all Chainlink + Pyth feeds on Base via multicall
118
+ const availableCurrencies = await validateOracleFeedsOnChain(publicClient);
119
+ // Set<CurrencyType> — only currencies whose feeds responded successfully
120
+ ```
121
+
122
+ ### Signal an Intent with Referral Fees
123
+
124
+ ```ts
125
+ await client.signalIntent({
126
+ depositId: 42n,
127
+ amount: 250_000n,
128
+ to: '0xBuyer',
129
+ paymentMethod: 'wise',
130
+ fiatCurrencyCode: 'USD',
131
+ conversionRate: '1020000000000000000',
132
+ referralFees: [
133
+ { recipient: '0xPlatformFeeRecipient', fee: 2_500n },
134
+ { recipient: '0xPartnerFeeRecipient', fee: 1_250n },
135
+ ],
136
+ });
137
+ ```
138
+
139
+ Legacy `referrer` / `referrerFee` fields are still accepted as a backwards-compatible fallback, but new integrations should send `referralFees[]`.
140
+
113
141
  ### Vault / DRM Operations
114
142
 
115
143
  ```ts
@@ -159,12 +187,43 @@ const amounts = await client.indexer.getIntentFulfillmentAmounts('0xIntentHash')
159
187
 
160
188
  ```tsx
161
189
  import {
190
+ // Deposit lifecycle
162
191
  useCreateDeposit,
192
+ useAddFunds,
193
+ useRemoveFunds,
194
+ useWithdrawDeposit,
195
+ useSetAcceptingIntents,
196
+ useSetIntentRange,
197
+ useSetCurrencyMinRate,
198
+ useSetRetainOnEmpty,
199
+
200
+ // Payment method management
201
+ useAddPaymentMethods,
202
+ useRemovePaymentMethod,
203
+ useSetPaymentMethodActive,
204
+ useAddCurrencies,
205
+ useRemoveCurrency,
206
+ useDeactivateCurrency,
207
+
208
+ // Intent lifecycle
163
209
  useSignalIntent,
210
+ useFulfillIntent,
211
+ useReleaseFundsToPayer,
212
+ usePruneExpiredIntents,
213
+
214
+ // Delegation
215
+ useSetDelegate,
216
+ useRemoveDelegate,
217
+
218
+ // Vault / DRM
164
219
  useCreateVault,
165
220
  useVaultDelegation,
166
221
  useSetVaultFee,
167
222
  useSetVaultMinRate,
223
+ useSetVaultConfig,
224
+
225
+ // Taker tier
226
+ useGetTakerTier,
168
227
  } from '@zkp2p/sdk/react';
169
228
  ```
170
229
 
@@ -1,5 +1,4 @@
1
- import { resolvePaymentMethodNameFromHash } from './chunk-E5SYWOUK.mjs';
2
- import { getCurrencyInfoFromHash } from './chunk-PQQWQF3C.mjs';
1
+ import { currencyKeccak256, getCurrencyInfoFromHash } from './chunk-ZFBH4HD7.mjs';
3
2
  import baseAddressesRaw from '@zkp2p/contracts-v2/addresses/base';
4
3
  import baseStagingAddressesRaw from '@zkp2p/contracts-v2/addresses/baseStaging';
5
4
  import * as baseAbisRaw from '@zkp2p/contracts-v2/abis/base';
@@ -16,6 +15,9 @@ import baseConstantsRaw from '@zkp2p/contracts-v2/constants/base';
16
15
  import baseStagingConstantsRaw from '@zkp2p/contracts-v2/constants/baseStaging';
17
16
  import basePaymentMethodsRaw from '@zkp2p/contracts-v2/paymentMethods/base.json';
18
17
  import baseStagingPaymentMethodsRaw from '@zkp2p/contracts-v2/paymentMethods/baseStaging.json';
18
+ import { hexToBytes, keccak256, toBytes, bytesToHex } from 'viem';
19
+ import lookups from '@zkp2p/contracts-v2/paymentMethods/lookups.json';
20
+ import baseStagingPaymentMethods2 from '@zkp2p/contracts-v2/paymentMethods/baseStaging';
19
21
 
20
22
  // src/utils/bigint.ts
21
23
  function parseBigIntLike(value, errorMessage = "Unsupported numeric value") {
@@ -72,8 +74,13 @@ function unwrapConstants(mod) {
72
74
  return m;
73
75
  }
74
76
  var HISTORICAL_ESCROW_ADDRESSES = {
75
- base: [],
77
+ base: [
78
+ "0x2f121CDDCA6d652f35e8B3E560f9760898888888"
79
+ // EscrowV2 production (contracts-v2 0.2.0-rc.6)
80
+ ],
76
81
  base_staging: [
82
+ "0x5C2a8D9246777eE4501B6C426a8B8C7635C7b5b5",
83
+ // EscrowV2 staging (contracts-v2 0.2.0-rc.5)
77
84
  "0x18EAcBf3FF19528ABe8035CF5cA266F31A2e3f14",
78
85
  // EscrowV2 staging (contracts-v2 0.1.11-rc.3)
79
86
  "0x07Cc97c254A5Fb0957553E9F58E4040699357f28",
@@ -85,14 +92,19 @@ var HISTORICAL_ESCROW_ADDRESSES = {
85
92
  ]
86
93
  };
87
94
  var HISTORICAL_ORCHESTRATOR_ADDRESSES = {
88
- base: [],
95
+ base: [
96
+ "0x88888883Ed048FF0a415271B28b2F52d431810D0"
97
+ // OrchestratorV2 production (contracts-v2 0.2.0-rc.6)
98
+ ],
89
99
  base_staging: [
100
+ "0xF9b9CD27Deea496B960b3cb5221b514705fCaF5e",
101
+ // OrchestratorV2 staging (contracts-v2 0.2.0-rc.5)
90
102
  "0xC0389b3d7A4E6B823e361e562C4a29F04B6C4fB5"
91
103
  // OrchestratorV2 staging (contracts-v2 0.1.11-rc.3)
92
104
  ]
93
105
  };
94
- var STAGING_ESCROW_V2_FALLBACK = "0x5C2a8D9246777eE4501B6C426a8B8C7635C7b5b5";
95
- var STAGING_ORCHESTRATOR_V2_FALLBACK = "0xF9b9CD27Deea496B960b3cb5221b514705fCaF5e";
106
+ var STAGING_ESCROW_V2_FALLBACK = "0x77e8f808FE201075e0bD651CD46fdF239fc83265";
107
+ var STAGING_ORCHESTRATOR_V2_FALLBACK = "0xc17a59227B136c45fAa153086a15EF87ED14bE00";
96
108
  var ZERO_ADDRESS = "0x0000000000000000000000000000000000000000";
97
109
  function isValidAddress(value) {
98
110
  return typeof value === "string" && /^0x[a-fA-F0-9]{40}$/.test(value) && value.toLowerCase() !== ZERO_ADDRESS;
@@ -388,8 +400,88 @@ function getRateManagerContracts(chainId, env = "production") {
388
400
  }
389
401
  };
390
402
  }
403
+ function ensureBytes32(value, { hashIfAscii = false } = {}) {
404
+ if (value.startsWith("0x")) {
405
+ const bytes = hexToBytes(value);
406
+ if (bytes.length !== 32) throw new Error("Expected 32-byte hex value");
407
+ return value;
408
+ }
409
+ if (!hashIfAscii)
410
+ throw new Error("Expected 32-byte hex; received ascii string. Pass hashIfAscii=true to hash.");
411
+ const hashed = keccak256(toBytes(value));
412
+ return hashed;
413
+ }
414
+ function asciiToBytes32(value) {
415
+ const b = toBytes(value);
416
+ if (b.length > 32) throw new Error("ASCII input exceeds 32 bytes");
417
+ const padded = new Uint8Array(32);
418
+ padded.set(b);
419
+ return bytesToHex(padded);
420
+ }
421
+ var METHOD_NAME_TO_HASH = lookups.nameToHash;
422
+ function getPaymentMethodMap(env, _network) {
423
+ if (env === "staging") {
424
+ const m = baseStagingPaymentMethods2?.methods ?? {};
425
+ return m && Object.keys(m).length ? m : null;
426
+ }
427
+ return null;
428
+ }
429
+ function resolvePaymentMethodHash(nameOrBytes, opts = {}) {
430
+ const { env = "production", network = "base" } = opts;
431
+ if (nameOrBytes.startsWith("0x")) return ensureBytes32(nameOrBytes);
432
+ const mapping = getPaymentMethodMap(env);
433
+ if (mapping) {
434
+ const key = nameOrBytes.toLowerCase();
435
+ const entry = mapping[key];
436
+ if (entry?.paymentMethodHash) return entry.paymentMethodHash;
437
+ }
438
+ return ensureBytes32(nameOrBytes, { hashIfAscii: true });
439
+ }
440
+ function resolveFiatCurrencyBytes32(codeOrBytes) {
441
+ if (codeOrBytes.startsWith("0x")) return ensureBytes32(codeOrBytes);
442
+ return currencyKeccak256(codeOrBytes.toUpperCase());
443
+ }
444
+ function resolvePaymentMethodHashFromCatalog(processorName, catalog) {
445
+ if (!processorName) {
446
+ throw new Error("processorName is required to resolve paymentMethodHash");
447
+ }
448
+ if (processorName.startsWith("0x")) {
449
+ return ensureBytes32(processorName);
450
+ }
451
+ const key = processorName.toLowerCase();
452
+ const entry = catalog?.[key];
453
+ if (entry?.paymentMethodHash) return entry.paymentMethodHash;
454
+ const fallbackHash = METHOD_NAME_TO_HASH[key];
455
+ if (fallbackHash) return fallbackHash;
456
+ const available = Object.keys(catalog || {}).sort().join(", ");
457
+ throw new Error(
458
+ available ? `Unknown processorName: ${processorName}. Available: ${available}` : `Unknown processorName: ${processorName}. The payment methods catalog is empty or unavailable.`
459
+ );
460
+ }
461
+ function resolvePaymentMethodNameFromHash(hash, catalog) {
462
+ if (!hash) return void 0;
463
+ const target = ensureBytes32(hash);
464
+ for (const [name, entry] of Object.entries(catalog || {})) {
465
+ if (entry?.paymentMethodHash?.toLowerCase() === target.toLowerCase()) return name;
466
+ }
467
+ return void 0;
468
+ }
391
469
 
392
470
  // src/utils/protocolViewerParsers.ts
471
+ function parseReferralFees(rawIntent) {
472
+ if (Array.isArray(rawIntent?.referralFees)) {
473
+ return rawIntent.referralFees.map((fee) => ({
474
+ recipient: fee.recipient ?? "",
475
+ fee: parseBigIntLike(fee.fee ?? 0)
476
+ }));
477
+ }
478
+ const legacyRecipient = rawIntent?.referrer ?? "";
479
+ const legacyFee = parseBigIntLike(rawIntent?.referrerFee ?? 0);
480
+ if (typeof legacyRecipient === "string" && legacyRecipient !== "" && legacyRecipient !== "0x0000000000000000000000000000000000000000" && legacyFee > 0n) {
481
+ return [{ recipient: legacyRecipient, fee: legacyFee }];
482
+ }
483
+ return [];
484
+ }
393
485
  function parseDepositView(raw) {
394
486
  return {
395
487
  depositId: parseBigIntLike(raw.depositId),
@@ -410,6 +502,7 @@ function parseDepositView(raw) {
410
502
  accruedMakerFees: parseBigIntLike(raw.deposit.accruedMakerFees ?? 0),
411
503
  accruedReferrerFees: parseBigIntLike(raw.deposit.accruedReferrerFees ?? 0),
412
504
  intentGuardian: raw.deposit.intentGuardian ?? "",
505
+ retainOnEmpty: raw.deposit.retainOnEmpty ?? false,
413
506
  referrer: raw.deposit.referrer ?? "",
414
507
  referrerFee: parseBigIntLike(raw.deposit.referrerFee ?? 0)
415
508
  },
@@ -449,8 +542,7 @@ function parseIntentView(raw) {
449
542
  paymentMethod: raw.intent.paymentMethod,
450
543
  fiatCurrency: raw.intent.fiatCurrency,
451
544
  conversionRate: parseBigIntLike(raw.intent.conversionRate),
452
- referrer: raw.intent.referrer,
453
- referrerFee: parseBigIntLike(raw.intent.referrerFee ?? 0),
545
+ referralFees: parseReferralFees(raw.intent),
454
546
  postIntentHook: raw.intent.postIntentHook,
455
547
  data: raw.intent.data
456
548
  },
@@ -484,6 +576,6 @@ function enrichPvIntentView(view, chainId, env = "production") {
484
576
  };
485
577
  }
486
578
 
487
- export { HISTORICAL_ESCROW_ADDRESSES, enrichPvDepositView, enrichPvIntentView, getContracts, getGatingServiceAddress, getPaymentMethodsCatalog, getRateManagerContracts, parseBigIntLike, parseDepositView, parseIntentView };
488
- //# sourceMappingURL=chunk-6YLLNF6Q.mjs.map
489
- //# sourceMappingURL=chunk-6YLLNF6Q.mjs.map
579
+ export { HISTORICAL_ESCROW_ADDRESSES, asciiToBytes32, enrichPvDepositView, enrichPvIntentView, ensureBytes32, getContracts, getGatingServiceAddress, getPaymentMethodsCatalog, getRateManagerContracts, parseBigIntLike, parseDepositView, parseIntentView, resolveFiatCurrencyBytes32, resolvePaymentMethodHash, resolvePaymentMethodHashFromCatalog, resolvePaymentMethodNameFromHash };
580
+ //# sourceMappingURL=chunk-JH74HXTS.mjs.map
581
+ //# sourceMappingURL=chunk-JH74HXTS.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/bigint.ts","../src/contracts.ts","../src/utils/bytes32.ts","../src/utils/paymentMethodHashes.ts","../src/utils/paymentResolution.ts","../src/utils/protocolViewerParsers.ts"],"names":["baseStagingPaymentMethods"],"mappings":"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","file":"chunk-JH74HXTS.mjs","sourcesContent":["export function parseBigIntLike(\n value: unknown,\n errorMessage = 'Unsupported numeric value',\n): bigint {\n if (typeof value === 'bigint') return value;\n if (typeof value === 'number') return BigInt(value);\n if (typeof value === 'string') {\n const normalized = value.trim();\n if (!normalized) throw new Error(errorMessage);\n return BigInt(normalized);\n }\n\n if (value && typeof (value as { toString?: () => string }).toString === 'function') {\n const normalized = (value as { toString: () => string }).toString().trim();\n if (!normalized) throw new Error(errorMessage);\n return BigInt(normalized);\n }\n\n throw new Error(errorMessage);\n}\n","/**\n * Contract resolution utilities for the SDK.\n *\n * Provides access to deployed contract addresses and ABIs for different\n * networks (Base) and environments (production, staging).\n *\n * @module contracts\n */\n\nimport type { Abi } from 'abitype';\n\n// Typed imports from @zkp2p/contracts-v2 (module declarations provided in src/@types)\n// Use *Raw suffix for imports that need runtime normalization (addresses, constants)\nimport baseAddressesRaw from '@zkp2p/contracts-v2/addresses/base';\nimport baseStagingAddressesRaw from '@zkp2p/contracts-v2/addresses/baseStaging';\nimport * as baseAbisRaw from '@zkp2p/contracts-v2/abis/base';\nimport * as baseStagingAbisRaw from '@zkp2p/contracts-v2/abis/baseStaging';\n\nimport EscrowBase from '@zkp2p/contracts-v2/abis/base/Escrow.json';\nimport OrchestratorBase from '@zkp2p/contracts-v2/abis/base/Orchestrator.json';\nimport ProtocolViewerBase from '@zkp2p/contracts-v2/abis/base/ProtocolViewer.json';\nimport UnifiedPaymentVerifierBase from '@zkp2p/contracts-v2/abis/base/UnifiedPaymentVerifier.json';\n\nimport EscrowBaseStaging from '@zkp2p/contracts-v2/abis/baseStaging/Escrow.json';\nimport OrchestratorBaseStaging from '@zkp2p/contracts-v2/abis/baseStaging/Orchestrator.json';\nimport UnifiedPaymentVerifierBaseStaging from '@zkp2p/contracts-v2/abis/baseStaging/UnifiedPaymentVerifier.json';\nimport ProtocolViewerBaseStaging from '@zkp2p/contracts-v2/abis/baseStaging/ProtocolViewer.json';\n\nimport baseConstantsRaw from '@zkp2p/contracts-v2/constants/base';\nimport baseStagingConstantsRaw from '@zkp2p/contracts-v2/constants/baseStaging';\n// Payment methods catalogs (JSON). Import statically so ESM bundlers include the data.\n// These modules are present in @zkp2p/contracts-v2; tsconfig sets resolveJsonModule: true\nimport basePaymentMethodsRaw from '@zkp2p/contracts-v2/paymentMethods/base.json';\nimport baseStagingPaymentMethodsRaw from '@zkp2p/contracts-v2/paymentMethods/baseStaging.json';\n\n// ---------------------------------------------------------------------------\n// Runtime normalization helpers for ESM/CJS interoperability\n// ---------------------------------------------------------------------------\n// In certain runtimes (tsx, Node ESM), deep imports from @zkp2p/contracts-v2\n// resolve as { default: [Getter] } or { default: { contracts: {...} } } instead\n// of the expected shape. These helpers unwrap the actual data regardless of shape.\n\n/**\n * Normalize address module shape. Handles:\n * - { contracts: {...} } (direct)\n * - { default: { contracts: {...} } } (wrapped)\n * - { default: [Getter] } (lazy)\n */\nfunction unwrapAddresses(mod: unknown): {\n name?: string;\n chainId?: number;\n contracts?: Record<string, `0x${string}`>;\n} {\n if (!mod) return {} as ReturnType<typeof unwrapAddresses>;\n const m = mod as Record<string, unknown>;\n // Direct shape\n if (m.contracts) return m as ReturnType<typeof unwrapAddresses>;\n // Wrapped shape\n if ((m.default as Record<string, unknown>)?.contracts)\n return m.default as ReturnType<typeof unwrapAddresses>;\n // Lazy getter shape\n try {\n const d = typeof m.default === 'function' ? (m.default as () => unknown)() : m.default;\n if ((d as Record<string, unknown>)?.contracts) return d as ReturnType<typeof unwrapAddresses>;\n } catch {\n // ignore\n }\n return m as ReturnType<typeof unwrapAddresses>;\n}\n\n/**\n * Normalize payment methods module shape. Handles:\n * - { methods: {...} } (direct)\n * - { default: { methods: {...} } } (wrapped)\n * - { default: [Getter] } (lazy)\n */\nfunction unwrapMethods(mod: unknown): {\n methods?: Record<string, { paymentMethodHash: `0x${string}`; currencies?: `0x${string}`[] }>;\n} {\n if (!mod) return {} as ReturnType<typeof unwrapMethods>;\n const m = mod as Record<string, unknown>;\n if (m.methods) return m as ReturnType<typeof unwrapMethods>;\n if ((m.default as Record<string, unknown>)?.methods)\n return m.default as ReturnType<typeof unwrapMethods>;\n try {\n const d = typeof m.default === 'function' ? (m.default as () => unknown)() : m.default;\n if ((d as Record<string, unknown>)?.methods) return d as ReturnType<typeof unwrapMethods>;\n } catch {\n // ignore\n }\n return m as ReturnType<typeof unwrapMethods>;\n}\n\n/**\n * Normalize constants module shape (for USDC address, etc.)\n */\nfunction unwrapConstants(mod: unknown): Record<string, unknown> {\n if (!mod) return {};\n const m = mod as Record<string, unknown>;\n if (m.USDC) return m;\n if ((m.default as Record<string, unknown>)?.USDC) return m.default as Record<string, unknown>;\n try {\n const d = typeof m.default === 'function' ? (m.default as () => unknown)() : m.default;\n if ((d as Record<string, unknown>)?.USDC) return d as Record<string, unknown>;\n } catch {\n // ignore\n }\n return m;\n}\n\n// ---------------------------------------------------------------------------\n// Historical escrow addresses\n// ---------------------------------------------------------------------------\n// Escrow addresses from prior deployments. Merged into escrowAddresses so\n// deposits from retired escrows remain queryable. Current addresses come from\n// contracts-v2 dynamically.\n// Source of truth for what the indexer indexes:\n// STAGING: zkp2p-indexer releases/staging config.base_staging.yaml\n// PROD: zkp2p-indexer main config.base_prod.yaml\n\nexport const HISTORICAL_ESCROW_ADDRESSES: Record<string, `0x${string}`[]> = {\n base: [\n '0x2f121CDDCA6d652f35e8B3E560f9760898888888', // EscrowV2 production (contracts-v2 0.2.0-rc.6)\n ],\n base_staging: [\n '0x5C2a8D9246777eE4501B6C426a8B8C7635C7b5b5', // EscrowV2 staging (contracts-v2 0.2.0-rc.5)\n '0x18EAcBf3FF19528ABe8035CF5cA266F31A2e3f14', // EscrowV2 staging (contracts-v2 0.1.11-rc.3)\n '0x07Cc97c254A5Fb0957553E9F58E4040699357f28', // EscrowV2 staging (contracts-v2 0.1.11-rc.2)\n '0x8455b9a31041125C785044f45458eCf2cbB12eF7', // v2.1 staging Escrow (2025-10-18, PR #83)\n '0x21f007107269ea1c8Fe0730736548090F4945736', // v2.1 staging Escrow (2025-10-04, PR #71)\n ],\n};\n\nexport const HISTORICAL_ORCHESTRATOR_ADDRESSES: Record<string, `0x${string}`[]> = {\n base: [\n '0x88888883Ed048FF0a415271B28b2F52d431810D0', // OrchestratorV2 production (contracts-v2 0.2.0-rc.6)\n ],\n base_staging: [\n '0xF9b9CD27Deea496B960b3cb5221b514705fCaF5e', // OrchestratorV2 staging (contracts-v2 0.2.0-rc.5)\n '0xC0389b3d7A4E6B823e361e562C4a29F04B6C4fB5', // OrchestratorV2 staging (contracts-v2 0.1.11-rc.3)\n ],\n};\n\nconst STAGING_ESCROW_V2_FALLBACK = '0x77e8f808FE201075e0bD651CD46fdF239fc83265';\nconst STAGING_ORCHESTRATOR_V2_FALLBACK = '0xc17a59227B136c45fAa153086a15EF87ED14bE00';\n\nconst ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';\n\nfunction isValidAddress(value?: string | null): value is `0x${string}` {\n return (\n typeof value === 'string' &&\n /^0x[a-fA-F0-9]{40}$/.test(value) &&\n value.toLowerCase() !== ZERO_ADDRESS\n );\n}\n\nfunction pickAddress(\n contracts: Record<string, string> | undefined,\n keys: string[],\n): `0x${string}` | undefined {\n if (!contracts) return undefined;\n for (const key of keys) {\n const candidate = contracts[key];\n if (isValidAddress(candidate)) return candidate;\n }\n return undefined;\n}\n\nfunction pickAbi(source: Record<string, unknown>, names: string[]): Abi | undefined {\n for (const name of names) {\n const candidate = source[name];\n if (Array.isArray(candidate)) return candidate as unknown as Abi;\n }\n return undefined;\n}\n\nfunction uniqueAddresses(...values: Array<string | undefined>): `0x${string}`[] {\n const seen = new Set<string>();\n const addresses: `0x${string}`[] = [];\n for (const value of values) {\n if (!isValidAddress(value)) continue;\n const normalized = value.toLowerCase();\n if (seen.has(normalized)) continue;\n seen.add(normalized);\n addresses.push(value);\n }\n return addresses;\n}\n\nfunction addressesEqual(left?: string, right?: string): boolean {\n return Boolean(left && right && left.toLowerCase() === right.toLowerCase());\n}\n\nfunction firstDistinctAddress(\n candidates: Array<`0x${string}` | undefined>,\n current?: `0x${string}`,\n): `0x${string}` | undefined {\n for (const candidate of candidates) {\n if (!isValidAddress(candidate)) continue;\n if (addressesEqual(candidate, current)) continue;\n return candidate;\n }\n return undefined;\n}\n\nfunction readRuntimeEnv(key: string): string | undefined {\n try {\n const meta = import.meta as { env?: Record<string, string | undefined> };\n const fromVite = meta?.env?.[key];\n if (fromVite) return fromVite;\n } catch {\n // ignore\n }\n try {\n const proc = (\n globalThis as {\n process?: { env?: Record<string, string | undefined> };\n }\n ).process;\n return proc?.env?.[key];\n } catch {\n // ignore\n }\n return undefined;\n}\n\nfunction resolveRuntimeAddressOverride(envKeys: string[]): `0x${string}` | undefined {\n for (const key of envKeys) {\n const candidate = readRuntimeEnv(key);\n if (isValidAddress(candidate)) return candidate;\n }\n return undefined;\n}\n\n// Apply runtime normalization to all imports\nconst baseAddresses = unwrapAddresses(baseAddressesRaw);\nconst baseStagingAddresses = unwrapAddresses(baseStagingAddressesRaw);\nconst basePaymentMethods = unwrapMethods(basePaymentMethodsRaw);\nconst baseStagingPaymentMethods = unwrapMethods(baseStagingPaymentMethodsRaw);\nconst baseConstants = unwrapConstants(baseConstantsRaw);\nconst baseStagingConstants = unwrapConstants(baseStagingConstantsRaw);\n\n/**\n * Contract addresses for a specific deployment.\n */\nexport type V2ContractAddresses = {\n /** Escrow contract (holds deposits and manages intents) */\n escrow: `0x${string}`;\n /** EscrowV2 contract (supports native rate-manager delegation) */\n escrowV2?: `0x${string}`;\n /** All supported escrow addresses (V2 first, then legacy) */\n escrowAddresses?: `0x${string}`[];\n /** Orchestrator contract (handles intent signaling and fulfillment) */\n orchestrator?: `0x${string}`;\n /** OrchestratorV2 contract (queries EscrowV2 effective rates) */\n orchestratorV2?: `0x${string}`;\n /** All supported orchestrator addresses (V2 first, then legacy) */\n orchestratorAddresses?: `0x${string}`[];\n /** UnifiedPaymentVerifier contract (verifies payment proofs) */\n unifiedPaymentVerifier?: `0x${string}`;\n /** UnifiedPaymentVerifierV2 contract (updated verifier) */\n unifiedPaymentVerifierV2?: `0x${string}`;\n /** ProtocolViewer contract (batch read operations) */\n protocolViewer?: `0x${string}`;\n /** Ordered list of all ProtocolViewer instances (primary first, legacy fallback after) */\n protocolViewerEntries?: Array<{ address: `0x${string}`; abi: Abi }>;\n /** USDC token address */\n usdc?: `0x${string}`;\n /** RateManagerV1 contract */\n rateManagerV1?: `0x${string}`;\n /** OrchestratorRegistry contract */\n orchestratorRegistry?: `0x${string}`;\n /** DepositRateManagerRegistryV1 contract */\n rateManagerRegistry?: `0x${string}`;\n /** DepositRateManagerController contract */\n rateManagerController?: `0x${string}`;\n /** ChainlinkOracleAdapter contract */\n chainlinkOracleAdapter?: `0x${string}`;\n /** PythOracleAdapter contract */\n pythOracleAdapter?: `0x${string}`;\n};\n\n/**\n * Contract ABIs for a specific deployment.\n */\nexport type V2ContractAbis = {\n escrow: Abi;\n escrowV2?: Abi;\n orchestrator?: Abi;\n orchestratorV2?: Abi;\n unifiedPaymentVerifier?: Abi;\n unifiedPaymentVerifierV2?: Abi;\n protocolViewer?: Abi;\n rateManagerV1?: Abi;\n orchestratorRegistry?: Abi;\n rateManagerRegistry?: Abi;\n rateManagerController?: Abi;\n};\n\n/**\n * Runtime environment: 'production' for mainnet, 'preproduction' for preprod\n * (production contracts + preprod indexer), 'staging' for testnet/dev.\n */\nexport type RuntimeEnv = 'production' | 'preproduction' | 'staging';\n\n/**\n * Converts a chain ID to its network key.\n * @internal\n */\nexport function networkKeyFromChainId(_chainId: number): 'base' {\n return 'base';\n}\n\n/**\n * Retrieves deployed contract addresses and ABIs for a given chain and environment.\n *\n * @param chainId - The chain ID (8453 for Base)\n * @param env - Runtime environment ('production' or 'staging')\n * @returns Object containing addresses and ABIs\n *\n * @example\n * ```typescript\n * import { getContracts } from '@zkp2p/sdk';\n *\n * const { addresses, abis } = getContracts(8453, 'production');\n * console.log(addresses.escrow); // \"0x...\"\n * console.log(addresses.usdc); // \"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913\"\n * ```\n */\nexport function getContracts(\n chainId: number,\n env: RuntimeEnv = 'production',\n): { addresses: V2ContractAddresses; abis: V2ContractAbis } {\n const key = networkKeyFromChainId(chainId);\n const baseContracts = (baseAddresses.contracts ?? {}) as Record<string, string>;\n const baseV2ProtocolViewerAbi = pickAbi(baseAbisRaw as unknown as Record<string, unknown>, [\n 'ProtocolViewerV2',\n ]);\n const baseV2ProtocolViewerAddress = pickAddress(baseContracts, ['ProtocolViewerV2']);\n const baseV1ProtocolViewerAddress = pickAddress(baseContracts, ['ProtocolViewer']);\n const baseProtocolViewerEntries = (() => {\n const entries: Array<{ address: `0x${string}`; abi: Abi }> = [];\n if (baseV2ProtocolViewerAddress && baseV2ProtocolViewerAbi) {\n entries.push({ address: baseV2ProtocolViewerAddress, abi: baseV2ProtocolViewerAbi });\n }\n if (\n baseV1ProtocolViewerAddress &&\n !addressesEqual(baseV1ProtocolViewerAddress, baseV2ProtocolViewerAddress)\n ) {\n entries.push({ address: baseV1ProtocolViewerAddress, abi: ProtocolViewerBase as Abi });\n }\n return entries.length > 0 ? entries : undefined;\n })();\n\n const addressesByKey: Record<'base', V2ContractAddresses> = {\n base: {\n escrow:\n pickAddress(baseContracts, ['EscrowV2', 'Escrow_V2']) ??\n pickAddress(baseContracts, ['Escrow']) ??\n ('' as `0x${string}`),\n escrowV2: pickAddress(baseContracts, ['EscrowV2', 'Escrow_V2']),\n escrowAddresses: uniqueAddresses(\n pickAddress(baseContracts, ['EscrowV2', 'Escrow_V2']),\n pickAddress(baseContracts, ['Escrow']),\n ...HISTORICAL_ESCROW_ADDRESSES.base,\n ),\n orchestrator:\n pickAddress(baseContracts, ['OrchestratorV2', 'Orchestrator_V2']) ??\n pickAddress(baseContracts, ['Orchestrator']),\n orchestratorV2: pickAddress(baseContracts, ['OrchestratorV2', 'Orchestrator_V2']),\n orchestratorAddresses: uniqueAddresses(\n pickAddress(baseContracts, ['OrchestratorV2', 'Orchestrator_V2']),\n pickAddress(baseContracts, ['Orchestrator']),\n ...HISTORICAL_ORCHESTRATOR_ADDRESSES.base,\n ),\n unifiedPaymentVerifier: pickAddress(baseContracts, [\n 'UnifiedPaymentVerifierV2',\n 'UnifiedPaymentVerifier',\n ]),\n unifiedPaymentVerifierV2: pickAddress(baseContracts, ['UnifiedPaymentVerifierV2']),\n protocolViewer:\n baseProtocolViewerEntries?.[0]?.address ??\n baseV1ProtocolViewerAddress ??\n baseV2ProtocolViewerAddress,\n protocolViewerEntries: baseProtocolViewerEntries,\n usdc: baseConstants.USDC as `0x${string}` | undefined,\n rateManagerV1: pickAddress(baseContracts, ['RateManagerV1', 'DepositRateManagerRegistryV1']),\n orchestratorRegistry: pickAddress(baseContracts, ['OrchestratorRegistry']),\n rateManagerRegistry: pickAddress(baseContracts, [\n 'DepositRateManagerRegistryV1',\n 'RateManagerV1',\n ]),\n rateManagerController: pickAddress(baseContracts, ['DepositRateManagerController']),\n chainlinkOracleAdapter: pickAddress(baseContracts, ['ChainlinkOracleAdapter']),\n pythOracleAdapter: pickAddress(baseContracts, ['PythOracleAdapter']),\n },\n };\n\n const abisByKey: Record<'base', V2ContractAbis> = {\n base: {\n escrow: EscrowBase as unknown as Abi,\n escrowV2: (pickAbi(baseAbisRaw as unknown as Record<string, unknown>, ['EscrowV2']) ??\n (EscrowBase as unknown as Abi)) as Abi,\n orchestrator: OrchestratorBase as unknown as Abi,\n orchestratorV2: (pickAbi(baseAbisRaw as unknown as Record<string, unknown>, [\n 'OrchestratorV2',\n ]) ?? (OrchestratorBase as unknown as Abi)) as Abi,\n unifiedPaymentVerifier: (pickAbi(baseAbisRaw as unknown as Record<string, unknown>, [\n 'UnifiedPaymentVerifierV2',\n ]) ?? (UnifiedPaymentVerifierBase as unknown as Abi)) as Abi,\n unifiedPaymentVerifierV2: pickAbi(baseAbisRaw as unknown as Record<string, unknown>, [\n 'UnifiedPaymentVerifierV2',\n ]),\n protocolViewer: (baseProtocolViewerEntries?.[0]?.abi ??\n (ProtocolViewerBase as unknown as Abi)) as Abi,\n rateManagerV1: pickAbi(baseAbisRaw as unknown as Record<string, unknown>, [\n 'RateManagerV1',\n 'DepositRateManagerRegistryV1',\n ]),\n orchestratorRegistry: pickAbi(baseAbisRaw as unknown as Record<string, unknown>, [\n 'OrchestratorRegistry',\n ]),\n rateManagerRegistry: pickAbi(baseAbisRaw as unknown as Record<string, unknown>, [\n 'DepositRateManagerRegistryV1',\n 'RateManagerV1',\n ]),\n rateManagerController: pickAbi(baseAbisRaw as unknown as Record<string, unknown>, [\n 'DepositRateManagerController',\n ]),\n },\n };\n\n // Staging overrides (addresses/abis from contracts-v2 baseStaging deployment)\n if (env === 'staging') {\n const sc = baseStagingAddresses.contracts as Record<string, string> | undefined;\n const stagingEscrowV2Override = resolveRuntimeAddressOverride([\n 'VITE_BASE_STAGING_ESCROW_V2_ADDRESS',\n 'VITE_ESCROW_V2_ADDRESS',\n ]);\n const stagingEscrowCurrent =\n stagingEscrowV2Override ??\n pickAddress(sc, ['EscrowV2', 'Escrow_V2']) ??\n pickAddress(sc, ['Escrow']) ??\n STAGING_ESCROW_V2_FALLBACK;\n const stagingEscrowLegacy = firstDistinctAddress(\n [pickAddress(sc, ['Escrow']), ...HISTORICAL_ESCROW_ADDRESSES.base_staging],\n stagingEscrowCurrent,\n );\n\n const stagingOrchestratorV2Override = resolveRuntimeAddressOverride([\n 'VITE_BASE_STAGING_ORCHESTRATOR_V2_ADDRESS',\n 'VITE_ORCHESTRATOR_V2_ADDRESS',\n 'VITE_ORCHESTRATORV2_ADDRESS',\n ]);\n const stagingOrchestratorCurrent =\n stagingOrchestratorV2Override ??\n pickAddress(sc, ['OrchestratorV2', 'Orchestrator_V2']) ??\n pickAddress(sc, ['Orchestrator']) ??\n STAGING_ORCHESTRATOR_V2_FALLBACK;\n const stagingOrchestratorLegacy = firstDistinctAddress(\n [pickAddress(sc, ['Orchestrator']), ...HISTORICAL_ORCHESTRATOR_ADDRESSES.base_staging],\n stagingOrchestratorCurrent,\n );\n const stagingRateManagerV1 = pickAddress(sc, ['RateManagerV1', 'DepositRateManagerRegistryV1']);\n\n return {\n addresses: {\n escrow: (stagingEscrowCurrent ?? stagingEscrowLegacy ?? '') as `0x${string}`,\n escrowV2: stagingEscrowCurrent,\n escrowAddresses: uniqueAddresses(\n stagingEscrowCurrent,\n stagingEscrowLegacy,\n ...HISTORICAL_ESCROW_ADDRESSES.base_staging,\n ),\n orchestrator: stagingOrchestratorCurrent ?? stagingOrchestratorLegacy,\n orchestratorV2: stagingOrchestratorCurrent,\n orchestratorAddresses: uniqueAddresses(\n stagingOrchestratorCurrent,\n stagingOrchestratorLegacy,\n ...HISTORICAL_ORCHESTRATOR_ADDRESSES.base_staging,\n ),\n unifiedPaymentVerifier: pickAddress(sc, [\n 'UnifiedPaymentVerifierV2',\n 'UnifiedPaymentVerifier',\n ]),\n unifiedPaymentVerifierV2: pickAddress(sc, ['UnifiedPaymentVerifierV2']),\n protocolViewer: pickAddress(sc, ['ProtocolViewerV2', 'ProtocolViewer']),\n protocolViewerEntries: (() => {\n const entries: Array<{ address: `0x${string}`; abi: Abi }> = [];\n // Primary: V2 PV (reads from V2 orchestrator)\n const pvV2Address = pickAddress(sc, ['ProtocolViewerV2']);\n const pvV2Abi = pickAbi(baseStagingAbisRaw as unknown as Record<string, unknown>, [\n 'ProtocolViewerV2',\n ]) as Abi | undefined;\n if (pvV2Address && pvV2Abi) {\n entries.push({ address: pvV2Address, abi: pvV2Abi });\n }\n // Fallback: V1 PV (reads V1 orchestrator intents via 1-input functions)\n const pvV1Address = pickAddress(sc, ['ProtocolViewer']);\n const pvV1Abi = ProtocolViewerBaseStaging as unknown as Abi;\n if (pvV1Address && !addressesEqual(pvV1Address, pvV2Address) && pvV1Abi) {\n entries.push({ address: pvV1Address, abi: pvV1Abi });\n }\n return entries.length > 0 ? entries : undefined;\n })(),\n usdc: baseStagingConstants.USDC as `0x${string}` | undefined,\n rateManagerV1: stagingRateManagerV1,\n orchestratorRegistry: pickAddress(sc, ['OrchestratorRegistry']),\n rateManagerRegistry: (pickAddress(sc, ['DepositRateManagerRegistryV1']) ??\n stagingRateManagerV1) as `0x${string}` | undefined,\n rateManagerController: pickAddress(sc, ['DepositRateManagerController']),\n chainlinkOracleAdapter: pickAddress(sc, ['ChainlinkOracleAdapter']),\n pythOracleAdapter: pickAddress(sc, ['PythOracleAdapter']),\n },\n abis: {\n escrow: EscrowBaseStaging as unknown as Abi,\n escrowV2: (addressesEqual(stagingEscrowCurrent, pickAddress(sc, ['Escrow']))\n ? (EscrowBaseStaging as unknown as Abi)\n : (pickAbi(baseStagingAbisRaw as unknown as Record<string, unknown>, ['EscrowV2']) ??\n (EscrowBaseStaging as unknown as Abi))) as Abi,\n orchestrator: OrchestratorBaseStaging as unknown as Abi,\n orchestratorV2: (addressesEqual(\n stagingOrchestratorCurrent,\n pickAddress(sc, ['Orchestrator']),\n )\n ? (OrchestratorBaseStaging as unknown as Abi)\n : (pickAbi(baseStagingAbisRaw as unknown as Record<string, unknown>, [\n 'OrchestratorV2',\n ]) ?? (OrchestratorBaseStaging as unknown as Abi))) as Abi,\n unifiedPaymentVerifier: (pickAbi(baseStagingAbisRaw as unknown as Record<string, unknown>, [\n 'UnifiedPaymentVerifierV2',\n ]) ?? (UnifiedPaymentVerifierBaseStaging as unknown as Abi)) as Abi,\n unifiedPaymentVerifierV2: pickAbi(\n baseStagingAbisRaw as unknown as Record<string, unknown>,\n ['UnifiedPaymentVerifierV2'],\n ),\n protocolViewer: (pickAbi(baseStagingAbisRaw as unknown as Record<string, unknown>, [\n 'ProtocolViewerV2',\n ]) ?? (ProtocolViewerBaseStaging as unknown as Abi)) as Abi,\n rateManagerV1: pickAbi(baseStagingAbisRaw as unknown as Record<string, unknown>, [\n 'RateManagerV1',\n 'DepositRateManagerRegistryV1',\n ]),\n orchestratorRegistry: pickAbi(baseStagingAbisRaw as unknown as Record<string, unknown>, [\n 'OrchestratorRegistry',\n ]),\n rateManagerRegistry: pickAbi(baseStagingAbisRaw as unknown as Record<string, unknown>, [\n 'DepositRateManagerRegistryV1',\n 'RateManagerV1',\n ]),\n rateManagerController: pickAbi(baseStagingAbisRaw as unknown as Record<string, unknown>, [\n 'DepositRateManagerController',\n ]),\n },\n };\n }\n\n const result = { addresses: addressesByKey[key], abis: abisByKey[key] };\n\n return result;\n}\n\n/**\n * Catalog of payment methods with their hashes and supported currencies.\n */\nexport type PaymentMethodCatalog = Record<\n string,\n { paymentMethodHash: `0x${string}`; currencies?: `0x${string}`[] }\n>;\n\n/**\n * Retrieves the payment methods catalog for a given chain and environment.\n *\n * The catalog maps payment platform names (e.g., 'wise', 'revolut') to their\n * on-chain hashes and supported currency hashes.\n *\n * @param chainId - The chain ID\n * @param env - Runtime environment\n * @returns Payment method catalog keyed by platform name\n *\n * @example\n * ```typescript\n * import { getPaymentMethodsCatalog } from '@zkp2p/sdk';\n *\n * const catalog = getPaymentMethodsCatalog(8453, 'production');\n * console.log(Object.keys(catalog)); // ['wise', 'venmo', 'revolut', ...]\n * console.log(catalog.wise.paymentMethodHash); // \"0x...\"\n * console.log(catalog.wise.currencies); // [\"0x...\", \"0x...\"] (currency hashes)\n * ```\n */\nexport function getPaymentMethodsCatalog(\n _chainId: number,\n env: RuntimeEnv = 'production',\n): PaymentMethodCatalog {\n const src = env === 'staging' ? baseStagingPaymentMethods : basePaymentMethods;\n const methods = (src?.methods ?? {}) as PaymentMethodCatalog;\n return methods;\n}\n\n/**\n * Returns the gating service address for a given chain and environment.\n *\n * The gating service signs intent parameters before they can be submitted\n * on-chain, providing an additional validation layer.\n *\n * @param chainId - The chain ID\n * @param env - Runtime environment\n * @returns Gating service signer address\n */\nexport function getGatingServiceAddress(\n _chainId: number,\n env: RuntimeEnv = 'production',\n): `0x${string}` {\n // Base Staging & Production share the same gating service in current deployments\n if (env === 'staging') {\n return '0x396D31055Db28C0C6f36e8b36f18FE7227248a97' as `0x${string}`;\n }\n // Base mainnet (production)\n return '0x396D31055Db28C0C6f36e8b36f18FE7227248a97' as `0x${string}`;\n}\n\nexport function getRateManagerContracts(\n chainId: number,\n env: RuntimeEnv = 'production',\n): {\n addresses: { registry: `0x${string}`; controller?: `0x${string}` };\n abis: { registry: Abi; controller?: Abi };\n} {\n const { addresses, abis } = getContracts(chainId, env);\n const registryAddress = addresses.rateManagerV1 ?? addresses.rateManagerRegistry;\n const registryAbi = abis.rateManagerV1 ?? abis.rateManagerRegistry;\n if (!registryAddress || !registryAbi) {\n throw new Error(`Rate manager contracts not available for chainId=${chainId}, env=${env}`);\n }\n const controllerAddress = addresses.rateManagerController;\n const controllerAbi = controllerAddress ? abis.rateManagerController : undefined;\n\n return {\n addresses: {\n registry: registryAddress,\n ...(controllerAddress ? { controller: controllerAddress } : {}),\n },\n abis: {\n registry: registryAbi,\n ...(controllerAbi ? { controller: controllerAbi } : {}),\n },\n };\n}\n","import { keccak256, toBytes, hexToBytes, bytesToHex } from 'viem';\n\n/**\n * Ensure a value is 32 bytes hex (0x + 64 nibbles). If ascii, keccak256 by default when hash=true.\n */\nexport function ensureBytes32(\n value: string,\n { hashIfAscii = false }: { hashIfAscii?: boolean } = {},\n): `0x${string}` {\n if (value.startsWith('0x')) {\n const bytes = hexToBytes(value as `0x${string}`);\n if (bytes.length !== 32) throw new Error('Expected 32-byte hex value');\n return value as `0x${string}`;\n }\n if (!hashIfAscii)\n throw new Error('Expected 32-byte hex; received ascii string. Pass hashIfAscii=true to hash.');\n const hashed = keccak256(toBytes(value));\n return hashed as `0x${string}`;\n}\n\n/**\n * Encode ASCII (<=32 chars) left-aligned, right-padded with zeros to 32 bytes.\n */\nexport function asciiToBytes32(value: string): `0x${string}` {\n const b = toBytes(value);\n if (b.length > 32) throw new Error('ASCII input exceeds 32 bytes');\n const padded = new Uint8Array(32);\n padded.set(b);\n return bytesToHex(padded);\n}\n","import lookups from '@zkp2p/contracts-v2/paymentMethods/lookups.json';\n\n/**\n * Canonical payment-method hash map sourced from contracts.\n */\nexport const METHOD_NAME_TO_HASH = lookups.nameToHash;\n","/**\n * Payment method resolution utilities.\n *\n * These functions convert between human-readable payment platform names\n * (e.g., 'wise', 'revolut') and their on-chain bytes32 hashes.\n *\n * @module paymentResolution\n */\n\nimport { ensureBytes32 } from './bytes32';\nimport { currencyKeccak256 } from './currencyKeccak256';\nimport { METHOD_NAME_TO_HASH } from './paymentMethodHashes';\nimport type { PaymentMethodCatalog } from '../contracts';\n\n// Optional JSON maps from @zkp2p/contracts-v2 (only provided on some envs)\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport baseStagingPaymentMethods from '@zkp2p/contracts-v2/paymentMethods/baseStaging';\n\ntype NetworkKey = 'base';\ntype RuntimeEnv = 'production' | 'preproduction' | 'staging';\n\nfunction getPaymentMethodMap(\n env: RuntimeEnv,\n _network: NetworkKey,\n): Record<string, { paymentMethodHash: `0x${string}` }> | null {\n if (env === 'staging') {\n const m = (baseStagingPaymentMethods?.methods ?? {}) as Record<\n string,\n { paymentMethodHash: `0x${string}` }\n >;\n return m && Object.keys(m).length ? m : null;\n }\n return null;\n}\n\n/**\n * Resolves a payment method hash from a human-readable name.\n *\n * First attempts to look up the hash from contracts-v2 payment method maps.\n * Falls back to keccak256(name) when maps are unavailable.\n *\n * **Warning**: The fallback may not match on-chain mappings. Prefer using\n * `resolvePaymentMethodHashFromCatalog` with an explicit catalog.\n *\n * @param nameOrBytes - Payment method name ('wise') or existing bytes32 hash\n * @param opts.env - Runtime environment ('production' | 'staging')\n * @param opts.network - Network key ('base')\n * @returns bytes32 payment method hash\n *\n * @example\n * ```typescript\n * const hash = resolvePaymentMethodHash('wise', { env: 'production' });\n * ```\n */\nexport function resolvePaymentMethodHash(\n nameOrBytes: string,\n opts: { env?: RuntimeEnv; network?: NetworkKey } = {},\n): `0x${string}` {\n const { env = 'production', network = 'base' } = opts;\n if (nameOrBytes.startsWith('0x')) return ensureBytes32(nameOrBytes) as `0x${string}`;\n const mapping = getPaymentMethodMap(env, network);\n if (mapping) {\n const key = nameOrBytes.toLowerCase();\n const entry = mapping[key];\n if (entry?.paymentMethodHash) return entry.paymentMethodHash;\n }\n // Fallback: hash ascii name to bytes32\n return ensureBytes32(nameOrBytes, { hashIfAscii: true });\n}\n\n/**\n * Encodes a fiat currency code into bytes32 format (keccak256 hash).\n *\n * If the input is already a hex string (0x-prefixed), it's normalized to bytes32.\n * Otherwise, the currency code is hashed using keccak256.\n *\n * @param codeOrBytes - Currency code ('USD') or existing bytes32 hash\n * @returns bytes32 keccak256 hash of the currency code\n *\n * @example\n * ```typescript\n * const bytes = resolveFiatCurrencyBytes32('USD');\n * // Returns: 0xc4ae21aac0c6549d71dd96035b7e0bdb6c79ebdba8891b666115bc976d16a29e\n * ```\n */\nexport function resolveFiatCurrencyBytes32(codeOrBytes: string): `0x${string}` {\n if (codeOrBytes.startsWith('0x')) return ensureBytes32(codeOrBytes) as `0x${string}`;\n return currencyKeccak256(codeOrBytes.toUpperCase()) as `0x${string}`;\n}\n\n/**\n * Resolves a payment method hash from a provided catalog.\n *\n * This is the recommended method for resolving payment methods as it uses\n * the exact catalog from `getPaymentMethodsCatalog()`, ensuring consistency\n * with on-chain registrations.\n *\n * If the processor is not found in the catalog, falls back to the known\n * protocol payment method hashes before throwing an error.\n *\n * @param processorName - Payment platform name ('wise', 'revolut', etc.)\n * @param catalog - Payment method catalog from `getPaymentMethodsCatalog()`\n * @returns bytes32 payment method hash\n * @throws Error with available processors if not found in catalog or fallback\n *\n * @example\n * ```typescript\n * import { getPaymentMethodsCatalog, resolvePaymentMethodHashFromCatalog } from '@zkp2p/sdk';\n *\n * const catalog = getPaymentMethodsCatalog(8453, 'production');\n * const hash = resolvePaymentMethodHashFromCatalog('wise', catalog);\n * ```\n */\nexport function resolvePaymentMethodHashFromCatalog(\n processorName: string,\n catalog: Record<string, { paymentMethodHash: `0x${string}`; currencies?: `0x${string}`[] }>,\n): `0x${string}` {\n if (!processorName) {\n throw new Error('processorName is required to resolve paymentMethodHash');\n }\n if (processorName.startsWith('0x')) {\n return ensureBytes32(processorName) as `0x${string}`;\n }\n const key = processorName.toLowerCase();\n const entry = catalog?.[key];\n if (entry?.paymentMethodHash) return entry.paymentMethodHash;\n\n // Fallback to known protocol payment method hashes when catalog is missing the entry\n const fallbackHash = METHOD_NAME_TO_HASH[key as keyof typeof METHOD_NAME_TO_HASH];\n if (fallbackHash) return fallbackHash as `0x${string}`;\n\n const available = Object.keys(catalog || {})\n .sort()\n .join(', ');\n throw new Error(\n available\n ? `Unknown processorName: ${processorName}. Available: ${available}`\n : `Unknown processorName: ${processorName}. The payment methods catalog is empty or unavailable.`,\n );\n}\n\n/**\n * Reverse-lookup: converts a payment method hash back to its name.\n *\n * @param hash - The payment method hash (bytes32)\n * @param catalog - Payment method catalog from `getPaymentMethodsCatalog()`\n * @returns Payment platform name (e.g., 'wise') or undefined if not found\n *\n * @example\n * ```typescript\n * const name = resolvePaymentMethodNameFromHash('0x...', catalog);\n * console.log(name); // \"wise\"\n * ```\n */\nexport function resolvePaymentMethodNameFromHash(\n hash: string,\n catalog: PaymentMethodCatalog,\n): string | undefined {\n if (!hash) return undefined;\n const target = ensureBytes32(hash) as `0x${string}`;\n for (const [name, entry] of Object.entries(catalog || {})) {\n if (entry?.paymentMethodHash?.toLowerCase() === target.toLowerCase()) return name;\n }\n return undefined;\n}\n","import { parseBigIntLike as toBigInt } from './bigint';\n\nexport type PV_ReferralFee = {\n recipient: `0x${string}`;\n fee: bigint;\n};\n\nexport type PV_Deposit = {\n depositor: string;\n delegate: string;\n token: string;\n amount: bigint;\n intentAmountRange: { min: bigint; max: bigint };\n acceptingIntents: boolean;\n remainingDeposits: bigint;\n outstandingIntentAmount: bigint;\n makerProtocolFee: bigint;\n reservedMakerFees: bigint;\n accruedMakerFees: bigint;\n accruedReferrerFees: bigint;\n intentGuardian: string;\n retainOnEmpty: boolean;\n referrer: string;\n referrerFee: bigint;\n};\n\nexport type PV_Currency = { code: string; minConversionRate: bigint };\nexport type PV_PaymentMethodData = {\n paymentMethod: string; // bytes32\n verificationData: {\n intentGatingService: string;\n payeeDetails: string; // bytes32\n data: string; // bytes\n };\n currencies: PV_Currency[];\n};\n\nexport type PV_DepositView = {\n depositId: bigint;\n deposit: PV_Deposit;\n availableLiquidity: bigint;\n paymentMethods: PV_PaymentMethodData[];\n intentHashes: string[];\n};\n\nexport type PV_Intent = {\n owner: string;\n to: string;\n escrow: string;\n depositId: bigint;\n amount: bigint;\n timestamp: bigint;\n paymentMethod: string; // bytes32\n fiatCurrency: string; // bytes32\n conversionRate: bigint;\n referralFees: PV_ReferralFee[];\n postIntentHook: string;\n data: string;\n};\n\nexport type PV_IntentView = {\n intentHash: string;\n intent: PV_Intent;\n deposit: Omit<PV_DepositView, 'intentHashes'>;\n};\n\nfunction parseReferralFees(rawIntent: any): PV_ReferralFee[] {\n if (Array.isArray(rawIntent?.referralFees)) {\n return rawIntent.referralFees.map((fee: any) => ({\n recipient: (fee.recipient ?? '') as `0x${string}`,\n fee: toBigInt(fee.fee ?? 0),\n }));\n }\n\n const legacyRecipient = rawIntent?.referrer ?? '';\n const legacyFee = toBigInt(rawIntent?.referrerFee ?? 0);\n if (\n typeof legacyRecipient === 'string' &&\n legacyRecipient !== '' &&\n legacyRecipient !== '0x0000000000000000000000000000000000000000' &&\n legacyFee > 0n\n ) {\n return [{ recipient: legacyRecipient as `0x${string}`, fee: legacyFee }];\n }\n\n return [];\n}\n\nexport function parseDepositView(raw: any): PV_DepositView {\n return {\n depositId: toBigInt(raw.depositId),\n deposit: {\n depositor: raw.deposit.depositor,\n delegate: raw.deposit.delegate,\n token: raw.deposit.token,\n amount: toBigInt(raw.deposit.amount ?? 0),\n intentAmountRange: {\n min: toBigInt(raw.deposit.intentAmountRange?.min ?? 0),\n max: toBigInt(raw.deposit.intentAmountRange?.max ?? 0),\n },\n acceptingIntents: raw.deposit.acceptingIntents ?? false,\n remainingDeposits: toBigInt(raw.deposit.remainingDeposits ?? 0),\n outstandingIntentAmount: toBigInt(raw.deposit.outstandingIntentAmount ?? 0),\n makerProtocolFee: toBigInt(raw.deposit.makerProtocolFee ?? 0),\n reservedMakerFees: toBigInt(raw.deposit.reservedMakerFees ?? 0),\n accruedMakerFees: toBigInt(raw.deposit.accruedMakerFees ?? 0),\n accruedReferrerFees: toBigInt(raw.deposit.accruedReferrerFees ?? 0),\n intentGuardian: raw.deposit.intentGuardian ?? '',\n retainOnEmpty: raw.deposit.retainOnEmpty ?? false,\n referrer: raw.deposit.referrer ?? '',\n referrerFee: toBigInt(raw.deposit.referrerFee ?? 0),\n },\n availableLiquidity: toBigInt(raw.availableLiquidity),\n paymentMethods: (raw.paymentMethods || []).map((pm: any) => ({\n paymentMethod: pm.paymentMethod,\n verificationData: {\n intentGatingService: pm.verificationData.intentGatingService,\n payeeDetails: pm.verificationData.payeeDetails,\n data: pm.verificationData.data,\n },\n currencies: (pm.currencies || []).map((c: any) => ({\n code: c.code,\n minConversionRate: toBigInt(c.minConversionRate),\n })),\n })),\n intentHashes: raw.intentHashes || [],\n };\n}\n\nexport function parseIntentView(raw: any): PV_IntentView {\n const parsedDeposit = parseDepositView(raw.deposit);\n const deposit: Omit<PV_DepositView, 'intentHashes'> = {\n depositId: parsedDeposit.depositId,\n deposit: parsedDeposit.deposit,\n availableLiquidity: parsedDeposit.availableLiquidity,\n paymentMethods: parsedDeposit.paymentMethods,\n };\n return {\n intentHash: raw.intentHash,\n intent: {\n owner: raw.intent.owner,\n to: raw.intent.to,\n escrow: raw.intent.escrow,\n depositId: toBigInt(raw.intent.depositId),\n amount: toBigInt(raw.intent.amount),\n timestamp: toBigInt(raw.intent.timestamp),\n paymentMethod: raw.intent.paymentMethod,\n fiatCurrency: raw.intent.fiatCurrency,\n conversionRate: toBigInt(raw.intent.conversionRate),\n referralFees: parseReferralFees(raw.intent),\n postIntentHook: raw.intent.postIntentHook,\n data: raw.intent.data,\n },\n deposit,\n };\n}\n\n// Enrichment helpers for dashboards/explorers\nimport { getPaymentMethodsCatalog, type RuntimeEnv } from '../contracts';\nimport { resolvePaymentMethodNameFromHash } from './paymentResolution';\nimport { getCurrencyInfoFromHash } from './currency';\n\nexport function enrichPvDepositView(\n view: PV_DepositView,\n chainId: number,\n env: RuntimeEnv = 'production',\n) {\n const catalog = getPaymentMethodsCatalog(chainId, env);\n return {\n ...view,\n paymentMethods: view.paymentMethods.map((pm) => ({\n ...pm,\n processorName: resolvePaymentMethodNameFromHash(pm.paymentMethod, catalog),\n currencies: pm.currencies.map((c) => ({\n ...c,\n currencyInfo: getCurrencyInfoFromHash(c.code),\n })),\n })),\n };\n}\n\nexport function enrichPvIntentView(\n view: PV_IntentView,\n chainId: number,\n env: RuntimeEnv = 'production',\n) {\n const catalog = getPaymentMethodsCatalog(chainId, env);\n return {\n ...view,\n intent: {\n ...view.intent,\n processorName: resolvePaymentMethodNameFromHash(view.intent.paymentMethod, catalog),\n currencyInfo: getCurrencyInfoFromHash(view.intent.fiatCurrency),\n },\n deposit: enrichPvDepositView(view.deposit as any, chainId, env),\n } as any;\n}\n"]}
@@ -108,5 +108,5 @@ var prepareSetDelegationTx = async (client, params, referrer) => {
108
108
  };
109
109
 
110
110
  export { ZERO_ADDRESS, ZERO_RATE_MANAGER_ID, asErrorMessage, assertAtomicDelegationSwitchSupport, assertDelegationMethodSupport, classifyDelegationState, getDelegationRoute, isZeroRateManagerId, normalizeRateManagerId, normalizeRegistry, prepareClearDelegationTx, prepareSetDelegationTx };
111
- //# sourceMappingURL=chunk-456CSWDT.mjs.map
112
- //# sourceMappingURL=chunk-456CSWDT.mjs.map
111
+ //# sourceMappingURL=chunk-YLITJ7SI.mjs.map
112
+ //# sourceMappingURL=chunk-YLITJ7SI.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/react/hooks/vaultUtils.ts"],"names":["method"],"mappings":"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","file":"chunk-456CSWDT.mjs","sourcesContent":["import type { Address, Hex } from 'viem';\nimport type { PreparedTransaction } from '../../types/prepared';\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nexport const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' as const;\nexport const ZERO_RATE_MANAGER_ID =\n '0x0000000000000000000000000000000000000000000000000000000000000000' as const;\n\n// ---------------------------------------------------------------------------\n// Normalizers\n// ---------------------------------------------------------------------------\n\nexport const normalizeRateManagerId = (value?: string | null): string =>\n (value ?? ZERO_RATE_MANAGER_ID).toLowerCase();\n\nexport const normalizeRegistry = (value?: string | null): string =>\n (value ?? ZERO_ADDRESS).toLowerCase();\n\nexport const isZeroRateManagerId = (value?: string | null): boolean => {\n if (!value) return true;\n const normalized = value.toLowerCase();\n return normalized === ZERO_ADDRESS || normalized === ZERO_RATE_MANAGER_ID;\n};\n\n// ---------------------------------------------------------------------------\n// Error helper\n// ---------------------------------------------------------------------------\n\nexport const asErrorMessage = (error: unknown): string => {\n if (!error) return 'Unknown error';\n if (error instanceof Error) return error.message;\n if (typeof error === 'string') return error;\n\n const anyErr = error as Record<string, unknown>;\n if (typeof anyErr.shortMessage === 'string') return anyErr.shortMessage;\n if (typeof anyErr.details === 'string') return anyErr.details;\n if (typeof anyErr.message === 'string') return anyErr.message;\n\n try {\n return JSON.stringify(error);\n } catch {\n return String(error);\n }\n};\n\n// ---------------------------------------------------------------------------\n// Delegation state classification\n// ---------------------------------------------------------------------------\n\nexport type DelegationState = 'delegated_here' | 'delegated_elsewhere' | 'not_delegated';\n\n/**\n * Classify whether a deposit is delegated to the target vault, delegated\n * elsewhere, or not delegated at all.\n *\n * @param currentRateManagerId The deposit's current rateManagerId (from indexer)\n * @param currentRegistry The deposit's current rateManagerAddress / registry (from indexer)\n * @param targetRateManagerId The vault's rateManagerId we're comparing against\n * @param targetRegistry The vault's registry address we're comparing against\n */\nexport const classifyDelegationState = (\n currentRateManagerId: string | null | undefined,\n currentRegistry: string | null | undefined,\n targetRateManagerId: string,\n targetRegistry: string | null | undefined,\n): DelegationState => {\n if (isZeroRateManagerId(currentRateManagerId)) {\n return 'not_delegated';\n }\n\n const normalizedCurrent = normalizeRateManagerId(currentRateManagerId);\n const normalizedTarget = targetRateManagerId.toLowerCase();\n const normalizedCurrentRegistry = normalizeRegistry(currentRegistry);\n const normalizedTargetRegistry = targetRegistry ? targetRegistry.toLowerCase() : '';\n\n const idsMatch = normalizedCurrent === normalizedTarget;\n const registryMatches = normalizedTargetRegistry\n ? normalizedCurrentRegistry === normalizedTargetRegistry\n : true;\n\n if (idsMatch && registryMatches) {\n return 'delegated_here';\n }\n\n return 'delegated_elsewhere';\n};\n\nexport const assertAtomicDelegationSwitchSupport = (\n requiresSwitch: boolean,\n canBatch: boolean,\n): void => {\n if (!requiresSwitch || canBatch) return;\n throw new Error(\n 'Switching delegation targets requires smart-account batching. Clear the existing delegation first.',\n );\n};\n\n// ---------------------------------------------------------------------------\n// Contract routing\n// ---------------------------------------------------------------------------\n\nexport type DelegationRoute = 'v2' | 'legacy';\n\ninterface RoutingClientShape {\n escrowAddresses?: Address[];\n escrowV2Address?: Address;\n legacyEscrowAddress?: Address;\n}\n\nexport const getDelegationRoute = (\n client: RoutingClientShape,\n escrow: Address,\n): DelegationRoute => {\n const escrowLower = escrow.toLowerCase();\n const legacyLower = client.legacyEscrowAddress?.toLowerCase();\n if (legacyLower && escrowLower === legacyLower) return 'legacy';\n\n if (client.escrowAddresses && client.escrowAddresses.length > 0) {\n const v2Candidates = client.escrowAddresses.filter(\n (addr) => !legacyLower || addr.toLowerCase() !== legacyLower,\n );\n if (v2Candidates.some((addr) => addr.toLowerCase() === escrowLower)) {\n return 'v2';\n }\n }\n\n if (client.escrowV2Address && escrowLower === client.escrowV2Address.toLowerCase()) {\n return 'v2';\n }\n\n return 'legacy';\n};\n\nexport const assertDelegationMethodSupport = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n client: any,\n route: DelegationRoute,\n action: 'set' | 'clear',\n): void => {\n if (route === 'v2') {\n const method = action === 'set' ? 'setRateManager' : 'clearRateManager';\n if (client?.[method]?.prepare) return;\n throw new Error(`EscrowV2 delegation requires SDK ${method} support`);\n }\n\n const method = action === 'set' ? 'setDepositRateManager' : 'clearDepositRateManager';\n if (client?.[method]?.prepare) return;\n throw new Error(`Legacy delegation requires SDK ${method} support`);\n};\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface DelegationDepositTarget {\n compositeDepositId: string;\n escrow: Address;\n depositId: bigint;\n currentRateManagerId?: string | null;\n currentRateManagerRegistry?: string | null;\n}\n\nexport interface BatchResult {\n hashes: string[];\n failed: Array<{ compositeDepositId: string; error: string }>;\n}\n\n/**\n * Callback the consumer provides for sending a single prepared transaction.\n * Returns the transaction hash.\n */\nexport type SendTransactionFn = (tx: { to: Address; data: Hex; value?: bigint }) => Promise<string>;\n\n/**\n * Optional callback for batching multiple calls in a single user operation\n * (e.g. via a smart account). If not provided, transactions are sent\n * sequentially via sendTransaction.\n */\nexport type SendBatchFn = (\n txs: Array<{ to: Address; data: Hex; value?: bigint }>,\n) => Promise<string>;\n\n// ---------------------------------------------------------------------------\n// Prepare helpers (used internally by hooks)\n// ---------------------------------------------------------------------------\n\nexport const prepareClearDelegationTx = async (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n client: any,\n params: { escrow: Address; depositId: bigint },\n referrer?: string | string[],\n): Promise<PreparedTransaction> => {\n const route = getDelegationRoute(client, params.escrow);\n assertDelegationMethodSupport(client, route, 'clear');\n if (route === 'v2') {\n return client.clearRateManager.prepare({\n escrowAddress: params.escrow,\n depositId: params.depositId,\n ...(referrer ? { txOverrides: { referrer } } : {}),\n });\n }\n return client.clearDepositRateManager.prepare({\n escrow: params.escrow,\n depositId: params.depositId,\n ...(referrer ? { txOverrides: { referrer } } : {}),\n });\n};\n\nexport const prepareSetDelegationTx = async (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n client: any,\n params: {\n escrow: Address;\n depositId: bigint;\n registry: Address;\n rateManagerId: Hex;\n },\n referrer?: string | string[],\n): Promise<PreparedTransaction> => {\n const route = getDelegationRoute(client, params.escrow);\n assertDelegationMethodSupport(client, route, 'set');\n if (route === 'v2') {\n return client.setRateManager.prepare({\n escrowAddress: params.escrow,\n depositId: params.depositId,\n rateManagerAddress: params.registry,\n rateManagerId: params.rateManagerId,\n ...(referrer ? { txOverrides: { referrer } } : {}),\n });\n }\n return client.setDepositRateManager.prepare({\n escrow: params.escrow,\n depositId: params.depositId,\n registry: params.registry,\n rateManagerId: params.rateManagerId,\n ...(referrer ? { txOverrides: { referrer } } : {}),\n });\n};\n"]}
1
+ {"version":3,"sources":["../src/react/hooks/vaultUtils.ts"],"names":["method"],"mappings":"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","file":"chunk-YLITJ7SI.mjs","sourcesContent":["import type { Address, Hex } from 'viem';\nimport type { PreparedTransaction } from '../../types/prepared';\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nexport const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' as const;\nexport const ZERO_RATE_MANAGER_ID =\n '0x0000000000000000000000000000000000000000000000000000000000000000' as const;\n\n// ---------------------------------------------------------------------------\n// Normalizers\n// ---------------------------------------------------------------------------\n\nexport const normalizeRateManagerId = (value?: string | null): string =>\n (value ?? ZERO_RATE_MANAGER_ID).toLowerCase();\n\nexport const normalizeRegistry = (value?: string | null): string =>\n (value ?? ZERO_ADDRESS).toLowerCase();\n\nexport const isZeroRateManagerId = (value?: string | null): boolean => {\n if (!value) return true;\n const normalized = value.toLowerCase();\n return normalized === ZERO_ADDRESS || normalized === ZERO_RATE_MANAGER_ID;\n};\n\n// ---------------------------------------------------------------------------\n// Error helper\n// ---------------------------------------------------------------------------\n\nexport const asErrorMessage = (error: unknown): string => {\n if (!error) return 'Unknown error';\n if (error instanceof Error) return error.message;\n if (typeof error === 'string') return error;\n\n const anyErr = error as Record<string, unknown>;\n if (typeof anyErr.shortMessage === 'string') return anyErr.shortMessage;\n if (typeof anyErr.details === 'string') return anyErr.details;\n if (typeof anyErr.message === 'string') return anyErr.message;\n\n try {\n return JSON.stringify(error);\n } catch {\n return String(error);\n }\n};\n\n// ---------------------------------------------------------------------------\n// Delegation state classification\n// ---------------------------------------------------------------------------\n\nexport type DelegationState = 'delegated_here' | 'delegated_elsewhere' | 'not_delegated';\n\n/**\n * Classify whether a deposit is delegated to the target vault, delegated\n * elsewhere, or not delegated at all.\n *\n * @param currentRateManagerId The deposit's current rateManagerId (from indexer)\n * @param currentRegistry The deposit's current rateManagerAddress / registry (from indexer)\n * @param targetRateManagerId The vault's rateManagerId we're comparing against\n * @param targetRegistry The vault's registry address we're comparing against\n */\nexport const classifyDelegationState = (\n currentRateManagerId: string | null | undefined,\n currentRegistry: string | null | undefined,\n targetRateManagerId: string,\n targetRegistry: string | null | undefined,\n): DelegationState => {\n if (isZeroRateManagerId(currentRateManagerId)) {\n return 'not_delegated';\n }\n\n const normalizedCurrent = normalizeRateManagerId(currentRateManagerId);\n const normalizedTarget = targetRateManagerId.toLowerCase();\n const normalizedCurrentRegistry = normalizeRegistry(currentRegistry);\n const normalizedTargetRegistry = targetRegistry ? targetRegistry.toLowerCase() : '';\n\n const idsMatch = normalizedCurrent === normalizedTarget;\n const registryMatches = normalizedTargetRegistry\n ? normalizedCurrentRegistry === normalizedTargetRegistry\n : true;\n\n if (idsMatch && registryMatches) {\n return 'delegated_here';\n }\n\n return 'delegated_elsewhere';\n};\n\nexport const assertAtomicDelegationSwitchSupport = (\n requiresSwitch: boolean,\n canBatch: boolean,\n): void => {\n if (!requiresSwitch || canBatch) return;\n throw new Error(\n 'Switching delegation targets requires smart-account batching. Clear the existing delegation first.',\n );\n};\n\n// ---------------------------------------------------------------------------\n// Contract routing\n// ---------------------------------------------------------------------------\n\nexport type DelegationRoute = 'v2' | 'legacy';\n\ninterface RoutingClientShape {\n escrowAddresses?: Address[];\n escrowV2Address?: Address;\n legacyEscrowAddress?: Address;\n}\n\nexport const getDelegationRoute = (\n client: RoutingClientShape,\n escrow: Address,\n): DelegationRoute => {\n const escrowLower = escrow.toLowerCase();\n const legacyLower = client.legacyEscrowAddress?.toLowerCase();\n if (legacyLower && escrowLower === legacyLower) return 'legacy';\n\n if (client.escrowAddresses && client.escrowAddresses.length > 0) {\n const v2Candidates = client.escrowAddresses.filter(\n (addr) => !legacyLower || addr.toLowerCase() !== legacyLower,\n );\n if (v2Candidates.some((addr) => addr.toLowerCase() === escrowLower)) {\n return 'v2';\n }\n }\n\n if (client.escrowV2Address && escrowLower === client.escrowV2Address.toLowerCase()) {\n return 'v2';\n }\n\n return 'legacy';\n};\n\ntype DelegationMethodSupportClient = Partial<\n Record<\n 'setRateManager' | 'clearRateManager' | 'setDepositRateManager' | 'clearDepositRateManager',\n { prepare?: unknown }\n >\n>;\n\nexport const assertDelegationMethodSupport = (\n client: DelegationMethodSupportClient,\n route: DelegationRoute,\n action: 'set' | 'clear',\n): void => {\n if (route === 'v2') {\n const method = action === 'set' ? 'setRateManager' : 'clearRateManager';\n if (client?.[method]?.prepare) return;\n throw new Error(`EscrowV2 delegation requires SDK ${method} support`);\n }\n\n const method = action === 'set' ? 'setDepositRateManager' : 'clearDepositRateManager';\n if (client?.[method]?.prepare) return;\n throw new Error(`Legacy delegation requires SDK ${method} support`);\n};\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface DelegationDepositTarget {\n compositeDepositId: string;\n escrow: Address;\n depositId: bigint;\n currentRateManagerId?: string | null;\n currentRateManagerRegistry?: string | null;\n}\n\nexport interface BatchResult {\n hashes: string[];\n failed: Array<{ compositeDepositId: string; error: string }>;\n}\n\n/**\n * Callback the consumer provides for sending a single prepared transaction.\n * Returns the transaction hash.\n */\nexport type SendTransactionFn = (tx: { to: Address; data: Hex; value?: bigint }) => Promise<string>;\n\n/**\n * Optional callback for batching multiple calls in a single user operation\n * (e.g. via a smart account). If not provided, transactions are sent\n * sequentially via sendTransaction.\n */\nexport type SendBatchFn = (\n txs: Array<{ to: Address; data: Hex; value?: bigint }>,\n) => Promise<string>;\n\n// ---------------------------------------------------------------------------\n// Prepare helpers (used internally by hooks)\n// ---------------------------------------------------------------------------\n\nexport const prepareClearDelegationTx = async (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n client: any,\n params: { escrow: Address; depositId: bigint },\n referrer?: string | string[],\n): Promise<PreparedTransaction> => {\n const route = getDelegationRoute(client, params.escrow);\n assertDelegationMethodSupport(client, route, 'clear');\n if (route === 'v2') {\n return client.clearRateManager.prepare({\n escrowAddress: params.escrow,\n depositId: params.depositId,\n ...(referrer ? { txOverrides: { referrer } } : {}),\n });\n }\n return client.clearDepositRateManager.prepare({\n escrow: params.escrow,\n depositId: params.depositId,\n ...(referrer ? { txOverrides: { referrer } } : {}),\n });\n};\n\nexport const prepareSetDelegationTx = async (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n client: any,\n params: {\n escrow: Address;\n depositId: bigint;\n registry: Address;\n rateManagerId: Hex;\n },\n referrer?: string | string[],\n): Promise<PreparedTransaction> => {\n const route = getDelegationRoute(client, params.escrow);\n assertDelegationMethodSupport(client, route, 'set');\n if (route === 'v2') {\n return client.setRateManager.prepare({\n escrowAddress: params.escrow,\n depositId: params.depositId,\n rateManagerAddress: params.registry,\n rateManagerId: params.rateManagerId,\n ...(referrer ? { txOverrides: { referrer } } : {}),\n });\n }\n return client.setDepositRateManager.prepare({\n escrow: params.escrow,\n depositId: params.depositId,\n registry: params.registry,\n rateManagerId: params.rateManagerId,\n ...(referrer ? { txOverrides: { referrer } } : {}),\n });\n};\n"]}
@@ -1,4 +1,10 @@
1
- import { currencyKeccak256 } from './chunk-37HJPVJE.mjs';
1
+ import { keccak256 } from 'viem';
2
+
3
+ // src/utils/currencyKeccak256.ts
4
+ var currencyKeccak256 = (inputString) => {
5
+ const bytes = new TextEncoder().encode(inputString);
6
+ return keccak256(bytes);
7
+ };
2
8
 
3
9
  // src/utils/currency.ts
4
10
  var Currency = {
@@ -370,6 +376,6 @@ function isSupportedCurrencyHash(hash) {
370
376
  return Boolean(getCurrencyInfoFromHash(hash));
371
377
  }
372
378
 
373
- export { Currency, currencyInfo, getCurrencyCodeFromHash, getCurrencyInfoFromCountryCode, getCurrencyInfoFromHash, isSupportedCurrencyHash, mapConversionRatesToOnchain, mapConversionRatesToOnchainMinRate };
374
- //# sourceMappingURL=chunk-PQQWQF3C.mjs.map
375
- //# sourceMappingURL=chunk-PQQWQF3C.mjs.map
379
+ export { Currency, currencyInfo, currencyKeccak256, getCurrencyCodeFromHash, getCurrencyInfoFromCountryCode, getCurrencyInfoFromHash, isSupportedCurrencyHash, mapConversionRatesToOnchain, mapConversionRatesToOnchainMinRate };
380
+ //# sourceMappingURL=chunk-ZFBH4HD7.mjs.map
381
+ //# sourceMappingURL=chunk-ZFBH4HD7.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/currencyKeccak256.ts","../src/utils/currency.ts"],"names":["viemKeccak256"],"mappings":"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","file":"chunk-ZFBH4HD7.mjs","sourcesContent":["import { keccak256 as viemKeccak256 } from 'viem';\n\nexport const currencyKeccak256 = (inputString: string): string => {\n const bytes = new TextEncoder().encode(inputString);\n return viemKeccak256(bytes);\n};\n","import { currencyKeccak256 } from './currencyKeccak256';\n\n/**\n * Supported fiat currency codes.\n *\n * Use these constants when specifying currencies in conversion rates:\n *\n * @example\n * ```typescript\n * import { Currency } from '@zkp2p/sdk';\n *\n * const rates = [\n * { currency: Currency.USD, conversionRate: '1020000000000000000' },\n * { currency: Currency.EUR, conversionRate: '1100000000000000000' },\n * ];\n * ```\n */\nexport const Currency = {\n AED: 'AED',\n ARS: 'ARS',\n AUD: 'AUD',\n BRL: 'BRL',\n CAD: 'CAD',\n CHF: 'CHF',\n CNY: 'CNY',\n CZK: 'CZK',\n DKK: 'DKK',\n EUR: 'EUR',\n GBP: 'GBP',\n HKD: 'HKD',\n HUF: 'HUF',\n IDR: 'IDR',\n ILS: 'ILS',\n INR: 'INR',\n JPY: 'JPY',\n KES: 'KES',\n MXN: 'MXN',\n MYR: 'MYR',\n NOK: 'NOK',\n NZD: 'NZD',\n PHP: 'PHP',\n PLN: 'PLN',\n RON: 'RON',\n SAR: 'SAR',\n SEK: 'SEK',\n SGD: 'SGD',\n THB: 'THB',\n TRY: 'TRY',\n UGX: 'UGX',\n USD: 'USD',\n VND: 'VND',\n ZAR: 'ZAR',\n} as const;\n\n/**\n * Union type of all supported currency codes.\n */\nexport type CurrencyType = (typeof Currency)[keyof typeof Currency];\n\n/**\n * Complete currency information including name, symbol, and hash.\n */\nexport type CurrencyData = {\n currency: CurrencyType;\n currencyCode: string;\n currencyName: string;\n currencySymbol: string;\n currencyCodeHash: string;\n countryCode: string;\n};\n\n/**\n * Lookup table containing metadata for all supported currencies.\n *\n * Includes currency name, symbol, keccak256 hash (for on-chain use),\n * and ISO country code for flag display.\n *\n * @example\n * ```typescript\n * import { currencyInfo, Currency } from '@zkp2p/sdk';\n *\n * const usd = currencyInfo[Currency.USD];\n * console.log(usd.currencyName); // \"United States Dollar\"\n * console.log(usd.currencySymbol); // \"$\"\n * console.log(usd.currencyCodeHash); // \"0x...\"\n * ```\n */\nexport const currencyInfo: Record<CurrencyType, CurrencyData> = {\n AED: {\n currency: 'AED',\n currencyCode: 'AED',\n currencyName: 'United Arab Emirates Dirham',\n currencyCodeHash: currencyKeccak256('AED'),\n currencySymbol: 'د.إ',\n countryCode: 'ae',\n },\n ARS: {\n currency: 'ARS',\n currencyCode: 'ARS',\n currencyName: 'Argentine Peso',\n currencyCodeHash: currencyKeccak256('ARS'),\n currencySymbol: '$',\n countryCode: 'ar',\n },\n AUD: {\n currency: 'AUD',\n currencyCode: 'AUD',\n currencyName: 'Australian Dollar',\n currencyCodeHash: currencyKeccak256('AUD'),\n currencySymbol: 'A$',\n countryCode: 'au',\n },\n BRL: {\n currency: 'BRL',\n currencyCode: 'BRL',\n currencyName: 'Brazilian Real',\n currencyCodeHash: currencyKeccak256('BRL'),\n currencySymbol: 'R$',\n countryCode: 'br',\n },\n CAD: {\n currency: 'CAD',\n currencyCode: 'CAD',\n currencyName: 'Canadian Dollar',\n currencyCodeHash: currencyKeccak256('CAD'),\n currencySymbol: 'C$',\n countryCode: 'ca',\n },\n CHF: {\n currency: 'CHF',\n currencyCode: 'CHF',\n currencyName: 'Swiss Franc',\n currencyCodeHash: currencyKeccak256('CHF'),\n currencySymbol: 'Fr',\n countryCode: 'ch',\n },\n CNY: {\n currency: 'CNY',\n currencyCode: 'CNY',\n currencyName: 'Chinese Yuan',\n currencyCodeHash: currencyKeccak256('CNY'),\n currencySymbol: '¥',\n countryCode: 'cn',\n },\n CZK: {\n currency: 'CZK',\n currencyCode: 'CZK',\n currencyName: 'Czech Koruna',\n currencyCodeHash: currencyKeccak256('CZK'),\n currencySymbol: 'Kč',\n countryCode: 'cz',\n },\n DKK: {\n currency: 'DKK',\n currencyCode: 'DKK',\n currencyName: 'Danish Krone',\n currencyCodeHash: currencyKeccak256('DKK'),\n currencySymbol: 'kr',\n countryCode: 'dk',\n },\n EUR: {\n currency: 'EUR',\n currencyCode: 'EUR',\n currencyName: 'Euro',\n currencyCodeHash: currencyKeccak256('EUR'),\n currencySymbol: '€',\n countryCode: 'eu',\n },\n GBP: {\n currency: 'GBP',\n currencyCode: 'GBP',\n currencyName: 'British Pound',\n currencyCodeHash: currencyKeccak256('GBP'),\n currencySymbol: '£',\n countryCode: 'gb',\n },\n HKD: {\n currency: 'HKD',\n currencyCode: 'HKD',\n currencyName: 'Hong Kong Dollar',\n currencyCodeHash: currencyKeccak256('HKD'),\n currencySymbol: 'HK$',\n countryCode: 'hk',\n },\n HUF: {\n currency: 'HUF',\n currencyCode: 'HUF',\n currencyName: 'Hungarian Forint',\n currencyCodeHash: currencyKeccak256('HUF'),\n currencySymbol: 'Ft',\n countryCode: 'hu',\n },\n IDR: {\n currency: 'IDR',\n currencyCode: 'IDR',\n currencyName: 'Indonesian Rupiah',\n currencyCodeHash: currencyKeccak256('IDR'),\n currencySymbol: 'Rp',\n countryCode: 'id',\n },\n ILS: {\n currency: 'ILS',\n currencyCode: 'ILS',\n currencyName: 'Israeli New Shekel',\n currencyCodeHash: currencyKeccak256('ILS'),\n currencySymbol: '₪',\n countryCode: 'il',\n },\n INR: {\n currency: 'INR',\n currencyCode: 'INR',\n currencyName: 'Indian Rupee',\n currencyCodeHash: currencyKeccak256('INR'),\n currencySymbol: '₹',\n countryCode: 'in',\n },\n JPY: {\n currency: 'JPY',\n currencyCode: 'JPY',\n currencyName: 'Japanese Yen',\n currencyCodeHash: currencyKeccak256('JPY'),\n currencySymbol: '¥',\n countryCode: 'jp',\n },\n KES: {\n currency: 'KES',\n currencyCode: 'KES',\n currencyName: 'Kenyan Shilling',\n currencyCodeHash: currencyKeccak256('KES'),\n currencySymbol: 'KSh',\n countryCode: 'ke',\n },\n MXN: {\n currency: 'MXN',\n currencyCode: 'MXN',\n currencyName: 'Mexican Peso',\n currencyCodeHash: currencyKeccak256('MXN'),\n currencySymbol: '$',\n countryCode: 'mx',\n },\n MYR: {\n currency: 'MYR',\n currencyCode: 'MYR',\n currencyName: 'Malaysian Ringgit',\n currencyCodeHash: currencyKeccak256('MYR'),\n currencySymbol: 'RM',\n countryCode: 'my',\n },\n NOK: {\n currency: 'NOK',\n currencyCode: 'NOK',\n currencyName: 'Norwegian Krone',\n currencyCodeHash: currencyKeccak256('NOK'),\n currencySymbol: 'kr',\n countryCode: 'no',\n },\n NZD: {\n currency: 'NZD',\n currencyCode: 'NZD',\n currencyName: 'New Zealand Dollar',\n currencyCodeHash: currencyKeccak256('NZD'),\n currencySymbol: 'NZ$',\n countryCode: 'nz',\n },\n PHP: {\n currency: 'PHP',\n currencyCode: 'PHP',\n currencyName: 'Philippine Peso',\n currencyCodeHash: currencyKeccak256('PHP'),\n currencySymbol: '₱',\n countryCode: 'ph',\n },\n PLN: {\n currency: 'PLN',\n currencyCode: 'PLN',\n currencyName: 'Polish Złoty',\n currencyCodeHash: currencyKeccak256('PLN'),\n currencySymbol: 'zł',\n countryCode: 'pl',\n },\n RON: {\n currency: 'RON',\n currencyCode: 'RON',\n currencyName: 'Romanian Leu',\n currencyCodeHash: currencyKeccak256('RON'),\n currencySymbol: 'lei',\n countryCode: 'ro',\n },\n SAR: {\n currency: 'SAR',\n currencyCode: 'SAR',\n currencyName: 'Saudi Riyal',\n currencyCodeHash: currencyKeccak256('SAR'),\n currencySymbol: '﷼',\n countryCode: 'sa',\n },\n SEK: {\n currency: 'SEK',\n currencyCode: 'SEK',\n currencyName: 'Swedish Krona',\n currencyCodeHash: currencyKeccak256('SEK'),\n currencySymbol: 'kr',\n countryCode: 'se',\n },\n SGD: {\n currency: 'SGD',\n currencyCode: 'SGD',\n currencyName: 'Singapore Dollar',\n currencyCodeHash: currencyKeccak256('SGD'),\n currencySymbol: 'S$',\n countryCode: 'sg',\n },\n THB: {\n currency: 'THB',\n currencyCode: 'THB',\n currencyName: 'Thai Baht',\n currencyCodeHash: currencyKeccak256('THB'),\n currencySymbol: '฿',\n countryCode: 'th',\n },\n TRY: {\n currency: 'TRY',\n currencyCode: 'TRY',\n currencyName: 'Turkish Lira',\n currencyCodeHash: currencyKeccak256('TRY'),\n currencySymbol: '₺',\n countryCode: 'tr',\n },\n UGX: {\n currency: 'UGX',\n currencyCode: 'UGX',\n currencyName: 'Ugandan Shilling',\n currencyCodeHash: currencyKeccak256('UGX'),\n currencySymbol: 'USh',\n countryCode: 'ug',\n },\n USD: {\n currency: 'USD',\n currencyCode: 'USD',\n currencyName: 'United States Dollar',\n currencyCodeHash: currencyKeccak256('USD'),\n currencySymbol: '$',\n countryCode: 'us',\n },\n VND: {\n currency: 'VND',\n currencyCode: 'VND',\n currencyName: 'Vietnamese Dong',\n currencyCodeHash: currencyKeccak256('VND'),\n currencySymbol: '₫',\n countryCode: 'vn',\n },\n ZAR: {\n currency: 'ZAR',\n currencyCode: 'ZAR',\n currencyName: 'South African Rand',\n currencyCodeHash: currencyKeccak256('ZAR'),\n currencySymbol: 'R',\n countryCode: 'za',\n },\n} as unknown as Record<CurrencyType, CurrencyData>;\n\n/**\n * UI-friendly currency rate structure used in SDK methods.\n */\nexport type UICurrencyRate = { currency: CurrencyType; conversionRate: string };\n\n/**\n * On-chain currency structure with bytes32 code and bigint rate.\n */\nexport type OnchainCurrency = { code: `0x${string}`; conversionRate: bigint };\n\n/**\n * Maps UI currency rates to on-chain format.\n *\n * @param groups - Nested array of currency rates per payment method\n * @param expectedGroups - Expected number of groups (for validation)\n * @returns On-chain formatted currency arrays\n * @throws Error if groups structure is invalid or lengths don't match\n *\n * @internal Used by createDeposit internally\n */\nexport function mapConversionRatesToOnchain(\n groups: UICurrencyRate[][],\n expectedGroups?: number,\n): OnchainCurrency[][] {\n if (!Array.isArray(groups) || !Array.isArray(groups[0])) {\n throw new Error('conversionRates must be a nested array per processor');\n }\n if (typeof expectedGroups === 'number' && groups.length !== expectedGroups) {\n throw new Error(\n `conversionRates length (${groups.length}) must match processorNames length (${expectedGroups})`,\n );\n }\n return groups.map((group) =>\n group.map((r) => {\n const info = currencyInfo[r.currency as CurrencyType];\n if (!info?.currencyCodeHash) throw new Error('Invalid currency');\n return {\n code: info.currencyCodeHash as `0x${string}`,\n conversionRate: BigInt(r.conversionRate),\n };\n }),\n );\n}\n\n/**\n * On-chain currency structure with minimum conversion rate (V3 escrow format).\n */\nexport type OnchainCurrencyMinRate = { code: `0x${string}`; minConversionRate: bigint };\n\n/**\n * Maps UI currency rates to on-chain V3 escrow format with minConversionRate.\n *\n * @param groups - Nested array of currency rates per payment method\n * @param expectedGroups - Expected number of groups (for validation)\n * @returns On-chain formatted currency arrays for V3 escrow\n * @throws Error if groups structure is invalid or lengths don't match\n */\nexport function mapConversionRatesToOnchainMinRate(\n groups: UICurrencyRate[][],\n expectedGroups?: number,\n): OnchainCurrencyMinRate[][] {\n if (!Array.isArray(groups) || !Array.isArray(groups[0])) {\n throw new Error('conversionRates must be a nested array per payment method');\n }\n if (typeof expectedGroups === 'number' && groups.length !== expectedGroups) {\n throw new Error(\n `conversionRates length (${groups.length}) must match processorNames length (${expectedGroups})`,\n );\n }\n return groups.map((group) =>\n group.map((r) => {\n const info = currencyInfo[r.currency as CurrencyType];\n const hash = info?.currencyCodeHash as `0x${string}` | undefined;\n if (!hash) throw new Error(`Invalid currency: ${r.currency}`);\n return { code: hash, minConversionRate: BigInt(r.conversionRate) };\n }),\n );\n}\n\n/**\n * Looks up currency info by its keccak256 hash.\n *\n * @param hash - The currency code hash (0x-prefixed)\n * @returns Currency data if found, undefined otherwise\n *\n * @example\n * ```typescript\n * const info = getCurrencyInfoFromHash('0x...');\n * if (info) {\n * console.log(info.currencyCode); // \"USD\"\n * }\n * ```\n */\nexport function getCurrencyInfoFromHash(hash: string): CurrencyData | undefined {\n if (!hash) return undefined;\n const h = hash.toLowerCase();\n for (const key of Object.keys(currencyInfo) as Array<keyof typeof currencyInfo>) {\n const info = currencyInfo[key];\n if (info?.currencyCodeHash?.toLowerCase() === h) return info;\n }\n return undefined;\n}\n\n/**\n * Looks up currency info by ISO country code.\n *\n * @param code - The ISO country code (e.g., 'US', 'GB')\n * @returns Currency data if found, undefined otherwise\n */\nexport function getCurrencyInfoFromCountryCode(code: string): CurrencyData | undefined {\n if (!code) return undefined;\n const upper = code.toUpperCase() as CurrencyType;\n return currencyInfo[upper];\n}\n\n/**\n * Converts a currency hash to its ISO currency code.\n *\n * @param hash - The currency code hash (0x-prefixed)\n * @returns Currency code string (e.g., 'USD') or undefined if not found\n *\n * @example\n * ```typescript\n * const code = getCurrencyCodeFromHash('0x...');\n * console.log(code); // \"USD\"\n * ```\n */\nexport function getCurrencyCodeFromHash(hash: string): string | undefined {\n return getCurrencyInfoFromHash(hash)?.currencyCode;\n}\n\n/**\n * Checks if a currency hash is recognized by the SDK.\n *\n * @param hash - The currency code hash to check\n * @returns true if the hash corresponds to a supported currency\n */\nexport function isSupportedCurrencyHash(hash: string): boolean {\n return Boolean(getCurrencyInfoFromHash(hash));\n}\n"]}
@@ -1,4 +1,3 @@
1
- export { Currency, currencyInfo, getCurrencyCodeFromHash, getCurrencyInfoFromCountryCode, getCurrencyInfoFromHash, isSupportedCurrencyHash, mapConversionRatesToOnchain, mapConversionRatesToOnchainMinRate } from './chunk-PQQWQF3C.mjs';
2
- import './chunk-37HJPVJE.mjs';
3
- //# sourceMappingURL=currency-5RZ6VCEA.mjs.map
4
- //# sourceMappingURL=currency-5RZ6VCEA.mjs.map
1
+ export { Currency, currencyInfo, getCurrencyCodeFromHash, getCurrencyInfoFromCountryCode, getCurrencyInfoFromHash, isSupportedCurrencyHash, mapConversionRatesToOnchain, mapConversionRatesToOnchainMinRate } from './chunk-ZFBH4HD7.mjs';
2
+ //# sourceMappingURL=currency-PKI2EGJD.mjs.map
3
+ //# sourceMappingURL=currency-PKI2EGJD.mjs.map