@0xsquid/react-hooks 8.7.1 → 8.7.2-beta-bitcoin-solana-xrpl.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 (28) hide show
  1. package/dist/core/connectors/bitcoin/wallets/keplr.d.ts +3 -0
  2. package/dist/core/connectors/bitcoin/wallets/phantom.d.ts +3 -1
  3. package/dist/core/connectors/bitcoin/wallets/unisat.d.ts +3 -0
  4. package/dist/core/types/bitcoin.d.ts +3 -0
  5. package/dist/hooks/transaction/useExecuteTransaction.d.ts +1 -1
  6. package/dist/{index-Dgqm3ZeG.js → index-BOXqAr2r.js} +194 -150
  7. package/dist/index-BOXqAr2r.js.map +1 -0
  8. package/dist/{index-DQERpZr8.js → index-CpphPhUS.js} +193 -149
  9. package/dist/index-CpphPhUS.js.map +1 -0
  10. package/dist/{index.es-BKxEl9R1.js → index.es-BOb7ZHW7.js} +2 -2
  11. package/dist/{index.es-BKxEl9R1.js.map → index.es-BOb7ZHW7.js.map} +1 -1
  12. package/dist/{index.es-DOFFrTzb.js → index.es-DBsq8Frv.js} +2 -2
  13. package/dist/{index.es-DOFFrTzb.js.map → index.es-DBsq8Frv.js.map} +1 -1
  14. package/dist/index.esm.js +1 -1
  15. package/dist/index.js +2 -2
  16. package/dist/{secretService-DXExZJnA.js → secretService-DN6Mr9e8.js} +2 -2
  17. package/dist/{secretService-DXExZJnA.js.map → secretService-DN6Mr9e8.js.map} +1 -1
  18. package/dist/{secretService-CqdaN_la.js → secretService-Dg30HRy1.js} +2 -2
  19. package/dist/{secretService-CqdaN_la.js.map → secretService-Dg30HRy1.js.map} +1 -1
  20. package/dist/services/internal/solanaService.d.ts +16 -9
  21. package/dist/services/internal/transactionService.d.ts +1 -2
  22. package/dist/{stellarService.client-BmkrPHkP.js → stellarService.client-B9bDVrW_.js} +2 -2
  23. package/dist/{stellarService.client-BmkrPHkP.js.map → stellarService.client-B9bDVrW_.js.map} +1 -1
  24. package/dist/{stellarService.client-eK7yYyOR.js → stellarService.client-CybwDtEp.js} +2 -2
  25. package/dist/{stellarService.client-eK7yYyOR.js.map → stellarService.client-CybwDtEp.js.map} +1 -1
  26. package/package.json +1 -1
  27. package/dist/index-DQERpZr8.js.map +0 -1
  28. package/dist/index-Dgqm3ZeG.js.map +0 -1
@@ -8,4 +8,7 @@ export declare class KeplrConnector implements BitcoinConnector {
8
8
  requestAccount(): Promise<{
9
9
  address: string;
10
10
  }>;
11
+ signPsbt(_: string): Promise<{
12
+ txHash: string;
13
+ }>;
11
14
  }
@@ -22,6 +22,8 @@ export declare class PhantomConnector implements BitcoinConnector {
22
22
  sendBTC(to: string, amount: number): Promise<{
23
23
  txHash: string;
24
24
  }>;
25
- private signPsbt;
25
+ signPsbt(psbtHex: string): Promise<{
26
+ txHash: string;
27
+ }>;
26
28
  }
27
29
  export {};
@@ -11,5 +11,8 @@ export declare class UnisatConnector implements BitcoinConnector {
11
11
  requestAccount(): Promise<{
12
12
  address: string;
13
13
  }>;
14
+ signPsbt(_: string): Promise<{
15
+ txHash: string;
16
+ }>;
14
17
  }
15
18
  export {};
@@ -2,6 +2,9 @@ export interface BitcoinConnector {
2
2
  sendBTC(to: string, amount: number): Promise<{
3
3
  txHash: string;
4
4
  }>;
5
+ signPsbt(psbtHex: string): Promise<{
6
+ txHash: string;
7
+ }>;
5
8
  requestAccount(): Promise<{
6
9
  address: string;
7
10
  }>;
@@ -1,4 +1,4 @@
1
- import type { RouteResponse } from "@0xsquid/squid-types";
1
+ import { type RouteResponse } from "@0xsquid/squid-types";
2
2
  export declare const useExecuteTransaction: (squidRoute?: RouteResponse["route"]) => {
3
3
  executeSwap: () => Promise<void>;
4
4
  cancelSwap: () => void;
@@ -1,4 +1,4 @@
1
- import { ChainType, ActionType, SquidDataType, BridgeType, BridgeProvider, FeeType } from '@0xsquid/squid-types';
1
+ import { ChainType, ActionType, BridgeType, SquidDataType, BridgeProvider, FeeType } from '@0xsquid/squid-types';
2
2
  import { zeroAddress as zeroAddress$1, parseUnits, formatUnits, isAddress, SwitchChainError, UserRejectedRequestError, erc20Abi, getAddress, defineChain, encodeFunctionData } from 'viem';
3
3
  import React, { useMemo, useCallback, useState, useEffect, createContext, useContext, useRef } from 'react';
4
4
  import { useQuery, useMutation, useQueries, useQueryClient, QueryClient, QueryClientProvider } from '@tanstack/react-query';
@@ -4735,6 +4735,9 @@ class KeplrConnector {
4735
4735
  address: account,
4736
4736
  };
4737
4737
  }
4738
+ async signPsbt(_) {
4739
+ throw new Error("Method not implemented.");
4740
+ }
4738
4741
  }
4739
4742
 
4740
4743
  bitcoin.initEccLib(ecc);
