@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
@@ -1,408 +0,0 @@
1
- import { Currency } from './chunk-PQQWQF3C.mjs';
2
- import { encodeAbiParameters } from 'viem';
3
-
4
- // src/types/index.ts
5
- var PAYMENT_PLATFORMS = [
6
- "wise",
7
- "venmo",
8
- "revolut",
9
- "cashapp",
10
- "mercadopago",
11
- "zelle",
12
- "paypal",
13
- "monzo",
14
- "chime",
15
- "luxon",
16
- "n26"
17
- ];
18
-
19
- // src/utils/constants.ts
20
- var DEFAULT_BASE_API_URL = "https://api.zkp2p.xyz";
21
- var DEFAULT_WITNESS_URL = "https://witness-proxy.zkp2p.xyz";
22
- var DEPLOYED_ADDRESSES = {
23
- 8453: {
24
- production: {
25
- // external contracts
26
- usdc: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
27
- // escrow + verifiers
28
- escrow: "0x2f121CDDCA6d652f35e8B3E560f9760898888888",
29
- // Processor names to deployed addresses
30
- venmo: "0x9a733B55a875D0DB4915c6B36350b24F8AB99dF5",
31
- revolut: "0xAA5A1B62B01781E789C900d616300717CD9A41aB",
32
- cashapp: "0x76D33A33068D86016B806dF02376dDBb23Dd3703",
33
- wise: "0xFF0149799631D7A5bdE2e7eA9b306c42b3d9a9ca",
34
- mercadopago: "0xf2AC5be14F32Cbe6A613CFF8931d95460D6c33A3",
35
- zelle: "0x431a078A5029146aAB239c768A615CD484519aF7",
36
- paypal: "0x03d17E9371C858072E171276979f6B44571C5DeA",
37
- monzo: "0x0dE46433bD251027f73eD8f28E01eF05DA36a2E0",
38
- // offchain services
39
- gatingService: "0x396D31055Db28C0C6f36e8b36f18FE7227248a97",
40
- zkp2pWitnessSigner: "0x0636c417755E3ae25C6c166D181c0607F4C572A3"
41
- },
42
- staging: {
43
- // external contracts
44
- usdc: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
45
- // escrow + verifiers
46
- escrow: "0xC8cd114C6274Ef1066840337E7678BC9731BEa68",
47
- // Processor names to deployed addresses
48
- venmo: "0xCE6454f272127ba69e8C8128B92F2388Ca343257",
49
- revolut: "0xb941e69B6C1A23A88cf9DA7D243bAE1D2Cb8eb6b",
50
- cashapp: "0xdDB9d452180398F456Fe89A43Df9C65B19756CEa",
51
- wise: "0x79F35E2f65ff917BE35686d34932C8Ef5a30631f",
52
- mercadopago: "0xA2d54F983B8201c7b276C9705641C49C2FBD1A36",
53
- zelle: "0x0Ed3c3DB9CF8458e5D9991712552539675D2C896",
54
- paypal: "0xB07764999679a9136d6853a5D4c70449afbfc2f8",
55
- monzo: "0x179792F99C0eFBFa06c3F6747989a96c58544f6F",
56
- // offchain services
57
- gatingService: "0x396D31055Db28C0C6f36e8b36f18FE7227248a97",
58
- zkp2pWitnessSigner: "0x0636c417755E3ae25C6c166D181c0607F4C572A3"
59
- }
60
- },
61
- 31337: {
62
- usdc: "0x5FbDB2315678afecb367f032d93F642f64180aa3",
63
- escrow: "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512",
64
- venmo: "0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9",
65
- revolut: "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853",
66
- cashapp: "0x610178dA211FEF7D417bC0e6FeD39F05609AD788",
67
- wise: "0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82",
68
- mercadopago: "0x959922bE3CAee4b8Cd9a407cc3ac1C251C2007B1",
69
- zelle: "0x3Aa5ebB10DC797CAC828524e59A333d0A371443c",
70
- paypal: "0xE6E340D132b5f46d1e472DebcD681B2aBc16e57E",
71
- monzo: "0x9E545E3C0baAB3E08CdfD552C960A1050f373042",
72
- // offchain services
73
- gatingService: "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
74
- // Hardhat 0
75
- zkp2pWitnessSigner: "0x0636c417755E3ae25C6c166D181c0607F4C572A3"
76
- }
77
- };
78
- var ZERO_ADDRESS = "0x0000000000000000000000000000000000000000";
79
- var CHAINLINK_ORACLE_ADAPTER = "0xfc81d1b5841e697973af3072fc8e03af76cb39ef";
80
- var PYTH_ORACLE_ADAPTER = "0xaa2bBDa3072bD37af76613846268Ec48bd0bB885";
81
- var DEFAULT_ORACLE_MAX_STALENESS_SECONDS = 86400;
82
- var CHAINLINK_ORACLE_FEEDS = {
83
- [Currency.AUD]: {
84
- feed: "0x46e51b8ca41d709928eda9ae43e42193e6cdf229",
85
- decimals: 8,
86
- invert: true
87
- },
88
- [Currency.BRL]: {
89
- feed: "0x0b0e64c05083fdf9ed7c5d3d8262c4216efc9394",
90
- decimals: 8,
91
- invert: true
92
- },
93
- [Currency.CAD]: {
94
- feed: "0xa840145f87572e82519d578b1f36340368a25d5d",
95
- decimals: 8,
96
- invert: true
97
- },
98
- [Currency.CHF]: {
99
- feed: "0x3a1d6444fb6a402470098e23dad0b7e86e14252f",
100
- decimals: 8,
101
- invert: true
102
- },
103
- [Currency.EUR]: {
104
- feed: "0xc91d87e81fab8f93699ecf7ee9b44d11e1d53f0f",
105
- decimals: 8,
106
- invert: true
107
- },
108
- [Currency.GBP]: {
109
- feed: "0xccea6576904c118037695eb71195a5425e69fa15",
110
- decimals: 8,
111
- invert: true
112
- },
113
- [Currency.MXN]: {
114
- feed: "0x9e8ee77c76d4fa41306056d1c3196af5da1600bd",
115
- decimals: 8,
116
- invert: true
117
- },
118
- [Currency.NZD]: {
119
- feed: "0x06bdfe07e71c476157fc025d3ccd4bbe08e83ef9",
120
- decimals: 8,
121
- invert: true
122
- },
123
- [Currency.SGD]: {
124
- feed: "0x81575495532fb311efc5c993b612564274f0949b",
125
- decimals: 8,
126
- invert: true
127
- },
128
- [Currency.TRY]: {
129
- feed: "0x29413773e7cd4dfd6ad89a50887877b88a6c592c",
130
- decimals: 8,
131
- invert: true
132
- },
133
- [Currency.USD]: {
134
- feed: ZERO_ADDRESS,
135
- decimals: 0,
136
- invert: false
137
- }
138
- };
139
- var SPREAD_ORACLE_FEEDS = CHAINLINK_ORACLE_FEEDS;
140
- var PYTH_ORACLE_FEEDS = {
141
- // XXX/USD feeds — inverted on-chain to derive USD/XXX rates
142
- [Currency.EUR]: {
143
- feedId: "0xa995d00bb36a63cef7fd2c287dc105fc8f3d93779f062f09551b0af3e81ec30b",
144
- // FX.EUR/USD
145
- decimals: 8,
146
- invert: true
147
- },
148
- [Currency.GBP]: {
149
- feedId: "0x84c2dde9633d93d1bcad84e7dc41c9d56578b7ec52fabedc1f335d673df0a7c1",
150
- // FX.GBP/USD
151
- decimals: 8,
152
- invert: true
153
- },
154
- [Currency.AUD]: {
155
- feedId: "0x67a6f93030420c1c9e3fe37c1ab6b77966af82f995944a9fefce357a22854a80",
156
- // FX.AUD/USD
157
- decimals: 8,
158
- invert: true
159
- },
160
- [Currency.NZD]: {
161
- feedId: "0x92eea8ba1b00078cdc2ef6f64f091f262e8c7d0576ee4677572f314ebfafa4c7",
162
- // FX.NZD/USD
163
- decimals: 8,
164
- invert: true
165
- },
166
- // USD/XXX feeds — used directly (no inversion needed)
167
- [Currency.JPY]: {
168
- feedId: "0xef2c98c804ba503c6a707e38be4dfbb16683775f195b091252bf24693042fd52",
169
- // FX.USD/JPY
170
- decimals: 8,
171
- invert: false
172
- },
173
- [Currency.CAD]: {
174
- feedId: "0x3112b03a41c910ed446852aacf67118cb1bec67b2cd0b9a214c58cc0eaa2ecca",
175
- // FX.USD/CAD
176
- decimals: 8,
177
- invert: false
178
- },
179
- [Currency.CHF]: {
180
- feedId: "0x0b1e3297e69f162877b577b0d6a47a0d63b2392bc8499e6540da4187a63e28f8",
181
- // FX.USD/CHF
182
- decimals: 8,
183
- invert: false
184
- },
185
- [Currency.SGD]: {
186
- feedId: "0x396a969a9c1480fa15ed50bc59149e2c0075a72fe8f458ed941ddec48bdb4918",
187
- // FX.USD/SGD
188
- decimals: 8,
189
- invert: false
190
- },
191
- [Currency.HKD]: {
192
- feedId: "0x19d75fde7fee50fe67753fdc825e583594eb2f51ae84e114a5246c4ab23aff4c",
193
- // FX.USD/HKD
194
- decimals: 8,
195
- invert: false
196
- },
197
- [Currency.NOK]: {
198
- feedId: "0x235ddea9f40e9af5814dbcc83a418b98e3ee8df1e34e1ae4d45cf5de596023a3",
199
- // FX.USD/NOK
200
- decimals: 8,
201
- invert: false
202
- },
203
- [Currency.SEK]: {
204
- feedId: "0x8ccb376aa871517e807358d4e3cf0bc7fe4950474dbe6c9ffc21ef64e43fc676",
205
- // FX.USD/SEK
206
- decimals: 8,
207
- invert: false
208
- },
209
- [Currency.BRL]: {
210
- feedId: "0xd2db4dbf1aea74e0f666b0e8f73b9580d407f5e5cf931940b06dc633d7a95906",
211
- // FX.USD/BRL
212
- decimals: 8,
213
- invert: false
214
- },
215
- [Currency.MXN]: {
216
- feedId: "0xe13b1c1ffb32f34e1be9545583f01ef385fde7f42ee66049d30570dc866b77ca",
217
- // FX.USD/MXN
218
- decimals: 8,
219
- invert: false
220
- },
221
- [Currency.TRY]: {
222
- feedId: "0x032a2eba1c2635bf973e95fb62b2c0705c1be2603b9572cc8d5edeaf8744e058",
223
- // FX.USD/TRY
224
- decimals: 8,
225
- invert: false
226
- },
227
- [Currency.INR]: {
228
- feedId: "0x0ac0f9a2886fc2dd708bc66cc2cea359052ce89d324f45d95fadbc6c4fcf1809",
229
- // FX.USD/INR
230
- decimals: 8,
231
- invert: false
232
- },
233
- [Currency.IDR]: {
234
- feedId: "0x6693afcd49878bbd622e46bd805e7177932cf6ab0b1c91b135d71151b9207433",
235
- // FX.USD/IDR
236
- decimals: 8,
237
- invert: false
238
- },
239
- [Currency.ZAR]: {
240
- feedId: "0x389d889017db82bf42141f23b61b8de938a4e2d156e36312175bebf797f493f1",
241
- // FX.USD/ZAR
242
- decimals: 8,
243
- invert: false
244
- },
245
- [Currency.PHP]: {
246
- feedId: "0x2bda7f268b52bfbc3f2e124c31445247647350db313caadc6771e6299e0a68c9",
247
- // FX.USD/PHP
248
- decimals: 8,
249
- invert: false
250
- }
251
- };
252
- function encodeSpreadOracleAdapterConfig(config) {
253
- return encodeAbiParameters(
254
- [
255
- { name: "feed", type: "address" },
256
- { name: "invert", type: "bool" }
257
- ],
258
- [config.feed, config.invert]
259
- );
260
- }
261
- function encodePythAdapterConfig(config) {
262
- return encodeAbiParameters(
263
- [
264
- { name: "feedId", type: "bytes32" },
265
- { name: "invert", type: "bool" }
266
- ],
267
- [config.feedId, config.invert]
268
- );
269
- }
270
- function getSpreadOracleConfig(currency, adapters) {
271
- const chainlinkAdapter = adapters?.chainlinkOracleAdapter ?? CHAINLINK_ORACLE_ADAPTER;
272
- const pythAdapter = adapters?.pythOracleAdapter ?? PYTH_ORACLE_ADAPTER;
273
- const chainlinkFeed = CHAINLINK_ORACLE_FEEDS[currency];
274
- if (chainlinkFeed) {
275
- return {
276
- ...chainlinkFeed,
277
- adapter: chainlinkAdapter,
278
- adapterConfig: encodeSpreadOracleAdapterConfig(chainlinkFeed),
279
- maxStaleness: DEFAULT_ORACLE_MAX_STALENESS_SECONDS,
280
- kind: "oracle_chainlink"
281
- };
282
- }
283
- const pythFeed = PYTH_ORACLE_FEEDS[currency];
284
- if (pythFeed) {
285
- return {
286
- feed: pythFeed.feedId,
287
- decimals: pythFeed.decimals,
288
- invert: pythFeed.invert,
289
- adapter: pythAdapter,
290
- adapterConfig: encodePythAdapterConfig(pythFeed),
291
- maxStaleness: DEFAULT_ORACLE_MAX_STALENESS_SECONDS,
292
- kind: "oracle_pyth"
293
- };
294
- }
295
- return null;
296
- }
297
-
298
- // src/constants.ts
299
- var SUPPORTED_CHAIN_IDS = {
300
- /** Base mainnet (8453) */
301
- BASE_MAINNET: 8453,
302
- /** Scroll mainnet (534352) */
303
- SCROLL_MAINNET: 534352,
304
- /** Local Hardhat network (31337) */
305
- HARDHAT: 31337
306
- };
307
- var PLATFORM_METADATA = {
308
- venmo: {
309
- name: "Venmo",
310
- displayName: "Venmo",
311
- logo: "\u{1F4B5}",
312
- requiredProofs: 1
313
- },
314
- revolut: {
315
- name: "Revolut",
316
- displayName: "Revolut",
317
- logo: "\u{1F4B3}",
318
- requiredProofs: 1
319
- },
320
- cashapp: {
321
- name: "CashApp",
322
- displayName: "Cash App",
323
- logo: "\u{1F4B8}",
324
- requiredProofs: 1
325
- },
326
- wise: {
327
- name: "Wise",
328
- displayName: "Wise",
329
- logo: "\u{1F30D}",
330
- requiredProofs: 2
331
- },
332
- mercadopago: {
333
- name: "MercadoPago",
334
- displayName: "Mercado Pago",
335
- logo: "\u{1F4B0}",
336
- requiredProofs: 1
337
- },
338
- zelle: {
339
- name: "Zelle",
340
- displayName: "Zelle",
341
- logo: "\u{1F4B2}",
342
- requiredProofs: 1
343
- },
344
- paypal: {
345
- name: "PayPal",
346
- displayName: "PayPal",
347
- logo: "\u{1F499}",
348
- requiredProofs: 1
349
- },
350
- monzo: {
351
- name: "Monzo",
352
- displayName: "Monzo",
353
- logo: "\u{1F3E6}",
354
- requiredProofs: 1
355
- },
356
- chime: {
357
- name: "Chime",
358
- displayName: "Chime",
359
- logo: "\u{1F3E6}",
360
- requiredProofs: 1
361
- },
362
- luxon: {
363
- name: "Luxon",
364
- displayName: "Luxon",
365
- logo: "\u2728",
366
- requiredProofs: 1
367
- },
368
- n26: {
369
- name: "N26",
370
- displayName: "N26",
371
- logo: "\u{1F3E6}",
372
- requiredProofs: 1
373
- }
374
- };
375
- var TOKEN_METADATA = {
376
- USDC: {
377
- symbol: "USDC",
378
- decimals: 6,
379
- name: "USD Coin"
380
- }
381
- };
382
- var PLATFORM_ATTESTATION_CONFIG = {
383
- wise: { actionType: "transfer_wise", actionPlatform: "wise" },
384
- venmo: { actionType: "transfer_venmo", actionPlatform: "venmo" },
385
- revolut: { actionType: "transfer_revolut", actionPlatform: "revolut" },
386
- cashapp: { actionType: "transfer_cashapp", actionPlatform: "cashapp" },
387
- mercadopago: { actionType: "transfer_mercadopago", actionPlatform: "mercadopago" },
388
- paypal: { actionType: "transfer_paypal", actionPlatform: "paypal" },
389
- monzo: { actionType: "transfer_monzo", actionPlatform: "monzo" },
390
- chime: { actionType: "transfer_chime", actionPlatform: "chime" },
391
- luxon: { actionType: "transfer_luxon", actionPlatform: "luxon" },
392
- n26: { actionType: "transfer_n26", actionPlatform: "n26" },
393
- "zelle-chase": { actionType: "transfer_zelle", actionPlatform: "chase" },
394
- "zelle-bofa": { actionType: "transfer_zelle", actionPlatform: "bankofamerica" },
395
- "zelle-citi": { actionType: "transfer_zelle", actionPlatform: "citi" }
396
- };
397
- function resolvePlatformAttestationConfig(platformName) {
398
- const normalized = platformName.toLowerCase();
399
- const config = PLATFORM_ATTESTATION_CONFIG[normalized];
400
- if (!config) {
401
- throw new Error(`Unknown payment platform: ${platformName}`);
402
- }
403
- return config;
404
- }
405
-
406
- export { CHAINLINK_ORACLE_ADAPTER, CHAINLINK_ORACLE_FEEDS, DEFAULT_BASE_API_URL, DEFAULT_ORACLE_MAX_STALENESS_SECONDS, DEFAULT_WITNESS_URL, DEPLOYED_ADDRESSES, PAYMENT_PLATFORMS, PLATFORM_ATTESTATION_CONFIG, PLATFORM_METADATA, PYTH_ORACLE_ADAPTER, PYTH_ORACLE_FEEDS, SPREAD_ORACLE_FEEDS, SUPPORTED_CHAIN_IDS, TOKEN_METADATA, encodePythAdapterConfig, encodeSpreadOracleAdapterConfig, getSpreadOracleConfig, resolvePlatformAttestationConfig };
407
- //# sourceMappingURL=chunk-F7USDS7O.mjs.map
408
- //# sourceMappingURL=chunk-F7USDS7O.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/types/index.ts","../src/utils/constants.ts","../src/utils/oracles.ts","../src/constants.ts"],"names":[],"mappings":";;;;AAqtBO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,MAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF;;;AC9tBO,IAAM,oBAAA,GAAuB;AAC7B,IAAM,mBAAA,GAAsB;AAkC5B,IAAM,kBAAA,GAAgC;AAAA,EAC3C,IAAA,EAAM;AAAA,IACJ,UAAA,EAAY;AAAA;AAAA,MAEV,IAAA,EAAM,4CAAA;AAAA;AAAA,MAGN,MAAA,EAAQ,4CAAA;AAAA;AAAA,MAGR,KAAA,EAAO,4CAAA;AAAA,MACP,OAAA,EAAS,4CAAA;AAAA,MACT,OAAA,EAAS,4CAAA;AAAA,MACT,IAAA,EAAM,4CAAA;AAAA,MACN,WAAA,EAAa,4CAAA;AAAA,MACb,KAAA,EAAO,4CAAA;AAAA,MACP,MAAA,EAAQ,4CAAA;AAAA,MACR,KAAA,EAAO,4CAAA;AAAA;AAAA,MAGP,aAAA,EAAe,4CAAA;AAAA,MACf,kBAAA,EAAoB;AAAA,KACtB;AAAA,IACA,OAAA,EAAS;AAAA;AAAA,MAEP,IAAA,EAAM,4CAAA;AAAA;AAAA,MAGN,MAAA,EAAQ,4CAAA;AAAA;AAAA,MAGR,KAAA,EAAO,4CAAA;AAAA,MACP,OAAA,EAAS,4CAAA;AAAA,MACT,OAAA,EAAS,4CAAA;AAAA,MACT,IAAA,EAAM,4CAAA;AAAA,MACN,WAAA,EAAa,4CAAA;AAAA,MACb,KAAA,EAAO,4CAAA;AAAA,MACP,MAAA,EAAQ,4CAAA;AAAA,MACR,KAAA,EAAO,4CAAA;AAAA;AAAA,MAGP,aAAA,EAAe,4CAAA;AAAA,MACf,kBAAA,EAAoB;AAAA;AACtB,GACF;AAAA,EACA,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,4CAAA;AAAA,IACN,MAAA,EAAQ,4CAAA;AAAA,IACR,KAAA,EAAO,4CAAA;AAAA,IACP,OAAA,EAAS,4CAAA;AAAA,IACT,OAAA,EAAS,4CAAA;AAAA,IACT,IAAA,EAAM,4CAAA;AAAA,IACN,WAAA,EAAa,4CAAA;AAAA,IACb,KAAA,EAAO,4CAAA;AAAA,IACP,MAAA,EAAQ,4CAAA;AAAA,IACR,KAAA,EAAO,4CAAA;AAAA;AAAA,IAGP,aAAA,EAAe,4CAAA;AAAA;AAAA,IACf,kBAAA,EAAoB;AAAA;AAExB;AC9FA,IAAM,YAAA,GAAe,4CAAA;AAKd,IAAM,wBAAA,GAA2B;AAKjC,IAAM,mBAAA,GAAsB;AAK5B,IAAM,oCAAA,GAAuC;AAuC7C,IAAM,sBAAA,GAAgF;AAAA,EAC3F,CAAC,QAAA,CAAS,GAAG,GAAG;AAAA,IACd,IAAA,EAAM,4CAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,CAAC,QAAA,CAAS,GAAG,GAAG;AAAA,IACd,IAAA,EAAM,4CAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,CAAC,QAAA,CAAS,GAAG,GAAG;AAAA,IACd,IAAA,EAAM,4CAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,CAAC,QAAA,CAAS,GAAG,GAAG;AAAA,IACd,IAAA,EAAM,4CAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,CAAC,QAAA,CAAS,GAAG,GAAG;AAAA,IACd,IAAA,EAAM,4CAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,CAAC,QAAA,CAAS,GAAG,GAAG;AAAA,IACd,IAAA,EAAM,4CAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,CAAC,QAAA,CAAS,GAAG,GAAG;AAAA,IACd,IAAA,EAAM,4CAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,CAAC,QAAA,CAAS,GAAG,GAAG;AAAA,IACd,IAAA,EAAM,4CAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,CAAC,QAAA,CAAS,GAAG,GAAG;AAAA,IACd,IAAA,EAAM,4CAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,CAAC,QAAA,CAAS,GAAG,GAAG;AAAA,IACd,IAAA,EAAM,4CAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,CAAC,QAAA,CAAS,GAAG,GAAG;AAAA,IACd,IAAA,EAAM,YAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ;AAAA;AAEZ;AAGO,IAAM,mBAAA,GAAsB;AAW5B,IAAM,iBAAA,GAAmE;AAAA;AAAA,EAE9E,CAAC,QAAA,CAAS,GAAG,GAAG;AAAA,IACd,MAAA,EAAQ,oEAAA;AAAA;AAAA,IACR,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,CAAC,QAAA,CAAS,GAAG,GAAG;AAAA,IACd,MAAA,EAAQ,oEAAA;AAAA;AAAA,IACR,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,CAAC,QAAA,CAAS,GAAG,GAAG;AAAA,IACd,MAAA,EAAQ,oEAAA;AAAA;AAAA,IACR,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,CAAC,QAAA,CAAS,GAAG,GAAG;AAAA,IACd,MAAA,EAAQ,oEAAA;AAAA;AAAA,IACR,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACV;AAAA;AAAA,EAGA,CAAC,QAAA,CAAS,GAAG,GAAG;AAAA,IACd,MAAA,EAAQ,oEAAA;AAAA;AAAA,IACR,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,CAAC,QAAA,CAAS,GAAG,GAAG;AAAA,IACd,MAAA,EAAQ,oEAAA;AAAA;AAAA,IACR,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,CAAC,QAAA,CAAS,GAAG,GAAG;AAAA,IACd,MAAA,EAAQ,oEAAA;AAAA;AAAA,IACR,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,CAAC,QAAA,CAAS,GAAG,GAAG;AAAA,IACd,MAAA,EAAQ,oEAAA;AAAA;AAAA,IACR,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,CAAC,QAAA,CAAS,GAAG,GAAG;AAAA,IACd,MAAA,EAAQ,oEAAA;AAAA;AAAA,IACR,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,CAAC,QAAA,CAAS,GAAG,GAAG;AAAA,IACd,MAAA,EAAQ,oEAAA;AAAA;AAAA,IACR,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,CAAC,QAAA,CAAS,GAAG,GAAG;AAAA,IACd,MAAA,EAAQ,oEAAA;AAAA;AAAA,IACR,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,CAAC,QAAA,CAAS,GAAG,GAAG;AAAA,IACd,MAAA,EAAQ,oEAAA;AAAA;AAAA,IACR,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,CAAC,QAAA,CAAS,GAAG,GAAG;AAAA,IACd,MAAA,EAAQ,oEAAA;AAAA;AAAA,IACR,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,CAAC,QAAA,CAAS,GAAG,GAAG;AAAA,IACd,MAAA,EAAQ,oEAAA;AAAA;AAAA,IACR,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,CAAC,QAAA,CAAS,GAAG,GAAG;AAAA,IACd,MAAA,EAAQ,oEAAA;AAAA;AAAA,IACR,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,CAAC,QAAA,CAAS,GAAG,GAAG;AAAA,IACd,MAAA,EAAQ,oEAAA;AAAA;AAAA,IACR,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,CAAC,QAAA,CAAS,GAAG,GAAG;AAAA,IACd,MAAA,EAAQ,oEAAA;AAAA;AAAA,IACR,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,CAAC,QAAA,CAAS,GAAG,GAAG;AAAA,IACd,MAAA,EAAQ,oEAAA;AAAA;AAAA,IACR,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ;AAAA;AAEZ;AAEO,SAAS,gCAAgC,MAAA,EAAqC;AACnF,EAAA,OAAO,mBAAA;AAAA,IACL;AAAA,MACE,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,SAAA,EAAU;AAAA,MAChC,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,MAAA;AAAO,KACjC;AAAA,IACA,CAAC,MAAA,CAAO,IAAA,EAAM,MAAA,CAAO,MAAM;AAAA,GAC7B;AACF;AAEO,SAAS,wBAAwB,MAAA,EAA6B;AACnE,EAAA,OAAO,mBAAA;AAAA,IACL;AAAA,MACE,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,SAAA,EAAU;AAAA,MAClC,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,MAAA;AAAO,KACjC;AAAA,IACA,CAAC,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,MAAM;AAAA,GAC/B;AACF;AAOO,SAAS,qBAAA,CACd,UACA,QAAA,EAC2B;AAC3B,EAAA,MAAM,gBAAA,GAAmB,UAAU,sBAAA,IAA0B,wBAAA;AAC7D,EAAA,MAAM,WAAA,GAAc,UAAU,iBAAA,IAAqB,mBAAA;AAGnD,EAAA,MAAM,aAAA,GAAgB,uBAAuB,QAAQ,CAAA;AACrD,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,OAAO;AAAA,MACL,GAAG,aAAA;AAAA,MACH,OAAA,EAAS,gBAAA;AAAA,MACT,aAAA,EAAe,gCAAgC,aAAa,CAAA;AAAA,MAC5D,YAAA,EAAc,oCAAA;AAAA,MACd,IAAA,EAAM;AAAA,KACR;AAAA,EACF;AAGA,EAAA,MAAM,QAAA,GAAW,kBAAkB,QAAQ,CAAA;AAC3C,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,OAAO;AAAA,MACL,MAAM,QAAA,CAAS,MAAA;AAAA,MACf,UAAU,QAAA,CAAS,QAAA;AAAA,MACnB,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,OAAA,EAAS,WAAA;AAAA,MACT,aAAA,EAAe,wBAAwB,QAAQ,CAAA;AAAA,MAC/C,YAAA,EAAc,oCAAA;AAAA,MACd,IAAA,EAAM;AAAA,KACR;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;;;ACnOO,IAAM,mBAAA,GAAsB;AAAA;AAAA,EAEjC,YAAA,EAAc,IAAA;AAAA;AAAA,EAEd,cAAA,EAAgB,MAAA;AAAA;AAAA,EAEhB,OAAA,EAAS;AACX;AAaO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,WAAA,EAAa,OAAA;AAAA,IACb,IAAA,EAAM,WAAA;AAAA,IACN,cAAA,EAAgB;AAAA,GAClB;AAAA,EACA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,SAAA;AAAA,IACb,IAAA,EAAM,WAAA;AAAA,IACN,cAAA,EAAgB;AAAA,GAClB;AAAA,EACA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,UAAA;AAAA,IACb,IAAA,EAAM,WAAA;AAAA,IACN,cAAA,EAAgB;AAAA,GAClB;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,MAAA;AAAA,IACN,WAAA,EAAa,MAAA;AAAA,IACb,IAAA,EAAM,WAAA;AAAA,IACN,cAAA,EAAgB;AAAA,GAClB;AAAA,EACA,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,aAAA;AAAA,IACN,WAAA,EAAa,cAAA;AAAA,IACb,IAAA,EAAM,WAAA;AAAA,IACN,cAAA,EAAgB;AAAA,GAClB;AAAA,EACA,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,WAAA,EAAa,OAAA;AAAA,IACb,IAAA,EAAM,WAAA;AAAA,IACN,cAAA,EAAgB;AAAA,GAClB;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa,QAAA;AAAA,IACb,IAAA,EAAM,WAAA;AAAA,IACN,cAAA,EAAgB;AAAA,GAClB;AAAA,EACA,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,WAAA,EAAa,OAAA;AAAA,IACb,IAAA,EAAM,WAAA;AAAA,IACN,cAAA,EAAgB;AAAA,GAClB;AAAA,EACA,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,WAAA,EAAa,OAAA;AAAA,IACb,IAAA,EAAM,WAAA;AAAA,IACN,cAAA,EAAgB;AAAA,GAClB;AAAA,EACA,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,WAAA,EAAa,OAAA;AAAA,IACb,IAAA,EAAM,QAAA;AAAA,IACN,cAAA,EAAgB;AAAA,GAClB;AAAA,EACA,GAAA,EAAK;AAAA,IACH,IAAA,EAAM,KAAA;AAAA,IACN,WAAA,EAAa,KAAA;AAAA,IACb,IAAA,EAAM,WAAA;AAAA,IACN,cAAA,EAAgB;AAAA;AAEpB;AAKO,IAAM,cAAA,GAAiB;AAAA,EAC5B,IAAA,EAAM;AAAA,IACJ,MAAA,EAAQ,MAAA;AAAA,IACR,QAAA,EAAU,CAAA;AAAA,IACV,IAAA,EAAM;AAAA;AAEV;AAUO,IAAM,2BAAA,GAGT;AAAA,EACF,IAAA,EAAM,EAAE,UAAA,EAAY,eAAA,EAAiB,gBAAgB,MAAA,EAAO;AAAA,EAC5D,KAAA,EAAO,EAAE,UAAA,EAAY,gBAAA,EAAkB,gBAAgB,OAAA,EAAQ;AAAA,EAC/D,OAAA,EAAS,EAAE,UAAA,EAAY,kBAAA,EAAoB,gBAAgB,SAAA,EAAU;AAAA,EACrE,OAAA,EAAS,EAAE,UAAA,EAAY,kBAAA,EAAoB,gBAAgB,SAAA,EAAU;AAAA,EACrE,WAAA,EAAa,EAAE,UAAA,EAAY,sBAAA,EAAwB,gBAAgB,aAAA,EAAc;AAAA,EACjF,MAAA,EAAQ,EAAE,UAAA,EAAY,iBAAA,EAAmB,gBAAgB,QAAA,EAAS;AAAA,EAClE,KAAA,EAAO,EAAE,UAAA,EAAY,gBAAA,EAAkB,gBAAgB,OAAA,EAAQ;AAAA,EAC/D,KAAA,EAAO,EAAE,UAAA,EAAY,gBAAA,EAAkB,gBAAgB,OAAA,EAAQ;AAAA,EAC/D,KAAA,EAAO,EAAE,UAAA,EAAY,gBAAA,EAAkB,gBAAgB,OAAA,EAAQ;AAAA,EAC/D,GAAA,EAAK,EAAE,UAAA,EAAY,cAAA,EAAgB,gBAAgB,KAAA,EAAM;AAAA,EACzD,aAAA,EAAe,EAAE,UAAA,EAAY,gBAAA,EAAkB,gBAAgB,OAAA,EAAQ;AAAA,EACvE,YAAA,EAAc,EAAE,UAAA,EAAY,gBAAA,EAAkB,gBAAgB,eAAA,EAAgB;AAAA,EAC9E,YAAA,EAAc,EAAE,UAAA,EAAY,gBAAA,EAAkB,gBAAgB,MAAA;AAChE;AAWO,SAAS,iCAAiC,YAAA,EAG/C;AACA,EAAA,MAAM,UAAA,GAAa,aAAa,WAAA,EAAY;AAC5C,EAAA,MAAM,MAAA,GAAS,4BAA4B,UAAU,CAAA;AACrD,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,YAAY,CAAA,CAAE,CAAA;AAAA,EAC7D;AACA,EAAA,OAAO,MAAA;AACT","file":"chunk-F7USDS7O.mjs","sourcesContent":["// Minimal initial type surface for Offramp SDK\nimport type { AccessList, Address, AuthorizationList, Hash, WalletClient } from 'viem';\nimport type { CurrencyType } from '../utils/currency';\n\n/**\n * Timeout configuration for different operation types\n */\nexport type TimeoutConfig = {\n /** API call timeout in milliseconds (default: 30000) */\n api?: number;\n /** Transaction timeout in milliseconds (default: 60000) */\n transaction?: number;\n};\n\nexport type AuthorizationTokenProvider = () =>\n | string\n | null\n | undefined\n | Promise<string | null | undefined>;\n\nexport type Zkp2pClientOptions = {\n walletClient: WalletClient;\n apiKey: string;\n chainId: number;\n environment?: 'production' | 'staging';\n /** Optional default routing preference when both legacy and V2 contracts are available */\n preferV2ByDefault?: boolean;\n baseApiUrl?: string;\n witnessUrl?: string;\n rpcUrl?: string;\n /** Optional bearer token for hybrid auth */\n authorizationToken?: string;\n /** Optional async token provider for indexer auth in long-lived clients */\n getAuthorizationToken?: AuthorizationTokenProvider;\n /** Optional timeout configuration */\n timeouts?: TimeoutConfig;\n};\n\n/**\n * Callback function for transaction actions\n * @param params - Transaction callback parameters\n * @param params.hash - Transaction hash\n * @param params.data - Optional additional data from the transaction\n */\nexport type ActionCallback = (params: { hash: Hash; data?: unknown }) => void;\n\n/**\n * Safe transaction overrides including ERC-8021 referrers.\n * Referrer codes are prepended before the Base builder code (bc_nbn6qkni).\n */\nexport type TxOverrides = {\n gas?: bigint;\n gasPrice?: bigint;\n maxFeePerGas?: bigint;\n maxPriorityFeePerGas?: bigint;\n nonce?: number;\n value?: bigint;\n accessList?: AccessList;\n authorizationList?: AuthorizationList;\n /**\n * ERC-8021 referrer code(s) to prepend before the Base builder code.\n * Accepts a single code or multiple (e.g., ['zkp2p-bot', 'merchant-id']).\n */\n referrer?: string | string[];\n};\n\n/**\n * Parameters for fulfilling an intent with payment attestation\n */\nexport type FulfillIntentParams = {\n /** Hash of the intent to fulfill */\n intentHash: Hash;\n /** Attestation proof - object or stringified JSON from attestation service */\n proof: Record<string, unknown> | string;\n /** Optional attestation timestamp buffer override in milliseconds */\n timestampBufferMs?: number | string;\n /** Override the attestation service base URL */\n attestationServiceUrl?: string;\n /** Optional hook payload passed to orchestrator */\n postIntentHookData?: `0x${string}`;\n /** Optional viem transaction overrides */\n txOverrides?: TxOverrides;\n /** Optional lifecycle callbacks */\n callbacks?: {\n onAttestationStart?: () => void;\n onTxSent?: (hash: Hash) => void;\n onTxMined?: (hash: Hash) => void;\n };\n};\n\n/**\n * Parameters for releasing funds back to the payer\n */\nexport type ReleaseFundsToPayerParams = {\n /** Hash of the intent to release funds for */\n intentHash: Hash;\n /** Callback when transaction is successfully sent */\n onSuccess?: ActionCallback;\n /** Callback when an error occurs */\n onError?: (error: Error) => void;\n /** Callback when transaction is mined */\n onMined?: ActionCallback;\n};\n\n/**\n * Parameters for signaling an intent to use a deposit\n */\nexport type SignalIntentParams = {\n /** Payment processor name (e.g., 'wise', 'revolut') */\n processorName: string;\n /** ID of the deposit to use */\n depositId: string;\n /** Amount of tokens to transfer */\n tokenAmount: string;\n /** Payee details for the payment */\n payeeDetails: string;\n /** Recipient blockchain address */\n toAddress: string;\n /** Currency type for the payment */\n currency: CurrencyType;\n /** Callback when transaction is successfully sent */\n onSuccess?: ActionCallback;\n /** Callback when an error occurs */\n onError?: (error: Error) => void;\n /** Callback when transaction is mined */\n onMined?: ActionCallback;\n};\n\n// (removed placeholder Create/Withdraw/Cancel types; see refined forms below)\n\n/**\n * Request structure for signaling an intent via the API\n */\nexport type IntentSignalRequest = {\n /** Payment processor name */\n processorName: string;\n /** ID of the deposit */\n depositId: string;\n /** Amount of tokens */\n tokenAmount: string;\n /** Payee details */\n payeeDetails: string;\n /** Recipient address */\n toAddress: string;\n /** Fiat currency code */\n fiatCurrencyCode: string;\n /** Chain ID as string */\n chainId: string;\n};\n\n/**\n * Response from signaling an intent via the API\n */\nexport type SignalIntentResponse = {\n /** Whether the request was successful */\n success: boolean;\n /** Response message */\n message: string;\n /** Response object containing intent details */\n responseObject: {\n /** Deposit data associated with the intent */\n depositData: Record<string, string | number | boolean>;\n /** Signed intent string */\n signedIntent: string;\n /** Intent data details */\n intentData: {\n /** Deposit ID */\n depositId: string;\n /** Token amount */\n tokenAmount: string;\n /** Recipient address */\n recipientAddress: string;\n /** Verifier contract address */\n verifierAddress: string;\n /** Hash of the currency code */\n currencyCodeHash: string;\n /** Signature from the gating service */\n gatingServiceSignature: string;\n /** Encoded pre-intent hook payload */\n preIntentHookData?: string;\n };\n };\n /** HTTP status code */\n statusCode: number;\n};\n\n/**\n * Request structure for posting deposit details\n */\nexport type PostDepositDetailsRequest = {\n /** Deposit data key-value pairs */\n depositData: { [key: string]: string };\n /** Payment processor name */\n processorName: string;\n};\n\n/**\n * Response from posting deposit details\n */\nexport type PostDepositDetailsResponse = {\n /** Whether the request was successful */\n success: boolean;\n message: string;\n responseObject: {\n id: number;\n processorName: string;\n depositData: { [key: string]: string };\n hashedOnchainId: string;\n createdAt: string;\n };\n statusCode: number;\n};\n\n/**\n * Alias types for clarity when registering payee details (makers/create)\n */\nexport type RegisterPayeeDetailsRequest = PostDepositDetailsRequest;\nexport type RegisterPayeeDetailsResponse = PostDepositDetailsResponse;\n\nexport type QuoteRequest = {\n paymentPlatforms: string[];\n fiatCurrency: string;\n user: string;\n recipient: string;\n destinationChainId: number;\n destinationToken: string;\n referrer?: string;\n useMultihop?: boolean;\n quotesToReturn?: number;\n amount: string;\n isExactFiat?: boolean;\n /** Optional filter: limit quotes to these escrow contracts */\n escrowAddresses?: string[];\n /** Enable nearby quote discovery when exact match unavailable */\n includeNearbyQuotes?: boolean;\n /** Max % deviation to search for nearby quotes (e.g., 10 = ±10%) */\n nearbySearchRange?: number;\n /** Max suggestions per direction (1-10, default: 3) */\n nearbyQuotesCount?: number;\n};\n\nexport type FiatResponse = {\n currencyCode: string;\n currencyName: string;\n currencySymbol: string;\n countryCode: string;\n};\nexport type TokenResponse = {\n token: string;\n decimals: number;\n name: string;\n symbol: string;\n chainId: number;\n};\n/**\n * Intent details within a quote response\n */\nexport type QuoteIntentResponse = {\n /** Deposit ID */\n depositId: number;\n /** Escrow contract address */\n escrowAddress: string;\n /** Orchestrator address used for signaling this intent */\n orchestratorAddress?: string;\n /** Payment processor name */\n processorName: string;\n /** Amount to transfer */\n amount: string;\n /** Recipient address */\n toAddress: string;\n /** Payee details */\n payeeDetails: string;\n /** Processor-specific intent data */\n processorIntentData?: Record<string, unknown>;\n /** Fiat currency code */\n fiatCurrencyCode: string;\n /** Chain ID */\n chainId: string;\n};\nexport type QuoteSingleResponse = {\n fiatAmount: string;\n fiatAmountFormatted: string;\n tokenAmount: string;\n tokenAmountFormatted: string;\n paymentMethod: string;\n payeeAddress: string;\n conversionRate: string;\n takerConversionRate?: string;\n intent: QuoteIntentResponse;\n payeeData?: Record<string, string>;\n};\nexport type QuoteFeesResponse = {\n zkp2pFee: string;\n zkp2pFeeFormatted: string;\n swapFee: string;\n swapFeeFormatted: string;\n};\n\n/**\n * A nearby quote suggestion returned when no exact match is available.\n * Fields vary based on whether request was exact-token or exact-fiat mode.\n */\nexport type NearbyQuote = {\n /** For exact-token mode: suggested token amount */\n suggestedTokenAmount?: string;\n /** For exact-token mode: formatted suggested token amount */\n suggestedTokenAmountFormatted?: string;\n /** For exact-token mode: percentage difference from requested (e.g., \"-5.0%\" or \"+10.0%\") */\n tokenPercentDifference?: string;\n /** For exact-fiat mode: suggested fiat amount */\n suggestedFiatAmount?: string;\n /** For exact-fiat mode: formatted suggested fiat amount */\n suggestedFiatAmountFormatted?: string;\n /** For exact-fiat mode: percentage difference from requested */\n fiatPercentDifference?: string;\n /** The full quote at this suggested amount */\n quote: QuoteSingleResponse;\n};\n\n/**\n * Nearby quote suggestions when no exact match is available.\n * Only present in response when includeNearbyQuotes=true and no exact quotes found.\n */\nexport type NearbySuggestions = {\n /** Quotes at amounts below the requested amount (sorted by closest first) */\n below: NearbyQuote[];\n /** Quotes at amounts above the requested amount (sorted by closest first) */\n above: NearbyQuote[];\n};\n\nexport type QuoteResponseObject = {\n fiat: FiatResponse;\n token: TokenResponse;\n quotes: QuoteSingleResponse[];\n fees: QuoteFeesResponse;\n /** Nearby suggestions when no exact quotes available (only present with includeNearbyQuotes=true) */\n nearbySuggestions?: NearbySuggestions;\n};\n\nexport type QuoteResponse = {\n message: string;\n success: boolean;\n responseObject: QuoteResponseObject;\n statusCode: number;\n};\n\n/**\n * Request to fetch payee details\n * Prefer `processorName`; `platform` kept for backward compatibility.\n */\nexport type GetPayeeDetailsRequest = { hashedOnchainId: string; processorName: string };\nexport type GetPayeeDetailsResponse = {\n success: boolean;\n message: string;\n responseObject: {\n id: number;\n processorName: string;\n depositData: { [key: string]: string };\n hashedOnchainId: string;\n createdAt: string;\n };\n statusCode: number;\n};\n\n// Makers list (presented)\nexport type ListPayeesRequest = { processorName?: string };\nexport type PresentedMaker = {\n id?: number;\n processorName: string;\n hashedOnchainId: string;\n createdAt: string;\n};\nexport type ListPayeesResponse = {\n success: boolean;\n message: string;\n responseObject: PresentedMaker[];\n statusCode: number;\n};\n\nexport type ValidatePayeeDetailsRequest = {\n processorName: string;\n depositData: { [key: string]: string };\n};\n\nexport type ValidatePayeeDetailsResponse = {\n success: boolean;\n message: string;\n responseObject: { isValid: boolean; errors?: string[] };\n statusCode: number;\n};\n\n// Onchain currency and deposit verifier types used in createDeposit action\nexport type OnchainCurrency = {\n code: `0x${string}`;\n minConversionRate: bigint;\n oracleRateConfig?: {\n adapter: `0x${string}`;\n adapterConfig: `0x${string}`;\n spreadBps: number;\n maxStaleness: number;\n };\n};\nexport type DepositVerifierData = {\n intentGatingService: `0x${string}`;\n payeeDetails: string;\n data: `0x${string}`;\n};\n\n// CreateDeposit refined inputs\nexport type Range = { min: bigint; max: bigint };\nexport type CreateDepositConversionRate = { currency: CurrencyType; conversionRate: string };\nexport type CreateDepositParams = {\n token: Address;\n amount: bigint;\n intentAmountRange: Range;\n conversionRates: CreateDepositConversionRate[][];\n processorNames: string[];\n depositData: { [key: string]: string }[];\n payeeDetailsHashes?: string[];\n paymentMethodsOverride?: `0x${string}`[];\n paymentMethodDataOverride?: DepositVerifierData[];\n currenciesOverride?: OnchainCurrency[][];\n onSuccess?: ActionCallback;\n onError?: (error: Error) => void;\n onMined?: ActionCallback;\n};\n\nexport type WithdrawDepositParams = {\n depositId: string | number | bigint;\n onSuccess?: ActionCallback;\n onError?: (error: Error) => void;\n onMined?: ActionCallback;\n};\n\nexport type CancelIntentParams = {\n intentHash: Hash;\n onSuccess?: ActionCallback;\n onError?: (error: Error) => void;\n onMined?: ActionCallback;\n};\n\n// Historical Event Types (for deposits and intents)\nexport type DepositStatus = 'ACTIVE' | 'WITHDRAWN' | 'CLOSED';\n\nexport type Deposit = {\n id: string;\n owner: string;\n amount: string;\n minimumIntent: string;\n maximumIntent: string;\n status: DepositStatus;\n updatedAt: Date;\n createdAt: Date;\n processorPaymentData: Array<{\n processor: string;\n paymentDetailsHash: string;\n isHashed: boolean;\n paymentDetails: string;\n updatedAt: Date;\n createdAt: Date;\n }>;\n};\n\n// API Intent status per v1 Orders API\n// Note: MANUALLY_RELEASED can occur when maker releases funds without payment verification\nexport type ApiIntentStatus = 'SIGNALED' | 'FULFILLED' | 'PRUNED' | 'MANUALLY_RELEASED';\n\nexport type Intent = {\n id: number;\n intentHash: string;\n depositId: string;\n verifier: string;\n owner: string;\n toAddress: string;\n amount: string;\n fiatCurrency: string;\n conversionRate: string;\n sustainabilityFee: string | null;\n verifierFee: string | null;\n status: ApiIntentStatus;\n signalTxHash: string;\n signalTimestamp: Date;\n fulfillTxHash: string | null;\n fulfillTimestamp: Date | null;\n pruneTxHash: string | null;\n prunedTimestamp: Date | null;\n createdAt: Date;\n updatedAt: Date;\n};\n\nexport type GetOwnerIntentsRequest = {\n ownerAddress: string;\n escrowAddress: string;\n escrowAddresses?: string[];\n orchestratorAddresses?: string[];\n status?: ApiIntentStatus | ApiIntentStatus[];\n};\n\nexport type GetOwnerIntentsResponse = {\n success: boolean;\n message: string;\n responseObject: Intent[];\n statusCode: number;\n};\n\n// Orders API types\nexport type GetIntentsByDepositRequest = {\n depositId: string;\n escrowAddress: string;\n escrowAddresses?: string[];\n orchestratorAddresses?: string[];\n status?: ApiIntentStatus | ApiIntentStatus[];\n};\n\nexport type GetIntentsByDepositResponse = {\n success: boolean;\n message: string;\n responseObject: Intent[];\n statusCode: number;\n};\n\nexport type GetIntentsByTakerRequest = {\n takerAddress: string;\n status?: ApiIntentStatus | ApiIntentStatus[];\n};\n\nexport type GetIntentsByTakerResponse = {\n success: boolean;\n message: string;\n responseObject: Intent[];\n statusCode: number;\n};\n\nexport type GetIntentsByRecipientRequest = {\n recipientAddress: string;\n status?: ApiIntentStatus | ApiIntentStatus[];\n};\n\nexport type GetIntentsByRecipientResponse = {\n success: boolean;\n message: string;\n responseObject: Intent[];\n statusCode: number;\n};\n\nexport type GetIntentByHashRequest = {\n intentHash: string;\n escrowAddress?: string;\n escrowAddresses?: string[];\n orchestratorAddresses?: string[];\n};\n\nexport type GetIntentByHashResponse = {\n success: boolean;\n message: string;\n responseObject: Intent;\n statusCode: number;\n};\n\n// Deposit response types kept for compatibility with older adapter consumers.\nexport type DepositVerifierCurrency = {\n id?: number;\n depositVerifierId?: number;\n currencyCode: string;\n conversionRate: string;\n minConversionRate?: string;\n managerRate?: string | null;\n rateManagerId?: string | null;\n createdAt?: Date;\n updatedAt?: Date;\n};\nexport type DepositVerifier = {\n id?: number;\n depositId: number;\n verifier: string;\n methodHash?: string;\n intentGatingService: string;\n payeeDetailsHash: string;\n data: string;\n createdAt?: Date;\n updatedAt?: Date;\n currencies: DepositVerifierCurrency[];\n};\nexport type ApiDeposit = {\n id: number;\n depositor: string;\n token: string;\n rateManagerId?: string | null;\n rateManagerRegistry?: string | null;\n vaultName?: string | null;\n amount: string;\n remainingDeposits: string;\n intentAmountMin: string;\n intentAmountMax: string;\n acceptingIntents: boolean;\n outstandingIntentAmount: string;\n totalAmountTaken: string;\n totalWithdrawn: string;\n successRateBps?: number;\n availableLiquidity: string;\n status: 'ACTIVE' | 'WITHDRAWN' | 'CLOSED';\n totalIntents: number;\n signaledIntents: number;\n fulfilledIntents: number;\n prunedIntents: number;\n createdAt?: Date;\n updatedAt?: Date;\n verifiers: DepositVerifier[];\n};\n\nexport type GetOwnerDepositsRequest = {\n ownerAddress: string;\n escrowAddress: string;\n escrowAddresses?: string[];\n /** Optional status filter: 'ACTIVE' | 'WITHDRAWN' | 'CLOSED' */\n status?: DepositStatus;\n};\n\nexport type GetOwnerDepositsResponse = {\n success: boolean;\n message: string;\n responseObject: ApiDeposit[];\n statusCode: number;\n};\n\nexport type GetDepositByIdRequest = {\n depositId: string;\n escrowAddress: string;\n escrowAddresses?: string[];\n};\nexport type GetDepositByIdResponse = {\n success: boolean;\n message: string;\n responseObject: ApiDeposit;\n statusCode: number;\n};\n\n// Intent/order statistics returned by `/deposits/order-stats`\nexport type OrderStats = {\n id: number;\n totalIntents: number;\n signaledIntents: number;\n fulfilledIntents: number;\n prunedIntents: number;\n};\n\n// Kept for backward compatibility\nexport type DepositIntentStatistics = OrderStats;\nexport type GetDepositsOrderStatsRequest = {\n depositIds: number[];\n escrowAddress: string;\n escrowAddresses?: string[];\n};\nexport type GetDepositsOrderStatsResponse = {\n success: boolean;\n message: string;\n responseObject: OrderStats[];\n statusCode: number;\n};\n\n// Taker tier API types\nexport type TakerTierStats = {\n lifetimeSignaledCount: number;\n lifetimeFulfilledCount: number;\n lifetimeManualReleaseCount: number;\n lifetimePruneCount: number;\n totalCancelledVolume: string;\n totalFulfilledVolume: string;\n lockScore: string;\n lockScoreDiluted: string;\n firstSeenAt: string;\n lastIntentAt: string;\n updatedAt: string;\n};\n\nexport type TakerTierLevel = 'PEASANT' | 'PEER' | 'PLUS' | 'PRO' | 'PLATINUM' | 'PEER_PRESIDENT';\nexport type PlatformRiskLevel = 'LOW' | 'MEDIUM_HIGH' | 'HIGH' | 'HIGHEST';\n\nexport type PlatformLimit = {\n paymentMethodHash: string;\n platformName: string;\n riskLevel: PlatformRiskLevel;\n capMultiplier: number;\n effectiveCap: string;\n effectiveCapDisplay: string;\n hasCooldown: boolean;\n cooldownHours: number;\n isLocked: boolean;\n minTierRequired: TakerTierLevel | null;\n};\n\nexport type TakerTier = {\n owner: string;\n chainId: number;\n tier: TakerTierLevel;\n perIntentCapBaseUnits: string;\n perIntentCapDisplay: string;\n lastUpdated: string;\n source: 'computed' | 'fallback';\n stats: TakerTierStats | null;\n cooldownHours: number;\n cooldownSeconds: number;\n cooldownActive: boolean;\n cooldownRemainingSeconds: number;\n nextIntentAvailableAt: string | null;\n platformLimits?: PlatformLimit[];\n};\n\nexport type GetTakerTierRequest = {\n owner: string;\n chainId: number;\n};\n\nexport type GetTakerTierResponse = {\n success: boolean;\n message: string;\n responseObject: TakerTier;\n statusCode?: number;\n};\n\n// Currency domain (ISO) and on-chain currency mapping\nexport { Currency } from '../utils/currency';\nexport type { CurrencyType } from '../utils/currency';\n\n// Payment platforms (derived as a closed union for safety)\nexport const PAYMENT_PLATFORMS = [\n 'wise',\n 'venmo',\n 'revolut',\n 'cashapp',\n 'mercadopago',\n 'zelle',\n 'paypal',\n 'monzo',\n 'chime',\n 'luxon',\n 'n26',\n] as const;\nexport type PaymentPlatformType = (typeof PAYMENT_PLATFORMS)[number];\n\n// On-chain views\nexport type { EscrowDepositView, EscrowIntentView } from './escrowViews';\n\n// Prepared transaction types\nexport type {\n PreparedTransaction,\n PreparedTransactionWithAbi,\n PrepareableMethod,\n} from './prepared';\n","import type { Address } from 'viem';\n\n// Unversioned base; callers/providers must append /v1 or /v2 in adapters\nexport const DEFAULT_BASE_API_URL = 'https://api.zkp2p.xyz';\nexport const DEFAULT_WITNESS_URL = 'https://witness-proxy.zkp2p.xyz';\n\n// Enabled payment platforms (verifiers) for enrichment and platform-aware logic\nexport const ENABLED_PLATFORMS = [\n 'venmo',\n 'revolut',\n 'cashapp',\n 'wise',\n 'mercadopago',\n 'zelle',\n 'paypal',\n 'monzo',\n] as const;\n\nexport type EnabledPlatform = (typeof ENABLED_PLATFORMS)[number];\n\ntype PlatformAddresses = { [P in EnabledPlatform]: Address };\n\nexport type ContractSet = PlatformAddresses & {\n usdc: Address;\n escrow: Address;\n gatingService: Address;\n zkp2pWitnessSigner: Address;\n};\n\ntype Contracts = {\n [chainId: number]:\n | ContractSet\n | {\n production: ContractSet;\n staging: ContractSet;\n };\n};\n\nexport const DEPLOYED_ADDRESSES: Contracts = {\n 8453: {\n production: {\n // external contracts\n usdc: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n\n // escrow + verifiers\n escrow: '0x2f121CDDCA6d652f35e8B3E560f9760898888888',\n\n // Processor names to deployed addresses\n venmo: '0x9a733B55a875D0DB4915c6B36350b24F8AB99dF5',\n revolut: '0xAA5A1B62B01781E789C900d616300717CD9A41aB',\n cashapp: '0x76D33A33068D86016B806dF02376dDBb23Dd3703',\n wise: '0xFF0149799631D7A5bdE2e7eA9b306c42b3d9a9ca',\n mercadopago: '0xf2AC5be14F32Cbe6A613CFF8931d95460D6c33A3',\n zelle: '0x431a078A5029146aAB239c768A615CD484519aF7',\n paypal: '0x03d17E9371C858072E171276979f6B44571C5DeA',\n monzo: '0x0dE46433bD251027f73eD8f28E01eF05DA36a2E0',\n\n // offchain services\n gatingService: '0x396D31055Db28C0C6f36e8b36f18FE7227248a97',\n zkp2pWitnessSigner: '0x0636c417755E3ae25C6c166D181c0607F4C572A3',\n },\n staging: {\n // external contracts\n usdc: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n\n // escrow + verifiers\n escrow: '0xC8cd114C6274Ef1066840337E7678BC9731BEa68',\n\n // Processor names to deployed addresses\n venmo: '0xCE6454f272127ba69e8C8128B92F2388Ca343257',\n revolut: '0xb941e69B6C1A23A88cf9DA7D243bAE1D2Cb8eb6b',\n cashapp: '0xdDB9d452180398F456Fe89A43Df9C65B19756CEa',\n wise: '0x79F35E2f65ff917BE35686d34932C8Ef5a30631f',\n mercadopago: '0xA2d54F983B8201c7b276C9705641C49C2FBD1A36',\n zelle: '0x0Ed3c3DB9CF8458e5D9991712552539675D2C896',\n paypal: '0xB07764999679a9136d6853a5D4c70449afbfc2f8',\n monzo: '0x179792F99C0eFBFa06c3F6747989a96c58544f6F',\n\n // offchain services\n gatingService: '0x396D31055Db28C0C6f36e8b36f18FE7227248a97',\n zkp2pWitnessSigner: '0x0636c417755E3ae25C6c166D181c0607F4C572A3',\n },\n },\n 31337: {\n usdc: '0x5FbDB2315678afecb367f032d93F642f64180aa3',\n escrow: '0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512',\n venmo: '0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9',\n revolut: '0xa513E6E4b8f2a923D98304ec87F64353C4D5C853',\n cashapp: '0x610178dA211FEF7D417bC0e6FeD39F05609AD788',\n wise: '0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82',\n mercadopago: '0x959922bE3CAee4b8Cd9a407cc3ac1C251C2007B1',\n zelle: '0x3Aa5ebB10DC797CAC828524e59A333d0A371443c',\n paypal: '0xE6E340D132b5f46d1e472DebcD681B2aBc16e57E',\n monzo: '0x9E545E3C0baAB3E08CdfD552C960A1050f373042',\n\n // offchain services\n gatingService: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266', // Hardhat 0\n zkp2pWitnessSigner: '0x0636c417755E3ae25C6c166D181c0607F4C572A3',\n },\n};\n\nexport function getPlatformAddressMap(addresses: ContractSet): Record<EnabledPlatform, Address> {\n const entries = ENABLED_PLATFORMS.map((p) => [p, addresses[p]] as const);\n return Object.fromEntries(entries) as Record<EnabledPlatform, Address>;\n}\n\nexport function platformFromVerifierAddress(\n addresses: ContractSet,\n verifierAddress: string,\n): EnabledPlatform | null {\n if (!verifierAddress) return null;\n const target = verifierAddress.toLowerCase();\n for (const p of ENABLED_PLATFORMS) {\n const addr = addresses[p]?.toLowerCase?.();\n if (addr && addr === target) return p;\n }\n return null;\n}\n","import { encodeAbiParameters } from 'viem';\nimport type { Address, Hex } from 'viem';\n\nimport { Currency, type CurrencyType } from './currency';\n\nconst ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' as const;\n\n/**\n * Chainlink adapter currently used by V2.2 oracle floor configs.\n */\nexport const CHAINLINK_ORACLE_ADAPTER = '0xfc81d1b5841e697973af3072fc8e03af76cb39ef' as const;\n\n/**\n * Pyth adapter used by V2.2 oracle floor configs.\n */\nexport const PYTH_ORACLE_ADAPTER = '0xaa2bBDa3072bD37af76613846268Ec48bd0bB885' as const;\n\n/**\n * Default max staleness window for oracle-backed floors.\n */\nexport const DEFAULT_ORACLE_MAX_STALENESS_SECONDS = 86_400;\n\nexport type OracleKind = 'oracle_chainlink' | 'oracle_pyth';\n\nexport type SpreadOracleFeedConfig = {\n feed: Address;\n decimals: number;\n invert: boolean;\n};\n\nexport type PythFeedConfig = {\n feedId: Hex;\n decimals: number;\n invert: boolean;\n};\n\n/**\n * Identifier surfaced to UIs/SDK consumers for the configured oracle feed.\n * - Chainlink feeds are 20-byte contract addresses.\n * - Pyth feeds are 32-byte feed IDs.\n */\nexport type SpreadOracleFeedIdentifier = Address | Hex;\n\nexport type SpreadOracleConfig = {\n feed: SpreadOracleFeedIdentifier;\n decimals: number;\n invert: boolean;\n adapter: Address;\n adapterConfig: Hex;\n maxStaleness: number;\n kind?: OracleKind;\n};\n\n/**\n * Currency -> Chainlink feed mapping used for spread/floor configuration.\n *\n * Feed pairs are quoted as <FIAT>/USD, so non-USD currencies use invert=true\n * to derive fiat-per-USDC rates from USD-denominated feeds.\n */\nexport const CHAINLINK_ORACLE_FEEDS: Partial<Record<CurrencyType, SpreadOracleFeedConfig>> = {\n [Currency.AUD]: {\n feed: '0x46e51b8ca41d709928eda9ae43e42193e6cdf229',\n decimals: 8,\n invert: true,\n },\n [Currency.BRL]: {\n feed: '0x0b0e64c05083fdf9ed7c5d3d8262c4216efc9394',\n decimals: 8,\n invert: true,\n },\n [Currency.CAD]: {\n feed: '0xa840145f87572e82519d578b1f36340368a25d5d',\n decimals: 8,\n invert: true,\n },\n [Currency.CHF]: {\n feed: '0x3a1d6444fb6a402470098e23dad0b7e86e14252f',\n decimals: 8,\n invert: true,\n },\n [Currency.EUR]: {\n feed: '0xc91d87e81fab8f93699ecf7ee9b44d11e1d53f0f',\n decimals: 8,\n invert: true,\n },\n [Currency.GBP]: {\n feed: '0xccea6576904c118037695eb71195a5425e69fa15',\n decimals: 8,\n invert: true,\n },\n [Currency.MXN]: {\n feed: '0x9e8ee77c76d4fa41306056d1c3196af5da1600bd',\n decimals: 8,\n invert: true,\n },\n [Currency.NZD]: {\n feed: '0x06bdfe07e71c476157fc025d3ccd4bbe08e83ef9',\n decimals: 8,\n invert: true,\n },\n [Currency.SGD]: {\n feed: '0x81575495532fb311efc5c993b612564274f0949b',\n decimals: 8,\n invert: true,\n },\n [Currency.TRY]: {\n feed: '0x29413773e7cd4dfd6ad89a50887877b88a6c592c',\n decimals: 8,\n invert: true,\n },\n [Currency.USD]: {\n feed: ZERO_ADDRESS,\n decimals: 0,\n invert: false,\n },\n};\n\n/** @deprecated Use CHAINLINK_ORACLE_FEEDS instead. */\nexport const SPREAD_ORACLE_FEEDS = CHAINLINK_ORACLE_FEEDS;\n\n/**\n * Currency -> Pyth feed mapping used for spread/floor configuration.\n *\n * All Pyth FX feeds use 8 decimals.\n * - XXX/USD feeds (EUR, GBP, AUD, NZD): invert=true on-chain to derive USD/XXX.\n * - USD/XXX feeds (JPY, CAD, etc.): invert=false — already in desired direction.\n *\n * Verified active on Hermes 2026-03-03.\n */\nexport const PYTH_ORACLE_FEEDS: Partial<Record<CurrencyType, PythFeedConfig>> = {\n // XXX/USD feeds — inverted on-chain to derive USD/XXX rates\n [Currency.EUR]: {\n feedId: '0xa995d00bb36a63cef7fd2c287dc105fc8f3d93779f062f09551b0af3e81ec30b', // FX.EUR/USD\n decimals: 8,\n invert: true,\n },\n [Currency.GBP]: {\n feedId: '0x84c2dde9633d93d1bcad84e7dc41c9d56578b7ec52fabedc1f335d673df0a7c1', // FX.GBP/USD\n decimals: 8,\n invert: true,\n },\n [Currency.AUD]: {\n feedId: '0x67a6f93030420c1c9e3fe37c1ab6b77966af82f995944a9fefce357a22854a80', // FX.AUD/USD\n decimals: 8,\n invert: true,\n },\n [Currency.NZD]: {\n feedId: '0x92eea8ba1b00078cdc2ef6f64f091f262e8c7d0576ee4677572f314ebfafa4c7', // FX.NZD/USD\n decimals: 8,\n invert: true,\n },\n\n // USD/XXX feeds — used directly (no inversion needed)\n [Currency.JPY]: {\n feedId: '0xef2c98c804ba503c6a707e38be4dfbb16683775f195b091252bf24693042fd52', // FX.USD/JPY\n decimals: 8,\n invert: false,\n },\n [Currency.CAD]: {\n feedId: '0x3112b03a41c910ed446852aacf67118cb1bec67b2cd0b9a214c58cc0eaa2ecca', // FX.USD/CAD\n decimals: 8,\n invert: false,\n },\n [Currency.CHF]: {\n feedId: '0x0b1e3297e69f162877b577b0d6a47a0d63b2392bc8499e6540da4187a63e28f8', // FX.USD/CHF\n decimals: 8,\n invert: false,\n },\n [Currency.SGD]: {\n feedId: '0x396a969a9c1480fa15ed50bc59149e2c0075a72fe8f458ed941ddec48bdb4918', // FX.USD/SGD\n decimals: 8,\n invert: false,\n },\n [Currency.HKD]: {\n feedId: '0x19d75fde7fee50fe67753fdc825e583594eb2f51ae84e114a5246c4ab23aff4c', // FX.USD/HKD\n decimals: 8,\n invert: false,\n },\n [Currency.NOK]: {\n feedId: '0x235ddea9f40e9af5814dbcc83a418b98e3ee8df1e34e1ae4d45cf5de596023a3', // FX.USD/NOK\n decimals: 8,\n invert: false,\n },\n [Currency.SEK]: {\n feedId: '0x8ccb376aa871517e807358d4e3cf0bc7fe4950474dbe6c9ffc21ef64e43fc676', // FX.USD/SEK\n decimals: 8,\n invert: false,\n },\n [Currency.BRL]: {\n feedId: '0xd2db4dbf1aea74e0f666b0e8f73b9580d407f5e5cf931940b06dc633d7a95906', // FX.USD/BRL\n decimals: 8,\n invert: false,\n },\n [Currency.MXN]: {\n feedId: '0xe13b1c1ffb32f34e1be9545583f01ef385fde7f42ee66049d30570dc866b77ca', // FX.USD/MXN\n decimals: 8,\n invert: false,\n },\n [Currency.TRY]: {\n feedId: '0x032a2eba1c2635bf973e95fb62b2c0705c1be2603b9572cc8d5edeaf8744e058', // FX.USD/TRY\n decimals: 8,\n invert: false,\n },\n [Currency.INR]: {\n feedId: '0x0ac0f9a2886fc2dd708bc66cc2cea359052ce89d324f45d95fadbc6c4fcf1809', // FX.USD/INR\n decimals: 8,\n invert: false,\n },\n [Currency.IDR]: {\n feedId: '0x6693afcd49878bbd622e46bd805e7177932cf6ab0b1c91b135d71151b9207433', // FX.USD/IDR\n decimals: 8,\n invert: false,\n },\n [Currency.ZAR]: {\n feedId: '0x389d889017db82bf42141f23b61b8de938a4e2d156e36312175bebf797f493f1', // FX.USD/ZAR\n decimals: 8,\n invert: false,\n },\n [Currency.PHP]: {\n feedId: '0x2bda7f268b52bfbc3f2e124c31445247647350db313caadc6771e6299e0a68c9', // FX.USD/PHP\n decimals: 8,\n invert: false,\n },\n};\n\nexport function encodeSpreadOracleAdapterConfig(config: SpreadOracleFeedConfig): Hex {\n return encodeAbiParameters(\n [\n { name: 'feed', type: 'address' },\n { name: 'invert', type: 'bool' },\n ],\n [config.feed, config.invert],\n );\n}\n\nexport function encodePythAdapterConfig(config: PythFeedConfig): Hex {\n return encodeAbiParameters(\n [\n { name: 'feedId', type: 'bytes32' },\n { name: 'invert', type: 'bool' },\n ],\n [config.feedId, config.invert],\n );\n}\n\nexport interface OracleAdapterOverrides {\n chainlinkOracleAdapter?: Address;\n pythOracleAdapter?: Address;\n}\n\nexport function getSpreadOracleConfig(\n currency: CurrencyType,\n adapters?: OracleAdapterOverrides,\n): SpreadOracleConfig | null {\n const chainlinkAdapter = adapters?.chainlinkOracleAdapter ?? CHAINLINK_ORACLE_ADAPTER;\n const pythAdapter = adapters?.pythOracleAdapter ?? PYTH_ORACLE_ADAPTER;\n\n // Prefer Chainlink when available\n const chainlinkFeed = CHAINLINK_ORACLE_FEEDS[currency];\n if (chainlinkFeed) {\n return {\n ...chainlinkFeed,\n adapter: chainlinkAdapter,\n adapterConfig: encodeSpreadOracleAdapterConfig(chainlinkFeed),\n maxStaleness: DEFAULT_ORACLE_MAX_STALENESS_SECONDS,\n kind: 'oracle_chainlink',\n };\n }\n\n // Fall back to Pyth\n const pythFeed = PYTH_ORACLE_FEEDS[currency];\n if (pythFeed) {\n return {\n feed: pythFeed.feedId,\n decimals: pythFeed.decimals,\n invert: pythFeed.invert,\n adapter: pythAdapter,\n adapterConfig: encodePythAdapterConfig(pythFeed),\n maxStaleness: DEFAULT_ORACLE_MAX_STALENESS_SECONDS,\n kind: 'oracle_pyth',\n };\n }\n\n return null;\n}\n","/**\n * SDK Constants\n *\n * This module exports all public constants for the SDK including:\n * - Payment platforms (Wise, Venmo, Revolut, etc.)\n * - Currencies (USD, EUR, GBP, etc.)\n * - Chain IDs and network configuration\n * - Token metadata\n *\n * @module constants\n */\n\n// Payment platforms\nexport { PAYMENT_PLATFORMS, type PaymentPlatformType } from './types';\n\n// Currencies\nexport { Currency, currencyInfo } from './utils/currency';\nexport type { CurrencyType, CurrencyData } from './utils/currency';\n\n// Contract addresses and deployment info\nexport { DEPLOYED_ADDRESSES } from './utils/constants';\n\n// API URLs\nexport { DEFAULT_BASE_API_URL, DEFAULT_WITNESS_URL } from './utils/constants';\nexport {\n CHAINLINK_ORACLE_ADAPTER,\n PYTH_ORACLE_ADAPTER,\n DEFAULT_ORACLE_MAX_STALENESS_SECONDS,\n CHAINLINK_ORACLE_FEEDS,\n /** @deprecated Use CHAINLINK_ORACLE_FEEDS instead. */\n SPREAD_ORACLE_FEEDS,\n PYTH_ORACLE_FEEDS,\n encodeSpreadOracleAdapterConfig,\n encodePythAdapterConfig,\n getSpreadOracleConfig,\n} from './utils/oracles';\nexport type {\n SpreadOracleFeedConfig,\n SpreadOracleConfig,\n OracleKind,\n PythFeedConfig,\n OracleAdapterOverrides,\n} from './utils/oracles';\n\n/**\n * Supported blockchain chain IDs.\n *\n * @example\n * ```typescript\n * import { SUPPORTED_CHAIN_IDS } from '@zkp2p/sdk';\n *\n * const client = new Zkp2pClient({\n * chainId: SUPPORTED_CHAIN_IDS.BASE_MAINNET,\n * // ...\n * });\n * ```\n */\nexport const SUPPORTED_CHAIN_IDS = {\n /** Base mainnet (8453) */\n BASE_MAINNET: 8453,\n /** Scroll mainnet (534352) */\n SCROLL_MAINNET: 534352,\n /** Local Hardhat network (31337) */\n HARDHAT: 31337,\n} as const;\n\n/**\n * Union type of supported chain IDs.\n */\nexport type SupportedChainId = (typeof SUPPORTED_CHAIN_IDS)[keyof typeof SUPPORTED_CHAIN_IDS];\n\n/**\n * Metadata for each supported payment platform.\n *\n * Includes display names, logos, and the number of proofs required\n * for payment verification.\n */\nexport const PLATFORM_METADATA = {\n venmo: {\n name: 'Venmo',\n displayName: 'Venmo',\n logo: '💵',\n requiredProofs: 1,\n },\n revolut: {\n name: 'Revolut',\n displayName: 'Revolut',\n logo: '💳',\n requiredProofs: 1,\n },\n cashapp: {\n name: 'CashApp',\n displayName: 'Cash App',\n logo: '💸',\n requiredProofs: 1,\n },\n wise: {\n name: 'Wise',\n displayName: 'Wise',\n logo: '🌍',\n requiredProofs: 2,\n },\n mercadopago: {\n name: 'MercadoPago',\n displayName: 'Mercado Pago',\n logo: '💰',\n requiredProofs: 1,\n },\n zelle: {\n name: 'Zelle',\n displayName: 'Zelle',\n logo: '💲',\n requiredProofs: 1,\n },\n paypal: {\n name: 'PayPal',\n displayName: 'PayPal',\n logo: '💙',\n requiredProofs: 1,\n },\n monzo: {\n name: 'Monzo',\n displayName: 'Monzo',\n logo: '🏦',\n requiredProofs: 1,\n },\n chime: {\n name: 'Chime',\n displayName: 'Chime',\n logo: '🏦',\n requiredProofs: 1,\n },\n luxon: {\n name: 'Luxon',\n displayName: 'Luxon',\n logo: '✨',\n requiredProofs: 1,\n },\n n26: {\n name: 'N26',\n displayName: 'N26',\n logo: '🏦',\n requiredProofs: 1,\n },\n} as const;\n\n/**\n * Token metadata for supported tokens.\n */\nexport const TOKEN_METADATA = {\n USDC: {\n symbol: 'USDC',\n decimals: 6,\n name: 'USD Coin',\n },\n} as const;\n\n/**\n * Attestation service configuration for each payment platform.\n *\n * Maps platform names to their corresponding action types for the\n * attestation service endpoints.\n *\n * @internal Used internally by fulfillIntent\n */\nexport const PLATFORM_ATTESTATION_CONFIG: Record<\n string,\n { actionType: string; actionPlatform: string }\n> = {\n wise: { actionType: 'transfer_wise', actionPlatform: 'wise' },\n venmo: { actionType: 'transfer_venmo', actionPlatform: 'venmo' },\n revolut: { actionType: 'transfer_revolut', actionPlatform: 'revolut' },\n cashapp: { actionType: 'transfer_cashapp', actionPlatform: 'cashapp' },\n mercadopago: { actionType: 'transfer_mercadopago', actionPlatform: 'mercadopago' },\n paypal: { actionType: 'transfer_paypal', actionPlatform: 'paypal' },\n monzo: { actionType: 'transfer_monzo', actionPlatform: 'monzo' },\n chime: { actionType: 'transfer_chime', actionPlatform: 'chime' },\n luxon: { actionType: 'transfer_luxon', actionPlatform: 'luxon' },\n n26: { actionType: 'transfer_n26', actionPlatform: 'n26' },\n 'zelle-chase': { actionType: 'transfer_zelle', actionPlatform: 'chase' },\n 'zelle-bofa': { actionType: 'transfer_zelle', actionPlatform: 'bankofamerica' },\n 'zelle-citi': { actionType: 'transfer_zelle', actionPlatform: 'citi' },\n} as const;\n\n/**\n * Resolves attestation platform configuration for a given payment platform.\n *\n * @param platformName - The payment platform name (e.g., 'wise', 'venmo', 'zelle-citi')\n * @returns Attestation configuration with actionType and actionPlatform\n * @throws Error if the platform is not supported\n *\n * @internal Used internally by fulfillIntent\n */\nexport function resolvePlatformAttestationConfig(platformName: string): {\n actionType: string;\n actionPlatform: string;\n} {\n const normalized = platformName.toLowerCase();\n const config = PLATFORM_ATTESTATION_CONFIG[normalized];\n if (!config) {\n throw new Error(`Unknown payment platform: ${platformName}`);\n }\n return config;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/currency.ts"],"names":[],"mappings":"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","file":"chunk-PQQWQF3C.mjs","sourcesContent":["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,5 +0,0 @@
1
- export { CHAINLINK_ORACLE_ADAPTER, CHAINLINK_ORACLE_FEEDS, DEFAULT_BASE_API_URL, DEFAULT_ORACLE_MAX_STALENESS_SECONDS, DEFAULT_WITNESS_URL, DEPLOYED_ADDRESSES, PAYMENT_PLATFORMS, PLATFORM_ATTESTATION_CONFIG, PLATFORM_METADATA, PYTH_ORACLE_ADAPTER, PYTH_ORACLE_FEEDS, SPREAD_ORACLE_FEEDS, SUPPORTED_CHAIN_IDS, TOKEN_METADATA, encodePythAdapterConfig, encodeSpreadOracleAdapterConfig, getSpreadOracleConfig, resolvePlatformAttestationConfig } from './chunk-F7USDS7O.mjs';
2
- export { Currency, currencyInfo } from './chunk-PQQWQF3C.mjs';
3
- import './chunk-37HJPVJE.mjs';
4
- //# sourceMappingURL=constants-YK56UVLH.mjs.map
5
- //# sourceMappingURL=constants-YK56UVLH.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"constants-YK56UVLH.mjs"}
@@ -1,4 +0,0 @@
1
- export { resolveFiatCurrencyBytes32, resolvePaymentMethodHash, resolvePaymentMethodHashFromCatalog, resolvePaymentMethodNameFromHash } from './chunk-E5SYWOUK.mjs';
2
- import './chunk-37HJPVJE.mjs';
3
- //# sourceMappingURL=paymentResolution-3TC4HRHU.mjs.map
4
- //# sourceMappingURL=paymentResolution-3TC4HRHU.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"paymentResolution-3TC4HRHU.mjs"}
@@ -1,6 +0,0 @@
1
- export { enrichPvDepositView, enrichPvIntentView, parseDepositView, parseIntentView } from './chunk-6YLLNF6Q.mjs';
2
- import './chunk-E5SYWOUK.mjs';
3
- import './chunk-PQQWQF3C.mjs';
4
- import './chunk-37HJPVJE.mjs';
5
- //# sourceMappingURL=protocolViewerParsers-EUBHHIPL.mjs.map
6
- //# sourceMappingURL=protocolViewerParsers-EUBHHIPL.mjs.map