@spicenet-io/spiceflow-ui 4.15.2 → 4.16.0-rc.1

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
@@ -90,7 +90,7 @@ host-configured RPC. Keep private credentials out of browser bundles.
90
90
  - Use controller recovery for uncertain funding and `retryFinalization()` for failed
91
91
  application updates after settlement. Preserve original host terms across reload.
92
92
  - Deposit and rollup Withdraw retain distinct execution semantics while sharing
93
- inventory/policy. Account wallet withdrawal uses the fee-only Supply path.
93
+ inventory/policy. Account wallet withdrawal uses the inclusive Supply controller and its fee hierarchy.
94
94
 
95
95
  Inventory isolation does not establish support for simultaneous differently configured
96
96
  providers: underlying quote/execution transports still have global state.
@@ -277,6 +277,18 @@ callbacks are unchanged.
277
277
  `initialSourceAssetId` selects a current balance by ID; it does not supply a
278
278
  cached balance or change the receipt's supported withdrawal routes.
279
279
 
280
+ Native `SpiceWithdraw` actions save a pending submission for the current relayer,
281
+ network and wallet before sending it. Reopening the modal after a timeout or
282
+ reload shows **Check or resume withdrawal**; it looks up the original submission
283
+ and continues its unfinished steps without another signature or source transfer.
284
+ The pending record also shows a copyable submission key and action ID for support.
285
+ A missing lookup result or unresolved action keeps a new withdrawal blocked,
286
+ because the original submission may still arrive. The relayer must support
287
+ idempotent `POST /actions`, submission lookup, and the action recovery status
288
+ endpoint for this flow. Browser storage and Web Locks must be available before
289
+ the native action can start. A host-provided non-7702 `onWithdrawExecute` remains
290
+ the host's execution and recovery responsibility.
291
+
280
292
  ### Funding sources
281
293
 
282
294
  Supply, Pay and Lock list every balance that can fund the action: the embedded wallet
@@ -309,7 +321,7 @@ a failed application callback after the external action has confirmed.
309
321
  - Routed Supply, Pay and Lock actions must surface fee estimation before enabling submission.
310
322
  - Eligible direct external actions still require an accepted plan but charge no Spicenet fee. Network gas remains payable in the external wallet; native Max reserves gas.
311
323
  - Deposit gas and rollup withdrawal semantics remain distinct from action intent fees. Preserve their existing quote/readiness requirements.
312
- - Account wallet withdrawal is a fee-only Supply action. Do not bypass its fee/readiness gates based on the label "withdraw".
324
+ - Account wallet withdrawal uses the shared input-inclusive Supply controller and its fee-only planner for local fees. Do not bypass its fee/readiness gates based on the label "withdraw".
313
325
  - Custom actions use the shared controller's `canExecute`; an available balance or old quote alone is insufficient.
314
326
  - `onSubmit` on `SpiceSupply`, `SpiceLock`, `SpiceDeposit` and the shared controller fires once when the user submits and the SDK accepts it, before any wallet prompt. Use it for "transaction in progress" feedback instead of listening for clicks on SDK buttons.
315
327
  - `max()` on the shared controller (`useSpiceSupply`, `useSpiceLock`) resolves the fee-aware Max for the selected source, or `null` when there is none or the action fixes its output. The host sets the result as the amount.
@@ -411,7 +423,7 @@ during prewarming. The time available before typing determines how much work it
411
423
  - Declare `actionInput` for every token the action consumes and honour the amount passed to `buildActionCalls`: when fees come from an input, the action is built for the remainder. Declare `actionProceeds` for a token the action leaves in the wallet. Both are optional; with neither, only balances can pay. Omit `actionProceeds` when the output is delivered to another owner.
412
424
  - `feeFunding` overrides the level order per transaction, for example `["proceeds", "input", "balance"]`; the order inside the balance level is fixed. An empty list leaves the choice to the host's `selectedAsset`.
413
425
  - A `selectedAsset` on a fee-only action is an explicit host choice and funds the fee from that balance as before.
414
- - Account wallet withdrawals use this hierarchy automatically and display the chosen fee asset without a selector. The exact withdrawal amount is reserved before ranking balances; only its remainder can pay fees. Custom `useSpiceSupply` actions that must preserve an exact principal can declare `feeFundingReserve: { asset, amount }` instead of offering that principal as `actionInput`.
426
+ - Account wallet withdrawals use this hierarchy automatically and display the chosen fee asset without a selector. Entered amounts and Max are total source-token budgets; applicable fees reduce the net received amount. Same-chain transfers retain the selected token. Choosing another supported chain routes through USDC escrow and delivers registered USDC, with the net output shown before submission. Withdraw discovers permitted embedded balances by default alongside escrow balances; `walletAssets` optionally supplies extra token metadata or an initial wallet selection. Custom `useSpiceSupply` actions that must preserve an exact principal can declare `feeFundingReserve: { asset, amount }` instead of offering that principal as `actionInput`.
415
427
  - `feeOnlyAction` alone declares the action: `amountDirection` defaults to `"output"` and `paymentAmount` to `"0"`. Explicit values still win.
416
428
  - `submit()` on the controller runs the executor that matches `amountDirection`. `submitSupply()` and `submitPay()` remain for existing callers.
417
429
 
@@ -1,3 +1,3 @@
1
1
  "use client";
2
2
  (function(){if(typeof document==="undefined"||document.getElementById("spiceflow-styles"))return;var s=document.createElement("style");s.id="spiceflow-styles";s.textContent="@keyframes spiceflow-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@media (prefers-reduced-motion:reduce){*,:after,:before{animation-duration:.001ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.001ms!important}}.spiceflow-focus-ring:focus-visible,[data-spiceflow-focus]:focus-visible{border-radius:4px;outline:2px solid currentColor;outline-offset:2px}@media (forced-colors:active){.spiceflow-focus-ring:focus-visible,[data-spiceflow-focus]:focus-visible{outline:2px solid Highlight}}.ibm-plex-mono-thin{font-weight:100}.ibm-plex-mono-extralight,.ibm-plex-mono-thin{font-family:IBM Plex Mono,monospace!important;font-style:normal}.ibm-plex-mono-extralight{font-weight:200}.ibm-plex-mono-light{font-weight:300}.ibm-plex-mono-light,.ibm-plex-mono-regular{font-family:IBM Plex Mono,monospace!important;font-style:normal}.ibm-plex-mono-regular{font-weight:400}.ibm-plex-mono-medium{font-weight:500}.ibm-plex-mono-medium,.ibm-plex-mono-semibold{font-family:IBM Plex Mono,monospace!important;font-style:normal}.ibm-plex-mono-semibold{font-weight:600}.ibm-plex-mono-bold{font-family:IBM Plex Mono,monospace!important;font-style:normal;font-weight:700}#privy-modal-content button{border-radius:6px;font-family:IBM Plex Mono,monospace!important;font-size:small;letter-spacing:-.5px;text-transform:uppercase}#privy-modal-content input{background:#fff;border-radius:6px;padding-top:5px!important}#privy-dialog-title{display:none!important;font-size:18px;padding-bottom:10px;padding-top:10px}.AppLogoContainer-sc-a206bd44-0{display:none}#privy-modal-content{background:var(--Neutral-0,#fafafa);border:6px solid var(--Neutral-1,#e9e9e9);box-shadow:inset 0 0 0 1px rgba(0,0,0,.15),0 330px 92px transparent,0 211px 84px rgba(0,0,0,.01),0 119px 71px rgba(0,0,0,.05),0 53px 53px rgba(0,0,0,.09),0 13px 29px rgba(0,0,0,.1);height:auto!important;padding-bottom:10px}.Subtitle-sc-ddbf22b4-4{font-size:12px;margin-top:-14px;opacity:.5}.StyledLink-sc-1c6127e5-0{background:none!important}.StyledLink-sc-c8577138-0,.login-method-button{font-family:IBM Plex Mono,monospace!important}.StyledLink-sc-c8577138-0{font-style:uppercase}#protected-by-privy{color:#000!important}";document.head.appendChild(s)})();
3
- "use strict";const r=require("./privy-CTb9WM_S.js");require("react/jsx-runtime"),require("react"),require("@spicenet-io/spiceflow-core"),require("@tanstack/react-query"),require("viem"),require("@privy-io/react-auth"),require("wagmi"),require("viem/actions"),exports.PrivyLogin=r.PrivyLogin;
3
+ "use strict";const r=require("./privy-NjNrRvlu.js");require("react/jsx-runtime"),require("react"),require("@spicenet-io/spiceflow-core"),require("@tanstack/react-query"),require("viem"),require("@privy-io/react-auth"),require("wagmi"),require("viem/actions"),exports.PrivyLogin=r.PrivyLogin;
@@ -1,3 +1,3 @@
1
1
  "use client";
