@zkp2p/sdk 0.1.0-rc.13 → 0.1.0-rc.15

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.
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.13`. Includes V1/V2 contract routing, referral-fee intent signaling, signed oracle spreads, EscrowV2 batch currency-config updates, Pyth oracle feeds, 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.13`. Includes V1/V2 contract routing, referral-fee in
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`, `updateCurrencyConfigBatch`, `deactivateCurrenciesBatch` |
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
 
@@ -110,6 +110,16 @@ await client.setOracleRateConfig({
110
110
  });
111
111
  ```
112
112
 
113
+ ### Validate Oracle Feed Availability
114
+
115
+ ```ts
116
+ import { validateOracleFeedsOnChain } from '@zkp2p/sdk';
117
+
118
+ // Validate all Chainlink + Pyth feeds on Base via multicall
119
+ const availableCurrencies = await validateOracleFeedsOnChain(publicClient);
120
+ // Set<CurrencyType> — only currencies whose feeds responded successfully
121
+ ```
122
+
113
123
  ### Signal an Intent with Referral Fees
114
124
 
115
125
  ```ts
@@ -81,6 +81,42 @@ var ZERO_ADDRESS = "0x0000000000000000000000000000000000000000";
81
81
  var CHAINLINK_ORACLE_ADAPTER = "0xfc81d1b5841e697973af3072fc8e03af76cb39ef";
82
82
  var PYTH_ORACLE_ADAPTER = "0xaa2bBDa3072bD37af76613846268Ec48bd0bB885";
83
83
  var DEFAULT_ORACLE_MAX_STALENESS_SECONDS = 86400;
84
+ var PYTH_CONTRACT_BASE = "0xff1a0f4744e8582DF1aE09D5611b887B6a12925C";
85
+ var CHAINLINK_LATEST_ROUND_ABI = [
86
+ {
87
+ name: "latestRoundData",
88
+ type: "function",
89
+ stateMutability: "view",
90
+ inputs: [],
91
+ outputs: [
92
+ { name: "roundId", type: "uint80" },
93
+ { name: "answer", type: "int256" },
94
+ { name: "startedAt", type: "uint256" },
95
+ { name: "updatedAt", type: "uint256" },
96
+ { name: "answeredInRound", type: "uint80" }
97
+ ]
98
+ }
99
+ ];
100
+ var PYTH_GET_PRICE_UNSAFE_ABI = [
101
+ {
102
+ name: "getPriceUnsafe",
103
+ type: "function",
104
+ stateMutability: "view",
105
+ inputs: [{ name: "id", type: "bytes32" }],
106
+ outputs: [
107
+ {
108
+ name: "price",
109
+ type: "tuple",
110
+ components: [
111
+ { name: "price", type: "int64" },
112
+ { name: "conf", type: "uint64" },
113
+ { name: "expo", type: "int32" },
114
+ { name: "publishTime", type: "uint256" }
115
+ ]
116
+ }
117
+ ]
118
+ }
119
+ ];
84
120
  function parseUsdPair(pair) {
85
121
  const [base, quote] = pair.split("/");
86
122
  if (!base || !quote) return null;
@@ -173,6 +209,43 @@ function getSpreadOracleConfig(currency, adapters) {
173
209
  }
174
210
  return null;
175
211
  }
212
+ async function validateOracleFeedsOnChain(publicClient, pythContract) {
213
+ const pythAddress = pythContract ?? PYTH_CONTRACT_BASE;
214
+ const currencies = [];
215
+ const contracts = [];
216
+ for (const [currency, config] of Object.entries(CHAINLINK_ORACLE_FEEDS)) {
217
+ if (config.feed === ZERO_ADDRESS) continue;
218
+ currencies.push(currency);
219
+ contracts.push({
220
+ address: config.feed,
221
+ abi: CHAINLINK_LATEST_ROUND_ABI,
222
+ functionName: "latestRoundData",
223
+ args: []
224
+ });
225
+ }
226
+ for (const [currency, config] of Object.entries(PYTH_ORACLE_FEEDS)) {
227
+ if (CHAINLINK_ORACLE_FEEDS[currency]) continue;
228
+ currencies.push(currency);
229
+ contracts.push({
230
+ address: pythAddress,
231
+ abi: PYTH_GET_PRICE_UNSAFE_ABI,
232
+ functionName: "getPriceUnsafe",
233
+ args: [config.feedId]
234
+ });
235
+ }
236
+ if (contracts.length === 0) return /* @__PURE__ */ new Set([Currency.USD]);
237
+ const results = await publicClient.multicall({
238
+ contracts,
239
+ allowFailure: true
240
+ });
241
+ const available = /* @__PURE__ */ new Set([Currency.USD]);
242
+ for (let i = 0; i < currencies.length; i++) {
243
+ if (results[i].status === "success") {
244
+ available.add(currencies[i]);
245
+ }
246
+ }
247
+ return available;
248
+ }
176
249
 
177
250
  // src/constants.ts
178
251
  var SUPPORTED_CHAIN_IDS = {
@@ -282,6 +355,6 @@ function resolvePlatformAttestationConfig(platformName) {
282
355
  return config;
283
356
  }
284
357
 
285
- 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 };
286
- //# sourceMappingURL=chunk-PPM2EPW3.mjs.map
287
- //# sourceMappingURL=chunk-PPM2EPW3.mjs.map
358
+ 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_CONTRACT_BASE, PYTH_ORACLE_ADAPTER, PYTH_ORACLE_FEEDS, SPREAD_ORACLE_FEEDS, SUPPORTED_CHAIN_IDS, TOKEN_METADATA, encodePythAdapterConfig, encodeSpreadOracleAdapterConfig, getSpreadOracleConfig, resolvePlatformAttestationConfig, validateOracleFeedsOnChain };
359
+ //# sourceMappingURL=chunk-HF6T3QSZ.mjs.map
360
+ //# sourceMappingURL=chunk-HF6T3QSZ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types/index.ts","../src/utils/constants.ts","../src/utils/oracles.ts","../src/constants.ts"],"names":[],"mappings":"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","file":"chunk-HF6T3QSZ.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\nexport type ReferrerFeeConfig = {\n recipient: `0x${string}`;\n feeBps: number;\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 referrerFeeConfig?: ReferrerFeeConfig;\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};\n\nexport type GetQuoteSingleResponse = QuoteSingleResponse & {\n referrerFeeAmount?: string;\n referrerFeeAmountFormatted?: string;\n referrerFeeBps?: number;\n /** Gross token amount to use when calling signalIntent with the same fee config */\n signalIntentAmount?: string;\n signalIntentAmountFormatted?: 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 GetNearbyQuote = Omit<NearbyQuote, 'quote'> & {\n quote: GetQuoteSingleResponse;\n};\n\nexport type GetNearbySuggestions = {\n below: GetNearbyQuote[];\n above: GetNearbyQuote[];\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 GetQuoteResponseObject = Omit<QuoteResponseObject, 'quotes' | 'nearbySuggestions'> & {\n quotes: GetQuoteSingleResponse[];\n nearbySuggestions?: GetNearbySuggestions;\n};\n\nexport type QuoteResponse = {\n message: string;\n success: boolean;\n responseObject: QuoteResponseObject;\n statusCode: number;\n};\n\nexport type GetQuoteResponse = Omit<QuoteResponse, 'responseObject'> & {\n responseObject: GetQuoteResponseObject;\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\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: '0x777777779d229cdF3110e9de47943791c26300Ef',\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 chainlinkFeeds from '@zkp2p/contracts-v2/oracleFeeds/chainlink.json';\nimport pythFeeds from '@zkp2p/contracts-v2/oracleFeeds/pyth.json';\nimport { encodeAbiParameters } from 'viem';\nimport type { Address, Hex } from 'viem';\n\nimport { Currency, type CurrencyType } from './currency';\n\n/** Minimal interface for the publicClient parameter, avoids viem version coupling. */\nexport interface MulticallClient {\n multicall(args: {\n contracts: ReadonlyArray<{\n address: Address;\n abi: readonly unknown[];\n functionName: string;\n args: readonly unknown[];\n }>;\n allowFailure: true;\n }): Promise<ReadonlyArray<{ status: 'success' | 'failure'; result?: unknown; error?: unknown }>>;\n}\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\n/**\n * Pyth contract on Base mainnet.\n */\nexport const PYTH_CONTRACT_BASE = '0xff1a0f4744e8582DF1aE09D5611b887B6a12925C' as const;\n\nconst CHAINLINK_LATEST_ROUND_ABI = [\n {\n name: 'latestRoundData',\n type: 'function',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n { name: 'roundId', type: 'uint80' },\n { name: 'answer', type: 'int256' },\n { name: 'startedAt', type: 'uint256' },\n { name: 'updatedAt', type: 'uint256' },\n { name: 'answeredInRound', type: 'uint80' },\n ],\n },\n] as const;\n\nconst PYTH_GET_PRICE_UNSAFE_ABI = [\n {\n name: 'getPriceUnsafe',\n type: 'function',\n stateMutability: 'view',\n inputs: [{ name: 'id', type: 'bytes32' }],\n outputs: [\n {\n name: 'price',\n type: 'tuple',\n components: [\n { name: 'price', type: 'int64' },\n { name: 'conf', type: 'uint64' },\n { name: 'expo', type: 'int32' },\n { name: 'publishTime', type: 'uint256' },\n ],\n },\n ],\n },\n] as const;\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\nfunction parseUsdPair(pair: string): { currency: CurrencyType; invert: boolean } | null {\n const [base, quote] = pair.split('/');\n if (!base || !quote) return null;\n\n if (quote === 'USD' && Object.prototype.hasOwnProperty.call(Currency, base)) {\n return { currency: base as CurrencyType, invert: true };\n }\n\n if (base === 'USD' && Object.prototype.hasOwnProperty.call(Currency, quote)) {\n return { currency: quote as CurrencyType, invert: false };\n }\n\n return null;\n}\n\nfunction buildChainlinkOracleFeeds(): Partial<Record<CurrencyType, SpreadOracleFeedConfig>> {\n const map: Partial<Record<CurrencyType, SpreadOracleFeedConfig>> = {};\n\n for (const feed of chainlinkFeeds.feeds) {\n const parsed = parseUsdPair(feed.pair);\n if (!parsed) continue;\n\n map[parsed.currency] = {\n feed: feed.feed.toLowerCase() as Address,\n decimals: feed.decimals,\n invert: parsed.invert,\n };\n }\n\n return map;\n}\n\nfunction buildPythOracleFeeds(): Partial<Record<CurrencyType, PythFeedConfig>> {\n const map: Partial<Record<CurrencyType, PythFeedConfig>> = {};\n\n for (const feed of pythFeeds.feeds) {\n const parsed = parseUsdPair(feed.pair);\n if (!parsed) continue;\n\n map[parsed.currency] = {\n feedId: feed.feedId.toLowerCase() as Hex,\n decimals: feed.decimals,\n invert: parsed.invert,\n };\n }\n\n return map;\n}\n\n/**\n * Currency -> Chainlink feed mapping used for spread/floor configuration.\n * Sourced from @zkp2p/contracts-v2/oracleFeeds/chainlink.json.\n */\nexport const CHAINLINK_ORACLE_FEEDS: Partial<Record<CurrencyType, SpreadOracleFeedConfig>> = {\n ...buildChainlinkOracleFeeds(),\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 * Sourced from @zkp2p/contracts-v2/oracleFeeds/pyth.json.\n */\nexport const PYTH_ORACLE_FEEDS: Partial<Record<CurrencyType, PythFeedConfig>> =\n buildPythOracleFeeds();\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/**\n * Validates which oracle feeds are actually live on-chain.\n *\n * - Chainlink: calls `latestRoundData()` on each feed contract.\n * - Pyth: calls `getPriceUnsafe(feedId)` on the Pyth contract.\n * - USD passthrough (zero-address Chainlink) is always included.\n *\n * Returns the set of CurrencyType values with working on-chain feeds.\n * Currencies that `getSpreadOracleConfig` would resolve are only\n * considered available if they pass this check.\n */\nexport async function validateOracleFeedsOnChain(\n publicClient: MulticallClient,\n pythContract?: Address,\n): Promise<Set<CurrencyType>> {\n const pythAddress = pythContract ?? PYTH_CONTRACT_BASE;\n\n const currencies: CurrencyType[] = [];\n const contracts: Array<{\n address: Address;\n abi: readonly unknown[];\n functionName: string;\n args: readonly unknown[];\n }> = [];\n\n // Chainlink feeds (skip USD passthrough — always valid)\n for (const [currency, config] of Object.entries(CHAINLINK_ORACLE_FEEDS) as [\n CurrencyType,\n SpreadOracleFeedConfig,\n ][]) {\n if (config.feed === ZERO_ADDRESS) continue;\n currencies.push(currency);\n contracts.push({\n address: config.feed,\n abi: CHAINLINK_LATEST_ROUND_ABI,\n functionName: 'latestRoundData',\n args: [],\n });\n }\n\n // Pyth feeds (only for currencies not already covered by Chainlink)\n for (const [currency, config] of Object.entries(PYTH_ORACLE_FEEDS) as [\n CurrencyType,\n PythFeedConfig,\n ][]) {\n if (CHAINLINK_ORACLE_FEEDS[currency]) continue;\n currencies.push(currency);\n contracts.push({\n address: pythAddress,\n abi: PYTH_GET_PRICE_UNSAFE_ABI,\n functionName: 'getPriceUnsafe',\n args: [config.feedId],\n });\n }\n\n if (contracts.length === 0) return new Set([Currency.USD as CurrencyType]);\n\n const results = await publicClient.multicall({\n contracts,\n allowFailure: true,\n });\n\n const available = new Set<CurrencyType>([Currency.USD as CurrencyType]);\n for (let i = 0; i < currencies.length; i++) {\n if (results[i].status === 'success') {\n available.add(currencies[i]);\n }\n }\n\n return available;\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 PYTH_CONTRACT_BASE,\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 validateOracleFeedsOnChain,\n} from './utils/oracles';\nexport type {\n SpreadOracleFeedConfig,\n SpreadOracleConfig,\n OracleKind,\n PythFeedConfig,\n OracleAdapterOverrides,\n MulticallClient,\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"]}
@@ -434,6 +434,7 @@ function parseDepositView(raw) {
434
434
  accruedMakerFees: parseBigIntLike(raw.deposit.accruedMakerFees ?? 0),
435
435
  accruedReferrerFees: parseBigIntLike(raw.deposit.accruedReferrerFees ?? 0),
436
436
  intentGuardian: raw.deposit.intentGuardian ?? "",
437
+ retainOnEmpty: raw.deposit.retainOnEmpty ?? false,
437
438
  referrer: raw.deposit.referrer ?? "",
438
439
  referrerFee: parseBigIntLike(raw.deposit.referrerFee ?? 0)
439
440
  },
@@ -508,5 +509,5 @@ function enrichPvIntentView(view, chainId, env = "production") {
508
509
  }
509
510
 
510
511
  export { HISTORICAL_ESCROW_ADDRESSES, enrichPvDepositView, enrichPvIntentView, getContracts, getGatingServiceAddress, getPaymentMethodsCatalog, getRateManagerContracts, parseBigIntLike, parseDepositView, parseIntentView };
511
- //# sourceMappingURL=chunk-EFITJUAL.mjs.map
512
- //# sourceMappingURL=chunk-EFITJUAL.mjs.map
512
+ //# sourceMappingURL=chunk-WAP635SS.mjs.map
513
+ //# sourceMappingURL=chunk-WAP635SS.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/bigint.ts","../src/contracts.ts","../src/utils/protocolViewerParsers.ts"],"names":[],"mappings":"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","file":"chunk-WAP635SS.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 { 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"]}
@@ -0,0 +1,5 @@
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_CONTRACT_BASE, PYTH_ORACLE_ADAPTER, PYTH_ORACLE_FEEDS, SPREAD_ORACLE_FEEDS, SUPPORTED_CHAIN_IDS, TOKEN_METADATA, encodePythAdapterConfig, encodeSpreadOracleAdapterConfig, getSpreadOracleConfig, resolvePlatformAttestationConfig, validateOracleFeedsOnChain } from './chunk-HF6T3QSZ.mjs';
2
+ export { Currency, currencyInfo } from './chunk-PQQWQF3C.mjs';
3
+ import './chunk-37HJPVJE.mjs';
4
+ //# sourceMappingURL=constants-IVNABP6R.mjs.map
5
+ //# sourceMappingURL=constants-IVNABP6R.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"constants-AXNMK23T.mjs"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"constants-IVNABP6R.mjs"}