@swapkit/wallets 3.0.0-beta.0 → 3.0.0-beta.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 (132) hide show
  1. package/dist/chunk-czhtd6cy.js +4 -0
  2. package/dist/chunk-czhtd6cy.js.map +10 -0
  3. package/dist/{chunk-5m175wfy.js → chunk-p1kdg37m.js} +2 -2
  4. package/dist/{chunk-5m175wfy.js.map → chunk-p1kdg37m.js.map} +1 -1
  5. package/dist/{chunk-f76hj57k.js → chunk-q81hzyra.js} +2 -2
  6. package/dist/{chunk-f76hj57k.js.map → chunk-q81hzyra.js.map} +1 -1
  7. package/dist/chunk-qadd75nn.js +3 -0
  8. package/dist/chunk-qadd75nn.js.map +10 -0
  9. package/dist/src/bitget/index.cjs +2 -2
  10. package/dist/src/bitget/index.cjs.map +5 -5
  11. package/dist/src/bitget/index.js +2 -2
  12. package/dist/src/bitget/index.js.map +5 -5
  13. package/dist/src/coinbase/index.cjs +2 -2
  14. package/dist/src/coinbase/index.cjs.map +4 -4
  15. package/dist/src/coinbase/index.js +2 -3
  16. package/dist/src/coinbase/index.js.map +4 -4
  17. package/dist/src/ctrl/index.cjs +2 -2
  18. package/dist/src/ctrl/index.cjs.map +5 -5
  19. package/dist/src/ctrl/index.js +2 -2
  20. package/dist/src/ctrl/index.js.map +5 -5
  21. package/dist/src/evm-extensions/index.cjs +2 -2
  22. package/dist/src/evm-extensions/index.cjs.map +3 -3
  23. package/dist/src/evm-extensions/index.js +2 -3
  24. package/dist/src/evm-extensions/index.js.map +3 -3
  25. package/dist/src/exodus/index.cjs +2 -2
  26. package/dist/src/exodus/index.cjs.map +3 -3
  27. package/dist/src/exodus/index.js +2 -3
  28. package/dist/src/exodus/index.js.map +3 -3
  29. package/dist/src/index.cjs +2 -2
  30. package/dist/src/index.cjs.map +3 -4
  31. package/dist/src/index.js +2 -2
  32. package/dist/src/index.js.map +3 -4
  33. package/dist/src/keepkey/index.cjs +2 -2
  34. package/dist/src/keepkey/index.cjs.map +7 -7
  35. package/dist/src/keepkey/index.js +2 -3
  36. package/dist/src/keepkey/index.js.map +7 -7
  37. package/dist/src/keepkey-bex/index.cjs +2 -2
  38. package/dist/src/keepkey-bex/index.cjs.map +4 -4
  39. package/dist/src/keepkey-bex/index.js +2 -3
  40. package/dist/src/keepkey-bex/index.js.map +4 -4
  41. package/dist/src/keplr/index.cjs +2 -2
  42. package/dist/src/keplr/index.cjs.map +3 -3
  43. package/dist/src/keplr/index.js +2 -3
  44. package/dist/src/keplr/index.js.map +3 -3
  45. package/dist/src/keystore/index.cjs +2 -2
  46. package/dist/src/keystore/index.cjs.map +4 -4
  47. package/dist/src/keystore/index.js +2 -3
  48. package/dist/src/keystore/index.js.map +4 -4
  49. package/dist/src/ledger/index.cjs +3 -3
  50. package/dist/src/ledger/index.cjs.map +8 -8
  51. package/dist/src/ledger/index.js +3 -4
  52. package/dist/src/ledger/index.js.map +8 -8
  53. package/dist/src/okx/index.cjs +2 -2
  54. package/dist/src/okx/index.cjs.map +4 -4
  55. package/dist/src/okx/index.js +2 -3
  56. package/dist/src/okx/index.js.map +4 -4
  57. package/dist/src/onekey/index.cjs +3 -0
  58. package/dist/src/onekey/index.cjs.map +10 -0
  59. package/dist/src/onekey/index.js +3 -0
  60. package/dist/src/onekey/index.js.map +10 -0
  61. package/dist/src/phantom/index.cjs +2 -2
  62. package/dist/src/phantom/index.cjs.map +3 -3
  63. package/dist/src/phantom/index.js +2 -3
  64. package/dist/src/phantom/index.js.map +3 -3
  65. package/dist/src/polkadotjs/index.cjs +2 -2
  66. package/dist/src/polkadotjs/index.cjs.map +3 -3
  67. package/dist/src/polkadotjs/index.js +2 -3
  68. package/dist/src/polkadotjs/index.js.map +3 -3
  69. package/dist/src/radix/index.cjs +2 -2
  70. package/dist/src/radix/index.cjs.map +3 -3
  71. package/dist/src/radix/index.js +2 -3
  72. package/dist/src/radix/index.js.map +3 -3
  73. package/dist/src/talisman/index.cjs +2 -2
  74. package/dist/src/talisman/index.cjs.map +3 -3
  75. package/dist/src/talisman/index.js +2 -3
  76. package/dist/src/talisman/index.js.map +3 -3
  77. package/dist/src/trezor/index.cjs +2 -2
  78. package/dist/src/trezor/index.cjs.map +3 -3
  79. package/dist/src/trezor/index.js +2 -3
  80. package/dist/src/trezor/index.js.map +3 -3
  81. package/dist/src/walletconnect/index.cjs +2 -2
  82. package/dist/src/walletconnect/index.cjs.map +5 -5
  83. package/dist/src/walletconnect/index.js +2 -3
  84. package/dist/src/walletconnect/index.js.map +5 -5
  85. package/package.json +31 -26
  86. package/src/bitget/helpers.ts +33 -93
  87. package/src/bitget/index.ts +32 -54
  88. package/src/coinbase/index.ts +2 -2
  89. package/src/coinbase/signer.ts +46 -42
  90. package/src/ctrl/index.ts +157 -22
  91. package/src/ctrl/walletHelpers.ts +45 -94
  92. package/src/evm-extensions/index.ts +21 -40
  93. package/src/exodus/index.ts +18 -28
  94. package/src/index.ts +2 -37
  95. package/src/keepkey/chains/cosmos.ts +10 -7
  96. package/src/keepkey/chains/mayachain.ts +24 -24
  97. package/src/keepkey/chains/thorchain.ts +19 -13
  98. package/src/keepkey/chains/utxo.ts +36 -48
  99. package/src/keepkey/index.ts +9 -23
  100. package/src/keepkey-bex/index.ts +25 -23
  101. package/src/keepkey-bex/walletHelpers.ts +8 -36
  102. package/src/keplr/index.ts +6 -53
  103. package/src/keystore/helpers.ts +34 -55
  104. package/src/keystore/index.ts +15 -183
  105. package/src/ledger/clients/evm.ts +3 -7
  106. package/src/ledger/clients/thorchain/lib.ts +0 -19
  107. package/src/ledger/clients/utxo.ts +3 -2
  108. package/src/ledger/helpers/getLedgerClient.ts +2 -2
  109. package/src/ledger/index.ts +20 -21
  110. package/src/ledger/types.ts +1 -1
  111. package/src/okx/helpers.ts +23 -33
  112. package/src/okx/index.ts +4 -47
  113. package/src/onekey/evmSigner.ts +133 -0
  114. package/src/onekey/index.ts +213 -0
  115. package/src/phantom/index.ts +18 -42
  116. package/src/polkadotjs/index.ts +5 -7
  117. package/src/radix/index.ts +31 -47
  118. package/src/talisman/index.ts +15 -32
  119. package/src/trezor/index.ts +46 -45
  120. package/src/types.ts +199 -0
  121. package/src/utils.ts +54 -0
  122. package/src/walletconnect/constants.ts +1 -1
  123. package/src/walletconnect/helpers.ts +2 -2
  124. package/src/walletconnect/index.ts +36 -37
  125. package/dist/chunk-ha78se5g.js +0 -4
  126. package/dist/chunk-ha78se5g.js.map +0 -10
  127. package/dist/chunk-yvbvzc0q.js +0 -3
  128. package/dist/chunk-yvbvzc0q.js.map +0 -10
  129. package/src/bitget/bitgetWallet.ts +0 -32
  130. package/src/ctrl/ctrlWallet.ts +0 -175
  131. package/src/helpers.ts +0 -8
  132. package/src/ledger/ledgerLive.ts +0 -429
