@tomo-inc/wallet-adaptor-base 0.0.1 → 0.0.2

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 (104) hide show
  1. package/dist/index.cjs +735 -324
  2. package/dist/index.d.cts +152 -6
  3. package/dist/index.d.ts +152 -6
  4. package/dist/index.js +667 -325
  5. package/package.json +3 -2
  6. package/project.json +2 -2
  7. package/src/global.d.ts +7 -0
  8. package/src/index.ts +11 -8
  9. package/src/type.ts +8 -0
  10. package/src/utils/isMobile.ts +1 -1
  11. package/src/utils/log.ts +7 -0
  12. package/src/utils/utils.ts +5 -0
  13. package/src/wallet-api/balance.ts +4 -2
  14. package/src/wallet-api/connect.ts +77 -10
  15. package/src/wallet-api/sign-in.ts +20 -26
  16. package/src/wallet-api/sign-message.ts +80 -10
  17. package/src/wallets/Wallet.ts +2 -1
  18. package/src/wallets/default/backpackWallet/backpackWallet.ts +2 -4
  19. package/src/wallets/default/berasigWallet/berasigWallet.ts +2 -4
  20. package/src/wallets/default/binanceWallet/binanceWallet.ts +2 -4
  21. package/src/wallets/default/bitgetWallet/bitgetWallet.ts +2 -4
  22. package/src/wallets/default/bitskiWallet/bitskiWallet.ts +2 -4
  23. package/src/wallets/default/bitverseWallet/bitverseWallet.ts +2 -4
  24. package/src/wallets/default/bloomWallet/bloomWallet.ts +2 -4
  25. package/src/wallets/default/braveWallet/braveWallet.ts +2 -4
  26. package/src/wallets/default/bybitWallet/bybitWallet.ts +2 -4
  27. package/src/wallets/default/clvWallet/clvWallet.ts +2 -4
  28. package/src/wallets/default/coin98Wallet/coin98Wallet.ts +2 -4
  29. package/src/wallets/default/coinbaseWallet/coinbaseWallet.ts +2 -4
  30. package/src/wallets/default/compassWallet/compassWallet.ts +2 -4
  31. package/src/wallets/default/coreWallet/coreWallet.ts +2 -4
  32. package/src/wallets/default/ctrlWallet/ctrlWallet.ts +2 -4
  33. package/src/wallets/default/dawnWallet/dawnWallet.ts +2 -4
  34. package/src/wallets/default/desigWallet/desigWallet.ts +2 -4
  35. package/src/wallets/default/enkryptWallet/enkryptWallet.ts +2 -4
  36. package/src/wallets/default/foxWallet/foxWallet.ts +2 -4
  37. package/src/wallets/default/frameWallet/frameWallet.ts +2 -4
  38. package/src/wallets/default/gateWallet/gateWallet.ts +2 -4
  39. package/src/wallets/default/imTokenWallet/imTokenWallet.ts +2 -4
  40. package/src/wallets/default/injectedWallet/injectedWallet.ts +2 -4
  41. package/src/wallets/default/iopayWallet/iopayWallet.ts +2 -4
  42. package/src/wallets/default/kaiaWallet/kaiaWallet.ts +2 -4
  43. package/src/wallets/default/kaikasWallet/kaikasWallet.ts +2 -4
  44. package/src/wallets/default/krakenWallet/krakenWallet.ts +2 -4
  45. package/src/wallets/default/kresusWallet/kresusWallet.ts +2 -4
  46. package/src/wallets/default/ledgerWallet/ledgerWallet.ts +2 -4
  47. package/src/wallets/default/magicEdenWallet/magicEdenWallet.ts +5 -7
  48. package/src/wallets/default/mathWallet/mathWallet.svg +9 -0
  49. package/src/wallets/default/mathWallet/mathWallet.ts +2 -2
  50. package/src/wallets/default/metaMaskWallet/metaMaskWallet.ts +3 -2
  51. package/src/wallets/default/myDogeWallet/mydogeWallet.ts +1 -1
  52. package/src/wallets/default/nestWallet/nestWallet.ts +2 -4
  53. package/src/wallets/default/novaWallet/novaWallet.ts +2 -4
  54. package/src/wallets/default/oktoWallet/oktoWallet.ts +2 -4
  55. package/src/wallets/default/okxWallet/okxWallet.ts +2 -4
  56. package/src/wallets/default/omniWallet/omniWallet.ts +2 -4
  57. package/src/wallets/default/oneInchWallet/oneInchWallet.svg +30 -1
  58. package/src/wallets/default/oneInchWallet/oneInchWallet.ts +2 -4
  59. package/src/wallets/default/oneKeyWallet/oneKeyWallet.ts +2 -4
  60. package/src/wallets/default/paraSwapWallet/paraswapWallet.ts +2 -4
  61. package/src/wallets/default/petraWallet/petraWallet.svg +5 -0
  62. package/src/wallets/default/petraWallet/petraWallet.ts +24 -0
  63. package/src/wallets/default/phantomWallet/phantomWallet.ts +2 -4
  64. package/src/wallets/default/rabbyWallet/rabbyWallet.ts +2 -4
  65. package/src/wallets/default/rainbowWallet/rainbowWallet.ts +2 -4
  66. package/src/wallets/default/ramperWallet/ramperWallet.ts +2 -4
  67. package/src/wallets/default/readyWallet/readyWallet.ts +2 -4
  68. package/src/wallets/default/roninWallet/roninWallet.ts +2 -4
  69. package/src/wallets/default/safeWallet/safeWallet.ts +2 -4
  70. package/src/wallets/default/safeheronWallet/safeheronWallet.ts +2 -4
  71. package/src/wallets/default/safepalWallet/safepalWallet.ts +2 -4
  72. package/src/wallets/default/seifWallet/seifWallet.ts +2 -4
  73. package/src/wallets/default/solflareWallet/solflareWallet.svg +11 -0
  74. package/src/wallets/default/solflareWallet/solflareWallet.ts +2 -2
  75. package/src/wallets/default/subWallet/subWallet.ts +2 -4
  76. package/src/wallets/default/tahoWallet/tahoWallet.ts +2 -4
  77. package/src/wallets/default/talismanWallet/talismanWallet.ts +2 -4
  78. package/src/wallets/default/tokenPocketWallet/tokenPocketWallet.ts +2 -4
  79. package/src/wallets/default/tokenaryWallet/tokenaryWallet.ts +2 -4
  80. package/src/wallets/default/trezorWallet/trezorWallet.svg +7 -0
  81. package/src/wallets/default/trezorWallet/trezorWallet.ts +2 -2
  82. package/src/wallets/default/trustWallet/trustWallet.ts +3 -5
  83. package/src/wallets/default/uniswapWallet/uniswapWallet.ts +2 -4
  84. package/src/wallets/default/universalProfilesWallet/universalProfilesWallet.svg +13 -1351
  85. package/src/wallets/default/universalProfilesWallet/universalProfilesWallet.ts +2 -2
  86. package/src/wallets/default/valoraWallet/valoraWallet.ts +2 -4
  87. package/src/wallets/default/walletConnectWallet/walletConnectWallet.ts +2 -4
  88. package/src/wallets/default/wigwamWallet/wigwamWallet.ts +2 -4
  89. package/src/wallets/default/xPortalWallet/xPortalWallet.ts +2 -4
  90. package/src/wallets/default/zealWallet/zealWallet.ts +2 -4
  91. package/src/wallets/default/zerionWallet/zerionWallet.ts +2 -4
  92. package/src/wallets/default/zilPayWallet/zilPayWallet.ts +2 -4
  93. package/src/wallets/defaultConnectors.ts +213 -0
  94. package/src/wallets/detector.ts +11 -10
  95. package/src/wallets/index.ts +7 -76
  96. package/src/wallets/wallet-standard.ts +147 -47
  97. package/tsconfig.json +4 -1
  98. package/tsup.config.ts +55 -0
  99. package/src/wallets/default/mathWallet/icon.ts +0 -2
  100. package/src/wallets/default/metaMaskWallet/icon.ts +0 -2
  101. package/src/wallets/default/myDogeWallet/icon.ts +0 -2
  102. package/src/wallets/default/solflareWallet/icon.ts +0 -2
  103. package/src/wallets/default/trezorWallet/icon.ts +0 -2
  104. package/src/wallets/default/universalProfilesWallet/icon.ts +0 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tomo-inc/wallet-adaptor-base",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "author": "tomo.inc",
5
5
  "license": "MIT",
6
6
  "private": false,
@@ -16,9 +16,10 @@
16
16
  }
17
17
  },
18
18
  "dependencies": {
19
+ "@aptos-labs/ts-sdk": "^5.1.1",
19
20
  "@solana/spl-token": "^0.4.13",
20
21
  "@solana/web3.js": "^1.98.0",
21
- "@aptos-labs/ts-sdk": "^5.1.1",
22
+ "@wallet-standard/core": "^1.1.0",
22
23
  "viem": "2.21.54",
23
24
  "@tomo-inc/wallet-connect-protocol": "0.0.3"
24
25
  },
package/project.json CHANGED
@@ -7,14 +7,14 @@
7
7
  "executor": "nx:run-commands",
8
8
  "outputs": ["{projectRoot}/dist"],
9
9
  "options": {
10
- "command": "tsup src/index.ts --format esm,cjs --dts --treeshake",
10
+ "command": "tsup",
11
11
  "cwd": "packages/wallet-adaptor-base"
12
12
  }
13
13
  },
14
14
  "dev": {
15
15
  "executor": "nx:run-commands",
16
16
  "options": {
17
- "command": "tsup src/index.ts --format esm,cjs --dts --watch",
17
+ "command": "tsup --watch",
18
18
  "cwd": "packages/wallet-adaptor-base"
19
19
  }
20
20
  },
@@ -0,0 +1,7 @@
1
+ declare global {
2
+ interface Window {
3
+ ethereum?: any;
4
+ }
5
+ }
6
+
7
+ export {};
package/src/index.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { AdaptorChainType, Connector, WalletConnectorType } from "./type";
2
2
  import { uniqueConnectors } from "./utils/utils";
3
- import { defaultConnectors } from "./wallets";
4
- import { WagmiWalletConfig, WalletConfig } from "./wallets/Wallet";
3
+ import { defaultConnectors } from "./wallets/defaultConnectors";
5
4
  import { connectorDector, supportedWalletConfigTypes, walletConfigAdapter } from "./wallets/detector";
5
+ import { WagmiWalletConfig, WalletConfig } from "./wallets/Wallet";
6
6
  import { eip6963Wallets } from "./wallets/wallet-eip6963";
7
7
  import { walletStandardWallets } from "./wallets/wallet-standard";
8
8
  import { setWalletConnectConfig, walletConnectWallets } from "./wallets/wallet-walletconnect";
@@ -56,13 +56,13 @@ export async function loadConnectors({
56
56
  const connectorsFromConfig = uniqueConnectors([...recommonedConnectorsDetected, ...defaultConnectors]);
57
57
 
58
58
  // Include WalletConnect wallets along with other detected wallets
59
- const connectorsDetected = [...evmWallets, ...solanaWallets, ...aptosWallets, ...wcWallets];
59
+ const connectorsDetecteds = [...evmWallets, ...solanaWallets, ...aptosWallets, ...wcWallets];
60
60
 
61
- for (const connector of connectorsDetected) {
62
- const connectorsDetected = connectorsFromConfig.find((c) => c.info.name === connector.info.name);
63
- if (connectorsDetected) {
64
- connectorsDetected.isInstalled = true;
65
- connectorsDetected.providers = { ...connectorsDetected.providers, ...connector.providers };
61
+ for (const connector of connectorsDetecteds) {
62
+ const _connector = connectorsFromConfig.find((c) => c.info.name === connector.info.name);
63
+ if (_connector) {
64
+ _connector.isInstalled = true;
65
+ _connector.providers = { ..._connector.providers, ...connector.providers };
66
66
  } else {
67
67
  connectorsFromConfig.push(connector);
68
68
  }
@@ -91,3 +91,6 @@ export async function loadConnectors({
91
91
 
92
92
  //api
93
93
  export * from "./wallet-api";
94
+
95
+ // Export all wallets
96
+ export * from "./wallets";
package/src/type.ts CHANGED
@@ -4,6 +4,7 @@ export enum ProviderProtocol {
4
4
  EIP6963 = "eip6963",
5
5
  WALLET_STANDARD = "wallet-standard",
6
6
  WALLET_CONNECT = "wallet-connect",
7
+ INJECT = "inject",
7
8
  }
8
9
 
9
10
  export enum ProviderChainType {
@@ -21,11 +22,13 @@ export const SupportedChainTypes = ["evm", "solana", "aptos"];
21
22
  export interface WalletInfo {
22
23
  uuid: string;
23
24
  name: string;
25
+ sameNames?: string[];
24
26
  namespace?: string;
25
27
  icon: string;
26
28
  iconBackground?: string;
27
29
  rdns?: string;
28
30
  isWalletConnect?: boolean;
31
+ deeplink?: string;
29
32
  links: {
30
33
  homepage?: string;
31
34
  ios_install?: string;
@@ -62,6 +65,10 @@ export interface Connector {
62
65
  };
63
66
  }
64
67
 
68
+ export interface ConnectParams {
69
+ dappLink: string;
70
+ }
71
+
65
72
  export interface SignInParams {
66
73
  scheme?: "https" | "http";
67
74
  domain: string;
@@ -83,6 +90,7 @@ export interface WalletOptions {
83
90
  network?: string;
84
91
  };
85
92
  provider: WalletProvider;
93
+ walletInfo?: WalletInfo;
86
94
  }
87
95
 
88
96
  export interface ChainInfo {
@@ -18,5 +18,5 @@ export function isIOS(): boolean {
18
18
  }
19
19
 
20
20
  export function isMobile(): boolean {
21
- return isAndroid() || isIOS();
21
+ return isAndroid() || isIOS() || isLargeIOS();
22
22
  }
@@ -0,0 +1,7 @@
1
+ const isDebug = true;
2
+
3
+ export function debugLog(...args: any[]) {
4
+ if (isDebug) {
5
+ console.log(...args);
6
+ }
7
+ }
@@ -12,3 +12,8 @@ export function uniqueConnectors(allConnectors: Connector[]) {
12
12
  });
13
13
  return connectors;
14
14
  }
15
+
16
+ // uint8array to hex
17
+ export function uint8arrayToHex(uint8array: Uint8Array) {
18
+ return Array.from(uint8array, (byte) => byte.toString(16).padStart(2, "0")).join("");
19
+ }
@@ -1,5 +1,5 @@
1
- import { PublicKey, Connection } from "@solana/web3.js";
2
1
  import { Aptos, AptosConfig, Network } from "@aptos-labs/ts-sdk";
2
+ import { Connection, PublicKey } from "@solana/web3.js";
3
3
  import { WalletOptions } from "type";
4
4
 
5
5
  export interface BalanceParams {
@@ -41,6 +41,7 @@ export const getBalance = async (
41
41
  method: "eth_getBalance",
42
42
  params: [address, "latest"],
43
43
  });
44
+ console.log("getBalance evm res:", chainType, provider, { address, chainId, balance });
44
45
  return {
45
46
  total: Number(balance || "0") || 0,
46
47
  tokenInfo,
@@ -52,7 +53,7 @@ export const getBalance = async (
52
53
  const connection = new Connection(rpcUrl);
53
54
 
54
55
  const balances = await connection.getMultipleAccountsInfo([address].map((addr) => new PublicKey(addr)));
55
- console.log("solana balances", balances);
56
+ console.log("solana balances", chainType, provider, { address, chainId, balances });
56
57
 
57
58
  return {
58
59
  total: balances[0]?.lamports || 0,
@@ -86,6 +87,7 @@ export const getBalance = async (
86
87
  throw error;
87
88
  }
88
89
 
90
+ console.log("solana balances", chainType, provider, { address, chainId, balance });
89
91
  return {
90
92
  total: balance,
91
93
  tokenInfo,
@@ -1,8 +1,27 @@
1
- import { WalletOptions } from "type";
1
+ import { ConnectParams, WalletOptions } from "type";
2
+ import { isMobile } from "../utils/isMobile";
2
3
 
3
4
  export const connect = async (
4
- walletOptions: WalletOptions,
5
+ connectParams: ConnectParams,
6
+ walletOptions: Omit<WalletOptions, "account">,
5
7
  ): Promise<{ address: string; chainId?: string; network?: string }> => {
8
+ //deeplink in mobile
9
+ //https://link.metamask.io/dapp/app.uniswap.org
10
+ if (isMobile()) {
11
+ const deeplink = walletOptions?.walletInfo?.deeplink || "";
12
+ if (!deeplink) {
13
+ throw new Error("Deeplink not supported");
14
+ }
15
+ const dappLink = connectParams?.dappLink || "";
16
+ if (!dappLink) {
17
+ throw new Error("Dapp link is required");
18
+ }
19
+ const { hostname, pathname } = new URL(dappLink);
20
+ const link = `${deeplink}${hostname}${pathname}`;
21
+ (window as any).location.href = link;
22
+ }
23
+
24
+ //inject provider/walletconnect provider
6
25
  const { provider, chainType } = walletOptions;
7
26
 
8
27
  if (!provider) {
@@ -20,25 +39,59 @@ export const connect = async (
20
39
  address = res?.[0] || "";
21
40
  chainId = await provider.request({ method: "eth_chainId" });
22
41
  }
42
+
43
+ // console.log("connect request:", chainType, provider);
23
44
  if (chainType === "solana") {
24
45
  let res = null;
25
46
  if (provider?.connect) {
26
47
  res = await provider.connect();
48
+ address = res?.publicKey?.toString() || "";
27
49
  }
28
50
  if (provider?.request) {
29
51
  res = await provider.request({
30
52
  method: "connect",
31
53
  });
54
+ address = res?.publicKey?.toString() || "";
55
+ }
56
+ if (provider?.["standard:connect"]) {
57
+ res = await provider["standard:connect"]?.connect();
58
+ address = res?.accounts?.[0]?.address || "";
32
59
  }
33
- address = provider?.publicKey?.toString() || "";
34
60
  network = "mainnet-beta";
35
61
  }
62
+
36
63
  if (chainType === "aptos") {
37
- await provider?.connect();
38
- const account = await provider?.account();
39
- network = ((await provider?.network()) || "Mainnet") as string;
40
- address = account?.address || "";
64
+ if (provider?.connect) {
65
+ await provider?.connect();
66
+ } else if (provider?.request) {
67
+ await provider.request({ method: "connect" });
68
+ } else if (provider?.["aptos:connect"]) {
69
+ await provider["aptos:connect"]?.connect();
70
+ }
71
+
72
+ if (provider?.account) {
73
+ const account = await provider?.account();
74
+ address = account?.address || "";
75
+ } else if (provider?.["aptos:account"]) {
76
+ const account = await provider?.["aptos:account"]?.account();
77
+ const addressData = account?.address?.data;
78
+ const hexString = addressData
79
+ ? Array.from(addressData as Uint8Array)
80
+ .map((b) => b.toString(16).padStart(2, "0"))
81
+ .join("")
82
+ : null;
83
+ address = `0x${hexString}`;
84
+ }
85
+
86
+ // if (provider?.network) {
87
+ // network = ((await provider?.network()) || "Mainnet") as string;
88
+ // }
89
+ // if (provider?.["aptos:network"]) {
90
+ // network = ((await provider?.["aptos:network"]?.network())?.name || "Mainnet") as string;
91
+ // }
92
+ network = "mainnet";
41
93
  }
94
+ console.log("connect res:", chainType, provider, { address, chainId, network });
42
95
  return { address, chainId, network };
43
96
  };
44
97
 
@@ -56,10 +109,24 @@ export const disconnect = async (walletOptions: WalletOptions): Promise<boolean>
56
109
  await provider.request({ method: "wallet_revokePermissions" });
57
110
  }
58
111
  if (chainType === "solana") {
59
- await provider.disconnect();
112
+ if (provider?.disconnect) {
113
+ await provider.disconnect();
114
+ return true;
115
+ }
116
+ if (provider?.["standard:disconnect"]) {
117
+ await provider["standard:disconnect"]?.disconnect();
118
+ return true;
119
+ }
60
120
  }
61
121
  if (chainType === "aptos") {
62
- await provider.disconnect();
122
+ if (provider?.disconnect) {
123
+ await provider.disconnect();
124
+ return true;
125
+ }
126
+ if (provider?.["aptos:disconnect"]) {
127
+ await provider["aptos:disconnect"]?.disconnect();
128
+ return true;
129
+ }
63
130
  }
64
- return true;
131
+ return false;
65
132
  };
@@ -1,5 +1,6 @@
1
1
  import { SignInParams, WalletOptions } from "type";
2
-
2
+ import { uint8arrayToHex } from "utils/utils";
3
+ import { signMessage } from "./sign-message";
3
4
  /*
4
5
  const params = {
5
6
  domain: window.location.host,
@@ -12,7 +13,7 @@ const params = {
12
13
  };
13
14
  */
14
15
 
15
- export const signInWithWallet = async (signInData: SignInParams, walletOptions: WalletOptions) => {
16
+ export const signInWithWallet = async (signInData: SignInParams, walletOptions: WalletOptions): Promise<string> => {
16
17
  const { chainType, account, provider } = walletOptions;
17
18
 
18
19
  if (!provider) {
@@ -20,23 +21,16 @@ export const signInWithWallet = async (signInData: SignInParams, walletOptions:
20
21
  }
21
22
 
22
23
  const message = signInMessageBuilder(signInData, walletOptions);
23
- const { address } = account;
24
-
25
24
  if (chainType === "evm") {
26
- try {
27
- const sign: string = await provider.request({
28
- method: "personal_sign",
29
- params: [message, address],
30
- });
31
- return sign;
32
- } catch (error) {
33
- throw error as Error;
34
- }
25
+ return await signMessage({ message, nonce: signInData.nonce }, walletOptions);
26
+ }
27
+ if (chainType === "aptos") {
28
+ return await signMessage({ message, nonce: signInData.nonce }, walletOptions);
35
29
  }
36
30
 
37
31
  if (chainType === "solana") {
38
32
  try {
39
- if (provider?.signIn) {
33
+ if (provider?.signIn || provider?.["solana:signIn"]) {
40
34
  // Create params object without address, scheme, and chainId
41
35
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
42
36
  const { address: _address, scheme: _scheme, chainId: _chainId, ...signInDataWithoutFields } = signInData;
@@ -44,25 +38,25 @@ export const signInWithWallet = async (signInData: SignInParams, walletOptions:
44
38
  const { address: _accountAddress, chainId: _accountChainId, ...accountWithoutFields } = account;
45
39
  const params = { ...signInDataWithoutFields, ...accountWithoutFields };
46
40
 
47
- const { signature } = await provider.signIn(params);
41
+ const res = provider.signIn ? await provider.signIn(params) : await provider["solana:signIn"]?.signIn(params);
42
+ let signature = "";
43
+ if (typeof res === "object" && res?.signature) {
44
+ signature = res?.signature?.toHex?.() || uint8arrayToHex(res?.signature as Uint8Array) || "";
45
+ } else if (Array.isArray(res)) {
46
+ signature = res?.[0]?.signature?.toHex?.() || uint8arrayToHex(res?.[0]?.signature as Uint8Array) || "";
47
+ } else {
48
+ signature = res || "";
49
+ }
50
+ console.log("signInWithWallet solana res:", chainType, provider, { params, signature });
48
51
  return signature;
49
52
  }
50
- const encodedMessage = new TextEncoder().encode(message);
51
- const { signature } = await provider.signMessage(encodedMessage, "utf8");
52
- return signature;
53
+
54
+ return await signMessage({ message, nonce: signInData.nonce }, walletOptions);
53
55
  } catch (error) {
54
56
  throw error as Error;
55
57
  }
56
58
  }
57
59
 
58
- if (chainType === "aptos") {
59
- const { signature } = await provider.signMessage({
60
- message,
61
- nonce: signInData.nonce,
62
- });
63
- return signature;
64
- }
65
-
66
60
  throw new Error(`signInWithWallet not supported in ${chainType}`);
67
61
  };
68
62
 
@@ -1,4 +1,5 @@
1
1
  import { WalletOptions } from "type";
2
+ import { uint8arrayToHex } from "utils/utils";
2
3
 
3
4
  /*
4
5
  const params = {
@@ -12,7 +13,10 @@ const params = {
12
13
  };
13
14
  */
14
15
 
15
- export const signMessage = async (data: { message: string; nonce: string }, walletOptions: WalletOptions) => {
16
+ export const signMessage = async (
17
+ data: { message: string; nonce: string },
18
+ walletOptions: WalletOptions,
19
+ ): Promise<string> => {
16
20
  const { chainType, account, provider } = walletOptions;
17
21
  const { message, nonce } = data;
18
22
 
@@ -24,11 +28,12 @@ export const signMessage = async (data: { message: string; nonce: string }, wall
24
28
 
25
29
  if (chainType === "evm") {
26
30
  try {
27
- const sign: string = await provider.request({
31
+ const signature: string = await provider.request({
28
32
  method: "personal_sign",
29
33
  params: [message, address],
30
34
  });
31
- return sign;
35
+ console.log("signMessage res:", chainType, provider, message, signature);
36
+ return signature;
32
37
  } catch (error) {
33
38
  throw error as Error;
34
39
  }
@@ -37,20 +42,57 @@ export const signMessage = async (data: { message: string; nonce: string }, wall
37
42
  if (chainType === "solana") {
38
43
  try {
39
44
  const encodedMessage = new TextEncoder().encode(message);
40
- const { signature } = await provider.signMessage(encodedMessage, "utf8");
41
- return signature;
45
+ let signature = "";
46
+ if (provider?.signMessage) {
47
+ const res = await provider.signMessage(encodedMessage, "utf8");
48
+ if (typeof res === "object" && res?.signature) {
49
+ signature = res?.signature?.toHex?.() || uint8arrayToHex(res?.signature as Uint8Array) || "";
50
+ } else if (Array.isArray(res)) {
51
+ signature = res?.[0]?.signature?.toHex?.() || uint8arrayToHex(res?.[0]?.signature as Uint8Array) || "";
52
+ } else {
53
+ signature = res || "";
54
+ }
55
+ console.log("signMessage solana res:", chainType, provider, message, signature);
56
+ return signature;
57
+ }
58
+ if (provider?.["solana:signMessage"]) {
59
+ const res: any[] = await provider["solana:signMessage"]?.signMessage({
60
+ message: encodedMessage,
61
+ account: { address },
62
+ });
63
+ signature = res?.[0]?.signature?.toHex?.() || uint8arrayToHex(res?.[0]?.signature as Uint8Array) || "";
64
+ console.log("signMessage solana res:", chainType, provider, message, signature);
65
+ return signature;
66
+ }
67
+ throw new Error("signMessage solana not supported");
42
68
  } catch (error) {
69
+ console.log("signMessage solana error:", chainType, provider, message, error);
43
70
  throw error as Error;
44
71
  }
45
72
  }
46
73
 
47
74
  if (chainType === "aptos") {
48
75
  try {
49
- const { signature } = await provider.signMessage({
50
- message,
51
- nonce,
52
- });
53
- return signature;
76
+ let signature = "";
77
+ if (provider?.signMessage) {
78
+ const res = await provider.signMessage({
79
+ message,
80
+ nonce,
81
+ });
82
+ signature = getAPTOSSignatureFromResponse(res);
83
+ console.log("signMessage aptos res:", chainType, provider, message, signature);
84
+ return signature;
85
+ }
86
+ if (provider?.["aptos:signMessage"]) {
87
+ const res = await provider["aptos:signMessage"]?.signMessage({
88
+ message,
89
+ nonce,
90
+ });
91
+ signature = getAPTOSSignatureFromResponse(res);
92
+ console.log("signMessage aptos res:", chainType, provider, message, signature);
93
+ return signature;
94
+ }
95
+ throw new Error("signMessage aptos not supported");
54
96
  } catch (error) {
55
97
  throw error as Error;
56
98
  }
@@ -58,3 +100,31 @@ export const signMessage = async (data: { message: string; nonce: string }, wall
58
100
 
59
101
  throw new Error(`signMessage not supported in ${chainType}`);
60
102
  };
103
+
104
+ function getAPTOSSignatureFromResponse(res: any): string {
105
+ let signature = "";
106
+ if (typeof res === "object" && res?.args?.signature) {
107
+ const oSignature = res?.args?.signature;
108
+ // signature is an object with data and signature properties
109
+ if (typeof oSignature === "object" && oSignature?.data?.data) {
110
+ // some wallet signature is an object, can be converted to hex string
111
+ if (oSignature?.data?.data?.toHex) {
112
+ signature = oSignature?.data?.data?.toHex?.() || "";
113
+ } else if (typeof oSignature?.data?.data === "object") {
114
+ // the gate wallet signature is an object like { data: { data: { } } }, need to convert to hex string
115
+ signature = uint8arrayToHex(new Uint8Array(Object.values(oSignature?.data?.data))) || "";
116
+ } else {
117
+ signature = oSignature || "";
118
+ }
119
+ // signature is an object with signature property, like petra wallet
120
+ } else if (typeof oSignature === "object" && oSignature?.signature) {
121
+ signature = oSignature?.signature?.toString("hex") || "";
122
+ } else {
123
+ signature = oSignature || "";
124
+ }
125
+ // signature is a string, like okx wallet
126
+ } else if (res?.signature && typeof res?.signature === "string") {
127
+ signature = res?.signature || "";
128
+ }
129
+ return signature;
130
+ }
@@ -2,7 +2,7 @@ export type WalletConfig = {
2
2
  id: string;
3
3
  name: string;
4
4
  rdns?: string;
5
- namespace: string;
5
+ namespace?: string;
6
6
  flag?: string;
7
7
  solana?: {
8
8
  namespace?: string;
@@ -16,6 +16,7 @@ export type WalletConfig = {
16
16
  iconAccent?: string;
17
17
  iconBackground: string;
18
18
  installed?: boolean;
19
+ deeplink?: string;
19
20
  downloadUrls?: {
20
21
  android?: string;
21
22
  ios?: string;
@@ -1,7 +1,5 @@
1
1
  import type { WalletConfig } from "../../Wallet";
2
-
3
- const backpackWalletIcon =
4
- "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyNDAgMjQwIj48cmVjdCB3aWR0aD0iMjQwIiBoZWlnaHQ9IjI0MCIgZmlsbD0iI0VCNDY0NiIvPjxwYXRoIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTEyOC45MDUgNjIuNzVjNC45NjkgMCA5LjYzMS42NjcgMTMuOTQ3IDEuOTAyQzEzOC42MjYgNTQuODA0IDEyOS44NTMgNTIgMTIwLjA4OSA1MmMtOS43ODMgMC0xOC41NzIgMi44MTUtMjIuNzg4IDEyLjcxIDQuMjg1LTEuMjc5IDguOTI2LTEuOTYgMTMuODc5LTEuOTZoMTcuNzI1Wm0tMTguODYyIDkuODg2Qzg2LjQ0NSA3Mi42MzYgNzMgOTEuMiA3MyAxMTQuMXYyMy41MjRjMCAyLjI5IDEuOTEzIDQuMTAxIDQuMjczIDQuMTAxaDg1LjQ1NGMyLjM2IDAgNC4yNzMtMS44MTEgNC4yNzMtNC4xMDFWMTE0LjFjMC0yMi45LTE1LjYzNS00MS40NjQtMzkuMjMyLTQxLjQ2NGgtMTcuNzI1Wm05LjkyNCA0MS42N2M4LjI1OSAwIDE0Ljk1NC02LjY5NiAxNC45NTQtMTQuOTU1cy02LjY5NS0xNC45NTQtMTQuOTU0LTE0Ljk1NC0xNC45NTUgNi42OTUtMTQuOTU1IDE0Ljk1NCA2LjY5NiAxNC45NTUgMTQuOTU1IDE0Ljk1NVpNNzMgMTU1LjU1NWMwLTIuMjkgMS45MTMtNC4xNDcgNC4yNzMtNC4xNDdoODUuNDU0YzIuMzYgMCA0LjI3MyAxLjg1NyA0LjI3MyA0LjE0N3YyNC44NzhjMCA0LjU4LTMuODI2IDguMjkzLTguNTQ1IDguMjkzaC03Ni45MWMtNC43MiAwLTguNTQ1LTMuNzEzLTguNTQ1LTguMjkzdi0yNC44NzhaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4K";
2
+ import icon from "./backpackWallet.svg";
5
3
 
6
4
  export const backpackWallet = (): WalletConfig => {
7
5
  return {
@@ -9,7 +7,7 @@ export const backpackWallet = (): WalletConfig => {
9
7
  name: "Backpack",
10
8
  namespace: "backpack.ethereum",
11
9
  rdns: "app.backpack.mobile",
12
- icon: backpackWalletIcon,
10
+ icon,
13
11
  iconBackground: "#0C0D10",
14
12
  downloadUrls: {
15
13
  android: "https://play.google.com/store/apps/details?id=app.backpack.mobile",
@@ -1,7 +1,5 @@
1
1
  import type { WalletConfig } from "../../Wallet";
2
-
3
- const berasigWalletIcon =
4
- "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjgiIGhlaWdodD0iMjgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgY2xpcC1wYXRoPSJ1cmwoI2EpIj48cGF0aCBmaWxsPSIjRkZEODZFIiBkPSJNMCAwaDE2NS41NTZ2MTY1LjU1NkgweiIvPjxwYXRoIGQ9Ik0xNy44MTIgNi42NDR2LS4zNWgtLjY3NWE1LjUwMiA1LjUwMiAwIDAgMC0yLjE5Ny0uNDU1aC0xLjgzOGMtLjc4IDAtMS41MjIuMTYyLTIuMTk2LjQ1NWgtLjExMnYuMDVhNS41NDIgNS41NDIgMCAwIDAtMy4yMjcgNS4wM3YxMS4yNDhoMS43MzlsLjAwMi0uMDRoOS40NjhsLjAwMi4wNGgxLjY5OFYxMS4zNzRhNS41MzcgNS41MzcgMCAwIDAtMi42NjQtNC43M1oiIGZpbGw9IiNGRkQ4NkUiLz48cGF0aCBkPSJNMjEuMDYxIDIyLjM5MnYtMTAuOTFjMC0uODI4LS4xNjQtMS42MzMtLjQ4Ny0yLjM5M2E2LjE2NSA2LjE2NSAwIDAgMC0xLjMyMy0xLjk1OSA2LjE3MyA2LjE3MyAwIDAgMC0xLjk1OS0xLjMyMyA2LjA5MiA2LjA5MiAwIDAgMC0yLjM5NC0uNDg3aC0xLjc4MmMtLjgyOSAwLTEuNjM0LjE2NC0yLjM5NC40ODdBNi4xNjUgNi4xNjUgMCAwIDAgOC43NjMgNy4xMyA2LjE3MyA2LjE3MyAwIDAgMCA3LjQzOSA5LjA5YTYuMDkyIDYuMDkyIDAgMCAwLS40ODYgMi4zOTR2MTAuOTA5SDUuNDQ0di4yNTdoMTQuODMzYS40MTMuNDEzIDAgMCAwIC4xMTMgMGgyLjE2NnYtLjI1N0gyMS4wNmguMDAxWm0tLjc5NC0uMTQ5Yy0uNDI0LS4wODctLjc1NS0uMjktLjk5LS42MDktLjUzOS0uNzMzLS40OS0xLjk3LS4yODUtMi44MDcuMTA3LS40MzYuMzA2LS43NC41OTMtLjkwNS4yMzYtLjEzNi40OTUtLjE1NS42ODItLjE0NHY0LjQ2NVpNOC41MDcgOC43MzRjLjM4My0uMTM5LjczLS4xNjYuOTY4LS4xMDkuMTUyLjAzNy4yNi4xMDYuMzA5LjIwMi4wMjMuMDQ2LjAzMy4xLjAzLjE1OS0uMDEzLjI1NS0uMjYyLjYxNC0uNzA1LjkwOWEyLjc5MyAyLjc5MyAwIDAgMS0uNjM2LjMxNiAyLjE0OCAyLjE0OCAwIDAgMS0uNjAxLjEyM2MuMTI1LS41NzMuMzQyLTEuMTEuNjM0LTEuNlptLS43MDQgMS45ODNoLjAzMmMuMjU0LS4wMDUuNTMtLjA2LjgwNy0uMTYyYTMuMTY3IDMuMTY3IDAgMCAwIC42NC0uMzE5IDIuNTU3IDIuNTU3IDAgMCAwIC42NzgtLjYyNmMuMTQtLjE5OS4yMTktLjM5Ni4yMzQtLjU4LjIxLjA1NC4zNjIuMTU3LjQzMi4yOThhLjU2Mi41NjIgMCAwIDEgLjAyMi40IDEuMjc2IDEuMjc2IDAgMCAxLS4yMDcuNDJjLS4yNTEuMzUzLS42NTguNjgyLTEuMTQ4LjkyOC0uNDkuMjQ1LS45OTkuMzc1LTEuNDMxLjM2NC0uMDI5IDAtLjA1Ni0uMDAyLS4wODMtLjAwNGwtLjAzMS0uMDAzYy4wMDItLjI0My4wMi0uNDgyLjA1NC0uNzE3Wm0tLjA1NSAxLjA5OWMuMTk3LjAxNS40MTEuMDAzLjYzNi0uMDM1LjM0NC0uMDU4LjcxMi0uMTggMS4wOC0uMzYzLjM2Ni0uMTg0LjY4My0uNDA2LjkzNS0uNjQ2LjE4LS4xNzIuMzI4LS4zNTEuNDM3LS41MzNhLjQuNCAwIDAgMSAuMDkyLjExOGMuMDYzLjEyNi4wNTMuMjkyLS4wMjQuNDc0YTEuMzc4IDEuMzc4IDAgMCAxLS4yMDguMzRjLS4yMy4yODktLjU3My41NTYtLjk3OC43NTktLjQwNS4yMDMtLjgyNC4zMTgtMS4xOTIuMzNIOC40MmExLjM2NSAxLjM2NSAwIDAgMS0uMjkzLS4wMzdjLS4xOC0uMDQ1LS4zMTMtLjEyOS0uMzgtLjI0NHYtLjE2M1ptMi4zMTguODA3Yy0uNzUyLjM3OC0xLjQzNi4zMjMtMS41OC4wMzhsLS4wMDgtLjAyYy40MjMtLjAwMS45MTgtLjEyMyAxLjQxMS0uMzcuNDk0LS4yNDguODg4LS41NyAxLjE0Mi0uOTFsLjAxLjAyYy4xNDMuMjg0LS4yMjMuODY1LS45NzUgMS4yNDJabS45MjctLjE5NmMtLjAzMy4yNjYtLjI0LjU3Ny0uNjEyLjc2My0uMzYuMTgtLjcyLjE2OC0uOTU1LjA0Ny4yNjUtLjA0Ni41NDMtLjE0LjgxMS0uMjczLjI5My0uMTQ3LjU1Mi0uMzMyLjc1Ny0uNTM3Wm0tMy4yNDUgOS45NjV2LTkuOTFjLjA5OC4wNTIuMjA5LjA5Mi4zMy4xMTkuMDEuMDguMDMyLjE1OC4wNjguMjMuMTM3LjI3My40NDMuNDI5Ljg2NC40NGguMDM4Yy4xNDQuMjAyLjM2LjM0LjYyNC4zOTIuMjgzLjA1Ny41OTYuMDEuODgtLjEzMi4yODMtLjE0My41MDgtLjM2NS42MzItLjYyNmEuOTg1Ljk4NSAwIDAgMCAuMDUtLjc2NWMuMjI5LS4zMzUuMjgyLS42NjUuMTQ4LS45MzFhLjY3NS42NzUgMCAwIDAtLjE0My0uMTkyYy4xMzQtLjI5Ni4xNTMtLjU4Ni4wMy0uODMyQS43OTcuNzk3IDAgMCAwIDExIDkuODgzYy4wODItLjI2LjA3Ny0uNTEtLjAzMi0uNzI3LS4xNDgtLjI5NS0uNDU4LS40NzMtLjg2LS41MzJIMTAuMWguMDFjLS4xNDQtLjI1My0uNDQzLS4zOTgtLjg0OC0uNDA4YTIuMTMgMi4xMyAwIDAgMC0uNDMuMDM1IDUuMzY0IDUuMzY0IDAgMCAxIDQuMjg1LTIuMTM4SDE0LjlhNS4zNzcgNS4zNzcgMCAwIDEgNS4wNiAzLjU3NmMtLjE2LS4wOS0uMzUtLjE3LS41NjgtLjI0bC0uMDA4LS4wMDMtLjAwOC0uMDAyYTEuMDcgMS4wNyAwIDAgMC0uODA2LjE2MmMtLjMxMy4yMS0uNTY5LjYtLjc2MSAxLjE2Mi0uMTc4LjA0LS40MDUuMDk0LS42MDQuMTUxYS45MzMuOTMzIDAgMCAwLS4xOS4wNmMtLjEuMDM0LS4xODMuMDY5LS4yMy4xMDEtLjIyNS4xMDctLjQ2OC4yNC0uNTkyLjMwOS0uNTItLjI5LS45NzItLjQxLTEuMzQ1LS4zNTVhMS4wNyAxLjA3IDAgMCAwLS43MDcuNDE4bC0uMDA1LjAwNi0uMDA0LjAwOGMtLjM2NC42MjEtLjQ0NSAxLjEyNi0uMjQgMS40OTguMjMxLjQxOC43NS41MzYgMSAuNTctLjIxOCAxLjE5NC0uMDczIDIuMDkyLjQzMSAyLjY2OWExLjkzIDEuOTMgMCAwIDAgMS4wNTguNjA1bC4wODQuMDE2YTIuMDM2IDIuMDM2IDAgMCAxLS4wODQtLjAxNmMtLjI4My4xODgtLjY3MS40NTktMS4wNjcuNzdhOC41MyA4LjUzIDAgMCAwLTEuMDY1Ljk2M2MtLjM1NC4zOTMtLjUzOS43MjctLjU2NCAxLjAyMWEuNjk1LjY5NSAwIDAgMCAuMjQxLjYwMWMuNTE0LjQ1OC45Mi42NzIgMS4yNzMuNjcyaC4wMzJjLjM0NC0uMDE0LjU2LS4yMjQuNzUtLjQwOWwuMDA4LS4wMDdjLjItLjE5NC41NTYtLjU3NS44MzUtLjg3N2ExMC40MSAxMC40MSAwIDAgMC0uMDE1LjkzOGMuMDI1LjgyOC4xNTkgMS40NjcuMzk4IDEuOTFINy43NDh2LjAwMlptOS45MyAwYy0uMjgyLS4zNjEtLjQ0NS0xLjAxOC0uNDczLTEuOTE3LS4wMjUtLjc4LjA2NC0xLjQ2NC4wNjUtMS40N2wuMDgzLS42MjktLjQyNy40N2MtLjAwOS4wMDktLjg3MS45NTctMS4yMTQgMS4yOWwtLjAwOC4wMDhjLS4xNi4xNTUtLjI5Ny4yOS0uNDg4LjI5Ni0uMjQ2LjAwOC0uNTktLjE4My0xLjAyNy0uNTcxYS4yOTYuMjk2IDAgMCAxLS4xMDktLjI3Yy4wMi0uMjIuMjM3LS43MzQgMS40NzYtMS43MDUuNzMtLjU3MiAxLjQ2LTEuMDIgMS40NjYtMS4wMjVsLS4wOC0uMTI2LjA5My4wMzgtLjE1OC0uMDk1LjIxMi4xMzdoLS4wMTVsLS4wNTUtLjA4OGE1LjAyIDUuMDIgMCAwIDEtLjM4NS0uMDk1IDEuNzQyIDEuNzQyIDAgMCAxLTEuMTMxLS41OTZjLS40Ny0uNTM5LS41ODctMS40MTEtLjM1LTIuNTkzbC4wMjgtLjEzOS0uMTQyLS4wMDVjLS4wMDcgMC0uNy0uMDMtLjkzNy0uNDU5LS4xNi0uMjkxLS4wODItLjcxMi4yMzItMS4yNTJhLjgyNC44MjQgMCAwIDEgLjU0Ny0uMzIyYy4zMzItLjA0OC43NTIuMDczIDEuMjQ5LjM1OWwuMDYuMDM0LjA2LS4wMzRjLjI1NC0uMTQzLjYyNC0uMzM2Ljg0MS0uNDI2LjE4NC0uMDYxLjQ4OC0uMTQxLjgzLS4yMTVsLjA3MS0uMDE2LjAyMi0uMDY1Yy4xNzgtLjU0Ni40MS0uOTE3LjY4OC0xLjEwMmEuODI0LjgyNCAwIDAgMSAuNjIzLS4xMjdjLjMyOC4xMDYuNTc4LjIzMy43NS4zOC4wODQuMzA1LjE0MS42MjEuMTcuOTQ2LS4xMi4yNC0uMjk3LjQxNS0uMy40MThsLS4xMDMuMDk4LjExNC4wODVjLjExLjA4Mi4yMTMuMTYzLjMxLjI0NXY1LjUyNmExLjYxMyAxLjYxMyAwIDAgMC0uODc2LjE5NmMtLjM4Ny4yMi0uNjUuNjEtLjc4NSAxLjE1Ny0uMDcuMjg2LS4xODMuODY2LS4xNSAxLjUzLjAzNC42Ni4yMDMgMS4yMDEuNTAxIDEuNjA3LjE2LjIxNi4zNTQuMzkxLjU4LjUyMmgtMS44Ni4wMDFaIiBmaWxsPSIjNDUxRDA3Ii8+PHBhdGggZD0iTTE0Ljk1IDExLjY0Yy0uMjMuMDY1LS40MTcuMjUxLS41NC41MzdsLS4wMDYuMDE0LS4wMDIuMDE2Yy0uMTAzLjY4Mi4yMDcuNzY2LjcyLjkwNWwuMTQ4LjA0LjAzNi0uMTA4Yy4xNjEtLjQ3Ny41NDQtMS4wMDQuNTQ3LTEuMDA5bC4wNzQtLjEtLjEwMi0uMDdjLS4zMjQtLjIyNC0uNjE4LS4zLS44NzUtLjIyNlptLjE2NiAxLjIyYy0uMi0uMDU0LS4zNDQtLjA5OC0uNDE4LS4xNzEtLjA1My0uMDUyLS4xMDEtLjE0NC0uMDYtLjQzLjA2Ny0uMTUuMTg1LS4zMzIuMzc5LS4zODguMTU5LS4wNDYuMzUtLjAwMy41NjkuMTI3YTQuNzQ1IDQuNzQ1IDAgMCAwLS40Ny44NjJaTTE3LjExIDE0LjA4NmEuOTM5LjkzOSAwIDAgMC0uMDYyLS40NjcuOTM5LjkzOSAwIDAgMC0uMjY2LS4zODdjLS4xMjgtLjEwNS0uMjctLjEzOS0uMzktLjA5My0uMTIxLjA0Ni0uMjA1LjE2Ny0uMjMuMzNhLjkzOC45MzggMCAwIDAgLjA2Mi40NjZjLjA2MS4xNi4xNTYuMjk3LjI2Ny4zODguMDkuMDc0LjE4Ny4xMTIuMjc5LjExMmEuMzA2LjMwNiAwIDAgMCAuMTEtLjAyYy4xMjEtLjA0Ni4yMDUtLjE2Ny4yMy0uMzNabS0uNTIyLS40NDdjLS4wODMuMDMyLS4xMjkuMTI1LS4xMjguMjM1bC0uMDEtLjAyNWMtLjA5Ny0uMjUyLS4wNDgtLjQ1NS4wMjgtLjQ4NGEuMDY2LjA2NiAwIDAgMSAuMDI1LS4wMDRjLjA4NCAwIC4yMzMuMTE5LjMyLjM0NWwuMDAyLjAwN2MtLjA3LS4wNzItLjE2LS4xMDQtLjIzNy0uMDc0WiIgZmlsbD0iIzQ1MUQwNyIvPjxwYXRoIGQ9Ik0xOS45MTUgMTUuNjkzYy4yMDQtLjIxNS4yOS0uNDI1LjMyNS0uNTYzbC4wMS0uMDM2LS4wMTMtLjAzNWMtLjQ4Mi0xLjMzLTEuMjM5LTEuNTUyLTEuNDU4LTEuNTg5LS4zMy0uNDEzLS44NDQtLjQ0OS0xLjAyLS40NDlsLS4wMTItLjAxNS0uMDE5LjAxNmEuMjA2LjIwNiAwIDAgMC0uMDI4LjAwMmwuMDAxLjAyMmMtLjEyNS4xMTctLjQ2LjQ3OS0uNDI4IDEuMDAyLS4xMzkuMTc0LS41NTMuODQ1LS4wMjEgMi4xNTZsLjAxNC4wMzUuMDMuMDJjLjE2Mi4xMDcuNDIyLjE3My43MzcuMTczLjMwNSAwIC42NjEtLjA2MiAxLjAyNS0uMjEyLjM1OC0uMTI5LjY0Ny0uMzA2Ljg1Ny0uNTI2Wm0tLjk0Ny4zMDNjLS43LjI4OC0xLjI3Ny4yMDctMS41MDcuMDgtLjI3My0uNjktLjI1NC0xLjE3LS4xODktMS40NTEuMDctLjMwNi4yMS0uNDUuMjEtLjQ1bC4wNDItLjA0Mi0uMDA2LS4wNTdjLS4wNDItLjM4OS4xODQtLjY4My4zMDYtLjgxLjE4My4wMS41NjMuMDcyLjc5Mi4zODlsLjAzNC4wNDcuMDU4LjAwM3MuMjAxLjAxNC40NTguMTk0Yy4yMzcuMTY2LjU3Mi41MS44MzEgMS4yMDctLjA2Mi4yMDItLjI4LjYyNC0xLjAyOC44OWwuMDEuMDI5LS4wMTEtLjAyOFoiIGZpbGw9IiM0NTFEMDciLz48cGF0aCBkPSJtMTkuNTE2IDE0LjgzMy0uMjQuMDIzdi0uMDA1YzAgLjAwMy0uMDAzLjIyLS40MjkuNDkybC0uMDYtLjE2Mi0uMTcyLS40NDljLjIzNy0uMTM2LjM2LS4zNzguMjg0LS41OC0uMDktLjIzMi0uNDEtLjMyNS0uNzE1LS4yMDhhLjc4Ny43ODcgMCAwIDAtLjA3My4wMzMuNjcuNjcgMCAwIDAtLjA3Ny4wMjRjLS4zMDUuMTE4LS40ODEuNC0uMzkyLjYzMy4wNzguMjAzLjMzMi4zLjU5OS4yNDJsLjE3MS40NDcuMDY1LjE2M2MtLjQ5OC4wODItLjY0Ni0uMDc4LS42NDgtLjA4YS4wMjcuMDI3IDAgMCAxIC4wMDQuMDA0bC0uMTk0LjE0NGMuMDE5LjAyNS4xNjIuMTk3LjU3NC4xOTcuMTI2IDAgLjI3Ny0uMDE2LjQ1Ny0uMDU4bC4wNDYtLjAxLjAwNC4wMTIuMDQyLS4wMjMuMDQ2LS4wMS0uMDA1LS4wMTMuMDQtLjAyMmMuNjktLjM4NS42NzctLjc1My42NzMtLjc5NFpNMTkuNTczIDExLjQwOGwuMDk5LjA1Ni4wODItLjEyOGMuMjg5LS40NDcuNDYzLS43MTYtLjA3LTEuMTU1bC0uMDEyLS4wMS0uMDE0LS4wMDZjLS4yODMtLjEzLS41NDYtLjE0NC0uNzYyLS4wNC0uMjQuMTE3LS40MDcuMzctLjQ5OS43NTNsLS4wMjkuMTIuMTIyLjAyNmMuMDA2LjAwMi42NDMuMTM3IDEuMDgyLjM4NFptLS41Ny0xLjA2NmMuMTgtLjA4OC4zOS0uMDMxLjU0LjAzNS4yMjIuMTg1LjI0Ny4yODYuMjQzLjM2LS4wMDYuMTA0LS4wODQuMjM0LS4xOTYuNDA3YTQuNzUgNC43NSAwIDAgMC0uOTI1LS4zMjdjLjA3Ni0uMjQzLjE4OS0uNDAzLjMzOC0uNDc1Wk0xOS4yMTggMTIuMjk3Yy0uMTI3LS4xMDQtLjI3LS4xMzgtLjM5LS4wOTItLjEyLjA0Ni0uMjA0LjE2Ni0uMjI5LjMzYS45MzguOTM4IDAgMCAwIC4wNjIuNDY2Yy4wNjEuMTYuMTU2LjI5Ny4yNjYuMzg4LjA5LjA3My4xODguMTEyLjI4LjExMmEuMzA3LjMwNyAwIDAgMCAuMTEtLjAyYy4xMjEtLjA0Ny4yMDQtLjE2Ny4yMy0uMzNhLjkzNy45MzcgMCAwIDAtLjA2Mi0uNDY3LjkzNi45MzYgMCAwIDAtLjI2Ny0uMzg3Wm0uMDUuNWMtLjA3My0uMDgzLS4xNy0uMTIxLS4yNTItLjA5LS4wNzcuMDMtLjEyMi4xMTMtLjEyNy4yMTRhLjAzNi4wMzYgMCAwIDEtLjAwMy0uMDA3Yy0uMDk2LS4yNTItLjA0OC0uNDU0LjAyOS0uNDg0LjAzNi0uMDE0LjA5Mi4wMDcuMTUuMDU0YS43MS43MSAwIDAgMSAuMTk0LjI4N2wuMDEuMDI2aC0uMDAxWiIgZmlsbD0iIzQ1MUQwNyIvPjxwYXRoIGQ9Im0xNS45OTkgMTcuNDE1LS4wNDQtLjAyYy0xLjE0NC0uNTI1LTEuOTE2LS4yMDQtMS45MjMtLjIwMWwtLjI0Ny4xMDYuMDMyLS4yNjZjLjEwOC0uODU3Ljk3OS0xLjc3NyAxLjAxNi0xLjgxNmwuMjI0LS4yMzUuMDQuMzIzYzAgLjAwNi4wOTUuNjk1LjY4MyAxLjA4Mi40ODYuMzIgMS4xNzMuMzU0IDIuMDQuMTA0YTcuNzc0IDcuNzc0IDAgMCAwIDIuODU2LTEuNjAybC4yMTMuMjJjLS4wNzMuMDcxLTEuODEgMS43My00Ljg0MiAyLjI5NmwtLjA0OS4wMDhabS0xLjMyNS0uNjNjLjM1NiAwIC44MjIuMDcgMS4zNjQuMzFhOS45OSA5Ljk5IDAgMCAwIC42MDMtLjEzNCAyLjAyNyAyLjAyNyAwIDAgMS0xLjAzMy0uMzE5IDEuOSAxLjkgMCAwIDEtLjc0Mi0uOTkzYy0uMjE1LjI2My0uNTU1LjcyOC0uNjkyIDEuMTg1LjEyNy0uMDI2LjI5Ni0uMDUuNS0uMDVaTTE1LjA4OCAyMi42MjdsLS4xOTYtLjE0OGMxLjI5My0uMzY5IDEuMTgyLTIuNDcxIDEuMTgtMi40OWwuMzA0LS4wMzhjLjAxMi4wOS4yNTQgMi4yMzUtMS4yODggMi42NzZaIiBmaWxsPSIjNDUxRDA3Ii8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgyOHYyOEgweiIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPg==";
2
+ import icon from "./berasigWallet.svg";
5
3
 
6
4
  export const berasigWallet = (): WalletConfig => {
7
5
  return {
@@ -9,7 +7,7 @@ export const berasigWallet = (): WalletConfig => {
9
7
  name: "BeraSig",
10
8
  namespace: "berasig.ethereum",
11
9
  rdns: "app.berasig",
12
- icon: berasigWalletIcon,
10
+ icon,
13
11
  iconBackground: "#ffffff",
14
12
  downloadUrls: {
15
13
  android: "https://play.google.com/store/apps/details?id=io.berasig.ios",
@@ -1,7 +1,5 @@
1
1
  import type { WalletConfig } from "../../Wallet";
2
-
3
- const binanceWalletIcon =
4
- "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMzAiIGhlaWdodD0iMTMwIiBmaWxsPSJub25lIj48cGF0aCBmaWxsPSIjMDAwIiBkPSJNMCAwaDEzMHYxMzBIMHoiLz48cGF0aCBmaWxsPSIjRjNCQTJGIiBkPSJNNDUuNTg3IDU3LjAyIDY1LjAxIDM3LjYwNmwxOS40MyAxOS40MyAxMS4yOTUtMTEuMzAzTDY1LjAxIDE1IDM0LjI4NCA0NS43MjV6TTE1IDY1LjAwNGwxMS4yOTktMTEuMjk5IDExLjI5OCAxMS4yOTlMMjYuMyA3Ni4zMDJ6TTQ1LjU4NyA3Mi45ODMgNjUuMDEgOTIuNDA2bDE5LjQzLTE5LjQzIDExLjMwMyAxMS4yODctLjAwOC4wMDctMzAuNzI1IDMwLjczNC0zMC43MjUtMzAuNzE4LS4wMTYtLjAxNnpNOTIuNDAzIDY1LjAwNiAxMDMuNyA1My43MDggMTE1IDY1LjAwNmwtMTEuMjk5IDExLjI5OXoiLz48cGF0aCBmaWxsPSIjRjNCQTJGIiBkPSJtNzYuNDcxIDY0Ljk5OC0xMS40Ni0xMS40NjktOC40NzYgOC40NzUtLjk4Ljk3Mi0yLjAwNSAyLjAwNi0uMDE2LjAxNi4wMTYuMDI0IDExLjQ2IDExLjQ1MyAxMS40NjEtMTEuNDcuMDA4LS4wMDd6Ii8+PC9zdmc+";
2
+ import icon from "./binanceWallet.svg";
5
3
 
6
4
  export const binanceWallet = (): WalletConfig => {
7
5
  return {
@@ -10,7 +8,7 @@ export const binanceWallet = (): WalletConfig => {
10
8
  namespace: "binancew3w.isExtension",
11
9
  flag: "isBinance",
12
10
  rdns: "com.binance.wallet",
13
- icon: binanceWalletIcon,
11
+ icon,
14
12
  iconBackground: "#000000",
15
13
  downloadUrls: {
16
14
  android: "https://play.google.com/store/apps/details?id=com.binance.dev",
@@ -1,7 +1,5 @@
1
1
  import type { WalletConfig } from "../../Wallet";
2
-
3
- const bitgetWalletIcon =
4
- "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSIjMDAxRjI5Ii8+CjxwYXRoIGQ9Ik0yMTkuOTQ4IDk1LjcwMjJDMjAxLjYyMyA5NS42OTI5IDE4My4zMyA5NS42ODM1IDE2NC45NDEgOTUuNzExNkMxNTMuODIyIDk1LjcxMTYgMTQ5LjY1MSAxMDkuNjcxIDE1Ny45MjEgMTE3LjkzOUwyODMuMDk4IDI0My4xMTdDMjg3LjAwNCAyNDYuNjkgMjg5LjQ0MSAyNTAuNTc0IDI4OS41MyAyNTUuNjkzQzI4OS40NDEgMjYwLjgxMiAyODcuMDA0IDI2NC42OTYgMjgzLjA5OCAyNjguMjY5TDE1Ny45MjEgMzkzLjQ0NkMxNDkuNjUxIDQwMS43MTUgMTUzLjgyMiA0MTUuNjc0IDE2NC45NDEgNDE1LjY3NEMxODMuMzMgNDE1LjcwMiAyMDEuNjIzIDQxNS42OTMgMjE5Ljk0OCA0MTUuNjgzQzIyOS4xMjIgNDE1LjY3OSAyMzguMzA1IDQxNS42NzQgMjQ3LjUxMSA0MTUuNjc0QzI1OS41NTUgNDE1LjY3NCAyNjYuNzIgNDA5LjI0IDI3My4xNTQgNDAyLjgwNUwzODYuMDQ3IDI4OS45MTJDMzk1LjA1NyAyODAuOTAyIDQwMy4xMTkgMjY4LjkzOSA0MDMuMDA5IDI1NS42OTNDNDAzLjExOSAyNDIuNDQ3IDM5NS4wNTcgMjMwLjQ4NCAzODYuMDQ3IDIyMS40NzRMMjczLjE1NCAxMDguNThDMjY2LjcyIDEwMi4xNDYgMjU5LjU1NSA5NS43MTE2IDI0Ny41MTEgOTUuNzExNkMyMzguMzA1IDk1LjcxMTYgMjI5LjEyMiA5NS43MDY5IDIxOS45NDggOTUuNzAyMloiIGZpbGw9IiMwMEYwRkYiLz4KPC9zdmc+Cg==";
2
+ import icon from "./bitgetWallet.svg";
5
3
 
6
4
  export const bitgetWallet = (): WalletConfig => {
7
5
  return {
@@ -15,7 +13,7 @@ export const bitgetWallet = (): WalletConfig => {
15
13
  namespace: "bitkeep.aptos",
16
14
  },
17
15
  rdns: "com.bitget.web3",
18
- icon: bitgetWalletIcon,
16
+ icon,
19
17
  iconAccent: "#f6851a",
20
18
  iconBackground: "#fff",
21
19
  downloadUrls: {
@@ -1,14 +1,12 @@
1
1
  import type { WalletConfig } from "../../Wallet";
2
-
3
- const bitskiWalletIcon =
4
- "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyOCAyOCI+PGcgY2xpcC1wYXRoPSJ1cmwoI2EpIj48bWFzayBpZD0iYiIgd2lkdGg9IjI4IiBoZWlnaHQ9IjI4IiB4PSIwIiB5PSIwIiBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBzdHlsZT0ibWFzay10eXBlOmx1bWluYW5jZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgyOHYyOEgwVjBaIi8+PC9tYXNrPjxnIG1hc2s9InVybCgjYikiPjxwYXRoIGZpbGw9IiNGRjI0NUEiIGQ9Ik0wIDBoMjh2MjhIMFYwWiIvPjxnIGZpbHRlcj0idXJsKCNjKSI+PHBhdGggc3Ryb2tlPSJ1cmwoI2QpIiBzdHJva2Utd2lkdGg9IjE2IiBkPSJNNyA3aDE0djE0SDdWN1oiLz48L2c+PG1hc2sgaWQ9ImUiIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgeD0iNSIgeT0iNSIgbWFza1VuaXRzPSJ1c2VyU3BhY2VPblVzZSIgc3R5bGU9Im1hc2stdHlwZTphbHBoYSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOS4wOCA3LjEwMyA1Ljk4IDEwLjIwMmMtLjIzMi4yMzItLjIxNy40MjEuMDE1LjY1NGw5LjUxMyA5LjUxM2MuMjMzLjIzMy40MjIuMjQ4LjY1NS4wMTVsNC4zNS00LjM1YzIuMjY4LTIuMjY4IDIuMDgtNC42NjkuMjktNi40NTgtMS4yOC0xLjI4LTIuNjE4LTEuNzQ2LTQuMTQ2LTEuMzI0LS4yNDcuMDczLS4zNjQuMDQ0LS40OC0uMDcyLS4wNDMtLjA0My0uMDc3LS4wOTMtLjEyMi0uMTU3bC0uMDUzLS4wNzZjLS4xNzUtLjI2Mi0uNDY2LS42Ny0uNjk4LS45MDItMS44MzMtMS44MzMtNC4xNzUtMS45OTMtNi4yMjYuMDU3di4wMDFabTQgNC0uNzQyLjc0MmMtLjIzMi4yMzMtLjQyMS4yMTgtLjY1NC0uMDE1bC0uNjk4LS42OThjLS4yMzMtLjIzMy0uMjQ4LS40MjItLjAxNS0uNjU1bC43NDItLjc0MmMuMzc4LS4zNzguOTE2LS40MjEgMS4zNTMuMDE1LjQ1LjQ1LjM5Mi45NzUuMDE0IDEuMzUzWm00Ljc1NyAyLjM0Mi0xLjk0OSAxLjk1Yy0uMjMyLjIzMi0uNDIxLjIxOC0uNjU0LS4wMTVsLS42OTgtLjY5OGMtLjIzMy0uMjMzLS4yNDgtLjQyMi0uMDE1LS42NTVsMS45NS0xLjk1Yy41NjYtLjU2NiAxLjEwNC0uNjY5IDEuNTctLjIwMy40OC40OC4zNjQgMS4wMDMtLjIwNCAxLjU3di4wMDFaTTYuODE4IDE1LjE4M2EuODU3Ljg1NyAwIDAgMCAwIDEuMjEybDYuMDYxIDYuMDYxYS44NTcuODU3IDAgMCAwIDEuMjEyLTEuMjEyTDguMDMgMTUuMTgzYS44NTcuODU3IDAgMCAwLTEuMjEyIDBaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L21hc2s+PGcgZmlsdGVyPSJ1cmwoI2YpIiBtYXNrPSJ1cmwoI2UpIj48cGF0aCBmaWxsPSJ1cmwoI2cpIiBkPSJNMjIuMTggMTMuOGE4LjE4MyA4LjE4MyAwIDAgMC0xNi4zNjYgMHYuODg5YTguMTgzIDguMTgzIDAgMCAwIDE2LjM2NiAwVjEzLjhaIi8+PHBhdGggZmlsbD0idXJsKCNoKSIgZmlsbC1vcGFjaXR5PSIuMTIiIGQ9Ik0yMi4xOCAxMy44YTguMTgzIDguMTgzIDAgMCAwLTE2LjM2NiAwdi44ODlhOC4xODMgOC4xODMgMCAwIDAgMTYuMzY2IDBWMTMuOFoiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLW9wYWNpdHk9Ii4yIiBkPSJNMjIuMTggMTMuOGE4LjE4MyA4LjE4MyAwIDAgMC0xNi4zNjYgMHYuODg5YTguMTgzIDguMTgzIDAgMCAwIDE2LjM2NiAwVjEzLjhaIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6b3ZlcmxheSIvPjwvZz48L2c+PC9nPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iZCIgeDE9IjE0IiB4Mj0iMTQiIHkxPSIwIiB5Mj0iMjcuNjQ1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iI2ZmZiIgc3RvcC1vcGFjaXR5PSIuNSIvPjxzdG9wIG9mZnNldD0iLjYzMyIgc3RvcC1jb2xvcj0iI0UwMDAzNyIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJnIiB4MT0iMTMuOTk3IiB4Mj0iMTMuOTk3IiB5MT0iNS42MTgiIHkyPSIyMi44NzIiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjZmZmIi8+PHN0b3Agb2Zmc2V0PSIuNTQ0IiBzdG9wLWNvbG9yPSIjRjlGN0ZBIi8+PHN0b3Agb2Zmc2V0PSIuNzciIHN0b3AtY29sb3I9IiNGN0Y3RjciLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNFNkU2RTYiLz48L2xpbmVhckdyYWRpZW50PjxmaWx0ZXIgaWQ9ImMiIHdpZHRoPSIyMzAiIGhlaWdodD0iMjMwIiB4PSItMTAxIiB5PSItMTAxIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz48ZmVCbGVuZCBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiLz48ZmVHYXVzc2lhbkJsdXIgcmVzdWx0PSJlZmZlY3QxX2ZvcmVncm91bmRCbHVyXzI5MDNfNDgyMjQiIHN0ZERldmlhdGlvbj0iNTAiLz48L2ZpbHRlcj48ZmlsdGVyIGlkPSJmIiB3aWR0aD0iMTM2LjM2NiIgaGVpZ2h0PSIxMzcuMjU0IiB4PSItNTQuMTg2IiB5PSItMTAuMzgyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz48ZmVDb2xvck1hdHJpeCBpbj0iU291cmNlQWxwaGEiIHJlc3VsdD0iaGFyZEFscGhhIiB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwIi8+PGZlT2Zmc2V0IGR5PSI0NCIvPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjMwIi8+PGZlQ29sb3JNYXRyaXggdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwLjI4IDAiLz48ZmVCbGVuZCBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJlZmZlY3QxX2Ryb3BTaGFkb3dfMjkwM180ODIyNCIvPjxmZUJsZW5kIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9ImVmZmVjdDFfZHJvcFNoYWRvd18yOTAzXzQ4MjI0IiByZXN1bHQ9InNoYXBlIi8+PC9maWx0ZXI+PHJhZGlhbEdyYWRpZW50IGlkPSJoIiBjeD0iMCIgY3k9IjAiIHI9IjEiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMCAxMi40NjE2IC0xMS44MjAxIDAgMTMuOTk3IDEwLjQxKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iLjQ3OSIgc3RvcC1jb2xvcj0iI2ZmZiIvPjxzdG9wIG9mZnNldD0iMSIvPjwvcmFkaWFsR3JhZGllbnQ+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMCAwaDI4djI4SDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+";
2
+ import icon from "./bitskiWallet.svg";
5
3
 
6
4
  export const bitskiWallet = (): WalletConfig => ({
7
5
  id: "bitski",
8
6
  name: "Bitski",
9
7
  namespace: "",
10
8
  flag: "isBitski",
11
- icon: bitskiWalletIcon,
9
+ icon,
12
10
  iconBackground: "#fff",
13
11
  downloadUrls: {
14
12
  chrome: "https://chrome.google.com/webstore/detail/bitski/feejiigddaafeojfddjjlmfkabimkell",