2
2
  (function(){if(typeof document==="undefined"||document.getElementById("spiceflow-styles"))return;var s=document.createElement("style");s.id="spiceflow-styles";s.textContent="@keyframes spiceflow-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@media (prefers-reduced-motion:reduce){*,:after,:before{animation-duration:.001ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.001ms!important}}.spiceflow-focus-ring:focus-visible,[data-spiceflow-focus]:focus-visible{border-radius:4px;outline:2px solid currentColor;outline-offset:2px}@media (forced-colors:active){.spiceflow-focus-ring:focus-visible,[data-spiceflow-focus]:focus-visible{outline:2px solid Highlight}}.ibm-plex-mono-thin{font-weight:100}.ibm-plex-mono-extralight,.ibm-plex-mono-thin{font-family:IBM Plex Mono,monospace!important;font-style:normal}.ibm-plex-mono-extralight{font-weight:200}.ibm-plex-mono-light{font-weight:300}.ibm-plex-mono-light,.ibm-plex-mono-regular{font-family:IBM Plex Mono,monospace!important;font-style:normal}.ibm-plex-mono-regular{font-weight:400}.ibm-plex-mono-medium{font-weight:500}.ibm-plex-mono-medium,.ibm-plex-mono-semibold{font-family:IBM Plex Mono,monospace!important;font-style:normal}.ibm-plex-mono-semibold{font-weight:600}.ibm-plex-mono-bold{font-family:IBM Plex Mono,monospace!important;font-style:normal;font-weight:700}#privy-modal-content button{border-radius:6px;font-family:IBM Plex Mono,monospace!important;font-size:small;letter-spacing:-.5px;text-transform:uppercase}#privy-modal-content input{background:#fff;border-radius:6px;padding-top:5px!important}#privy-dialog-title{display:none!important;font-size:18px;padding-bottom:10px;padding-top:10px}.AppLogoContainer-sc-a206bd44-0{display:none}#privy-modal-content{background:var(--Neutral-0,#fafafa);border:6px solid var(--Neutral-1,#e9e9e9);box-shadow:inset 0 0 0 1px rgba(0,0,0,.15),0 330px 92px transparent,0 211px 84px rgba(0,0,0,.01),0 119px 71px rgba(0,0,0,.05),0 53px 53px rgba(0,0,0,.09),0 13px 29px rgba(0,0,0,.1);height:auto!important;padding-bottom:10px}.Subtitle-sc-ddbf22b4-4{font-size:12px;margin-top:-14px;opacity:.5}.StyledLink-sc-1c6127e5-0{background:none!important}.StyledLink-sc-c8577138-0,.login-method-button{font-family:IBM Plex Mono,monospace!important}.StyledLink-sc-c8577138-0{font-style:uppercase}#protected-by-privy{color:#000!important}";document.head.appendChild(s)})();
