@imtbl/sdk 1.12.1-alpha.2 → 1.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 (39) hide show
  1. package/dist/blockchain_data.js +2 -2
  2. package/dist/browser/checkout/BridgeWidget-a0216abf.js +1 -0
  3. package/dist/browser/checkout/{OnRampWidget-ba8f89d3.js → OnRampWidget-0141412f.js} +1 -1
  4. package/dist/browser/checkout/{SaleWidget-acc81ef9.js → SaleWidget-dfb3ec06.js} +1 -1
  5. package/dist/browser/checkout/{SpendingCapHero-b72f3beb.js → SpendingCapHero-f00c162d.js} +1 -1
  6. package/dist/browser/checkout/SwapWidget-7dd7ae0d.js +1 -0
  7. package/dist/browser/checkout/{TopUpView-d98e859c.js → TopUpView-83b01082.js} +1 -1
  8. package/dist/browser/checkout/WalletWidget-a7294770.js +1 -0
  9. package/dist/browser/checkout/{auto-track-f030002a.js → auto-track-a6ee7728.js} +1 -1
  10. package/dist/browser/checkout/balance-cab05497.js +1 -0
  11. package/dist/browser/checkout/index-1c0cb426.js +1 -0
  12. package/dist/browser/checkout/{index-1b81fd6c.js → index-51cb702e.js} +1 -1
  13. package/dist/browser/checkout/{index-fe4244bf.js → index-57f03d43.js} +2 -2
  14. package/dist/browser/checkout/{index-fc1dd5e6.js → index-a53ae4b9.js} +8 -8
  15. package/dist/browser/checkout/{index-850f7759.js → index-b10fea31.js} +1 -1
  16. package/dist/browser/checkout/{index-644fa9c9.js → index-e06cc1d2.js} +1 -1
  17. package/dist/browser/checkout/{index-169b8d47.js → index-f13a14b5.js} +1 -1
  18. package/dist/browser/checkout/{index-112837c2.js → index-fb6525df.js} +1 -1
  19. package/dist/browser/checkout/{index.umd-ad41e01c.js → index.umd-ebf23be8.js} +1 -1
  20. package/dist/browser/checkout/{retry-d76baab5.js → retry-242a2c60.js} +1 -1
  21. package/dist/browser/checkout/sdk.js +4 -4
  22. package/dist/browser/checkout/{useTransakEvents-6ae45095.js → useTransakEvents-4a36b909.js} +1 -1
  23. package/dist/browser/checkout/widgets-esm.js +1 -1
  24. package/dist/browser/checkout/widgets.js +60 -60
  25. package/dist/checkout.js +4 -4
  26. package/dist/config.js +1 -1
  27. package/dist/index.browser.js +7 -7
  28. package/dist/index.browser.js.map +1 -1
  29. package/dist/index.cjs +94 -45
  30. package/dist/index.js +95 -46
  31. package/dist/orderbook.js +1 -1
  32. package/dist/passport.js +91 -42
  33. package/dist/x.js +2 -2
  34. package/package.json +1 -1
  35. package/dist/browser/checkout/BridgeWidget-8d6ebcd9.js +0 -1
  36. package/dist/browser/checkout/SwapWidget-5df85279.js +0 -1
  37. package/dist/browser/checkout/WalletWidget-b608e01d.js +0 -1
  38. package/dist/browser/checkout/balance-25b5b39e.js +0 -1
  39. package/dist/browser/checkout/index-6b232374.js +0 -1
package/dist/passport.js CHANGED
@@ -2,7 +2,7 @@ import globalAxios$1, { isAxiosError as isAxiosError$1 } from 'axios';
2
2
  import { ImmutableX, Config, generateLegacyStarkPrivateKey, createStarkSigner } from '@imtbl/core-sdk';
3
3
  import { memorise } from 'lru-memorise';
4
4
  import { getGlobalisedValue as getGlobalisedValue$1 } from 'global-const';
5
- import { UserManager, User, InMemoryWebStorage, WebStorageStateStore } from 'oidc-client-ts';
5
+ import { UserManager, User, ErrorTimeout, ErrorResponse, InMemoryWebStorage, WebStorageStateStore } from 'oidc-client-ts';
6
6
  import jwt_decode from 'jwt-decode';
7
7
  import * as crypto from 'crypto';
8
8
  import { Magic } from 'magic-sdk';
@@ -9346,7 +9346,7 @@ class MultiRollupApiClients {
9346
9346
  }
9347
9347
 
9348
9348
  // eslint-disable-next-line @typescript-eslint/naming-convention
