@zkp2p/cash 0.4.3 → 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
  ```
@@ -2,6 +2,27 @@
2
2
  var BASE_CHAIN_ID = 8453;
3
3
  var BASE_USDC_ADDRESS = "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913";
4
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
+ };
5
26
  var USDC_DECIMALS = 6;
6
27
  var MARKET_SPREAD_BPS = 0;
7
28
  var ORACLE_MIN_CONVERSION_RATE_SENTINEL = 1n;
@@ -379,6 +400,21 @@ var errors = {
379
400
  },
380
401
  { cause }
381
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
+ ),
382
418
  escrowPaused: () => new CashError({
383
419
  code: "ESCROW_PAUSED",
384
420
  message: `The escrow contract is paused; deposits are temporarily disabled.`,
@@ -446,4 +482,4 @@ function isUserRejectedError(value) {
446
482
  return text.some(hasUserRejectionText);
447
483
  }
448
484
 
449
- export { BASE_CHAIN_ID, BASE_USDC_ADDRESS, CASH_INTENT_GUARDIAN_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
@@ -13,6 +13,27 @@ var zod = require('zod');
13
13
  var BASE_CHAIN_ID = 8453;
14
14
  var BASE_USDC_ADDRESS = "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913";
15
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
+ };
16
37
  var USDC_DECIMALS = 6;
17
38
  var MARKET_SPREAD_BPS = 0;
18
39
  var ORACLE_MIN_CONVERSION_RATE_SENTINEL = 1n;
@@ -861,6 +882,21 @@ var errors = {
861
882
  },
862
883
  { cause }
863
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
+ ),
864
900
  escrowPaused: () => new CashError({
865
901
  code: "ESCROW_PAUSED",
866
902
  message: `The escrow contract is paused; deposits are temporarily disabled.`,
@@ -2115,6 +2151,64 @@ function createCashClient(options) {
2115
2151
  if (lastNonceError) throw lastNonceError;
2116
2152
  throw new Error(`Signer provider did not observe Relay nonce ${afterRelay - 1}`);
2117
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
+ }
2118
2212
  return {
2119
2213
  capabilities,
2120
2214
  async sourceCapabilities() {
@@ -2249,6 +2343,12 @@ function createCashClient(options) {
2249
2343
  const abi2 = client.escrowV2Abi ?? client.escrowAbi;
2250
2344
  const resolved2 = resolveCashDepositId({ logs: receipt2.logs, abi: abi2 });
2251
2345
  if (!resolved2) throw errors.depositResolutionFailed(hash2);
2346
+ const accessPolicyTxHash2 = await configureCashoutAccess(
2347
+ client,
2348
+ opts.signer,
2349
+ depositInput2,
2350
+ resolved2.compositeId
2351
+ );
2252
2352
  const order2 = deriveCashOrder(resolved2.compositeId, [], {
2253
2353
  remainingAmount: depositInput2.amount,
2254
2354
  status: "ACTIVE"
@@ -2259,6 +2359,7 @@ function createCashClient(options) {
2259
2359
  escrowAddress: resolved2.escrowAddress,
2260
2360
  onchainDepositId: resolved2.onchainDepositId,
2261
2361
  order: order2,
2362
+ ...accessPolicyTxHash2 ? { accessPolicyTxHash: accessPolicyTxHash2 } : {},
2262
2363
  source: routedSource
2263
2364
  };
2264
2365
  }
@@ -2303,6 +2404,12 @@ function createCashClient(options) {
2303
2404
  const abi = client.escrowV2Abi ?? client.escrowAbi;
2304
2405
  const resolved = resolveCashDepositId({ logs: receipt.logs, abi });
2305
2406
  if (!resolved) throw errors.depositResolutionFailed(hash);
2407
+ const accessPolicyTxHash = await configureCashoutAccess(
2408
+ client,
2409
+ opts.signer,
2410
+ depositInput,
2411
+ resolved.compositeId
2412
+ );
2306
2413
  const order = deriveCashOrder(resolved.compositeId, [], {
2307
2414
  remainingAmount: depositInput.amount,
2308
2415
  status: "ACTIVE"
@@ -2313,6 +2420,7 @@ function createCashClient(options) {
2313
2420
  escrowAddress: resolved.escrowAddress,
2314
2421
  onchainDepositId: resolved.onchainDepositId,
2315
2422
  order,
2423
+ ...accessPolicyTxHash ? { accessPolicyTxHash } : {},
2316
2424
  ...sourceResult ? { source: sourceResult } : {}
2317
2425
  };
2318
2426
  },
@@ -2350,7 +2458,10 @@ function createCashClient(options) {
2350
2458
  description: "Create the protocol-held cash-out order."
2351
2459
  }
2352
2460
  ],
2353
- register: { hashedOnchainIds }
2461
+ register: { hashedOnchainIds },
2462
+ accessPolicyRequired: depositInput.payouts.some(
2463
+ (payout) => CASH_RESTRICTED_PLATFORMS.has(payout.processorName.toLowerCase())
2464
+ )
2354
2465
  };
2355
2466
  },
2356
2467
  finalizePreparedCashout(receipt) {
@@ -2379,6 +2490,7 @@ function createCashClient(options) {
2379
2490
  })
2380
2491
  };
2381
2492
  },
2493
+ prepareAccessPolicy: prepareCashoutAccess,
2382
2494
  async order(depositId) {
2383
2495
  return fetchOrder(depositId);
2384
2496
  },
@@ -2833,6 +2945,7 @@ var cashoutResultJsonSchema = zod.z.object({
2833
2945
  escrowAddress: zod.z.string(),
2834
2946
  onchainDepositId: nonNegativeBigintString,
2835
2947
  order: cashOrderJsonSchema,
2948
+ accessPolicyTxHash: zod.z.string().optional(),
2836
2949
  source: zod.z.object({
2837
2950
  amount: nonNegativeBigintString,
2838
2951
  requestId: zod.z.string().optional(),
@@ -2843,7 +2956,8 @@ var cashoutResultJsonSchema = zod.z.object({
2843
2956
  var prepareResultJsonSchema = zod.z.object({
2844
2957
  txs: zod.z.array(preparedTransactionJsonSchema),
2845
2958
  steps: zod.z.array(cashPreparedStepJsonSchema),
2846
- 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()
2847
2961
  });
2848
2962
  var withdrawResultJsonSchema = zod.z.object({
2849
2963
  depositId: zod.z.string(),
@@ -2921,6 +3035,7 @@ var CASH_ERROR_CODES = defineCashErrorCodes([
2921
3035
  "SOURCE_CASHOUT_SUBMISSION_UNKNOWN",
2922
3036
  "SOURCE_CASHOUT_STATUS_UNKNOWN",
2923
3037
  "DEPOSIT_RESOLUTION_FAILED",
3038
+ "ACCESS_POLICY_CONFIGURATION_FAILED",
2924
3039
  "ALLOWANCE_NOT_VISIBLE",
2925
3040
  "SIGNER_REQUIRED",
2926
3041
  "SIGNER_CHAIN_MISMATCH",
@@ -2966,6 +3081,12 @@ var cashErrorRecoveryJsonSchema = zod.z.discriminatedUnion("kind", [
2966
3081
  kind: zod.z.literal("inspect-base-transaction"),
2967
3082
  transactionHash: zod.z.string(),
2968
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()
2969
3090
  }).strict()
2970
3091
  ]);
2971
3092
  var cashErrorJsonSchema = zod.z.object({
@@ -3223,6 +3344,7 @@ function cashoutResultToJson(result) {
3223
3344
  escrowAddress: result.escrowAddress,
3224
3345
  onchainDepositId: result.onchainDepositId.toString(),
3225
3346
  order: orderToJson(result.order),
3347
+ accessPolicyTxHash: result.accessPolicyTxHash,
3226
3348
  source: result.source ? {
3227
3349
  ...result.source,
3228
3350
  amount: result.source.amount.toString()
@@ -3237,6 +3359,7 @@ function cashoutResultFromJson(json) {
3237
3359
  escrowAddress: parsed.escrowAddress,
3238
3360
  onchainDepositId: BigInt(parsed.onchainDepositId),
3239
3361
  order: orderFromJson(parsed.order),
3362
+ accessPolicyTxHash: parsed.accessPolicyTxHash,
3240
3363
  source: parsed.source ? {
3241
3364
  ...parsed.source,
3242
3365
  amount: BigInt(parsed.source.amount)
@@ -3247,7 +3370,8 @@ function prepareResultToJson(result) {
3247
3370
  return {
3248
3371
  txs: result.txs.map(preparedTxToJson),
3249
3372
  steps: result.steps.map(preparedStepToJson),
3250
- register: result.register
3373
+ register: result.register,
3374
+ accessPolicyRequired: result.accessPolicyRequired
3251
3375
  };
3252
3376
  }
3253
3377
  function prepareResultFromJson(json) {
@@ -3255,7 +3379,8 @@ function prepareResultFromJson(json) {
3255
3379
  return {
3256
3380
  txs: parsed.txs.map(preparedTxFromJson),
3257
3381
  steps: parsed.steps.map(preparedStepFromJson),
3258
- register: parsed.register
3382
+ register: parsed.register,
3383
+ accessPolicyRequired: parsed.accessPolicyRequired
3259
3384
  };
3260
3385
  }
3261
3386
  function withdrawResultToJson(result) {
@@ -3335,6 +3460,13 @@ function cashErrorFromJson(json) {
3335
3460
  transactionHash: parsed.recovery.transactionHash,
3336
3461
  operation: parsed.recovery.operation
3337
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
+ };
3338
3470
  } else if (parsed.recovery.kind === "inspect-base-operation-submission") {
3339
3471
  recovery = {
3340
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, CASH_INTENT_GUARDIAN_ADDRESS, BASE_USDC_ADDRESS, USDC_DECIMALS, BASE_CHAIN_ID, errors, isCashError, CASH_ORDER_STATUSES, mapChainError, CashError } from './chunk-IHEOGLAS.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-IHEOGLAS.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';
@@ -1666,6 +1666,64 @@ function createCashClient(options) {
1666
1666
  if (lastNonceError) throw lastNonceError;
1667
1667
  throw new Error(`Signer provider did not observe Relay nonce ${afterRelay - 1}`);
1668
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
+ }
1669
1727
  return {
1670
1728
  capabilities,
1671
1729
  async sourceCapabilities() {
@@ -1800,6 +1858,12 @@ function createCashClient(options) {
1800
1858
  const abi2 = client.escrowV2Abi ?? client.escrowAbi;
1801
1859
  const resolved2 = resolveCashDepositId({ logs: receipt2.logs, abi: abi2 });
1802
1860
  if (!resolved2) throw errors.depositResolutionFailed(hash2);
1861
+ const accessPolicyTxHash2 = await configureCashoutAccess(
1862
+ client,
1863
+ opts.signer,
1864
+ depositInput2,
1865
+ resolved2.compositeId
1866
+ );
1803
1867
  const order2 = deriveCashOrder(resolved2.compositeId, [], {
1804
1868
  remainingAmount: depositInput2.amount,
1805
1869
  status: "ACTIVE"
@@ -1810,6 +1874,7 @@ function createCashClient(options) {
1810
1874
  escrowAddress: resolved2.escrowAddress,
1811
1875
  onchainDepositId: resolved2.onchainDepositId,
1812
1876
  order: order2,
1877
+ ...accessPolicyTxHash2 ? { accessPolicyTxHash: accessPolicyTxHash2 } : {},
1813
1878
  source: routedSource
1814
1879
  };
1815
1880
  }
@@ -1854,6 +1919,12 @@ function createCashClient(options) {
1854
1919
  const abi = client.escrowV2Abi ?? client.escrowAbi;
1855
1920
  const resolved = resolveCashDepositId({ logs: receipt.logs, abi });
1856
1921
  if (!resolved) throw errors.depositResolutionFailed(hash);
1922
+ const accessPolicyTxHash = await configureCashoutAccess(
1923
+ client,
1924
+ opts.signer,
1925
+ depositInput,
1926
+ resolved.compositeId
1927
+ );
1857
1928
  const order = deriveCashOrder(resolved.compositeId, [], {
1858
1929
  remainingAmount: depositInput.amount,
1859
1930
  status: "ACTIVE"
@@ -1864,6 +1935,7 @@ function createCashClient(options) {
1864
1935
  escrowAddress: resolved.escrowAddress,
1865
1936
  onchainDepositId: resolved.onchainDepositId,
1866
1937
  order,
1938
+ ...accessPolicyTxHash ? { accessPolicyTxHash } : {},
1867
1939
  ...sourceResult ? { source: sourceResult } : {}
1868
1940
  };
1869
1941
  },
@@ -1901,7 +1973,10 @@ function createCashClient(options) {
1901
1973
  description: "Create the protocol-held cash-out order."
1902
1974
  }
1903
1975
  ],
1904
- register: { hashedOnchainIds }
1976
+ register: { hashedOnchainIds },
1977
+ accessPolicyRequired: depositInput.payouts.some(
1978
+ (payout) => CASH_RESTRICTED_PLATFORMS.has(payout.processorName.toLowerCase())
1979
+ )
1905
1980
  };
1906
1981
  },
1907
1982
  finalizePreparedCashout(receipt) {
@@ -1930,6 +2005,7 @@ function createCashClient(options) {
1930
2005
  })
1931
2006
  };
1932
2007
  },
2008
+ prepareAccessPolicy: prepareCashoutAccess,
1933
2009
  async order(depositId) {
1934
2010
  return fetchOrder(depositId);
1935
2011
  },
@@ -2384,6 +2460,7 @@ var cashoutResultJsonSchema = z.object({
2384
2460
  escrowAddress: z.string(),
2385
2461
  onchainDepositId: nonNegativeBigintString,
2386
2462
  order: cashOrderJsonSchema,
2463
+ accessPolicyTxHash: z.string().optional(),
2387
2464
  source: z.object({
2388
2465
  amount: nonNegativeBigintString,
2389
2466
  requestId: z.string().optional(),
@@ -2394,7 +2471,8 @@ var cashoutResultJsonSchema = z.object({
2394
2471
  var prepareResultJsonSchema = z.object({
2395
2472
  txs: z.array(preparedTransactionJsonSchema),
2396
2473
  steps: z.array(cashPreparedStepJsonSchema),
2397
- register: z.object({ hashedOnchainIds: z.array(z.string()) })
2474
+ register: z.object({ hashedOnchainIds: z.array(z.string()) }),
2475
+ accessPolicyRequired: z.boolean()
2398
2476
  });
2399
2477
  var withdrawResultJsonSchema = z.object({
2400
2478
  depositId: z.string(),
@@ -2472,6 +2550,7 @@ var CASH_ERROR_CODES = defineCashErrorCodes([
2472
2550
  "SOURCE_CASHOUT_SUBMISSION_UNKNOWN",
2473
2551
  "SOURCE_CASHOUT_STATUS_UNKNOWN",
2474
2552
  "DEPOSIT_RESOLUTION_FAILED",
2553
+ "ACCESS_POLICY_CONFIGURATION_FAILED",
2475
2554
  "ALLOWANCE_NOT_VISIBLE",
2476
2555
  "SIGNER_REQUIRED",
2477
2556
  "SIGNER_CHAIN_MISMATCH",
@@ -2517,6 +2596,12 @@ var cashErrorRecoveryJsonSchema = z.discriminatedUnion("kind", [
2517
2596
  kind: z.literal("inspect-base-transaction"),
2518
2597
  transactionHash: z.string(),
2519
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()
2520
2605
  }).strict()
2521
2606
  ]);
2522
2607
  var cashErrorJsonSchema = z.object({
@@ -2774,6 +2859,7 @@ function cashoutResultToJson(result) {
2774
2859
  escrowAddress: result.escrowAddress,
2775
2860
  onchainDepositId: result.onchainDepositId.toString(),
2776
2861
  order: orderToJson(result.order),
2862
+ accessPolicyTxHash: result.accessPolicyTxHash,
2777
2863
  source: result.source ? {
2778
2864
  ...result.source,
2779
2865
  amount: result.source.amount.toString()
@@ -2788,6 +2874,7 @@ function cashoutResultFromJson(json) {
2788
2874
  escrowAddress: parsed.escrowAddress,
2789
2875
  onchainDepositId: BigInt(parsed.onchainDepositId),
2790
2876
  order: orderFromJson(parsed.order),
2877
+ accessPolicyTxHash: parsed.accessPolicyTxHash,
2791
2878
  source: parsed.source ? {
2792
2879
  ...parsed.source,
2793
2880
  amount: BigInt(parsed.source.amount)
@@ -2798,7 +2885,8 @@ function prepareResultToJson(result) {
2798
2885
  return {
2799
2886
  txs: result.txs.map(preparedTxToJson),
2800
2887
  steps: result.steps.map(preparedStepToJson),
2801
- register: result.register
2888
+ register: result.register,
2889
+ accessPolicyRequired: result.accessPolicyRequired
2802
2890
  };
2803
2891
  }
2804
2892
  function prepareResultFromJson(json) {
@@ -2806,7 +2894,8 @@ function prepareResultFromJson(json) {
2806
2894
  return {
2807
2895
  txs: parsed.txs.map(preparedTxFromJson),
2808
2896
  steps: parsed.steps.map(preparedStepFromJson),
2809
- register: parsed.register
2897
+ register: parsed.register,
2898
+ accessPolicyRequired: parsed.accessPolicyRequired
2810
2899
  };
2811
2900
  }
2812
2901
  function withdrawResultToJson(result) {
@@ -2886,6 +2975,13 @@ function cashErrorFromJson(json) {
2886
2975
  transactionHash: parsed.recovery.transactionHash,
2887
2976
  operation: parsed.recovery.operation
2888
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
+ };
2889
2985
  } else if (parsed.recovery.kind === "inspect-base-operation-submission") {
2890
2986
  recovery = {
2891
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-IHEOGLAS.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.3"};
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.3"};
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.3",
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)",