@@ -4849,10 +4852,8 @@ class PhantomConnector {
4849
4852
  async sendBTC(to, amount) {
4850
4853
  const { address } = await this.requestAccount();
4851
4854
  const { psbtHex } = await createSendBtcPsbt(address, to, amount);
4852
- const { txId } = await this.signPsbt(psbtHex);
4853
- if (!txId)
4854
- throw new BitcoinConnectorTransactionFailedError();
4855
- return { txHash: txId };
4855
+ const { txHash } = await this.signPsbt(psbtHex);
4856
+ return { txHash };
4856
4857
  }
4857
4858
  async signPsbt(psbtHex) {
4858
4859
  const { address: paymentAddress } = await this.requestAccount();
@@ -4873,8 +4874,10 @@ class PhantomConnector {
4873
4874
  const signedPsbt = bitcoin.Psbt.fromBuffer(signedPsbtBytes);
4874
4875
  signedPsbt.finalizeAllInputs();
4875
4876
  const tx = signedPsbt.extractTransaction();
4876
- const txId = await broadcastTx(tx.toHex());
4877
- return { txId };
4877
+ const txHash = await broadcastTx(tx.toHex());
4878
+ if (!txHash)
4879
+ throw new BitcoinConnectorTransactionFailedError();
4880
+ return { txHash };
4878
4881
  }
4879
4882
  }
4880
4883
 
@@ -4903,6 +4906,9 @@ class UnisatConnector {
4903
4906
  address: account,
4904
4907
  };
4905
4908
  }
4909
+ async signPsbt(_) {
4910
+ throw new Error("Method not implemented.");
4911
+ }
4906
4912
  }
4907
4913
 
4908
4914
  var XrplTransactionType;
