@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
@@ -0,0 +1,213 @@
1
+ import {
2
+ Chain,
3
+ type NetworkParams,
4
+ SKConfig,
5
+ SwapKitError,
6
+ WalletOption,
7
+ addEVMWalletNetwork,
8
+ createWallet,
9
+ filterSupportedChains,
10
+ prepareNetworkSwitch,
11
+ } from "@swapkit/helpers";
12
+ import type {
13
+ BitcoinProvider,
14
+ GetAddressOptions,
15
+ GetAddressResponse,
16
+ SignTransactionOptions,
17
+ } from "sats-connect";
18
+ import { getWalletSupportedChains } from "../utils";
19
+
20
+ async function getWalletMethodsForExtension(chain: Chain) {
21
+ switch (chain) {
22
+ case Chain.Bitcoin: {
23
+ if (!window.$onekey?.btc) {
24
+ throw new SwapKitError({
25
+ errorKey: "wallet_onekey_not_found",
26
+ info: { chain },
27
+ });
28
+ }
29
+
30
+ const { Psbt } = await import("bitcoinjs-lib");
31
+ const { getUtxoToolbox } = await import("@swapkit/toolboxes/utxo");
32
+ const {
33
+ signTransaction: satsSignTransaction,
34
+ getAddress,
35
+ AddressPurpose,
36
+ BitcoinNetworkType,
37
+ } = await import("sats-connect");
38
+
39
+ let address = "";
40
+
41
+ const getProvider: () => Promise<BitcoinProvider | undefined> = () =>
42
+ new Promise((res) => res(window.$onekey?.btc as BitcoinProvider));
43
+
44
+ const getAddressOptions: GetAddressOptions = {
45
+ getProvider,
46
+ payload: {
47
+ purposes: [AddressPurpose.Payment],
48
+ message: "Address for receiving and sending payments",
49
+ network: { type: BitcoinNetworkType.Mainnet },
50
+ },
51
+ onFinish: (response: GetAddressResponse) => {
52
+ if (response.addresses[0]?.address) {
53
+ address = response.addresses[0].address;
54
+ }
55
+ },
56
+ onCancel: () => {
57
+ throw new SwapKitError("wallet_connection_rejected_by_user");
58
+ },
59
+ };
60
+
61
+ await getAddress(getAddressOptions);
62
+
63
+ async function signTransaction(psbt: any) {
64
+ let signedPsbt: any;
65
+ const signPsbtOptions: SignTransactionOptions = {
66
+ getProvider,
67
+ payload: {
68
+ message: "Sign transaction",
69
+ network: {
70
+ type: BitcoinNetworkType.Mainnet,
71
+ },
72
+ psbtBase64: psbt.toBase64(),
73
+ broadcast: false,
74
+ inputsToSign: [
75
+ {
76
+ address,
77
+ signingIndexes: psbt.txInputs.map((_: any, index: number) => index),
78
+ },
79
+ ],
80
+ },
81
+ onFinish: (response) => {
82
+ signedPsbt = Psbt.fromBase64(response.psbtBase64);
83
+ },
84
+ onCancel: () => {
85
+ throw new SwapKitError("wallet_connection_rejected_by_user");
86
+ },
87
+ };
88
+
89
+ await satsSignTransaction(signPsbtOptions);
90
+ if (!signedPsbt) throw new SwapKitError("wallet_onekey_sign_transaction_error");
91
+ return signedPsbt;
92
+ }
93
+
94
+ const signer = {
95
+ signTransaction,
96
+ getAddress: () => Promise.resolve(address),
97
+ };
98
+
99
+ const toolbox = await getUtxoToolbox(chain, { signer });
100
+
101
+ return { ...toolbox, address };
102
+ }
103
+
104
+ case Chain.Solana: {
105
+ if (!window.$onekey?.sol) {
106
+ throw new SwapKitError({
107
+ errorKey: "wallet_onekey_not_found",
108
+ info: { chain },
109
+ });
110
+ }
111
+
112
+ const { getSolanaToolbox } = await import("@swapkit/toolboxes/solana");
113
+
114
+ const signer = window.$onekey.sol;
115
+ const address = await signer.getAddress();
116
+ const toolbox = getSolanaToolbox({ signer });
117
+
118
+ return { ...toolbox, address };
119
+ }
120
+
121
+ case Chain.Arbitrum:
122
+ case Chain.Avalanche:
123
+ case Chain.Base:
124
+ case Chain.BinanceSmartChain:
125
+ case Chain.Ethereum:
126
+ case Chain.Optimism:
127
+ case Chain.Polygon: {
128
+ const { getProvider, getEvmToolbox } = await import("@swapkit/toolboxes/evm");
129
+ if (!window.$onekey?.ethereum) {
130
+ throw new SwapKitError({
131
+ errorKey: "wallet_onekey_not_found",
132
+ info: { chain },
133
+ });
134
+ }
135
+
136
+ const { BrowserProvider } = await import("ethers");
137
+ const provider = new BrowserProvider(window.$onekey.ethereum, "any");
138
+
139
+ const rpcUrl = SKConfig.get("rpcUrls")[chain];
140
+
141
+ await provider.send("eth_requestAccounts", []);
142
+ const jsonRpcProvider = await getProvider(chain, rpcUrl);
143
+ const signer = await provider.getSigner();
144
+ const address = await signer.getAddress();
145
+
146
+ const toolbox = await getEvmToolbox(chain, { provider: jsonRpcProvider, signer });
147
+ try {
148
+ if (chain !== Chain.Ethereum) {
149
+ const networkParams = toolbox.getNetworkParams() as NetworkParams;
150
+
151
+ await addEVMWalletNetwork(provider, networkParams);
152
+ }
153
+ } catch (error) {
154
+ throw new SwapKitError({
155
+ errorKey: "wallet_failed_to_add_or_switch_network",
156
+ info: { chain, error },
157
+ });
158
+ }
159
+
160
+ return {
161
+ address,
162
+ ...prepareNetworkSwitch({ toolbox, chain, provider }),
163
+ };
164
+ }
165
+
166
+ default:
167
+ throw new SwapKitError({
168
+ errorKey: "wallet_chain_not_supported",
169
+ info: { chain, wallet: WalletOption.ONEKEY },
170
+ });
171
+ }
172
+ }
173
+
174
+ export const onekeyWallet = createWallet({
175
+ name: "connectOnekeyWallet",
176
+ walletType: WalletOption.ONEKEY,
177
+ supportedChains: [
178
+ Chain.Arbitrum,
179
+ Chain.Avalanche,
180
+ Chain.Base,
181
+ Chain.BinanceSmartChain,
182
+ Chain.Bitcoin,
183
+ Chain.Ethereum,
184
+ Chain.Optimism,
185
+ Chain.Polygon,
186
+ Chain.Solana,
187
+ ],
188
+ connect: ({ addChain, walletType, supportedChains }) =>
189
+ async function connectOnekeyWallet(chains: Chain[]) {
190
+ if (!window.$onekey) {
191
+ throw new SwapKitError({
192
+ errorKey: "wallet_onekey_not_found",
193
+ info: { wallet: WalletOption.ONEKEY },
194
+ });
195
+ }
196
+
197
+ const filteredChains = filterSupportedChains({ chains, supportedChains, walletType });
198
+
199
+ await Promise.all(
200
+ filteredChains.map(async (chain) => {
201
+ const walletMethods = await getWalletMethodsForExtension(chain);
202
+
203
+ const address = (await walletMethods.getAddress()) || "F";
204
+
205
+ addChain({ ...walletMethods, chain, address, walletType });
206
+ }),
207
+ );
208
+
209
+ return true;
210
+ },
211
+ });
212
+
213
+ export const ONEKEY_WALLET_SUPPORTED_CHAINS = getWalletSupportedChains(onekeyWallet);
@@ -1,14 +1,13 @@
1
1
  import {
2
2
  type AssetValue,
3
3
  Chain,
4
+ type GenericTransferParams,
4
5
  SwapKitError,
5
6
  WalletOption,
6
- type WalletTxParams,
7
7
  createWallet,
8
8
  filterSupportedChains,
9
9
  } from "@swapkit/helpers";
