0xtrails 0.2.5 → 0.2.6
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/dist/abortController.d.ts +8 -0
- package/dist/abortController.d.ts.map +1 -0
- package/dist/{ccip-CXlshvBY.js → ccip-Xjh9d1gb.js} +7 -7
- package/dist/constants.d.ts +2 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/fees.d.ts +19 -0
- package/dist/fees.d.ts.map +1 -0
- package/dist/{index-_QuyGrjU.js → index-BnhdZ8Ho.js} +34769 -34247
- package/dist/index.js +726 -520
- package/dist/prepareSend.d.ts +11 -77
- package/dist/prepareSend.d.ts.map +1 -1
- package/dist/transactions.d.ts +4 -2
- package/dist/transactions.d.ts.map +1 -1
- package/dist/widget/components/AccountIntentTransactionHistoryButton.d.ts +4 -0
- package/dist/widget/components/AccountIntentTransactionHistoryButton.d.ts.map +1 -0
- package/dist/widget/components/AccountSettings.d.ts.map +1 -1
- package/dist/widget/components/ChainFilterDropdown.d.ts.map +1 -1
- package/dist/widget/components/ClassicSwap.d.ts +2 -2
- package/dist/widget/components/ClassicSwap.d.ts.map +1 -1
- package/dist/widget/components/ConnectWallet.d.ts.map +1 -1
- package/dist/widget/components/DynamicInputStyles.d.ts +18 -0
- package/dist/widget/components/DynamicInputStyles.d.ts.map +1 -0
- package/dist/widget/components/Earn.d.ts +2 -2
- package/dist/widget/components/Earn.d.ts.map +1 -1
- package/dist/widget/components/ErrorAnimationIcon.d.ts +2 -0
- package/dist/widget/components/ErrorAnimationIcon.d.ts.map +1 -0
- package/dist/widget/components/FeeBreakdown.d.ts +9 -0
- package/dist/widget/components/FeeBreakdown.d.ts.map +1 -0
- package/dist/widget/components/Fund.d.ts +2 -2
- package/dist/widget/components/Fund.d.ts.map +1 -1
- package/dist/widget/components/FundSwap.d.ts +2 -2
- package/dist/widget/components/FundSwap.d.ts.map +1 -1
- package/dist/widget/components/FundingMethodSelectorButton.d.ts.map +1 -1
- package/dist/widget/components/Identicon.d.ts.map +1 -1
- package/dist/widget/components/MeshConnectExchanges.d.ts +0 -3
- package/dist/widget/components/MeshConnectExchanges.d.ts.map +1 -1
- package/dist/widget/components/Modal.d.ts.map +1 -1
- package/dist/widget/components/Pay.d.ts +2 -2
- package/dist/widget/components/Pay.d.ts.map +1 -1
- package/dist/widget/components/PoolDeposit.d.ts +3 -2
- package/dist/widget/components/PoolDeposit.d.ts.map +1 -1
- package/dist/widget/components/PoolWithdraw.d.ts +3 -2
- package/dist/widget/components/PoolWithdraw.d.ts.map +1 -1
- package/dist/widget/components/QuoteDetails.d.ts +1 -0
- package/dist/widget/components/QuoteDetails.d.ts.map +1 -1
- package/dist/widget/components/Receipt.d.ts.map +1 -1
- package/dist/widget/components/RecipientSelectorButton.d.ts.map +1 -1
- package/dist/widget/components/ScreenHeader.d.ts.map +1 -1
- package/dist/widget/components/Swap.d.ts +2 -2
- package/dist/widget/components/Swap.d.ts.map +1 -1
- package/dist/widget/components/ThemeProvider.d.ts.map +1 -1
- package/dist/widget/components/TokenDisplayNonSelectable.d.ts +11 -0
- package/dist/widget/components/TokenDisplayNonSelectable.d.ts.map +1 -0
- package/dist/widget/components/TokenSelector.d.ts.map +1 -1
- package/dist/widget/components/TokenSelectorButton.d.ts.map +1 -1
- package/dist/widget/components/Tooltip.d.ts +9 -0
- package/dist/widget/components/Tooltip.d.ts.map +1 -0
- package/dist/widget/components/WaasFeeOptions.d.ts +1 -0
- package/dist/widget/components/WaasFeeOptions.d.ts.map +1 -1
- package/dist/widget/components/WalletConfirmation.d.ts.map +1 -1
- package/dist/widget/components/WalletConnect.d.ts.map +1 -1
- package/dist/widget/css/compiled.css +1 -1
- package/dist/widget/hooks/useQuote.d.ts +83 -0
- package/dist/widget/hooks/useQuote.d.ts.map +1 -0
- package/dist/widget/hooks/useSendForm.d.ts +2 -2
- package/dist/widget/hooks/useSendForm.d.ts.map +1 -1
- package/dist/widget/index.js +2 -2
- package/dist/widget/widget.d.ts +5 -0
- package/dist/widget/widget.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/abortController.ts +35 -0
- package/src/constants.ts +3 -0
- package/src/fees.ts +199 -0
- package/src/prepareSend.ts +225 -398
- package/src/trails.ts +3 -3
- package/src/transactions.ts +62 -18
- package/src/widget/compiled.css +1 -1
- package/src/widget/components/AccountIntentTransactionHistoryButton.tsx +22 -0
- package/src/widget/components/AccountSettings.tsx +48 -36
- package/src/widget/components/ChainFilterDropdown.tsx +24 -3
- package/src/widget/components/ClassicSwap.tsx +24 -62
- package/src/widget/components/ConnectWallet.tsx +4 -1
- package/src/widget/components/ConnectedWallets.tsx +21 -21
- package/src/widget/components/DynamicInputStyles.tsx +76 -0
- package/src/widget/components/Earn.tsx +34 -29
- package/src/widget/components/ErrorAnimationIcon.tsx +130 -0
- package/src/widget/components/FeeBreakdown.tsx +155 -0
- package/src/widget/components/Fund.tsx +10 -26
- package/src/widget/components/FundSwap.tsx +2 -2
- package/src/widget/components/FundingMethodSelectorButton.tsx +24 -14
- package/src/widget/components/Identicon.tsx +164 -95
- package/src/widget/components/MeshConnectExchanges.tsx +2 -15
- package/src/widget/components/Modal.tsx +0 -12
- package/src/widget/components/Pay.tsx +65 -63
- package/src/widget/components/PoolDeposit.tsx +206 -230
- package/src/widget/components/PoolWithdraw.tsx +219 -238
- package/src/widget/components/PriceImpactWarning.tsx +1 -1
- package/src/widget/components/QuoteDetails.tsx +25 -8
- package/src/widget/components/Receipt.tsx +16 -2
- package/src/widget/components/RecipientSelectorButton.tsx +7 -5
- package/src/widget/components/Recipients.tsx +1 -1
- package/src/widget/components/ScreenHeader.tsx +60 -36
- package/src/widget/components/Swap.tsx +2 -2
- package/src/widget/components/ThemeProvider.tsx +2 -1
- package/src/widget/components/TokenDisplayNonSelectable.tsx +40 -0
- package/src/widget/components/TokenImage.tsx +1 -1
- package/src/widget/components/TokenSelector.tsx +62 -53
- package/src/widget/components/TokenSelectorButton.tsx +38 -15
- package/src/widget/components/Tooltip.tsx +51 -0
- package/src/widget/components/TransferPendingVertical.tsx +1 -1
- package/src/widget/components/WaasFeeOptions.tsx +124 -5
- package/src/widget/components/WalletConfirmation.tsx +23 -13
- package/src/widget/components/WalletConnect.tsx +93 -29
- package/src/widget/hooks/useQuote.ts +413 -0
- package/src/widget/hooks/useSendForm.ts +8 -4
- package/src/widget/widget.tsx +175 -190
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { TransactionReceipt } from 'viem';
|
|
2
|
+
import { TradeType, PrepareSendFees } from '../../prepareSend.js';
|
|
3
|
+
import { Chain } from '../../chains.js';
|
|
4
|
+
import { SupportedToken } from '../../tokens.js';
|
|
5
|
+
import { TransactionState } from '../../transactions.js';
|
|
6
|
+
import { MetaTxnReceipt, RelayerEnv } from '../../relayer.js';
|
|
7
|
+
import { SequenceEnv } from '../../config.js';
|
|
8
|
+
export type UseQuoteProps = {
|
|
9
|
+
walletClient?: any;
|
|
10
|
+
fromTokenAddress?: string | null;
|
|
11
|
+
fromChainId?: number | null;
|
|
12
|
+
toTokenAddress?: string | null;
|
|
13
|
+
toChainId?: number | null;
|
|
14
|
+
toCalldata?: string | null;
|
|
15
|
+
swapAmount?: string | bigint;
|
|
16
|
+
toRecipient?: string | null;
|
|
17
|
+
tradeType?: TradeType | null;
|
|
18
|
+
slippageTolerance?: string | number | null;
|
|
19
|
+
onStatusUpdate?: ((transactionStates: TransactionState[]) => void) | null;
|
|
20
|
+
quoteProvider?: string | null;
|
|
21
|
+
gasless?: boolean;
|
|
22
|
+
paymasterUrl?: string;
|
|
23
|
+
selectedFeeToken?: {
|
|
24
|
+
tokenAddress: string;
|
|
25
|
+
tokenSymbol?: string;
|
|
26
|
+
} | null;
|
|
27
|
+
abortSignal?: AbortSignal;
|
|
28
|
+
};
|
|
29
|
+
export type SwapReturn = {
|
|
30
|
+
originTransaction: {
|
|
31
|
+
transactionHash?: string | null;
|
|
32
|
+
explorerUrl?: string | null;
|
|
33
|
+
receipt: TransactionReceipt | MetaTxnReceipt | null;
|
|
34
|
+
};
|
|
35
|
+
destinationTransaction: {
|
|
36
|
+
transactionHash?: string | null;
|
|
37
|
+
explorerUrl?: string | null;
|
|
38
|
+
receipt: MetaTxnReceipt | null;
|
|
39
|
+
};
|
|
40
|
+
totalCompletionSeconds?: number;
|
|
41
|
+
};
|
|
42
|
+
export type QuoteProviderInfo = {
|
|
43
|
+
id: string;
|
|
44
|
+
name: string;
|
|
45
|
+
url: string;
|
|
46
|
+
};
|
|
47
|
+
export type Quote = {
|
|
48
|
+
fromAmount: string;
|
|
49
|
+
fromAmountMin: string;
|
|
50
|
+
toAmount: string;
|
|
51
|
+
toAmountMin: string;
|
|
52
|
+
originToken: SupportedToken;
|
|
53
|
+
destinationToken: SupportedToken;
|
|
54
|
+
originChain: Chain;
|
|
55
|
+
destinationChain: Chain;
|
|
56
|
+
fees: PrepareSendFees;
|
|
57
|
+
slippageTolerance: string;
|
|
58
|
+
priceImpact: string;
|
|
59
|
+
completionEstimateSeconds: number;
|
|
60
|
+
transactionStates?: TransactionState[];
|
|
61
|
+
originTokenRate?: string;
|
|
62
|
+
quoteProvider?: QuoteProviderInfo | null;
|
|
63
|
+
destinationTokenRate?: string;
|
|
64
|
+
fromAmountUsdDisplay?: string;
|
|
65
|
+
toAmountUsdDisplay?: string;
|
|
66
|
+
gasCostUsd?: number;
|
|
67
|
+
gasCostUsdDisplay?: string;
|
|
68
|
+
gasCost?: string;
|
|
69
|
+
gasCostFormatted?: string;
|
|
70
|
+
};
|
|
71
|
+
export type UseQuoteReturn = {
|
|
72
|
+
quote: Quote | null;
|
|
73
|
+
swap: (() => Promise<SwapReturn | null>) | null;
|
|
74
|
+
isLoadingQuote: boolean;
|
|
75
|
+
quoteError: unknown;
|
|
76
|
+
refetchQuote: () => void;
|
|
77
|
+
abort: () => void;
|
|
78
|
+
};
|
|
79
|
+
export declare function useQuote({ walletClient, fromTokenAddress, fromChainId, toTokenAddress, toChainId, swapAmount, tradeType, toRecipient, toCalldata, slippageTolerance, onStatusUpdate, quoteProvider, gasless, paymasterUrl, selectedFeeToken, relayerEnv, nodeGatewayEnv, abortSignal: externalAbortSignal, }?: Partial<UseQuoteProps & {
|
|
80
|
+
relayerEnv?: RelayerEnv;
|
|
81
|
+
nodeGatewayEnv?: SequenceEnv;
|
|
82
|
+
}>): UseQuoteReturn;
|
|
83
|
+
//# sourceMappingURL=useQuote.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useQuote.d.ts","sourceRoot":"","sources":["../../../src/widget/hooks/useQuote.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAA;AAc9C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAElD,MAAM,MAAM,aAAa,GAAG;IAC1B,YAAY,CAAC,EAAE,GAAG,CAAA;IAClB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;IAC5B,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IAC1C,cAAc,CAAC,EAAE,CAAC,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,KAAK,IAAI,CAAC,GAAG,IAAI,CAAA;IACzE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,gBAAgB,CAAC,EAAE;QACjB,YAAY,EAAE,MAAM,CAAA;QACpB,WAAW,CAAC,EAAE,MAAM,CAAA;KACrB,GAAG,IAAI,CAAA;IACR,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,iBAAiB,EAAE;QACjB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;QAC/B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;QAC3B,OAAO,EAAE,kBAAkB,GAAG,cAAc,GAAG,IAAI,CAAA;KACpD,CAAA;IACD,sBAAsB,EAAE;QACtB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;QAC/B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;QAC3B,OAAO,EAAE,cAAc,GAAG,IAAI,CAAA;KAC/B,CAAA;IACD,sBAAsB,CAAC,EAAE,MAAM,CAAA;CAChC,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,KAAK,GAAG;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,cAAc,CAAA;IAC3B,gBAAgB,EAAE,cAAc,CAAA;IAChC,WAAW,EAAE,KAAK,CAAA;IAClB,gBAAgB,EAAE,KAAK,CAAA;IACvB,IAAI,EAAE,eAAe,CAAA;IACrB,iBAAiB,EAAE,MAAM,CAAA;IACzB,WAAW,EAAE,MAAM,CAAA;IACnB,yBAAyB,EAAE,MAAM,CAAA;IACjC,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAA;IACtC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,aAAa,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAA;IACxC,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IACnB,IAAI,EAAE,CAAC,MAAM,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAA;IAC/C,cAAc,EAAE,OAAO,CAAA;IACvB,UAAU,EAAE,OAAO,CAAA;IACnB,YAAY,EAAE,MAAM,IAAI,CAAA;IACxB,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB,CAAA;AAED,wBAAgB,QAAQ,CAAC,EACvB,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,SAAS,EACT,UAAU,EACV,SAAS,EACT,WAAW,EACX,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,OAAO,EACP,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,WAAW,EAAE,mBAAmB,GACjC,GAAE,OAAO,CACR,aAAa,GAAG;IAAE,UAAU,CAAC,EAAE,UAAU,CAAC;IAAC,cAAc,CAAC,EAAE,WAAW,CAAA;CAAE,CACrE,GAAG,cAAc,CAkStB"}
|
|
@@ -40,14 +40,14 @@ export type OnCompleteProps = {
|
|
|
40
40
|
transactionStates: TransactionState[];
|
|
41
41
|
};
|
|
42
42
|
export type UseSendProps = {
|
|
43
|
-
account
|
|
43
|
+
account?: Account;
|
|
44
44
|
toAmount?: string;
|
|
45
45
|
toRecipient?: string;
|
|
46
46
|
toChainId?: number;
|
|
47
47
|
toToken?: string;
|
|
48
48
|
toCalldata?: string;
|
|
49
49
|
refundAddress?: string;
|
|
50
|
-
walletClient
|
|
50
|
+
walletClient?: WalletClient;
|
|
51
51
|
onTransactionStateChange: (transactionStates: TransactionState[]) => void;
|
|
52
52
|
onError: (error: Error | string | null) => void;
|
|
53
53
|
onWaitingForWalletConfirm: (quote: PrepareSendQuote) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSendForm.d.ts","sourceRoot":"","sources":["../../../src/widget/hooks/useSendForm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EACL,KAAK,OAAO,EAIZ,KAAK,YAAY,EAElB,MAAM,MAAM,CAAA;AAKb,OAAO,EAEL,SAAS,EAET,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAU7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAMrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAS1D,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,YAAY,CAAC,EAAE;QACb,QAAQ,EAAE,MAAM,CAAA;QAChB,MAAM,EAAE,MAAM,CAAA;QACd,IAAI,EAAE,MAAM,CAAA;KACb,CAAA;CACF;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,KAAK,SAAS,GAAG;IACf,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,KAAK,YAAY,GAAG;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,iBAAiB,EAAE,gBAAgB,EAAE,CAAA;CACtC,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"useSendForm.d.ts","sourceRoot":"","sources":["../../../src/widget/hooks/useSendForm.ts"],"names":[],"mappings":"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"}
|
package/dist/widget/index.js
CHANGED
package/dist/widget/widget.d.ts
CHANGED
|
@@ -6,6 +6,11 @@ import { RelayerEnv } from '../relayer.js';
|
|
|
6
6
|
import { Theme } from '../theme.js';
|
|
7
7
|
import { TransactionState } from '../transactions.js';
|
|
8
8
|
export declare const aaveClient: AaveClient;
|
|
9
|
+
interface ModalContextType {
|
|
10
|
+
closeModal: () => void;
|
|
11
|
+
isModalOpen: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare const useModal: () => ModalContextType;
|
|
9
14
|
export type TrailsWidgetProps = {
|
|
10
15
|
appId?: string;
|
|
11
16
|
projectAccessKey?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widget.d.ts","sourceRoot":"","sources":["../../src/widget/widget.tsx"],"names":[],"mappings":"AAAA,OAAO,kCAAkC,CAAA;AAEzC,OAAO,EAAE,UAAU,EAAgB,MAAM,aAAa,CAAA;AAGtD,OAAO,
|
|
1
|
+
{"version":3,"file":"widget.d.ts","sourceRoot":"","sources":["../../src/widget/widget.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "0xtrails",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.6",
|
|
4
4
|
"description": "SDK for Trails",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"@0xsequence/relayer": "0.0.0-20251021104024",
|
|
36
36
|
"@0xsequence/sessions": "^2.3.30",
|
|
37
37
|
"@0xsequence/signhub": "^2.3.30",
|
|
38
|
-
"@0xsequence/trails-api": "^0.1.
|
|
38
|
+
"@0xsequence/trails-api": "^0.1.4",
|
|
39
39
|
"@0xsequence/wallet-core": "0.0.0-20251021104024",
|
|
40
40
|
"@0xsequence/wallet-primitives": "0.0.0-20251021104024",
|
|
41
41
|
"@aave/react": "^0.7.0",
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { logger } from "./logger.js"
|
|
2
|
+
|
|
3
|
+
// Global abort controller registry to track active polling operations
|
|
4
|
+
const activeAbortControllers = new Map<string, AbortController>()
|
|
5
|
+
|
|
6
|
+
// Registry functions for managing abort controllers
|
|
7
|
+
export const abortControllerRegistry = {
|
|
8
|
+
register: (id: string, controller: AbortController) => {
|
|
9
|
+
logger.console.log("[trails-sdk] Registering abort controller:", id)
|
|
10
|
+
activeAbortControllers.set(id, controller)
|
|
11
|
+
},
|
|
12
|
+
unregister: (id: string) => {
|
|
13
|
+
logger.console.log("[trails-sdk] Unregistering abort controller:", id)
|
|
14
|
+
activeAbortControllers.delete(id)
|
|
15
|
+
},
|
|
16
|
+
abort: (id: string) => {
|
|
17
|
+
const controller = activeAbortControllers.get(id)
|
|
18
|
+
if (controller) {
|
|
19
|
+
controller.abort()
|
|
20
|
+
activeAbortControllers.delete(id)
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
abortAll: () => {
|
|
24
|
+
logger.console.log(
|
|
25
|
+
"[trails-sdk] Aborting all active operations:",
|
|
26
|
+
activeAbortControllers.size,
|
|
27
|
+
)
|
|
28
|
+
for (const [id, controller] of activeAbortControllers) {
|
|
29
|
+
logger.console.log("[trails-sdk] Aborting operation:", id)
|
|
30
|
+
controller.abort()
|
|
31
|
+
}
|
|
32
|
+
activeAbortControllers.clear()
|
|
33
|
+
},
|
|
34
|
+
getAll: () => Array.from(activeAbortControllers.keys()),
|
|
35
|
+
}
|
package/src/constants.ts
CHANGED
|
@@ -55,3 +55,6 @@ export const DEFAULT_WALLETCONNECT_PROJECT_ID =
|
|
|
55
55
|
export const SITE_URL = "https://trails.build/"
|
|
56
56
|
|
|
57
57
|
export const DEFAULT_SLIPPAGE_TOLERANCE = "0.05" // 0.001 = 0.1%, 0.005 = 0.5%, 0.03 = 3%, 0.05 = 5%
|
|
58
|
+
|
|
59
|
+
export const DEFAULT_MODE = "pay"
|
|
60
|
+
export const DEFAULT_THEME = "light"
|
package/src/fees.ts
ADDED
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import type { GetIntentCallsPayloadsReturn } from "./intents.js"
|
|
2
|
+
import { getTokenInfo } from "./tokens.js"
|
|
3
|
+
import { formatRawAmount, formatUsdAmountDisplay } from "./tokenBalances.js"
|
|
4
|
+
import { zeroAddress } from "viem"
|
|
5
|
+
|
|
6
|
+
export interface FeeItem {
|
|
7
|
+
amount: string
|
|
8
|
+
tokenSymbol: string
|
|
9
|
+
tokenAddress: string
|
|
10
|
+
chainId: number
|
|
11
|
+
usdValue: string
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface TrailsFeeBreakdown {
|
|
15
|
+
originRelayFee?: FeeItem
|
|
16
|
+
destinationRelayFee?: FeeItem
|
|
17
|
+
providerFee?: FeeItem
|
|
18
|
+
trailsFee?: FeeItem
|
|
19
|
+
totalUsdValue?: string
|
|
20
|
+
originChainId?: number
|
|
21
|
+
destinationChainId?: number
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Helper function to format token amounts with proper decimal conversion
|
|
25
|
+
async function formatTokenAmount(
|
|
26
|
+
amount: string | number | undefined,
|
|
27
|
+
tokenAddress: string,
|
|
28
|
+
chainId: number,
|
|
29
|
+
): Promise<string> {
|
|
30
|
+
if (!amount) return "0"
|
|
31
|
+
const num = typeof amount === "string" ? parseFloat(amount) : amount
|
|
32
|
+
if (num === 0) return "0"
|
|
33
|
+
|
|
34
|
+
// Get token info to determine decimals
|
|
35
|
+
const tokenInfo = await getTokenInfo(chainId, tokenAddress)
|
|
36
|
+
if (!tokenInfo?.decimals) {
|
|
37
|
+
throw new Error(
|
|
38
|
+
`Token decimals not found for token ${tokenAddress} on chain ${chainId}`,
|
|
39
|
+
)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Use existing formatRawAmount utility
|
|
43
|
+
const formatted = formatRawAmount(BigInt(Math.floor(num)), tokenInfo.decimals)
|
|
44
|
+
|
|
45
|
+
// Handle very small amounts
|
|
46
|
+
const numFormatted = parseFloat(formatted)
|
|
47
|
+
if (numFormatted < 0.000001 && numFormatted > 0) return "<0.000001"
|
|
48
|
+
|
|
49
|
+
return formatted
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Extract fee breakdown from intent data
|
|
53
|
+
export async function extractTrailsFeeBreakdown(
|
|
54
|
+
intent: GetIntentCallsPayloadsReturn,
|
|
55
|
+
): Promise<TrailsFeeBreakdown | null> {
|
|
56
|
+
const trailsFee = intent.payloads?.trailsFee
|
|
57
|
+
if (!trailsFee?.executeQuote?.chainQuotes) {
|
|
58
|
+
return null
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const chainQuotes = trailsFee.executeQuote.chainQuotes
|
|
62
|
+
|
|
63
|
+
// Get chain IDs from the calls array to determine origin and destination chains
|
|
64
|
+
const calls = intent.payloads?.calls || []
|
|
65
|
+
const originChainId = calls[0]?.chainId // First call is origin chain
|
|
66
|
+
const destinationChainId = calls[1]?.chainId // Second call is destination chain
|
|
67
|
+
|
|
68
|
+
// Find quotes by chainId
|
|
69
|
+
const originChainQuote = chainQuotes.find(
|
|
70
|
+
(quote: any) => quote.chainId === originChainId,
|
|
71
|
+
)
|
|
72
|
+
const destinationChainQuote = chainQuotes.find(
|
|
73
|
+
(quote: any) => quote.chainId === destinationChainId,
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
// If we can't find any chain quotes, return null
|
|
77
|
+
if (!originChainQuote && !destinationChainQuote) {
|
|
78
|
+
console.warn(
|
|
79
|
+
"[trails-sdk] Could not find any chain quotes for fee breakdown",
|
|
80
|
+
{
|
|
81
|
+
originChainId,
|
|
82
|
+
destinationChainId,
|
|
83
|
+
availableChainIds: chainQuotes.map((q: any) => q.chainId),
|
|
84
|
+
},
|
|
85
|
+
)
|
|
86
|
+
return null
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const breakdown: TrailsFeeBreakdown = {}
|
|
90
|
+
|
|
91
|
+
// Extract origin relay fee if available
|
|
92
|
+
if (originChainQuote) {
|
|
93
|
+
const originTokenSymbol = originChainQuote.nativeTokenSymbol || "ETH"
|
|
94
|
+
const originChainIdNum = parseInt(originChainId || "0", 10)
|
|
95
|
+
const nativeTokenAddress = zeroAddress
|
|
96
|
+
|
|
97
|
+
breakdown.originRelayFee = {
|
|
98
|
+
amount: await formatTokenAmount(
|
|
99
|
+
originChainQuote.totalFeeAmount,
|
|
100
|
+
nativeTokenAddress,
|
|
101
|
+
originChainIdNum,
|
|
102
|
+
),
|
|
103
|
+
tokenSymbol: originTokenSymbol,
|
|
104
|
+
tokenAddress: nativeTokenAddress,
|
|
105
|
+
chainId: originChainIdNum,
|
|
106
|
+
usdValue: formatUsdAmountDisplay(originChainQuote.totalFeeUSD),
|
|
107
|
+
}
|
|
108
|
+
breakdown.originChainId = originChainIdNum
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Extract destination relay fee if available
|
|
112
|
+
if (destinationChainQuote) {
|
|
113
|
+
const destinationTokenSymbol =
|
|
114
|
+
destinationChainQuote.nativeTokenSymbol || "ETH"
|
|
115
|
+
const destinationChainIdNum = parseInt(destinationChainId || "0", 10)
|
|
116
|
+
const nativeTokenAddress = zeroAddress
|
|
117
|
+
|
|
118
|
+
breakdown.destinationRelayFee = {
|
|
119
|
+
amount: await formatTokenAmount(
|
|
120
|
+
destinationChainQuote.totalFeeAmount,
|
|
121
|
+
nativeTokenAddress,
|
|
122
|
+
destinationChainIdNum,
|
|
123
|
+
),
|
|
124
|
+
tokenSymbol: destinationTokenSymbol,
|
|
125
|
+
tokenAddress: nativeTokenAddress,
|
|
126
|
+
chainId: destinationChainIdNum,
|
|
127
|
+
usdValue: formatUsdAmountDisplay(destinationChainQuote.totalFeeUSD),
|
|
128
|
+
}
|
|
129
|
+
breakdown.destinationChainId = destinationChainIdNum
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Extract provider fee from crossChainFee if available
|
|
133
|
+
const providerFeeAmount = trailsFee.crossChainFee?.providerFeeUSD
|
|
134
|
+
const providerFeeRawAmount = trailsFee.crossChainFee?.providerFee
|
|
135
|
+
if (providerFeeAmount !== undefined || providerFeeRawAmount !== undefined) {
|
|
136
|
+
const feeTokenAddress = trailsFee.feeToken || zeroAddress
|
|
137
|
+
const originChainIdNum = parseInt(originChainId || "0", 10)
|
|
138
|
+
|
|
139
|
+
// Get token info to determine the actual token symbol
|
|
140
|
+
const feeTokenInfo = await getTokenInfo(originChainIdNum, feeTokenAddress)
|
|
141
|
+
if (!feeTokenInfo?.symbol) {
|
|
142
|
+
throw new Error(
|
|
143
|
+
`Token symbol not found for provider fee token ${feeTokenAddress} on chain ${originChainIdNum}`,
|
|
144
|
+
)
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
breakdown.providerFee = {
|
|
148
|
+
amount: await formatTokenAmount(
|
|
149
|
+
providerFeeRawAmount,
|
|
150
|
+
feeTokenAddress,
|
|
151
|
+
originChainIdNum,
|
|
152
|
+
),
|
|
153
|
+
tokenSymbol: feeTokenInfo.symbol,
|
|
154
|
+
tokenAddress: feeTokenAddress,
|
|
155
|
+
chainId: originChainIdNum,
|
|
156
|
+
usdValue: formatUsdAmountDisplay(providerFeeAmount),
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// Extract Trails platform fee from crossChainFee if available
|
|
161
|
+
const trailsFeeAmount = trailsFee.crossChainFee?.trailsSwapFeeUSD
|
|
162
|
+
const trailsFeeRawAmount = trailsFee.crossChainFee?.trailsSwapFee
|
|
163
|
+
if (trailsFeeAmount !== undefined || trailsFeeRawAmount !== undefined) {
|
|
164
|
+
const feeTokenAddress = trailsFee.feeToken || zeroAddress
|
|
165
|
+
const originChainIdNum = parseInt(originChainId || "0", 10)
|
|
166
|
+
|
|
167
|
+
// Get token info to determine the actual token symbol
|
|
168
|
+
const feeTokenInfo = await getTokenInfo(originChainIdNum, feeTokenAddress)
|
|
169
|
+
if (!feeTokenInfo?.symbol) {
|
|
170
|
+
throw new Error(
|
|
171
|
+
`Token symbol not found for trails fee token ${feeTokenAddress} on chain ${originChainIdNum}`,
|
|
172
|
+
)
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
breakdown.trailsFee = {
|
|
176
|
+
amount: await formatTokenAmount(
|
|
177
|
+
trailsFeeRawAmount,
|
|
178
|
+
feeTokenAddress,
|
|
179
|
+
originChainIdNum,
|
|
180
|
+
),
|
|
181
|
+
tokenSymbol: feeTokenInfo.symbol,
|
|
182
|
+
tokenAddress: feeTokenAddress,
|
|
183
|
+
chainId: originChainIdNum,
|
|
184
|
+
usdValue: formatUsdAmountDisplay(trailsFeeAmount),
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// Calculate total USD value from the actual data
|
|
189
|
+
const originUsd = parseFloat(originChainQuote?.totalFeeUSD || "0")
|
|
190
|
+
const destinationUsd = parseFloat(destinationChainQuote?.totalFeeUSD || "0")
|
|
191
|
+
const providerUsd =
|
|
192
|
+
typeof providerFeeAmount === "number" ? providerFeeAmount : 0
|
|
193
|
+
const trailsUsd = typeof trailsFeeAmount === "number" ? trailsFeeAmount : 0
|
|
194
|
+
const totalUsd = originUsd + destinationUsd + providerUsd + trailsUsd
|
|
195
|
+
|
|
196
|
+
breakdown.totalUsdValue = formatUsdAmountDisplay(totalUsd)
|
|
197
|
+
|
|
198
|
+
return breakdown
|
|
199
|
+
}
|