@@ -21113,10 +21119,6 @@ function isCoralBridgeAction(action) {
21113
21119
  function sleep(ms) {
21114
21120
  return new Promise((resolve) => setTimeout(resolve, ms));
21115
21121
  }
21116
- const isDepositRoute = (route) => {
21117
- return (!!route &&
21118
- route.transactionRequest?.type === SquidDataType.ChainflipDepositAddress);
21119
- };
21120
21122
  /**
21121
21123
  * Checks if the route contains a Chainflip bridge action
21122
21124
  */
@@ -21324,11 +21326,11 @@ const isSolanaAddressValid = (address) => {
21324
21326
  * Execute a Solana swap transaction
21325
21327
  * This will be used for the swap flow - Using Jupiter Dex under the hood
21326
21328
  */
21327
- const executeSolanaSwap = async ({ route, signer, connection, onSigned, }) => {
21328
- if (!route.transactionRequest || !isOnChainTxData(route.transactionRequest)) {
21329
- throw new Error("Invalid parameters");
21329
+ const executeSolanaSwap = async ({ transactionRequest, signer, connection, }) => {
21330
+ if (!isOnChainTxData(transactionRequest)) {
21331
+ throw new Error("Invalid transaction request");
21330
21332
  }
21331
- const swapRequest = route.transactionRequest.data;
21333
+ const swapRequest = transactionRequest.data;
21332
21334
  const swapTransactionBuf = Buffer.from(swapRequest, "base64");
21333
21335
  // TODO: fix types
21334
21336
  // const transaction = VersionedTransaction.deserialize(
@@ -21336,15 +21338,9 @@ const executeSolanaSwap = async ({ route, signer, connection, onSigned, }) => {
21336
21338
  // );
21337
21339
  const transaction = VersionedTransaction.deserialize(swapTransactionBuf);
21338
21340
  try {
21339
- const latestBlockhash = await connection.getLatestBlockhash();
21341
+ const { blockhash, lastValidBlockHeight } = await connection.getLatestBlockhash();
21340
21342
  const signature = await signer.sendTransaction(transaction, connection);
21341
- onSigned?.(signature);
21342
- await connection.confirmTransaction({
21343
- signature,
21344
- blockhash: latestBlockhash.blockhash,
21345
- lastValidBlockHeight: latestBlockhash.lastValidBlockHeight,
21346
- });
21347
- return signature;
21343
+ return { signature, blockhash, lastValidBlockHeight };
21348
21344
  }
21349
21345
  catch (error) {
21350
21346
  console.error("Solana swap failed:", error);
@@ -21358,10 +21354,9 @@ const executeSolanaSwap = async ({ route, signer, connection, onSigned, }) => {
21358
21354
  * @param signer - Solana wallet adapter instance
21359
21355
  * @param connection - Solana RPC connection
21360
21356
  * @param sourceToken - Token information (undefined for native SOL)
21361
- * @param onSigned - Optional callback triggered when transaction is signed
21362
21357
  * @returns Transaction signature
21363
21358
  */
21364
- const executeSolanaTransfer = async ({ amount, target, signer, connection, sourceToken, onSigned, }) => {
21359
+ const executeSolanaTransfer = async ({ amount, target, signer, connection, sourceToken, }) => {
21365
21360
  // Validate signer and target address
21366
21361
  if (!signer.publicKey) {
21367
21362
  throw new Error("Signer public key not found");
@@ -21401,15 +21396,17 @@ const executeSolanaTransfer = async ({ amount, target, signer, connection, sourc
21401
21396
  transaction.recentBlockhash = blockhash;
21402
21397
  transaction.feePayer = signer.publicKey;
21403
21398
  const signature = await signer.sendTransaction(transaction, connection);
21404
- // Trigger callback for UI purposes (show loading state)
21405
- onSigned?.(signature);
21406
- // Wait for transaction confirmation
21407
- await connection.confirmTransaction({
21408
- signature,
21409
- blockhash,
21410
- lastValidBlockHeight,
21411
- });
21412
- return signature;
21399
+ return { signature, blockhash, lastValidBlockHeight };
21400
+ };
21401
+ const executeSolanaDepositAddressCalldata = async ({ transactionRequest, signer, connection, }) => {
21402
+ if (!isOnChainTxData(transactionRequest)) {
21403
+ throw new Error("Invalid transaction request");
21404
+ }
21405
+ const tx = Transaction.from(Buffer.from(transactionRequest.data, "base64"));
21406
+ const { blockhash, lastValidBlockHeight } = await connection.getLatestBlockhash();
21407
+ tx.recentBlockhash = blockhash;
21408
+ const signature = await signer.sendTransaction(tx, connection);
21409
+ return { signature, blockhash, lastValidBlockHeight };
21413
21410
  };
21414
21411
 
21415
21412
  var StellarHorizonAssetType;
@@ -23294,7 +23291,7 @@ const filterViewableTokens = (tokens, config, direction) => {
23294
23291
  };
23295
23292
  const getSecretNetworkBalances = async (chainData, cosmosAddress, squidTokens, keplrTypeWallet) => {
23296
23293
  const squidSecretTokens = squidTokens.filter((t) => t.chainId === CHAIN_IDS.SECRET);
23297
- const { fetchAllSecretBalances } = await import('./secretService-CqdaN_la.js');
23294
+ const { fetchAllSecretBalances } = await import('./secretService-Dg30HRy1.js');
23298
23295
  return fetchAllSecretBalances(chainData, cosmosAddress, squidSecretTokens, keplrTypeWallet);
23299
23296
  };
23300
23297
  function getTokenAssetsKey(token) {
@@ -26692,7 +26689,7 @@ function useStellarWallets() {
26692
26689
  try {
26693
26690
  const { allowAllModules: initializeAllModules } = await import('@creit.tech/stellar-wallets-kit');
26694
26691
  const { LedgerModule } = await import('@creit.tech/stellar-wallets-kit/modules/ledger.module');
26695
- const { formatStellarWallet } = await import('./stellarService.client-BmkrPHkP.js');
26692
+ const { formatStellarWallet } = await import('./stellarService.client-B9bDVrW_.js');
26696
26693
  const modules = [...initializeAllModules(), new LedgerModule()];
26697
26694
  const promises = modules.map(async (module) => {
26698
26695
  const isAvailable = await module.isAvailable();
@@ -29335,7 +29332,6 @@ function timeout(ms, promise) {
29335
29332
 
29336
29333
  const DEFAULT_REFRESH_INTERVAL_MS$1 = 15000;
29337
29334
  const useEvmBalance = ({ chain, token, userAddress, enabled = true, refreshIntervalMs = DEFAULT_REFRESH_INTERVAL_MS$1, }) => {
29338
- const { isChainTypeConnected } = useWallet();
29339
29335
  const isNativeToken = token?.address.toLowerCase() === nativeEvmTokenAddress.toLowerCase();
29340
29336
  const userAddressParsed = userAddress;
29341
29337
  // Only fetch using useBalance if it's a native token
@@ -29348,7 +29344,7 @@ const useEvmBalance = ({ chain, token, userAddress, enabled = true, refreshInter
29348
29344
  isNativeToken &&
29349
29345
  !!chain &&
29350
29346
  chain.chainType === ChainType.EVM &&
29351
- isChainTypeConnected(chain.chainType),
29347
+ isWalletAddressValid(chain, userAddress),
29352
29348
  refetchInterval: refreshIntervalMs,
29353
29349
  retry: 2,
29354
29350
  },
@@ -29362,10 +29358,10 @@ const useEvmBalance = ({ chain, token, userAddress, enabled = true, refreshInter
29362
29358
  args: [userAddressParsed],
29363
29359
  chainId: Number(chain?.chainId),
29364
29360
  query: {
29365
- enabled: isChainTypeConnected(ChainType.EVM) &&
29366
- enabled &&
29361
+ enabled: enabled &&
29367
29362
  !!userAddress &&
29368
- !isNativeToken,
29363
+ !isNativeToken &&
29364
+ isWalletAddressValid(chain, userAddress),
29369
29365
  refetchInterval: refreshIntervalMs,
29370
29366
  retry: 2,
29371
29367
  },
@@ -29535,12 +29531,12 @@ function useNativeTokenForChain(chain) {
29535
29531
  }
29536
29532
 
29537
29533
  const useEvmNativeBalance = ({ address, chain, }) => {
29538
- const { isChainTypeConnected } = useWallet();
29539
29534
  const { data: nativeEvmBalance, isLoading } = useBalance({
29540
29535
  address: address,
29541
29536
  chainId: Number(chain?.chainId),
29542
29537
  query: {
29543
- enabled: isChainTypeConnected(ChainType.EVM) && !!address,
29538
+ enabled: chain?.chainType === ChainType.EVM &&
29539
+ isWalletAddressValid(chain, address),
29544
29540
  refetchInterval: 10000,
29545
29541
  staleTime: 5000,
29546
29542
  refetchOnWindowFocus: true,
@@ -29562,13 +29558,13 @@ const useEvmNativeBalance = ({ address, chain, }) => {
29562
29558
  };
29563
29559
  };
29564
29560
  const useCosmosNativeBalance = ({ address, chain, }) => {
29565
- const { isConnected: isCosmosConnected } = useCosmosContext();
29566
29561
  const { nativeToken: nativeCosmosToken } = useNativeTokenForChain(chain);
29567
29562
  const { balance: rawBalance, isLoading } = useCosmosBalance({
29568
29563
  chain,
29569
29564
  token: nativeCosmosToken,
29570
29565
  userAddress: address,
29571
- enabled: isCosmosConnected && chain?.chainType === ChainType.COSMOS,
29566
+ enabled: chain?.chainType === ChainType.COSMOS &&
29567
+ isWalletAddressValid(chain, address),
29572
29568
  refreshIntervalMs: 10000,
29573
29569
  });
29574
29570
  const balance = useMemo(() => {
@@ -29616,9 +29612,9 @@ const useSolanaNativeBalance = ({ chain, address, }) => {
29616
29612
  const balance = await getSolanaNativeBalance(address);
29617
29613
  return formatBNToReadable(balance, nativeToken.decimals);
29618
29614
  }, {
29619
- enabled: !!address &&
29620
- nativeToken?.decimals != null &&
29621
- chain?.chainType === ChainType.SOLANA,
29615
+ enabled: nativeToken?.decimals != null &&
29616
+ chain?.chainType === ChainType.SOLANA &&
29617
+ isWalletAddressValid(chain, address),
29622
29618
  refetchInterval: 40000,
29623
29619
  staleTime: 20000,
29624
29620
  refetchOnWindowFocus: true,
@@ -29643,6 +29639,8 @@ const useSuiNativeBalance = ({ address, chain, }) => {
29643
29639
  chain,
29644
29640
  token: nativeToken,
29645
29641
  userAddress: address,
29642
+ enabled: chain?.chainType === ChainType.SUI &&
29643
+ isWalletAddressValid(chain, address),
29646
29644
  });
29647
29645
  const balance = useMemo(() => {
29648
29646
  if (nativeToken?.decimals && rawBalance) {
@@ -29663,7 +29661,8 @@ const useXrplNativeBalance = ({ address, chain, }) => {
29663
29661
  chain,
29664
29662
  token: nativeToken,
29665
29663
  userAddress: address,
29666
- enabled: chain?.chainType === ChainType.XRPL,
29664
+ enabled: chain?.chainType === ChainType.XRPL &&
29665
+ isWalletAddressValid(chain, address),
29667
29666
  });
29668
29667
  const balance = useMemo(() => {
29669
29668
  if (nativeToken?.decimals && rawBalance) {
@@ -29684,7 +29683,8 @@ const useStellarNativeBalance = ({ address, chain, }) => {
29684
29683
  chain,
29685
29684
  token: nativeToken,
29686
29685
  userAddress: address,
29687
- enabled: chain?.chainType === ChainType.STELLAR,
29686
+ enabled: chain?.chainType === ChainType.STELLAR &&
29687
+ isWalletAddressValid(chain, address),
29688
29688
  });
29689
29689
  const balance = useMemo(() => {
29690
29690
  if (nativeToken?.decimals && rawBalance) {
@@ -30012,7 +30012,7 @@ function hederaWalletConnect(parameters) {
30012
30012
  const optionalChains = config.chains.map((x) => x.id);
30013
30013
  if (!optionalChains.length)
30014
30014
  return;
30015
- const { EthereumProvider } = await import('./index.es-DOFFrTzb.js');
30015
+ const { EthereumProvider } = await import('./index.es-DBsq8Frv.js');
30016
30016
  const rawProvider = await EthereumProvider.init({
30017
30017
  ...restParameters,
30018
30018
  disableProviderPing: true,
@@ -31824,7 +31824,7 @@ async function sendTransactionCosmos({ amount, rpcUrl, signer, to, token, native
31824
31824
  }
31825
31825
  async function sendTransactionSolana({ signer, amount, to, token, connection, }) {
31826
31826
  const amountBn = BigInt(amount);
31827
- const txHash = await executeSolanaTransfer({
31827
+ const { signature: txHash } = await executeSolanaTransfer({
31828
31828
  amount: amountBn,
31829
31829
  connection,
31830
31830
  signer,
@@ -36148,7 +36148,7 @@ const useExecuteTransaction = (squidRoute) => {
36148
36148
  });
36149
36149
  const swapMutationSolana = useMutation(async ({ id, route }) => {
36150
36150
  try {
36151
- if (!route) {
36151
+ if (!route?.transactionRequest) {
36152
36152
  throw new Error("Route is required");
36153
36153
  }
36154
36154
  if (!solanaSigner) {
@@ -36157,69 +36157,69 @@ const useExecuteTransaction = (squidRoute) => {
36157
36157
  if (!route.params.fromAddress || !route.params.toAddress) {
36158
36158
  throw new Error("From or to address is required");
36159
36159
  }
36160
- const isDirectTransfer = isDepositRoute(route);
36161
- // Means it's a transfer to a deposit address
36162
- // Instead of a Swap/Contract call using a DEX like Jupiter
36163
- if (isDirectTransfer) {
36164
- // Get the deposit address from the squidRoute
36165
- const depositData = useDepositAddressStore.getState().deposit;
36166
- // Validate params
36167
- if (!depositData?.depositAddress) {
36168
- throw new Error("Deposit address is required");
36160
+ let txResult;
36161
+ let transactionIdForStatus;
36162
+ switch (route.transactionRequest.type) {
36163
+ case SquidDataType.ChainflipDepositAddress: {
36164
+ // Means it's a transfer to a deposit address
36165
+ // Instead of a Swap/Contract call using a DEX like Jupiter
36166
+ const depositData = useDepositAddressStore.getState().deposit;
36167
+ if (!depositData?.depositAddress) {
36168
+ throw new Error("Deposit address is required");
36169
+ }
36170
+ txResult = await executeSolanaTransfer({
36171
+ amount: BigInt(route.params.fromAmount),
36172
+ target: depositData.depositAddress,
36173
+ signer: solanaSigner,
36174
+ connection: solanaConnection,
36175
+ sourceToken: findToken(route.params.fromToken, route.params.fromChain),
36176
+ });
36177
+ transactionIdForStatus = depositData.chainflipStatusTrackingId;
36178
+ break;
36179
+ }
36180
+ case SquidDataType.OnChainExecution: {
36181
+ txResult = await executeSolanaSwap({
36182
+ transactionRequest: route.transactionRequest,
36183
+ signer: solanaSigner,
36184
+ connection: solanaConnection,
36185
+ });
36186
+ break;
36187
+ }
36188
+ case SquidDataType.DepositAddressCalldata: {
36189
+ txResult = await executeSolanaDepositAddressCalldata({
36190
+ transactionRequest: route.transactionRequest,
36191
+ signer: solanaSigner,
36192
+ connection: solanaConnection,
36193
+ });
36194
+ break;
36195
+ }
36196
+ default: {
36197
+ throw new Error(`Unhandled transaction type: ${route.transactionRequest.type}`);
36169
36198
  }
36170
- const signature = await executeSolanaTransfer({
36171
- amount: BigInt(route.params.fromAmount),
36172
- target: depositData.depositAddress,
36173
- signer: solanaSigner,
36174
- connection: solanaConnection,
36175
- sourceToken: findToken(route.params.fromToken, route?.params?.fromChain),
36176
- onSigned: (txHash) => {
36177
- WidgetEvents.getInstance().dispatchSwapExecuteCall(route, txHash);
36178
- const txParams = setTransactionState({
36179
- route,
36180
- txHash,
36181
- transactionIdForStatus: depositData.chainflipStatusTrackingId,
36182
- userAddress: sourceUserAddress,
36183
- status: TransactionStatus.INITIAL_LOADING,
36184
- sourceStatus: TransactionStatus.ONGOING,
36185
- id,
36186
- });
36187
- if (txParams) {
36188
- addSwapTransaction({
36189
- ...txParams,
36190
- params: route.params,
36191
- estimate: route.estimate,
36192
- });
36193
- }
36194
- },
36195
- });
36196
- return signature;
36197
36199
  }
36198
- const signature = await executeSolanaSwap({
36200
+ const { signature: txHash, blockhash, lastValidBlockHeight } = txResult;
36201
+ WidgetEvents.getInstance().dispatchSwapExecuteCall(route, txHash);
36202
+ const txParams = setTransactionState({
36199
36203
  route,
36200
- signer: solanaSigner,
36201
- connection: solanaConnection,
36202
- onSigned: (txHash) => {
36203
- WidgetEvents.getInstance().dispatchSwapExecuteCall(route, txHash);
36204
- const txParams = setTransactionState({
36205
- route,
36206
- txHash,
36207
- transactionIdForStatus: undefined,
36208
- userAddress: sourceUserAddress,
36209
- status: TransactionStatus.INITIAL_LOADING,
36210
- sourceStatus: TransactionStatus.ONGOING,
36211
- id,
36212
- });
36213
- if (txParams) {
36214
- addSwapTransaction({
36215
- ...txParams,
36216
- params: route.params,
36217
- estimate: route.estimate,
36218
- });
36219
- }
36220
- },
36204
+ txHash,
36205
+ userAddress: sourceUserAddress,
36206
+ status: TransactionStatus.INITIAL_LOADING,
36207
+ sourceStatus: TransactionStatus.ONGOING,
36208
+ id,
36209
+ transactionIdForStatus,
36210
+ });
36211
+ if (txParams) {
36212
+ addSwapTransaction({
36213
+ ...txParams,
36214
+ params: route.params,
36215
+ estimate: route.estimate,
36216
+ });
36217
+ }
36218
+ await solanaConnection.confirmTransaction({
36219
+ blockhash,
36220
+ lastValidBlockHeight,
36221
+ signature: txHash,
36221
36222
  });
36222
- return signature;
36223
36223
  }
36224
36224
  catch (error) {
36225
36225
  console.error("Solana transaction failed:", error);
@@ -36266,47 +36266,91 @@ const useExecuteTransaction = (squidRoute) => {
36266
36266
  },
36267
36267
  });
36268
36268
  const swapMutationBitcoin = useMutation(async ({ id, route }) => {
36269
- const { depositAddress, amount: sendAmount, chainflipStatusTrackingId, } = useDepositAddressStore.getState().deposit ?? {};
36270
- if (!depositAddress) {
36271
- throw new Error(`Invalid deposit address: ${depositAddress}`);
36272
- }
36273
- if (!sendAmount) {
36274
- throw new Error(`Invalid send amount: ${sendAmount}`);
36269
+ console.log("Validating route", {
36270
+ bitcoinSigner,
36271
+ route,
36272
+ });
36273
+ if (!bitcoinSigner || !route?.transactionRequest) {
36274
+ throw new Error("Need all parameters");
36275
36275
  }
36276
- const allParamsValid = route && bitcoinSigner && depositAddress && sendAmount;
36277
- await changeNetworkIfNeeded.mutateAsync();
36278
- if (allParamsValid) {
36279
- dispatchSignatureRequestEvent(route);
36280
- const { txHash } = await bitcoinSigner.sendBTC(depositAddress, Number(sendAmount));
36281
- if (txHash) {
36282
- resetQueriesAfterTxSigned();
36276
+ switch (route.transactionRequest.type) {
36277
+ case SquidDataType.ChainflipDepositAddress: {
36278
+ const { depositAddress, amount: sendAmount, chainflipStatusTrackingId, } = useDepositAddressStore.getState().deposit ?? {};
36279
+ const allParamsValid = route && bitcoinSigner && depositAddress && sendAmount;
36280
+ if (!allParamsValid) {
36281
+ throw new Error("Need all parameters");
36282
+ }
36283
+ await changeNetworkIfNeeded.mutateAsync();
36284
+ dispatchSignatureRequestEvent(route);
36285
+ const { txHash } = await bitcoinSigner.sendBTC(depositAddress, Number(sendAmount));
36286
+ if (txHash) {
36287
+ resetQueriesAfterTxSigned();
36288
+ }
36289
+ // Dispatch event so it can be listened from outside the widget
36290
+ WidgetEvents.getInstance().dispatchSwapExecuteCall(route, txHash);
36291
+ if (route.transactionRequest) {
36292
+ const txParams = setTransactionState({
36293
+ route,
36294
+ txHash,
36295
+ // When bridging from Bitcoin we need to send the chainflipId to the status endpoint
36296
+ // instead of the Bitcoin transaction hash
36297
+ transactionIdForStatus: chainflipStatusTrackingId,
36298
+ userAddress: sourceUserAddress,
36299
+ status: TransactionStatus.INITIAL_LOADING,
36300
+ sourceStatus: TransactionStatus.ONGOING,
36301
+ axelarUrl: undefined,
36302
+ id,
36303
+ });
36304
+ if (txParams) {
36305
+ addSwapTransaction({
36306
+ ...txParams,
36307
+ params: route.params,
36308
+ estimate: route.estimate,
36309
+ });
36310
+ }
36311
+ }
36312
+ break;
36283
36313
  }
36284
- // Dispatch event so it can be listened from outside the widget
36285
- WidgetEvents.getInstance().dispatchSwapExecuteCall(route, txHash);
36286
- if (route.transactionRequest) {
36287
- const txParams = setTransactionState({
36288
- route,
36289
- txHash,
36290
- // When bridging from Bitcoin we need to send the chainflipId to the status endpoint
36291
- // instead of the Bitcoin transaction hash
36292
- transactionIdForStatus: chainflipStatusTrackingId,
36293
- userAddress: sourceUserAddress,
36294
- status: TransactionStatus.INITIAL_LOADING,
36295
- sourceStatus: TransactionStatus.ONGOING,
36296
- axelarUrl: undefined,
36297
- id,
36298
- });
36299
- if (txParams) {
36300
- addSwapTransaction({
36301
- ...txParams,
36302
- params: route.params,
36303
- estimate: route.estimate,
36314
+ case SquidDataType.DepositAddressCalldata: {
36315
+ console.log(`Route type: ${route.transactionRequest?.type}`);
36316
+ if (!isOnChainTxData(route.transactionRequest)) {
36317
+ console.log("Invalid route data", route.transactionRequest);
36318
+ throw new Error("Invalid route data");
36319
+ }
36320
+ const { data: transactionHex } = route.transactionRequest;
36321
+ await changeNetworkIfNeeded.mutateAsync();
36322
+ dispatchSignatureRequestEvent(route);
36323
+ console.log("Signing psbt", { transactionHex });
36324
+ const { txHash } = await bitcoinSigner.signPsbt(transactionHex);
36325
+ console.log("Signed psbt", { txHash });
36326
+ if (txHash) {
36327
+ resetQueriesAfterTxSigned();
36328
+ }
36329
+ // Dispatch event so it can be listened from outside the widget
36330
+ WidgetEvents.getInstance().dispatchSwapExecuteCall(route, txHash);
36331
+ if (route.transactionRequest) {
36332
+ const txParams = setTransactionState({
36333
+ route,
36334
+ txHash,
36335
+ userAddress: sourceUserAddress,
36336
+ status: TransactionStatus.INITIAL_LOADING,
36337
+ sourceStatus: TransactionStatus.ONGOING,
36338
+ axelarUrl: undefined,
36339
+ id,
36304
36340
  });
36341
+ if (txParams) {
36342
+ addSwapTransaction({
36343
+ ...txParams,
36344
+ params: route.params,
36345
+ estimate: route.estimate,
36346
+ });
36347
+ }
36305
36348
  }
36349
+ break;
36350
+ }
36351
+ default: {
36352
+ throw new Error(`Unhandled route type ${route.transactionRequest.type}`);
36306
36353
  }
36307
- }
36308
- else {
36309
- throw new Error("Need all parameters");
36310
36354
  }
36311
36355
  });
36312
36356
  const swapMutationXrpl = useMutation(async ({ id, route }) => {
@@ -37453,5 +37497,5 @@ const SquidProvider = ({ children, config, placeholder, }) => {
37453
37497
  React.createElement(CosmosProvider, null, children)))))))))) : (placeholder);
37454
37498
  };
37455
37499
 
37456
- export { useDepositAddress as $, AxelarStatusResponseType as A, useHederaTokenAssociations as B, CHAIN_IDS as C, DEFAULT_LOCALE as D, useKeyboardNavigation as E, useSquidQueryClient as F, useSquid as G, HistoryTxType as H, useStellarAccountActivation as I, useStellarTrustLine as J, useAddressBookStore as K, useAssetsColorsStore as L, useFavoriteTokensStore as M, Nr as N, useHistoryStore as O, useSendTransactionStore as P, QueryKeys as Q, useConfigStore as R, SquidStatusErrorType as S, TransactionErrorType as T, useSquidStore as U, useSwapRoutePersistStore as V, Wo as W, XamanXrplNetwork as X, useTransactionStore as Y, ConnectingWalletStatus as Z, useWalletStore as _, WindowWalletFlag as a, useGetOnrampPaymentTypes as a$, useSwap as a0, buildUrlSearchParamsFromSwapEvent as a1, parseInitialAssetsFromUrl as a2, useUrlSwapParams as a3, useAllConnectedWalletBalances as a4, useAllTokensWithBalanceForChainType as a5, useCosmosBalance as a6, useEvmBalance as a7, useMultiChainBalance as a8, useMultipleTokenPrices as a9, useSwapTransactionStatus as aA, useAvatar as aB, useHistory as aC, useDebouncedValue as aD, useAddToken as aE, useAutoConnect as aF, useEnsDataForAddress as aG, useEnsSearch as aH, useGnosisContext as aI, useIsSameAddressAndGnosisContext as aJ, useIntegratorContext as aK, useMultiChainWallet as aL, useSigner as aM, useWallet as aN, useWallets as aO, useXrplTrustLine as aP, TX_STATUS_CONSTANTS as aQ, FINAL_TRANSACTION_STATUSES as aR, useGetFiatQuote as aS, useGetOnRampConfig as aT, useExecuteFiatQuote as aU, useFiatOnRampTxStatus as aV, useFiatTransactions as aW, useCurrencyDetails as aX, useCountryDetails as aY, useAvailableQuotes as aZ, useRecommendedQuote as a_, useBitcoinNativeBalance as aa, useCosmosNativeBalance as ab, useEvmNativeBalance as ac, useNativeBalance as ad, useSolanaNativeBalance as ae, useStellarNativeBalance as af, useSuiNativeBalance as ag, useXrplNativeBalance as ah, useNativeTokenForChain as ai, useSingleTokenPrice as aj, useSourceChainGasToken as ak, useSquidTokens as al, useHistoricalData as am, useTokensData as an, useEstimateSendTransaction as ao, useSendTransaction as ap, useSendTransactionGas as aq, useAllTransactionsStatus as ar, useApproval as as, useEstimate as at, useEstimatePriceImpact as au, useExecuteTransaction as av, useGetRoute as aw, useGetRouteWrapper as ax, useRouteWarnings as ay, useSendTransactionStatus as az, chainTypeToZeroAddressMap as b, filterWagmiConnector as b$, useSuggestedFiatAmounts as b0, SquidProvider as b1, EnsService as b2, getXummClient as b3, isXamanXAppContext as b4, getQueryHeaders as b5, getStatusCode as b6, is404Error as b7, assetsBaseUrl as b8, shareSubgraphId as b9, fetchHighestBalanceToken as bA, getInitialOrDefaultTokenAddressForChain as bB, getInitialTokenAddressForChain as bC, filterTokensForDestination as bD, getInitialChainIdFromConfig as bE, getCosmosKey as bF, getKeysSettled as bG, getAllKeysForSupportedCosmosChains as bH, isCosmosAddressValid as bI, getCosmosSigningClient as bJ, getCosmosChainInfosObject as bK, connectCosmosWallet as bL, isFallbackAddressNeeded as bM, suggestChainOrThrow as bN, normalizeError as bO, transactionErrorCode as bP, isUserRejectionError as bQ, getTransactionError as bR, handleTransactionErrorEvents as bS, isSwapRouteError as bT, isStatusError as bU, createQuoteRequestParamsHash as bV, WidgetEvents as bW, EvmNetworkNotSupportedErrorCode as bX, addEthereumChain as bY, parseEvmAddress as bZ, formatEvmWallet as b_, sortTokensBySharedSubgraphIds as ba, getSupportedChainIdsForDirection as bb, filterChains as bc, filterTokens as bd, getTokenImage as be, getNewSwapParamsFromInput as bf, sortAllTokens as bg, findToken as bh, findNativeToken as bi, normalizeIbcAddress as bj, groupTokensBySymbol as bk, groupTokensByChainId as bl, filterViewableTokens as bm, getSecretNetworkBalances as bn, getTokenAssetsKey as bo, fetchAssetsColors as bp, initializeSquidWithAssetsColors as bq, isEmptyObject as br, normalizeTokenSymbol as bs, areTokenSymbolsCompatible as bt, isEvmosChain as bu, resolveChainIdFromAsset as bv, getConfigWithDefaults as bw, randomIntFromInterval as bx, getTokensForChain as by, getFirstAvailableChainId as bz, chainTypeToNativeTokenAddressMap as c, isHistoryTransactionFailed as c$, waitForReceiptWithRetry as c0, getUserCountry as c1, getCountryData as c2, getCurrencyData as c3, adaptiveRound as c4, getSuggestedAmountsForCurrency as c5, HederaExtensionHelper as c6, convertHederaAccountIdToEvmAddress as c7, convertEvmAddressToHederaAccountId as c8, scaleHbarToWei as c9, isValidHorizonAsset as cA, formatTransactionHistoryDate as cB, getAxelarExplorerTxUrl as cC, getSourceExplorerTxUrl as cD, getMainExplorerUrl as cE, formatDistance as cF, formatSeconds as cG, formatSwapTxStatusResponseForStorage as cH, simplifyRouteAction as cI, fetchSwapTransactionStatus as cJ, compareTransactionIds as cK, isCoralBridgeAction as cL, sleep as cM, isDepositRoute as cN, isChainflipBridgeTransaction as cO, isOnChainTxData as cP, getHistoryTransactionId as cQ, getStepStatuses as cR, getHalfSuccessState as cS, getStepsInfos as cT, getSwapTxStatusRefetchInterval as cU, getSendTxStatusRefetchInterval as cV, chainflipMultihopBridgeType as cW, getBridgeType as cX, getTransactionStatus as cY, getTransactionEndStatus as cZ, isHistoryTransactionPending as c_, scaleWeiToHbar as ca, parseToBigInt as cb, roundNumericValue as cc, formatUnitsRounded as cd, formatTokenAmount as ce, formatUsdAmount as cf, trimExtraDecimals as cg, getNumericValue as ch, cleanAmount as ci, convertTokenAmountToUSD as cj, convertUSDToTokenAmount as ck, calculateTotal24hChange as cl, getRouteExpiry as cm, searchTokens as cn, filterSolanaWallets as co, isSolanaAddressValid as cp, executeSolanaSwap as cq, executeSolanaTransfer as cr, isStellarAddressValid as cs, getStellarNetwork as ct, stellarAddressToScVal as cu, getStellarTrustLineAsset as cv, isStellarToken as cw, isStellarIssuedToken as cx, getStellarHorizonApiUrl as cy, isValidIssuedAsset as cz, definedInWindow as d, isHistoryTransactionWarning as d0, isHistoryTransactionEnded as d1, formatHash as d2, isWalletAddressValid as d3, redirectToExtensionsStore as d4, accessProperty as d5, populateWallets as d6, getDefaultChain as d7, sortWallets as d8, areSameAddress as d9, sortAddressBook as da, calculateTotalUsdBalanceUSD as db, addTokenToWallet as dc, isEvmChainNotSupportedError as dd, getWalletSupportedChainTypes as de, getConnectorForChainType as df, walletSupportsChainType as dg, connectWallet as dh, cancelConnectWallet as di, isProblematicConnector as dj, mergeWallets as dk, isXionSmartContractAddress as dl, isXrplAddressValid as dm, buildXrplTrustSetTx as dn, getXrplNetwork as dp, parseXrplPaymentTx as dq, parseXrplTokenAddress as dr, er as e, formatBNToReadable as f, DEFAULT_ROUTE_REFETCH_INTERVAL as g, destinationAddressResetValue as h, fallbackAddressResetValue as i, nativeCosmosTokenAddress as j, nativeEvmTokenAddress as k, nativeSolanaTokenAddress as l, nativeStellarTokenAddress as m, nativeBitcoinTokenAddress as n, nativeSuiTokenAddress as o, nativeXrplTokenAddress as p, CosmosProvider as q, SendTransactionStatus as r, TransactionStatus as s, useTrackSearchEmpty as t, useCosmosContext as u, useSquidChains as v, walletIconBaseUrl as w, useClient as x, useCosmosForChain as y, useHederaAccountActivation as z };
37457
- //# sourceMappingURL=index-Dgqm3ZeG.js.map
37500
+ export { useDepositAddress as $, AxelarStatusResponseType as A, useHederaTokenAssociations as B, CHAIN_IDS as C, DEFAULT_LOCALE as D, useKeyboardNavigation as E, useSquidQueryClient as F, useSquid as G, HistoryTxType as H, useStellarAccountActivation as I, useStellarTrustLine as J, useAddressBookStore as K, useAssetsColorsStore as L, useFavoriteTokensStore as M, Nr as N, useHistoryStore as O, useSendTransactionStore as P, QueryKeys as Q, useConfigStore as R, SquidStatusErrorType as S, TransactionErrorType as T, useSquidStore as U, useSwapRoutePersistStore as V, Wo as W, XamanXrplNetwork as X, useTransactionStore as Y, ConnectingWalletStatus as Z, useWalletStore as _, WindowWalletFlag as a, useGetOnrampPaymentTypes as a$, useSwap as a0, buildUrlSearchParamsFromSwapEvent as a1, parseInitialAssetsFromUrl as a2, useUrlSwapParams as a3, useAllConnectedWalletBalances as a4, useAllTokensWithBalanceForChainType as a5, useCosmosBalance as a6, useEvmBalance as a7, useMultiChainBalance as a8, useMultipleTokenPrices as a9, useSwapTransactionStatus as aA, useAvatar as aB, useHistory as aC, useDebouncedValue as aD, useAddToken as aE, useAutoConnect as aF, useEnsDataForAddress as aG, useEnsSearch as aH, useGnosisContext as aI, useIsSameAddressAndGnosisContext as aJ, useIntegratorContext as aK, useMultiChainWallet as aL, useSigner as aM, useWallet as aN, useWallets as aO, useXrplTrustLine as aP, TX_STATUS_CONSTANTS as aQ, FINAL_TRANSACTION_STATUSES as aR, useGetFiatQuote as aS, useGetOnRampConfig as aT, useExecuteFiatQuote as aU, useFiatOnRampTxStatus as aV, useFiatTransactions as aW, useCurrencyDetails as aX, useCountryDetails as aY, useAvailableQuotes as aZ, useRecommendedQuote as a_, useBitcoinNativeBalance as aa, useCosmosNativeBalance as ab, useEvmNativeBalance as ac, useNativeBalance as ad, useSolanaNativeBalance as ae, useStellarNativeBalance as af, useSuiNativeBalance as ag, useXrplNativeBalance as ah, useNativeTokenForChain as ai, useSingleTokenPrice as aj, useSourceChainGasToken as ak, useSquidTokens as al, useHistoricalData as am, useTokensData as an, useEstimateSendTransaction as ao, useSendTransaction as ap, useSendTransactionGas as aq, useAllTransactionsStatus as ar, useApproval as as, useEstimate as at, useEstimatePriceImpact as au, useExecuteTransaction as av, useGetRoute as aw, useGetRouteWrapper as ax, useRouteWarnings as ay, useSendTransactionStatus as az, chainTypeToZeroAddressMap as b, filterWagmiConnector as b$, useSuggestedFiatAmounts as b0, SquidProvider as b1, EnsService as b2, getXummClient as b3, isXamanXAppContext as b4, getQueryHeaders as b5, getStatusCode as b6, is404Error as b7, assetsBaseUrl as b8, shareSubgraphId as b9, fetchHighestBalanceToken as bA, getInitialOrDefaultTokenAddressForChain as bB, getInitialTokenAddressForChain as bC, filterTokensForDestination as bD, getInitialChainIdFromConfig as bE, getCosmosKey as bF, getKeysSettled as bG, getAllKeysForSupportedCosmosChains as bH, isCosmosAddressValid as bI, getCosmosSigningClient as bJ, getCosmosChainInfosObject as bK, connectCosmosWallet as bL, isFallbackAddressNeeded as bM, suggestChainOrThrow as bN, normalizeError as bO, transactionErrorCode as bP, isUserRejectionError as bQ, getTransactionError as bR, handleTransactionErrorEvents as bS, isSwapRouteError as bT, isStatusError as bU, createQuoteRequestParamsHash as bV, WidgetEvents as bW, EvmNetworkNotSupportedErrorCode as bX, addEthereumChain as bY, parseEvmAddress as bZ, formatEvmWallet as b_, sortTokensBySharedSubgraphIds as ba, getSupportedChainIdsForDirection as bb, filterChains as bc, filterTokens as bd, getTokenImage as be, getNewSwapParamsFromInput as bf, sortAllTokens as bg, findToken as bh, findNativeToken as bi, normalizeIbcAddress as bj, groupTokensBySymbol as bk, groupTokensByChainId as bl, filterViewableTokens as bm, getSecretNetworkBalances as bn, getTokenAssetsKey as bo, fetchAssetsColors as bp, initializeSquidWithAssetsColors as bq, isEmptyObject as br, normalizeTokenSymbol as bs, areTokenSymbolsCompatible as bt, isEvmosChain as bu, resolveChainIdFromAsset as bv, getConfigWithDefaults as bw, randomIntFromInterval as bx, getTokensForChain as by, getFirstAvailableChainId as bz, chainTypeToNativeTokenAddressMap as c, isHistoryTransactionFailed as c$, waitForReceiptWithRetry as c0, getUserCountry as c1, getCountryData as c2, getCurrencyData as c3, adaptiveRound as c4, getSuggestedAmountsForCurrency as c5, HederaExtensionHelper as c6, convertHederaAccountIdToEvmAddress as c7, convertEvmAddressToHederaAccountId as c8, scaleHbarToWei as c9, isValidIssuedAsset as cA, isValidHorizonAsset as cB, formatTransactionHistoryDate as cC, getAxelarExplorerTxUrl as cD, getSourceExplorerTxUrl as cE, getMainExplorerUrl as cF, formatDistance as cG, formatSeconds as cH, formatSwapTxStatusResponseForStorage as cI, simplifyRouteAction as cJ, fetchSwapTransactionStatus as cK, compareTransactionIds as cL, isCoralBridgeAction as cM, sleep as cN, isChainflipBridgeTransaction as cO, isOnChainTxData as cP, getHistoryTransactionId as cQ, getStepStatuses as cR, getHalfSuccessState as cS, getStepsInfos as cT, getSwapTxStatusRefetchInterval as cU, getSendTxStatusRefetchInterval as cV, chainflipMultihopBridgeType as cW, getBridgeType as cX, getTransactionStatus as cY, getTransactionEndStatus as cZ, isHistoryTransactionPending as c_, scaleWeiToHbar as ca, parseToBigInt as cb, roundNumericValue as cc, formatUnitsRounded as cd, formatTokenAmount as ce, formatUsdAmount as cf, trimExtraDecimals as cg, getNumericValue as ch, cleanAmount as ci, convertTokenAmountToUSD as cj, convertUSDToTokenAmount as ck, calculateTotal24hChange as cl, getRouteExpiry as cm, searchTokens as cn, filterSolanaWallets as co, isSolanaAddressValid as cp, executeSolanaSwap as cq, executeSolanaTransfer as cr, executeSolanaDepositAddressCalldata as cs, isStellarAddressValid as ct, getStellarNetwork as cu, stellarAddressToScVal as cv, getStellarTrustLineAsset as cw, isStellarToken as cx, isStellarIssuedToken as cy, getStellarHorizonApiUrl as cz, definedInWindow as d, isHistoryTransactionWarning as d0, isHistoryTransactionEnded as d1, formatHash as d2, isWalletAddressValid as d3, redirectToExtensionsStore as d4, accessProperty as d5, populateWallets as d6, getDefaultChain as d7, sortWallets as d8, areSameAddress as d9, sortAddressBook as da, calculateTotalUsdBalanceUSD as db, addTokenToWallet as dc, isEvmChainNotSupportedError as dd, getWalletSupportedChainTypes as de, getConnectorForChainType as df, walletSupportsChainType as dg, connectWallet as dh, cancelConnectWallet as di, isProblematicConnector as dj, mergeWallets as dk, isXionSmartContractAddress as dl, isXrplAddressValid as dm, buildXrplTrustSetTx as dn, getXrplNetwork as dp, parseXrplPaymentTx as dq, parseXrplTokenAddress as dr, er as e, formatBNToReadable as f, DEFAULT_ROUTE_REFETCH_INTERVAL as g, destinationAddressResetValue as h, fallbackAddressResetValue as i, nativeCosmosTokenAddress as j, nativeEvmTokenAddress as k, nativeSolanaTokenAddress as l, nativeStellarTokenAddress as m, nativeBitcoinTokenAddress as n, nativeSuiTokenAddress as o, nativeXrplTokenAddress as p, CosmosProvider as q, SendTransactionStatus as r, TransactionStatus as s, useTrackSearchEmpty as t, useCosmosContext as u, useSquidChains as v, walletIconBaseUrl as w, useClient as x, useCosmosForChain as y, useHederaAccountActivation as z };
37501
+ //# sourceMappingURL=index-BOXqAr2r.js.map