10
- import type { SolanaProvider } from "@swapkit/toolboxes/solana";
11
- import { getWalletSupportedChains } from "../helpers";
10
+ import { getWalletSupportedChains } from "../utils";
12
11
 
13
12
  export const phantomWallet = createWallet({
14
13
  name: "connectPhantom",
@@ -23,7 +22,7 @@ export const phantomWallet = createWallet({
23
22
  filteredChains.map(async (chain) => {
24
23
  const { address, ...methods } = await getWalletMethods(chain);
25
24
 
26
- addChain({ ...methods, chain, address, walletType, balance: [] });
25
+ addChain({ ...methods, chain, address, walletType });
27
26
  }),
28
27
  );
29
28
 
@@ -39,14 +38,6 @@ export const phantomWallet = createWallet({
39
38
  export const PHANTOM_SUPPORTED_CHAINS = getWalletSupportedChains(phantomWallet);
40
39
  export type PhantomSupportedChain = (typeof PHANTOM_SUPPORTED_CHAINS)[number];
41
40
 
42
- declare global {
43
- interface Window {
44
- phantom: {
45
- solana: SolanaProvider;
46
- };
47
- }
48
- }
49
-
50
41
  async function getWalletMethods(chain: PhantomSupportedChain) {
51
42
  const phantom: any = window?.phantom;
52
43
 
@@ -57,31 +48,28 @@ async function getWalletMethods(chain: PhantomSupportedChain) {
57
48
  throw new SwapKitError("wallet_phantom_not_found");
58
49
  }
59
50
 
60
- const { getToolboxByChain } = await import("@swapkit/toolboxes/utxo");
51
+ const { getUtxoToolbox } = await import("@swapkit/toolboxes/utxo");
61
52
  const [{ address }] = await provider.requestAccounts();
62
-
63
- const toolbox = getToolboxByChain(chain)();
53
+ const toolbox = await getUtxoToolbox(chain);
64
54
 
65
55
  return { ...toolbox, address };
66
56
  }
67
57
 
68
58
  case Chain.Ethereum: {
69
- const { getToolboxByChain } = await import("@swapkit/toolboxes/evm");
59
+ const { getEvmToolbox } = await import("@swapkit/toolboxes/evm");
70
60
  const { BrowserProvider } = await import("ethers");
71
61
 
72
62
  const provider = new BrowserProvider(phantom?.ethereum, "any");
73
63
  const [address] = await provider.send("eth_requestAccounts", []);
74
64
 
75
65
  const signer = await provider.getSigner();
76
- const toolbox = getToolboxByChain(chain)({ signer, provider });
66
+ const toolbox = await getEvmToolbox(chain, { signer, provider });
77
67
 
78
68
  return { ...toolbox, address };
79
69
  }
80
70
 
81
71
  case Chain.Solana: {
82
- const { createSolanaTokenTransaction, SOLToolbox } = await import(
83
- "@swapkit/toolboxes/solana"
84
- );
72
+ const { getSolanaToolbox } = await import("@swapkit/toolboxes/solana");
85
73
  const provider = phantom?.solana;
86
74
  if (!provider?.isPhantom) {
87
75
  throw new SwapKitError("wallet_phantom_not_found");
@@ -89,41 +77,29 @@ async function getWalletMethods(chain: PhantomSupportedChain) {
89
77
 
90
78
  const providerConnection = await provider.connect();
91
79
  const address: string = providerConnection.publicKey.toString();
92
- const toolbox = SOLToolbox();
80
+ const toolbox = await getSolanaToolbox();
93
81
 
94
82
  const transfer = async ({
95
83
  recipient,
96
84
  assetValue,
97
85
  isProgramDerivedAddress,
98
- }: WalletTxParams & { assetValue: AssetValue; isProgramDerivedAddress?: boolean }) => {
99
- const { PublicKey, Transaction, SystemProgram } = await import("@solana/web3.js");
86
+ }: GenericTransferParams & { assetValue: AssetValue; isProgramDerivedAddress?: boolean }) => {
87
+ const { PublicKey } = await import("@solana/web3.js");
100
88
  const validateAddress = await toolbox.getAddressValidator();
89
+
101
90
  if (!(isProgramDerivedAddress || validateAddress(recipient))) {
102
91
  throw new SwapKitError("core_transaction_invalid_recipient_address");
103
92
  }
104
93
 
105
94
  const fromPubkey = new PublicKey(address);
106
- const amount = assetValue.getBaseValue("number");
107
95
  const connection = await toolbox.getConnection();
108
96
 
109
- const transaction = assetValue.isGasAsset
110
- ? new Transaction().add(
111
- SystemProgram.transfer({
112
- fromPubkey,
113
- lamports: amount,
114
- toPubkey: new PublicKey(recipient),
115
- }),
116
- )
117
- : assetValue.address
118
- ? await createSolanaTokenTransaction({
119
- amount,
120
- connection,
121
- decimals: assetValue.decimal as number,
122
- from: fromPubkey,
123
- recipient,
124
- tokenAddress: assetValue.address,
125
- })
126
- : undefined;
97
+ const transaction = await toolbox.createTransaction({
98
+ recipient,
99
+ assetValue,
100
+ sender: address,
101
+ isProgramDerivedAddress,
102
+ });
127
103
 
128
104
  if (!transaction) {
129
105
  throw new SwapKitError("core_transaction_invalid_sender_address");
@@ -5,8 +5,7 @@ import {
5
5
  createWallet,
6
6
  filterSupportedChains,
7
7
  } from "@swapkit/helpers";
8
- import type { InjectedWindow } from "@swapkit/toolboxes/substrate";
9
- import { getWalletSupportedChains } from "../helpers";
8
+ import { getWalletSupportedChains } from "../utils";
10
9
 
11
10
  export const polkadotWallet = createWallet({
12
11
  name: "connectPolkadotJs",
@@ -20,7 +19,7 @@ export const polkadotWallet = createWallet({
20
19
  filteredChains.map(async (chain) => {
21
20
  const { address, ...walletMethods } = await getWalletMethods(chain);
22
21
 
23
- addChain({ ...walletMethods, chain, address, walletType, balance: [] });
22
+ addChain({ ...walletMethods, chain, address, walletType });
24
23
  }),
25
24
  );
26
25
 
@@ -33,16 +32,15 @@ export const POLKADOT_SUPPORTED_CHAINS = getWalletSupportedChains(polkadotWallet
33
32
  async function getWalletMethods(chain: Chain) {
34
33
  switch (chain) {
35
34
  case Chain.Polkadot: {
36
- const { getToolboxByChain } = await import("@swapkit/toolboxes/substrate");
37
- const injectedWindow = window as Window & InjectedWindow;
38
- const injectedExtension = injectedWindow?.injectedWeb3?.["polkadot-js"];
35
+ const { getSubstrateToolbox } = await import("@swapkit/toolboxes/substrate");
36
+ const injectedExtension = window?.injectedWeb3?.["polkadot-js"];
39
37
 
40
38
  const rawExtension = await injectedExtension?.enable?.("polkadot-js");
41
39
  if (!rawExtension) {
42
40
  throw new SwapKitError({ errorKey: "wallet_polkadot_not_found", info: { chain } });
43
41
  }
44
42
 
45
- const toolbox = await getToolboxByChain(chain, { signer: rawExtension.signer });
43
+ const toolbox = await getSubstrateToolbox(chain, { signer: rawExtension.signer });
46
44
  const [account] = await rawExtension.accounts.get();
47
45
 
48
46
  if (!account?.address) {
@@ -1,22 +1,20 @@
1
- import {
2
- type FungibleResourcesCollectionItem,
1
+ import type {
2
+ FungibleResourcesCollectionItem,
3
3
  GatewayApiClient,
4
- type StateEntityDetailsVaultResponseItem,
5
- type StateEntityFungiblesPageRequest,
6
- type StateEntityFungiblesPageResponse,
4
+ StateEntityDetailsVaultResponseItem,
5
+ StateEntityFungiblesPageRequest,
6
+ StateEntityFungiblesPageResponse,
7
7
  } from "@radixdlt/babylon-gateway-api-sdk";
8
- import { DataRequestBuilder, RadixDappToolkit } from "@radixdlt/radix-dapp-toolkit";
9
8
  import {
10
9
  AssetValue,
11
10
  Chain,
12
11
  SKConfig,
13
- type SKConfigIntegrations,
14
12
  SwapKitError,
15
13
  WalletOption,
16
14
  createWallet,
17
15
  filterSupportedChains,
18
16
  } from "@swapkit/helpers";
19
- import { getWalletSupportedChains } from "../helpers";
17
+ import { getWalletSupportedChains } from "../utils";
20
18
 
21
19
  export const radixWallet = createWallet({
22
20
  name: "connectRadixWallet",
@@ -33,9 +31,9 @@ export const radixWallet = createWallet({
33
31
 
34
32
  await Promise.all(
35
33
  filteredChains.map(async (chain) => {
36
- const walletMethods = await getWalletMethods(radixConfig);
34
+ const walletMethods = await getWalletMethods();
37
35
 
38
- addChain({ ...walletMethods, chain, balance: [], walletType });
36
+ addChain({ ...walletMethods, chain, walletType });
39
37
  }),
40
38
  );
41
39
 
@@ -45,13 +43,15 @@ export const radixWallet = createWallet({
45
43
 
46
44
  export const RADIX_SUPPORTED_CHAINS = getWalletSupportedChains(radixWallet);
47
45
 
48
- async function fetchFungibleResources({
49
- address,
50
- networkApi,
51
- }: { address: string; networkApi: GatewayApiClient }): Promise<FungibleResourcesCollectionItem[]> {
46
+ async function fetchFungibleResources(address: string): Promise<FungibleResourcesCollectionItem[]> {
47
+ const { GatewayApiClient } = await import("@radixdlt/babylon-gateway-api-sdk");
48
+ const { applicationName } = SKConfig.get("integrations").radix;
49
+ const networkApi = GatewayApiClient.initialize({ networkId: 1, applicationName });
50
+
52
51
  let hasNextPage = true;
53
52
  let nextCursor: string | undefined;
54
53
  let fungibleResources: FungibleResourcesCollectionItem[] = [];
54
+
55
55
  const stateVersion = await currentStateVersion(networkApi);
56
56
 
57
57
  while (hasNextPage) {
@@ -82,25 +82,14 @@ async function currentStateVersion(networkApi: GatewayApiClient) {
82
82
  return networkApi.status.getCurrent().then((status) => status.ledger_state.state_version);
83
83
  }
84
84
 
85
- function getBalance({ networkApi }: { networkApi: GatewayApiClient }) {
86
- return async function getBalance(address: string) {
87
- const fungibleResources = await fetchFungibleResources({ address, networkApi });
88
- const fungibleBalances = convertResourcesToBalances({
89
- resources: fungibleResources,
90
- networkApi,
91
- });
92
- return fungibleBalances;
93
- };
94
- }
95
-
85
+ // TODO - @Towan: is that still needed with SwapKitApi.getChainBalance()?
96
86
  // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO: Split into multiple functions
97
- async function convertResourcesToBalances({
98
- resources,
99
- networkApi,
100
- }: {
101
- resources: FungibleResourcesCollectionItem[]; //| NonFungibleResourcesCollectionItem[];
102
- networkApi: GatewayApiClient;
103
- }): Promise<AssetValue[]> {
87
+ async function getBalance(address: string): Promise<AssetValue[]> {
88
+ const { GatewayApiClient } = await import("@radixdlt/babylon-gateway-api-sdk");
89
+ const resources = await fetchFungibleResources(address);
90
+ const { applicationName } = SKConfig.get("integrations").radix;
91
+ const networkApi = GatewayApiClient.initialize({ networkId: 1, applicationName });
92
+
104
93
  const balances: AssetValue[] = [];
105
94
  const BATCH_SIZE = 50;
106
95
 
@@ -124,10 +113,7 @@ async function convertResourcesToBalances({
124
113
  metaDataSymbol?.value.typed.type === "String" ? metaDataSymbol.value.typed.value : "?";
125
114
 
126
115
  if (result.details.type === "FungibleResource") {
127
- divisibilities.set(result.address, {
128
- decimals: result.details.divisibility,
129
- symbol,
130
- });
116
+ divisibilities.set(result.address, { decimals: result.details.divisibility, symbol });
131
117
  }
132
118
  }
133
119
  }
@@ -147,18 +133,20 @@ async function convertResourcesToBalances({
147
133
  }
148
134
  }
149
135
  }
150
- // Iterate through resources
136
+
151
137
  return balances;
152
138
  }
153
139
 
154
- const getWalletMethods = async (dappConfig: SKConfigIntegrations["radix"]) => {
140
+ async function getWalletMethods() {
141
+ const { RadixDappToolkit } = await import("@radixdlt/radix-dapp-toolkit");
142
+ const dappConfig = SKConfig.get("integrations").radix;
155
143
  const rdt = RadixDappToolkit({ ...dappConfig, networkId: dappConfig.network.networkId });
156
144
 
157
145
  function delay(ms: number) {
158
146
  return new Promise((resolve) => setTimeout(resolve, ms));
159
147
  }
160
148
 
161
- // Wat is dat
149
+ // TODO: @Towan - Wat is dat?
162
150
  await delay(400);
163
151
 
164
152
  function getAddress() {
@@ -169,6 +157,7 @@ const getWalletMethods = async (dappConfig: SKConfigIntegrations["radix"]) => {
169
157
  }
170
158
 
171
159
  const getNewAddress = async () => {
160
+ const { DataRequestBuilder } = await import("@radixdlt/radix-dapp-toolkit");
172
161
  rdt.walletApi.setRequestData(DataRequestBuilder.accounts().exactly(1));
173
162
  const res = await rdt.walletApi.sendRequest();
174
163
 
@@ -187,15 +176,11 @@ const getWalletMethods = async (dappConfig: SKConfigIntegrations["radix"]) => {
187
176
 
188
177
  const address = getAddress() || (await getNewAddress());
189
178
 
190
- const networkApi = GatewayApiClient.initialize({
191
- networkId: 1,
192
- applicationName: dappConfig.applicationName,
193
- });
194
-
195
179
  return {
196
180
  radixDappToolkit: rdt,
197
181
  address,
198
- getBalance: () => getBalance({ networkApi })(address),
182
+ getAddress,
183
+ getBalance: () => getBalance(address),
199
184
  transfer: (_params: { assetValue: AssetValue; recipient: string; from: string }) => {
200
185
  throw new Error("Not implemented");
201
186
  },
@@ -213,6 +198,5 @@ const getWalletMethods = async (dappConfig: SKConfigIntegrations["radix"]) => {
213
198
 
214
199
  return txResult;
215
200
  },
216
- getAddress: getAddress,
217
201
  };
218
- };
202
+ }
@@ -1,7 +1,6 @@
1
1
  import {
2
2
  Chain,
3
3
  type EVMChain,
4
- type EthereumWindowProvider,
5
4
  SwapKitError,
6
5
  WalletOption,
7
6
  createWallet,
@@ -9,10 +8,8 @@ import {
9
8
  prepareNetworkSwitch,
10
9
  switchEVMWalletNetwork,
11
10
  } from "@swapkit/helpers";
12
- import type { NonETHToolbox } from "@swapkit/toolboxes/evm";
13
- import { type InjectedWindow, Network } from "@swapkit/toolboxes/substrate";
14
11
  import type { Eip1193Provider } from "ethers";
15
- import { getWalletSupportedChains } from "../helpers";
12
+ import { getWalletSupportedChains } from "../utils";
16
13
 
17
14
  export const talismanWallet = createWallet({
18
15
  name: "connectTalisman",
@@ -34,9 +31,9 @@ export const talismanWallet = createWallet({
34
31
 
35
32
  await Promise.all(
36
33
  filteredChains.map(async (chain) => {
37
- const { address, ...walletMethods } = await getWalletMethods(chain);
34
+ const walletMethods = await getWalletMethods(chain);
38
35
 
39
- addChain({ ...walletMethods, address, balance: [], chain, walletType });
36
+ addChain({ ...walletMethods, chain, walletType });
40
37
  }),
41
38
  );
42
39
 
@@ -46,16 +43,11 @@ export const talismanWallet = createWallet({
46
43
 
47
44
  export const TALISMAN_SUPPORTED_CHAINS = getWalletSupportedChains(talismanWallet);
48
45
 
49
- declare const window: {
50
- talismanEth: EthereumWindowProvider;
51
- } & Window &
52
- InjectedWindow;
53
-
54
46
  async function getWeb3WalletMethods({
55
47
  walletProvider,
56
48
  chain,
57
49
  }: { walletProvider: Eip1193Provider | undefined; chain: EVMChain }) {
58
- const { getToolboxByChain } = await import("@swapkit/toolboxes/evm");
50
+ const { getEvmToolbox } = await import("@swapkit/toolboxes/evm");
59
51
  const { BrowserProvider } = await import("ethers");
60
52
 
61
53
  if (!walletProvider) {
@@ -67,13 +59,11 @@ async function getWeb3WalletMethods({
67
59
 
68
60
  const provider = new BrowserProvider(walletProvider, "any");
69
61
  const signer = await provider.getSigner();
70
-
71
- const toolbox = getToolboxByChain(chain)({ provider, signer });
62
+ const toolbox = await getEvmToolbox(chain, { provider, signer });
72
63
 
73
64
  try {
74
65
  if (chain !== Chain.Ethereum) {
75
- const networkParams = (toolbox as NonETHToolbox).getNetworkParams();
76
- await switchEVMWalletNetwork(provider, chain, networkParams);
66
+ await switchEVMWalletNetwork(provider, chain, toolbox.getNetworkParams());
77
67
  }
78
68
  } catch (_error) {
79
69
  throw new SwapKitError({
@@ -82,7 +72,7 @@ async function getWeb3WalletMethods({
82
72
  });
83
73
  }
84
74
 
85
- return prepareNetworkSwitch<typeof toolbox>({ toolbox, chain, provider });
75
+ return prepareNetworkSwitch({ toolbox, chain, provider });
86
76
  }
87
77
 
88
78
  async function getWalletMethods(chain: Chain) {
@@ -97,30 +87,27 @@ async function getWalletMethods(chain: Chain) {
97
87
  if (!(window.talismanEth && "send" in window.talismanEth)) {
98
88
  throw new SwapKitError({ errorKey: "wallet_talisman_not_found", info: { chain } });
99
89
  }
100
- const { getProvider } = await import("@swapkit/toolboxes/evm");
101
90
 
102
91
  const evmWallet = await getWeb3WalletMethods({ chain, walletProvider: window.talismanEth });
103
92
  const address: string = (await window.talismanEth.send("eth_requestAccounts", []))[0];
104
93
 
105
- const getBalance = async (addressOverwrite?: string, potentialScamFilter = true) =>
106
- evmWallet.getBalance(addressOverwrite || address, potentialScamFilter, getProvider(chain));
107
-
108
- return { walletMethods: { ...evmWallet, getBalance }, address };
94
+ return { ...evmWallet, address };
109
95
  }
110
96
 
111
97
  case Chain.Polkadot:
112
98
  case Chain.Chainflip: {
113
- const { getToolboxByChain } = await import("@swapkit/toolboxes/substrate");
99
+ const { getSubstrateToolbox, SubstrateNetwork } = await import(
100
+ "@swapkit/toolboxes/substrate"
101
+ );
114
102
 
115
- const injectedWindow = window as Window & InjectedWindow;
116
- const injectedExtension = injectedWindow?.injectedWeb3?.talisman;
103
+ const injectedExtension = window?.injectedWeb3?.talisman;
117
104
  const rawExtension = await injectedExtension?.enable?.("talisman");
118
105
 
119
106
  if (!rawExtension) {
120
107
  throw new SwapKitError({ errorKey: "wallet_talisman_not_enabled", info: { chain } });
121
108
  }
122
109
 
123
- const toolbox = await getToolboxByChain(chain, { signer: rawExtension.signer });
110
+ const toolbox = await getSubstrateToolbox(chain, { signer: rawExtension.signer });
124
111
  const accounts = await rawExtension.accounts.get();
125
112
 
126
113
  if (!accounts[0]?.address) {
@@ -129,13 +116,9 @@ async function getWalletMethods(chain: Chain) {
129
116
  info: { wallet: WalletOption.TALISMAN, accounts, address: accounts[0]?.address },
130
117
  });
131
118
  }
132
- const address = toolbox.convertAddress(accounts[0].address, Network[chain].prefix);
119
+ const address = toolbox.convertAddress(accounts[0].address, SubstrateNetwork[chain].prefix);
133
120
 
134
- return {
135
- ...toolbox,
136
- getAddress: () => address,
137
- address,
138
- };
121
+ return { ...toolbox, address };
139
122
  }
140
123
 
141
124
  default: