@zkp2p/cash 0.4.2 → 0.4.4

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
@@ -141,8 +141,9 @@ console.log(source?.transactions?.origin, source?.transactions?.destination);
141
141
  | `quoteSource(input)` / `executeSourceQuote(quote, { signer })` | Relay SDK EVM source routing into Base USDC before cashout |
142
142
  | `relayStatus(requestId)` | Relay request status from the Relay SDK request path |
143
143
  | `estimate({ amount, currency }, { includeEta? })` | Base USDC oracle estimate; optionally skip the historical ETA for progressive rendering |
144
- | `cashout(input, { signer })` | Registers your payee, creates the protocol-held order, returns the `depositId` |
144
+ | `cashout(input, { signer })` | Registers the payee and creates the order; Venmo, Cash App, and PayPal also confirm the required four-group access policy |
145
145
  | `prepare(input)` / `finalizePreparedCashout(receipt)` | Prepare external signing, then resolve the confirmed createDeposit receipt into a resumable result |
146
+ | `prepareAccessPolicy(depositId)` | Prepare the required Plus, Pro, Peer Makers, and Peer Pay follow-up for an externally signed restricted-rail cash-out |
146
147
  | `order(depositId)` / `orders(owner)` | Resume any order from its id alone; list all orders for a wallet |
147
148
  | `watch(depositId)` | Async iterator: yields on every state change until terminal, abort, or timeout |
148
149
  | `withdraw(depositId, { signer, amount? })` | The ONE unwind verb - partial with an `amount` (live intents don't block it), full close without (prunes expired intents first) |
@@ -164,6 +165,14 @@ Peer Cash transaction, including approves, carries ERC-8021 attribution:
164
165
  `peer-cash` first, optional `peer-ref-XXXXXX` from `referralCode` next, and your
165
166
  analytics-only `referrer` code(s) after it.
166
167
 
168
+ Signer-backed Venmo, Cash App, and PayPal cash-outs require one additional
169
+ wallet transaction after deposit creation. The SDK configures Plus, Pro, Peer
170
+ Makers, and Peer Pay using the canonical group IDs for the selected environment
171
+ and returns only after that policy transaction confirms. Its hash is available
172
+ as `accessPolicyTxHash`. If configuration cannot be confirmed, the SDK throws
173
+ `ACCESS_POLICY_CONFIGURATION_FAILED` with the already-created `depositId` and
174
+ exact `groupIds`; never repeat `cashout()` for that error.
175
+
167
176
  ```ts
168
177
  const prepared = await cash.prepare({
169
178
  amount: 5_000_000n,
@@ -184,6 +193,9 @@ for (const [index, transaction] of prepared.txs.entries()) {
184
193
  if (!createDepositReceipt) throw new Error('createDeposit receipt missing');
185
194
 
186
195
  const result = cash.finalizePreparedCashout(createDepositReceipt);
196
+ if (prepared.accessPolicyRequired) {
197
+ await externalRuntime.sendAndWait(cash.prepareAccessPolicy(result.depositId));
198
+ }
187
199
  await persistDepositId(result.depositId);
188
200
  const liveOrder = await cash.order(result.depositId);
189
201
  ```
@@ -1,6 +1,28 @@
1
1
  // src/engine/constants.ts
2
2
  var BASE_CHAIN_ID = 8453;
3
3
  var BASE_USDC_ADDRESS = "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913";
4
+ var CASH_INTENT_GUARDIAN_ADDRESS = "0x83671606454fA72ba1e2831E18C5090D25629414";
5
+ var CASH_RESTRICTED_PLATFORMS = /* @__PURE__ */ new Set(["venmo", "cashapp", "paypal"]);
6
+ var CASH_ACCESS_GROUP_IDS = {
7
+ production: [
8
+ "0xb8747401b308d4891385620071b5916e9c61284f25c4611541c529703de5babf",
9
+ "0xf030f72e772f954059ca28f94974088aaf6ba37bb1f264df48843a3d0c221dc3",
10
+ "0xdf1c64c54745aa1ce00642a5874f97e3183bf5e993c1f559d0a37a4df0b803c7",
11
+ "0x174b8a29536721a3eae290bfd55651b85a53fc334b971d993fa93ed8dde15e48"
12
+ ],
13
+ preproduction: [
14
+ "0xb8747401b308d4891385620071b5916e9c61284f25c4611541c529703de5babf",
15
+ "0xf030f72e772f954059ca28f94974088aaf6ba37bb1f264df48843a3d0c221dc3",
16
+ "0xdf1c64c54745aa1ce00642a5874f97e3183bf5e993c1f559d0a37a4df0b803c7",
17
+ "0x174b8a29536721a3eae290bfd55651b85a53fc334b971d993fa93ed8dde15e48"
18
+ ],
19
+ staging: [
20
+ "0xf6133c227eab8ae7da1ee143945bf7f31204394f3ba801dc9691f8af6ca8efa5",
21
+ "0xa6beb459bc621e7b050e431736c1c3298da26356d7095719185e859d68f70d9e",
22
+ "0x9cded1332f25c3ee0a9a822a4c827d3fbd081a8d7b2ba39c49917ec1983b8d6c",
23
+ "0xc82c20c00033046a2f017b65532d7148a337282f17c73296663a530e49ba00f7"
24
+ ]
25
+ };
4
26
  var USDC_DECIMALS = 6;
5
27
  var MARKET_SPREAD_BPS = 0;
6
28
  var ORACLE_MIN_CONVERSION_RATE_SENTINEL = 1n;
@@ -378,6 +400,21 @@ var errors = {
378
400
  },
379
401
  { cause }
380
402
  ),
403
+ accessPolicyConfigurationFailed: (depositId, groupIds, cause, transactionHash) => new CashError(
404
+ {
405
+ code: "ACCESS_POLICY_CONFIGURATION_FAILED",
406
+ message: `Cash-out deposit ${depositId} was created, but its required access policy was not confirmed.`,
407
+ retryable: false,
408
+ remediation: `Do not call cashout() again. Inspect the existing deposit and any access-policy transaction, then configure that deposit with recovery.groupIds through @zkp2p/sdk accessPolicy.`,
409
+ recovery: {
410
+ kind: "configure-cashout-access-policy",
411
+ depositId,
412
+ groupIds: [...groupIds],
413
+ ...transactionHash ? { transactionHash } : {}
414
+ }
415
+ },
416
+ { cause }
417
+ ),
381
418
  escrowPaused: () => new CashError({
382
419
  code: "ESCROW_PAUSED",
383
420
  message: `The escrow contract is paused; deposits are temporarily disabled.`,
@@ -445,4 +482,4 @@ function isUserRejectedError(value) {
445
482
  return text.some(hasUserRejectionText);
446
483
  }
447
484
 
448
- export { BASE_CHAIN_ID, BASE_USDC_ADDRESS, CASH_ORDER_POLL_INTERVAL_MS, CASH_ORDER_STATUSES, CASH_RETAIN_ON_EMPTY, CashError, MARKET_SPREAD_BPS, ORACLE_MIN_CONVERSION_RATE_SENTINEL, USDC_DECIMALS, errors, isCashError, isUserRejectedError, mapChainError };
485
+ export { BASE_CHAIN_ID, BASE_USDC_ADDRESS, CASH_ACCESS_GROUP_IDS, CASH_INTENT_GUARDIAN_ADDRESS, CASH_ORDER_POLL_INTERVAL_MS, CASH_ORDER_STATUSES, CASH_RESTRICTED_PLATFORMS, CASH_RETAIN_ON_EMPTY, CashError, MARKET_SPREAD_BPS, ORACLE_MIN_CONVERSION_RATE_SENTINEL, USDC_DECIMALS, errors, isCashError, isUserRejectedError, mapChainError };
@@ -582,6 +582,8 @@ interface CashoutResult {
582
582
  onchainDepositId: bigint;
583
583
  /** Optimistic snapshot (`awaiting-buyer`); poll `order(depositId)` for live state. */
584
584
  order: CashOrder;
585
+ /** Confirmed policy transaction for Venmo, Cash App, or PayPal cash-outs. */
586
+ accessPolicyTxHash?: Hash;
585
587
  /** Present when `cashout()` first routed a source asset through Relay. */
586
588
  source?: {
587
589
  /** Conservative Base USDC amount deposited (Relay's guaranteed minimum output). */
@@ -608,6 +610,8 @@ interface PrepareResult {
608
610
  register: {
609
611
  hashedOnchainIds: string[];
610
612
  };
613
+ /** Submit `prepareAccessPolicy(depositId)` after creation when true. */
614
+ accessPolicyRequired: boolean;
611
615
  }
612
616
  /** Confirmed createDeposit receipt from an externally executed prepare() plan. */
613
617
  interface PreparedCashoutReceipt {
@@ -670,6 +674,8 @@ interface CashClient {
670
674
  prepare(input: CashoutInput): Promise<PrepareResult>;
671
675
  /** Resolve an externally executed createDeposit receipt into resumable cash-out state. */
672
676
  finalizePreparedCashout(receipt: PreparedCashoutReceipt): CashoutResult;
677
+ /** Prepare the required four-group policy for an externally created cash-out. */
678
+ prepareAccessPolicy(depositId: string): PreparedTransaction;
673
679
  /** 3 - Observe: resumable from `depositId` alone; no session state anywhere. */
674
680
  order(depositId: string): Promise<CashOrder>;
675
681
  /**
@@ -582,6 +582,8 @@ interface CashoutResult {
582
582
  onchainDepositId: bigint;
583
583
  /** Optimistic snapshot (`awaiting-buyer`); poll `order(depositId)` for live state. */
584
584
  order: CashOrder;
585
+ /** Confirmed policy transaction for Venmo, Cash App, or PayPal cash-outs. */
586
+ accessPolicyTxHash?: Hash;
585
587
  /** Present when `cashout()` first routed a source asset through Relay. */
586
588
  source?: {
587
589
  /** Conservative Base USDC amount deposited (Relay's guaranteed minimum output). */
@@ -608,6 +610,8 @@ interface PrepareResult {
608
610
  register: {
609
611
  hashedOnchainIds: string[];
610
612
  };
613
+ /** Submit `prepareAccessPolicy(depositId)` after creation when true. */
614
+ accessPolicyRequired: boolean;
611
615
  }
612
616
  /** Confirmed createDeposit receipt from an externally executed prepare() plan. */
613
617
  interface PreparedCashoutReceipt {
@@ -670,6 +674,8 @@ interface CashClient {
670
674
  prepare(input: CashoutInput): Promise<PrepareResult>;
671
675
  /** Resolve an externally executed createDeposit receipt into resumable cash-out state. */
672
676
  finalizePreparedCashout(receipt: PreparedCashoutReceipt): CashoutResult;
677
+ /** Prepare the required four-group policy for an externally created cash-out. */
678
+ prepareAccessPolicy(depositId: string): PreparedTransaction;
673
679
  /** 3 - Observe: resumable from `depositId` alone; no session state anywhere. */
674
680
  order(depositId: string): Promise<CashOrder>;
675
681
  /**
package/dist/index.cjs CHANGED
@@ -12,6 +12,28 @@ var zod = require('zod');
12
12
  // src/engine/constants.ts
13
13
  var BASE_CHAIN_ID = 8453;
14
14
  var BASE_USDC_ADDRESS = "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913";
15
+ var CASH_INTENT_GUARDIAN_ADDRESS = "0x83671606454fA72ba1e2831E18C5090D25629414";
16
+ var CASH_RESTRICTED_PLATFORMS = /* @__PURE__ */ new Set(["venmo", "cashapp", "paypal"]);
17
+ var CASH_ACCESS_GROUP_IDS = {
18
+ production: [
19
+ "0xb8747401b308d4891385620071b5916e9c61284f25c4611541c529703de5babf",
20
+ "0xf030f72e772f954059ca28f94974088aaf6ba37bb1f264df48843a3d0c221dc3",
21
+ "0xdf1c64c54745aa1ce00642a5874f97e3183bf5e993c1f559d0a37a4df0b803c7",
22
+ "0x174b8a29536721a3eae290bfd55651b85a53fc334b971d993fa93ed8dde15e48"
23
+ ],
24
+ preproduction: [
25
+ "0xb8747401b308d4891385620071b5916e9c61284f25c4611541c529703de5babf",
26
+ "0xf030f72e772f954059ca28f94974088aaf6ba37bb1f264df48843a3d0c221dc3",
27
+ "0xdf1c64c54745aa1ce00642a5874f97e3183bf5e993c1f559d0a37a4df0b803c7",
28
+ "0x174b8a29536721a3eae290bfd55651b85a53fc334b971d993fa93ed8dde15e48"
29
+ ],
30
+ staging: [
31
+ "0xf6133c227eab8ae7da1ee143945bf7f31204394f3ba801dc9691f8af6ca8efa5",
32
+ "0xa6beb459bc621e7b050e431736c1c3298da26356d7095719185e859d68f70d9e",
33
+ "0x9cded1332f25c3ee0a9a822a4c827d3fbd081a8d7b2ba39c49917ec1983b8d6c",
34
+ "0xc82c20c00033046a2f017b65532d7148a337282f17c73296663a530e49ba00f7"
35
+ ]
36
+ };
15
37
  var USDC_DECIMALS = 6;
16
38
  var MARKET_SPREAD_BPS = 0;
17
39
  var ORACLE_MIN_CONVERSION_RATE_SENTINEL = 1n;
@@ -121,6 +143,7 @@ async function prepareCashDepositParams(client, input, adapters) {
121
143
  paymentMethodsOverride,
122
144
  paymentMethodDataOverride,
123
145
  currenciesOverride,
146
+ intentGuardian: CASH_INTENT_GUARDIAN_ADDRESS,
124
147
  retainOnEmpty: CASH_RETAIN_ON_EMPTY
125
148
  };
126
149
  }
@@ -859,6 +882,21 @@ var errors = {
859
882
  },
860
883
  { cause }
861
884
  ),
885
+ accessPolicyConfigurationFailed: (depositId, groupIds, cause, transactionHash) => new CashError(
886
+ {
887
+ code: "ACCESS_POLICY_CONFIGURATION_FAILED",
888
+ message: `Cash-out deposit ${depositId} was created, but its required access policy was not confirmed.`,
889
+ retryable: false,
890
+ remediation: `Do not call cashout() again. Inspect the existing deposit and any access-policy transaction, then configure that deposit with recovery.groupIds through @zkp2p/sdk accessPolicy.`,
891
+ recovery: {
892
+ kind: "configure-cashout-access-policy",
893
+ depositId,
894
+ groupIds: [...groupIds],
895
+ ...transactionHash ? { transactionHash } : {}
896
+ }
897
+ },
898
+ { cause }
899
+ ),
862
900
  escrowPaused: () => new CashError({
863
901
  code: "ESCROW_PAUSED",
864
902
  message: `The escrow contract is paused; deposits are temporarily disabled.`,
@@ -2113,6 +2151,64 @@ function createCashClient(options) {
2113
2151
  if (lastNonceError) throw lastNonceError;
2114
2152
  throw new Error(`Signer provider did not observe Relay nonce ${afterRelay - 1}`);
2115
2153
  }
2154
+ async function configureCashoutAccess(client, signer, depositInput, depositId) {
2155
+ if (!depositInput.payouts.some(
2156
+ (payout) => CASH_RESTRICTED_PLATFORMS.has(payout.processorName.toLowerCase())
2157
+ )) {
2158
+ return void 0;
2159
+ }
2160
+ const groupIds = CASH_ACCESS_GROUP_IDS[environment];
2161
+ const prepared = prepareCashoutAccess(depositId, client);
2162
+ let hash;
2163
+ try {
2164
+ hash = await signer.sendTransaction({
2165
+ account: signer.account,
2166
+ chain: signer.chain,
2167
+ to: prepared.to,
2168
+ data: prepared.data,
2169
+ value: prepared.value
2170
+ });
2171
+ } catch (err) {
2172
+ throw errors.accessPolicyConfigurationFailed(depositId, groupIds, err);
2173
+ }
2174
+ let receipt;
2175
+ try {
2176
+ receipt = await client.publicClient.waitForTransactionReceipt({ hash });
2177
+ } catch (err) {
2178
+ throw errors.accessPolicyConfigurationFailed(depositId, groupIds, err, hash);
2179
+ }
2180
+ if (receipt.status === "reverted") {
2181
+ throw errors.accessPolicyConfigurationFailed(
2182
+ depositId,
2183
+ groupIds,
2184
+ errors.transactionFailed(hash),
2185
+ hash
2186
+ );
2187
+ }
2188
+ return hash;
2189
+ }
2190
+ function prepareCashoutAccess(depositId, client = readClient) {
2191
+ const { compositeId, escrowAddress, onchainDepositId } = parseDepositId(depositId);
2192
+ const groupIds = CASH_ACCESS_GROUP_IDS[environment];
2193
+ try {
2194
+ const prepared = client.accessPolicy.prepareConfigureDeposit({
2195
+ escrow: escrowAddress,
2196
+ depositId: onchainDepositId,
2197
+ enabled: true,
2198
+ groupIds,
2199
+ takers: [],
2200
+ txOverrides: attribution
2201
+ });
2202
+ return {
2203
+ to: prepared.to,
2204
+ data: prepared.data,
2205
+ value: prepared.value,
2206
+ chainId: prepared.chainId
2207
+ };
2208
+ } catch (err) {
2209
+ throw errors.accessPolicyConfigurationFailed(compositeId, groupIds, err);
2210
+ }
2211
+ }
2116
2212
  return {
2117
2213
  capabilities,
2118
2214
  async sourceCapabilities() {
@@ -2247,6 +2343,12 @@ function createCashClient(options) {
2247
2343
  const abi2 = client.escrowV2Abi ?? client.escrowAbi;
2248
2344
  const resolved2 = resolveCashDepositId({ logs: receipt2.logs, abi: abi2 });
2249
2345
  if (!resolved2) throw errors.depositResolutionFailed(hash2);
2346
+ const accessPolicyTxHash2 = await configureCashoutAccess(
2347
+ client,
2348
+ opts.signer,
2349
+ depositInput2,
2350
+ resolved2.compositeId
2351
+ );
2250
2352
  const order2 = deriveCashOrder(resolved2.compositeId, [], {
2251
2353
  remainingAmount: depositInput2.amount,
2252
2354
  status: "ACTIVE"
@@ -2257,6 +2359,7 @@ function createCashClient(options) {
2257
2359
  escrowAddress: resolved2.escrowAddress,
2258
2360
  onchainDepositId: resolved2.onchainDepositId,
2259
2361
  order: order2,
2362
+ ...accessPolicyTxHash2 ? { accessPolicyTxHash: accessPolicyTxHash2 } : {},
2260
2363
  source: routedSource
2261
2364
  };
2262
2365
  }
@@ -2301,6 +2404,12 @@ function createCashClient(options) {
2301
2404
  const abi = client.escrowV2Abi ?? client.escrowAbi;
2302
2405
  const resolved = resolveCashDepositId({ logs: receipt.logs, abi });
2303
2406
  if (!resolved) throw errors.depositResolutionFailed(hash);
2407
+ const accessPolicyTxHash = await configureCashoutAccess(
2408
+ client,
2409
+ opts.signer,
2410
+ depositInput,
2411
+ resolved.compositeId
2412
+ );
2304
2413
  const order = deriveCashOrder(resolved.compositeId, [], {
2305
2414
  remainingAmount: depositInput.amount,
2306
2415
  status: "ACTIVE"
@@ -2311,6 +2420,7 @@ function createCashClient(options) {
2311
2420
  escrowAddress: resolved.escrowAddress,
2312
2421
  onchainDepositId: resolved.onchainDepositId,
2313
2422
  order,
2423
+ ...accessPolicyTxHash ? { accessPolicyTxHash } : {},
2314
2424
  ...sourceResult ? { source: sourceResult } : {}
2315
2425
  };
2316
2426
  },
@@ -2348,7 +2458,10 @@ function createCashClient(options) {
2348
2458
  description: "Create the protocol-held cash-out order."
2349
2459
  }
2350
2460
  ],
2351
- register: { hashedOnchainIds }
2461
+ register: { hashedOnchainIds },
2462
+ accessPolicyRequired: depositInput.payouts.some(
2463
+ (payout) => CASH_RESTRICTED_PLATFORMS.has(payout.processorName.toLowerCase())
2464
+ )
2352
2465
  };
2353
2466
  },
2354
2467
  finalizePreparedCashout(receipt) {
@@ -2377,6 +2490,7 @@ function createCashClient(options) {
2377
2490
  })
2378
2491
  };
2379
2492
  },
2493
+ prepareAccessPolicy: prepareCashoutAccess,
2380
2494
  async order(depositId) {
2381
2495
  return fetchOrder(depositId);
2382
2496
  },
@@ -2831,6 +2945,7 @@ var cashoutResultJsonSchema = zod.z.object({
2831
2945
  escrowAddress: zod.z.string(),
2832
2946
  onchainDepositId: nonNegativeBigintString,
2833
2947
  order: cashOrderJsonSchema,
2948
+ accessPolicyTxHash: zod.z.string().optional(),
2834
2949
  source: zod.z.object({
2835
2950
  amount: nonNegativeBigintString,
2836
2951
  requestId: zod.z.string().optional(),
@@ -2841,7 +2956,8 @@ var cashoutResultJsonSchema = zod.z.object({
2841
2956
  var prepareResultJsonSchema = zod.z.object({
2842
2957
  txs: zod.z.array(preparedTransactionJsonSchema),
2843
2958
  steps: zod.z.array(cashPreparedStepJsonSchema),
2844
- register: zod.z.object({ hashedOnchainIds: zod.z.array(zod.z.string()) })
2959
+ register: zod.z.object({ hashedOnchainIds: zod.z.array(zod.z.string()) }),
2960
+ accessPolicyRequired: zod.z.boolean()
2845
2961
  });
2846
2962
  var withdrawResultJsonSchema = zod.z.object({
2847
2963
  depositId: zod.z.string(),
@@ -2919,6 +3035,7 @@ var CASH_ERROR_CODES = defineCashErrorCodes([
2919
3035
  "SOURCE_CASHOUT_SUBMISSION_UNKNOWN",
2920
3036
  "SOURCE_CASHOUT_STATUS_UNKNOWN",
2921
3037
  "DEPOSIT_RESOLUTION_FAILED",
3038
+ "ACCESS_POLICY_CONFIGURATION_FAILED",
2922
3039
  "ALLOWANCE_NOT_VISIBLE",
2923
3040
  "SIGNER_REQUIRED",
2924
3041
  "SIGNER_CHAIN_MISMATCH",
@@ -2964,6 +3081,12 @@ var cashErrorRecoveryJsonSchema = zod.z.discriminatedUnion("kind", [
2964
3081
  kind: zod.z.literal("inspect-base-transaction"),
2965
3082
  transactionHash: zod.z.string(),
2966
3083
  operation: zod.z.string()
3084
+ }).strict(),
3085
+ zod.z.object({
3086
+ kind: zod.z.literal("configure-cashout-access-policy"),
3087
+ depositId: zod.z.string(),
3088
+ groupIds: zod.z.array(zod.z.string()),
3089
+ transactionHash: zod.z.string().optional()
2967
3090
  }).strict()
2968
3091
  ]);
2969
3092
  var cashErrorJsonSchema = zod.z.object({
@@ -3221,6 +3344,7 @@ function cashoutResultToJson(result) {
3221
3344
  escrowAddress: result.escrowAddress,
3222
3345
  onchainDepositId: result.onchainDepositId.toString(),
3223
3346
  order: orderToJson(result.order),
3347
+ accessPolicyTxHash: result.accessPolicyTxHash,
3224
3348
  source: result.source ? {
3225
3349
  ...result.source,
3226
3350
  amount: result.source.amount.toString()
@@ -3235,6 +3359,7 @@ function cashoutResultFromJson(json) {
3235
3359
  escrowAddress: parsed.escrowAddress,
3236
3360
  onchainDepositId: BigInt(parsed.onchainDepositId),
3237
3361
  order: orderFromJson(parsed.order),
3362
+ accessPolicyTxHash: parsed.accessPolicyTxHash,
3238
3363
  source: parsed.source ? {
3239
3364
  ...parsed.source,
3240
3365
  amount: BigInt(parsed.source.amount)
@@ -3245,7 +3370,8 @@ function prepareResultToJson(result) {
3245
3370
  return {
3246
3371
  txs: result.txs.map(preparedTxToJson),
3247
3372
  steps: result.steps.map(preparedStepToJson),
3248
- register: result.register
3373
+ register: result.register,
3374
+ accessPolicyRequired: result.accessPolicyRequired
3249
3375
  };
3250
3376
  }
3251
3377
  function prepareResultFromJson(json) {
@@ -3253,7 +3379,8 @@ function prepareResultFromJson(json) {
3253
3379
  return {
3254
3380
  txs: parsed.txs.map(preparedTxFromJson),
3255
3381
  steps: parsed.steps.map(preparedStepFromJson),
3256
- register: parsed.register
3382
+ register: parsed.register,
3383
+ accessPolicyRequired: parsed.accessPolicyRequired
3257
3384
  };
3258
3385
  }
3259
3386
  function withdrawResultToJson(result) {
@@ -3333,6 +3460,13 @@ function cashErrorFromJson(json) {
3333
3460
  transactionHash: parsed.recovery.transactionHash,
3334
3461
  operation: parsed.recovery.operation
3335
3462
  };
3463
+ } else if (parsed.recovery.kind === "configure-cashout-access-policy") {
3464
+ recovery = {
3465
+ kind: parsed.recovery.kind,
3466
+ depositId: parsed.recovery.depositId,
3467
+ groupIds: parsed.recovery.groupIds,
3468
+ ...parsed.recovery.transactionHash !== void 0 ? { transactionHash: parsed.recovery.transactionHash } : {}
3469
+ };
3336
3470
  } else if (parsed.recovery.kind === "inspect-base-operation-submission") {
3337
3471
  recovery = {
3338
3472
  kind: parsed.recovery.kind,
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { I as IntentStatus, C as CashPayoutInfo, a as IntentEntity, b as CashBuyerProfile, c as CashDepositInput, d as CreateDepositParamsArg, e as CashOrder, f as CashFill, g as CashCapabilities, h as CashoutResult, i as CashEstimate, j as CashFillStats, P as PrepareResult, k as CashPreparedStep, R as RelayExecutionResult, l as RelayQuote, m as RelayStatus, n as CashSourceCapabilities, T as TopUpResult, W as WithdrawResult } from './createCashClient-CYSM84-K.cjs';
2
- export { o as CASH_ATTRIBUTION_CODE, p as CASH_REFERRAL_ATTRIBUTION_PREFIX, q as CashAsset, r as CashChain, s as CashClient, t as CashClientOptions, u as CashFillEta, v as CashLeg, w as CashMultiCurrencyLeg, x as CashNextAction, y as CashOrderState, z as CashPairFillStats, A as CashPayeeInput, B as CashPayout, D as CashPayoutPricing, E as CashPlatformCapability, F as CashPreparedStepKind, G as CashReceiveLeg, H as CashoutInput, J as CashoutOptions, K as CuratorPayeeDataInput, L as EstimateInput, M as EstimateOptions, N as MIN_CASHOUT_AMOUNT, O as OrdersOptions, Q as PreparedCashoutReceipt, S as RECOMMENDED_MIN_CASHOUT_AMOUNT, U as RelayOptions, V as RelayQuoteInput, X as RelaySourceInput, Y as RelayTransaction, Z as SignerOptions, _ as WatchOptions, $ as WithdrawOptions, a0 as buildCapabilities, a1 as createCashClient, a2 as normalizeCashPayee, a3 as toCashReferralAttributionCode } from './createCashClient-CYSM84-K.cjs';
1
+ import { I as IntentStatus, C as CashPayoutInfo, a as IntentEntity, b as CashBuyerProfile, c as CashDepositInput, d as CreateDepositParamsArg, e as CashOrder, f as CashFill, g as CashCapabilities, h as CashoutResult, i as CashEstimate, j as CashFillStats, P as PrepareResult, k as CashPreparedStep, R as RelayExecutionResult, l as RelayQuote, m as RelayStatus, n as CashSourceCapabilities, T as TopUpResult, W as WithdrawResult } from './createCashClient-C5YKh7cv.cjs';
2
+ export { o as CASH_ATTRIBUTION_CODE, p as CASH_REFERRAL_ATTRIBUTION_PREFIX, q as CashAsset, r as CashChain, s as CashClient, t as CashClientOptions, u as CashFillEta, v as CashLeg, w as CashMultiCurrencyLeg, x as CashNextAction, y as CashOrderState, z as CashPairFillStats, A as CashPayeeInput, B as CashPayout, D as CashPayoutPricing, E as CashPlatformCapability, F as CashPreparedStepKind, G as CashReceiveLeg, H as CashoutInput, J as CashoutOptions, K as CuratorPayeeDataInput, L as EstimateInput, M as EstimateOptions, N as MIN_CASHOUT_AMOUNT, O as OrdersOptions, Q as PreparedCashoutReceipt, S as RECOMMENDED_MIN_CASHOUT_AMOUNT, U as RelayOptions, V as RelayQuoteInput, X as RelaySourceInput, Y as RelayTransaction, Z as SignerOptions, _ as WatchOptions, $ as WithdrawOptions, a0 as buildCapabilities, a1 as createCashClient, a2 as normalizeCashPayee, a3 as toCashReferralAttributionCode } from './createCashClient-C5YKh7cv.cjs';
3
3
  import { PaymentMethodCatalog, CurrencyType, OracleAdapterOverrides, OnchainCurrency, Zkp2pClient, PreparedTransaction } from '@zkp2p/sdk';
4
4
  export { CurrencyType, PreparedTransaction, RuntimeEnv } from '@zkp2p/sdk';
5
5
  import { Log, Abi } from 'viem';
@@ -10,7 +10,7 @@ import '@relayprotocol/relay-sdk';
10
10
  * Typed errors - every failure carries a `code`, whether it is `retryable`,
11
11
  * and a `remediation` sentence so agents can self-drive recovery.
12
12
  */
13
- type CashErrorCode = 'ORACLE_UNSUPPORTED_CURRENCY' | 'ORACLE_READ_FAILED' | 'UNSUPPORTED_PLATFORM' | 'UNSUPPORTED_PLATFORM_CURRENCY' | 'AMOUNT_BELOW_MINIMUM' | 'INVALID_INTENT_AMOUNT_RANGE' | 'INVALID_PAYOUT_CURRENCIES' | 'INVALID_PAYOUT_PLATFORMS' | 'INVALID_REFERRAL_CODE' | 'ACTIVE_INTENT_BLOCKS_WITHDRAWAL' | 'NOTHING_TO_WITHDRAW' | 'INSUFFICIENT_AVAILABLE_FUNDS' | 'INSUFFICIENT_TOKEN_BALANCE' | 'ORDER_NOT_ACTIVE' | 'INVALID_DEPOSIT_ID' | 'ESCROW_PAUSED' | 'INDEXER_LAG' | 'INDEXER_UNAVAILABLE' | 'ORDER_NOT_FOUND' | 'PAYEE_REGISTRATION_FAILED' | 'PAYEE_VERIFICATION_REQUIRED' | 'SOURCE_ROUTE_UNSUPPORTED_IN_PREPARE' | 'SOURCE_RECIPIENT_MISMATCH' | 'SOURCE_CAPABILITIES_FAILED' | 'SOURCE_QUOTE_FAILED' | 'SOURCE_NONCE_MANAGER_REQUIRED' | 'SOURCE_EXECUTION_FAILED' | 'SOURCE_STATUS_FAILED' | 'SOURCE_ROUTE_COMPLETED_CASHOUT_FAILED' | 'SOURCE_CASHOUT_SUBMISSION_UNKNOWN' | 'SOURCE_CASHOUT_STATUS_UNKNOWN' | 'DEPOSIT_RESOLUTION_FAILED' | 'ALLOWANCE_NOT_VISIBLE' | 'SIGNER_REQUIRED' | 'SIGNER_CHAIN_MISMATCH' | 'SIGNER_CHAIN_UNAVAILABLE' | 'WATCH_TIMEOUT' | 'TRANSACTION_REJECTED' | 'TRANSACTION_FAILED' | 'TRANSACTION_SUBMISSION_UNKNOWN' | 'TRANSACTION_STATUS_UNKNOWN';
13
+ type CashErrorCode = 'ORACLE_UNSUPPORTED_CURRENCY' | 'ORACLE_READ_FAILED' | 'UNSUPPORTED_PLATFORM' | 'UNSUPPORTED_PLATFORM_CURRENCY' | 'AMOUNT_BELOW_MINIMUM' | 'INVALID_INTENT_AMOUNT_RANGE' | 'INVALID_PAYOUT_CURRENCIES' | 'INVALID_PAYOUT_PLATFORMS' | 'INVALID_REFERRAL_CODE' | 'ACTIVE_INTENT_BLOCKS_WITHDRAWAL' | 'NOTHING_TO_WITHDRAW' | 'INSUFFICIENT_AVAILABLE_FUNDS' | 'INSUFFICIENT_TOKEN_BALANCE' | 'ORDER_NOT_ACTIVE' | 'INVALID_DEPOSIT_ID' | 'ESCROW_PAUSED' | 'INDEXER_LAG' | 'INDEXER_UNAVAILABLE' | 'ORDER_NOT_FOUND' | 'PAYEE_REGISTRATION_FAILED' | 'PAYEE_VERIFICATION_REQUIRED' | 'SOURCE_ROUTE_UNSUPPORTED_IN_PREPARE' | 'SOURCE_RECIPIENT_MISMATCH' | 'SOURCE_CAPABILITIES_FAILED' | 'SOURCE_QUOTE_FAILED' | 'SOURCE_NONCE_MANAGER_REQUIRED' | 'SOURCE_EXECUTION_FAILED' | 'SOURCE_STATUS_FAILED' | 'SOURCE_ROUTE_COMPLETED_CASHOUT_FAILED' | 'SOURCE_CASHOUT_SUBMISSION_UNKNOWN' | 'SOURCE_CASHOUT_STATUS_UNKNOWN' | 'DEPOSIT_RESOLUTION_FAILED' | 'ACCESS_POLICY_CONFIGURATION_FAILED' | 'ALLOWANCE_NOT_VISIBLE' | 'SIGNER_REQUIRED' | 'SIGNER_CHAIN_MISMATCH' | 'SIGNER_CHAIN_UNAVAILABLE' | 'WATCH_TIMEOUT' | 'TRANSACTION_REJECTED' | 'TRANSACTION_FAILED' | 'TRANSACTION_SUBMISSION_UNKNOWN' | 'TRANSACTION_STATUS_UNKNOWN';
14
14
  interface CashErrorShape {
15
15
  code: CashErrorCode;
16
16
  message: string;
@@ -56,6 +56,11 @@ type CashErrorRecovery = (CashSourceRecoveryBase & {
56
56
  kind: 'inspect-base-transaction';
57
57
  transactionHash: string;
58
58
  operation: string;
59
+ } | {
60
+ kind: 'configure-cashout-access-policy';
61
+ depositId: string;
62
+ groupIds: string[];
63
+ transactionHash?: string;
59
64
  };
60
65
  declare class CashError extends Error implements CashErrorShape {
61
66
  readonly code: CashErrorCode;
@@ -130,6 +135,7 @@ declare const errors: {
130
135
  transactionRejected: (verb: string, cause?: unknown) => CashError;
131
136
  transactionSubmissionUnknown: (operation: string, cause?: unknown, recovery?: CashErrorRecovery) => CashError;
132
137
  transactionStatusUnknown: (txHash: string, cause?: unknown, operation?: string) => CashError;
138
+ accessPolicyConfigurationFailed: (depositId: string, groupIds: readonly string[], cause?: unknown, transactionHash?: string) => CashError;
133
139
  escrowPaused: () => CashError;
134
140
  /** Generic fallback for an on-chain call that failed for an unrecognized reason. */
135
141
  chainCallFailed: (verb: string, cause?: unknown) => CashError;
@@ -1994,6 +2000,7 @@ declare const cashoutResultJsonSchema: z.ZodObject<{
1994
2000
  intentCount?: number | undefined;
1995
2001
  withdrawn?: boolean | undefined;
1996
2002
  }>;
2003
+ accessPolicyTxHash: z.ZodOptional<z.ZodString>;
1997
2004
  source: z.ZodOptional<z.ZodObject<{
1998
2005
  amount: z.ZodString;
1999
2006
  requestId: z.ZodOptional<z.ZodString>;
@@ -2158,6 +2165,7 @@ declare const cashoutResultJsonSchema: z.ZodObject<{
2158
2165
  } | undefined;
2159
2166
  requestId?: string | undefined;
2160
2167
  } | undefined;
2168
+ accessPolicyTxHash?: string | undefined;
2161
2169
  }, {
2162
2170
  depositId: string;
2163
2171
  escrowAddress: string;
@@ -2235,6 +2243,7 @@ declare const cashoutResultJsonSchema: z.ZodObject<{
2235
2243
  } | undefined;
2236
2244
  requestId?: string | undefined;
2237
2245
  } | undefined;
2246
+ accessPolicyTxHash?: string | undefined;
2238
2247
  }>;
2239
2248
  declare const prepareResultJsonSchema: z.ZodObject<{
2240
2249
  txs: z.ZodArray<z.ZodObject<{
@@ -2270,6 +2279,7 @@ declare const prepareResultJsonSchema: z.ZodObject<{
2270
2279
  }, {
2271
2280
  hashedOnchainIds: string[];
2272
2281
  }>;
2282
+ accessPolicyRequired: z.ZodBoolean;
2273
2283
  }, "strip", z.ZodTypeAny, {
2274
2284
  steps: {
2275
2285
  kind: "createDeposit" | "approve" | "pruneExpiredIntents" | "withdrawDeposit" | "removeFunds" | "addFunds";
@@ -2284,6 +2294,7 @@ declare const prepareResultJsonSchema: z.ZodObject<{
2284
2294
  register: {
2285
2295
  hashedOnchainIds: string[];
2286
2296
  };
2297
+ accessPolicyRequired: boolean;
2287
2298
  }, {
2288
2299
  steps: {
2289
2300
  kind: "createDeposit" | "approve" | "pruneExpiredIntents" | "withdrawDeposit" | "removeFunds" | "addFunds";
@@ -2298,6 +2309,7 @@ declare const prepareResultJsonSchema: z.ZodObject<{
2298
2309
  register: {
2299
2310
  hashedOnchainIds: string[];
2300
2311
  };
2312
+ accessPolicyRequired: boolean;
2301
2313
  }>;
2302
2314
  declare const withdrawResultJsonSchema: z.ZodObject<{
2303
2315
  depositId: z.ZodString;
@@ -3184,9 +3196,24 @@ declare const cashErrorRecoveryJsonSchema: z.ZodDiscriminatedUnion<"kind", [z.Zo
3184
3196
  kind: "inspect-base-transaction";
3185
3197
  transactionHash: string;
3186
3198
  operation: string;
3199
+ }>, z.ZodObject<{
3200
+ kind: z.ZodLiteral<"configure-cashout-access-policy">;
3201
+ depositId: z.ZodString;
3202
+ groupIds: z.ZodArray<z.ZodString, "many">;
3203
+ transactionHash: z.ZodOptional<z.ZodString>;
3204
+ }, "strict", z.ZodTypeAny, {
3205
+ depositId: string;
3206
+ kind: "configure-cashout-access-policy";
3207
+ groupIds: string[];
3208
+ transactionHash?: string | undefined;
3209
+ }, {
3210
+ depositId: string;
3211
+ kind: "configure-cashout-access-policy";
3212
+ groupIds: string[];
3213
+ transactionHash?: string | undefined;
3187
3214
  }>]>;
3188
3215
  declare const cashErrorJsonSchema: z.ZodObject<{
3189
- code: z.ZodEnum<["ORACLE_UNSUPPORTED_CURRENCY", "ORACLE_READ_FAILED", "UNSUPPORTED_PLATFORM", "UNSUPPORTED_PLATFORM_CURRENCY", "AMOUNT_BELOW_MINIMUM", "INVALID_INTENT_AMOUNT_RANGE", "INVALID_PAYOUT_CURRENCIES", "INVALID_PAYOUT_PLATFORMS", "INVALID_REFERRAL_CODE", "ACTIVE_INTENT_BLOCKS_WITHDRAWAL", "NOTHING_TO_WITHDRAW", "INSUFFICIENT_AVAILABLE_FUNDS", "INSUFFICIENT_TOKEN_BALANCE", "ORDER_NOT_ACTIVE", "INVALID_DEPOSIT_ID", "ESCROW_PAUSED", "INDEXER_LAG", "INDEXER_UNAVAILABLE", "ORDER_NOT_FOUND", "PAYEE_REGISTRATION_FAILED", "PAYEE_VERIFICATION_REQUIRED", "SOURCE_ROUTE_UNSUPPORTED_IN_PREPARE", "SOURCE_RECIPIENT_MISMATCH", "SOURCE_CAPABILITIES_FAILED", "SOURCE_QUOTE_FAILED", "SOURCE_NONCE_MANAGER_REQUIRED", "SOURCE_EXECUTION_FAILED", "SOURCE_STATUS_FAILED", "SOURCE_ROUTE_COMPLETED_CASHOUT_FAILED", "SOURCE_CASHOUT_SUBMISSION_UNKNOWN", "SOURCE_CASHOUT_STATUS_UNKNOWN", "DEPOSIT_RESOLUTION_FAILED", "ALLOWANCE_NOT_VISIBLE", "SIGNER_REQUIRED", "SIGNER_CHAIN_MISMATCH", "SIGNER_CHAIN_UNAVAILABLE", "WATCH_TIMEOUT", "TRANSACTION_REJECTED", "TRANSACTION_FAILED", "TRANSACTION_SUBMISSION_UNKNOWN", "TRANSACTION_STATUS_UNKNOWN"]>;
3216
+ code: z.ZodEnum<["ORACLE_UNSUPPORTED_CURRENCY", "ORACLE_READ_FAILED", "UNSUPPORTED_PLATFORM", "UNSUPPORTED_PLATFORM_CURRENCY", "AMOUNT_BELOW_MINIMUM", "INVALID_INTENT_AMOUNT_RANGE", "INVALID_PAYOUT_CURRENCIES", "INVALID_PAYOUT_PLATFORMS", "INVALID_REFERRAL_CODE", "ACTIVE_INTENT_BLOCKS_WITHDRAWAL", "NOTHING_TO_WITHDRAW", "INSUFFICIENT_AVAILABLE_FUNDS", "INSUFFICIENT_TOKEN_BALANCE", "ORDER_NOT_ACTIVE", "INVALID_DEPOSIT_ID", "ESCROW_PAUSED", "INDEXER_LAG", "INDEXER_UNAVAILABLE", "ORDER_NOT_FOUND", "PAYEE_REGISTRATION_FAILED", "PAYEE_VERIFICATION_REQUIRED", "SOURCE_ROUTE_UNSUPPORTED_IN_PREPARE", "SOURCE_RECIPIENT_MISMATCH", "SOURCE_CAPABILITIES_FAILED", "SOURCE_QUOTE_FAILED", "SOURCE_NONCE_MANAGER_REQUIRED", "SOURCE_EXECUTION_FAILED", "SOURCE_STATUS_FAILED", "SOURCE_ROUTE_COMPLETED_CASHOUT_FAILED", "SOURCE_CASHOUT_SUBMISSION_UNKNOWN", "SOURCE_CASHOUT_STATUS_UNKNOWN", "DEPOSIT_RESOLUTION_FAILED", "ACCESS_POLICY_CONFIGURATION_FAILED", "ALLOWANCE_NOT_VISIBLE", "SIGNER_REQUIRED", "SIGNER_CHAIN_MISMATCH", "SIGNER_CHAIN_UNAVAILABLE", "WATCH_TIMEOUT", "TRANSACTION_REJECTED", "TRANSACTION_FAILED", "TRANSACTION_SUBMISSION_UNKNOWN", "TRANSACTION_STATUS_UNKNOWN"]>;
3190
3217
  message: z.ZodString;
3191
3218
  retryable: z.ZodBoolean;
3192
3219
  remediation: z.ZodString;
@@ -3570,10 +3597,25 @@ declare const cashErrorJsonSchema: z.ZodObject<{
3570
3597
  kind: "inspect-base-transaction";
3571
3598
  transactionHash: string;
3572
3599
  operation: string;
3600
+ }>, z.ZodObject<{
3601
+ kind: z.ZodLiteral<"configure-cashout-access-policy">;
3602
+ depositId: z.ZodString;
3603
+ groupIds: z.ZodArray<z.ZodString, "many">;
3604
+ transactionHash: z.ZodOptional<z.ZodString>;
3605
+ }, "strict", z.ZodTypeAny, {
3606
+ depositId: string;
3607
+ kind: "configure-cashout-access-policy";
3608
+ groupIds: string[];
3609
+ transactionHash?: string | undefined;
3610
+ }, {
3611
+ depositId: string;
3612
+ kind: "configure-cashout-access-policy";
3613
+ groupIds: string[];
3614
+ transactionHash?: string | undefined;
3573
3615
  }>]>>;
3574
3616
  }, "strict", z.ZodTypeAny, {
3575
3617
  message: string;
3576
- code: "ORACLE_UNSUPPORTED_CURRENCY" | "ORACLE_READ_FAILED" | "UNSUPPORTED_PLATFORM" | "UNSUPPORTED_PLATFORM_CURRENCY" | "AMOUNT_BELOW_MINIMUM" | "INVALID_INTENT_AMOUNT_RANGE" | "INVALID_PAYOUT_CURRENCIES" | "INVALID_PAYOUT_PLATFORMS" | "INVALID_REFERRAL_CODE" | "ACTIVE_INTENT_BLOCKS_WITHDRAWAL" | "NOTHING_TO_WITHDRAW" | "INSUFFICIENT_AVAILABLE_FUNDS" | "INSUFFICIENT_TOKEN_BALANCE" | "ORDER_NOT_ACTIVE" | "INVALID_DEPOSIT_ID" | "ESCROW_PAUSED" | "INDEXER_LAG" | "INDEXER_UNAVAILABLE" | "ORDER_NOT_FOUND" | "PAYEE_REGISTRATION_FAILED" | "PAYEE_VERIFICATION_REQUIRED" | "SOURCE_ROUTE_UNSUPPORTED_IN_PREPARE" | "SOURCE_RECIPIENT_MISMATCH" | "SOURCE_CAPABILITIES_FAILED" | "SOURCE_QUOTE_FAILED" | "SOURCE_NONCE_MANAGER_REQUIRED" | "SOURCE_EXECUTION_FAILED" | "SOURCE_STATUS_FAILED" | "SOURCE_ROUTE_COMPLETED_CASHOUT_FAILED" | "SOURCE_CASHOUT_SUBMISSION_UNKNOWN" | "SOURCE_CASHOUT_STATUS_UNKNOWN" | "DEPOSIT_RESOLUTION_FAILED" | "ALLOWANCE_NOT_VISIBLE" | "SIGNER_REQUIRED" | "SIGNER_CHAIN_MISMATCH" | "SIGNER_CHAIN_UNAVAILABLE" | "WATCH_TIMEOUT" | "TRANSACTION_REJECTED" | "TRANSACTION_FAILED" | "TRANSACTION_SUBMISSION_UNKNOWN" | "TRANSACTION_STATUS_UNKNOWN";
3618
+ code: "ORACLE_UNSUPPORTED_CURRENCY" | "ORACLE_READ_FAILED" | "UNSUPPORTED_PLATFORM" | "UNSUPPORTED_PLATFORM_CURRENCY" | "AMOUNT_BELOW_MINIMUM" | "INVALID_INTENT_AMOUNT_RANGE" | "INVALID_PAYOUT_CURRENCIES" | "INVALID_PAYOUT_PLATFORMS" | "INVALID_REFERRAL_CODE" | "ACTIVE_INTENT_BLOCKS_WITHDRAWAL" | "NOTHING_TO_WITHDRAW" | "INSUFFICIENT_AVAILABLE_FUNDS" | "INSUFFICIENT_TOKEN_BALANCE" | "ORDER_NOT_ACTIVE" | "INVALID_DEPOSIT_ID" | "ESCROW_PAUSED" | "INDEXER_LAG" | "INDEXER_UNAVAILABLE" | "ORDER_NOT_FOUND" | "PAYEE_REGISTRATION_FAILED" | "PAYEE_VERIFICATION_REQUIRED" | "SOURCE_ROUTE_UNSUPPORTED_IN_PREPARE" | "SOURCE_RECIPIENT_MISMATCH" | "SOURCE_CAPABILITIES_FAILED" | "SOURCE_QUOTE_FAILED" | "SOURCE_NONCE_MANAGER_REQUIRED" | "SOURCE_EXECUTION_FAILED" | "SOURCE_STATUS_FAILED" | "SOURCE_ROUTE_COMPLETED_CASHOUT_FAILED" | "SOURCE_CASHOUT_SUBMISSION_UNKNOWN" | "SOURCE_CASHOUT_STATUS_UNKNOWN" | "DEPOSIT_RESOLUTION_FAILED" | "ACCESS_POLICY_CONFIGURATION_FAILED" | "ALLOWANCE_NOT_VISIBLE" | "SIGNER_REQUIRED" | "SIGNER_CHAIN_MISMATCH" | "SIGNER_CHAIN_UNAVAILABLE" | "WATCH_TIMEOUT" | "TRANSACTION_REJECTED" | "TRANSACTION_FAILED" | "TRANSACTION_SUBMISSION_UNKNOWN" | "TRANSACTION_STATUS_UNKNOWN";
3577
3619
  retryable: boolean;
3578
3620
  remediation: string;
3579
3621
  recovery?: {
@@ -3652,10 +3694,15 @@ declare const cashErrorJsonSchema: z.ZodObject<{
3652
3694
  kind: "inspect-base-transaction";
3653
3695
  transactionHash: string;
3654
3696
  operation: string;
3697
+ } | {
3698
+ depositId: string;
3699
+ kind: "configure-cashout-access-policy";
3700
+ groupIds: string[];
3701
+ transactionHash?: string | undefined;
3655
3702
  } | undefined;
3656
3703
  }, {
3657
3704
  message: string;
3658
- code: "ORACLE_UNSUPPORTED_CURRENCY" | "ORACLE_READ_FAILED" | "UNSUPPORTED_PLATFORM" | "UNSUPPORTED_PLATFORM_CURRENCY" | "AMOUNT_BELOW_MINIMUM" | "INVALID_INTENT_AMOUNT_RANGE" | "INVALID_PAYOUT_CURRENCIES" | "INVALID_PAYOUT_PLATFORMS" | "INVALID_REFERRAL_CODE" | "ACTIVE_INTENT_BLOCKS_WITHDRAWAL" | "NOTHING_TO_WITHDRAW" | "INSUFFICIENT_AVAILABLE_FUNDS" | "INSUFFICIENT_TOKEN_BALANCE" | "ORDER_NOT_ACTIVE" | "INVALID_DEPOSIT_ID" | "ESCROW_PAUSED" | "INDEXER_LAG" | "INDEXER_UNAVAILABLE" | "ORDER_NOT_FOUND" | "PAYEE_REGISTRATION_FAILED" | "PAYEE_VERIFICATION_REQUIRED" | "SOURCE_ROUTE_UNSUPPORTED_IN_PREPARE" | "SOURCE_RECIPIENT_MISMATCH" | "SOURCE_CAPABILITIES_FAILED" | "SOURCE_QUOTE_FAILED" | "SOURCE_NONCE_MANAGER_REQUIRED" | "SOURCE_EXECUTION_FAILED" | "SOURCE_STATUS_FAILED" | "SOURCE_ROUTE_COMPLETED_CASHOUT_FAILED" | "SOURCE_CASHOUT_SUBMISSION_UNKNOWN" | "SOURCE_CASHOUT_STATUS_UNKNOWN" | "DEPOSIT_RESOLUTION_FAILED" | "ALLOWANCE_NOT_VISIBLE" | "SIGNER_REQUIRED" | "SIGNER_CHAIN_MISMATCH" | "SIGNER_CHAIN_UNAVAILABLE" | "WATCH_TIMEOUT" | "TRANSACTION_REJECTED" | "TRANSACTION_FAILED" | "TRANSACTION_SUBMISSION_UNKNOWN" | "TRANSACTION_STATUS_UNKNOWN";
3705
+ code: "ORACLE_UNSUPPORTED_CURRENCY" | "ORACLE_READ_FAILED" | "UNSUPPORTED_PLATFORM" | "UNSUPPORTED_PLATFORM_CURRENCY" | "AMOUNT_BELOW_MINIMUM" | "INVALID_INTENT_AMOUNT_RANGE" | "INVALID_PAYOUT_CURRENCIES" | "INVALID_PAYOUT_PLATFORMS" | "INVALID_REFERRAL_CODE" | "ACTIVE_INTENT_BLOCKS_WITHDRAWAL" | "NOTHING_TO_WITHDRAW" | "INSUFFICIENT_AVAILABLE_FUNDS" | "INSUFFICIENT_TOKEN_BALANCE" | "ORDER_NOT_ACTIVE" | "INVALID_DEPOSIT_ID" | "ESCROW_PAUSED" | "INDEXER_LAG" | "INDEXER_UNAVAILABLE" | "ORDER_NOT_FOUND" | "PAYEE_REGISTRATION_FAILED" | "PAYEE_VERIFICATION_REQUIRED" | "SOURCE_ROUTE_UNSUPPORTED_IN_PREPARE" | "SOURCE_RECIPIENT_MISMATCH" | "SOURCE_CAPABILITIES_FAILED" | "SOURCE_QUOTE_FAILED" | "SOURCE_NONCE_MANAGER_REQUIRED" | "SOURCE_EXECUTION_FAILED" | "SOURCE_STATUS_FAILED" | "SOURCE_ROUTE_COMPLETED_CASHOUT_FAILED" | "SOURCE_CASHOUT_SUBMISSION_UNKNOWN" | "SOURCE_CASHOUT_STATUS_UNKNOWN" | "DEPOSIT_RESOLUTION_FAILED" | "ACCESS_POLICY_CONFIGURATION_FAILED" | "ALLOWANCE_NOT_VISIBLE" | "SIGNER_REQUIRED" | "SIGNER_CHAIN_MISMATCH" | "SIGNER_CHAIN_UNAVAILABLE" | "WATCH_TIMEOUT" | "TRANSACTION_REJECTED" | "TRANSACTION_FAILED" | "TRANSACTION_SUBMISSION_UNKNOWN" | "TRANSACTION_STATUS_UNKNOWN";
3659
3706
  retryable: boolean;
3660
3707
  remediation: string;
3661
3708
  recovery?: {
@@ -3734,6 +3781,11 @@ declare const cashErrorJsonSchema: z.ZodObject<{
3734
3781
  kind: "inspect-base-transaction";
3735
3782
  transactionHash: string;
3736
3783
  operation: string;
3784
+ } | {
3785
+ depositId: string;
3786
+ kind: "configure-cashout-access-policy";
3787
+ groupIds: string[];
3788
+ transactionHash?: string | undefined;
3737
3789
  } | undefined;
3738
3790
  }>;
3739
3791
  type CashOrderJson = z.infer<typeof cashOrderJsonSchema>;
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { I as IntentStatus, C as CashPayoutInfo, a as IntentEntity, b as CashBuyerProfile, c as CashDepositInput, d as CreateDepositParamsArg, e as CashOrder, f as CashFill, g as CashCapabilities, h as CashoutResult, i as CashEstimate, j as CashFillStats, P as PrepareResult, k as CashPreparedStep, R as RelayExecutionResult, l as RelayQuote, m as RelayStatus, n as CashSourceCapabilities, T as TopUpResult, W as WithdrawResult } from './createCashClient-CYSM84-K.js';
2
- export { o as CASH_ATTRIBUTION_CODE, p as CASH_REFERRAL_ATTRIBUTION_PREFIX, q as CashAsset, r as CashChain, s as CashClient, t as CashClientOptions, u as CashFillEta, v as CashLeg, w as CashMultiCurrencyLeg, x as CashNextAction, y as CashOrderState, z as CashPairFillStats, A as CashPayeeInput, B as CashPayout, D as CashPayoutPricing, E as CashPlatformCapability, F as CashPreparedStepKind, G as CashReceiveLeg, H as CashoutInput, J as CashoutOptions, K as CuratorPayeeDataInput, L as EstimateInput, M as EstimateOptions, N as MIN_CASHOUT_AMOUNT, O as OrdersOptions, Q as PreparedCashoutReceipt, S as RECOMMENDED_MIN_CASHOUT_AMOUNT, U as RelayOptions, V as RelayQuoteInput, X as RelaySourceInput, Y as RelayTransaction, Z as SignerOptions, _ as WatchOptions, $ as WithdrawOptions, a0 as buildCapabilities, a1 as createCashClient, a2 as normalizeCashPayee, a3 as toCashReferralAttributionCode } from './createCashClient-CYSM84-K.js';
1
+ import { I as IntentStatus, C as CashPayoutInfo, a as IntentEntity, b as CashBuyerProfile, c as CashDepositInput, d as CreateDepositParamsArg, e as CashOrder, f as CashFill, g as CashCapabilities, h as CashoutResult, i as CashEstimate, j as CashFillStats, P as PrepareResult, k as CashPreparedStep, R as RelayExecutionResult, l as RelayQuote, m as RelayStatus, n as CashSourceCapabilities, T as TopUpResult, W as WithdrawResult } from './createCashClient-C5YKh7cv.js';
2
+ export { o as CASH_ATTRIBUTION_CODE, p as CASH_REFERRAL_ATTRIBUTION_PREFIX, q as CashAsset, r as CashChain, s as CashClient, t as CashClientOptions, u as CashFillEta, v as CashLeg, w as CashMultiCurrencyLeg, x as CashNextAction, y as CashOrderState, z as CashPairFillStats, A as CashPayeeInput, B as CashPayout, D as CashPayoutPricing, E as CashPlatformCapability, F as CashPreparedStepKind, G as CashReceiveLeg, H as CashoutInput, J as CashoutOptions, K as CuratorPayeeDataInput, L as EstimateInput, M as EstimateOptions, N as MIN_CASHOUT_AMOUNT, O as OrdersOptions, Q as PreparedCashoutReceipt, S as RECOMMENDED_MIN_CASHOUT_AMOUNT, U as RelayOptions, V as RelayQuoteInput, X as RelaySourceInput, Y as RelayTransaction, Z as SignerOptions, _ as WatchOptions, $ as WithdrawOptions, a0 as buildCapabilities, a1 as createCashClient, a2 as normalizeCashPayee, a3 as toCashReferralAttributionCode } from './createCashClient-C5YKh7cv.js';
3
3
  import { PaymentMethodCatalog, CurrencyType, OracleAdapterOverrides, OnchainCurrency, Zkp2pClient, PreparedTransaction } from '@zkp2p/sdk';
4
4
  export { CurrencyType, PreparedTransaction, RuntimeEnv } from '@zkp2p/sdk';
5
5
  import { Log, Abi } from 'viem';
@@ -10,7 +10,7 @@ import '@relayprotocol/relay-sdk';
10
10
  * Typed errors - every failure carries a `code`, whether it is `retryable`,
11
11
  * and a `remediation` sentence so agents can self-drive recovery.
12
12
  */
13
- type CashErrorCode = 'ORACLE_UNSUPPORTED_CURRENCY' | 'ORACLE_READ_FAILED' | 'UNSUPPORTED_PLATFORM' | 'UNSUPPORTED_PLATFORM_CURRENCY' | 'AMOUNT_BELOW_MINIMUM' | 'INVALID_INTENT_AMOUNT_RANGE' | 'INVALID_PAYOUT_CURRENCIES' | 'INVALID_PAYOUT_PLATFORMS' | 'INVALID_REFERRAL_CODE' | 'ACTIVE_INTENT_BLOCKS_WITHDRAWAL' | 'NOTHING_TO_WITHDRAW' | 'INSUFFICIENT_AVAILABLE_FUNDS' | 'INSUFFICIENT_TOKEN_BALANCE' | 'ORDER_NOT_ACTIVE' | 'INVALID_DEPOSIT_ID' | 'ESCROW_PAUSED' | 'INDEXER_LAG' | 'INDEXER_UNAVAILABLE' | 'ORDER_NOT_FOUND' | 'PAYEE_REGISTRATION_FAILED' | 'PAYEE_VERIFICATION_REQUIRED' | 'SOURCE_ROUTE_UNSUPPORTED_IN_PREPARE' | 'SOURCE_RECIPIENT_MISMATCH' | 'SOURCE_CAPABILITIES_FAILED' | 'SOURCE_QUOTE_FAILED' | 'SOURCE_NONCE_MANAGER_REQUIRED' | 'SOURCE_EXECUTION_FAILED' | 'SOURCE_STATUS_FAILED' | 'SOURCE_ROUTE_COMPLETED_CASHOUT_FAILED' | 'SOURCE_CASHOUT_SUBMISSION_UNKNOWN' | 'SOURCE_CASHOUT_STATUS_UNKNOWN' | 'DEPOSIT_RESOLUTION_FAILED' | 'ALLOWANCE_NOT_VISIBLE' | 'SIGNER_REQUIRED' | 'SIGNER_CHAIN_MISMATCH' | 'SIGNER_CHAIN_UNAVAILABLE' | 'WATCH_TIMEOUT' | 'TRANSACTION_REJECTED' | 'TRANSACTION_FAILED' | 'TRANSACTION_SUBMISSION_UNKNOWN' | 'TRANSACTION_STATUS_UNKNOWN';
13
+ type CashErrorCode = 'ORACLE_UNSUPPORTED_CURRENCY' | 'ORACLE_READ_FAILED' | 'UNSUPPORTED_PLATFORM' | 'UNSUPPORTED_PLATFORM_CURRENCY' | 'AMOUNT_BELOW_MINIMUM' | 'INVALID_INTENT_AMOUNT_RANGE' | 'INVALID_PAYOUT_CURRENCIES' | 'INVALID_PAYOUT_PLATFORMS' | 'INVALID_REFERRAL_CODE' | 'ACTIVE_INTENT_BLOCKS_WITHDRAWAL' | 'NOTHING_TO_WITHDRAW' | 'INSUFFICIENT_AVAILABLE_FUNDS' | 'INSUFFICIENT_TOKEN_BALANCE' | 'ORDER_NOT_ACTIVE' | 'INVALID_DEPOSIT_ID' | 'ESCROW_PAUSED' | 'INDEXER_LAG' | 'INDEXER_UNAVAILABLE' | 'ORDER_NOT_FOUND' | 'PAYEE_REGISTRATION_FAILED' | 'PAYEE_VERIFICATION_REQUIRED' | 'SOURCE_ROUTE_UNSUPPORTED_IN_PREPARE' | 'SOURCE_RECIPIENT_MISMATCH' | 'SOURCE_CAPABILITIES_FAILED' | 'SOURCE_QUOTE_FAILED' | 'SOURCE_NONCE_MANAGER_REQUIRED' | 'SOURCE_EXECUTION_FAILED' | 'SOURCE_STATUS_FAILED' | 'SOURCE_ROUTE_COMPLETED_CASHOUT_FAILED' | 'SOURCE_CASHOUT_SUBMISSION_UNKNOWN' | 'SOURCE_CASHOUT_STATUS_UNKNOWN' | 'DEPOSIT_RESOLUTION_FAILED' | 'ACCESS_POLICY_CONFIGURATION_FAILED' | 'ALLOWANCE_NOT_VISIBLE' | 'SIGNER_REQUIRED' | 'SIGNER_CHAIN_MISMATCH' | 'SIGNER_CHAIN_UNAVAILABLE' | 'WATCH_TIMEOUT' | 'TRANSACTION_REJECTED' | 'TRANSACTION_FAILED' | 'TRANSACTION_SUBMISSION_UNKNOWN' | 'TRANSACTION_STATUS_UNKNOWN';
14
14
  interface CashErrorShape {
15
15
  code: CashErrorCode;
16
16
  message: string;
@@ -56,6 +56,11 @@ type CashErrorRecovery = (CashSourceRecoveryBase & {
56
56
  kind: 'inspect-base-transaction';
57
57
  transactionHash: string;
58
58
  operation: string;
59
+ } | {
60
+ kind: 'configure-cashout-access-policy';
61
+ depositId: string;
62
+ groupIds: string[];
63
+ transactionHash?: string;
59
64
  };
60
65
  declare class CashError extends Error implements CashErrorShape {
61
66
  readonly code: CashErrorCode;
@@ -130,6 +135,7 @@ declare const errors: {
130
135
  transactionRejected: (verb: string, cause?: unknown) => CashError;
131
136
  transactionSubmissionUnknown: (operation: string, cause?: unknown, recovery?: CashErrorRecovery) => CashError;
132
137
  transactionStatusUnknown: (txHash: string, cause?: unknown, operation?: string) => CashError;
138
+ accessPolicyConfigurationFailed: (depositId: string, groupIds: readonly string[], cause?: unknown, transactionHash?: string) => CashError;
133
139
  escrowPaused: () => CashError;
134
140
  /** Generic fallback for an on-chain call that failed for an unrecognized reason. */
135
141
  chainCallFailed: (verb: string, cause?: unknown) => CashError;
@@ -1994,6 +2000,7 @@ declare const cashoutResultJsonSchema: z.ZodObject<{
1994
2000
  intentCount?: number | undefined;
1995
2001
  withdrawn?: boolean | undefined;
1996
2002
  }>;
2003
+ accessPolicyTxHash: z.ZodOptional<z.ZodString>;
1997
2004
  source: z.ZodOptional<z.ZodObject<{
1998
2005
  amount: z.ZodString;
1999
2006
  requestId: z.ZodOptional<z.ZodString>;
@@ -2158,6 +2165,7 @@ declare const cashoutResultJsonSchema: z.ZodObject<{
2158
2165
  } | undefined;
2159
2166
  requestId?: string | undefined;
2160
2167
  } | undefined;
2168
+ accessPolicyTxHash?: string | undefined;
2161
2169
  }, {
2162
2170
  depositId: string;
2163
2171
  escrowAddress: string;
@@ -2235,6 +2243,7 @@ declare const cashoutResultJsonSchema: z.ZodObject<{
2235
2243
  } | undefined;
2236
2244
  requestId?: string | undefined;
2237
2245
  } | undefined;
2246
+ accessPolicyTxHash?: string | undefined;
2238
2247
  }>;
2239
2248
  declare const prepareResultJsonSchema: z.ZodObject<{
2240
2249
  txs: z.ZodArray<z.ZodObject<{
@@ -2270,6 +2279,7 @@ declare const prepareResultJsonSchema: z.ZodObject<{
2270
2279
  }, {
2271
2280
  hashedOnchainIds: string[];
2272
2281
  }>;
2282
+ accessPolicyRequired: z.ZodBoolean;
2273
2283
  }, "strip", z.ZodTypeAny, {
2274
2284
  steps: {
2275
2285
  kind: "createDeposit" | "approve" | "pruneExpiredIntents" | "withdrawDeposit" | "removeFunds" | "addFunds";
@@ -2284,6 +2294,7 @@ declare const prepareResultJsonSchema: z.ZodObject<{
2284
2294
  register: {
2285
2295
  hashedOnchainIds: string[];
2286
2296
  };
2297
+ accessPolicyRequired: boolean;
2287
2298
  }, {
2288
2299
  steps: {
2289
2300
  kind: "createDeposit" | "approve" | "pruneExpiredIntents" | "withdrawDeposit" | "removeFunds" | "addFunds";
@@ -2298,6 +2309,7 @@ declare const prepareResultJsonSchema: z.ZodObject<{
2298
2309
  register: {
2299
2310
  hashedOnchainIds: string[];
2300
2311
  };
2312
+ accessPolicyRequired: boolean;
2301
2313
  }>;
2302
2314
  declare const withdrawResultJsonSchema: z.ZodObject<{
2303
2315
  depositId: z.ZodString;
@@ -3184,9 +3196,24 @@ declare const cashErrorRecoveryJsonSchema: z.ZodDiscriminatedUnion<"kind", [z.Zo
3184
3196
  kind: "inspect-base-transaction";
3185
3197
  transactionHash: string;
3186
3198
  operation: string;
3199
+ }>, z.ZodObject<{
3200
+ kind: z.ZodLiteral<"configure-cashout-access-policy">;
3201
+ depositId: z.ZodString;
3202
+ groupIds: z.ZodArray<z.ZodString, "many">;
3203
+ transactionHash: z.ZodOptional<z.ZodString>;
3204
+ }, "strict", z.ZodTypeAny, {
3205
+ depositId: string;
3206
+ kind: "configure-cashout-access-policy";
3207
+ groupIds: string[];
3208
+ transactionHash?: string | undefined;
3209
+ }, {
3210
+ depositId: string;
3211
+ kind: "configure-cashout-access-policy";
3212
+ groupIds: string[];
3213
+ transactionHash?: string | undefined;
3187
3214
  }>]>;
3188
3215
  declare const cashErrorJsonSchema: z.ZodObject<{
3189
- code: z.ZodEnum<["ORACLE_UNSUPPORTED_CURRENCY", "ORACLE_READ_FAILED", "UNSUPPORTED_PLATFORM", "UNSUPPORTED_PLATFORM_CURRENCY", "AMOUNT_BELOW_MINIMUM", "INVALID_INTENT_AMOUNT_RANGE", "INVALID_PAYOUT_CURRENCIES", "INVALID_PAYOUT_PLATFORMS", "INVALID_REFERRAL_CODE", "ACTIVE_INTENT_BLOCKS_WITHDRAWAL", "NOTHING_TO_WITHDRAW", "INSUFFICIENT_AVAILABLE_FUNDS", "INSUFFICIENT_TOKEN_BALANCE", "ORDER_NOT_ACTIVE", "INVALID_DEPOSIT_ID", "ESCROW_PAUSED", "INDEXER_LAG", "INDEXER_UNAVAILABLE", "ORDER_NOT_FOUND", "PAYEE_REGISTRATION_FAILED", "PAYEE_VERIFICATION_REQUIRED", "SOURCE_ROUTE_UNSUPPORTED_IN_PREPARE", "SOURCE_RECIPIENT_MISMATCH", "SOURCE_CAPABILITIES_FAILED", "SOURCE_QUOTE_FAILED", "SOURCE_NONCE_MANAGER_REQUIRED", "SOURCE_EXECUTION_FAILED", "SOURCE_STATUS_FAILED", "SOURCE_ROUTE_COMPLETED_CASHOUT_FAILED", "SOURCE_CASHOUT_SUBMISSION_UNKNOWN", "SOURCE_CASHOUT_STATUS_UNKNOWN", "DEPOSIT_RESOLUTION_FAILED", "ALLOWANCE_NOT_VISIBLE", "SIGNER_REQUIRED", "SIGNER_CHAIN_MISMATCH", "SIGNER_CHAIN_UNAVAILABLE", "WATCH_TIMEOUT", "TRANSACTION_REJECTED", "TRANSACTION_FAILED", "TRANSACTION_SUBMISSION_UNKNOWN", "TRANSACTION_STATUS_UNKNOWN"]>;
3216
+ code: z.ZodEnum<["ORACLE_UNSUPPORTED_CURRENCY", "ORACLE_READ_FAILED", "UNSUPPORTED_PLATFORM", "UNSUPPORTED_PLATFORM_CURRENCY", "AMOUNT_BELOW_MINIMUM", "INVALID_INTENT_AMOUNT_RANGE", "INVALID_PAYOUT_CURRENCIES", "INVALID_PAYOUT_PLATFORMS", "INVALID_REFERRAL_CODE", "ACTIVE_INTENT_BLOCKS_WITHDRAWAL", "NOTHING_TO_WITHDRAW", "INSUFFICIENT_AVAILABLE_FUNDS", "INSUFFICIENT_TOKEN_BALANCE", "ORDER_NOT_ACTIVE", "INVALID_DEPOSIT_ID", "ESCROW_PAUSED", "INDEXER_LAG", "INDEXER_UNAVAILABLE", "ORDER_NOT_FOUND", "PAYEE_REGISTRATION_FAILED", "PAYEE_VERIFICATION_REQUIRED", "SOURCE_ROUTE_UNSUPPORTED_IN_PREPARE", "SOURCE_RECIPIENT_MISMATCH", "SOURCE_CAPABILITIES_FAILED", "SOURCE_QUOTE_FAILED", "SOURCE_NONCE_MANAGER_REQUIRED", "SOURCE_EXECUTION_FAILED", "SOURCE_STATUS_FAILED", "SOURCE_ROUTE_COMPLETED_CASHOUT_FAILED", "SOURCE_CASHOUT_SUBMISSION_UNKNOWN", "SOURCE_CASHOUT_STATUS_UNKNOWN", "DEPOSIT_RESOLUTION_FAILED", "ACCESS_POLICY_CONFIGURATION_FAILED", "ALLOWANCE_NOT_VISIBLE", "SIGNER_REQUIRED", "SIGNER_CHAIN_MISMATCH", "SIGNER_CHAIN_UNAVAILABLE", "WATCH_TIMEOUT", "TRANSACTION_REJECTED", "TRANSACTION_FAILED", "TRANSACTION_SUBMISSION_UNKNOWN", "TRANSACTION_STATUS_UNKNOWN"]>;
3190
3217
  message: z.ZodString;
3191
3218
  retryable: z.ZodBoolean;
3192
3219
  remediation: z.ZodString;
@@ -3570,10 +3597,25 @@ declare const cashErrorJsonSchema: z.ZodObject<{
3570
3597
  kind: "inspect-base-transaction";
3571
3598
  transactionHash: string;
3572
3599
  operation: string;
3600
+ }>, z.ZodObject<{
3601
+ kind: z.ZodLiteral<"configure-cashout-access-policy">;
3602
+ depositId: z.ZodString;
3603
+ groupIds: z.ZodArray<z.ZodString, "many">;
3604
+ transactionHash: z.ZodOptional<z.ZodString>;
3605
+ }, "strict", z.ZodTypeAny, {
3606
+ depositId: string;
3607
+ kind: "configure-cashout-access-policy";
3608
+ groupIds: string[];
3609
+ transactionHash?: string | undefined;
3610
+ }, {
3611
+ depositId: string;
3612
+ kind: "configure-cashout-access-policy";
3613
+ groupIds: string[];
3614
+ transactionHash?: string | undefined;
3573
3615
  }>]>>;
3574
3616
  }, "strict", z.ZodTypeAny, {
3575
3617
  message: string;
3576
- code: "ORACLE_UNSUPPORTED_CURRENCY" | "ORACLE_READ_FAILED" | "UNSUPPORTED_PLATFORM" | "UNSUPPORTED_PLATFORM_CURRENCY" | "AMOUNT_BELOW_MINIMUM" | "INVALID_INTENT_AMOUNT_RANGE" | "INVALID_PAYOUT_CURRENCIES" | "INVALID_PAYOUT_PLATFORMS" | "INVALID_REFERRAL_CODE" | "ACTIVE_INTENT_BLOCKS_WITHDRAWAL" | "NOTHING_TO_WITHDRAW" | "INSUFFICIENT_AVAILABLE_FUNDS" | "INSUFFICIENT_TOKEN_BALANCE" | "ORDER_NOT_ACTIVE" | "INVALID_DEPOSIT_ID" | "ESCROW_PAUSED" | "INDEXER_LAG" | "INDEXER_UNAVAILABLE" | "ORDER_NOT_FOUND" | "PAYEE_REGISTRATION_FAILED" | "PAYEE_VERIFICATION_REQUIRED" | "SOURCE_ROUTE_UNSUPPORTED_IN_PREPARE" | "SOURCE_RECIPIENT_MISMATCH" | "SOURCE_CAPABILITIES_FAILED" | "SOURCE_QUOTE_FAILED" | "SOURCE_NONCE_MANAGER_REQUIRED" | "SOURCE_EXECUTION_FAILED" | "SOURCE_STATUS_FAILED" | "SOURCE_ROUTE_COMPLETED_CASHOUT_FAILED" | "SOURCE_CASHOUT_SUBMISSION_UNKNOWN" | "SOURCE_CASHOUT_STATUS_UNKNOWN" | "DEPOSIT_RESOLUTION_FAILED" | "ALLOWANCE_NOT_VISIBLE" | "SIGNER_REQUIRED" | "SIGNER_CHAIN_MISMATCH" | "SIGNER_CHAIN_UNAVAILABLE" | "WATCH_TIMEOUT" | "TRANSACTION_REJECTED" | "TRANSACTION_FAILED" | "TRANSACTION_SUBMISSION_UNKNOWN" | "TRANSACTION_STATUS_UNKNOWN";
3618
+ code: "ORACLE_UNSUPPORTED_CURRENCY" | "ORACLE_READ_FAILED" | "UNSUPPORTED_PLATFORM" | "UNSUPPORTED_PLATFORM_CURRENCY" | "AMOUNT_BELOW_MINIMUM" | "INVALID_INTENT_AMOUNT_RANGE" | "INVALID_PAYOUT_CURRENCIES" | "INVALID_PAYOUT_PLATFORMS" | "INVALID_REFERRAL_CODE" | "ACTIVE_INTENT_BLOCKS_WITHDRAWAL" | "NOTHING_TO_WITHDRAW" | "INSUFFICIENT_AVAILABLE_FUNDS" | "INSUFFICIENT_TOKEN_BALANCE" | "ORDER_NOT_ACTIVE" | "INVALID_DEPOSIT_ID" | "ESCROW_PAUSED" | "INDEXER_LAG" | "INDEXER_UNAVAILABLE" | "ORDER_NOT_FOUND" | "PAYEE_REGISTRATION_FAILED" | "PAYEE_VERIFICATION_REQUIRED" | "SOURCE_ROUTE_UNSUPPORTED_IN_PREPARE" | "SOURCE_RECIPIENT_MISMATCH" | "SOURCE_CAPABILITIES_FAILED" | "SOURCE_QUOTE_FAILED" | "SOURCE_NONCE_MANAGER_REQUIRED" | "SOURCE_EXECUTION_FAILED" | "SOURCE_STATUS_FAILED" | "SOURCE_ROUTE_COMPLETED_CASHOUT_FAILED" | "SOURCE_CASHOUT_SUBMISSION_UNKNOWN" | "SOURCE_CASHOUT_STATUS_UNKNOWN" | "DEPOSIT_RESOLUTION_FAILED" | "ACCESS_POLICY_CONFIGURATION_FAILED" | "ALLOWANCE_NOT_VISIBLE" | "SIGNER_REQUIRED" | "SIGNER_CHAIN_MISMATCH" | "SIGNER_CHAIN_UNAVAILABLE" | "WATCH_TIMEOUT" | "TRANSACTION_REJECTED" | "TRANSACTION_FAILED" | "TRANSACTION_SUBMISSION_UNKNOWN" | "TRANSACTION_STATUS_UNKNOWN";
3577
3619
  retryable: boolean;
3578
3620
  remediation: string;
3579
3621
  recovery?: {
@@ -3652,10 +3694,15 @@ declare const cashErrorJsonSchema: z.ZodObject<{
3652
3694
  kind: "inspect-base-transaction";
3653
3695
  transactionHash: string;
3654
3696
  operation: string;
3697
+ } | {
3698
+ depositId: string;
3699
+ kind: "configure-cashout-access-policy";
3700
+ groupIds: string[];
3701
+ transactionHash?: string | undefined;
3655
3702
  } | undefined;
3656
3703
  }, {
3657
3704
  message: string;
3658
- code: "ORACLE_UNSUPPORTED_CURRENCY" | "ORACLE_READ_FAILED" | "UNSUPPORTED_PLATFORM" | "UNSUPPORTED_PLATFORM_CURRENCY" | "AMOUNT_BELOW_MINIMUM" | "INVALID_INTENT_AMOUNT_RANGE" | "INVALID_PAYOUT_CURRENCIES" | "INVALID_PAYOUT_PLATFORMS" | "INVALID_REFERRAL_CODE" | "ACTIVE_INTENT_BLOCKS_WITHDRAWAL" | "NOTHING_TO_WITHDRAW" | "INSUFFICIENT_AVAILABLE_FUNDS" | "INSUFFICIENT_TOKEN_BALANCE" | "ORDER_NOT_ACTIVE" | "INVALID_DEPOSIT_ID" | "ESCROW_PAUSED" | "INDEXER_LAG" | "INDEXER_UNAVAILABLE" | "ORDER_NOT_FOUND" | "PAYEE_REGISTRATION_FAILED" | "PAYEE_VERIFICATION_REQUIRED" | "SOURCE_ROUTE_UNSUPPORTED_IN_PREPARE" | "SOURCE_RECIPIENT_MISMATCH" | "SOURCE_CAPABILITIES_FAILED" | "SOURCE_QUOTE_FAILED" | "SOURCE_NONCE_MANAGER_REQUIRED" | "SOURCE_EXECUTION_FAILED" | "SOURCE_STATUS_FAILED" | "SOURCE_ROUTE_COMPLETED_CASHOUT_FAILED" | "SOURCE_CASHOUT_SUBMISSION_UNKNOWN" | "SOURCE_CASHOUT_STATUS_UNKNOWN" | "DEPOSIT_RESOLUTION_FAILED" | "ALLOWANCE_NOT_VISIBLE" | "SIGNER_REQUIRED" | "SIGNER_CHAIN_MISMATCH" | "SIGNER_CHAIN_UNAVAILABLE" | "WATCH_TIMEOUT" | "TRANSACTION_REJECTED" | "TRANSACTION_FAILED" | "TRANSACTION_SUBMISSION_UNKNOWN" | "TRANSACTION_STATUS_UNKNOWN";
3705
+ code: "ORACLE_UNSUPPORTED_CURRENCY" | "ORACLE_READ_FAILED" | "UNSUPPORTED_PLATFORM" | "UNSUPPORTED_PLATFORM_CURRENCY" | "AMOUNT_BELOW_MINIMUM" | "INVALID_INTENT_AMOUNT_RANGE" | "INVALID_PAYOUT_CURRENCIES" | "INVALID_PAYOUT_PLATFORMS" | "INVALID_REFERRAL_CODE" | "ACTIVE_INTENT_BLOCKS_WITHDRAWAL" | "NOTHING_TO_WITHDRAW" | "INSUFFICIENT_AVAILABLE_FUNDS" | "INSUFFICIENT_TOKEN_BALANCE" | "ORDER_NOT_ACTIVE" | "INVALID_DEPOSIT_ID" | "ESCROW_PAUSED" | "INDEXER_LAG" | "INDEXER_UNAVAILABLE" | "ORDER_NOT_FOUND" | "PAYEE_REGISTRATION_FAILED" | "PAYEE_VERIFICATION_REQUIRED" | "SOURCE_ROUTE_UNSUPPORTED_IN_PREPARE" | "SOURCE_RECIPIENT_MISMATCH" | "SOURCE_CAPABILITIES_FAILED" | "SOURCE_QUOTE_FAILED" | "SOURCE_NONCE_MANAGER_REQUIRED" | "SOURCE_EXECUTION_FAILED" | "SOURCE_STATUS_FAILED" | "SOURCE_ROUTE_COMPLETED_CASHOUT_FAILED" | "SOURCE_CASHOUT_SUBMISSION_UNKNOWN" | "SOURCE_CASHOUT_STATUS_UNKNOWN" | "DEPOSIT_RESOLUTION_FAILED" | "ACCESS_POLICY_CONFIGURATION_FAILED" | "ALLOWANCE_NOT_VISIBLE" | "SIGNER_REQUIRED" | "SIGNER_CHAIN_MISMATCH" | "SIGNER_CHAIN_UNAVAILABLE" | "WATCH_TIMEOUT" | "TRANSACTION_REJECTED" | "TRANSACTION_FAILED" | "TRANSACTION_SUBMISSION_UNKNOWN" | "TRANSACTION_STATUS_UNKNOWN";
3659
3706
  retryable: boolean;
3660
3707
  remediation: string;
3661
3708
  recovery?: {
@@ -3734,6 +3781,11 @@ declare const cashErrorJsonSchema: z.ZodObject<{
3734
3781
  kind: "inspect-base-transaction";
3735
3782
  transactionHash: string;
3736
3783
  operation: string;
3784
+ } | {
3785
+ depositId: string;
3786
+ kind: "configure-cashout-access-policy";
3787
+ groupIds: string[];
3788
+ transactionHash?: string | undefined;
3737
3789
  } | undefined;
3738
3790
  }>;
3739
3791
  type CashOrderJson = z.infer<typeof cashOrderJsonSchema>;
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import { MARKET_SPREAD_BPS, ORACLE_MIN_CONVERSION_RATE_SENTINEL, CASH_RETAIN_ON_EMPTY, BASE_USDC_ADDRESS, USDC_DECIMALS, BASE_CHAIN_ID, errors, isCashError, CASH_ORDER_STATUSES, mapChainError, CashError } from './chunk-EIEGWWNX.js';
2
- export { BASE_CHAIN_ID, BASE_USDC_ADDRESS, CASH_ORDER_POLL_INTERVAL_MS, CASH_ORDER_STATUSES, CASH_RETAIN_ON_EMPTY, CashError, MARKET_SPREAD_BPS, ORACLE_MIN_CONVERSION_RATE_SENTINEL, USDC_DECIMALS, errors, isCashError, isUserRejectedError } from './chunk-EIEGWWNX.js';
1
+ import { MARKET_SPREAD_BPS, ORACLE_MIN_CONVERSION_RATE_SENTINEL, CASH_RETAIN_ON_EMPTY, CASH_INTENT_GUARDIAN_ADDRESS, BASE_USDC_ADDRESS, USDC_DECIMALS, BASE_CHAIN_ID, errors, isCashError, CASH_ORDER_STATUSES, CASH_RESTRICTED_PLATFORMS, mapChainError, CashError, CASH_ACCESS_GROUP_IDS } from './chunk-ORCJKOT6.js';
2
+ export { BASE_CHAIN_ID, BASE_USDC_ADDRESS, CASH_ORDER_POLL_INTERVAL_MS, CASH_ORDER_STATUSES, CASH_RETAIN_ON_EMPTY, CashError, MARKET_SPREAD_BPS, ORACLE_MIN_CONVERSION_RATE_SENTINEL, USDC_DECIMALS, errors, isCashError, isUserRejectedError } from './chunk-ORCJKOT6.js';
3
3
  import { parseAbi, parseEventLogs, isAddress, http, createWalletClient, encodeFunctionData } from 'viem';
4
4
  import { base } from 'viem/chains';
5
5
  import { getSpreadOracleConfig, currencyInfo, getPaymentMethodsCatalog, getGatingServiceAddress, resolvePaymentMethodHashFromCatalog, resolvePaymentMethodNameFromHash, getCurrencyCodeFromHash, createCompositeDepositId, appendAttributionToCalldata, Zkp2pClient, CHAINLINK_ORACLE_FEEDS } from '@zkp2p/sdk';
@@ -105,6 +105,7 @@ async function prepareCashDepositParams(client, input, adapters) {
105
105
  paymentMethodsOverride,
106
106
  paymentMethodDataOverride,
107
107
  currenciesOverride,
108
+ intentGuardian: CASH_INTENT_GUARDIAN_ADDRESS,
108
109
  retainOnEmpty: CASH_RETAIN_ON_EMPTY
109
110
  };
110
111
  }
@@ -1665,6 +1666,64 @@ function createCashClient(options) {
1665
1666
  if (lastNonceError) throw lastNonceError;
1666
1667
  throw new Error(`Signer provider did not observe Relay nonce ${afterRelay - 1}`);
1667
1668
  }
1669
+ async function configureCashoutAccess(client, signer, depositInput, depositId) {
1670
+ if (!depositInput.payouts.some(
1671
+ (payout) => CASH_RESTRICTED_PLATFORMS.has(payout.processorName.toLowerCase())
1672
+ )) {
1673
+ return void 0;
1674
+ }
1675
+ const groupIds = CASH_ACCESS_GROUP_IDS[environment];
1676
+ const prepared = prepareCashoutAccess(depositId, client);
1677
+ let hash;
1678
+ try {
1679
+ hash = await signer.sendTransaction({
1680
+ account: signer.account,
1681
+ chain: signer.chain,
1682
+ to: prepared.to,
1683
+ data: prepared.data,
1684
+ value: prepared.value
1685
+ });
1686
+ } catch (err) {
1687
+ throw errors.accessPolicyConfigurationFailed(depositId, groupIds, err);
1688
+ }
1689
+ let receipt;
1690
+ try {
1691
+ receipt = await client.publicClient.waitForTransactionReceipt({ hash });
1692
+ } catch (err) {
1693
+ throw errors.accessPolicyConfigurationFailed(depositId, groupIds, err, hash);
1694
+ }
1695
+ if (receipt.status === "reverted") {
1696
+ throw errors.accessPolicyConfigurationFailed(
1697
+ depositId,
1698
+ groupIds,
1699
+ errors.transactionFailed(hash),
1700
+ hash
1701
+ );
1702
+ }
1703
+ return hash;
1704
+ }
1705
+ function prepareCashoutAccess(depositId, client = readClient) {
1706
+ const { compositeId, escrowAddress, onchainDepositId } = parseDepositId(depositId);
1707
+ const groupIds = CASH_ACCESS_GROUP_IDS[environment];
1708
+ try {
1709
+ const prepared = client.accessPolicy.prepareConfigureDeposit({
1710
+ escrow: escrowAddress,
1711
+ depositId: onchainDepositId,
1712
+ enabled: true,
1713
+ groupIds,
1714
+ takers: [],
1715
+ txOverrides: attribution
1716
+ });
1717
+ return {
1718
+ to: prepared.to,
1719
+ data: prepared.data,
1720
+ value: prepared.value,
1721
+ chainId: prepared.chainId
1722
+ };
1723
+ } catch (err) {
1724
+ throw errors.accessPolicyConfigurationFailed(compositeId, groupIds, err);
1725
+ }
1726
+ }
1668
1727
  return {
1669
1728
  capabilities,
1670
1729
  async sourceCapabilities() {
@@ -1799,6 +1858,12 @@ function createCashClient(options) {
1799
1858
  const abi2 = client.escrowV2Abi ?? client.escrowAbi;
1800
1859
  const resolved2 = resolveCashDepositId({ logs: receipt2.logs, abi: abi2 });
1801
1860
  if (!resolved2) throw errors.depositResolutionFailed(hash2);
1861
+ const accessPolicyTxHash2 = await configureCashoutAccess(
1862
+ client,
1863
+ opts.signer,
1864
+ depositInput2,
1865
+ resolved2.compositeId
1866
+ );
1802
1867
  const order2 = deriveCashOrder(resolved2.compositeId, [], {
1803
1868
  remainingAmount: depositInput2.amount,
1804
1869
  status: "ACTIVE"
@@ -1809,6 +1874,7 @@ function createCashClient(options) {
1809
1874
  escrowAddress: resolved2.escrowAddress,
1810
1875
  onchainDepositId: resolved2.onchainDepositId,
1811
1876
  order: order2,
1877
+ ...accessPolicyTxHash2 ? { accessPolicyTxHash: accessPolicyTxHash2 } : {},
1812
1878
  source: routedSource
1813
1879
  };
1814
1880
  }
@@ -1853,6 +1919,12 @@ function createCashClient(options) {
1853
1919
  const abi = client.escrowV2Abi ?? client.escrowAbi;
1854
1920
  const resolved = resolveCashDepositId({ logs: receipt.logs, abi });
1855
1921
  if (!resolved) throw errors.depositResolutionFailed(hash);
1922
+ const accessPolicyTxHash = await configureCashoutAccess(
1923
+ client,
1924
+ opts.signer,
1925
+ depositInput,
1926
+ resolved.compositeId
1927
+ );
1856
1928
  const order = deriveCashOrder(resolved.compositeId, [], {
1857
1929
  remainingAmount: depositInput.amount,
1858
1930
  status: "ACTIVE"
@@ -1863,6 +1935,7 @@ function createCashClient(options) {
1863
1935
  escrowAddress: resolved.escrowAddress,
1864
1936
  onchainDepositId: resolved.onchainDepositId,
1865
1937
  order,
1938
+ ...accessPolicyTxHash ? { accessPolicyTxHash } : {},
1866
1939
  ...sourceResult ? { source: sourceResult } : {}
1867
1940
  };
1868
1941
  },
@@ -1900,7 +1973,10 @@ function createCashClient(options) {
1900
1973
  description: "Create the protocol-held cash-out order."
1901
1974
  }
1902
1975
  ],
1903
- register: { hashedOnchainIds }
1976
+ register: { hashedOnchainIds },
1977
+ accessPolicyRequired: depositInput.payouts.some(
1978
+ (payout) => CASH_RESTRICTED_PLATFORMS.has(payout.processorName.toLowerCase())
1979
+ )
1904
1980
  };
1905
1981
  },
1906
1982
  finalizePreparedCashout(receipt) {
@@ -1929,6 +2005,7 @@ function createCashClient(options) {
1929
2005
  })
1930
2006
  };
1931
2007
  },
2008
+ prepareAccessPolicy: prepareCashoutAccess,
1932
2009
  async order(depositId) {
1933
2010
  return fetchOrder(depositId);
1934
2011
  },
@@ -2383,6 +2460,7 @@ var cashoutResultJsonSchema = z.object({
2383
2460
  escrowAddress: z.string(),
2384
2461
  onchainDepositId: nonNegativeBigintString,
2385
2462
  order: cashOrderJsonSchema,
2463
+ accessPolicyTxHash: z.string().optional(),
2386
2464
  source: z.object({
2387
2465
  amount: nonNegativeBigintString,
2388
2466
  requestId: z.string().optional(),
@@ -2393,7 +2471,8 @@ var cashoutResultJsonSchema = z.object({
2393
2471
  var prepareResultJsonSchema = z.object({
2394
2472
  txs: z.array(preparedTransactionJsonSchema),
2395
2473
  steps: z.array(cashPreparedStepJsonSchema),
2396
- register: z.object({ hashedOnchainIds: z.array(z.string()) })
2474
+ register: z.object({ hashedOnchainIds: z.array(z.string()) }),
2475
+ accessPolicyRequired: z.boolean()
2397
2476
  });
2398
2477
  var withdrawResultJsonSchema = z.object({
2399
2478
  depositId: z.string(),
@@ -2471,6 +2550,7 @@ var CASH_ERROR_CODES = defineCashErrorCodes([
2471
2550
  "SOURCE_CASHOUT_SUBMISSION_UNKNOWN",
2472
2551
  "SOURCE_CASHOUT_STATUS_UNKNOWN",
2473
2552
  "DEPOSIT_RESOLUTION_FAILED",
2553
+ "ACCESS_POLICY_CONFIGURATION_FAILED",
2474
2554
  "ALLOWANCE_NOT_VISIBLE",
2475
2555
  "SIGNER_REQUIRED",
2476
2556
  "SIGNER_CHAIN_MISMATCH",
@@ -2516,6 +2596,12 @@ var cashErrorRecoveryJsonSchema = z.discriminatedUnion("kind", [
2516
2596
  kind: z.literal("inspect-base-transaction"),
2517
2597
  transactionHash: z.string(),
2518
2598
  operation: z.string()
2599
+ }).strict(),
2600
+ z.object({
2601
+ kind: z.literal("configure-cashout-access-policy"),
2602
+ depositId: z.string(),
2603
+ groupIds: z.array(z.string()),
2604
+ transactionHash: z.string().optional()
2519
2605
  }).strict()
2520
2606
  ]);
2521
2607
  var cashErrorJsonSchema = z.object({
@@ -2773,6 +2859,7 @@ function cashoutResultToJson(result) {
2773
2859
  escrowAddress: result.escrowAddress,
2774
2860
  onchainDepositId: result.onchainDepositId.toString(),
2775
2861
  order: orderToJson(result.order),
2862
+ accessPolicyTxHash: result.accessPolicyTxHash,
2776
2863
  source: result.source ? {
2777
2864
  ...result.source,
2778
2865
  amount: result.source.amount.toString()
@@ -2787,6 +2874,7 @@ function cashoutResultFromJson(json) {
2787
2874
  escrowAddress: parsed.escrowAddress,
2788
2875
  onchainDepositId: BigInt(parsed.onchainDepositId),
2789
2876
  order: orderFromJson(parsed.order),
2877
+ accessPolicyTxHash: parsed.accessPolicyTxHash,
2790
2878
  source: parsed.source ? {
2791
2879
  ...parsed.source,
2792
2880
  amount: BigInt(parsed.source.amount)
@@ -2797,7 +2885,8 @@ function prepareResultToJson(result) {
2797
2885
  return {
2798
2886
  txs: result.txs.map(preparedTxToJson),
2799
2887
  steps: result.steps.map(preparedStepToJson),
2800
- register: result.register
2888
+ register: result.register,
2889
+ accessPolicyRequired: result.accessPolicyRequired
2801
2890
  };
2802
2891
  }
2803
2892
  function prepareResultFromJson(json) {
@@ -2805,7 +2894,8 @@ function prepareResultFromJson(json) {
2805
2894
  return {
2806
2895
  txs: parsed.txs.map(preparedTxFromJson),
2807
2896
  steps: parsed.steps.map(preparedStepFromJson),
2808
- register: parsed.register
2897
+ register: parsed.register,
2898
+ accessPolicyRequired: parsed.accessPolicyRequired
2809
2899
  };
2810
2900
  }
2811
2901
  function withdrawResultToJson(result) {
@@ -2885,6 +2975,13 @@ function cashErrorFromJson(json) {
2885
2975
  transactionHash: parsed.recovery.transactionHash,
2886
2976
  operation: parsed.recovery.operation
2887
2977
  };
2978
+ } else if (parsed.recovery.kind === "configure-cashout-access-policy") {
2979
+ recovery = {
2980
+ kind: parsed.recovery.kind,
2981
+ depositId: parsed.recovery.depositId,
2982
+ groupIds: parsed.recovery.groupIds,
2983
+ ...parsed.recovery.transactionHash !== void 0 ? { transactionHash: parsed.recovery.transactionHash } : {}
2984
+ };
2888
2985
  } else if (parsed.recovery.kind === "inspect-base-operation-submission") {
2889
2986
  recovery = {
2890
2987
  kind: parsed.recovery.kind,
package/dist/react.d.cts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { CurrencyType } from '@zkp2p/sdk';
2
- import { s as CashClient, L as EstimateInput, i as CashEstimate, J as CashoutOptions, h as CashoutResult, H as CashoutInput, T as TopUpResult, W as WithdrawResult, e as CashOrder } from './createCashClient-CYSM84-K.cjs';
2
+ import { s as CashClient, L as EstimateInput, i as CashEstimate, J as CashoutOptions, h as CashoutResult, H as CashoutInput, T as TopUpResult, W as WithdrawResult, e as CashOrder } from './createCashClient-C5YKh7cv.cjs';
3
3
  import { WalletClient } from 'viem';
4
4
  import '@relayprotocol/relay-sdk';
5
5
 
package/dist/react.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { CurrencyType } from '@zkp2p/sdk';
2
- import { s as CashClient, L as EstimateInput, i as CashEstimate, J as CashoutOptions, h as CashoutResult, H as CashoutInput, T as TopUpResult, W as WithdrawResult, e as CashOrder } from './createCashClient-CYSM84-K.js';
2
+ import { s as CashClient, L as EstimateInput, i as CashEstimate, J as CashoutOptions, h as CashoutResult, H as CashoutInput, T as TopUpResult, W as WithdrawResult, e as CashOrder } from './createCashClient-C5YKh7cv.js';
3
3
  import { WalletClient } from 'viem';
4
4
  import '@relayprotocol/relay-sdk';
5
5
 
package/dist/react.js CHANGED
@@ -1,4 +1,4 @@
1
- import { isCashError, CASH_ORDER_POLL_INTERVAL_MS } from './chunk-EIEGWWNX.js';
1
+ import { isCashError, CASH_ORDER_POLL_INTERVAL_MS } from './chunk-ORCJKOT6.js';
2
2
  import { useState, useRef, useCallback, useEffect, useMemo } from 'react';
3
3
 
4
4
  function useEstimate({
package/dist/tools.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  // package.json
4
4
  var package_default = {
5
- version: "0.4.2"};
5
+ version: "0.4.4"};
6
6
 
7
7
  // src/tools/index.ts
8
8
  var bigintString = {
package/dist/tools.js CHANGED
@@ -1,6 +1,6 @@
1
1
  // package.json
2
2
  var package_default = {
3
- version: "0.4.2"};
3
+ version: "0.4.4"};
4
4
 
5
5
  // src/tools/index.ts
6
6
  var bigintString = {
@@ -64,6 +64,10 @@ but the host or a signer-backed client must execute the route before
64
64
  `cash_cashout` prepares the Base-USDC order. Once the prepared `createDeposit`
65
65
  transaction confirms, call `finalizePreparedCashout(receipt)` to decode it with
66
66
  the environment-correct escrow ABI and obtain the resumable `CashoutResult`.
67
+ When `prepare()` returned `accessPolicyRequired: true`, submit and confirm
68
+ `prepareAccessPolicy(depositId)` before treating the cash-out as complete. It
69
+ attaches Plus, Pro, Peer Makers, and Peer Pay using the selected environment's
70
+ canonical registry IDs.
67
71
 
68
72
  There is no static chain/token allowlist in Peer Cash. Relay decides source
69
73
  support through its metadata and quote execution, filtered to the viem/EVM
@@ -308,6 +312,7 @@ explicit override.
308
312
  | `TRANSACTION_SUBMISSION_UNKNOWN` | no | A Base mutation returned no hash but may have broadcast. Inspect wallet/protocol state and its recovery action before any retry. |
309
313
  | `TRANSACTION_STATUS_UNKNOWN` | no | A transaction was submitted but its receipt is unknown. Inspect `recovery.transactionHash` before resubmitting. |
310
314
  | `DEPOSIT_RESOLUTION_FAILED` | no | Base tx succeeded but no `DepositReceived` was decoded. Inspect its logs and recover the composite id. |
315
+ | `ACCESS_POLICY_CONFIGURATION_FAILED` | no | The cash-out exists, but its required four-group policy was not confirmed. Use `recovery.depositId` and `groupIds`; never create it again. |
311
316
  | `INVALID_DEPOSIT_ID` | no | The id is not `escrowAddress_onchainId`. A bare number cannot cold-hydrate; use the value returned by `cashout()`. |
312
317
  | `ORDER_NOT_FOUND` | yes | Unknown id or immediate indexer lag. Verify the id and retry shortly after creation. |
313
318
  | `INDEXER_LAG` | yes | Indexer trails the chain. Retry the read shortly. |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zkp2p/cash",
3
- "version": "0.4.2",
3
+ "version": "0.4.4",
4
4
  "description": "Peer Cash - offramp-only SDK for routing crypto to Base USDC, then cashing out to fiat at the live oracle market rate.",
5
5
  "license": "MIT",
6
6
  "author": "Peer (https://peer.xyz)",