9349
- const defaultHeaders = { 'x-sdk-version': 'ts-immutable-sdk-1.12.1-alpha.2' };
9349
+ const defaultHeaders = { 'x-sdk-version': 'ts-immutable-sdk-1.13.0' };
9350
9350
  const createConfig = ({ basePath, headers, }) => {
9351
9351
  if (!basePath.trim()) {
9352
9352
  throw Error('basePath can not be empty');
@@ -9525,7 +9525,7 @@ const flattenProperties = (properties) => {
9525
9525
  };
9526
9526
 
9527
9527
  // WARNING: DO NOT CHANGE THE STRING BELOW. IT GETS REPLACED AT BUILD TIME.
9528
- const SDK_VERSION = '1.12.1-alpha.2';
9528
+ const SDK_VERSION = '1.13.0';
9529
9529
  const getReferrer = () => {
9530
9530
  if (isNode()) {
9531
9531
  return '';
@@ -9744,7 +9744,7 @@ const createImmutableXConfiguration = ({ basePath, chainID, coreContractAddress,
9744
9744
  chainID,
9745
9745
  coreContractAddress,
9746
9746
  registrationContractAddress,
9747
- sdkVersion: 'ts-immutable-sdk-1.12.1-alpha.2',
9747
+ sdkVersion: 'ts-immutable-sdk-1.13.0',
9748
9748
  });
9749
9749
  /**
9750
9750
  * Sets `sdkVersion` at the time of build
@@ -14357,6 +14357,13 @@ function isTokenExpired(oidcUser) {
14357
14357
  return isIdTokenExpired(idToken);
14358
14358
  }
14359
14359
 
14360
+ var PassportEvents;
14361
+ (function (PassportEvents) {
14362
+ PassportEvents["LOGGED_OUT"] = "loggedOut";
14363
+ })(PassportEvents || (PassportEvents = {}));
14364
+ const isUserZkEvm = (user) => !!user.zkEvm;
14365
+ const isUserImx = (user) => !!user.imx;
14366
+
14360
14367
  const formUrlEncodedHeader = {
14361
14368
  headers: {
14362
14369
  'Content-Type': 'application/x-www-form-urlencoded',
@@ -14408,8 +14415,8 @@ function sha256(buffer) {
14408
14415
  }
14409
14416
  class AuthManager {
14410
14417
  userManager;
14411
- config;
14412
14418
  deviceCredentialsManager;
14419
+ config;
14413
14420
  logoutMode;
14414
14421
  /**
14415
14422
  * Promise that is used to prevent multiple concurrent calls to the refresh token endpoint.
@@ -14639,6 +14646,12 @@ class AuthManager {
14639
14646
  async logoutSilentCallback(url) {
14640
14647
  return this.userManager.signoutSilentCallback(url);
14641
14648
  }
14649
+ forceUserRefreshInBackground() {
14650
+ this.refreshTokenAndUpdatePromise().catch((error) => {
14651
+ // eslint-disable-next-line no-console
14652
+ console.warn('Failed to refresh user token', error);
14653
+ });
14654
+ }
14642
14655
  async forceUserRefresh() {
14643
14656
  return this.refreshTokenAndUpdatePromise();
14644
14657
  }
@@ -14660,7 +14673,19 @@ class AuthManager {
14660
14673
  resolve(null);
14661
14674
  }
14662
14675
  catch (err) {
14663
- reject(err);
14676
+ let passportErrorType = PassportErrorType.AUTHENTICATION_ERROR;
14677
+ let errorMessage = 'Failed to refresh token';
14678
+ if (err instanceof ErrorTimeout) {
14679
+ passportErrorType = PassportErrorType.SILENT_LOGIN_ERROR;
14680
+ }
14681
+ else if (err instanceof ErrorResponse) {
14682
+ passportErrorType = PassportErrorType.NOT_LOGGED_IN_ERROR;
14683
+ errorMessage = `${err.message}: ${err.error_description}`;
14684
+ }
14685
+ else if (err instanceof Error) {
14686
+ errorMessage = err.message;
14687
+ }
14688
+ reject(new PassportError(errorMessage, passportErrorType));
14664
14689
  }
14665
14690
  finally {
14666
14691
  this.refreshingPromise = null; // Reset the promise after completion
@@ -14669,22 +14694,56 @@ class AuthManager {
14669
14694
  return this.refreshingPromise;
14670
14695
  }
14671
14696
  /**
14672
- * Get the user from the cache or refresh the token if it's expired.
14673
- * return null if there's no refresh token.
14697
+ *
14698
+ * @param typeAssertion {(user: User) => boolean} - Optional. If provided, then the User will be checked against
14699
+ * the typeAssertion. If the user meets the requirements, then it will be typed as T and returned. If the User
14700
+ * does NOT meet the type assertion, then execution will continue, and we will attempt to obtain a User that does
14701
+ * meet the type assertion.
14702
+ *
14703
+ * This function will attempt to obtain a User in the following order:
14704
+ * 1. If the User is currently refreshing, wait for the refresh to complete.
14705
+ * 2. Attempt to obtain a User from storage that has not expired.
14706
+ * 3. Attempt to refresh the User if a refresh token is present.
14707
+ * 4. Return null if no valid User can be obtained.
14674
14708
  */
14675
- async getUser() {
14676
- return withPassportError(async () => {
14677
- const oidcUser = await this.userManager.getUser();
14678
- if (!oidcUser)
14679
- return null;
14680
- if (!isTokenExpired(oidcUser)) {
14681
- return AuthManager.mapOidcUserToDomainModel(oidcUser);
14682
- }
14683
- if (oidcUser.refresh_token) {
14684
- return this.refreshTokenAndUpdatePromise();
14709
+ async getUser(typeAssertion = (user) => true) {
14710
+ if (this.refreshingPromise) {
14711
+ const user = await this.refreshingPromise;
14712
+ if (user && typeAssertion(user)) {
14713
+ return user;
14685
14714
  }
14686
14715
  return null;
14687
- }, PassportErrorType.NOT_LOGGED_IN_ERROR);
14716
+ }
14717
+ const oidcUser = await this.userManager.getUser();
14718
+ if (!oidcUser)
14719
+ return null;
14720
+ if (!isTokenExpired(oidcUser)) {
14721
+ const user = AuthManager.mapOidcUserToDomainModel(oidcUser);
14722
+ if (user && typeAssertion(user)) {
14723
+ return user;
14724
+ }
14725
+ }
14726
+ if (oidcUser.refresh_token) {
14727
+ const user = await this.refreshTokenAndUpdatePromise();
14728
+ if (user && typeAssertion(user)) {
14729
+ return user;
14730
+ }
14731
+ }
14732
+ return null;
14733
+ }
14734
+ async getUserZkEvm() {
14735
+ const user = await this.getUser(isUserZkEvm);
14736
+ if (!user) {
14737
+ throw new Error('Failed to obtain a User with the required ZkEvm attributes');
14738
+ }
14739
+ return user;
14740
+ }
14741
+ async getUserImx() {
14742
+ const user = await this.getUser(isUserImx);
14743
+ if (!user) {
14744
+ throw new Error('Failed to obtain a User with the required IMX attributes');
14745
+ }
14746
+ return user;
14688
14747
  }
14689
14748
  }
14690
14749
 
@@ -14753,11 +14812,6 @@ const getStarkSigner = async (signer) => withPassportError(async () => {
14753
14812
  return createStarkSigner(privateKey);
14754
14813
  }, PassportErrorType.WALLET_CONNECTION_ERROR);
14755
14814
 
14756
- var PassportEvents;
14757
- (function (PassportEvents) {
14758
- PassportEvents["LOGGED_OUT"] = "loggedOut";
14759
- })(PassportEvents || (PassportEvents = {}));
14760
-
14761
14815
  async function exchangeTransfer({ user, starkSigner, request, exchangesApi, }) {
14762
14816
  return withPassportError(async () => {
14763
14817
  const { ethAddress } = user.imx;
@@ -15144,7 +15198,7 @@ class PassportImxProvider {
15144
15198
  * @see getAuthenticatedUserAndSigners
15145
15199
  *
15146
15200
  */
15147
- async initialiseSigners() {
15201
+ initialiseSigners() {
15148
15202
  const generateSigners = async () => {
15149
15203
  const user = await this.authManager.getUser();
15150
15204
  // The user will be present because the factory validates it
@@ -15183,7 +15237,6 @@ class PassportImxProvider {
15183
15237
  }
15184
15238
  async getRegisteredImxUserAndSigners() {
15185
15239
  const { user, starkSigner, ethSigner } = await this.getAuthenticatedUserAndSigners();
15186
- const isUserImx = (oidcUser) => oidcUser?.imx !== undefined;
15187
15240
  if (!isUserImx(user)) {
15188
15241
  throw new PassportError('User has not been registered with StarkEx', PassportErrorType.USER_NOT_REGISTERED_ERROR);
15189
15242
  }
@@ -15753,11 +15806,11 @@ class RelayerClient {
15753
15806
  jsonrpc: '2.0',
15754
15807
  ...request,
15755
15808
  };
15756
- const user = await this.authManager.getUser();
15809
+ const user = await this.authManager.getUserZkEvm();
15757
15810
  const response = await fetch(`${this.config.relayerUrl}/v1/transactions`, {
15758
15811
  method: 'POST',
15759
15812
  headers: {
15760
- Authorization: `Bearer ${user?.accessToken}`,
15813
+ Authorization: `Bearer ${user.accessToken}`,
15761
15814
  'Content-Type': 'application/json',
15762
15815
  },
15763
15816
  body: JSON.stringify(body),
@@ -15863,7 +15916,7 @@ async function registerZkEvmUser({ authManager, ethSigner, multiRollupApiClients
15863
15916
  throw new JsonRpcError(RpcErrorCode.INTERNAL_ERROR, `Chain name does not exist on for chain id ${network.chainId}`);
15864
15917
  }
15865
15918
  try {
15866
- await multiRollupApiClients.passportApi.createCounterfactualAddressV2({
15919
+ const registrationResponse = await multiRollupApiClients.passportApi.createCounterfactualAddressV2({
15867
15920
  chainName,
15868
15921
  createCounterfactualAddressRequest: {
15869
15922
  ethereum_address: ethereumAddress,
@@ -15872,15 +15925,12 @@ async function registerZkEvmUser({ authManager, ethSigner, multiRollupApiClients
15872
15925
  }, {
15873
15926
  headers: { Authorization: `Bearer ${accessToken}` },
15874
15927
  });
15928
+ authManager.forceUserRefreshInBackground();
15929
+ return registrationResponse.data.counterfactual_address;
15875
15930
  }
15876
15931
  catch (error) {
15877
15932
  throw new JsonRpcError(RpcErrorCode.INTERNAL_ERROR, `Failed to create counterfactual address: ${error}`);
15878
15933
  }
15879
- const user = await authManager.forceUserRefresh();
15880
- if (!user?.zkEvm) {
15881
- throw new JsonRpcError(RpcErrorCode.INTERNAL_ERROR, 'Failed to refresh user details');
15882
- }
15883
- return user;
15884
15934
  }
15885
15935
 
15886
15936
  const transactionRejectedCrossSdkBridgeError = 'Transaction requires confirmation but this functionality is not'
@@ -15942,7 +15992,7 @@ class GuardianClient {
15942
15992
  const finallyFn = () => {
15943
15993
  this.confirmationScreen.closeWindow();
15944
15994
  };
15945
- const user = await this.authManager.getUser();
15995
+ const user = await this.authManager.getUserImx();
15946
15996
  const headers = { Authorization: `Bearer ${user.accessToken}` };
15947
15997
  const transactionRes = await retryWithDelay(async () => this.transactionAPI.getTransactionByID({
15948
15998
  transactionID: payloadHash,
@@ -15972,7 +16022,7 @@ class GuardianClient {
15972
16022
  }
15973
16023
  }
15974
16024
  async evaluateEVMTransaction({ chainId, nonce, metaTransactions, }) {
15975
- const user = await this.authManager.getUser();
16025
+ const user = await this.authManager.getUserZkEvm();
15976
16026
  const headers = { Authorization: `Bearer ${user.accessToken}` };
15977
16027
  const guardianTransactions = transformGuardianTransactions(metaTransactions);
15978
16028
  try {
@@ -16006,7 +16056,7 @@ class GuardianClient {
16006
16056
  throw new JsonRpcError(RpcErrorCode.TRANSACTION_REJECTED, transactionRejectedCrossSdkBridgeError);
16007
16057
  }
16008
16058
  if (confirmationRequired && !!transactionId) {
16009
- const user = await this.authManager.getUser();
16059
+ const user = await this.authManager.getUserZkEvm();
16010
16060
  const confirmationResult = await this.confirmationScreen.requestConfirmation(transactionId, user.zkEvm.ethAddress, TransactionApprovalRequestChainTypeEnum.Evm, chainId);
16011
16061
  if (!confirmationResult.confirmed) {
16012
16062
  throw new JsonRpcError(RpcErrorCode.TRANSACTION_REJECTED, 'Transaction rejected by user');
@@ -16018,7 +16068,7 @@ class GuardianClient {
16018
16068
  }
16019
16069
  async evaluateMessage({ chainID, payload }) {
16020
16070
  try {
16021
- const user = await this.authManager.getUser();
16071
+ const user = await this.authManager.getUserZkEvm();
16022
16072
  if (user === null) {
16023
16073
  throw new PassportError('evaluateMessage requires a valid ID token or refresh token. Please log in first', PassportErrorType.NOT_LOGGED_IN_ERROR);
16024
16074
  }
@@ -16036,7 +16086,7 @@ class GuardianClient {
16036
16086
  throw new JsonRpcError(RpcErrorCode.TRANSACTION_REJECTED, transactionRejectedCrossSdkBridgeError);
16037
16087
  }
16038
16088
  if (confirmationRequired && !!messageId) {
16039
- const user = await this.authManager.getUser();
16089
+ const user = await this.authManager.getUserZkEvm();
16040
16090
  const confirmationResult = await this.confirmationScreen.requestMessageConfirmation(messageId, user.zkEvm.ethAddress);
16041
16091
  if (!confirmationResult.confirmed) {
16042
16092
  throw new JsonRpcError(RpcErrorCode.TRANSACTION_REJECTED, 'Signature rejected by user');
@@ -16253,7 +16303,7 @@ class ZkEvmProvider {
16253
16303
  * @see #getSigner
16254
16304
  *
16255
16305
  */
16256
- async #initialiseEthSigner(user) {
16306
+ #initialiseEthSigner(user) {
16257
16307
  const generateSigner = async () => {
16258
16308
  const magicRpcProvider = await this.#magicAdapter.login(user.idToken);
16259
16309
  const web3Provider = new Web3Provider(magicRpcProvider);
@@ -16292,14 +16342,13 @@ class ZkEvmProvider {
16292
16342
  this.#initialiseEthSigner(user);
16293
16343
  if (!isZkEvmUser(user)) {
16294
16344
  const ethSigner = await this.#getSigner();
16295
- const userZkEvm = await registerZkEvmUser({
16345
+ this.#zkEvmAddress = await registerZkEvmUser({
16296
16346
  ethSigner,
16297
16347
  authManager: this.#authManager,
16298
16348
  multiRollupApiClients: this.#multiRollupApiClients,
16299
16349
  accessToken: user.accessToken,
16300
16350
  jsonRpcProvider: this.#jsonRpcProvider,
16301
16351
  });
16302
- this.#zkEvmAddress = userZkEvm.zkEvm.ethAddress;
16303
16352
  }
16304
16353
  else {
16305
16354
  this.#zkEvmAddress = user.zkEvm.ethAddress;
package/dist/x.js CHANGED
@@ -136,7 +136,7 @@ const flattenProperties = (properties) => {
136
136
  };
137
137
 
138
138
  // WARNING: DO NOT CHANGE THE STRING BELOW. IT GETS REPLACED AT BUILD TIME.
139
- const SDK_VERSION = '1.12.1-alpha.2';
139
+ const SDK_VERSION = '1.13.0';
140
140
  const getReferrer = () => {
141
141
  if (isNode()) {
142
142
  return '';
@@ -334,7 +334,7 @@ const createImmutableXConfiguration = ({ basePath, chainID, coreContractAddress,
334
334
  chainID,
335
335
  coreContractAddress,
336
336
  registrationContractAddress,
337
- sdkVersion: 'ts-immutable-sdk-1.12.1-alpha.2',
337
+ sdkVersion: 'ts-immutable-sdk-1.13.0',
338
338
  });
339
339
  /**
340
340
  * Sets `sdkVersion` at the time of build
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@imtbl/sdk",
3
3
  "description": "Immutable Unified SDK",
4
- "version": "1.12.1-alpha.2",
4
+ "version": "1.13.0",
5
5
  "author": "Immutable",
6
6
  "browser": "./dist/index.browser.js",
7
7
  "bugs": "https://github.com/immutable/ts-immutable-sdk/issues",
@@ -1 +0,0 @@
1
- import{b4 as e,b5 as t,aq as s,b6 as a,b7 as n,r as o,u as r,b8 as i,j as l,M as c,ar as d,b9 as u,I as x,an as p,ba as E,bb as h,B as g,l as T,K as w,bc as b,a3 as m,aL as f,O as I,P as A,bd as y,be as S,a as v,bf as _,U as k,bg as C,V as R,d as j,bh as N,o as L,aK as D,bi as M,y as B,W as P,ac as W,X as O,E as G,q as F,T as V,p as K,bj as U,c as z,H,F as $,bk as Z,bl as J,L as q,t as Q,m as X,Y,bm as ee,aI as te,bn as se,aJ as ae,w as ne,n as oe,N as re,aO as ie,aU as le,S as ce,ab as de,aP as ue,aH as xe,bo as pe,aM as Ee,aS as he,bp as ge,bq as Te,a0 as we,a1 as be,br as me,e as fe,A as Ie,aV as Ae,bs as ye,v as Se,i as ve,bt as _e,aX as ke,bu as Ce,f as Re,h as je,a5 as Ne,bv as Le,bw as De,bx as Me}from"./index-fe4244bf.js";import{B as Be,C as Pe,a as We,b as Oe,T as Ge}from"./TopUpView-d98e859c.js";import{r as Fe,u as Ve}from"./retry-d76baab5.js";import{b as Ke,S as Ue,T as ze,a as He,g as $e,F as Ze,W as Je}from"./balance-25b5b39e.js";const{Axios:qe,AxiosError:Qe,CanceledError:Xe,isCancel:Ye,CancelToken:et,VERSION:tt,all:st,Cancel:at,isAxiosError:nt,spread:ot,toFormData:rt,AxiosHeaders:it,HttpStatusCode:lt,formToJSON:ct,getAdapter:dt,mergeConfig:ut}=e;class xt{url;ttl;env;cacheMap;setCache(e,t){this.cacheMap[e]={data:t,ttl:(new Date).getTime()+1e3*this.ttl}}getCache(e){const t=this.cacheMap[e];return!t||t.ttl<=(new Date).getTime()?null:t.data}constructor(e){this.env=e.env,this.url=`${t[this.env]}/checkout`,this.cacheMap={},this.ttl=void 0!==e.ttl?e.ttl:60}static isHttpError=e=>"code"in e;async getTransactions(t){const{txType:s,fromAddress:a}=t;try{const t=`${this.url}/v1/transactions?from_address=${a}&tx_type=${s}`,n=this.getCache(t);if(n)return Promise.resolve(n);const o=await e.get(t);if(o.status>=400)return Promise.reject({code:o.status,message:o.statusText});const{data:r}=o;return this.setCache(t,r),Promise.resolve(r)}catch(t){let s=lt.InternalServerError,a="InternalServerError";return e.isAxiosError(t)&&(s=t.response?.status||s,a=t.message),Promise.reject({code:s,message:a})}}}var pt;!function(e){e.BRIDGE="bridge"}(pt||(pt={}));const Et={IN_PROGRESS:"in_progress",WITHDRAWAL_PENDING:"withdrawal_pending"};function ht(e){switch(e){case s.ETHEREUM:return a.ETHEREUM;case s.IMTBL_ZKEVM_TESTNET:return a.IMTBL_ZKEVM_TESTNET;case s.IMTBL_ZKEVM_MAINNET:return a.IMTBL_ZKEVM_MAINNET;case s.IMTBL_ZKEVM_DEVNET:return a.IMTBL_ZKEVM_DEVNET;case s.SEPOLIA:return a.SEPOLIA;default:return""}}function gt(e){switch(e){case s.ETHEREUM:return n.ETHEREUM;case s.IMTBL_ZKEVM_TESTNET:return n.IMTBL_ZKEVM_TESTNET;case s.IMTBL_ZKEVM_MAINNET:return n.IMTBL_ZKEVM_MAINNET;case s.IMTBL_ZKEVM_DEVNET:return n.IMTBL_ZKEVM_DEVNET;case s.SEPOLIA:return n.SEPOLIA;default:return""}}function Tt(e){switch(e){case n.ETHEREUM:return s.ETHEREUM;case n.IMTBL_ZKEVM_TESTNET:return s.IMTBL_ZKEVM_TESTNET;case n.IMTBL_ZKEVM_MAINNET:return s.IMTBL_ZKEVM_MAINNET;case n.IMTBL_ZKEVM_DEVNET:return s.IMTBL_ZKEVM_DEVNET;case n.SEPOLIA:return s.SEPOLIA;default:return 0}}const wt={web3Provider:null,walletProviderName:null,from:null,to:null,tokenBridge:null,tokenBalances:[],allowedTokens:[],token:null,amount:"0"};var bt;!function(e){e.SET_WALLETS_AND_NETWORKS="SET_WALLETS_AND_NETWORKS",e.SET_WALLET_PROVIDER_NAME="SET_WALLET_PROVIDER_NAME",e.SET_PROVIDER="SET_PROVIDER",e.SET_TOKEN_BRIDGE="SET_TOKEN_BRIDGE",e.SET_TOKEN_BALANCES="SET_TOKEN_BALANCES",e.SET_ALLOWED_TOKENS="SET_ALLOWED_TOKENS",e.SET_TOKEN_AND_AMOUNT="SET_TOKEN_AND_AMOUNT"}(bt||(bt={}));const mt=o.createContext({bridgeState:{...wt,checkout:{}},bridgeDispatch:()=>{}});mt.displayName="BridgeContext";const ft=(e,t)=>{switch(t.payload.type){case bt.SET_WALLETS_AND_NETWORKS:return{...e,from:t.payload.from,to:t.payload.to};case bt.SET_WALLET_PROVIDER_NAME:return{...e,walletProviderName:t.payload.walletProviderName};case bt.SET_PROVIDER:return{...e,web3Provider:t.payload.web3Provider};case bt.SET_TOKEN_BRIDGE:return{...e,tokenBridge:t.payload.tokenBridge};case bt.SET_TOKEN_BALANCES:return{...e,tokenBalances:t.payload.tokenBalances};case bt.SET_ALLOWED_TOKENS:return{...e,allowedTokens:t.payload.allowedTokens};case bt.SET_TOKEN_AND_AMOUNT:return{...e,token:t.payload.token,amount:t.payload.amount};default:return e}};function It({testId:e,walletProviderName:t,onWalletClick:s,loading:a}){const{t:n}=r(),[d,u]=o.useState(!1),x={[i.PASSPORT]:"PassportSymbolOutlined",[i.METAMASK]:"MetaMaskSymbol"};return l.jsxs(c,{testId:`${e}-wallet-list-${t}`,size:"medium",emphasized:!0,onClick:async()=>{if(!a){u(!0);try{await s(t)}finally{u(!1)}}},children:[l.jsx(c.FramedLogo,{logo:x[t],sx:{backgroundColor:"base.color.translucent.standard.200"}}),l.jsx(c.Label,{size:"medium",children:n(`wallets.${t}.heading`)}),d&&l.jsx(c.StatefulButtCon,{state:"loading",icon:"Loading"})]})}const At={display:"flex",flexDirection:"column",gap:"base.spacing.x1",paddingX:"base.spacing.x4"};function yt({testId:e,drawerText:t,walletOptions:s,showWalletSelectorTarget:a,showDrawer:n,setShowDrawer:r,onWalletItemClick:i}){const[c,x]=o.useState(!1),{heading:p,defaultText:E}=t,h=async e=>{x(!0);try{await i(e)}catch(e){console.error(e)}finally{x(!1)}};return l.jsxs(d,{headerBarTitle:p,size:"full",onCloseDrawer:()=>{c||r(!1)},visible:n,children:[a&&l.jsx(d.Target,{children:l.jsx(Ke,{testId:`${e}-wallet-form-control`,textAlign:"left",children:l.jsx(u,{testId:`${e}-wallet-select`,defaultLabel:E??"",size:"large",targetClickOveride:()=>r(!0)})})}),l.jsx(d.Content,{sx:At,children:s.map((t=>l.jsx(It,{testId:e,loading:c,walletProviderName:t,onWalletClick:h},t)))})]})}const St=(e,t)=>{const s=new CustomEvent(x.IMTBL_BRIDGE_WIDGET_EVENT,{detail:{type:p.TRANSACTION_SENT,data:{transactionHash:t}}});console.log("bridge success ",e,s),void 0!==e&&e.dispatchEvent(s)};function vt(e){const t=new CustomEvent(x.IMTBL_BRIDGE_WIDGET_EVENT,{detail:{type:p.CLOSE_WIDGET,data:{}}});console.log("bridge close ",e,t),void 0!==e&&e.dispatchEvent(t)}function _t(){return l.jsxs(E,{sx:{gap:"base.spacing.x2"},children:[l.jsx(h,{sx:{h:"base.spacing.x4",w:"base.spacing.x32",mt:"base.spacing.x2"}}),l.jsx(c,{shimmer:!0,emphasized:!0,size:"small"}),l.jsx(c,{shimmer:!0,emphasized:!0,size:"small"}),l.jsx(c,{shimmer:!0,emphasized:!0,size:"small"})]})}const kt={px:"base.spacing.x4",display:"flex",flexDirection:"column",height:"100%"},Ct={flexGrow:"1",flexShrink:"0",flexBasis:"0"},Rt={flexGrow:"0",flexShrink:"1",mt:"base.spacing.x2"},jt={bg:"base.color.translucent.emphasis.100",borderRadius:"base.borderRadius.x4",display:"flex",alignItems:"center",justifyContent:"center",flexDirection:"column",height:"100%",px:"base.spacing.x5"};function Nt({openWalletDrawer:e}){const{t:t}=r();return l.jsxs(g,{sx:jt,children:[l.jsx(T,{sx:{mb:"base.spacing.x8"},children:t("views.TRANSACTIONS.status.emptyState.notConnected.body")}),l.jsx(w,{variant:"secondary",size:"medium",testId:"transactions-connect-wallet-button",onClick:e,children:t("views.TRANSACTIONS.status.emptyState.notConnected.buttonText")})]})}const Lt={backgroundColor:"base.color.neutral.800",px:"base.spacing.x4",p:"base.spacing.x5",borderRadius:"base.borderRadius.x6"},Dt={color:"base.color.text.body.secondary"};function Mt({checkout:e,isPassport:t}){const{t:s}=r(),[a,n]=o.useState("");return o.useEffect((()=>{e&&n(b[e.config.environment])}),[e]),l.jsx(g,{sx:Lt,children:l.jsxs(g,{sx:{display:"flex",flexDirection:"column"},children:[l.jsxs(g,{children:[l.jsx(T,{size:"small",children:s("views.TRANSACTIONS.support.body1")}),l.jsxs(T,{size:"small",sx:Dt,children:[s("views.TRANSACTIONS.support.body2"),l.jsx(m,{size:"small",rc:l.jsx("a",{target:"_blank",href:s("views.TRANSACTIONS.support.supportLink"),rel:"noreferrer"}),children:s("views.TRANSACTIONS.support.body3")})]})]}),t&&l.jsxs(T,{size:"small",sx:Dt,children:[s("views.TRANSACTIONS.support.passport.body1")," ",l.jsx(m,{size:"small",rc:l.jsx("a",{target:"_blank",href:a,rel:"noreferrer"}),children:s("views.TRANSACTIONS.support.passport.body2")})]})]})})}const Bt={display:"flex",flexDirection:"column",borderRadius:"base.borderRadius.x4",bg:"base.color.translucent.emphasis.100"},Pt={p:"base.spacing.x3",d:"flex",justifyContent:"space-between",position:"relative"},Wt={display:"flex",flexGrow:"1",alignItems:"center",gap:"base.spacing.x2"};function Ot({transaction:e}){const t=Tt(e.details.from_chain),s=Tt(e.details.to_chain);return l.jsxs(g,{sx:{display:"flex",px:"base.spacing.x4",gap:"base.spacing.x2"},children:[l.jsx(f,{icon:I[t],sx:{w:"base.icon.size.250",fill:A[t]},variant:"bold"}),l.jsxs(g,{sx:{display:"flex",flexDirection:"column",flexGrow:"1"},children:[l.jsx(T,{size:"xxSmall",sx:{color:"base.color.translucent.standard.900"},children:y[t]}),l.jsx(S,{size:"xxSmall",sx:{color:"base.color.translucent.standard.600"},text:e.details.from_address})]}),l.jsx(g,{sx:{flexGrow:"1"}}),l.jsx(f,{icon:"ArrowForward",sx:{w:"base.icon.size.250",fill:"base.color.brand.4"}}),l.jsx(g,{sx:{flexGrow:"1"}}),l.jsx(f,{icon:I[s],sx:{w:"base.icon.size.250",fill:A[s]},variant:"bold"}),l.jsxs(g,{sx:{display:"flex",flexDirection:"column",flexGrow:"1"},children:[l.jsx(T,{size:"xxSmall",sx:{color:"base.color.translucent.standard.900"},children:y[s]}),l.jsx(S,{size:"xxSmall",sx:{color:"base.color.translucent.standard.600"},text:e.details.to_address})]})]})}function Gt({label:e,details:t,transaction:s,fiatAmount:a,amount:n,icon:r}){const{track:i}=v(),d=o.useMemo((()=>`${t.link}${t.hash}`),[t]);return l.jsx(g,{testId:`transaction-item-${s.blockchain_metadata.transaction_hash}`,sx:Bt,children:l.jsxs(_,{chevronSide:"right",sx:{button:{p:"base.spacing.x1"},article:{pr:"base.spacing.x10"}},onExpandChange:e=>e&&i({userJourney:k.BRIDGE,screen:"TransactionItem",control:"Accordion",controlType:"Button"}),children:[l.jsx(_.TargetLeftSlot,{sx:{pr:"base.spacing.x2"},children:l.jsxs(c,{size:"xSmall",children:[l.jsx(c.FramedImage,{imageUrl:r,circularFrame:!0}),l.jsx(c.Label,{children:e}),l.jsx(c.Caption,{children:l.jsx(m,{size:"xSmall",rc:l.jsx("a",{target:"_blank",href:d,rel:"noreferrer",onClick:e=>{return s=t,e.stopPropagation(),void i({userJourney:k.BRIDGE,screen:"TransactionItem",control:"Details",controlType:"Link",extras:{linkDetail:s}});var s}}),children:t.text})}),l.jsx(c.PriceDisplay,{fiatAmount:a,price:n})]})}),l.jsxs(_.ExpandedContent,{sx:{pr:"0",pl:"0",mb:"base.spacing.x3",gap:"0"},children:[l.jsx(C,{size:"xSmall",sx:{px:"base.spacing.x2"}}),l.jsx(Ot,{transaction:s})]})]})})}const Ft=e=>{let t=440;return e&&(t-=20),{backgroundColor:"base.color.neutral.800",px:"base.spacing.x4",pt:"base.spacing.x5",pb:"base.spacing.x4",borderRadius:"base.borderRadius.x6",h:`${t}px`,w:"100%",overflowY:"scroll"}},Vt={borderRadius:"base.borderRadius.x4",display:"flex",flexDirection:"column",gap:"base.spacing.x5"};function Kt({label:e,transaction:t,fiatAmount:s,amount:a,icon:n}){const{viewDispatch:i}=o.useContext(R),{track:d}=v(),u=r(),x=o.useMemo((()=>(new Date).getTime()),[]),p=o.useMemo((()=>t.details.current_status.withdrawal_ready_at?new Date(t.details.current_status.withdrawal_ready_at):void 0),[t]),E=t.details.current_status.status===Et.WITHDRAWAL_PENDING,h=new Intl.RelativeTimeFormat(u[1].language||"en",{numeric:"auto"}),b=o.useMemo((()=>{if(!E||void 0===p)return"";const e=(p.getTime()-x)/6e4;if(e<=1)return"in 1 minute";if(e<60)return h.format(Math.ceil(e),"minute");const t=e/60;if(e<1440)return h.format(Math.ceil(t),"hour");const s=t/24;return h.format(Math.ceil(s),"day")}),[x,u[1].language]),m=!!p&&p.getTime()<x,I=o.useMemo((()=>!0===m?u.t("views.TRANSACTIONS.status.withdrawalPending.withdrawalReadyText"):`${u.t("views.TRANSACTIONS.status.withdrawalPending.withdrawalDelayText")} ${b}`),[b,u[1].language]);return l.jsxs(g,{testId:`transaction-item-${t.blockchain_metadata.transaction_hash}`,sx:Bt,children:[E&&l.jsxs(l.Fragment,{children:[l.jsxs(g,{sx:Pt,children:[l.jsxs(g,{sx:Wt,children:[l.jsx(f,{icon:"Alert",variant:"bold",sx:{fill:m?"base.color.status.fatal.bright":"base.color.status.attention.bright",w:"base.icon.size.200"}}),l.jsx(T,{testId:`transaction-item-${t.blockchain_metadata.transaction_hash}-action-message`,size:"xSmall",sx:{color:"base.color.text.body.secondary"},children:I})]}),E&&m&&l.jsx(w,{testId:`transaction-item-${t.blockchain_metadata.transaction_hash}-action-button`,variant:"primary",size:"small",onClick:()=>{i({payload:{type:j.UPDATE_VIEW,view:{type:Be.CLAIM_WITHDRAWAL,transaction:t}}})},children:u.t("views.TRANSACTIONS.status.withdrawalPending.actionButtonText")})]}),l.jsx(C,{size:"small",sx:{color:"base.color.translucent.emphasis.300",opacity:.1}})]}),l.jsxs(_,{chevronSide:"right",sx:{button:{p:"base.spacing.x1"},article:{pr:"base.spacing.x10"},borderTopRightRadius:"0",borderTopLeftRadius:"0"},onExpandChange:e=>e&&d({userJourney:k.BRIDGE,screen:"TransactionItem",control:"Accordion",controlType:"Button"}),children:[l.jsx(_.TargetLeftSlot,{sx:{pr:"base.spacing.x2"},children:l.jsxs(c,{size:"xSmall",children:[l.jsx(c.FramedImage,{imageUrl:n,circularFrame:!0}),l.jsx(c.Label,{children:e}),l.jsx(c.Caption,{children:u.t("views.TRANSACTIONS.status.withdrawalPending.caption")}),l.jsx(c.PriceDisplay,{fiatAmount:s,price:a})]})}),l.jsxs(_.ExpandedContent,{sx:{pr:"0",pl:"0",mb:"base.spacing.x3",gap:"0"},children:[l.jsx(C,{size:"xSmall",sx:{px:"base.spacing.x2"}}),l.jsx(Ot,{transaction:t})]})]})]})}const Ut={display:"flex",flexDirection:"row",justifyContent:"space-between",alignItems:"center",p:"base.spacing.x2",pb:"base.spacing.x4"};function zt({onChangeWalletClick:e}){const{t:t}=r(),{bridgeState:{from:s}}=o.useContext(mt),{track:a}=v(),n=s?.walletAddress||"",i=N(s?.web3Provider),c=L(s?.web3Provider);return l.jsxs(g,{sx:Ut,children:[l.jsxs(g,{sx:{display:"flex",alignItems:"center",gap:"base.spacing.x1"},children:[i&&!c&&l.jsx(D,{logo:"MetaMaskSymbol",sx:{width:"base.icon.size.400"}}),!i&&c&&l.jsx(D,{logo:"PassportSymbolOutlined",sx:{width:"base.icon.size.400",pr:"base.spacing.x1"}}),l.jsx(S,{leftSideLength:6,rightSideLength:4,text:n})]}),l.jsx(w,{size:"small",variant:"tertiary",onClick:()=>{a({userJourney:k.BRIDGE,screen:Be.TRANSACTIONS,controlType:"Button",control:"Pressed"}),e()},children:t("views.TRANSACTIONS.changeWallet.buttonText")})]})}function Ht({checkout:e,transactions:t,knownTokenMap:s,isPassport:a,changeWallet:i}){const{cryptoFiatState:c}=o.useContext(Pe),{t:d}=r(),[u,x]=o.useState("");o.useEffect((()=>{e&&x(M[e.config.environment])}),[e]);const p=o.useCallback(((e,t)=>e.details.current_status.status===Et.WITHDRAWAL_PENDING&&t.details.current_status.status!==Et.WITHDRAWAL_PENDING?-1:e.details.current_status.status===t.details.current_status.status?0:1),[]),E=o.useCallback((t=>B(t.details.from_token_address)?P(e.config.environment,function(e){switch(e){case n.ETHEREUM:case n.SEPOLIA:return"ETH";case n.IMTBL_ZKEVM_TESTNET:case n.IMTBL_ZKEVM_MAINNET:case n.IMTBL_ZKEVM_DEVNET:return"IMX";default:return""}}(t.details.from_chain)):P(e.config.environment,t.details.from_token_address)),[e]);return l.jsxs(g,{sx:Ft(a),children:[l.jsx(zt,{onChangeWalletClick:i}),l.jsx(g,{testId:"move-transaction-list",sx:Vt,children:t.sort(p).map((e=>{const t=e.blockchain_metadata.transaction_hash,a=s[e.details.from_chain][e.details.from_token_address.toLowerCase()],n=W.formatUnits(e.details.amount,a.decimals),o=O(n,a.symbol,c.conversions);return e.details.current_status.status===Et.WITHDRAWAL_PENDING?l.jsx(Kt,{label:a.name,transaction:e,fiatAmount:`${d("views.TRANSACTIONS.fiatPricePrefix")}${o}`,amount:n,icon:E(e)},t):l.jsx(Gt,{label:a.name,details:{text:d("views.TRANSACTIONS.status.inProgress.stepInfo"),link:u,hash:t},transaction:e,fiatAmount:`${d("views.TRANSACTIONS.fiatPricePrefix")}${o}`,amount:n,icon:E(e)},t)}))})]})}const $t={backgroundColor:"base.color.neutral.800",px:"base.spacing.x4",pt:"base.spacing.x5",pb:"base.spacing.x4",borderRadius:"base.borderRadius.x6",h:"100%",w:"100%",display:"flex",flexDirection:"column"},Zt={display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",padding:"base.spacing.x5",flex:1},Jt={mb:"base.spacing.x8",color:"base.color.text.body.secondary"},qt={color:"base.color.text.body.secondary"};function Qt({checkout:e,isPassport:t,changeWallet:s}){const{page:a}=v(),{t:n}=r(),[i,c]=o.useState("");return o.useEffect((()=>{e&&c(b[e.config.environment])}),[e]),o.useEffect((()=>{a({userJourney:k.BRIDGE,screen:"NoTransactions"})}),[]),l.jsxs(g,{sx:$t,children:[l.jsx(zt,{onChangeWalletClick:s}),l.jsxs(g,{sx:Zt,children:[l.jsx(T,{size:"small",sx:Jt,children:n("views.TRANSACTIONS.status.noTransactions.body")}),t&&l.jsxs(T,{size:"small",sx:qt,children:[n("views.TRANSACTIONS.status.noTransactions.passport.body")," ",l.jsx(m,{size:"small",rc:l.jsx("a",{target:"_blank",href:i,rel:"noreferrer"}),children:n("views.TRANSACTIONS.status.noTransactions.passport.link")})]})]})]})}function Xt({onBackButtonClick:e}){const{eventTargetState:{eventTarget:t}}=o.useContext(G),{cryptoFiatDispatch:s}=o.useContext(Pe),{bridgeDispatch:a,bridgeState:{checkout:n,from:c}}=o.useContext(mt),{page:d}=v(),{t:u}=r(),{track:x}=v(),[p,E]=o.useState(!0),[h,T]=o.useState(void 0),[w,b]=o.useState([]),[m,f]=o.useState(!1),I=L(c?.web3Provider),A=o.useCallback((async()=>{if(!n)return{};const e=F(n.config);try{return((await n.getTokenAllowList({type:V.BRIDGE,chainId:e})).tokens??[]).reduce(((e,t)=>(e[t.address.toLowerCase()]=t,e)),{})}catch(e){return console.error(e),[]}}),[n]),y=o.useCallback((async()=>{if(!c?.web3Provider)return{};if(!c?.walletAddress)return{};const e=K(n.config);try{return(await n.getAllBalances({provider:c?.web3Provider,walletAddress:c?.walletAddress,chainId:e})).balances.reduce(((e,t)=>(e[t.token.address.toLowerCase()]=t.token,e)),{})}catch(e){return console.error(e),[]}}),[n,c]),S=o.useCallback((async e=>{x({userJourney:k.BRIDGE,screen:"EmptyStateNotConnected",control:"WalletProvider",controlType:"Select",extras:{walletProviderName:e}});try{const t=await U(n,e,!0),s=await t.getNetwork(),o=await(t?.getSigner().getAddress())??"";b([]),a({payload:{type:bt.SET_WALLETS_AND_NETWORKS,from:{web3Provider:t,walletAddress:o.toLowerCase(),network:s.chainId},to:null}})}catch(e){console.error(e)}finally{f(!1)}}),[n,c]),_=async e=>{const t=gt(F(n.config)),a=gt(K(n.config)),[o,r]=await Promise.all([A(),y()]),i={};Object.entries(e).forEach((([s,n])=>{(e[s]===t&&!o[s]||e[s]===a&&!r[s])&&(i[s]=n)}));const l=new Z(n.config.networkMap.get(F(n.config))?.rpcUrls[0]),c=new Z(n.config.networkMap.get(K(n.config))?.rpcUrls[0]),d=[],u=[];Object.entries(i).forEach((([e,s])=>{s===t?d.push(n.getTokenInfo({provider:l,tokenAddress:e})):u.push(n.getTokenInfo({provider:c,tokenAddress:e}))}));const x=await Promise.allSettled(d),p=await Promise.allSettled(u);x.filter((e=>"fulfilled"===e.status)).forEach((e=>{const t=e;o[t.value.address.toLowerCase()]=t.value})),p.filter((e=>"fulfilled"===e.status)).forEach((e=>{const t=e;r[t.value.address.toLowerCase()]=t.value}));const E=[];return Object.values(o).forEach((e=>E.push(e.symbol.toLowerCase()))),Object.values(r).forEach((e=>E.push(e.symbol.toLowerCase()))),s({payload:{type:We.SET_TOKEN_SYMBOLS,tokenSymbols:E}}),{[t]:o,[a]:r}},C=o.useCallback((async(e,t)=>new xt({env:e}).getTransactions({txType:pt.BRIDGE,fromAddress:t})),[]),R=o.useCallback((async()=>{if(!c?.walletAddress)return;const e=await C(n.config.environment,c?.walletAddress),t={};return e.result.forEach((e=>{t[e.details.from_token_address]=e.details.from_chain})),{tokens:await _(t),transactions:e.result}}),[c,C]),j=o.useMemo((()=>{const e=[i.METAMASK];return n.passport&&e.push(i.PASSPORT),e}),[n]);return o.useEffect((()=>{(async()=>{E(!0);const e=await Fe(R,J);if(!e)return void E(!1);const t=e.transactions.filter((t=>{const s=e.tokens[t.details.from_chain];if(!s)return!1;return!!s[t.details.from_token_address.toLowerCase()]}));T(e.tokens),b(t),E(!1)})()}),[c,n]),o.useEffect((()=>{d({userJourney:k.BRIDGE,screen:"Transactions"})}),[]),l.jsx(z,{testId:"bridge-view",header:l.jsx(H,{showBack:!0,onBackButtonClick:()=>{c&&(a({payload:{type:bt.SET_WALLETS_AND_NETWORKS,from:{web3Provider:c?.web3Provider,walletAddress:c?.walletAddress,network:c?.network},to:null}}),a({payload:{type:bt.SET_TOKEN_AND_AMOUNT,token:null,amount:""}})),e()},title:u("views.TRANSACTIONS.layoutHeading"),onCloseButtonClick:()=>vt(t)}),footer:l.jsx($,{}),children:l.jsxs(g,{sx:kt,children:[l.jsxs(g,{sx:Ct,children:[!c?.web3Provider&&l.jsx(Nt,{openWalletDrawer:()=>f(!0)}),c?.web3Provider&&p&&l.jsx(_t,{}),c?.web3Provider&&!p&&w.length>0&&h&&l.jsx(Ht,{checkout:n,transactions:w,knownTokenMap:h,isPassport:I,changeWallet:()=>f(!0)}),c?.web3Provider&&!p&&0===w.length&&l.jsx(Qt,{checkout:n,isPassport:I,changeWallet:()=>f(!0)})]}),c?.web3Provider&&w.length>0&&l.jsx(g,{sx:Rt,children:l.jsx(Mt,{checkout:n,isPassport:I})}),l.jsx(yt,{testId:"select-wallet-drawer",drawerText:{heading:u("views.TRANSACTIONS.walletSelection.heading")},showWalletSelectorTarget:!1,walletOptions:j,showDrawer:m,setShowDrawer:e=>{f(e)},onWalletItemClick:S})]})})}function Yt({transactionResponse:e}){const{t:t}=r(),{viewDispatch:s}=o.useContext(R),{page:a}=v();return o.useEffect((()=>{a({userJourney:k.BRIDGE,screen:"ClaimWithdrawalInProgress"})}),[]),o.useEffect((()=>{e&&(async()=>{try{const t=await e.wait();if(1===t.status)return void s({payload:{type:j.UPDATE_VIEW,view:{type:Be.CLAIM_WITHDRAWAL_SUCCESS,transactionHash:t.transactionHash}}});s({payload:{type:j.UPDATE_VIEW,view:{type:Be.CLAIM_WITHDRAWAL_FAILURE,transactionHash:t.transactionHash,reason:"Transaction failed"}}})}catch(e){console.error(e),s({payload:{type:j.UPDATE_VIEW,view:{type:Be.CLAIM_WITHDRAWAL_FAILURE,transactionHash:"",reason:"Transaction failed"}}})}})()}),[e]),l.jsx(q,{loadingText:t("views.CLAIM_WITHDRAWAL.IN_PROGRESS.loading.text"),showFooterLogo:!0})}function es(e){return e?e.substring(0,6).concat("...").concat(e.substring(e.length-4)):""}const ts={height:"100%",display:"flex",flexDirection:"column",paddingX:"base.spacing.x4"},ss={paddingTop:"base.spacing.x10",paddingBottom:"base.spacing.x4"},as={display:"flex",flexDirection:"column",paddingY:"base.spacing.x6"},ns={[s.IMTBL_ZKEVM_DEVNET]:"base.color.text.link.primary",[s.IMTBL_ZKEVM_TESTNET]:"base.color.text.link.primary",[s.IMTBL_ZKEVM_MAINNET]:"base.color.text.link.primary",[s.ETHEREUM]:"base.color.accent.5",[s.SEPOLIA]:"base.color.accent.5"},os=e=>({backgroundColor:ns[e],"& svg":{fill:"base.color.brand.2"}}),rs={[s.IMTBL_ZKEVM_DEVNET]:"Immutable",[s.IMTBL_ZKEVM_MAINNET]:"Immutable",[s.IMTBL_ZKEVM_TESTNET]:"Immutable",[s.ETHEREUM]:"EthToken",[s.SEPOLIA]:"EthToken"};function is({testId:e,chainId:t,chainName:s,onNetworkClick:a}){return l.jsxs(c,{testId:`${e}-network-list-${t}`,size:"medium",emphasized:!0,onClick:async()=>{await a(t)},sx:{marginBottom:"base.spacing.x1"},children:[l.jsx(c.FramedIcon,{icon:rs[t],circularFrame:!0,sx:os(t)}),l.jsx(c.Label,{size:"medium",children:s})]})}const ls={[s.IMTBL_ZKEVM_DEVNET]:"base.color.text.link.primary",[s.IMTBL_ZKEVM_TESTNET]:"base.color.text.link.primary",[s.IMTBL_ZKEVM_MAINNET]:"base.color.text.link.primary",[s.ETHEREUM]:"base.color.accent.5",[s.SEPOLIA]:"base.color.accent.5"},cs={width:"100%",backgroundColor:"base.color.translucent.emphasis.100",borderRadius:"base.borderRadius.x4",paddingX:"base.spacing.x3",paddingY:"base.spacing.x5",display:"flex",flexDirection:"row",gap:"base.spacing.x4",alignItems:"center","&:hover":{cursor:"pointer",backgroundColor:"base.color.translucent.emphasis.200"}},ds=e=>({width:"base.icon.size.500",padding:e===i.PASSPORT?"base.spacing.x1":"",backgroundColor:"base.color.translucent.standard.200",borderRadius:"base.borderRadius.x2"}),us={color:"base.color.text.body.secondary"},xs={paddingY:"base.spacing.x6",borderRadius:"base.borderRadius.x18"},ps=e=>({fill:"base.color.brand.2",width:"base.icon.size.300",backgroundColor:ls[e],borderRadius:"100%",padding:"base.spacing.x1"}),Es={[s.IMTBL_ZKEVM_DEVNET]:"Immutable",[s.IMTBL_ZKEVM_MAINNET]:"Immutable",[s.IMTBL_ZKEVM_TESTNET]:"Immutable",[s.ETHEREUM]:"EthToken",[s.SEPOLIA]:"EthToken"},hs={[i.PASSPORT]:"PassportSymbolOutlined",[i.METAMASK]:"MetaMaskSymbol"};function gs({testId:e,walletName:t,walletAddress:s,chainId:a,disableNetworkButton:n=!1,onWalletClick:o,onNetworkClick:r}){const c=ht(a),d=t===i.METAMASK?"Metamask":"Passport";return l.jsxs(g,{testId:`${e}-${t}-${a}-button-wrapper`,sx:cs,onClick:o,children:[l.jsx(D,{logo:hs[t],sx:ds(t)}),l.jsxs(g,{sx:{display:"flex",flexDirection:"column",flex:1},children:[l.jsx(Q,{size:"xSmall",children:d}),l.jsx(T,{size:"xSmall",sx:us,children:s})]}),l.jsxs(w,{testId:`${e}-network-${a}-button`,size:"small",disabled:n,onClick:e=>{e.stopPropagation(),r(e)},variant:"tertiary",sx:xs,children:[l.jsx(w.Icon,{icon:Es[a],sx:ps(a)}),c]})]})}const Ts="wallet-network-selector";function ws(){const{t:e}=r(),{bridgeState:{checkout:t,from:s,to:a},bridgeDispatch:n}=o.useContext(mt),{viewDispatch:c}=o.useContext(R),{track:u}=v(),x=F(t.config),p=ht(x),E=K(t.config),h=ht(E),T=o.useRef(),[b,m]=o.useState(!1),[f,I]=o.useState(!1),[A,y]=o.useState(),[S,_]=o.useState(),[C,D]=o.useState(""),[M,B]=o.useState(!1),[P,W]=o.useState(),[O,G]=o.useState(),[V,z]=o.useState(""),H=A&&S,$=P&&O,Z=o.useMemo((()=>A?L(A)?i.PASSPORT:i.METAMASK:null),[A]),J=o.useMemo((()=>A?L(P)?i.PASSPORT:i.METAMASK:null),[P]),q=o.useMemo((()=>{const e=[i.METAMASK];return t.passport&&e.push(i.PASSPORT),e}),[t]),X=o.useMemo((()=>{const e=[i.METAMASK];return t.passport&&S===x&&Z===i.METAMASK&&e.push(i.PASSPORT),e}),[t,S,Z]);o.useEffect((()=>{s&&a&&(C!==s?.walletAddress&&u({userJourney:k.BRIDGE,screen:"WalletAndNetwork",control:"FromWallet",controlType:"Select",extras:{walletAddress:s?.walletAddress}}),S!==s?.network&&u({userJourney:k.BRIDGE,screen:"WalletAndNetwork",control:"FromNetwork",controlType:"Select",extras:{chainId:s?.network}}),V!==a?.walletAddress&&u({userJourney:k.BRIDGE,screen:"WalletAndNetwork",control:"ToWallet",controlType:"Select",extras:{walletAddress:a?.walletAddress}}),O!==a?.network&&u({userJourney:k.BRIDGE,screen:"WalletAndNetwork",control:"ToNetwork",controlType:"Select",extras:{chainId:a?.network}}),y(s.web3Provider),D(s.walletAddress.toLowerCase()),_(s.network),W(a.web3Provider),z(a.walletAddress.toLowerCase()),G(a.network),n({payload:{type:bt.SET_WALLETS_AND_NETWORKS,from:null,to:null}}))}),[s,a]);const Y=o.useCallback((async e=>{let s;try{return s=await U(t,e),e===i.PASSPORT&&(T.current=s),s}catch(e){throw console.error(e),e}}),[t]);function ee(){W(null),G(null)}const te=o.useCallback((async e=>{let t;if(ee(),e===i.PASSPORT&&T.current&&(t=T.current),!t)try{t=await Y(e)}catch(e){return}y(t);const s=await t.getSigner().getAddress();if(D(s.toLowerCase()),L(t))return _(E),void m(!1);_(null),m(!1),setTimeout((()=>I(!0)),500)}),[Z,T.current]),se=o.useCallback((async e=>{if(!A)return;if(ee(),L(A))return I(!1),void _(e);const s=await(A?.getNetwork());if(s?.chainId===e)return I(!1),void _(e);let a;try{a=await t.switchNetwork({provider:A,chainId:e}),y(a.provider),I(!1),_(a.network.chainId)}catch(e){console.error(e)}}),[t,A,Z,S]),ae=o.useCallback((async e=>{if(Z===e){W(A);const e=await A.getSigner().getAddress();z(e.toLowerCase())}else{let t;if(e===i.PASSPORT&&T.current&&(t=T.current),!t)try{t=await Y(e)}catch(e){return}W(t);const s=await t.getSigner().getAddress();z(s.toLowerCase())}G(S===x?E:x),B(!1)}),[Z,S,A,T.current]),ne=o.useCallback((()=>{A&&S&&P&&O&&(n({payload:{type:bt.SET_TOKEN_BALANCES,tokenBalances:[]}}),n({payload:{type:bt.SET_ALLOWED_TOKENS,allowedTokens:[]}}),n({payload:{type:bt.SET_WALLETS_AND_NETWORKS,from:{web3Provider:A,walletAddress:C.toLowerCase(),network:S},to:{web3Provider:P,walletAddress:V.toLowerCase(),network:O}}}),u({userJourney:k.BRIDGE,screen:"WalletAndNetwork",control:"Next",controlType:"Button",extras:{fromWalletAddress:C,fromNetwork:S,fromWallet:{address:C,isPassportWallet:L(A),isMetaMask:N(A)},toWalletAddress:V,toNetwork:O,toWallet:{address:V,isPassportWallet:L(P),isMetaMask:N(P)}}}),c({payload:{type:j.UPDATE_VIEW,view:{type:Be.BRIDGE_FORM}}}))}),[A,S,C,P,O,V]);return l.jsxs(g,{testId:Ts,sx:ts,children:[l.jsx(Q,{testId:`${Ts}-heading`,size:"small",weight:"regular",sx:ss,children:e("views.WALLET_NETWORK_SELECTION.heading")}),l.jsx(Q,{size:"xSmall",sx:{paddingBottom:"base.spacing.x2"},children:e("views.WALLET_NETWORK_SELECTION.fromFormInput.heading")}),l.jsx(yt,{testId:`${Ts}-from`,drawerText:{heading:e("views.WALLET_NETWORK_SELECTION.fromFormInput.walletSelectorHeading"),defaultText:e("views.WALLET_NETWORK_SELECTION.fromFormInput.selectDefaultText")},showWalletSelectorTarget:!H,walletOptions:q,showDrawer:b,setShowDrawer:m,onWalletItemClick:te}),H&&Z&&l.jsxs(g,{sx:{display:"flex",flexDirection:"column",gap:"base.spacing.x10"},children:[l.jsx(gs,{testId:Ts,walletName:Z,walletAddress:es(C),chainId:S,onWalletClick:()=>{m(!0)},onNetworkClick:()=>I(!0)}),l.jsxs(g,{children:[l.jsx(Q,{size:"xSmall",sx:{paddingBottom:"base.spacing.x2"},children:e("views.WALLET_NETWORK_SELECTION.toFormInput.heading")}),l.jsx(yt,{testId:`${Ts}-to`,drawerText:{heading:e("views.WALLET_NETWORK_SELECTION.toFormInput.walletSelectorHeading"),defaultText:e("views.WALLET_NETWORK_SELECTION.toFormInput.selectDefaultText")},showWalletSelectorTarget:!$,walletOptions:X,showDrawer:M,setShowDrawer:B,onWalletItemClick:ae})]})]}),l.jsx(d,{headerBarTitle:e("views.WALLET_NETWORK_SELECTION.fromFormInput.networkSelectorHeading"),size:"full",onCloseDrawer:()=>{I(!1)},visible:f,children:l.jsxs(d.Content,{sx:{paddingX:"base.spacing.x4"},children:[l.jsx(is,{testId:Ts,chainName:h,onNetworkClick:se,chainId:E},h),Z===i.METAMASK&&l.jsx(is,{testId:Ts,chainName:p,onNetworkClick:se,chainId:x},p)]})}),$&&J&&l.jsxs(g,{sx:{flex:1,display:"flex",flexDirection:"column",justifyContent:"space-between"},children:[l.jsx(gs,{testId:Ts,walletName:J,walletAddress:es(V),chainId:O,disableNetworkButton:!0,onWalletClick:()=>{B(!0)},onNetworkClick:()=>{}}),l.jsx(g,{sx:as,children:l.jsx(w,{testId:`${Ts}-submit-button`,size:"large",onClick:ne,children:e("views.WALLET_NETWORK_SELECTION.submitButton.text")})})]})]})}function bs(){const{t:e}=r(),{viewDispatch:t}=o.useContext(R),{eventTargetState:{eventTarget:s}}=o.useContext(G),{page:a}=v();return o.useEffect((()=>{a({userJourney:k.BRIDGE,screen:"WalletNetworkSelection"})}),[]),l.jsx(z,{testId:"bridge-view",header:l.jsx(H,{title:e("views.WALLET_NETWORK_SELECTION.layoutHeading"),onCloseButtonClick:()=>vt(s),rightActions:l.jsx(X,{icon:"Minting",sx:Y(),onClick:()=>{t({payload:{type:j.UPDATE_VIEW,view:{type:Be.TRANSACTIONS}}})},testId:"move-transactions-button"})}),footer:l.jsx($,{}),children:l.jsx(ws,{})})}function ms(e,t){return e&&0!==parseFloat(e)?t&&Number(e)>Number(t)?"views.BRIDGE_FORM.validation.insufficientBalance":"":"views.BRIDGE_FORM.validation.noAmountInputted"}const fs={height:"100%",display:"flex",flexDirection:"column",justifyContent:"space-between",paddingTop:"base.spacing.x10"},Is={paddingTop:"base.spacing.x4",display:"flex",gap:"base.spacing.x1"},As={display:"flex",flexDirection:"column",paddingY:"base.spacing.x6",paddingX:"base.spacing.x4"},ys={display:"flex",flexDirection:"column",alignItems:"center",paddingTop:"base.spacing.x6",paddingBottom:"base.spacing.x1",height:"100%"},Ss={color:"base.color.text.body.secondary",fontFamily:"base.font.family.heading.secondary",textAlign:"center",marginTop:"15px"},vs={display:"flex",flexDirection:"column",justifyContent:"center",gap:"base.spacing.x2",height:"100%",width:"100%"},_s={width:"100%",height:"base.spacing.x16"},ks={display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",paddingTop:"base.spacing.x6"};function Cs({environment:e,onCloseDrawer:t,visible:s,showHeaderBar:a,walletAddress:n,showAdjustAmount:i,tokenSymbol:c,onAddCoinsClick:u}){const{t:x}=r(),[p,E]=o.useState(!1),h=ee(e),b=te(e),m=c===se?`${x("drawers.notEnoughGas.content.eth.heading")}`:`${x("drawers.notEnoughGas.content.imx.heading")}`,f=c===se?`${x("drawers.notEnoughGas.content.eth.body")}`:`${x("drawers.notEnoughGas.content.imx.body")}`,I=o.useCallback((()=>{n&&""!==n&&navigator.clipboard.writeText(n),E(!0),setTimeout((()=>{E(!1)}),3e3)}),[n]);return l.jsx(d,{headerBarTitle:void 0,size:"full",onCloseDrawer:t,visible:s,showHeaderBar:a,children:l.jsx(d.Content,{children:l.jsxs(g,{testId:"not-enough-gas-bottom-sheet",sx:ys,children:[l.jsx(ae,{imageUrl:c===se?h:b,sx:{w:"base.icon.size.600",h:"base.icon.size.600"}}),l.jsx(Q,{size:"small",sx:Ss,testId:"not-enough-gas-heading",children:m}),l.jsx(T,{sx:Ss,children:f}),l.jsxs(g,{sx:vs,children:[i&&l.jsx(w,{testId:"not-enough-gas-adjust-amount-button",sx:_s,variant:"tertiary",onClick:t,children:x("drawers.notEnoughGas.buttons.adjustAmount")}),c===se?l.jsxs(w,{testId:"not-enough-gas-copy-address-button",sx:_s,variant:"tertiary",onClick:I,children:[x("drawers.notEnoughGas.buttons.copyAddress"),l.jsx(w.Icon,{icon:p?"Tick":"CopyText"})]}):l.jsx(w,{testId:"not-enough-gas-add-imx-button",sx:_s,variant:"tertiary",onClick:u,children:x("drawers.notEnoughGas.buttons.addMoreImx")}),l.jsx(w,{sx:_s,variant:"tertiary",onClick:t,testId:"not-enough-gas-cancel-button",children:x("drawers.notEnoughGas.buttons.cancel")})]}),l.jsx(g,{sx:ks,children:l.jsx(D,{testId:"footer-logo-image",logo:"ImmutableHorizontalLockup",sx:{width:"base.spacing.x25"}})})]})})})}function Rs({sx:e}){return l.jsxs(g,{sx:{...e,paddingTop:"0",marginTop:"base.spacing.x4"},rc:l.jsx("div",{}),children:[l.jsx(g,{sx:{display:"flex",backgroundColor:"#F3F3F30A",borderRadius:"8px"},children:l.jsx(g,{sx:{minw:"170px",height:"64px",WebkitMaskPosition:"left center",WebkitMaskRepeat:"no-repeat",WebkitMaskSize:"contain",WebkitMaskImage:'url(\'data:image/svg+xml;utf8, <svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="none"><path d="M154.75 39q1.65 0 2.85-1.15 1.15-1.15 1.15-2.85v-4q0-1.65-1.15-2.8-1.2-1.2-2.85-1.2h-93.6q-2.3 0-3.85 1.2-1.55 1.15-1.55 2.8v4q0 1.7 1.55 2.85Q58.85 39 61.15 39h93.6m-111.7-3.35q.2-1.3.2-2.65 0-1.35-.2-2.65-.75-4.9-4.5-8.65-4.7-4.7-11.3-4.7-6.65 0-11.3 4.7-4.7 4.7-4.7 11.3 0 6.65 4.7 11.3Q20.6 49 27.25 49q6.6 0 11.3-4.7 3.75-3.7 4.5-8.65Z" id="a"/></svg>\')'},rc:l.jsx("span",{}),children:l.jsx(h,{rc:l.jsx("span",{})})})}),l.jsx(g,{sx:{display:"flex",width:"100%",backgroundColor:"#F3F3F30A",borderRadius:"8px"},children:l.jsx(g,{sx:{width:"100%",height:"64px",WebkitMaskPosition:"right center",WebkitMaskRepeat:"no-repeat",WebkitMaskSize:"contain",WebkitMaskImage:'url(\'data:image/svg+xml;utf8, <svg xmlns="http://www.w3.org/2000/svg" width="196" height="96"><path d="M182.85 55.2Q181.65 54 180 54h-56q-1.7 0-2.85 1.2Q120 56.35 120 58v4q0 1.7 1.15 2.85Q122.3 66 124 66h56q1.65 0 2.85-1.15Q184 63.7 184 62v-4q0-1.65-1.15-2.8m0-22Q181.65 32 180 32H68q-1.7 0-2.85 1.2Q64 34.35 64 36v8q0 1.7 1.15 2.85Q66.3 48 68 48h112q1.65 0 2.85-1.15Q184 45.7 184 44v-8q0-1.65-1.15-2.8Z" id="a"/></svg>\')'},rc:l.jsx("span",{}),children:l.jsx(h,{rc:l.jsx("span",{})})})})]})}function js(e){const{t:t}=r(),{bridgeDispatch:s,bridgeState:{tokenBalances:a,allowedTokens:n,checkout:i,from:c,to:d,amount:u,token:x}}=o.useContext(mt),{cryptoFiatState:p,cryptoFiatDispatch:E}=o.useContext(Pe),{viewDispatch:h}=o.useContext(R),{testId:T,defaultAmount:b,defaultTokenAddress:m,isTokenBalancesLoading:f}=e,{track:I}=v(),[A,y]=o.useState(b||""),[S,_]=o.useState(""),[C,N]=o.useState(),[L,D]=o.useState(""),[M,P]=o.useState(""),[W,G]=o.useState(!1),V=o.useRef(!1),K=C?`${t("views.BRIDGE_FORM.content.availableBalancePrefix")} ${ne(C?.formattedBalance)}`:"",[U,z]=o.useState([]),[H,$]=o.useState(!1),[Z,J]=o.useState(""),[q,X]=o.useState(!1),Y=o.useCallback(((e,t)=>t?`${e.toLowerCase()}-${t.toLowerCase()}`:e.toLowerCase()),[]);o.useEffect((()=>{if(0===a.length)return;const e=a.filter((e=>e.balance.gt(0))).map((e=>({id:Y(e.token.symbol,e.token.address),name:e.token.name,symbol:e.token.symbol,icon:e.token.icon,balance:{formattedFiatAmount:0===p.conversions.size?oe(""):O(e.formattedBalance,e.token.symbol,p.conversions),formattedAmount:ne(e.formattedBalance)}})));z(e),V.current||(V.current=!0,m&&N(a.find((e=>B(e.token.address)&&m?.toLocaleUpperCase()===re||e.token.address?.toLowerCase()===m?.toLowerCase()))))}),[a,p.conversions,m,V.current,Y,oe]),o.useEffect((()=>{if(u&&x){y(u);for(let e=0;e<a.length;e++){const t=a[e];if(t.token.address===x.address){N(t);break}}s({payload:{type:bt.SET_TOKEN_AND_AMOUNT,token:null,amount:""}})}}),[u,x,a]);const ee=o.useMemo((()=>C&&C.token?Y(C.token.symbol,C.token.address):void 0),[C,a,p.conversions,Y]),te=o.useMemo((()=>!a.find((e=>B(e.token.address)))),[a,C,A]),ae=e=>{let t=e;if("."===t&&(t="0."),y(t),S){const e=ms(t,C?.formattedBalance);_(e)}var s;C&&(P(O(t,C.token.symbol,p.conversions)),s=!0,Number.isNaN(parseFloat(A))||parseFloat(A)<=0||!C||!c||!c.walletAddress||!d||!d.walletAddress||s&&W||!i||G(!0))};o.useEffect((()=>{E({payload:{type:We.SET_TOKEN_SYMBOLS,tokenSymbols:n.map((e=>e.symbol))}})}),[E,n]),o.useEffect((()=>{A&&C&&P(O(A,C.token.symbol,p.conversions))}),[A,C]),o.useEffect((()=>{(async()=>{if(!c?.web3Provider)return;const e=await c.web3Provider.getSigner().getAddress();J((t=>(""!==t&&t!==e&&N(void 0),e)))})()}),[c?.web3Provider,a]);const de=o.useCallback((()=>{const e=C?"":"views.BRIDGE_FORM.validation.noTokenSelected";const t=ms(A,C?.formattedBalance);return e&&D(e),t&&_(t),!e&&!t}),[C,A,D,_]),ue=o.useCallback((async()=>{de()&&i&&c?.web3Provider&&C&&(te?$(!0):(I({userJourney:k.BRIDGE,screen:"TokenAmount",control:"Review",controlType:"Button",extras:{tokenAddress:C.token.address,amount:A}}),s({payload:{type:bt.SET_TOKEN_AND_AMOUNT,token:C.token,amount:A}}),h({payload:{type:j.UPDATE_VIEW,view:{type:Be.BRIDGE_REVIEW}}})))}),[i,c?.web3Provider,de,te,C]);return l.jsxs(g,{testId:T,sx:fs,children:[l.jsxs(g,{sx:{paddingX:"base.spacing.x4"},children:[l.jsx(Q,{testId:`${T}-content-heading`,size:"small",weight:"regular",sx:{paddingBottom:"base.spacing.x4"},children:t("views.BRIDGE_FORM.content.title")}),(!m||!f)&&l.jsxs(g,{sx:Is,children:[l.jsx(Ue,{testId:"bridge-token",options:U,optionsLoading:f,coinSelectorHeading:t("views.BRIDGE_FORM.bridgeForm.from.selectorTitle"),selectedOption:ee,subtext:K,textAlign:"left",errorMessage:t(L),onSelectChange:e=>(e=>{const t=a.find((t=>e===Y(t.token.symbol,t.token.address)));t&&(N(t),D(""))})(e)}),l.jsx(ze,{testId:"bridge-amount",type:"number",value:A,placeholder:t("views.BRIDGE_FORM.bridgeForm.from.inputPlaceholder"),subtext:`${t("views.BRIDGE_FORM.content.fiatPricePrefix")} $${oe(M,!0)}`,validator:ie,onTextInputChange:e=>ae(e),onTextInputEnter:ue,textAlign:"right",errorMessage:t(S)})]}),m&&f&&l.jsx(Rs,{sx:Is})]}),l.jsxs(g,{sx:As,children:[l.jsx(w,{testId:`${T}-button`,variant:"primary",onClick:ue,size:"large",children:t("views.BRIDGE_FORM.bridgeForm.buttonText")}),l.jsx(He,{visible:q,showHeaderBar:!1,onCloseDrawer:()=>X(!1),onRetry:async()=>{X(!1),await ue()}}),l.jsx(Cs,{environment:i.config.environment,visible:H,showHeaderBar:!1,onCloseDrawer:()=>$(!1),walletAddress:Z,showAdjustAmount:B(C?.token.address),tokenSymbol:c?.network===F(i?.config)?se:le,onAddCoinsClick:()=>{h({payload:{type:j.UPDATE_VIEW,view:{type:ce.TOP_UP_VIEW}}})}})]})]})}const Ns=1e4;function Ls({amount:e,tokenAddress:t}){const{t:s}=r(),{bridgeState:a,bridgeDispatch:n}=o.useContext(mt),{checkout:i,from:c}=a,{eventTargetState:{eventTarget:d}}=o.useContext(G),[u,x]=o.useState(!1),{page:p}=v();o.useEffect((()=>{(e||t)&&p({userJourney:k.BRIDGE,screen:"TokenAmount",extras:{amount:e,tokenAddress:t}})}),[]);const E=o.useCallback((async()=>{if(i&&c?.web3Provider)try{const e=await $e({checkout:i,provider:c.web3Provider,allowTokenListType:V.BRIDGE,retryPolicy:{retryIntervalMs:0,retries:0}});if(void 0===e)return;n({payload:{type:bt.SET_TOKEN_BALANCES,tokenBalances:e.allowedBalances}}),n({payload:{type:bt.SET_ALLOWED_TOKENS,allowedTokens:e.allowList.tokens}})}catch(e){console.debug(e)}}),[i,c?.web3Provider]);return Ve(E,Ns),o.useEffect((()=>{i&&c?.web3Provider&&(x(!0),E().finally((()=>x(!1))))}),[i,c?.web3Provider]),l.jsx(z,{testId:"bridge-view",header:l.jsx(H,{showBack:!0,title:s("views.BRIDGE_FORM.header.title"),onCloseButtonClick:()=>vt(d)}),footer:l.jsx($,{}),children:l.jsx(js,{testId:"bridge-form",defaultAmount:e,defaultTokenAddress:t,isTokenBalancesLoading:u})})}const Ds={borderBottomLeftRadius:"0px",borderBottomRightRadius:"0px",marginBottom:"2px"},Ms={borderTopLeftRadius:"0px",borderTopRightRadius:"0px",backgroundColor:"base.color.translucent.emphasis.100"},Bs={height:"100%",display:"flex",flexDirection:"column",paddingX:"base.spacing.x4"},Ps={paddingTop:"base.spacing.x10",paddingBottom:"base.spacing.x4"},Ws={display:"flex",flexDirection:"column",alignItems:"center",paddingY:"base.spacing.x1"},Os={width:"base.icon.size.300",transform:"rotate(270deg)"},Gs={width:"base.icon.size.400"},Fs=(e,t,s)=>{const a=[];if(!e?.fees||!e.token)return a;let n=de.from(0);if(e.fees.bridgeFee&&(n=n.add(e.fees.bridgeFee)),e.fees.imtblFee&&(n=n.add(e.fees.imtblFee)),n.gt(0)&&a.push({label:s("drawers.feesBreakdown.fees.serviceFee.label"),fiatAmount:`~ ${s("drawers.feesBreakdown.fees.fiatPricePrefix")}${O(ue(n,e.token.decimals),e.token.symbol,t.conversions)}`,amount:ne(ue(n,e.token.decimals))}),e.fees.sourceChainGas?.gt(0)){const n=ue(e.fees.sourceChainGas,e.token.decimals);a.push({label:s("drawers.feesBreakdown.fees.gasFeeMove.label"),fiatAmount:`~ ${s("drawers.feesBreakdown.fees.fiatPricePrefix")}${O(n,e.token.symbol,t.conversions)}`,amount:`${ne(n)}`,prefix:"~ "})}if(e.fees.approvalFee?.gt(0)){const n=ue(e.fees.approvalFee,e.token.decimals);a.push({label:s("drawers.feesBreakdown.fees.gasFeeApproval.label"),fiatAmount:`~ ${s("drawers.feesBreakdown.fees.fiatPricePrefix")}${O(n,e.token.symbol,t.conversions)}`,amount:`${ne(n)}`,prefix:"~ "})}return a},Vs={[s.IMTBL_ZKEVM_DEVNET]:"Immutable",[s.IMTBL_ZKEVM_MAINNET]:"Immutable",[s.IMTBL_ZKEVM_TESTNET]:"Immutable",[s.ETHEREUM]:"EthToken",[s.SEPOLIA]:"EthToken"},Ks={[i.PASSPORT]:"PassportSymbolOutlined",[i.METAMASK]:"MetaMaskSymbol"},Us="bridge-review-summary";function zs(){const{t:e}=r(),{viewDispatch:t}=o.useContext(R),{bridgeState:{checkout:s,tokenBridge:a,from:n,to:d,token:u,amount:x}}=o.useContext(mt),{track:p}=v(),{cryptoFiatState:E}=o.useContext(Pe),[h,b]=o.useState(!1),[m,I]=o.useState(void 0),[A,y]=o.useState(""),[S,_]=o.useState(""),[C,D]=o.useState(void 0),[M,B]=o.useState(void 0),P=e=>L(e)?i.PASSPORT:i.METAMASK,W=o.useMemo((()=>u?.symbol?`${u?.symbol} ${x}`:`${x}`),[u,x]),G=o.useMemo((()=>x&&u?O(x,u.symbol,E.conversions):""),[u,x]),F=o.useMemo((()=>n?n.walletAddress:"-"),[n]),V=o.useMemo((()=>P(n?.web3Provider)),[n]),K=o.useMemo((()=>n&&n.network),[n]),U=o.useMemo((()=>d?d.walletAddress:"-"),[d]),z=o.useMemo((()=>P(d?.web3Provider)),[d]),H=o.useMemo((()=>d?.network),[d]),$=o.useCallback((async()=>{if(!(a&&x&&n&&d&&u))return;const[e,t]=await Promise.all([a.getUnsignedApproveBridgeTx({senderAddress:F,token:u.address??re.toUpperCase(),amount:xe(x,u.decimals),sourceChainId:n?.network.toString(),destinationChainId:d?.network.toString()}),a.getUnsignedBridgeTx({senderAddress:F,recipientAddress:U,token:u.address??re.toUpperCase(),amount:xe(x,u.decimals),sourceChainId:n?.network.toString(),destinationChainId:d?.network.toString(),gasMultiplier:1.1})]);D(e),B(t);const o=t.feeData,{totalFees:r,approvalFee:i}=o;let l=r;e.unsignedTx||(l=r.sub(i),o.approvalFee=de.from(0));const c={gasEstimateType:pe.BRIDGE_TO_L2,fees:{...o,totalFees:l},token:s.config.networkMap.get(n.network)?.nativeCurrency};I(c);const p=ue(c?.fees.totalFees||0,he);y(p),_(O(p,c?.token?.symbol||"",E.conversions))}),[s,a]);Ve((()=>$()),Ee);const Z=o.useCallback((()=>Fs(m,E,e)),[m]);o.useEffect((()=>{(async()=>{b(!0),await $(),b(!1)})()}),[]);const J=o.useCallback((async()=>{C&&M&&(p({userJourney:k.BRIDGE,screen:"Summary",control:"Submit",controlType:"Button",extras:{fromWalletAddress:F,fromNetwork:K,fromWallet:{address:F,isPassportWallet:L(n?.web3Provider),isMetaMask:N(n?.web3Provider)},toWalletAddress:U,toNetwork:H,toWallet:{address:U,isPassportWallet:L(d?.web3Provider),isMetaMask:N(d?.web3Provider)},amount:x,fiatAmount:G,tokenAddress:u?.address}}),t({payload:{type:j.UPDATE_VIEW,view:{type:Be.APPROVE_TRANSACTION,approveTransaction:C,transaction:M}}}))}),[t,C,M]);return l.jsxs(g,{testId:Us,sx:Bs,children:[l.jsx(Q,{testId:`${Us}-heading`,size:"small",weight:"regular",sx:Ps,children:e("views.BRIDGE_REVIEW.heading")}),l.jsxs(c,{testId:`${Us}-from-amount`,size:"small",emphasized:!0,sx:Ds,children:[l.jsx(c.Label,{size:"small",sx:{marginBottom:"base.spacing.x4",fontWeight:"bold"},children:e("views.BRIDGE_REVIEW.fromLabel.amountHeading")}),l.jsx(c.Caption,{}),l.jsx(c.PriceDisplay,{use:l.jsx(Q,{size:"xSmall",weight:"light"}),price:W??"-",fiatAmount:`${e("views.BRIDGE_REVIEW.fiatPricePrefix")}${G}`})]}),l.jsxs(c,{testId:`${Us}-from-address`,size:"xSmall",emphasized:!0,sx:Ms,children:[V&&l.jsx(c.FramedLogo,{logo:Ks[V],sx:{backgroundColor:"base.color.translucent.standard.200"}}),l.jsxs(c.Label,{children:[l.jsx("strong",{children:e("views.BRIDGE_REVIEW.fromLabel.heading")})," ",l.jsx(T,{size:"small",sx:{color:"base.color.text.body.secondary"},children:es(F??"")})]}),K&&l.jsx(c.IntentIcon,{icon:Vs[K],sx:ps(K)})]}),l.jsx(g,{sx:Ws,children:l.jsx(f,{icon:"ArrowBackward",sx:Os})}),l.jsxs(c,{testId:`${Us}-to-address`,size:"xSmall",emphasized:!0,sx:Ds,children:[z&&l.jsx(c.FramedLogo,{logo:Ks[z],sx:{backgroundColor:"base.color.translucent.standard.200"}}),l.jsxs(c.Label,{children:[l.jsx("strong",{children:e("views.BRIDGE_REVIEW.toLabel.heading")})," ",l.jsx(T,{size:"small",sx:{color:"base.color.text.body.secondary"},children:es(U??"")})]}),H&&l.jsx(c.IntentIcon,{icon:Vs[H],sx:ps(H)})]}),l.jsx(Ze,{gasFeeValue:A,gasFeeFiatValue:S,gasFeeToken:m?.token,fees:Z(),onFeesClick:()=>{p({userJourney:k.BRIDGE,screen:"MoveCoins",control:"ViewFees",controlType:"Button"})},sx:{borderTopRightRadius:"0",borderTopLeftRadius:"0"},loading:h}),l.jsx(g,{sx:{flex:1,display:"flex",flexDirection:"column",justifyContent:"flex-end",paddingY:"base.spacing.x6",width:"100%"},children:l.jsx(w,{size:"large",sx:{width:"100%"},onClick:J,disabled:h,testId:`${Us}__submit-button`,children:h?l.jsx(w.Icon,{icon:"Loading",sx:Gs}):e("views.BRIDGE_REVIEW.submitButton.buttonText")})})]})}function Hs(){const{t:e}=r(),{eventTargetState:{eventTarget:t}}=o.useContext(G),{page:s}=v();return o.useEffect((()=>{s({userJourney:k.BRIDGE,screen:"Review"})}),[]),l.jsx(z,{testId:"bridge-review",header:l.jsx(H,{showBack:!0,title:e("views.BRIDGE_REVIEW.layoutHeading"),onCloseButtonClick:()=>vt(t)}),footer:l.jsx($,{}),children:l.jsx(zs,{})})}function $s({environment:e}){const{RiveComponent:t}=ge.useRive({src:`${Te[e]}/v1/blob/img/rocket.riv`,autoplay:!0,layout:new ge.Layout({fit:ge.Fit.Cover}),stateMachines:"State Machine 1"});return l.jsx(g,{sx:{...we,background:"base.color.translucent.emphasis.100"},children:l.jsx(g,{sx:be,rc:l.jsx(t,{})})})}function Zs({transactionHash:e}){const{t:t}=r(),{eventTargetState:{eventTarget:s}}=o.useContext(G),{page:a}=v(),{cryptoFiatState:n}=o.useContext(Pe),{viewDispatch:i}=o.useContext(R),{bridgeState:{checkout:c,from:d,to:u,token:x,amount:p}}=o.useContext(mt);return o.useEffect((()=>{St(s,e);const t=O(p,x?.symbol??"",n.conversions);a({userJourney:k.BRIDGE,screen:"InProgress",extras:{fromWalletAddress:d?.walletAddress,toWalletAddress:u?.walletAddress,amount:p,fiatAmount:t,tokenAddress:x?.address}})}),[]),l.jsx(z,{testId:"move-in-progress-view",header:l.jsx(H,{transparent:!0,onCloseButtonClick:()=>vt(s),rightActions:l.jsxs(l.Fragment,{children:[l.jsx(X,{icon:"Minting",sx:Y(),onClick:()=>{i({payload:{type:j.UPDATE_VIEW,view:{type:Be.TRANSACTIONS}}})},testId:"settings-button"}),l.jsx(me,{isAnimated:!0,variant:"guidance",sx:{position:"absolute",right:"base.spacing.x14",top:"base.spacing.x1"}})]})}),footer:l.jsx($,{}),heroContent:l.jsx($s,{environment:c.config.environment}),floatHeader:!0,children:l.jsxs(fe,{heading:t("views.IN_PROGRESS.heading"),children:[t("views.IN_PROGRESS.body1"),l.jsx("br",{}),l.jsx("br",{}),t("views.IN_PROGRESS.body2")]})})}function Js({approveTransaction:e,transaction:t}){const{t:s}=r(),{bridgeState:a}=o.useContext(mt),{checkout:n,from:i}=a,{viewDispatch:c}=o.useContext(R),{eventTargetState:{eventTarget:d}}=o.useContext(G),{page:u}=v();o.useEffect((()=>{u({userJourney:k.BRIDGE,screen:"ApproveTransaction"})}),[]);const[x,p]=o.useState(!1),[E,h]=o.useState(!1),[T,w]=o.useState(!1),[b,m]=o.useState(!1),f=o.useCallback((()=>{c({payload:{type:j.UPDATE_VIEW,view:{type:ce.ERROR_VIEW,error:new Error("No checkout object or no provider object found")}}})}),[c]),I=o.useCallback((()=>{c({payload:{type:j.GO_BACK}})}),[c]),A=e=>{if(e.type!==Ie.UNPREDICTABLE_GAS_LIMIT){if(e.type===Ie.TRANSACTION_FAILED||e.type===Ie.INSUFFICIENT_FUNDS||e.receipt&&0===e.receipt.status){let t="Transaction failed";return e.type===Ie.INSUFFICIENT_FUNDS&&(t="Insufficient funds"),e.receipt&&0===e.receipt.status&&(t="Transaction failed to settle on chain"),void c({payload:{type:j.UPDATE_VIEW,view:{type:Be.BRIDGE_FAILURE,reason:t}}})}c({payload:{type:j.UPDATE_VIEW,view:{type:ce.ERROR_VIEW,error:e}}})}else c({payload:{type:j.UPDATE_VIEW,view:{type:Be.BRIDGE_FAILURE,reason:"Unpredictable gas limit"}}})},y=o.useCallback((async()=>{let s=!1;if(n&&i?.web3Provider&&t){if(!x){if(p(!0),e.unsignedTx)try{h(!0);const t=await n.sendTransaction({provider:i.web3Provider,transaction:e.unsignedTx});if(1!==(await t.transactionResponse.wait()).status)return void c({payload:{type:j.UPDATE_VIEW,view:{type:Be.BRIDGE_FAILURE,reason:"Transaction failed to settle on chain"}}})}catch(e){h(!1),e.type===Ie.USER_REJECTED_REQUEST_ERROR?(m(!0),s=!0):A(e)}finally{p(!1)}try{if(s)return;h(!0);const e=await n.sendTransaction({provider:i.web3Provider,transaction:t.unsignedTx});w(!0);const a=await e.transactionResponse.wait();if(0===a.status)return void c({payload:{type:j.UPDATE_VIEW,view:{type:Be.BRIDGE_FAILURE,reason:"Approval transaction failed to settle on chain"}}});c({payload:{type:j.UPDATE_VIEW,view:{type:Be.IN_PROGRESS,transactionHash:a.transactionHash}}})}catch(e){e.type===Ie.USER_REJECTED_REQUEST_ERROR?m(!0):A(e)}finally{w(!1),h(!1),p(!1)}}}else f()}),[n,i,f,c,t,e,x]);return l.jsxs(l.Fragment,{children:[T&&l.jsx(q,{loadingText:s("views.APPROVE_TRANSACTION.loadingView.text"),showFooterLogo:!0}),!T&&l.jsx(z,{header:l.jsx(H,{transparent:!0,showBack:!0,onCloseButtonClick:()=>vt(d),onBackButtonClick:I}),floatHeader:!0,heroContent:l.jsx(Je,{}),footer:l.jsxs(g,{sx:{width:"100%",flexDirection:"column"},children:[l.jsx(Ae,{loading:E,actionText:s("views.APPROVE_TRANSACTION."+(b?"footer.retryText":"footer.buttonText")),onActionClick:y}),l.jsx($,{})]}),children:l.jsx(fe,{heading:s("views.APPROVE_TRANSACTION.content.heading"),children:l.jsx(g,{children:s("views.APPROVE_TRANSACTION.content.body")})})})]})}const qs={display:"flex",flexDirection:"column",alignItems:"center",paddingTop:"base.spacing.x6",paddingBottom:"base.spacing.x1",height:"100%"},Qs={color:"base.color.text.body.secondary",fontFamily:"base.font.family.heading.secondary",textAlign:"center",marginTop:"15px"},Xs={display:"flex",flexDirection:"column",justifyContent:"center",gap:"base.spacing.x2",height:"100%",width:"100%"},Ys={width:"100%",height:"base.spacing.x16"};function ea({visible:e,onClose:t,onChangeAccount:s}){const{t:a}=r(),{bridgeState:{checkout:n}}=o.useContext(mt),i=ee(n.config.environment);return l.jsx(d,{headerBarTitle:void 0,size:"full",onCloseDrawer:t,visible:e,showHeaderBar:!1,children:l.jsx(d.Content,{children:l.jsxs(g,{testId:"not-enough-eth-drawer",sx:qs,children:[l.jsx(ae,{imageUrl:i,sx:{w:"base.icon.size.600",h:"base.icon.size.600"}}),l.jsx(Q,{size:"small",sx:Qs,testId:"not-enough-gas-heading",children:`${a("drawers.notEnoughEthWithdrawal.content.heading1")} ${se} ${a("drawers.notEnoughEthWithdrawal.content.heading2")}`}),l.jsx(T,{sx:Qs,children:`${a("drawers.notEnoughEthWithdrawal.content.body1")} ${se} ${a("drawers.notEnoughEthWithdrawal.content.body2")}`}),l.jsxs(g,{sx:Xs,children:[l.jsx(w,{testId:"not-enough-eth-drawer-retry-button",sx:Ys,variant:"tertiary",onClick:s,children:a("drawers.notEnoughEthWithdrawal.buttons.retry")}),l.jsx(w,{sx:Ys,variant:"tertiary",onClick:t,testId:"not-enough-eth-drawer-dismiss-button",children:a("drawers.notEnoughEthWithdrawal.buttons.dismiss")})]})]})})})}function ta({transaction:e}){const{t:t}=r(),{bridgeState:{checkout:s,tokenBridge:a,from:n}}=o.useContext(mt),{viewDispatch:c}=o.useContext(R),{eventTargetState:{eventTarget:d}}=o.useContext(G),{page:u}=v();o.useEffect((()=>{u({userJourney:k.BRIDGE,screen:"ClaimWithdrawal"})}),[]);const[x,p]=o.useState(!1),[E,h]=o.useState(!1),[T,b]=o.useState(!1),[m,f]=o.useState(),[I,A]=o.useState(!1),y=o.useCallback((()=>{c({payload:{type:j.GO_BACK}})}),[c]);o.useEffect((()=>{(async()=>{if(a&&e&&void 0!==e.details.current_status?.index){h(!0);try{const t=await(a?.getFlowRateWithdrawTx({recipient:e.details.to_address,index:e.details.current_status.index}));f(t)}catch(e){console.log(e)}finally{h(!1)}}})()}),[a,e]);const _=o.useCallback((async({forceChangeAccount:e})=>{if(!(s&&a&&n?.web3Provider&&m))return;if(!m.pendingWithdrawal.canWithdraw||!m.unsignedTx)return void console.log(`Unable to process withdrawal transaction as it is not ready yet. Delay timeout at ${m.pendingWithdrawal.timeoutEnd} `);let t=n?.web3Provider;const o=F(s.config);if(p(!0),L(n?.web3Provider)||e)try{const e=await s.createProvider({walletProviderName:i.METAMASK});t=(await s.connect({provider:e.provider,requestWalletPermissions:!0})).provider,A(!1)}catch(e){return console.log(e),b(!0),void p(!1)}let r,l=null;try{try{r=await t.estimateGas(m.unsignedTx)}catch(e){r=de.from(ye)}let e=null;try{e=await t.getFeeData()}catch(e){console.log(e)}let s=null;e&&e.lastBaseFeePerGas&&e.maxPriorityFeePerGas?s=e.lastBaseFeePerGas.add(e.maxPriorityFeePerGas):e&&e.gasPrice&&(s=e.gasPrice),s&&(l=r.mul(s))}catch(e){console.log(e)}try{const e=(await s.getAllBalances({provider:t,chainId:o})).balances.find((e=>B(e.token.address)));if(!e||e.balance.lt(l))return A(!0),void p(!1)}catch(e){console.log(e)}if((await t.getNetwork()).chainId!==o)try{t=(await s.switchNetwork({provider:t,chainId:o})).provider}catch(e){return b(!0),h(!1),void console.log(e)}try{const e=await s.sendTransaction({provider:t,transaction:m.unsignedTx});c({payload:{type:j.UPDATE_VIEW,view:{type:Be.CLAIM_WITHDRAWAL_IN_PROGRESS,transactionResponse:e.transactionResponse}}})}catch(e){console.log(e),b(!0),p(!1)}finally{p(!1)}}),[a,n,m]);return l.jsxs(z,{testId:"claim-withdrawal",header:l.jsx(H,{transparent:!0,showBack:!0,onCloseButtonClick:()=>vt(d),onBackButtonClick:y}),floatHeader:!0,heroContent:l.jsx(Je,{}),footer:l.jsxs(g,{sx:{width:"100%",display:"flex",flexDirection:"column"},children:[l.jsx(g,{sx:{pb:"base.spacing.x5",px:"base.spacing.x6",width:"100%",display:"flex",flexDirection:"column"},children:l.jsx(w,{testId:"claim-withdrawal-continue-button",size:"large",variant:"primary",disabled:E,onClick:()=>x||E?void 0:_({forceChangeAccount:!0}),children:E||x?l.jsx(w.Icon,{icon:"Loading",sx:{width:"base.icon.size.400"}}):t("views.CLAIM_WITHDRAWAL."+(T?"footer.retryText":"footer.buttonText"))})}),l.jsx($,{})]}),children:[l.jsxs(fe,{heading:`${t("views.CLAIM_WITHDRAWAL.content.heading")} ${ht(F(s.config))}`,children:[l.jsx(g,{sx:{display:"flex",flexWrap:"wrap",pb:"base.spacing.x1"},children:t("views.CLAIM_WITHDRAWAL.content.body")}),l.jsxs(g,{children:[t("views.CLAIM_WITHDRAWAL.content.body2"),l.jsx(S,{text:e.details.to_address.toLowerCase()??""})]})]}),l.jsx(ea,{visible:I,onClose:()=>A(!1),onChangeAccount:()=>_({forceChangeAccount:!0})})]})}function sa({checkout:e,web3Provider:t,config:s,amount:a,tokenAddress:n}){const{t:i}=r(),{environment:c,isOnRampEnabled:d,isSwapEnabled:u,isBridgeEnabled:E}=s,{eventTargetState:{eventTarget:h}}=o.useContext(G),{page:g}=v(),[T,w]=o.useReducer(Se,{...ve,view:{type:Be.WALLET_NETWORK_SELECTION},history:[{type:Be.WALLET_NETWORK_SELECTION}]}),[b,m]=o.useReducer(ft,{...wt,checkout:e,web3Provider:t??null,tokenBridge:(()=>{let t=Le;e.config.isDevelopment&&(t=De),e.config.isProduction&&(t=Me);const s=new Z(e.config.networkMap.get(F(e.config))?.rpcUrls[0]),a=new Z(e.config.networkMap.get(K(e.config))?.rpcUrls[0]),n=new _e({baseConfig:new ke({environment:e.config.environment}),bridgeInstance:t,rootProvider:s,childProvider:a});return new Ce(n)})()}),f=o.useMemo((()=>({viewState:T,viewDispatch:w})),[T,w]),I=o.useMemo((()=>({bridgeState:b,bridgeDispatch:m})),[b,m]),A=o.useCallback((()=>{m({payload:{type:bt.SET_WALLETS_AND_NETWORKS,from:null,to:null}}),m({payload:{type:bt.SET_TOKEN_AND_AMOUNT,amount:"",token:null}}),w({payload:{type:j.GO_BACK_TO,view:{type:Be.WALLET_NETWORK_SELECTION}}})}),[w]),y=o.useCallback((()=>{w({payload:{type:j.GO_BACK_TO,view:{type:Be.WALLET_NETWORK_SELECTION}}})}),[w]),S=o.useCallback((()=>{w({payload:{type:j.UPDATE_VIEW,view:{type:Be.TRANSACTIONS}}})}),[w]),_=o.useCallback((()=>{w({payload:{type:j.GO_BACK_TO,view:{type:Be.BRIDGE_REVIEW}}})}),[w]);return o.useEffect((()=>{(async()=>{m({payload:{type:bt.SET_PROVIDER,web3Provider:t??null}})})()}),[t]),l.jsx(R.Provider,{value:f,children:l.jsx(mt.Provider,{value:I,children:l.jsxs(Oe,{environment:c,children:[T.view.type===Be.WALLET_NETWORK_SELECTION&&l.jsx(bs,{}),T.view.type===Be.BRIDGE_FORM&&l.jsx(Ls,{amount:a,tokenAddress:n}),T.view.type===Be.BRIDGE_REVIEW&&l.jsx(Hs,{}),T.view.type===Be.IN_PROGRESS&&l.jsx(Zs,{transactionHash:T.view.transactionHash}),T.view.type===Be.BRIDGE_FAILURE&&l.jsx(Re,{testId:"bridge-fail",statusText:i("views.BRIDGE_FAILURE.bridgeFailureText.statusText"),actionText:i("views.BRIDGE_FAILURE.bridgeFailureText.actionText"),onActionClick:_,statusType:je.FAILURE,onRenderEvent:()=>{let e="";T.view.type===Be.BRIDGE_FAILURE&&(e=T.view.reason),g({userJourney:k.BRIDGE,screen:"Failed",extras:{reason:e}}),((e,t)=>{const s=new CustomEvent(x.IMTBL_BRIDGE_WIDGET_EVENT,{detail:{type:p.FAILURE,data:{reason:t,timestamp:(new Date).getTime()}}});console.log("bridge failed ",e,s),void 0!==e&&e.dispatchEvent(s)})(h,e)}}),T.view.type===Be.APPROVE_TRANSACTION&&l.jsx(Js,{approveTransaction:T.view.approveTransaction,transaction:T.view.transaction}),T.view.type===Be.TRANSACTIONS&&l.jsx(Xt,{onBackButtonClick:y}),T.view.type===Be.CLAIM_WITHDRAWAL&&l.jsx(ta,{transaction:T.view.transaction}),T.view.type===ce.ERROR_VIEW&&l.jsx(Ne,{actionText:i("views.ERROR_VIEW.actionText"),onActionClick:A,onCloseClick:()=>vt(h),errorEventAction:()=>{g({userJourney:k.BRIDGE,screen:"Error"})}}),T.view.type===ce.TOP_UP_VIEW&&l.jsx(Ge,{analytics:{userJourney:k.BRIDGE},widgetEvent:x.IMTBL_BRIDGE_WIDGET_EVENT,checkout:e,provider:t,showOnrampOption:d,showSwapOption:u,showBridgeOption:E,onCloseButtonClick:()=>vt(h)}),T.view.type===Be.CLAIM_WITHDRAWAL_IN_PROGRESS&&l.jsx(Yt,{transactionResponse:T.view.transactionResponse}),T.view.type===Be.CLAIM_WITHDRAWAL_SUCCESS&&l.jsx(Re,{statusText:i("views.CLAIM_WITHDRAWAL.IN_PROGRESS.success.text"),actionText:i("views.CLAIM_WITHDRAWAL.IN_PROGRESS.success.actionText"),onRenderEvent:()=>{g({userJourney:k.BRIDGE,screen:"ClaimWithdrawalSuccess"}),((e,t)=>{const s=new CustomEvent(x.IMTBL_BRIDGE_WIDGET_EVENT,{detail:{type:p.CLAIM_WITHDRAWAL_SUCCESS,data:{transactionHash:t}}});console.log("bridge claim withdrawal success event:",e,s),void 0!==e&&e.dispatchEvent(s)})(h,T.view.transactionHash)},onActionClick:S,statusType:je.SUCCESS,testId:"claim-withdrawal-success-view"}),T.view.type===Be.CLAIM_WITHDRAWAL_FAILURE&&l.jsx(Re,{statusText:i("views.CLAIM_WITHDRAWAL.IN_PROGRESS.failure.text"),actionText:i("views.CLAIM_WITHDRAWAL.IN_PROGRESS.failure.actionText"),onRenderEvent:()=>{let e="";T.view.type===Be.CLAIM_WITHDRAWAL_FAILURE&&(e=T.view.reason),g({userJourney:k.BRIDGE,screen:"ClaimWithdrawalFailure",extras:{reason:e}}),((e,t,s)=>{const a=new CustomEvent(x.IMTBL_BRIDGE_WIDGET_EVENT,{detail:{type:p.CLAIM_WITHDRAWAL_FAILURE,data:{transactionHash:t,reason:s,timestamp:(new Date).getTime()}}});console.log("bridge claim withdrawal failed event:",e,a),void 0!==e&&e.dispatchEvent(a)})(h,T.view.transactionHash,"Transaction failed")},onActionClick:S,statusType:je.FAILURE,onCloseClick:()=>vt(h),testId:"claim-withdrawal-fail-view"})]})})})}var aa=Object.freeze({__proto__:null,default:sa});export{sa as B,aa as a,ht as g};
@@ -1 +0,0 @@
1
- import{u as e,aC as t,aD as s,j as o,B as a,aE as n,aF as r,l as i,aG as d,r as c,ab as l,aH as p,V as u,C as m,a as x,K as w,U as f,d as T,A,S as y,aI as E,ar as S,aJ as v,t as g,aK as h,aL as I,y as b,N as C,w as k,n as P,X as R,aM as _,aN as F,aO as j,a6 as O,aP as W,aQ as D,aR as L,aS as N,E as V,c as U,H as B,aT as M,aU as G,L as $,o as H,e as z,aV as J,v as K,i as q,T as X,Q,p as Z,aW as Y,aX as ee,f as te,aY as se,h as oe,aZ as ae,a_ as ne,a5 as re,I as ie}from"./index-fe4244bf.js";import{S as de,C as ce,a as le,b as pe,T as ue}from"./TopUpView-d98e859c.js";import{S as me,T as xe,a as we,F as fe,W as Te,g as Ae}from"./balance-25b5b39e.js";import{u as ye}from"./retry-d76baab5.js";import{S as Ee}from"./SpendingCapHero-b72f3beb.js";function Se({theme:c,environment:l}){const{t:p}=e(),u=c===t.DARK?s(l,"/quickswapdark.webp"):s(l,"/quickswaplight.webp");return o.jsxs(a,{testId:"quickswap-footer-container",sx:n,children:[o.jsxs(a,{testId:"quickswap-logo",sx:r,children:[o.jsx(i,{size:"xSmall",sx:{paddingRight:"base.spacing.x1"},children:"By"}),o.jsx("img",{style:{height:"26px"},alt:"Quickswap logo",src:u})]}),o.jsx(i,{testId:"quickswap-footer-disclaimer-text",size:"xSmall",sx:d,children:p("footers.quickswapFooter.disclaimerText")})]})}const ve={exchange:null,walletProviderName:null,network:null,tokenBalances:[],supportedTopUps:null,allowedTokens:[]};var ge;!function(e){e.SET_EXCHANGE="SET_EXCHANGE",e.SET_WALLET_PROVIDER_NAME="SET_WALLET_PROVIDER_NAME",e.SET_NETWORK="SET_NETWORK",e.SET_SUPPORTED_TOP_UPS="SET_SUPPORTED_TOP_UPS",e.SET_TOKEN_BALANCES="SET_TOKEN_BALANCES",e.SET_ALLOWED_TOKENS="SET_ALLOWED_TOKENS"}(ge||(ge={}));const he=c.createContext({swapState:ve,swapDispatch:()=>{}});he.displayName="SwapContext";const Ie=(e,t)=>{switch(t.payload.type){case ge.SET_EXCHANGE:return{...e,exchange:t.payload.exchange};case ge.SET_WALLET_PROVIDER_NAME:return{...e,walletProviderName:t.payload.walletProviderName};case ge.SET_NETWORK:return{...e,network:t.payload.network};case ge.SET_SUPPORTED_TOP_UPS:return{...e,supportedTopUps:{isSwapEnabled:t.payload.supportedTopUps.isSwapEnabled??!0,isOnRampEnabled:t.payload.supportedTopUps.isOnRampEnabled??!0,isBridgeEnabled:t.payload.supportedTopUps.isBridgeEnabled??!0}};case ge.SET_TOKEN_BALANCES:return{...e,tokenBalances:t.payload.tokenBalances};case ge.SET_ALLOWED_TOKENS:return{...e,allowedTokens:t.payload.allowedTokens};default:return e}},be={fromAmountIn:async(e,t,s,o,a)=>{const n=await t.getSigner().getAddress();return e.getUnsignedSwapTxFromAmountIn(n,s.address,a.address,l.from(p(o,s.decimals)))},fromAmountOut:async(e,t,s,o,a)=>{const n=await t.getSigner().getAddress();return e.getUnsignedSwapTxFromAmountOut(n,a.address,s.address,l.from(p(o,s.decimals)))}},Ce={display:"flex",flexDirection:"row",justifyContent:"space-between",columnGap:"base.spacing.x1"},ke={flex:1},Pe={flex:2};function Re({testId:e,options:t,textInputValue:s,textInputPlaceholder:n,textInputValidator:r,textInputType:i,onTextInputChange:d,onTextInputBlur:c,onTextInputFocus:l,textInputTextAlign:p,textInputSubtext:u,textInputErrorMessage:m,selectTextAlign:x,selectSubtext:w,selectErrorMessage:f,textInputMaxButtonClick:T,onSelectChange:A,textInputDisabled:y,selectInputDisabled:E,selectedOption:S,coinSelectorHeading:v}){return o.jsxs(a,{sx:Ce,children:[o.jsx(a,{sx:ke,children:o.jsx(me,{testId:`${e}-select-form`,options:t,subtext:w,textAlign:x,errorMessage:f,onSelectChange:A,disabled:E,selectedOption:S,coinSelectorHeading:v})}),o.jsx(a,{sx:Pe,children:o.jsx(xe,{type:i,testId:`${e}-text-form`,value:s,placeholder:n,subtext:u,textAlign:p,errorMessage:m,validator:r,onTextInputChange:d,onTextInputBlur:c,onTextInputFocus:l,maxButtonClick:T,disabled:y})})]})}const _e={display:"flex",flexDirection:"column",paddingY:"base.spacing.x6",paddingX:"base.spacing.x4"},Fe={width:"base.icon.size.400"};function je({loading:t,updateLoading:s,validator:n,transaction:r,data:i,insufficientFundsForGas:d,openNotEnoughImxDrawer:l}){const{t:p}=e(),[E,S]=c.useState(!1),{viewDispatch:v}=c.useContext(u),{connectLoaderState:g}=c.useContext(m),{checkout:h,provider:I}=g,{track:b}=x(),C=async()=>{const e=n();if(b({userJourney:f.SWAP,screen:"SwapCoins",control:"Swap",controlType:"Button",extras:{swapFromAddress:i?.fromTokenAddress,swapFromAmount:i?.fromAmount,swapFromTokenSymbol:i?.fromTokenSymbol,swapToAddress:i?.toTokenAddress,swapToAmount:i?.toAmount,swapToTokenSymbol:i?.toTokenSymbol,isSwapFormValid:e,hasFundsForGas:!d}}),e&&h&&I&&r)if(d)l();else if(r)try{s(!0);const e={fromAmount:i?.fromAmount||"",fromTokenAddress:i?.fromTokenAddress||"",toTokenAddress:i?.toTokenAddress||"",toAmount:i?.toAmount||""};if(r.approval)return void v({payload:{type:T.UPDATE_VIEW,view:{type:de.APPROVE_ERC20,data:{approveTransaction:r.approval.transaction,transaction:r.swap.transaction,info:r.quote,swapFormInfo:e}}}});const t=await h.sendTransaction({provider:I,transaction:r.swap.transaction});v({payload:{type:T.UPDATE_VIEW,view:{type:de.IN_PROGRESS,data:{transactionResponse:t.transactionResponse,swapForm:e}}}})}catch(e){if(console.error(e),s(!1),e.type===A.USER_REJECTED_REQUEST_ERROR)return void S(!0);if(e.type===A.UNPREDICTABLE_GAS_LIMIT)return void v({payload:{type:T.UPDATE_VIEW,view:{type:de.PRICE_SURGE,data:i}}});if(e.type===A.TRANSACTION_FAILED||e.type===A.INSUFFICIENT_FUNDS||e.receipt&&0===e.receipt.status)return void v({payload:{type:T.UPDATE_VIEW,view:{type:de.FAIL,reason:"Transaction failed",data:i}}});v({payload:{type:T.UPDATE_VIEW,view:{type:y.ERROR_VIEW,error:e}}})}};return o.jsxs(a,{sx:_e,children:[o.jsx(w,{testId:"swap-button",disabled:t,variant:"primary",onClick:C,size:"large",children:t?o.jsx(w.Icon,{icon:"Loading",sx:Fe}):p("views.SWAP.swapForm.buttonText")}),o.jsx(we,{visible:E,showHeaderBar:!1,onCloseDrawer:()=>S(!1),onRetry:()=>{C(),S(!1)}})]})}const Oe={display:"flex",flexDirection:"column",alignItems:"center",paddingTop:"base.spacing.x6",paddingBottom:"base.spacing.x1",height:"100%"},We={color:"base.color.text.body.secondary",fontFamily:"base.font.family.heading.secondary",textAlign:"center",marginTop:"base.spacing.x4"},De={display:"flex",flexDirection:"column",justifyContent:"center",gap:"base.spacing.x2",height:"100%",width:"100%"},Le={width:"100%",height:"base.spacing.x16"},Ne={display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",paddingTop:"base.spacing.x6"};function Ve({environment:t,visible:s,showAdjustAmount:n,hasZeroImx:r,onCloseDrawer:d,onAddCoinsClick:c}){const{t:l}=e(),p=E(t);return o.jsx(S,{size:"full",onCloseDrawer:d,visible:s,showHeaderBar:!1,children:o.jsx(S.Content,{children:o.jsxs(a,{testId:"not-enough-gas-bottom-sheet",sx:Oe,children:[o.jsx(v,{imageUrl:p,sx:{w:"base.icon.size.600",h:"base.icon.size.600"}}),o.jsx(g,{size:"small",sx:We,testId:"not-enough-gas-heading",children:l(`drawers.notEnoughImx.content.${r?"noImx":"insufficientImx"}.heading`)}),o.jsx(i,{sx:We,children:l(`drawers.notEnoughImx.content.${r?"noImx":"insufficientImx"}.body`)}),o.jsxs(a,{sx:De,children:[n&&o.jsx(w,{testId:"not-enough-gas-adjust-amount-button",sx:Le,variant:"tertiary",onClick:d,children:l("drawers.notEnoughImx.buttons.adjustAmount")}),o.jsx(w,{testId:"not-enough-gas-add-imx-button",sx:Le,variant:"tertiary",onClick:c,children:l("drawers.notEnoughImx.buttons.addMoreImx")}),o.jsx(w,{sx:Le,variant:"tertiary",onClick:d,testId:"not-enough-gas-cancel-button",children:l("drawers.notEnoughImx.buttons.cancel")})]}),o.jsx(a,{sx:Ne,children:o.jsx(h,{testId:"footer-logo-image",logo:"ImmutableHorizontalLockup",sx:{width:"base.spacing.x25"}})})]})})})}const Ue={display:"flex",flexDirection:"column",alignItems:"center",paddingTop:"base.spacing.x6",paddingBottom:"base.spacing.x4",paddingX:"base.spacing.x4",height:"100%"},Be={color:"base.color.text.body.secondary",fontFamily:"base.font.family.heading.secondary",textAlign:"center",marginTop:"base.spacing.x4"},Me={display:"flex",flexDirection:"column",justifyContent:"flex-end",alignItems:"center",gap:"base.spacing.x2",height:"100%",width:"100%"},Ge={width:"100%",height:"base.spacing.x16",marginBottom:"base.spacing.x16"},$e={display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",paddingTop:"base.spacing.x6"},He={width:"base.icon.size.600",fill:"base.color.status.fatal.bright"};function ze({visible:t,onCloseDrawer:s}){const{t:n}=e();return o.jsx(S,{size:"full",onCloseDrawer:s,visible:t,showHeaderBar:!1,children:o.jsx(S.Content,{children:o.jsxs(a,{testId:"unable-to-swap-bottom-sheet",sx:Ue,children:[o.jsx(I,{icon:"Alert",testId:"unable-to-swap-icon",variant:"bold",sx:He}),o.jsx(g,{size:"small",sx:Be,testId:"unable-to-swap-heading",children:n("drawers.unableToSwap.heading")}),o.jsx(i,{sx:Be,children:n("drawers.unableToSwap.body")}),o.jsx(a,{sx:Me,children:o.jsx(w,{sx:Ge,variant:"tertiary",onClick:s,testId:"unable-to-swap-cancel-button",children:n("drawers.unableToSwap.buttons.cancel")})}),o.jsx(a,{sx:$e,children:o.jsx(h,{testId:"footer-logo-image",logo:"ImmutableHorizontalLockup",sx:{width:"base.spacing.x25"}})})]})})})}const Je=(e,t=500)=>{const[s,o]=c.useState(e);return c.useEffect((()=>{const s=setTimeout((()=>{o(e)}),t);return()=>{clearTimeout(s)}}),[e,t]),s};class Ke{static id=0;promiseId=0;promise;isCancelled=!1;onCancel=null;rejectPromise=()=>{};constructor(e){Ke.id+=1,this.promiseId=Ke.id,this.promise=new Promise(((t,s)=>{this.rejectPromise=s,e((e=>{this.isCancelled?s({cancelled:!0}):t(e)}),(e=>{this.isCancelled?s({cancelled:!0}):s(e)}))}))}static all(e){return new Ke(((t,s)=>{Promise.all(e.map((e=>e instanceof Ke?e.promise:e))).then(t,s)}))}then(e,t){return new Ke(((s,o)=>{this.promise.then((t=>s(e?e(t):t)),(e=>t?s(t(e)):o(e)))}))}catch(e){return this.then(void 0,e)}finally(e){return new Ke(((t,s)=>{this.promise.then(t,s).finally((()=>{e&&e()}))}))}cancel(){this.isCancelled||(this.isCancelled=!0,this.onCancel&&this.onCancel(),this.rejectPromise({cancelled:!0}))}onCancelled(e){this.onCancel=e}get cancelled(){return this.isCancelled}}var qe;!function(e){e.FROM="FROM",e.TO="TO"}(qe||(qe={}));const Xe=({swapFromToken:e,swapToToken:t,swapFromAmount:s,swapToAmount:o,conversion:a})=>{const n={fromToConversion:"",swapToAmount:""};if(!o)return n;if(n.swapToAmount=k(o),s&&e&&t){const s=P(k(W(a,t.decimals)),!0);n.fromToConversion=`1 ${e.symbol} ≈ ${s} ${t.symbol}`}return n},Qe=(e,t)=>void 0!==e&&(""!==e&&t!==e);let Ze;function Ye({data:t}){const{t:s}=e(),{swapState:{allowedTokens:n,exchange:r,tokenBalances:d,network:w}}=c.useContext(he),{connectLoaderState:A}=c.useContext(m),{checkout:E,provider:S}=A,v=c.useCallback(((e,t)=>b(t)?`${e.toLowerCase()}-${C}`:`${e.toLowerCase()}-${t.toLowerCase()}`),[]),{cryptoFiatState:h,cryptoFiatDispatch:I}=c.useContext(ce),{viewDispatch:V}=c.useContext(u),[U,B]=c.useState(qe.FROM),[M,G]=c.useState(!1),[$,H]=c.useState(l.from(0)),[z,J]=c.useState(""),K=c.useRef(!1),{track:q}=x(),[X,Q]=c.useState(t?.fromAmount||""),[Z,Y]=c.useState(""),ee=Je(X,D),[te,se]=c.useState(),[oe,ae]=c.useState(""),[ne,re]=c.useState(""),[ie,de]=c.useState(t?.toAmount||""),[pe,ue]=c.useState(""),me=Je(ie,D),[xe,we]=c.useState(),[Te,Ae]=c.useState(""),[Ee,Se]=c.useState(""),[ve,ge]=c.useState(null),[Ie,Ce]=c.useState(""),[ke,Pe]=c.useState(void 0),[_e,Fe]=c.useState(""),[Oe,We]=c.useState([]),[De,Le]=c.useState(!1),[Ne,Ue]=c.useState(!1);c.useEffect((()=>{if(0===d.length)return;if(!w)return;const e=d.filter((e=>e.balance.gt(0))).map((e=>({id:v(e.token.symbol,e.token.address),name:e.token.name,symbol:e.token.symbol,icon:e.token.icon,balance:{formattedAmount:k(e.formattedBalance),formattedFiatAmount:0===h.conversions.size?P(""):R(e.formattedBalance,e.token.symbol||"",h.conversions)}})));We(e),K.current||(K.current=!0,t?.fromTokenAddress&&(se(n.find((e=>b(e.address)&&t?.fromTokenAddress?.toLowerCase()===C||e.address?.toLowerCase()===t?.fromTokenAddress?.toLowerCase()))),ae(d.find((e=>b(e.token.address)&&t?.fromTokenAddress?.toLowerCase()===C||e.token.address?.toLowerCase()===t?.fromTokenAddress?.toLowerCase()))?.formattedBalance??"")),Qe(t?.toTokenAddress,t?.fromTokenAddress)&&we(n.find((e=>b(e.address)&&t?.toTokenAddress?.toLowerCase()===C||e.address?.toLowerCase()===t?.toTokenAddress?.toLowerCase()))))}),[d,n,h.conversions,t?.fromTokenAddress,t?.toTokenAddress,K.current,se,ae,we,We,v,P,w]);const Be=c.useMemo((()=>n.map((e=>({id:v(e.symbol,e.address),name:e.name,symbol:e.symbol,icon:e.icon})))),[n,te]);c.useEffect((()=>{I({payload:{type:le.SET_TOKEN_SYMBOLS,tokenSymbols:n.map((e=>e.symbol))}})}),[I,n]);const Me=()=>{Y(""),re(""),ue(""),Ae("")},Ge=()=>{Ze&&Ze.cancel(),J(""),Fe(""),ge(null)},$e=e=>!Number.isNaN(parseFloat(X))&&(!(parseFloat(X)<=0)&&(!!te&&(!!xe&&(!e||!M)))),He=async(e=!1)=>{$e(e)&&(Ze&&Ze.cancel(),e||G(!0),await(async(e=!1)=>{if(S&&r&&te&&xe){try{e||J("");const t=be.fromAmountIn(r,S,te,X,xe),s=be.fromAmountIn(r,S,te,"1",xe),o=Ke.all([t,s]);Ze=o;const a=await o,i=a[0],d=a[1];H(d.quote.amount.value);const c=i.swap.gasFeeEstimate;let p=l.from(c?.value||0);i.approval?.gasFeeEstimate&&(p=p.add(i.approval.gasFeeEstimate.value));const u=W(p,N),m=c?.token,x=n.find((e=>e.address?.toLocaleLowerCase()===m?.address?.toLocaleLowerCase()));ge(i),Ce(u),Pe({name:x?.name||"",symbol:x?.symbol||"",decimals:x?.decimals||0,address:x?.address,icon:x?.icon}),Fe(R(u,x?.symbol||"",h.conversions)),de(P(k(W(i.quote.amount.value,i.quote.amount.token.decimals),i.quote.amount.token.decimals))),Me()}catch(e){e.cancelled||(Ge(),Le(!1),Ue(!0))}e||G(!1)}})(e))},Ye=e=>!Number.isNaN(parseFloat(ie))&&(!(parseFloat(ie)<=0)&&(!!te&&(!!xe&&(!e||!M)))),et=async(e=!1)=>{Ye(e)&&(Ze&&Ze.cancel(),e||G(!0),await(async(e=!1)=>{if(S&&r&&te&&xe){try{e||J("");const t=be.fromAmountOut(r,S,xe,ie,te),s=be.fromAmountIn(r,S,te,"1",xe),o=Ke.all([t,s]);Ze=o;const a=await o,i=a[0],d=a[1];H(d.quote.amount.value);const c=i.swap.gasFeeEstimate;let p=l.from(c?.value||0);i.approval?.gasFeeEstimate&&(p=p.add(i.approval.gasFeeEstimate.value));const u=W(p,N),m=c?.token,x=n.find((e=>e.symbol===m?.symbol));ge(i),Ce(u),Pe({name:x?.name||"",symbol:x?.symbol||"",decimals:x?.decimals||0,address:x?.address,icon:x?.icon}),Fe(R(u,x?.symbol||"",h.conversions)),Q(P(k(W(i.quote.amount.value,i.quote.amount.token.decimals)))),Me()}catch(e){e.cancelled||(Ge(),Le(!1),Ue(!0))}e||G(!1)}})(e))},tt=async(e=!1)=>{U===qe.FROM?await He(e):await et(e)};ye((()=>tt(!0)),_),c.useEffect((()=>{if(U===qe.FROM){if(ee<=0)return G(!1),void Ge();(async()=>{await tt()})()}}),[ee,te,xe]),c.useEffect((()=>{if(U===qe.TO){if(me<=0)return G(!1),void Ge();(async()=>{await tt()})()}}),[me,xe,te]);const st=c.useMemo((()=>{const e=d.find((e=>e.token.address?.toLowerCase()===C));if(!e)return!0;const t=te?.address?.toLowerCase()===C,s=F(0!==Ie.length?Ie:"0"),o=t&&!Number.isNaN(parseFloat(X))?p(X,te?.decimals||18):l.from("0");return s.add(o).gt(e.balance)}),[Ie,d,te,X]);c.useEffect((()=>{X&&te&&Se(R(X,te.symbol,h.conversions))}),[X,te]);const ot=c.useCallback((e=>{const t=d.find((t=>e===v(t.token.symbol,t.token.address)));t&&(xe&&e===v(xe.symbol,xe?.address)&&we(void 0),se(t.token),ae(t.formattedBalance),re(""))}),[xe]),at=c.useCallback((e=>{const t=n.find((t=>e===v(t.symbol,t.address)));t&&(te&&e===v(te.symbol,te?.address)&&se(void 0),we(t),Ae(""))}),[te]);return c.useEffect((()=>{ve&&$&&J(Xe({swapFromToken:te,swapFromAmount:X,swapToToken:xe,swapToAmount:ie,conversion:$}).fromToConversion)}),[ve,$]),o.jsxs(o.Fragment,{children:[o.jsxs(a,{sx:{paddingX:"base.spacing.x4",marginBottom:"base.spacing.x2"},children:[o.jsx(g,{size:"small",weight:"regular",sx:{paddingBottom:"base.spacing.x4"},children:s("views.SWAP.content.title")}),o.jsxs(a,{sx:{display:"flex",flexDirection:"column",rowGap:"base.spacing.x6",paddingBottom:"base.spacing.x2"},children:[o.jsxs(a,{children:[o.jsx(g,{size:"xSmall",sx:{display:"flex",justifyContent:"space-between",paddingBottom:"base.spacing.x1"},children:s("views.SWAP.swapForm.from.label")}),o.jsx(Re,{testId:"fromTokenInputs",options:Oe,selectSubtext:te?`${s("views.SWAP.content.availableBalancePrefix")} ${k(oe)}`:"",selectTextAlign:"left",textInputType:"number",textInputValue:X,textInputPlaceholder:s("views.SWAP.swapForm.from.inputPlaceholder"),textInputSubtext:`${s("views.SWAP.content.fiatPricePrefix")} \n $${P(Ee,!0)}`,textInputTextAlign:"right",textInputValidator:j,onTextInputChange:e=>{return t=e,Me(),Ge(),de(""),$e(!1)&&G(!0),void Q(t);var t},onTextInputFocus:()=>{B(qe.FROM)},textInputMaxButtonClick:()=>{if(!oe)return;const e=oe.slice(0,oe.indexOf(".")+L+1);Me(),Ge(),de(""),B(qe.FROM),Q(e),q({userJourney:f.SWAP,screen:"SwapCoins",control:"MaxFrom",controlType:"Button",extras:{fromBalance:oe,fromBalanceTruncated:e}})},onSelectChange:ot,textInputErrorMessage:s(Z),selectErrorMessage:s(ne),selectedOption:te?v(te.symbol,te.address):void 0,coinSelectorHeading:s("views.SWAP.swapForm.from.selectorTitle")})]}),o.jsxs(a,{children:[o.jsxs(a,{sx:{display:"flex",justifyContent:"space-between",paddingBottom:"base.spacing.x1"},children:[o.jsx(g,{size:"xSmall",children:s("views.SWAP.swapForm.to.label")}),o.jsx(i,{sx:{color:"base.color.brand.4"},size:"small",children:z})]}),o.jsx(Re,{testId:"toTokenInputs",options:Be,selectTextAlign:"left",textInputType:"number",textInputValue:ie,textInputPlaceholder:s("views.SWAP.swapForm.to.inputPlaceholder"),textInputTextAlign:"right",textInputValidator:j,onTextInputChange:e=>{return t=e,Me(),Ge(),Se(""),Q(""),Ye(!1)&&G(!0),void de(t);var t},onTextInputFocus:()=>{B(qe.TO)},onSelectChange:at,textInputErrorMessage:s(pe),selectErrorMessage:s(Te),selectedOption:xe?v(xe.symbol,xe.address):void 0,coinSelectorHeading:s("views.SWAP.swapForm.to.selectorTitle")})]})]}),o.jsx(fe,{gasFeeFiatValue:_e,gasFeeToken:ke,gasFeeValue:Ie,fees:[{label:s("drawers.feesBreakdown.fees.gasFeeSwap.label"),fiatAmount:`~ ${s("drawers.feesBreakdown.fees.fiatPricePrefix")}${_e}`,amount:k(Ie),prefix:"~"}],onFeesClick:()=>{q({userJourney:f.SWAP,screen:"SwapCoins",control:"ViewFees",controlType:"Button"})},sx:{paddingBottom:"0"},loading:M})]}),o.jsx(je,{validator:()=>{const e=function(e){return e?"":"views.SWAP.validation.noFromTokenSelected"}(te),t=(o=oe,(s=X)&&0!==parseFloat(s)?o&&Number(s)>Number(o)?"views.SWAP.validation.insufficientBalance":"":"views.SWAP.validation.noAmountInputted");var s,o;const a=function(e){return e?"":"views.SWAP.validation.noToTokenSelected"}(xe),n=function(e){return e&&0!==parseFloat(e)?"":"views.SWAP.validation.noAmountInputted"}(ie);U===qe.FROM?(ue(""),t&&Y(t)):U===qe.TO&&(Y(""),n&&ue(n)),e&&re(e),a&&Ae(a);let r=!0;return(e||a||t&&U===qe.FROM||n&&U===qe.TO)&&(r=!1),q({userJourney:f.SWAP,screen:"SwapCoins",control:"FormValid",controlType:"Button",extras:{isSwapFormValid:r,swapFromAddress:te?.address,swapFromAmount:X,swapFromTokenSymbol:te?.symbol,swapToAddress:xe?.address,swapToAmount:ie,swapToTokenSymbol:xe?.symbol}}),r},updateLoading:e=>{G(e)},loading:M,transaction:ve,data:{fromAmount:X,toAmount:ie,fromTokenSymbol:te?.symbol,fromTokenAddress:te?.address,toTokenSymbol:xe?.symbol,toTokenAddress:xe?.address},insufficientFundsForGas:st,openNotEnoughImxDrawer:()=>{Ue(!1),Le(!0)}}),o.jsx(Ve,{environment:E?.config.environment??O.PRODUCTION,visible:De,showAdjustAmount:te?.address===C,hasZeroImx:!1,onAddCoinsClick:()=>{V({payload:{type:T.UPDATE_VIEW,view:{type:y.TOP_UP_VIEW},currentViewData:{fromTokenAddress:te?.address??"",fromAmount:X,toTokenAddress:xe?.address??""}}})},onCloseDrawer:()=>Le(!1)}),o.jsx(ze,{visible:Ne,onCloseDrawer:()=>{Ue(!1),se(void 0),Q(""),we(void 0),de("")}})]})}const et=(e,t)=>{if(0===e.length)return!0;let s=!1;return e.forEach((e=>{e.token.symbol===t&&e.balance.eq(0)&&(s=!0)})),s};function tt({theme:t,fromAmount:s,toAmount:n,fromTokenAddress:r,toTokenAddress:i}){const{t:d}=e(),{viewDispatch:l}=c.useContext(u),{eventTargetState:{eventTarget:p}}=c.useContext(V),{swapState:{tokenBalances:w}}=c.useContext(he),{connectLoaderState:{checkout:A}}=c.useContext(m),[E,S]=c.useState(!1),{page:v}=x();return c.useEffect((()=>{v({userJourney:f.SWAP,screen:"SwapCoins",extras:{fromAmount:s,toAmount:n,fromTokenAddress:r,toTokenAddress:i}})}),[]),c.useEffect((()=>{et(w,G)&&S(!0)}),[w]),o.jsx(U,{header:o.jsx(B,{title:d("views.SWAP.header.title"),onCloseButtonClick:()=>M(p)}),footer:o.jsx(Se,{environment:A?.config.environment,theme:t}),children:o.jsxs(a,{sx:{height:"100%",display:"flex",flexDirection:"column",justifyContent:"space-between"},children:[o.jsx(Ye,{data:{fromAmount:s,toAmount:n,fromTokenAddress:r,toTokenAddress:i}}),o.jsx(Ve,{environment:A?.config.environment??O.PRODUCTION,visible:E,showAdjustAmount:!1,hasZeroImx:!0,onAddCoinsClick:()=>{l({payload:{type:T.UPDATE_VIEW,view:{type:y.TOP_UP_VIEW}}})},onCloseDrawer:()=>{S(!1)}})]})})}function st({transactionResponse:t,swapForm:s}){const{t:a}=e(),{viewDispatch:n}=c.useContext(u),{page:r}=x();return c.useEffect((()=>{r({userJourney:f.SWAP,screen:"SwapInProgress",extras:{swapFormInfo:s}})}),[]),c.useEffect((()=>{(async()=>{try{const e=await t.wait();if(1===e.status)return void n({payload:{type:T.UPDATE_VIEW,view:{type:de.SUCCESS,data:{fromTokenAddress:s.fromTokenAddress,fromAmount:s.fromAmount,toTokenAddress:s.toTokenAddress,toAmount:s.toAmount||"",transactionHash:e.transactionHash}}}});n({payload:{type:T.UPDATE_VIEW,view:{type:de.FAIL,data:s,reason:"Transaction failed"}}})}catch{n({payload:{type:T.UPDATE_VIEW,view:{type:de.FAIL,data:s,reason:"Transaction failed"}}})}})()}),[t]),o.jsx($,{loadingText:a("views.SWAP.IN_PROGRESS.loading.text"),showFooterLogo:!0})}function ot({data:t}){const{t:s}=e(),{swapState:{allowedTokens:n}}=c.useContext(he),{connectLoaderState:r}=c.useContext(m),{checkout:i,provider:d}=r,{viewDispatch:l}=c.useContext(u),{eventTargetState:{eventTarget:p}}=c.useContext(V),w=H(d),[E,S]=c.useState(!1),[v,g]=c.useState(!1),[h,I]=c.useState(!1),[b,C]=c.useState(!1),[k,P]=c.useState(!1),[R,_]=c.useState(!1),{page:F,track:j}=x();c.useEffect((()=>{F({userJourney:f.SWAP,screen:"ApproveERC20",extras:{swapFormInfo:t.swapFormInfo}})}),[]);const O=c.useMemo((()=>n.find((e=>e.address===t.swapFormInfo.fromTokenAddress))),[n,t.swapFormInfo.fromTokenAddress]),W=c.useCallback((()=>{l({payload:{type:T.UPDATE_VIEW,view:{type:y.ERROR_VIEW,error:new Error("No checkout object or no provider object found")}}})}),[l]),D=c.useCallback((()=>{l({payload:{type:T.UPDATE_VIEW,view:{type:de.SWAP,data:t.swapFormInfo}}})}),[l]),L=(e,t)=>{e.type!==A.UNPREDICTABLE_GAS_LIMIT?e.type===A.TRANSACTION_FAILED||e.type===A.INSUFFICIENT_FUNDS||e.receipt&&0===e.receipt.status?l({payload:{type:T.UPDATE_VIEW,view:{type:de.FAIL,reason:"Transaction failed",data:t}}}):l({payload:{type:T.UPDATE_VIEW,view:{type:y.ERROR_VIEW,error:e}}}):l({payload:{type:T.UPDATE_VIEW,view:{type:de.PRICE_SURGE,data:t}}})},N=c.useCallback((async()=>{if(!b)if(j({userJourney:f.SWAP,screen:"ApproveERC20",control:"ApproveSpending",controlType:"Button"}),C(!0),i&&d){if(!E){S(!0);try{const e=await i.sendTransaction({provider:d,transaction:t.approveTransaction});g(!0);if(1!==(await e.transactionResponse.wait()).status)return void l({payload:{type:T.UPDATE_VIEW,view:{type:de.FAIL,data:t.swapFormInfo}}});g(!1),S(!1),I(!0)}catch(e){if(g(!1),S(!1),e.type===A.USER_REJECTED_REQUEST_ERROR)return void P(!0);L(e,t.swapFormInfo)}finally{C(!1)}}}else W()}),[i,d,W,l,_,t.approveTransaction,t.swapFormInfo,E,S,g]),G=c.useMemo((()=>o.jsxs(z,{heading:s(`views.APPROVE_ERC20.approveSpending.content.${w?"passport":"metamask"}.heading`),children:[w&&o.jsx(a,{children:s("views.APPROVE_ERC20.approveSpending.content.passport.body")}),!w&&o.jsx(a,{children:s("views.APPROVE_ERC20.approveSpending.content.metamask.body",{amount:`${t.swapFormInfo.fromAmount} ${O?.symbol||""}`})})]})),[t.swapFormInfo,O,w]),K=c.useMemo((()=>o.jsx(J,{loading:b,actionText:s(k?"views.APPROVE_ERC20.approveSpending.footer.retryText":"views.APPROVE_ERC20.approveSpending.footer.buttonText"),onActionClick:N})),[k,N,b]),q=c.useCallback((async()=>{if(!b)if(j({userJourney:f.SWAP,screen:"ApproveERC20",control:"ApproveSwap",controlType:"Button"}),C(!0),i&&d){if(!E){S(!0);try{const e=await i.sendTransaction({provider:d,transaction:t.transaction});S(!1),l({payload:{type:T.UPDATE_VIEW,view:{type:de.IN_PROGRESS,data:{transactionResponse:e.transactionResponse,swapForm:t.swapFormInfo}}}})}catch(e){if(S(!1),e.type===A.USER_REJECTED_REQUEST_ERROR)return void _(!0);L(e,t.swapFormInfo)}finally{C(!1)}}}else W()}),[i,d,W,l,_,t.transaction,t.swapFormInfo,E,S]),X=o.jsx(z,{heading:s("views.APPROVE_ERC20.approveSwap.content.heading"),children:o.jsx(a,{children:s("views.APPROVE_ERC20.approveSwap.content.body")})}),Q=c.useMemo((()=>o.jsx(J,{loading:b,actionText:s(R?"views.APPROVE_ERC20.approveSwap.footer.retryText":"views.APPROVE_ERC20.approveSwap.footer.buttonText"),onActionClick:q})),[R,q,b]);return o.jsxs(o.Fragment,{children:[v&&o.jsx($,{loadingText:s("views.APPROVE_ERC20.approveSpending.loading.text"),showFooterLogo:!0}),!v&&o.jsx(U,{header:o.jsx(B,{transparent:!0,showBack:!0,onCloseButtonClick:()=>M(p),onBackButtonClick:D}),floatHeader:!0,heroContent:h?o.jsx(Te,{}):o.jsx(Ee,{}),footer:h?Q:K,children:h?X:G})]})}function at({amount:t,fromTokenAddress:s,toTokenAddress:a,config:n}){const{t:r}=e(),{eventTargetState:{eventTarget:i}}=c.useContext(V),{environment:d,theme:l,isOnRampEnabled:p,isSwapEnabled:w,isBridgeEnabled:A}=n,{connectLoaderState:{checkout:E,provider:S}}=c.useContext(m),[v,g]=c.useReducer(K,{...q,history:[]}),[h,I]=c.useReducer(Ie,ve),{page:b}=x(),[C,k]=c.useState(!1),P=c.useMemo((()=>({swapState:h,swapDispatch:I})),[h,I]),R=c.useMemo((()=>({viewState:v,viewDispatch:g})),[v,g]),_=c.useCallback(((e,t)=>{g({payload:{type:T.UPDATE_VIEW,view:{type:y.ERROR_VIEW,tryAgain:t,error:e}}})}),[g]),F=c.useCallback((()=>{g({payload:{type:T.UPDATE_VIEW,view:{type:de.SWAP}}})}),[g]),j=c.useCallback((async()=>{if(!E)throw new Error("loadBalances: missing checkout");if(!S)throw new Error("loadBalances: missing provider");try{const e=await Ae({checkout:E,provider:S,allowTokenListType:X.SWAP});if(void 0===e)return!1;I({payload:{type:ge.SET_ALLOWED_TOKENS,allowedTokens:e.allowList.tokens}}),I({payload:{type:ge.SET_TOKEN_BALANCES,tokenBalances:e.allowedBalances}})}catch(e){if(Q.nonRetryable(e))return _(e,j),!1}return!0}),[E,S]);return c.useEffect((()=>{(async()=>{if(!E||!S)return;const e=await E.getNetworkInfo({provider:S});if(e.chainId!==Z(E.config))return;let t;try{t=await E.config.remote.getConfig("dex")}catch(e){return void _(e)}const s=new Y({chainId:e.chainId,baseConfig:new ee({environment:d}),secondaryFees:t.secondaryFees,overrides:t.overrides});I({payload:{type:ge.SET_EXCHANGE,exchange:s}}),I({payload:{type:ge.SET_NETWORK,network:e}}),await j()&&F()})()}),[E,S]),o.jsx(u.Provider,{value:R,children:o.jsx(he.Provider,{value:P,children:o.jsxs(pe,{environment:d,children:[v.view.type===y.LOADING_VIEW&&o.jsx($,{loadingText:r("views.LOADING_VIEW.text")}),v.view.type===de.SWAP&&o.jsx(tt,{theme:l,fromAmount:v.view.data?.fromAmount??t,fromTokenAddress:v.view.data?.fromTokenAddress??s,toTokenAddress:v.view.data?.toTokenAddress??a}),v.view.type===de.IN_PROGRESS&&o.jsx(st,{transactionResponse:v.view.data.transactionResponse,swapForm:v.view.data.swapForm}),v.view.type===de.APPROVE_ERC20&&o.jsx(ot,{data:v.view.data}),v.view.type===de.SUCCESS&&o.jsx(te,{statusText:r("views.SWAP.success.text"),actionText:r("views.SWAP.success.actionText"),onRenderEvent:()=>{b({userJourney:f.SWAP,screen:"SwapSuccess",extras:{fromTokenAddress:v.view.data?.fromTokenAddress,fromAmount:v.view.data?.fromAmount,toTokenAddress:v.view.data?.toTokenAddress,toAmount:v.view.data?.toAmount}}),se(i,v.view.data.transactionHash)},onActionClick:()=>M(i),statusType:oe.SUCCESS,testId:"success-view"}),v.view.type===de.FAIL&&o.jsx(te,{statusText:r("views.SWAP.failed.text"),actionText:r("views.SWAP.failed.actionText"),onRenderEvent:()=>{b({userJourney:f.SWAP,screen:"SwapFailed"}),ae(i,"Transaction failed")},onActionClick:()=>{v.view.type===de.FAIL&&g({payload:{type:T.UPDATE_VIEW,view:{type:de.SWAP,data:v.view.data}}})},statusType:oe.FAILURE,onCloseClick:()=>M(i),testId:"fail-view"}),v.view.type===de.PRICE_SURGE&&o.jsx(te,{statusText:r("views.SWAP.rejected.text"),actionText:r("views.SWAP.rejected.actionText"),onRenderEvent:()=>{b({userJourney:f.SWAP,screen:"PriceSurge"}),ne(i,"Price surge")},onActionClick:()=>{v.view.type===de.PRICE_SURGE&&g({payload:{type:T.UPDATE_VIEW,view:{type:de.SWAP,data:v.view.data}}})},statusType:oe.WARNING,onCloseClick:()=>M(i),testId:"price-surge-view"}),v.view.type===y.ERROR_VIEW&&o.jsx(re,{actionText:r("views.ERROR_VIEW.actionText"),onActionClick:async()=>{k(!0);const e=v.view;if(!e.tryAgain)return F(),void k(!1);await e.tryAgain()&&F(),k(!1)},onCloseClick:()=>M(i),errorEventActionLoading:C}),v.view.type===y.TOP_UP_VIEW&&o.jsx(ue,{analytics:{userJourney:f.SWAP},checkout:E,provider:S,widgetEvent:ie.IMTBL_SWAP_WIDGET_EVENT,showOnrampOption:p,showSwapOption:w,showBridgeOption:A,onCloseButtonClick:()=>M(i)})]})})})}export{at as default};