@@ -1,48 +1,55 @@
1
1
  import type { CoinbaseWalletProvider } from "@coinbase/wallet-sdk";
2
+ import type { createCoinbaseWalletSDK } from "@coinbase/wallet-sdk/dist/createCoinbaseWalletSDK.js";
2
3
  import { Chain } from "@swapkit/helpers";
3
- import type { getToolboxByChain } from "@swapkit/toolboxes/evm";
4
- import { AbstractSigner, type Provider } from "ethers";
4
+ import type { Provider } from "ethers";
5
5
 
6
- import type { createCoinbaseWalletSDK } from "@coinbase/wallet-sdk/dist/createCoinbaseWalletSDK.js";
6
+ async function getCoinbaseMobileSigner(
7
+ walletProvider: CoinbaseWalletProvider,
8
+ provider?: Provider,
9
+ ) {
10
+ const { AbstractSigner } = await import("ethers");
7
11
 
8
- class CoinbaseMobileSigner extends AbstractSigner {
9
- #coinbaseProvider: CoinbaseWalletProvider;
12
+ class CoinbaseMobileSigner extends AbstractSigner {
13
+ #coinbaseProvider: CoinbaseWalletProvider;
10
14
 
11
- constructor(coinbaseProvider: CoinbaseWalletProvider, provider?: Provider) {
12
- super(provider);
13
- this.#coinbaseProvider = coinbaseProvider;
14
- }
15
+ constructor(coinbaseProvider: CoinbaseWalletProvider, provider?: Provider) {
16
+ super(provider);
17
+ this.#coinbaseProvider = coinbaseProvider;
18
+ }
15
19
 
16
- async getAddress() {
17
- const accounts = await this.#coinbaseProvider.request<string[]>({
18
- method: "eth_requestAccounts",
19
- });
20
+ async getAddress() {
21
+ const accounts = await this.#coinbaseProvider.request<string[]>({
22
+ method: "eth_requestAccounts",
23
+ });
20
24
 
21
- if (!accounts[0]) throw new Error("No Account found");
25
+ if (!accounts[0]) throw new Error("No Account found");
22
26
 
23
- return accounts[0];
24
- }
27
+ return accounts[0];
28
+ }
25
29
 
