0xtrails 0.12.2 → 0.13.0

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.
Files changed (243) hide show
  1. package/dist/abis/trailsHydrate.d.ts.map +1 -1
  2. package/dist/analytics.d.ts +41 -0
  3. package/dist/analytics.d.ts.map +1 -1
  4. package/dist/{ccip-62W6LwH2.js → ccip-Cg9-lJ6K.js} +16 -16
  5. package/dist/chainSwitch.d.ts.map +1 -1
  6. package/dist/chains.d.ts +9 -3
  7. package/dist/chains.d.ts.map +1 -1
  8. package/dist/error.d.ts +1 -0
  9. package/dist/error.d.ts.map +1 -1
  10. package/dist/{index-C0QTNYIA.js → index-DEojZg7b.js} +50431 -50424
  11. package/dist/index.d.ts +1 -3
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +377 -421
  14. package/dist/intentReceiptPoller.d.ts.map +1 -1
  15. package/dist/intents.d.ts +1 -3
  16. package/dist/intents.d.ts.map +1 -1
  17. package/dist/mutations.d.ts +1 -4
  18. package/dist/mutations.d.ts.map +1 -1
  19. package/dist/prepareSend.d.ts.map +1 -1
  20. package/dist/query/balance.hooks.d.ts.map +1 -1
  21. package/dist/query/chains.hooks.d.ts.map +1 -1
  22. package/dist/query/chains.queries.d.ts +4 -1
  23. package/dist/query/chains.queries.d.ts.map +1 -1
  24. package/dist/queryParams.d.ts.map +1 -1
  25. package/dist/recover.d.ts.map +1 -1
  26. package/dist/tokens.d.ts.map +1 -1
  27. package/dist/transactionIntent/deposits/depositOrchestrator.d.ts.map +1 -1
  28. package/dist/transactionIntent/deposits/gaslessDeposit.d.ts.map +1 -1
  29. package/dist/transactionIntent/deposits/standardDeposit.d.ts +1 -7
  30. package/dist/transactionIntent/deposits/standardDeposit.d.ts.map +1 -1
  31. package/dist/transactionIntent/handlers/intentHandler.d.ts.map +1 -1
  32. package/dist/transactionIntent/helpers/transactionStateHelpers.d.ts +10 -1
  33. package/dist/transactionIntent/helpers/transactionStateHelpers.d.ts.map +1 -1
  34. package/dist/transactionIntent/types.d.ts +3 -6
  35. package/dist/transactionIntent/types.d.ts.map +1 -1
  36. package/dist/transactionIntent/utils/resilientDepositTracker.d.ts +3 -3
  37. package/dist/transactionIntent/utils/resilientDepositTracker.d.ts.map +1 -1
  38. package/dist/transactions.d.ts +2 -0
  39. package/dist/transactions.d.ts.map +1 -1
  40. package/dist/umd/trails.min.js +200 -200
  41. package/dist/walletUtils.d.ts +4 -0
  42. package/dist/walletUtils.d.ts.map +1 -1
  43. package/dist/wallets.d.ts +2 -1
  44. package/dist/wallets.d.ts.map +1 -1
  45. package/dist/widget/components/AccountActionsDropdown.d.ts.map +1 -1
  46. package/dist/widget/components/AccountIntentTransactionHistoryButton.d.ts.map +1 -1
  47. package/dist/widget/components/AccountSettings.d.ts.map +1 -1
  48. package/dist/widget/components/ClassicSwap.d.ts.map +1 -1
  49. package/dist/widget/components/ConnectWallet.d.ts.map +1 -1
  50. package/dist/widget/components/ConnectedWallets.d.ts +5 -1
  51. package/dist/widget/components/ConnectedWallets.d.ts.map +1 -1
  52. package/dist/widget/components/DepositTracker.d.ts +1 -1
  53. package/dist/widget/components/DepositTracker.d.ts.map +1 -1
  54. package/dist/widget/components/DirectTransfer.d.ts +0 -8
  55. package/dist/widget/components/DirectTransfer.d.ts.map +1 -1
  56. package/dist/widget/components/Fund.d.ts +1 -1
  57. package/dist/widget/components/Fund.d.ts.map +1 -1
  58. package/dist/widget/components/FundMethods.d.ts.map +1 -1
  59. package/dist/widget/components/FundWalletSelection.d.ts +0 -8
  60. package/dist/widget/components/FundWalletSelection.d.ts.map +1 -1
  61. package/dist/widget/components/FundingMethodSelectorButton.d.ts +1 -1
  62. package/dist/widget/components/FundingMethodSelectorButton.d.ts.map +1 -1
  63. package/dist/widget/components/MeldStepsFlow.d.ts.map +1 -1
  64. package/dist/widget/components/OnrampErrorScreen.d.ts.map +1 -1
  65. package/dist/widget/components/OnrampPaymentMethods.d.ts.map +1 -1
  66. package/dist/widget/components/OnrampProviderConfirmation.d.ts +0 -6
  67. package/dist/widget/components/OnrampProviderConfirmation.d.ts.map +1 -1
  68. package/dist/widget/components/Pay.d.ts.map +1 -1
  69. package/dist/widget/components/QrCode.d.ts.map +1 -1
  70. package/dist/widget/components/QuoteDetails.d.ts.map +1 -1
  71. package/dist/widget/components/Receipt.d.ts.map +1 -1
  72. package/dist/widget/components/ReceiptRecoverableFunds.d.ts +25 -0
  73. package/dist/widget/components/ReceiptRecoverableFunds.d.ts.map +1 -0
  74. package/dist/widget/components/RecipientSelectorButton.d.ts +3 -1
  75. package/dist/widget/components/RecipientSelectorButton.d.ts.map +1 -1
  76. package/dist/widget/components/Recipients.d.ts.map +1 -1
  77. package/dist/widget/components/Swap.d.ts +2 -16
  78. package/dist/widget/components/Swap.d.ts.map +1 -1
  79. package/dist/widget/components/TokenSelector.d.ts.map +1 -1
  80. package/dist/widget/components/TransactionDetails.d.ts.map +1 -1
  81. package/dist/widget/components/TransactionHistoryItem.d.ts.map +1 -1
  82. package/dist/widget/components/TransferPendingVertical.d.ts.map +1 -1
  83. package/dist/widget/components/TruncatedTransactionHash.d.ts.map +1 -1
  84. package/dist/widget/components/WalletConfirmation.d.ts.map +1 -1
  85. package/dist/widget/components/WalletConnect.d.ts.map +1 -1
  86. package/dist/widget/components/WidgetProviders.d.ts.map +1 -1
  87. package/dist/widget/components/Withdraw.d.ts.map +1 -1
  88. package/dist/widget/css/compiled.css +1 -1
  89. package/dist/widget/hooks/useClickTracking.d.ts.map +1 -1
  90. package/dist/widget/hooks/useDebugScreens.d.ts +1 -10
  91. package/dist/widget/hooks/useDebugScreens.d.ts.map +1 -1
  92. package/dist/widget/hooks/useDepositMonitor.d.ts +2 -4
  93. package/dist/widget/hooks/useDepositMonitor.d.ts.map +1 -1
  94. package/dist/widget/hooks/useExternalFundingReceiptSync.d.ts +11 -0
  95. package/dist/widget/hooks/useExternalFundingReceiptSync.d.ts.map +1 -0
  96. package/dist/widget/hooks/useIntentReceiptBalances.d.ts +16 -0
  97. package/dist/widget/hooks/useIntentReceiptBalances.d.ts.map +1 -0
  98. package/dist/widget/hooks/useQuote.d.ts +0 -4
  99. package/dist/widget/hooks/useQuote.d.ts.map +1 -1
  100. package/dist/widget/hooks/useScreenTracking.d.ts +2 -0
  101. package/dist/widget/hooks/useScreenTracking.d.ts.map +1 -0
  102. package/dist/widget/hooks/useSelectedFundMethod.d.ts +0 -2
  103. package/dist/widget/hooks/useSelectedFundMethod.d.ts.map +1 -1
  104. package/dist/widget/hooks/useSendForm.d.ts +0 -4
  105. package/dist/widget/hooks/useSendForm.d.ts.map +1 -1
  106. package/dist/widget/hooks/useTokenList.d.ts.map +1 -1
  107. package/dist/widget/hooks/useTrailsSendTransaction.d.ts.map +1 -1
  108. package/dist/widget/hooks/useViewManager.d.ts +89 -0
  109. package/dist/widget/hooks/useViewManager.d.ts.map +1 -0
  110. package/dist/widget/hooks/useWalletConnectUri.d.ts.map +1 -1
  111. package/dist/widget/hooks/useWalletConnectionContext.d.ts +1 -1
  112. package/dist/widget/hooks/useWalletConnectionContext.d.ts.map +1 -1
  113. package/dist/widget/index.d.ts +1 -1
  114. package/dist/widget/index.d.ts.map +1 -1
  115. package/dist/widget/index.js +7 -6
  116. package/dist/widget/providers/TrailsProvider.d.ts.map +1 -1
  117. package/dist/widget/types/commonProps.d.ts +1 -6
  118. package/dist/widget/types/commonProps.d.ts.map +1 -1
  119. package/dist/widget/utils/forexRateStore.d.ts.map +1 -1
  120. package/dist/widget/utils/fundMethodSwitchState.d.ts +10 -0
  121. package/dist/widget/utils/fundMethodSwitchState.d.ts.map +1 -0
  122. package/dist/widget/utils/localeStore.d.ts.map +1 -1
  123. package/dist/widget/utils/viewManagerGuards.d.ts +5 -0
  124. package/dist/widget/utils/viewManagerGuards.d.ts.map +1 -0
  125. package/dist/widget/widget.d.ts +23 -2
  126. package/dist/widget/widget.d.ts.map +1 -1
  127. package/package.json +2 -2
  128. package/src/abis/trailsHydrate.ts +2 -1
  129. package/src/analytics.ts +60 -0
  130. package/src/chainSwitch.ts +11 -8
  131. package/src/chains.ts +82 -37
  132. package/src/constants.ts +2 -2
  133. package/src/error.ts +8 -0
  134. package/src/index.ts +1 -12
  135. package/src/intentReceiptPoller.ts +27 -0
  136. package/src/intents.ts +36 -87
  137. package/src/mutations.ts +11 -102
  138. package/src/onramp-client/index.ts +3 -3
  139. package/src/prepareSend.ts +6 -2
  140. package/src/query/balance.hooks.ts +31 -10
  141. package/src/query/chains.hooks.ts +7 -1
  142. package/src/query/chains.queries.ts +8 -5
  143. package/src/queryParams.ts +8 -6
  144. package/src/recover.ts +9 -9
  145. package/src/tokens.ts +4 -2
  146. package/src/transactionIntent/deposits/depositOrchestrator.ts +0 -2
  147. package/src/transactionIntent/deposits/gaslessDeposit.ts +8 -0
  148. package/src/transactionIntent/deposits/standardDeposit.ts +25 -35
  149. package/src/transactionIntent/handlers/intentHandler.ts +234 -138
  150. package/src/transactionIntent/helpers/transactionStateHelpers.ts +108 -1
  151. package/src/transactionIntent/types.ts +14 -8
  152. package/src/transactionIntent/utils/resilientDepositTracker.ts +72 -183
  153. package/src/transactions.ts +16 -0
  154. package/src/walletUtils.ts +188 -1
  155. package/src/wallets.ts +50 -15
  156. package/src/widget/compiled.css +1 -1
  157. package/src/widget/components/AccountActionsDropdown.tsx +4 -6
  158. package/src/widget/components/AccountIntentTransactionHistoryButton.tsx +4 -6
  159. package/src/widget/components/AccountSettings.tsx +36 -22
  160. package/src/widget/components/ClassicSwap.tsx +67 -9
  161. package/src/widget/components/ConnectWallet.tsx +5 -7
  162. package/src/widget/components/ConnectedWallets.tsx +143 -82
  163. package/src/widget/components/DepositTracker.tsx +4 -5
  164. package/src/widget/components/DirectTransfer.tsx +85 -84
  165. package/src/widget/components/Earn.tsx +3 -3
  166. package/src/widget/components/Fund.tsx +90 -17
  167. package/src/widget/components/FundMethods.tsx +77 -43
  168. package/src/widget/components/FundWalletSelection.tsx +13 -397
  169. package/src/widget/components/FundingMethodSelectorButton.tsx +11 -10
  170. package/src/widget/components/MeldStepsFlow.tsx +64 -30
  171. package/src/widget/components/OnrampErrorScreen.tsx +2 -18
  172. package/src/widget/components/OnrampPaymentMethods.tsx +4 -6
  173. package/src/widget/components/OnrampProviderConfirmation.tsx +91 -110
  174. package/src/widget/components/OriginTransferInformation.tsx +2 -2
  175. package/src/widget/components/Pay.tsx +27 -7
  176. package/src/widget/components/PaymentMethods.tsx +10 -10
  177. package/src/widget/components/PoolDeposit.tsx +2 -2
  178. package/src/widget/components/QrCode.tsx +13 -11
  179. package/src/widget/components/QuoteDetails.tsx +16 -6
  180. package/src/widget/components/Receipt.tsx +66 -6
  181. package/src/widget/components/ReceiptRecoverableFunds.tsx +135 -0
  182. package/src/widget/components/RecipientSelectorButton.tsx +6 -17
  183. package/src/widget/components/Recipients.tsx +38 -29
  184. package/src/widget/components/Swap.tsx +2 -25
  185. package/src/widget/components/TokenList.tsx +2 -2
  186. package/src/widget/components/TokenSelector.tsx +11 -11
  187. package/src/widget/components/TokenSelectorButton.tsx +3 -3
  188. package/src/widget/components/TrailsHookModal.tsx +1 -1
  189. package/src/widget/components/TransactionDetails.tsx +43 -37
  190. package/src/widget/components/TransactionHistoryItem.tsx +1 -42
  191. package/src/widget/components/TransferPendingVertical.tsx +11 -4
  192. package/src/widget/components/TruncatedTransactionHash.tsx +5 -0
  193. package/src/widget/components/WalletConfirmation.tsx +5 -8
  194. package/src/widget/components/WalletConnect.tsx +6 -2
  195. package/src/widget/components/WidgetProviders.tsx +34 -43
  196. package/src/widget/components/Withdraw.tsx +25 -11
  197. package/src/widget/hooks/useClickTracking.ts +5 -0
  198. package/src/widget/hooks/useDebugScreens.ts +40 -86
  199. package/src/widget/hooks/useDepositMonitor.ts +14 -149
  200. package/src/widget/hooks/useExternalFundingReceiptSync.ts +79 -0
  201. package/src/widget/hooks/useIntentReceiptBalances.ts +141 -0
  202. package/src/widget/hooks/useQuote.ts +7 -16
  203. package/src/widget/hooks/useScreenTracking.ts +14 -0
  204. package/src/widget/hooks/useSelectedFundMethod.tsx +0 -5
  205. package/src/widget/hooks/useSendForm.ts +5 -14
  206. package/src/widget/hooks/useTokenList.ts +3 -16
  207. package/src/widget/hooks/useTrailsSendTransaction.ts +1 -5
  208. package/src/widget/hooks/useViewManager.tsx +505 -0
  209. package/src/widget/hooks/useWalletConnectUri.tsx +77 -18
  210. package/src/widget/hooks/useWalletConnectionContext.tsx +1 -1
  211. package/src/widget/index.tsx +1 -0
  212. package/src/widget/providers/TrailsProvider.tsx +0 -41
  213. package/src/widget/styles.ts +1 -1
  214. package/src/widget/types/commonProps.ts +0 -8
  215. package/src/widget/utils/forexRateStore.ts +0 -2
  216. package/src/widget/utils/fundMethodSwitchState.ts +25 -0
  217. package/src/widget/utils/localeStore.ts +0 -1
  218. package/src/widget/utils/viewManagerGuards.ts +49 -0
  219. package/src/widget/widget.tsx +405 -316
  220. package/dist/intentStorage.d.ts +0 -24
  221. package/dist/intentStorage.d.ts.map +0 -1
  222. package/dist/mode.d.ts +0 -2
  223. package/dist/mode.d.ts.map +0 -1
  224. package/dist/widget/hooks/useBack.d.ts +0 -22
  225. package/dist/widget/hooks/useBack.d.ts.map +0 -1
  226. package/dist/widget/hooks/useCurrentScreen.d.ts +0 -13
  227. package/dist/widget/hooks/useCurrentScreen.d.ts.map +0 -1
  228. package/dist/widget/hooks/useInitialRedirect.d.ts +0 -7
  229. package/dist/widget/hooks/useInitialRedirect.d.ts.map +0 -1
  230. package/dist/widget/hooks/useMode.d.ts +0 -20
  231. package/dist/widget/hooks/useMode.d.ts.map +0 -1
  232. package/dist/widget/hooks/usePreviousScreen.d.ts +0 -12
  233. package/dist/widget/hooks/usePreviousScreen.d.ts.map +0 -1
  234. package/dist/widget/workers/intentExecutionWorker.d.ts +0 -73
  235. package/dist/widget/workers/intentExecutionWorker.d.ts.map +0 -1
  236. package/src/intentStorage.ts +0 -106
  237. package/src/mode.ts +0 -1
  238. package/src/widget/hooks/useBack.tsx +0 -210
  239. package/src/widget/hooks/useCurrentScreen.tsx +0 -73
  240. package/src/widget/hooks/useInitialRedirect.tsx +0 -70
  241. package/src/widget/hooks/useMode.tsx +0 -51
  242. package/src/widget/hooks/usePreviousScreen.ts +0 -36
  243. package/src/widget/workers/intentExecutionWorker.ts +0 -502