3
- import{P as g}from"./privy-CbyTXV2C.js";import"react/jsx-runtime";import"react";import"@spicenet-io/spiceflow-core";import"@tanstack/react-query";import"viem";import"@privy-io/react-auth";import"wagmi";import"viem/actions";export{g as PrivyLogin};
3
+ import{P as g}from"./privy-BVlSQ7nR.js";import"react/jsx-runtime";import"react";import"@spicenet-io/spiceflow-core";import"@tanstack/react-query";import"viem";import"@privy-io/react-auth";import"wagmi";import"viem/actions";export{g as PrivyLogin};
@@ -21,6 +21,7 @@ export type ExecutorContext = {
21
21
  isInsufficientBalance: boolean;
22
22
  isPayMode: boolean;
23
23
  isFeeInclusiveInput?: boolean;
24
+ quotedInclusivePlatformFee?: boolean;
24
25
  feeOnlyAction?: boolean;
25
26
  actionProceeds?: Exclude<SpiceSupplyProps["actionProceeds"], "output">;
26
27
  validateFeeQuote?: () => void;
@@ -22,6 +22,7 @@ export type SupplyFeeQuote = {
22
22
  proceedsAvailable?: bigint;
23
23
  proceedsUsed?: bigint;
24
24
  batches?: ChainBatch[];
25
+ feePricingBatches?: ChainBatch[];
25
26
  actionContext?: Partial<import("../../../types/supply").BuildActionCallsContext>;
26
27
  fundingAmount?: bigint;
27
28
  destinationSwap?: ResolvedSwap;
@@ -49,6 +50,15 @@ export declare function sizePivotSourceGasSkim(params: {
49
50
  signal?: AbortSignal;
50
51
  }): Promise<bigint>;
51
52
  export declare function retainQuotedFixedFees(estimate: FeeEstimateSummary, previous: FeeEstimateSummary): FeeEstimateSummary;
53
+ export declare function estimateQuotedSupplyFees(params: {
54
+ estimate: EstimateFn;
55
+ batches: ChainBatch[];
56
+ pricingBatches: ChainBatch[];
57
+ tokenAddress: string;
58
+ fundingAmount: bigint;
59
+ options: ExecutionOptions;
60
+ signedEstimate?: FeeEstimateSummary;
61
+ }): Promise<FeeEstimateSummary>;
52
62
  export declare function solveGrossFunding(fees: Pick<FeePreview, "grossAmount" | "gasFee" | "spicenetFee" | "bridgeFee">, requiredNetFunding: bigint): bigint;
53
63
  export declare function estimatePayFunding(args: {
54
64
  requiredNetFunding: bigint;
@@ -109,6 +119,7 @@ export interface FeePreviewContext {
109
119
  selectedAsset: SelectedAsset | null;
110
120
  isPayMode: boolean;
111
121
  isFeeInclusiveInput?: boolean;
122
+ quotedInclusivePlatformFee?: boolean;
112
123
  parsedAmount: number;
113
124
  needsSwap: boolean;
114
125
  exactOutputSwap: ResolvedExactOutputSwap | null;
@@ -142,5 +153,5 @@ export declare class FeeShortfallError extends Error {
142
153
  readonly preview: FeePreview;
143
154
  constructor(preview: FeePreview);
144
155
  }
145
- export declare function supplyContextForFees(fees: FeePreview, amount: bigint, inclusive: boolean, mode: SpiceSupplyProps["feeExecutionMode"], reserveFee?: bigint): Required<Pick<import("../../../types/supply").BuildActionCallsContext, "grossAmount" | "netAmount" | "combinedFeeAmount" | "feeExecutionMode" | "feeBreakdown">>;
156
+ export declare function supplyContextForFees(fees: FeePreview, amount: bigint, inclusive: boolean, mode: SpiceSupplyProps["feeExecutionMode"], reserveFee?: bigint, quotedInclusivePlatformFee?: boolean): Required<Pick<import("../../../types/supply").BuildActionCallsContext, "grossAmount" | "netAmount" | "combinedFeeAmount" | "feeExecutionMode" | "feeBreakdown">>;
146
157
  export {};
@@ -2,7 +2,7 @@ import type { Dispatch, MutableRefObject, SetStateAction } from "react";
2
2
  import type { ExecutionRunner } from "../../../execution/runner";
3
3
  import type { DestinationToken, SpiceWithdrawDeliveryTransfer, SpiceWithdrawProps } from "../../../types/withdraw";
4
4
  import type { ChainBatch } from "../../../types/authorization";
5
- import type { ExecutionProgress } from "../../../hooks/useSpiceExecution";
5
+ import type { ExecutionOptions, ExecutionProgress } from "../../../hooks/useSpiceExecution";
6
6
  import type { FeeEstimateSummary } from "@spicenet-io/spiceflow-core";
7
7
  export type WithdrawalExecutionContext = {
8
8
  actionId: string;
@@ -31,6 +31,7 @@ export type WithdrawExecutorContext = {
31
31
  };
32
32
  executionContextRef: MutableRefObject<WithdrawalExecutionContext | null>;
33
33
  isMountedRef: MutableRefObject<boolean>;
34
+ withdrawalRecovery?: ExecutionOptions["withdrawalRecovery"];
34
35
  } & Pick<SpiceWithdrawProps, "onWithdrawExecute" | "onWithdrawSuccess" | "buildSpicenetBatch">;
35
36
  export declare function executeWithdraw(ctx: WithdrawExecutorContext): Promise<void>;
36
37
  export declare function retryWithdraw(ctx: WithdrawExecutorContext): Promise<void>;
@@ -0,0 +1,41 @@
1
+ import type { CreateActionResponse } from "@spicenet-io/spiceflow-core";
2
+ export type WithdrawalScope = {
3
+ apiUrl: string;
4
+ network: string;
5
+ wallet: string;
6
+ };
7
+ export type WithdrawalDetails = {
8
+ source: "spice" | "embedded";
9
+ sourceAssetId: string;
10
+ sourceChainId: number;
11
+ sourceToken: string;
12
+ destinationChainId: number;
13
+ destinationToken: string;
14
+ recipient: string;
15
+ amount: string;
16
+ symbol: string;
17
+ callback?: {
18
+ amount: string;
19
+ symbol: string;
20
+ };
21
+ };
22
+ export type PendingWithdrawal = {
23
+ version: 1;
24
+ scope: WithdrawalScope;
25
+ details: WithdrawalDetails;
26
+ idempotencyKey: string;
27
+ phase: "submitting" | "active" | "completed" | "cancelled";
28
+ createdAt: number;
29
+ actionId?: string;
30
+ intentId?: string;
31
+ intentIndex?: number;
32
+ totalSteps?: number;
33
+ callbackSent?: boolean;
34
+ };
35
+ export declare function withdrawalStorageKey(scope: WithdrawalScope): string;
36
+ export declare function readPendingWithdrawal(scope: WithdrawalScope): PendingWithdrawal | null;
37
+ export declare function savePendingWithdrawal(record: PendingWithdrawal): void;
38
+ export declare function clearRejectedSubmission(record: PendingWithdrawal): void;
39
+ export declare function newSubmissionKey(): string;
40
+ export declare function beginWithdrawal(scope: WithdrawalScope, details: WithdrawalDetails, totalSteps: number): PendingWithdrawal;
41
+ export declare function recordWithdrawalAction(record: PendingWithdrawal, result: CreateActionResponse, totalSteps: number): PendingWithdrawal;
@@ -1,15 +1,23 @@
1
1
  import { type Address } from "viem";
2
+ import type { ExecutionOptions } from "../../../hooks/useSpiceExecution";
2
3
  import type { Asset } from "../../../types/assets";
3
4
  import type { SpiceWithdrawProps } from "../../../types/withdraw";
4
5
  export declare function useSpiceEmbeddedWithdraw(params: {
5
6
  enabled: boolean;
6
7
  asset: Asset | null;
7
8
  amount: bigint;
9
+ destination?: {
10
+ address: Address;
11
+ symbol: string;
12
+ decimals: number;
13
+ chainId: number;
14
+ } | null;
8
15
  recipient?: Address;
9
16
  owner?: Address;
10
17
  sourceChains?: number[];
11
18
  onSuccess?: SpiceWithdrawProps["onWithdrawSuccess"];
12
19
  onError?: SpiceWithdrawProps["onWithdrawError"];
20
+ withdrawalRecovery?: ExecutionOptions["withdrawalRecovery"];
13
21
  }): {
14
22
  supply: {
15
23
  selectedAsset: import("../../..").SelectedAsset | null;
@@ -113,6 +121,6 @@ export declare function useSpiceEmbeddedWithdraw(params: {
113
121
  resetAfterSuccess: () => void;
114
122
  resetPaymentState: () => void;
115
123
  };
116
- source: Asset | undefined;
124
+ source: Asset | null | undefined;
117
125
  maximumFeeFunding: bigint | null | undefined;
118
126
  };
@@ -0,0 +1,25 @@
1
+ import type { CreateActionResponse } from "@spicenet-io/spiceflow-core";
2
+ import type { Address } from "viem";
3
+ import type { SpiceWithdrawProps } from "../../../types/withdraw";
4
+ import { type PendingWithdrawal, type WithdrawalDetails, type WithdrawalScope } from "./pendingWithdrawal";
5
+ type Params = {
6
+ isOpen: boolean;
7
+ scope: WithdrawalScope | null;
8
+ details: WithdrawalDetails | null;
9
+ onSuccess?: SpiceWithdrawProps["onWithdrawSuccess"];
10
+ };
11
+ export declare function useWithdrawalRecovery(params: Params): {
12
+ record: PendingWithdrawal | null;
13
+ error: string | null;
14
+ busy: boolean;
15
+ completedByResume: string | null;
16
+ blocked: boolean;
17
+ executionOptions: {
18
+ submitAction: (user: Address, totalSteps: number, create: (idempotencyKey: string) => Promise<CreateActionResponse>) => Promise<CreateActionResponse>;
19
+ onActionComplete: (actionId: string) => Promise<void>;
20
+ };
21
+ pinDetails: (callback?: WithdrawalDetails["callback"]) => void;
22
+ onInitialSuccess: () => Promise<void>;
23
+ resume: () => Promise<void>;
24
+ };
25
+ export {};
@@ -1,3 +1,4 @@
1
+ import type { RelayerService } from "../utils/relayer";
1
2
  type StepResult = {
2
3
  status: string;
3
4
  transactionHash?: string;
@@ -16,6 +17,8 @@ type PollIntentStepOptions = {
16
17
  onStepUpdate?: (result: StepResult) => void;
17
18
  signal?: AbortSignal;
18
19
  chainId?: number;
20
+ startWithExecute?: boolean;
21
+ relayer?: Pick<RelayerService, "executeStep" | "checkStepStatus">;
19
22
  };
20
23
  export declare function pollIntentStepUntilSuccess(options: PollIntentStepOptions): Promise<string | undefined>;
21
24
  export declare function runAllIntentSteps(options: {
@@ -1,4 +1,4 @@
1
- import type { FeeEstimateSummary } from "@spicenet-io/spiceflow-core";
1
+ import type { CreateActionResponse, FeeEstimateSummary } from "@spicenet-io/spiceflow-core";
2
2
  import { Address } from "viem";
3
3
  import { Call, ChainBatch } from "../types/authorization";
4
4
  import { type ActionOutputCredit } from "../utils/actionOutputEscrowFunding";
@@ -42,6 +42,10 @@ export interface ExecutionOptions {
42
42
  submittedFeeEstimate?: FeeEstimateSummary;
43
43
  skipUserFundingPreflight?: boolean;
44
44
  validateFeeCalls?: boolean;
45
+ withdrawalRecovery?: {
46
+ submitAction: (user: Address, totalSteps: number, create: (idempotencyKey: string) => Promise<CreateActionResponse>) => Promise<CreateActionResponse>;
47
+ onActionComplete: (actionId: string) => Promise<void>;
48
+ };
45
49
  signal?: AbortSignal;
46
50
  }
47
51
  export declare function validateUserFundingCapacity(chainBatches: ChainBatch[], userAddress: Address, options?: Pick<ExecutionOptions, "walletFundingRequirement"> & {
@@ -5,7 +5,9 @@ import { type FeePreviewContext } from "../components/SpiceSupply/lib/feePreview
5
5
  import type { Asset, SelectedAsset } from "../types/assets";
6
6
  import type { DestinationTokenDeclaration, SpiceSupplyProps } from "../types/supply";
7
7
  import type { FeePreview } from "../types/ui";
8
+ import { type ExecutionOptions } from "./useSpiceExecution";
8
9
  export interface UseSpiceSupplyParams extends Pick<SpiceSupplyProps, "sourceChains" | "supportedSourceAssets" | "buildActionCalls" | "feeExecutionMode" | "buildSpicenetBatch" | "onPayExecute" | "resolveExactOutputSwap" | "amountDirection" | "onSubmit" | "onSuccess" | "onError" | "additionalSourceTokens" | "includeExternalWalletAssets" | "includeCrossChainEmbeddedAssets" | "feeOnlyAction" | "actionInput" | "actionProceeds" | "feeFunding" | "maxSlippage" | "resolveInputSwap"> {
10
+ quotedInclusivePlatformFee?: boolean;
9
11
  enabled?: boolean;
10
12
  destinationToken: DestinationTokenDeclaration | undefined;
11
13
  selectedAsset: SelectedAsset | null;
@@ -18,6 +20,7 @@ export interface UseSpiceSupplyParams extends Pick<SpiceSupplyProps, "sourceChai
18
20
  };
19
21
  prependSourceEscrow?: boolean;
20
22
  feeFundingReserve?: FeePreviewContext["feeFundingReserve"];
23
+ withdrawalRecovery?: ExecutionOptions["withdrawalRecovery"];
21
24
  }
22
25
  export declare function useSpiceSupply(params: UseSpiceSupplyParams): {
23
26
  selectedAsset: SelectedAsset | null;