26
- async signTransaction() {
27
- return await this.#coinbaseProvider.request<string>({
28
- method: "eth_signTransaction",
29
- });
30
- }
30
+ async signTransaction() {
31
+ return await this.#coinbaseProvider.request<string>({
32
+ method: "eth_signTransaction",
33
+ });
34
+ }
31
35
 
32
- async signMessage(message: string | Uint8Array) {
33
- return await this.#coinbaseProvider.request<string>({
34
- method: "personal_sign",
35
- params: [message, await this.getAddress()],
36
- });
37
- }
36
+ async signMessage(message: string | Uint8Array) {
37
+ return await this.#coinbaseProvider.request<string>({
38
+ method: "personal_sign",
39
+ params: [message, await this.getAddress()],
40
+ });
41
+ }
38
42
 
39
- signTypedData = () => {
40
- throw new Error("this method is not implemented");
41
- };
43
+ signTypedData = () => {
44
+ throw new Error("this method is not implemented");
45
+ };
42
46
 
43
- connect(provider: Provider) {
44
- return new CoinbaseMobileSigner(this.#coinbaseProvider, provider);
47
+ connect(provider: Provider) {
48
+ return new CoinbaseMobileSigner(this.#coinbaseProvider, provider);
49
+ }
45
50
  }
51
+
52
+ return new CoinbaseMobileSigner(walletProvider, provider);
46
53
  }
47
54
 
48
55
  export const getWalletMethods = async ({
@@ -51,7 +58,7 @@ export const getWalletMethods = async ({
51
58
  }: {
52
59
  chain: Chain;
53
60
  coinbaseSdk: ReturnType<typeof createCoinbaseWalletSDK>;
54
- }): Promise<ReturnType<ReturnType<typeof getToolboxByChain>> & { address: string }> => {
61
+ }) => {
55
62
  switch (chain) {
56
63
  case Chain.Ethereum:
57
64
  case Chain.Avalanche:
@@ -60,17 +67,14 @@ export const getWalletMethods = async ({
60
67
  case Chain.Polygon:
61
68
  case Chain.BinanceSmartChain: {
62
69
  const walletProvider = coinbaseSdk.getProvider() as CoinbaseWalletProvider;
70
+ const { getEvmToolbox, getProvider } = await import("@swapkit/toolboxes/evm");
63
71
 
64
- const { getToolboxByChain, getProvider } = await import("@swapkit/toolboxes/evm");
65
-
66
- const provider = getProvider(chain);
67
- const signer = new CoinbaseMobileSigner(walletProvider, provider);
68
- const toolbox = getToolboxByChain(chain)({ provider, signer });
72
+ const provider = await getProvider(chain);
73
+ const signer = await getCoinbaseMobileSigner(walletProvider, provider);
74
+ const toolbox = await getEvmToolbox(chain, { provider, signer });
75
+ const address = await signer.getAddress();
69
76
 
70
- return {
71
- address: await signer.getAddress(),
72
- ...toolbox,
73
- };
77
+ return { ...toolbox, address };
74
78
  }
75
79
 
76
80
  default:
package/src/ctrl/index.ts CHANGED
@@ -1,24 +1,159 @@
1
- import type { Keplr } from "@keplr-wallet/types";
2
- import type { SolanaProvider } from "@swapkit/toolboxes/solana";
3
- import type { BrowserProvider, Eip1193Provider } from "ethers";
4
-
5
- export { ctrlWallet, CTRL_SUPPORTED_CHAINS } from "./ctrlWallet";
6
-
7
- type CtrlSolana = SolanaProvider & { isXDEFI: boolean };
8
-
9
- declare global {
10
- interface Window {
11
- xfi?: {
12
- binance: Eip1193Provider;
13
- bitcoin: Eip1193Provider;
14
- bitcoincash: Eip1193Provider;
15
- dogecoin: Eip1193Provider;
16
- ethereum: BrowserProvider;
17
- keplr: Keplr;
18
- litecoin: Eip1193Provider;
19
- thorchain: Eip1193Provider;
20
- mayachain: Eip1193Provider;
21
- solana: CtrlSolana;
22
- };
1
+ import {
2
+ Chain,
3
+ ChainToChainId,
4
+ type GenericTransferParams,
5
+ SwapKitError,
6
+ WalletOption,
7
+ createWallet,
8
+ filterSupportedChains,
9
+ } from "@swapkit/helpers";
10
+
11
+ import { getWalletSupportedChains } from "../utils";
12
+ import { getCtrlAddress, getCtrlMethods, getCtrlProvider, walletTransfer } from "./walletHelpers";
13
+
14
+ export const ctrlWallet = createWallet({
15
+ name: "connectCtrl",
16
+ walletType: WalletOption.CTRL,
17
+ supportedChains: [
18
+ Chain.Arbitrum,
19
+ Chain.Avalanche,
20
+ Chain.Base,
21
+ Chain.BinanceSmartChain,
22
+ Chain.Bitcoin,
23
+ Chain.BitcoinCash,
24
+ Chain.Cosmos,
25
+ Chain.Dogecoin,
26
+ Chain.Ethereum,
27
+ Chain.Kujira,
28
+ Chain.Litecoin,
29
+ Chain.Maya,
30
+ Chain.Optimism,
31
+ Chain.Polygon,
32
+ Chain.Solana,
33
+ Chain.THORChain,
34
+ ],
35
+ connect: ({ addChain, walletType, supportedChains }) =>
36
+ async function connectCtrl(chains: Chain[]) {
37
+ const filteredChains = filterSupportedChains({ chains, supportedChains, walletType });
38
+
39
+ const promises = filteredChains.map(async (chain) => {
40
+ const address = await getCtrlAddress(chain);
41
+ const walletMethods = await getWalletMethods(chain);
42
+
43
+ addChain({ ...walletMethods, address, chain, walletType });
44
+ });
45
+
46
+ await Promise.all(promises);
47
+
48
+ return true;
49
+ },
50
+ });
51
+
52
+ export const CTRL_SUPPORTED_CHAINS = getWalletSupportedChains(ctrlWallet);
53
+
54
+ async function getWalletMethods(chain: (typeof CTRL_SUPPORTED_CHAINS)[number]) {
55
+ switch (chain) {
56
+ case Chain.Solana: {
57
+ const { getSolanaToolbox } = await import("@swapkit/toolboxes/solana");
58
+
59
+ const solanaProvider = window.xfi?.solana;
60
+
61
+ if (!solanaProvider) {
62
+ throw new SwapKitError("wallet_ctrl_not_found");
63
+ }
64
+ const toolbox = getSolanaToolbox({ signer: solanaProvider });
65
+
66
+ return { ...toolbox };
67
+ }
68
+
69
+ case Chain.Maya:
70
+ case Chain.THORChain: {
71
+ const { getCosmosToolbox, THORCHAIN_GAS_VALUE, MAYA_GAS_VALUE } = await import(
72
+ "@swapkit/toolboxes/cosmos"
73
+ );
74
+
75
+ const gasLimit = chain === Chain.Maya ? MAYA_GAS_VALUE : THORCHAIN_GAS_VALUE;
76
+ const toolbox = await getCosmosToolbox(chain);
77
+
78
+ return {
79
+ ...toolbox,
80
+ deposit: (tx: GenericTransferParams) => walletTransfer({ ...tx, recipient: "" }, "deposit"),
81
+ transfer: (tx: GenericTransferParams) => walletTransfer({ ...tx, gasLimit }, "transfer"),
82
+ };
83
+ }
84
+
85
+ case Chain.Cosmos:
86
+ case Chain.Kujira: {
87
+ const { getCosmosToolbox } = await import("@swapkit/toolboxes/cosmos");
88
+ const chainId = ChainToChainId[chain];
89
+ const provider = await getCtrlProvider(chain);
90
+
91
+ await provider?.enable(chainId);
92
+ const signer = provider?.getOfflineSignerOnlyAmino(chainId);
93
+
94
+ if (!signer) {
95
+ throw new SwapKitError("wallet_ctrl_not_found");
96
+ }
97
+
98
+ const toolbox = getCosmosToolbox(chain, { signer });
99
+
100
+ return toolbox;
101
+ }
102
+
103
+ case Chain.Bitcoin:
104
+ case Chain.BitcoinCash:
105
+ case Chain.Dogecoin:
106
+ case Chain.Litecoin: {
107
+ const { getUtxoToolbox } = await import("@swapkit/toolboxes/utxo");
108
+ const toolbox = await getUtxoToolbox(chain);
109
+
110
+ return { ...toolbox, transfer: walletTransfer };
111
+ }
112
+
113
+ case Chain.Arbitrum:
114
+ case Chain.Avalanche:
115
+ case Chain.Base:
116
+ case Chain.BinanceSmartChain:
117
+ case Chain.Ethereum:
118
+ case Chain.Optimism:
119
+ case Chain.Polygon: {
120
+ const { prepareNetworkSwitch, switchEVMWalletNetwork } = await import("@swapkit/helpers");
121
+ const { getEvmToolbox } = await import("@swapkit/toolboxes/evm");
122
+ const { BrowserProvider } = await import("ethers");
123
+ const ethereumWindowProvider = await getCtrlProvider(chain);
124
+
125
+ if (!ethereumWindowProvider) {
126
+ throw new SwapKitError("wallet_ctrl_not_found");
127
+ }
128
+
129
+ const provider = new BrowserProvider(ethereumWindowProvider, "any");
130
+ const signer = await provider.getSigner();
131
+ const toolbox = await getEvmToolbox(chain, { provider, signer });
132
+ const ctrlMethods = getCtrlMethods(provider, chain);
133
+
134
+ try {
135
+ if (chain !== Chain.Ethereum) {
136
+ const networkParams = toolbox.getNetworkParams();
137
+ await switchEVMWalletNetwork(provider, chain, networkParams);
138
+ }
139
+ } catch (_error) {
140
+ throw new SwapKitError({
141
+ errorKey: "wallet_failed_to_add_or_switch_network",
142
+ info: { wallet: WalletOption.CTRL, chain },
143
+ });
144
+ }
145
+
146
+ return prepareNetworkSwitch({
147
+ provider: window.xfi?.ethereum,
148
+ chain,
149
+ toolbox: {
150
+ ...toolbox,
151
+ ...ctrlMethods,
152
+ },
153
+ });
154
+ }
155
+
156
+ default:
157
+ return null;
23
158
  }
24
159
  }
@@ -1,5 +1,4 @@
1
1
  import type { Keplr } from "@keplr-wallet/types";
2
- import type { PublicKey } from "@solana/web3.js";
3
2
  import {
4
3
  type AssetValue,
5
4
  Chain,
@@ -11,9 +10,8 @@ import {
11
10
  WalletOption,
12
11
  } from "@swapkit/helpers";
13
12
  import { erc20ABI } from "@swapkit/helpers/contracts";
14
- import type { TransferParams } from "@swapkit/toolboxes/cosmos";
15
13
  import type { ApproveParams, CallParams, EVMTxParams } from "@swapkit/toolboxes/evm";
16
- import type { SOLToolbox, SolanaProvider } from "@swapkit/toolboxes/solana";
14
+ import type { SolanaProvider } from "@swapkit/toolboxes/solana";
17
15
  import type { BrowserProvider, Eip1193Provider } from "ethers";
18
16
 
19
17
  type TransactionMethod = "transfer" | "deposit";
@@ -35,59 +33,39 @@ export type WalletTxParams = {
35
33
  gasLimit?: string | bigint;
36
34
  };
37
35
 
38
- export function getCtrlProvider<T extends Chain>(
36
+ export async function getCtrlProvider<T extends Chain>(
39
37
  chain: T,
40
- ): T extends Chain.Solana
41
- ? SolanaProvider
42
- : T extends Chain.Cosmos | Chain.Kujira
43
- ? Keplr
44
- : T extends EVMChain
45
- ? Eip1193Provider
46
- : undefined {
38
+ ): Promise<
39
+ T extends Chain.Solana
40
+ ? SolanaProvider
41
+ : T extends Chain.Cosmos | Chain.Kujira
42
+ ? Keplr
43
+ : T extends EVMChain
44
+ ? Eip1193Provider
45
+ : undefined
46
+ > {
47
47
  if (!window.xfi) throw new SwapKitError("wallet_ctrl_not_found");
48
-
49
- switch (chain) {
50
- case Chain.Arbitrum:
51
- case Chain.Avalanche:
52
- case Chain.Base:
53
- case Chain.BinanceSmartChain:
54
- case Chain.Ethereum:
55
- case Chain.Optimism:
56
- case Chain.Polygon:
57
- // @ts-expect-error
58
- return window.xfi.ethereum;
59
-
60
- case Chain.Cosmos:
61
- case Chain.Kujira:
62
- // @ts-expect-error
63
- return window.xfi.keplr;
64
-
65
- case Chain.Bitcoin:
66
- // @ts-expect-error
67
- return window.xfi.bitcoin;
68
- case Chain.BitcoinCash:
69
- // @ts-expect-error
70
- return window.xfi.bitcoincash;
71
- case Chain.Dogecoin:
72
- // @ts-expect-error
73
- return window.xfi.dogecoin;
74
- case Chain.Litecoin:
75
- // @ts-expect-error
76
- return window.xfi.litecoin;
77
- case Chain.THORChain:
78
- // @ts-expect-error
79
- return window.xfi.thorchain;
80
- case Chain.Maya:
81
- // @ts-expect-error
82
- return window.xfi.mayachain;
83
- case Chain.Solana:
84
- // @ts-expect-error
85
- return window.xfi.solana;
86
-
87
- default:
88
- // @ts-expect-error
89
- return undefined;
90
- }
48
+ const { match } = await import("ts-pattern");
49
+
50
+ // @ts-expect-error
51
+ return match(chain as Chain)
52
+ .with(
53
+ Chain.Arbitrum,
54
+ Chain.Avalanche,
55
+ Chain.Base,
56
+ Chain.BinanceSmartChain,
57
+ Chain.Ethereum,
58
+ Chain.Optimism,
59
+ Chain.Polygon,
60
+ () => window.xfi?.ethereum,
61
+ )
62
+ .with(Chain.Cosmos, Chain.Kujira, Chain.Maya, Chain.THORChain, () => window.xfi?.keplr)
63
+ .with(Chain.Bitcoin, () => window.xfi?.bitcoin)
64
+ .with(Chain.BitcoinCash, () => window.xfi?.bitcoincash)
65
+ .with(Chain.Dogecoin, () => window.xfi?.dogecoin)
66
+ .with(Chain.Litecoin, () => window.xfi?.litecoin)
67
+ .with(Chain.Solana, () => window.xfi?.solana)
68
+ .otherwise(() => undefined);
91
69
  }
92
70
 
93
71
  async function transaction({
@@ -99,7 +77,7 @@ async function transaction({
99
77
  params: TransactionParams[];
100
78
  chain: Chain;
101
79
  }): Promise<string> {
102
- const client = getCtrlProvider(chain);
80
+ const client = await getCtrlProvider(chain);
103
81
 
104
82
  return new Promise<string>((resolve, reject) => {
105
83
  if (client && "request" in client) {
@@ -112,7 +90,7 @@ async function transaction({
112
90
  }
113
91
 
114
92
  export async function getCtrlAddress(chain: Chain) {
115
- const eipProvider = getCtrlProvider(chain) as Eip1193Provider;
93
+ const eipProvider = (await getCtrlProvider(chain)) as Eip1193Provider;
116
94
  if (!eipProvider) {
117
95
  throw new SwapKitError({
118
96
  errorKey: "wallet_provider_not_found",
@@ -121,7 +99,7 @@ export async function getCtrlAddress(chain: Chain) {
121
99
  }
122
100
 
123
101
  if ([Chain.Cosmos, Chain.Kujira].includes(chain)) {
124
- const provider = getCtrlProvider(Chain.Cosmos);
102
+ const provider = await getCtrlProvider(Chain.Cosmos);
125
103
  if (!provider || "request" in provider) {
126
104
  throw new SwapKitError({
127
105
  errorKey: "wallet_provider_not_found",
@@ -148,7 +126,7 @@ export async function getCtrlAddress(chain: Chain) {
148
126
  }
149
127
 
150
128
  if (chain === Chain.Solana) {
151
- const provider = getCtrlProvider(Chain.Solana);
129
+ const provider = await getCtrlProvider(Chain.Solana);
152
130
 
153
131
  const accounts = await provider.connect();
154
132
  return accounts.publicKey.toString();
@@ -198,35 +176,7 @@ export async function walletTransfer(
198
176
  return transaction({ method, params, chain: assetValue.chain });
199
177
  }
200
178
 
201
- export function solanaTransfer(
202
- solToolbox: ReturnType<typeof SOLToolbox>,
203
- walletPublicKey: PublicKey,
204
- ) {
205
- return async ({
206
- recipient,
207
- assetValue,
208
- memo,
209
- isProgramDerivedAddress,
210
- }: TransferParams & { isProgramDerivedAddress?: boolean }) => {
211
- const transaction = await solToolbox.createSolanaTransaction({
212
- recipient,
213
- assetValue,
214
- memo,
215
- fromPublicKey: walletPublicKey,
216
- isProgramDerivedAddress,
217
- });
218
-
219
- const signedTransaction = await window.xfi?.solana.signTransaction(transaction);
220
-
221
- if (!signedTransaction) {
222
- throw new SwapKitError("core_transaction_failed");
223
- }
224
-
225
- return solToolbox.broadcastTransaction(signedTransaction);
226
- };
227
- }
228
-
229
- export function getCtrlMethods(provider: BrowserProvider) {
179
+ export function getCtrlMethods(provider: BrowserProvider, chain: EVMChain) {
230
180
  return {
231
181
  call: async <T>({
232
182
  contractAddress,
@@ -235,17 +185,17 @@ export function getCtrlMethods(provider: BrowserProvider) {
235
185
  funcParams = [],
236
186
  txOverrides,
237
187
  }: CallParams): Promise<T> => {
238
- const contractProvider = provider;
239
188
  if (!contractAddress) {
240
189
  throw new SwapKitError("wallet_ctrl_contract_address_not_provided");
241
190
  }
242
- const { createContract, createContractTxObject, isStateChangingCall, toHexString } =
191
+ const { createContract, getCreateContractTxObject, isStateChangingCall, toHexString } =
243
192
  await import("@swapkit/toolboxes/evm");
244
193
 
245
- const isStateChanging = isStateChangingCall(abi, funcName);
194
+ const isStateChanging = isStateChangingCall({ abi, funcName });
246
195
 
247
196
  if (isStateChanging) {
248
- const { value, from, to, data } = await createContractTxObject(contractProvider, {
197
+ const createTx = getCreateContractTxObject({ provider, chain });
198
+ const { value, from, to, data } = await createTx({
249
199
  contractAddress,
250
200
  abi,
251
201
  funcName,
@@ -262,14 +212,14 @@ export function getCtrlMethods(provider: BrowserProvider) {
262
212
  } as any,
263
213
  ]);
264
214
  }
265
- const contract = createContract(contractAddress, abi, contractProvider);
215
+ const contract = createContract(contractAddress, abi, provider);
266
216
 
267
217
  const result = await contract[funcName]?.(...funcParams);
268
218
 
269
219
  return typeof result?.hash === "string" ? result?.hash : result;
270
220
  },
271
221
  approve: async ({ assetAddress, spenderAddress, amount, from }: ApproveParams) => {
272
- const { MAX_APPROVAL, createContractTxObject, toHexString } = await import(
222
+ const { MAX_APPROVAL, getCreateContractTxObject, toHexString } = await import(
273
223
  "@swapkit/toolboxes/evm"
274
224
  );
275
225
  const funcParams = [spenderAddress, BigInt(amount || MAX_APPROVAL)];
@@ -283,7 +233,8 @@ export function getCtrlMethods(provider: BrowserProvider) {
283
233
  txOverrides,
284
234
  };
285
235
 
286
- const { value, to, data } = await createContractTxObject(provider, functionCallParams);
236
+ const createTx = getCreateContractTxObject({ provider, chain });
237
+ const { value, to, data } = await createTx(functionCallParams);
287
238
 
288
239
  return provider.send("eth_sendTransaction", [
289
240
  {
@@ -3,23 +3,14 @@ import {
3
3
  ChainToHexChainId,
4
4
  type EVMChain,
5
5
  EVMChains,
6
- type EthereumWindowProvider,
7
6
  WalletOption,
8
7
  createWallet,
9
8
  filterSupportedChains,
10
9
  prepareNetworkSwitch,
11
10
  switchEVMWalletNetwork,
12
11
  } from "@swapkit/helpers";
13
- import type { NonETHToolbox } from "@swapkit/toolboxes/evm";
14
12
  import type { BrowserProvider, Eip1193Provider } from "ethers";
15
- import { getWalletSupportedChains } from "../helpers";
16
-
17
- declare const window: {
18
- ethereum: EthereumWindowProvider;
19
- trustwallet: EthereumWindowProvider;
20
- coinbaseWalletExtension: EthereumWindowProvider;
21
- braveSolana: any;
22
- } & Window;
13
+ import { getWalletSupportedChains } from "../utils";
23
14
 
24
15
  export type EVMWalletOptions =
25
16
  | WalletOption.BRAVE
@@ -48,22 +39,27 @@ const getWalletForType = (
48
39
  };
49
40
 
50
41
  export const getWeb3WalletMethods = async ({
42
+ address,
51
43
  walletProvider,
52
44
  chain,
53
45
  provider,
54
- }: { walletProvider?: Eip1193Provider; chain: EVMChain; provider: BrowserProvider }) => {
46
+ }: {
47
+ address: string;
48
+ walletProvider?: Eip1193Provider;
49
+ chain: EVMChain;
50
+ provider: BrowserProvider;
51
+ }) => {
55
52
  if (!walletProvider) throw new Error("Requested web3 wallet is not installed");
56
- const { getToolboxByChain } = await import("@swapkit/toolboxes/evm");
53
+ const { getEvmToolbox } = await import("@swapkit/toolboxes/evm");
57
54
 
58
55
  const signer = await provider.getSigner();
59
-
60
- const toolbox = getToolboxByChain(chain)({ provider, signer });
56
+ const toolbox = await getEvmToolbox(chain, { provider, signer });
61
57
 
62
58
  if (chain !== Chain.Ethereum) {
63
59
  const currentNetwork = await provider.getNetwork();
64
60
  if (currentNetwork.chainId.toString() !== ChainToHexChainId[chain]) {
65
61
  try {
66
- const networkParams = (toolbox as NonETHToolbox).getNetworkParams();
62
+ const networkParams = toolbox.getNetworkParams();
67
63
  await switchEVMWalletNetwork(provider, chain, networkParams);
68
64
  } catch (_error) {
69
65
  throw new Error(`Failed to add/switch ${chain} network: ${chain}`);
@@ -71,7 +67,11 @@ export const getWeb3WalletMethods = async ({
71
67
  }
72
68
  }
73
69
 
74
- return prepareNetworkSwitch<typeof toolbox>({ toolbox, chain, provider });
70
+ return prepareNetworkSwitch({
71
+ toolbox: { ...toolbox, getBalance: () => toolbox.getBalance(address) },
72
+ chain,
73
+ provider,
74
+ });
75
75
  };
76
76
 
77
77
  export const evmWallet = createWallet({
@@ -84,35 +84,26 @@ export const evmWallet = createWallet({
84
84
  eip1193Provider?: Eip1193Provider,
85
85
  ) {
86
86
  const filteredChains = filterSupportedChains({ chains, supportedChains, walletType });
87
- const { getProvider } = await import("@swapkit/toolboxes/evm");
88
87
  const { BrowserProvider } = await import("ethers");
89
88
 
90
89
  await Promise.all(
91
90
  filteredChains.map(async (chain) => {
92
91
  if (walletType === WalletOption.EIP6963) {
93
92
  if (!eip1193Provider) throw new Error("Missing provider");
93
+
94
94
  const provider = new BrowserProvider(eip1193Provider, "any");
95
95
  await provider.send("eth_requestAccounts", []);
96
96
  const signer = await provider.getSigner();
97
97
  const address = await signer.getAddress();
98
98
 
99
99
  const walletMethods = await getWeb3WalletMethods({
100
+ address,
100
101
  chain,
101
102
  provider,
102
103
  walletProvider: eip1193Provider,
103
104
  });
104
105
 
105
- const getBalance = async (potentialScamFilter = true) =>
106
- walletMethods.getBalance(address, potentialScamFilter, getProvider(chain));
107
-
108
- addChain({
109
- ...walletMethods,
110
- address,
111
- balance: [],
112
- chain,
113
- getBalance,
114
- walletType,
115
- });
106
+ addChain({ ...walletMethods, address, chain, walletType });
116
107
  return;
117
108
  }
118
109
 
@@ -122,26 +113,16 @@ export const evmWallet = createWallet({
122
113
  const address = await signer.getAddress();
123
114
 
124
115
  const walletMethods = await getWeb3WalletMethods({
116
+ address,
125
117
  chain,
126
118
  walletProvider: getWalletForType(walletType),
127
119
  provider: web3provider,
128
120
  });
129
121
 
130
- const getBalance = (potentialScamFilter = true) =>
131
- walletMethods.getBalance(address, potentialScamFilter, getProvider(chain));
132
-
133
122
  const disconnect = () =>
134
123
  web3provider.send("wallet_revokePermissions", [{ eth_accounts: {} }]);
135
124
 
136
- addChain({
137
- ...walletMethods,
138
- address,
139
- balance: [],
140
- chain,
141
- disconnect,
142
- getBalance,
143
- walletType,
144
- });
125
+ addChain({ ...walletMethods, address, chain, disconnect, walletType });
145
126
  }),
146
127
  );
147
128