@@ -1,24 +0,0 @@
1
- interface StoredIntent {
2
- intentId: string;
3
- timestamp: number;
4
- lastCheckTime?: number;
5
- }
6
- /**
7
- * Store an intent ID for monitoring
8
- * This function stores intent IDs in localStorage for later processing
9
- */
10
- export declare function storeIntentForMonitoring(intentId: string): void;
11
- /**
12
- * Get all stored intent IDs
13
- */
14
- export declare function getStoredIntents(): StoredIntent[];
15
- /**
16
- * Remove a stored intent
17
- */
18
- export declare function removeStoredIntent(intentId: string): void;
19
- /**
20
- * Clear all stored intents
21
- */
22
- export declare function clearAllStoredIntents(): void;
23
- export {};
24
- //# sourceMappingURL=intentStorage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"intentStorage.d.ts","sourceRoot":"","sources":["../src/intentStorage.ts"],"names":[],"mappings":"AAIA,UAAU,YAAY;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAwC/D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,YAAY,EAAE,CAcjD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAezD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAO5C"}
package/dist/mode.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export type Mode = "pay" | "fund" | "earn" | "swap" | "withdraw";
2
- //# sourceMappingURL=mode.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mode.d.ts","sourceRoot":"","sources":["../src/mode.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAA"}
@@ -1,22 +0,0 @@
1
- import { ReactNode } from 'react';
2
- import { Screen } from './useCurrentScreen.js';
3
- interface BackContextType {
4
- goBack: (() => void) | undefined;
5
- canGoBack: boolean;
6
- clearHistory: () => void;
7
- isNavigatingBack: boolean;
8
- getHistory: () => Screen[];
9
- getBreadcrumbHistory: () => Screen[];
10
- addBreadcrumb: (screen: Screen) => void;
11
- setAccountSettingsSource: (screen: Screen) => void;
12
- getAccountSettingsSource: () => Screen | null;
13
- setCurrentScreenWithBack: (screen: Screen, backTo?: Screen) => void;
14
- getPreviousScreen: () => Screen | null;
15
- }
16
- interface BackProviderProps {
17
- children: ReactNode;
18
- }
19
- export declare function BackProvider({ children }: BackProviderProps): import("react/jsx-runtime").JSX.Element;
20
- export declare function useBack(): BackContextType;
21
- export {};
22
- //# sourceMappingURL=useBack.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useBack.d.ts","sourceRoot":"","sources":["../../../src/widget/hooks/useBack.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,EAAoB,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAGrE,UAAU,eAAe;IACvB,MAAM,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAA;IAChC,SAAS,EAAE,OAAO,CAAA;IAClB,YAAY,EAAE,MAAM,IAAI,CAAA;IACxB,gBAAgB,EAAE,OAAO,CAAA;IACzB,UAAU,EAAE,MAAM,MAAM,EAAE,CAAA;IAC1B,oBAAoB,EAAE,MAAM,MAAM,EAAE,CAAA;IACpC,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,wBAAwB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IAClD,wBAAwB,EAAE,MAAM,MAAM,GAAG,IAAI,CAAA;IAC7C,wBAAwB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IACnE,iBAAiB,EAAE,MAAM,MAAM,GAAG,IAAI,CAAA;CACvC;AAID,UAAU,iBAAiB;IACzB,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE,iBAAiB,2CA0K3D;AAED,wBAAgB,OAAO,IAAI,eAAe,CAMzC"}
@@ -1,13 +0,0 @@
1
- import { ReactNode } from 'react';
2
- export type Screen = "connect" | "tokens" | "select-origin-token" | "select-origin-amount" | "send-form" | "fund-form" | "fund-methods" | "payment-methods" | "select-funding-wallet" | "onramp-payment-methods" | "recipients" | "earn-pools" | "earn" | "swap" | "withdraw" | "wallet-confirmation" | "qr-code-wallet-select" | "direct-transfer-screen" | "onramp-meld" | "pending" | "receipt" | "onramp-mesh" | "wallet-connect" | "wallet-list" | "wallet-connection-pending" | "account-history" | "account-settings" | "user-preferences" | "chain-list" | "disconnect" | "home" | "qrcode-options" | "meld-onramp" | "meld-history" | "onramp-confirmation";
3
- interface CurrentScreenContextType {
4
- currentScreen: Screen;
5
- setCurrentScreen: (screen: Screen) => void;
6
- }
7
- export declare function CurrentScreenProvider({ children, initialScreen, }: {
8
- children: ReactNode;
9
- initialScreen: Screen;
10
- }): import("react/jsx-runtime").JSX.Element;
11
- export declare function useCurrentScreen(): CurrentScreenContextType;
12
- export {};
13
- //# sourceMappingURL=useCurrentScreen.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useCurrentScreen.d.ts","sourceRoot":"","sources":["../../../src/widget/hooks/useCurrentScreen.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAE3E,MAAM,MAAM,MAAM,GACd,SAAS,GACT,QAAQ,GACR,qBAAqB,GACrB,sBAAsB,GACtB,WAAW,GACX,WAAW,GACX,cAAc,GACd,iBAAiB,GACjB,uBAAuB,GACvB,wBAAwB,GACxB,YAAY,GACZ,YAAY,GACZ,MAAM,GACN,MAAM,GACN,UAAU,GACV,qBAAqB,GACrB,uBAAuB,GACvB,wBAAwB,GACxB,aAAa,GACb,SAAS,GACT,SAAS,GACT,aAAa,GACb,gBAAgB,GAChB,aAAa,GACb,2BAA2B,GAC3B,iBAAiB,GACjB,kBAAkB,GAClB,kBAAkB,GAClB,YAAY,GACZ,YAAY,GACZ,MAAM,GACN,gBAAgB,GAChB,aAAa,GACb,cAAc,GACd,qBAAqB,CAAA;AAEzB,UAAU,wBAAwB;IAChC,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;CAC3C;AAMD,wBAAgB,qBAAqB,CAAC,EACpC,QAAQ,EACR,aAAa,GACd,EAAE;IACD,QAAQ,EAAE,SAAS,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;CACtB,2CAQA;AAED,wBAAgB,gBAAgB,IAAI,wBAAwB,CAQ3D"}
@@ -1,7 +0,0 @@
1
- import { Screen } from './useCurrentScreen.js';
2
- import { Mode } from '../../mode.js';
3
- export declare function useInitialRedirect(isConnected: boolean, currentMode: Mode, getInitialScreenForMode: (mode: Mode) => Screen): {
4
- hasConnectedBefore: boolean;
5
- isInitialScreenSet: boolean;
6
- };
7
- //# sourceMappingURL=useInitialRedirect.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useInitialRedirect.d.ts","sourceRoot":"","sources":["../../../src/widget/hooks/useInitialRedirect.tsx"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAGrE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAEzC,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,OAAO,EACpB,WAAW,EAAE,IAAI,EACjB,uBAAuB,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM;;;EA4DhD"}
@@ -1,20 +0,0 @@
1
- import { ReactNode } from 'react';
2
- import { Mode } from '../../mode.js';
3
- interface ModeContextType {
4
- /** The effective mode — use this for all UI decisions */
5
- mode: Mode;
6
- /** The mode from the widget prop (source of truth) */
7
- configuredMode: Mode;
8
- /** Temporarily override the mode (e.g. "Buy Crypto" from settings) */
9
- setMode: (mode: Mode) => void;
10
- /** Clear any override, reverting to configuredMode */
11
- resetMode: () => void;
12
- }
13
- interface ModeProviderProps {
14
- children: ReactNode;
15
- configuredMode: Mode;
16
- }
17
- export declare function ModeProvider({ children, configuredMode }: ModeProviderProps): import("react/jsx-runtime").JSX.Element;
18
- export declare function useMode(): ModeContextType;
19
- export {};
20
- //# sourceMappingURL=useMode.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useMode.d.ts","sourceRoot":"","sources":["../../../src/widget/hooks/useMode.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAEzC,UAAU,eAAe;IACvB,yDAAyD;IACzD,IAAI,EAAE,IAAI,CAAA;IACV,sDAAsD;IACtD,cAAc,EAAE,IAAI,CAAA;IACpB,sEAAsE;IACtE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;IAC7B,sDAAsD;IACtD,SAAS,EAAE,MAAM,IAAI,CAAA;CACtB;AAID,UAAU,iBAAiB;IACzB,QAAQ,EAAE,SAAS,CAAA;IACnB,cAAc,EAAE,IAAI,CAAA;CACrB;AAED,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,iBAAiB,2CAoB3E;AAED,wBAAgB,OAAO,IAAI,eAAe,CAMzC"}
@@ -1,12 +0,0 @@
1
- import { default as React, ReactNode } from 'react';
2
- import { Screen } from './useCurrentScreen.js';
3
- interface PreviousScreenContextType {
4
- previousScreen: Screen | null;
5
- setPreviousScreen: (screen: Screen | null) => void;
6
- }
7
- export declare function PreviousScreenProvider({ children }: {
8
- children: ReactNode;
9
- }): React.FunctionComponentElement<React.ProviderProps<PreviousScreenContextType | null>>;
10
- export declare function usePreviousScreen(): PreviousScreenContextType;
11
- export {};
12
- //# sourceMappingURL=usePreviousScreen.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"usePreviousScreen.d.ts","sourceRoot":"","sources":["../../../src/widget/hooks/usePreviousScreen.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAIZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAA;AACd,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAEnD,UAAU,yBAAyB;IACjC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;CACnD;AAMD,wBAAgB,sBAAsB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,yFAQ3E;AAED,wBAAgB,iBAAiB,IAAI,yBAAyB,CAQ7D"}
@@ -1,73 +0,0 @@
1
- import { TrailsClient } from '../../trailsClient.js';
2
- interface IntentExecutionWorkerOptions {
3
- trailsClient: TrailsClient;
4
- trailsApiKey: string;
5
- sequenceIndexerUrl: string;
6
- enabled?: boolean;
7
- }
8
- export declare class IntentExecutionWorker {
9
- private static instance;
10
- private intervalId;
11
- private isRunning;
12
- private trailsClient;
13
- private trailsApiKey;
14
- private sequenceIndexerUrl;
15
- private enabled;
16
- private abortController;
17
- private constructor();
18
- /**
19
- * Get or create the singleton instance of IntentExecutionWorker
20
- */
21
- static getInstance(options?: IntentExecutionWorkerOptions): IntentExecutionWorker;
22
- /**
23
- * Update the worker options (used when re-initializing with new config)
24
- */
25
- private updateOptions;
26
- /**
27
- * Destroy the singleton instance (useful for cleanup/testing)
28
- */
29
- static destroyInstance(): void;
30
- /**
31
- * Start the worker to monitor pending intents
32
- */
33
- start(): void;
34
- /**
35
- * Stop the worker
36
- */
37
- stop(): void;
38
- /**
39
- * Check all pending intents and process them if needed
40
- */
41
- private checkPendingIntents;
42
- /**
43
- * Process a single intent
44
- */
45
- private processIntent;
46
- /**
47
- * Store an intent ID for monitoring
48
- * @preserve
49
- */
50
- static storeIntentForMonitoring(intentId: string): void;
51
- /**
52
- * Get stored intents (static version for external use)
53
- */
54
- private static getStoredIntentsStatic;
55
- /**
56
- * Get stored intents
57
- */
58
- private getStoredIntents;
59
- /**
60
- * Update a stored intent
61
- */
62
- private updateStoredIntent;
63
- /**
64
- * Remove a stored intent
65
- */
66
- private removeStoredIntent;
67
- /**
68
- * Clear all stored intents (useful for cleanup/testing)
69
- */
70
- static clearAllStoredIntents(): void;
71
- }
72
- export {};
73
- //# sourceMappingURL=intentExecutionWorker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"intentExecutionWorker.d.ts","sourceRoot":"","sources":["../../../src/widget/workers/intentExecutionWorker.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAezD,UAAU,4BAA4B;IACpC,YAAY,EAAE,YAAY,CAAA;IAC1B,YAAY,EAAE,MAAM,CAAA;IACpB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAGD,qBAAa,qBAAqB;IAEhC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAqC;IAC5D,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,kBAAkB,CAAQ;IAClC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,eAAe,CAA+B;IAEtD,OAAO;IAOP;;OAEG;IACH,MAAM,CAAC,WAAW,CAChB,OAAO,CAAC,EAAE,4BAA4B,GACrC,qBAAqB;IAqBxB;;OAEG;IAEH,OAAO,CAAC,aAAa;IAoBrB;;OAEG;IACH,MAAM,CAAC,eAAe,IAAI,IAAI;IAU9B;;OAEG;IACH,KAAK,IAAI,IAAI;IA4Bb;;OAEG;IACH,IAAI,IAAI,IAAI;IAiBZ;;OAEG;YACW,mBAAmB;IAkCjC;;OAEG;YACW,aAAa;IA0I3B;;;OAGG;IACH,MAAM,CAAC,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAqEvD;;OAEG;IAEH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAgBrC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA0B1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;OAEG;IACH,MAAM,CAAC,qBAAqB,IAAI,IAAI;CAarC"}
@@ -1,106 +0,0 @@
1
- import { logger } from "./logger.js"
2
-
3
- const INTENT_STORAGE_KEY = "trails_pending_intents"
4
-
5
- interface StoredIntent {
6
- intentId: string
7
- timestamp: number
8
- lastCheckTime?: number
9
- }
10
-
11
- /**
12
- * Store an intent ID for monitoring
13
- * This function stores intent IDs in localStorage for later processing
14
- */
15
- export function storeIntentForMonitoring(intentId: string): void {
16
- try {
17
- logger.console.log(
18
- `[trails-sdk] Storing intent ${intentId} for monitoring in localStorage`,
19
- )
20
-
21
- // Get existing intents
22
- const stored = localStorage.getItem(INTENT_STORAGE_KEY)
23
- const existingIntents: StoredIntent[] = stored ? JSON.parse(stored) : []
24
-
25
- // Check if intent already exists
26
- const existingIndex = existingIntents.findIndex(
27
- (i) => i.intentId === intentId,
28
- )
29
-
30
- const storedIntent: StoredIntent = {
31
- intentId,
32
- timestamp: Date.now(),
33
- }
34
-
35
- if (existingIndex >= 0) {
36
- // Update existing intent
37
- existingIntents[existingIndex] = storedIntent
38
- } else {
39
- // Add new intent
40
- existingIntents.push(storedIntent)
41
- }
42
-
43
- // Store back to localStorage
44
- localStorage.setItem(INTENT_STORAGE_KEY, JSON.stringify(existingIntents))
45
-
46
- logger.console.log(
47
- `[trails-sdk] Successfully stored intent ${intentId}. Total stored intents: ${existingIntents.length}`,
48
- )
49
- } catch (error) {
50
- logger.console.error(
51
- `[trails-sdk] Failed to store intent ${intentId} for monitoring:`,
52
- error,
53
- )
54
- }
55
- }
56
-
57
- /**
58
- * Get all stored intent IDs
59
- */
60
- export function getStoredIntents(): StoredIntent[] {
61
- try {
62
- const stored = localStorage.getItem(INTENT_STORAGE_KEY)
63
- if (!stored) return []
64
-
65
- const intents = JSON.parse(stored) as StoredIntent[]
66
- return Array.isArray(intents) ? intents : []
67
- } catch (error) {
68
- logger.console.error(
69
- "[trails-sdk] Failed to retrieve stored intents:",
70
- error,
71
- )
72
- return []
73
- }
74
- }
75
-
76
- /**
77
- * Remove a stored intent
78
- */
79
- export function removeStoredIntent(intentId: string): void {
80
- try {
81
- const intents = getStoredIntents()
82
- const filtered = intents.filter((i) => i.intentId !== intentId)
83
- localStorage.setItem(INTENT_STORAGE_KEY, JSON.stringify(filtered))
84
-
85
- logger.console.log(
86
- `[trails-sdk] Removed intent ${intentId} from monitoring`,
87
- )
88
- } catch (error) {
89
- logger.console.error(
90
- `[trails-sdk] Failed to remove intent ${intentId}:`,
91
- error,
92
- )
93
- }
94
- }
95
-
96
- /**
97
- * Clear all stored intents
98
- */
99
- export function clearAllStoredIntents(): void {
100
- try {
101
- localStorage.removeItem(INTENT_STORAGE_KEY)
102
- logger.console.log("[trails-sdk] Cleared all stored intents")
103
- } catch (error) {
104
- logger.console.error("[trails-sdk] Failed to clear stored intents:", error)
105
- }
106
- }
package/src/mode.ts DELETED
@@ -1 +0,0 @@
1
- export type Mode = "pay" | "fund" | "earn" | "swap" | "withdraw"
@@ -1,210 +0,0 @@
1
- import {
2
- createContext,
3
- useContext,
4
- useState,
5
- useEffect,
6
- useCallback,
7
- } from "react"
8
- import type { ReactNode } from "react"
9
- import { useCurrentScreen, type Screen } from "./useCurrentScreen.js"
10
- import { logger } from "../../logger.js"
11
-
12
- interface BackContextType {
13
- goBack: (() => void) | undefined
14
- canGoBack: boolean
15
- clearHistory: () => void
16
- isNavigatingBack: boolean
17
- getHistory: () => Screen[]
18
- getBreadcrumbHistory: () => Screen[]
19
- addBreadcrumb: (screen: Screen) => void
20
- setAccountSettingsSource: (screen: Screen) => void
21
- getAccountSettingsSource: () => Screen | null
22
- setCurrentScreenWithBack: (screen: Screen, backTo?: Screen) => void
23
- getPreviousScreen: () => Screen | null
24
- }
25
-
26
- const BackContext = createContext<BackContextType | null>(null)
27
-
28
- interface BackProviderProps {
29
- children: ReactNode
30
- }
31
-
32
- export function BackProvider({ children }: BackProviderProps) {
33
- const { currentScreen, setCurrentScreen } = useCurrentScreen()
34
- const [history, setHistory] = useState<Screen[]>([])
35
- const [navigationStack, setNavigationStack] = useState<
36
- Array<[Screen, Screen?]>
37
- >([])
38
- const [isNavigatingBack, setIsNavigatingBack] = useState(false)
39
-
40
- // Track screen changes and update history
41
- useEffect(() => {
42
- setHistory((prevHistory) => {
43
- // Don't add the same screen twice in a row
44
- if (
45
- prevHistory.length > 0 &&
46
- prevHistory[prevHistory.length - 1] === currentScreen
47
- ) {
48
- return prevHistory
49
- }
50
-
51
- // Add current screen to history
52
- const newHistory = [...prevHistory, currentScreen]
53
-
54
- // Keep history limited to last 10 screens to prevent memory issues
55
- if (newHistory.length > 10) {
56
- return newHistory.slice(-10)
57
- }
58
-
59
- return newHistory
60
- })
61
- }, [currentScreen])
62
-
63
- // Get the previous screen from navigation stack
64
- const getPreviousScreen = (): Screen | null => {
65
- if (navigationStack.length === 0) {
66
- return null
67
- }
68
-
69
- // Find the current screen in the navigation stack
70
- const currentIndex = navigationStack.findIndex(
71
- ([screen]) => screen === currentScreen,
72
- )
73
- if (currentIndex === -1) {
74
- return null
75
- }
76
-
77
- const currentEntry = navigationStack[currentIndex]
78
- if (!currentEntry) {
79
- return null
80
- }
81
- const [, backToScreen] = currentEntry
82
-
83
- // If this screen has a specific back target, use it
84
- if (backToScreen) {
85
- return backToScreen
86
- }
87
-
88
- // Otherwise, go to the previous screen in the stack
89
- if (currentIndex > 0) {
90
- const previousEntry = navigationStack[currentIndex - 1]
91
- if (previousEntry) {
92
- const [previousScreen] = previousEntry
93
- return previousScreen
94
- }
95
- }
96
-
97
- return null
98
- }
99
-
100
- // Function to set current screen with optional back target
101
- const setCurrentScreenWithBack = useCallback(
102
- (screen: Screen, backTo?: Screen) => {
103
- setNavigationStack((prevStack) => {
104
- // Remove any existing entry for this screen
105
- const filteredStack = prevStack.filter(
106
- ([existingScreen]) => existingScreen !== screen,
107
- )
108
-
109
- // Add new entry
110
- const newEntry: [Screen, Screen?] = backTo ? [screen, backTo] : [screen]
111
- const newStack = [...filteredStack, newEntry]
112
-
113
- // Keep stack limited to last 10 entries
114
- if (newStack.length > 10) {
115
- return newStack.slice(-10)
116
- }
117
-
118
- return newStack
119
- })
120
-
121
- setCurrentScreen(screen)
122
- },
123
- [setCurrentScreen],
124
- )
125
-
126
- const canGoBack = navigationStack.length > 0 || history.length > 1
127
-
128
- const goBack = canGoBack
129
- ? () => {
130
- const previousScreen = getPreviousScreen()
131
-
132
- logger.console.log(
133
- "[trails-sdk] goBack (navigation stack)",
134
- "previousScreen:",
135
- previousScreen,
136
- "currentScreen:",
137
- currentScreen,
138
- "navigationStack:",
139
- navigationStack,
140
- )
141
-
142
- // Set flag to prevent auto-selection when navigating back
143
- if (setIsNavigatingBack) {
144
- setIsNavigatingBack(true)
145
- }
146
-
147
- if (previousScreen) {
148
- // Remove current screen from navigation stack
149
- setNavigationStack((prevStack) =>
150
- prevStack.filter(([screen]) => screen !== currentScreen),
151
- )
152
- setCurrentScreen(previousScreen)
153
- } else {
154
- // Fallback: if no navigation stack, use regular history
155
- const regularHistory = history
156
- if (regularHistory.length > 1) {
157
- const fallbackScreen = regularHistory[regularHistory.length - 2]
158
- if (fallbackScreen) {
159
- logger.console.log(
160
- "[trails-sdk] goBack (fallback to regular history)",
161
- "previousScreen:",
162
- fallbackScreen,
163
- )
164
- setCurrentScreen(fallbackScreen)
165
- }
166
- }
167
- }
168
-
169
- // Reset the flag after a longer delay to allow the screen change to complete
170
- // and prevent post-connection navigation from interfering with manual back navigation
171
- if (setIsNavigatingBack) {
172
- setTimeout(() => {
173
- setIsNavigatingBack(false)
174
- }, 500)
175
- }
176
- }
177
- : undefined
178
-
179
- const clearHistory = () => {
180
- setHistory([currentScreen])
181
- setNavigationStack([[currentScreen]])
182
- }
183
-
184
- const getHistory = () => history
185
- const getBreadcrumbHistory = () => navigationStack.map(([screen]) => screen)
186
-
187
- const value: BackContextType = {
188
- goBack,
189
- canGoBack,
190
- clearHistory,
191
- isNavigatingBack,
192
- getHistory,
193
- getBreadcrumbHistory,
194
- addBreadcrumb: () => {}, // Deprecated, kept for compatibility
195
- setAccountSettingsSource: () => {}, // Deprecated, kept for compatibility
196
- getAccountSettingsSource: () => null, // Deprecated, kept for compatibility
197
- setCurrentScreenWithBack,
198
- getPreviousScreen,
199
- }
200
-
201
- return <BackContext.Provider value={value}>{children}</BackContext.Provider>
202
- }
203
-
204
- export function useBack(): BackContextType {
205
- const context = useContext(BackContext)
206
- if (!context) {
207
- throw new Error("useBack must be used within a BackProvider")
208
- }
209
- return context
210
- }
@@ -1,73 +0,0 @@
1
- import { createContext, useContext, useState, type ReactNode } from "react"
2
-
3
- export type Screen =
4
- | "connect"
5
- | "tokens"
6
- | "select-origin-token"
7
- | "select-origin-amount"
8
- | "send-form"
9
- | "fund-form"
10
- | "fund-methods"
11
- | "payment-methods"
12
- | "select-funding-wallet"
13
- | "onramp-payment-methods"
14
- | "recipients"
15
- | "earn-pools"
16
- | "earn"
17
- | "swap"
18
- | "withdraw"
19
- | "wallet-confirmation"
20
- | "qr-code-wallet-select"
21
- | "direct-transfer-screen"
22
- | "onramp-meld"
23
- | "pending"
24
- | "receipt"
25
- | "onramp-mesh"
26
- | "wallet-connect"
27
- | "wallet-list"
28
- | "wallet-connection-pending"
29
- | "account-history"
30
- | "account-settings"
31
- | "user-preferences"
32
- | "chain-list"
33
- | "disconnect"
34
- | "home"
35
- | "qrcode-options"
36
- | "meld-onramp"
37
- | "meld-history"
38
- | "onramp-confirmation"
39
-
40
- interface CurrentScreenContextType {
41
- currentScreen: Screen
42
- setCurrentScreen: (screen: Screen) => void
43
- }
44
-
45
- const CurrentScreenContext = createContext<CurrentScreenContextType | null>(
46
- null,
47
- )
48
-
49
- export function CurrentScreenProvider({
50
- children,
51
- initialScreen,
52
- }: {
53
- children: ReactNode
54
- initialScreen: Screen
55
- }) {
56
- const [currentScreen, setCurrentScreen] = useState<Screen>(initialScreen)
57
-
58
- return (
59
- <CurrentScreenContext.Provider value={{ currentScreen, setCurrentScreen }}>
60
- {children}
61
- </CurrentScreenContext.Provider>
62
- )
63
- }
64
-
65
- export function useCurrentScreen(): CurrentScreenContextType {
66
- const context = useContext(CurrentScreenContext)
67
- if (!context) {
68
- throw new Error(
69
- "useCurrentScreen must be used within a CurrentScreenProvider",
70
- )
71
- }
72
- return context
73
- }
@@ -1,70 +0,0 @@
1
- import { useEffect, useState } from "react"
2
- import { useCurrentScreen, type Screen } from "./useCurrentScreen.js"
3
- import { useBack } from "./useBack.js"
4
- import { logger } from "../../logger.js"
5
- import type { Mode } from "../../mode.js"
6
-
7
- export function useInitialRedirect(
8
- isConnected: boolean,
9
- currentMode: Mode,
10
- getInitialScreenForMode: (mode: Mode) => Screen,
11
- ) {
12
- const { setCurrentScreen } = useCurrentScreen()
13
- const { getBreadcrumbHistory } = useBack()
14
- const [hasConnectedBefore, setHasConnectedBefore] = useState(false)
15
- const [isInitialScreenSet, setIsInitialScreenSet] = useState(false)
16
-
17
- useEffect(() => {
18
- if (!isConnected || isInitialScreenSet) {
19
- return
20
- }
21
-
22
- // Check if this is the first time connecting (no previous wallet connected)
23
- const isFirstTimeConnection = !hasConnectedBefore
24
-
25
- if (isFirstTimeConnection) {
26
- // First time connecting - go to appropriate mode screen
27
- const initialScreen = getInitialScreenForMode(currentMode)
28
- logger.console.log(
29
- "[trails-sdk] First time connection, redirecting to:",
30
- initialScreen,
31
- )
32
- setCurrentScreen(initialScreen)
33
- setHasConnectedBefore(true)
34
- } else {
35
- // Subsequent connections - check if user came from account-settings
36
- const breadcrumbHistory = getBreadcrumbHistory()
37
- const lastBreadcrumbScreen =
38
- breadcrumbHistory.length > 0
39
- ? breadcrumbHistory[breadcrumbHistory.length - 1]
40
- : null
41
-
42
- if (lastBreadcrumbScreen === "account-settings") {
43
- // User came from account-settings, return there
44
- logger.console.log(
45
- "[trails-sdk] Returning to account-settings after wallet connection",
46
- )
47
- setCurrentScreen("account-settings")
48
- } else {
49
- // User came from elsewhere, go to appropriate mode screen
50
- const initialScreen = getInitialScreenForMode(currentMode)
51
- logger.console.log(
52
- "[trails-sdk] Subsequent connection, redirecting to:",
53
- initialScreen,
54
- )
55
- setCurrentScreen(initialScreen)
56
- }
57
- setIsInitialScreenSet(true)
58
- }
59
- }, [
60
- isConnected,
61
- currentMode,
62
- hasConnectedBefore,
63
- getInitialScreenForMode,
64
- setCurrentScreen,
65
- getBreadcrumbHistory,
66
- isInitialScreenSet,
67
- ])
68
-
69
- return { hasConnectedBefore, isInitialScreenSet }
70
- }