@swapkit/wallets 3.0.0-beta.2 → 3.0.0-beta.20

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 (92) hide show
  1. package/dist/{chunk-p1kdg37m.js → chunk-38ztynv0.js} +1 -1
  2. package/dist/{chunk-p1kdg37m.js.map → chunk-38ztynv0.js.map} +1 -1
  3. package/dist/chunk-4ef2xs46.js +3 -0
  4. package/dist/chunk-4ef2xs46.js.map +10 -0
  5. package/dist/chunk-qgv1myym.js +3 -0
  6. package/dist/chunk-qgv1myym.js.map +10 -0
  7. package/dist/chunk-s6xqbsy0.js +4 -0
  8. package/dist/{chunk-czhtd6cy.js.map → chunk-s6xqbsy0.js.map} +3 -3
  9. package/dist/{chunk-qadd75nn.js → chunk-sygzrjje.js} +2 -2
  10. package/dist/{chunk-qadd75nn.js.map → chunk-sygzrjje.js.map} +3 -3
  11. package/dist/chunk-w07sv0jv.js +3 -0
  12. package/dist/chunk-w07sv0jv.js.map +10 -0
  13. package/dist/chunk-y0g3prs9.js +3 -0
  14. package/dist/chunk-y0g3prs9.js.map +10 -0
  15. package/dist/src/bitget/index.cjs +2 -2
  16. package/dist/src/bitget/index.cjs.map +3 -3
  17. package/dist/src/bitget/index.js +2 -2
  18. package/dist/src/bitget/index.js.map +3 -3
  19. package/dist/src/coinbase/index.js +1 -1
  20. package/dist/src/ctrl/index.cjs +2 -2
  21. package/dist/src/ctrl/index.cjs.map +3 -3
  22. package/dist/src/ctrl/index.js +2 -2
  23. package/dist/src/ctrl/index.js.map +3 -3
  24. package/dist/src/evm-extensions/index.js +1 -1
  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 -2
  28. package/dist/src/exodus/index.js.map +3 -3
  29. package/dist/src/index.js +1 -1
  30. package/dist/src/keepkey/index.cjs +2 -2
  31. package/dist/src/keepkey/index.cjs.map +4 -4
  32. package/dist/src/keepkey/index.js +2 -2
  33. package/dist/src/keepkey/index.js.map +4 -4
  34. package/dist/src/keepkey-bex/index.js +1 -1
  35. package/dist/src/keplr/index.js +1 -1
  36. package/dist/src/keystore/index.cjs +2 -2
  37. package/dist/src/keystore/index.cjs.map +3 -3
  38. package/dist/src/keystore/index.js +2 -2
  39. package/dist/src/keystore/index.js.map +3 -3
  40. package/dist/src/ledger/index.cjs +3 -3
  41. package/dist/src/ledger/index.cjs.map +12 -11
  42. package/dist/src/ledger/index.js +3 -3
  43. package/dist/src/ledger/index.js.map +12 -11
  44. package/dist/src/okx/index.cjs +2 -2
  45. package/dist/src/okx/index.cjs.map +3 -3
  46. package/dist/src/okx/index.js +2 -2
  47. package/dist/src/okx/index.js.map +3 -3
  48. package/dist/src/onekey/index.cjs +2 -2
  49. package/dist/src/onekey/index.cjs.map +3 -3
  50. package/dist/src/onekey/index.js +2 -2
  51. package/dist/src/onekey/index.js.map +3 -3
  52. package/dist/src/phantom/index.js +1 -1
  53. package/dist/src/polkadotjs/index.js +1 -1
  54. package/dist/src/radix/index.js +1 -1
  55. package/dist/src/talisman/index.js +1 -1
  56. package/dist/src/trezor/index.cjs +2 -2
  57. package/dist/src/trezor/index.cjs.map +3 -3
  58. package/dist/src/trezor/index.js +2 -2
  59. package/dist/src/trezor/index.js.map +3 -3
  60. package/dist/src/walletconnect/index.cjs +2 -2
  61. package/dist/src/walletconnect/index.cjs.map +3 -3
  62. package/dist/src/walletconnect/index.js +2 -2
  63. package/dist/src/walletconnect/index.js.map +3 -3
  64. package/package.json +22 -22
  65. package/src/bitget/helpers.ts +1 -2
  66. package/src/cosmostation/index.ts +141 -0
  67. package/src/ctrl/walletHelpers.ts +82 -70
  68. package/src/exodus/index.ts +1 -2
  69. package/src/keepkey/chains/mayachain.ts +1 -1
  70. package/src/keepkey/chains/thorchain.ts +1 -1
  71. package/src/keystore/helpers.ts +2 -4
  72. package/src/ledger/clients/cosmos.ts +2 -2
  73. package/src/ledger/clients/evm.ts +1 -1
  74. package/src/ledger/clients/utxo.ts +3 -5
  75. package/src/ledger/clients/xrp.ts +66 -0
  76. package/src/ledger/helpers/getLedgerAddress.ts +12 -3
  77. package/src/ledger/helpers/getLedgerClient.ts +4 -0
  78. package/src/ledger/helpers/getLedgerTransport.ts +4 -2
  79. package/src/ledger/index.ts +11 -1
  80. package/src/ledger/interfaces/CosmosLedgerInterface.ts +1 -1
  81. package/src/okx/helpers.ts +2 -1
  82. package/src/onekey/index.ts +1 -1
  83. package/src/trezor/evmSigner.ts +3 -3
  84. package/src/trezor/index.ts +14 -4
  85. package/src/types.ts +3 -0
  86. package/src/utils.ts +4 -0
  87. package/src/walletconnect/index.ts +2 -2
  88. package/dist/chunk-bhfpfqc3.js +0 -3
  89. package/dist/chunk-bhfpfqc3.js.map +0 -10
  90. package/dist/chunk-czhtd6cy.js +0 -4
  91. package/dist/chunk-q81hzyra.js +0 -3
  92. package/dist/chunk-q81hzyra.js.map +0 -10
@@ -51,7 +51,7 @@ class EVMLedgerInterface extends AbstractSigner {
51
51
 
52
52
  createTransportAndLedger = async () => {
53
53
  const transport = await getLedgerTransport();
54
- const { default: EthereumApp } = await import("@ledgerhq/hw-app-eth");
54
+ const EthereumApp = (await import("@ledgerhq/hw-app-eth")).default;
55
55
 
56
56
  this.ledgerApp = new EthereumApp(transport);
57
57
  };
@@ -7,7 +7,7 @@ import {
7
7
  getWalletFormatFor,
8
8
  } from "@swapkit/helpers";
9
9
  import type { UTXOType } from "@swapkit/toolboxes/utxo";
10
- import type { Psbt } from "bitcoinjs-lib";
10
+ import { type Psbt, Transaction } from "bitcoinjs-lib";
11
11
 
12
12
  import { getLedgerTransport } from "../helpers/getLedgerTransport";
13
13
 
@@ -22,8 +22,6 @@ const signUTXOTransaction = async (
22
22
  { psbt, inputUtxos, btcApp, derivationPath }: Params,
23
23
  options?: Partial<CreateTransactionArg>,
24
24
  ) => {
25
- const { Transaction } = await import("bitcoinjs-lib");
26
-
27
25
  const inputs = inputUtxos.map((item) => {
28
26
  const utxoTx = Transaction.fromHex(item.txHex || "");
29
27
  const splitTx = btcApp.splitTransaction(utxoTx.toHex(), utxoTx.hasWitnesses());
@@ -75,7 +73,7 @@ const BaseLedgerUTXO = ({
75
73
 
76
74
  async function createTransportWebUSB() {
77
75
  transport = await getLedgerTransport();
78
- const { default: BitcoinApp } = await import("@ledgerhq/hw-app-btc");
76
+ const BitcoinApp = (await import("@ledgerhq/hw-app-btc")).default;
79
77
 
80
78
  btcApp = new BitcoinApp({ transport, currency: chain });
81
79
  }
@@ -91,7 +89,7 @@ const BaseLedgerUTXO = ({
91
89
  return {
92
90
  connect: async () => {
93
91
  await checkBtcAppAndCreateTransportWebUSB(false);
94
- const { default: BitcoinApp } = await import("@ledgerhq/hw-app-btc");
92
+ const BitcoinApp = (await import("@ledgerhq/hw-app-btc")).default;
95
93
 
96
94
  btcApp = new BitcoinApp({ transport, currency: chain });
97
95
  },
@@ -0,0 +1,66 @@
1
+ import type Xrp from "@ledgerhq/hw-app-xrp";
2
+ import type Transport from "@ledgerhq/hw-transport";
3
+ import {
4
+ Chain,
5
+ type DerivationPathArray,
6
+ NetworkDerivationPath,
7
+ derivationPathToString,
8
+ } from "@swapkit/helpers";
9
+ import type { Transaction } from "@swapkit/toolboxes/ripple";
10
+ import { encode } from "ripple-binary-codec";
11
+ import type { Payment } from "xrpl";
12
+ import { getLedgerTransport } from "../helpers";
13
+
14
+ const TF_FULLY_CANONICAL_SIG = 2147483648;
15
+
16
+ function cleanTransactionObject(obj: Record<string, any>) {
17
+ const cleaned: Record<string, any> = {};
18
+ for (const key in obj) {
19
+ if (obj[key] !== null && obj[key] !== undefined) {
20
+ cleaned[key] = obj[key];
21
+ }
22
+ }
23
+ return cleaned;
24
+ }
25
+
26
+ async function establishConnection(transport: Transport) {
27
+ const { default: Xrp } = await import("@ledgerhq/hw-app-xrp");
28
+ return new Xrp(transport);
29
+ }
30
+
31
+ function fetchAddressAndPublicKey({
32
+ instance,
33
+ derivationPath,
34
+ }: { instance: Xrp; derivationPath: string }) {
35
+ return instance.getAddress(derivationPath);
36
+ }
37
+
38
+ export const XRPLedger = async (derivationPath?: DerivationPathArray) => {
39
+ const path = derivationPathToString(derivationPath || NetworkDerivationPath[Chain.Ripple]);
40
+ const transport = await getLedgerTransport();
41
+ const xrpInstance = await establishConnection(transport);
42
+
43
+ const { address, publicKey } = await fetchAddressAndPublicKey({
44
+ instance: xrpInstance,
45
+ derivationPath: path,
46
+ });
47
+
48
+ async function sign(transaction: Payment | Transaction) {
49
+ const { hashes } = await import("@swapkit/toolboxes/ripple");
50
+ const cleanedTxWithPubKey = cleanTransactionObject(transaction);
51
+ const transactionJSON = {
52
+ ...cleanedTxWithPubKey,
53
+ Flags: transaction.Flags || TF_FULLY_CANONICAL_SIG,
54
+ SigningPubKey: publicKey.toUpperCase(),
55
+ };
56
+
57
+ const transactionToSignOnLedger = encode(transactionJSON);
58
+ const txnSignature = await xrpInstance.signTransaction(path, transactionToSignOnLedger);
59
+ const tx_blob = encode({ ...transactionJSON, TxnSignature: txnSignature });
60
+ const hash = hashes.hashSignedTx(tx_blob);
61
+
62
+ return { tx_blob, hash };
63
+ }
64
+
65
+ return { address, sign };
66
+ };
@@ -1,15 +1,19 @@
1
1
  import { Chain, SwapKitError, WalletOption } from "@swapkit/helpers";
2
2
 
3
+ import type { XRPLedger } from "../clients/xrp";
3
4
  import type { LEDGER_SUPPORTED_CHAINS } from "../index";
4
5
  import type { CosmosLedgerClients, EVMLedgerClients, UTXOLedgerClients } from "../types";
5
6
  import type { getLedgerClient } from "./getLedgerClient";
6
7
 
7
- export const getLedgerAddress = async ({
8
+ export const getLedgerAddress = async <
9
+ T extends (typeof LEDGER_SUPPORTED_CHAINS)[number],
10
+ L extends Awaited<ReturnType<typeof getLedgerClient<T>>>,
11
+ >({
8
12
  chain,
9
13
  ledgerClient,
10
14
  }: {
11
- chain: (typeof LEDGER_SUPPORTED_CHAINS)[number];
12
- ledgerClient: Awaited<ReturnType<typeof getLedgerClient>>;
15
+ chain: T;
16
+ ledgerClient: L;
13
17
  }) => {
14
18
  if (!ledgerClient) return "";
15
19
 
@@ -40,6 +44,11 @@ export const getLedgerAddress = async ({
40
44
 
41
45
  return chain === Chain.BitcoinCash ? address.replace("bitcoincash:", "") : address;
42
46
  }
47
+
48
+ case Chain.Ripple: {
49
+ return (ledgerClient as Awaited<ReturnType<typeof XRPLedger>>).address;
50
+ }
51
+
43
52
  default:
44
53
  throw new SwapKitError("wallet_chain_not_supported", { wallet: WalletOption.LEDGER, chain });
45
54
  }
@@ -18,6 +18,7 @@ import {
18
18
  DogecoinLedger,
19
19
  LitecoinLedger,
20
20
  } from "../clients/utxo";
21
+ import { XRPLedger } from "../clients/xrp";
21
22
 
22
23
  type LedgerSignerMap = {
23
24
  [Chain.Arbitrum]: ReturnType<typeof ArbitrumLedger>;
@@ -33,6 +34,7 @@ type LedgerSignerMap = {
33
34
  [Chain.Litecoin]: ReturnType<typeof LitecoinLedger>;
34
35
  [Chain.Optimism]: ReturnType<typeof OptimismLedger>;
35
36
  [Chain.Polygon]: ReturnType<typeof PolygonLedger>;
37
+ [Chain.Ripple]: ReturnType<typeof XRPLedger>;
36
38
  [Chain.THORChain]: THORChainLedger;
37
39
  };
38
40
 
@@ -60,6 +62,8 @@ export const getLedgerClient = async <T extends LedgerSupportedChain>({
60
62
  return DogecoinLedger(derivationPath) as LedgerSignerMap[T];
61
63
  case Chain.Litecoin:
62
64
  return LitecoinLedger(derivationPath) as LedgerSignerMap[T];
65
+ case Chain.Ripple:
66
+ return XRPLedger(derivationPath) as LedgerSignerMap[T];
63
67
 
64
68
  case Chain.Arbitrum:
65
69
  case Chain.Avalanche:
@@ -20,7 +20,9 @@ const getLedgerDevices = async () => {
20
20
  const existingDevices = devices.filter((d) => d.vendorId === ledgerUSBVendorId);
21
21
  if (existingDevices.length > 0) return existingDevices[0];
22
22
 
23
- return navigatorUsb?.requestDevice({ filters: [{ vendorId: ledgerUSBVendorId }] });
23
+ return navigatorUsb?.requestDevice({
24
+ filters: [{ vendorId: ledgerUSBVendorId }],
25
+ });
24
26
  };
25
27
 
26
28
  export const getLedgerTransport = async () => {
@@ -57,7 +59,7 @@ export const getLedgerTransport = async () => {
57
59
  throw new SwapKitError("wallet_ledger_connection_claimed", error);
58
60
  }
59
61
 
60
- const { default: Transport } = await import("@ledgerhq/hw-transport-webusb");
62
+ const Transport = (await import("@ledgerhq/hw-transport-webusb")).default;
61
63
  const isSupported = await Transport.isSupported();
62
64
  if (!isSupported) throw new Error("WebUSB not supported");
63
65
 
@@ -32,6 +32,7 @@ export const ledgerWallet = createWallet({
32
32
  Chain.Litecoin,
33
33
  Chain.Optimism,
34
34
  Chain.Polygon,
35
+ Chain.Ripple,
35
36
  Chain.THORChain,
36
37
  ],
37
38
  walletType: WalletOption.LEDGER,
@@ -183,7 +184,7 @@ async function getWalletMethods({
183
184
  case Chain.THORChain: {
184
185
  const { SignMode } = await import("cosmjs-types/cosmos/tx/signing/v1beta1/signing.js");
185
186
  const { TxRaw } = await import("cosmjs-types/cosmos/tx/v1beta1/tx.js");
186
- const { encodePubkey, makeAuthInfoBytes } = await import("@cosmjs/proto-signing");
187
+ const { encodePubkey, makeAuthInfoBytes } = (await import("@cosmjs/proto-signing")).default;
187
188
  const {
188
189
  createStargateClient,
189
190
  buildEncodedTxBody,
@@ -267,6 +268,15 @@ async function getWalletMethods({
267
268
  return { ...toolbox, address, deposit, transfer, signMessage };
268
269
  }
269
270
 
271
+ case Chain.Ripple: {
272
+ const { getRippleToolbox } = await import("@swapkit/toolboxes/ripple");
273
+ const signer = await getLedgerClient({ chain, derivationPath });
274
+ const address = signer.address;
275
+ const toolbox = await getRippleToolbox({ signer });
276
+
277
+ return { ...toolbox, address };
278
+ }
279
+
270
280
  default:
271
281
  throw new Error("Unsupported chain");
272
282
  }
@@ -32,7 +32,7 @@ export abstract class CosmosLedgerInterface {
32
32
  }
33
33
 
34
34
  case "cosmos": {
35
- const { default: CosmosApp } = await import("@ledgerhq/hw-app-cosmos");
35
+ const CosmosApp = (await import("@ledgerhq/hw-app-cosmos")).default;
36
36
  this.ledgerApp =
37
37
  forceReconnect || !this.ledgerApp ? new CosmosApp(this.transport) : this.ledgerApp;
38
38
  }
@@ -6,6 +6,7 @@ import {
6
6
  prepareNetworkSwitch,
7
7
  switchEVMWalletNetwork,
8
8
  } from "@swapkit/helpers";
9
+ import { Psbt } from "bitcoinjs-lib";
9
10
  import type { Eip1193Provider } from "ethers";
10
11
 
11
12
  const cosmosTransfer =
@@ -81,7 +82,7 @@ export async function getWalletMethods(chain: Chain) {
81
82
  if (!(window.okxwallet && "bitcoin" in window.okxwallet)) {
82
83
  throw new Error("No bitcoin okxwallet found");
83
84
  }
84
- const { Psbt } = await import("bitcoinjs-lib");
85
+
85
86
  const { getUtxoToolbox } = await import("@swapkit/toolboxes/utxo");
86
87
 
87
88
  const { bitcoin: wallet } = window.okxwallet;
@@ -9,6 +9,7 @@ import {
9
9
  filterSupportedChains,
10
10
  prepareNetworkSwitch,
11
11
  } from "@swapkit/helpers";
12
+ import { Psbt } from "bitcoinjs-lib";
12
13
  import type {
13
14
  BitcoinProvider,
14
15
  GetAddressOptions,
@@ -27,7 +28,6 @@ async function getWalletMethodsForExtension(chain: Chain) {
27
28
  });
28
29
  }
29
30
 
30
- const { Psbt } = await import("bitcoinjs-lib");
31
31
  const { getUtxoToolbox } = await import("@swapkit/toolboxes/utxo");
32
32
  const {
33
33
  signTransaction: satsSignTransaction,
@@ -35,7 +35,7 @@ export async function getEVMSigner({ chain, derivationPath, provider }: TrezorEV
35
35
 
36
36
  getAddress = async () => {
37
37
  if (!this.address) {
38
- const { default: TrezorConnect } = await import("@trezor/connect-web");
38
+ const TrezorConnect = (await import("@trezor/connect-web")).default;
39
39
 
40
40
  const result = await TrezorConnect.ethereumGetAddress({
41
41
  path: derivationPathToString(this.derivationPath),
@@ -56,7 +56,7 @@ export async function getEVMSigner({ chain, derivationPath, provider }: TrezorEV
56
56
  };
57
57
 
58
58
  signMessage = async (message: string) => {
59
- const { default: TrezorConnect } = await import("@trezor/connect-web");
59
+ const TrezorConnect = (await import("@trezor/connect-web")).default;
60
60
 
61
61
  const result = await TrezorConnect.ethereumSignMessage({
62
62
  path: derivationPathToString(this.derivationPath),
@@ -107,7 +107,7 @@ export async function getEVMSigner({ chain, derivationPath, provider }: TrezorEV
107
107
  throw new SwapKitError({ errorKey: "wallet_missing_params", info: { gasPrice } });
108
108
  }
109
109
 
110
- const { default: TrezorConnect } = await import("@trezor/connect-web");
110
+ const TrezorConnect = (await import("@trezor/connect-web")).default;
111
111
  const { toHexString } = await import("@swapkit/toolboxes/evm");
112
112
  const { Transaction } = await import("ethers");
113
113
 
@@ -68,7 +68,7 @@ async function getTrezorWallet<T extends Chain>({
68
68
  const coin = chain.toLowerCase();
69
69
 
70
70
  const getAddress = async (path: DerivationPathArray = derivationPath) => {
71
- const { default: TrezorConnect } = await import("@trezor/connect-web");
71
+ const TrezorConnect = (await import("@trezor/connect-web")).default;
72
72
  const { success, payload } = await TrezorConnect.getAddress({
73
73
  path: derivationPathToString(path),
74
74
  coin,
@@ -95,7 +95,7 @@ async function getTrezorWallet<T extends Chain>({
95
95
  const address = await getAddress();
96
96
 
97
97
  const signTransaction = async (psbt: Psbt, inputs: UTXOType[], memo = "") => {
98
- const { default: TrezorConnect } = await import("@trezor/connect-web");
98
+ const TrezorConnect = (await import("@trezor/connect-web")).default;
99
99
  const address_n = derivationPath.map((pathElement, index) =>
100
100
  index < 3 ? ((pathElement as number) | 0x80000000) >>> 0 : (pathElement as number),
101
101
  );
@@ -229,11 +229,21 @@ export const trezorWallet = createWallet({
229
229
  });
230
230
  }
231
231
 
232
- const { default: TrezorConnect } = await import("@trezor/connect-web");
232
+ const TrezorConnect = (await import("@trezor/connect-web")).default;
233
233
  const { success } = await TrezorConnect.getDeviceState();
234
234
 
235
235
  if (!success) {
236
- const manifest = SKConfig.get("integrations").trezor || { appUrl: "", email: "" };
236
+ const trezorConfig = SKConfig.get("integrations").trezor;
237
+ const manifest = trezorConfig
238
+ ? {
239
+ ...trezorConfig,
240
+ appName: (trezorConfig as any).appName || "SwapKit",
241
+ }
242
+ : {
243
+ appUrl: "",
244
+ email: "",
245
+ appName: "SwapKit",
246
+ };
237
247
  TrezorConnect.init({ lazyLoad: true, manifest });
238
248
  }
239
249
 
package/src/types.ts CHANGED
@@ -12,6 +12,7 @@ import type { BrowserProvider, Eip1193Provider } from "ethers";
12
12
  import type { SubstrateInjectedExtension } from "@swapkit/toolboxes/substrate";
13
13
  import type { bitgetWallet } from "./bitget";
14
14
  import type { coinbaseWallet } from "./coinbase";
15
+ import type { cosmostationWallet } from "./cosmostation";
15
16
  import type { ctrlWallet } from "./ctrl";
16
17
  import type { evmWallet } from "./evm-extensions";
17
18
  import type { exodusWallet } from "./exodus";
@@ -34,6 +35,7 @@ export type SKWallets = {
34
35
  [WalletOption.BRAVE]: typeof evmWallet;
35
36
  [WalletOption.COINBASE_MOBILE]: typeof coinbaseWallet;
36
37
  [WalletOption.COINBASE_WEB]: typeof evmWallet;
38
+ [WalletOption.COSMOSTATION]: typeof cosmostationWallet;
37
39
  [WalletOption.CTRL]: typeof ctrlWallet;
38
40
  [WalletOption.EIP6963]: typeof evmWallet;
39
41
  [WalletOption.EXODUS]: typeof exodusWallet;
@@ -64,6 +66,7 @@ export type SKWalletsSupportedChains = {
64
66
  [WalletOption.BRAVE]: typeof evmWallet.connectEVMWallet.supportedChains;
65
67
  [WalletOption.COINBASE_MOBILE]: typeof coinbaseWallet.connectCoinbaseWallet.supportedChains;
66
68
  [WalletOption.COINBASE_WEB]: typeof evmWallet.connectEVMWallet.supportedChains;
69
+ [WalletOption.COSMOSTATION]: typeof cosmostationWallet.connectCosmostation.supportedChains;
67
70
  [WalletOption.CTRL]: typeof ctrlWallet.connectCtrl.supportedChains;
68
71
  [WalletOption.EIP6963]: typeof evmWallet.connectEVMWallet.supportedChains;
69
72
  [WalletOption.EXODUS]: typeof exodusWallet.connectExodusWallet.supportedChains;
package/src/utils.ts CHANGED
@@ -25,6 +25,10 @@ export async function loadWallet<W extends WalletOption>(walletOption: W): Promi
25
25
  async () => (await import("./walletconnect")).walletconnectWallet,
26
26
  )
27
27
  .with(WalletOption.KEPLR, WalletOption.LEAP, async () => (await import("./keplr")).keplrWallet)
28
+ .with(
29
+ WalletOption.COSMOSTATION,
30
+ async () => (await import("./cosmostation")).cosmostationWallet,
31
+ )
28
32
  .with(
29
33
  WalletOption.BRAVE,
30
34
  WalletOption.COINBASE_WEB,
@@ -121,8 +121,8 @@ async function getToolbox<T extends (typeof WC_SUPPORTED_CHAINS)[number]>({
121
121
  case Chain.THORChain: {
122
122
  const { SignMode } = await import("cosmjs-types/cosmos/tx/signing/v1beta1/signing.js");
123
123
  const { TxRaw } = await import("cosmjs-types/cosmos/tx/v1beta1/tx.js");
124
- const { encodePubkey, makeAuthInfoBytes } = await import("@cosmjs/proto-signing");
125
- const { makeSignDoc } = await import("@cosmjs/amino");
124
+ const { encodePubkey, makeAuthInfoBytes } = (await import("@cosmjs/proto-signing")).default;
125
+ const { makeSignDoc } = (await import("@cosmjs/amino")).default;
126
126
  const {
127
127
  getCosmosToolbox,
128
128
  buildAminoMsg,
@@ -1,3 +0,0 @@
1
- var j=require("@swapkit/helpers");async function w({chain:A,derivationPath:O,provider:W}){let{AbstractSigner:k,Signature:N}=await import("ethers");class X extends k{address;chain;derivationPath;provider;constructor({chain:q,derivationPath:B,provider:D}){super(D);this.address="",this.chain=q,this.derivationPath=B,this.provider=D}getAddress=async()=>{if(!this.address){let{default:q}=await import("@trezor/connect-web"),B=await q.ethereumGetAddress({path:j.derivationPathToString(this.derivationPath),showOnTrezor:!0});if(!B.success)throw new j.SwapKitError({errorKey:"wallet_trezor_failed_to_get_address",info:{...B,chain:this.chain,derivationPath:this.derivationPath}});this.address=B.payload.address}return this.address};signMessage=async(q)=>{let{default:B}=await import("@trezor/connect-web"),D=await B.ethereumSignMessage({path:j.derivationPathToString(this.derivationPath),message:q});if(!D.success)throw new j.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{...D,message:q,chain:this.chain,derivationPath:this.derivationPath}});return D.payload.signature};signTypedData(){throw new Error("Not implemented")}signTransaction=async({to:q,gasLimit:B,value:D,data:f,nonce:_,maxFeePerGas:R,maxPriorityFeePerGas:U,gasPrice:V})=>{if(!q)throw new j.SwapKitError({errorKey:"wallet_missing_params",info:{to:q}});if(!B)throw new j.SwapKitError({errorKey:"wallet_missing_params",info:{gasLimit:B}});let Q=R&&U;if(Q&&!R)throw new j.SwapKitError({errorKey:"wallet_missing_params",info:{maxFeePerGas:R}});if(Q&&!U)throw new j.SwapKitError({errorKey:"wallet_missing_params",info:{maxPriorityFeePerGas:U}});if(!(Q||V))throw new j.SwapKitError({errorKey:"wallet_missing_params",info:{gasPrice:V}});let{default:H}=await import("@trezor/connect-web"),{toHexString:J}=await import("@swapkit/toolboxes/evm"),{Transaction:I}=await import("ethers"),L=Q?{maxFeePerGas:J(BigInt(R?.toString()||0)),maxPriorityFeePerGas:J(BigInt(U?.toString()||0))}:V&&{gasPrice:J(BigInt(V?.toString()||0))}||{gasPrice:"0x0"},b=J(BigInt(_||await this.provider.getTransactionCount(await this.getAddress(),"pending"))),Y={chainId:Number.parseInt(j.ChainToChainId[this.chain]),to:q.toString(),value:J(BigInt(D?.toString()||0)),gasLimit:J(BigInt(B?.toString()||0)),nonce:b,data:f?.toString()||"0x",...L},{success:C,payload:Z}=await H.ethereumSignTransaction({path:j.derivationPathToString(this.derivationPath),transaction:Y});if(!C)throw new j.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{...Z,chain:this.chain,derivationPath:this.derivationPath}});let{r:K,s:u,v:z}=Z,y=N.from({r:K,s:u,v:new j.SwapKitNumber(BigInt(z)).getBaseValue("number")}),$=I.from({...Y,nonce:Number.parseInt(Y.nonce,16),type:Q?2:0,signature:y}).serialized;if(!$)throw new j.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:this.chain,derivationPath:this.derivationPath}});return $};connect=(q)=>{if(!q)throw new j.SwapKitError({errorKey:"wallet_provider_not_found",info:{wallet:j.WalletOption.TREZOR,chain:this.chain,derivationPath:this.derivationPath}});return new X({chain:this.chain,derivationPath:this.derivationPath,provider:q})}}return new X({chain:A,derivationPath:O,provider:W})}
2
-
3
- //# debugId=F889E83D9CD533AF64756E2164756E21
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/trezor/evmSigner.ts"],
4
- "sourcesContent": [
5
- "import {\n type Chain,\n ChainToChainId,\n type DerivationPathArray,\n SwapKitError,\n SwapKitNumber,\n WalletOption,\n derivationPathToString,\n} from \"@swapkit/helpers\";\nimport type { JsonRpcProvider, Provider, TransactionRequest } from \"ethers\";\n\ntype TrezorEVMSignerParams = {\n chain: Chain;\n derivationPath: DerivationPathArray;\n provider: Provider | JsonRpcProvider;\n};\n\nexport async function getEVMSigner({ chain, derivationPath, provider }: TrezorEVMSignerParams) {\n const { AbstractSigner, Signature } = await import(\"ethers\");\n\n class TrezorSigner extends AbstractSigner {\n address: string;\n chain: Chain;\n derivationPath: DerivationPathArray;\n readonly provider: Provider | JsonRpcProvider;\n\n constructor({ chain, derivationPath, provider }: TrezorEVMSignerParams) {\n super(provider);\n\n this.address = \"\";\n this.chain = chain;\n this.derivationPath = derivationPath;\n this.provider = provider;\n }\n\n getAddress = async () => {\n if (!this.address) {\n const { default: TrezorConnect } = await import(\"@trezor/connect-web\");\n\n const result = await TrezorConnect.ethereumGetAddress({\n path: derivationPathToString(this.derivationPath),\n showOnTrezor: true,\n });\n\n if (!result.success) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_get_address\",\n info: { ...result, chain: this.chain, derivationPath: this.derivationPath },\n });\n }\n\n this.address = result.payload.address;\n }\n\n return this.address;\n };\n\n signMessage = async (message: string) => {\n const { default: TrezorConnect } = await import(\"@trezor/connect-web\");\n\n const result = await TrezorConnect.ethereumSignMessage({\n path: derivationPathToString(this.derivationPath),\n message,\n });\n\n if (!result.success) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { ...result, message, chain: this.chain, derivationPath: this.derivationPath },\n });\n }\n\n return result.payload.signature;\n };\n\n signTypedData(): Promise<string> {\n throw new Error(\"Not implemented\");\n }\n\n signTransaction = async ({\n to,\n gasLimit,\n value,\n data,\n nonce,\n maxFeePerGas,\n maxPriorityFeePerGas,\n gasPrice,\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: any: refactor\n }: TransactionRequest) => {\n if (!to) throw new SwapKitError({ errorKey: \"wallet_missing_params\", info: { to } });\n if (!gasLimit)\n throw new SwapKitError({ errorKey: \"wallet_missing_params\", info: { gasLimit } });\n\n const isEIP1559 = maxFeePerGas && maxPriorityFeePerGas;\n\n if (isEIP1559 && !maxFeePerGas) {\n throw new SwapKitError({ errorKey: \"wallet_missing_params\", info: { maxFeePerGas } });\n }\n if (isEIP1559 && !maxPriorityFeePerGas) {\n throw new SwapKitError({\n errorKey: \"wallet_missing_params\",\n info: { maxPriorityFeePerGas },\n });\n }\n if (!(isEIP1559 || gasPrice)) {\n throw new SwapKitError({ errorKey: \"wallet_missing_params\", info: { gasPrice } });\n }\n\n const { default: TrezorConnect } = await import(\"@trezor/connect-web\");\n const { toHexString } = await import(\"@swapkit/toolboxes/evm\");\n const { Transaction } = await import(\"ethers\");\n\n const additionalFields = isEIP1559\n ? {\n maxFeePerGas: toHexString(BigInt(maxFeePerGas?.toString() || 0)),\n maxPriorityFeePerGas: toHexString(BigInt(maxPriorityFeePerGas?.toString() || 0)),\n }\n : (gasPrice && { gasPrice: toHexString(BigInt(gasPrice?.toString() || 0)) }) || {\n gasPrice: \"0x0\",\n };\n\n const hexifiedNonce = toHexString(\n BigInt(\n nonce || (await this.provider.getTransactionCount(await this.getAddress(), \"pending\")),\n ),\n );\n\n const formattedTx = {\n chainId: Number.parseInt(ChainToChainId[this.chain]),\n to: to.toString(),\n value: toHexString(BigInt(value?.toString() || 0)),\n gasLimit: toHexString(BigInt(gasLimit?.toString() || 0)),\n nonce: hexifiedNonce,\n data: data?.toString() || \"0x\",\n ...additionalFields,\n };\n\n const { success, payload } = await TrezorConnect.ethereumSignTransaction({\n path: derivationPathToString(this.derivationPath),\n transaction: formattedTx,\n });\n\n if (!success) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { ...payload, chain: this.chain, derivationPath: this.derivationPath },\n });\n }\n\n const { r, s, v } = payload;\n\n const signature = Signature.from({\n r,\n s,\n v: new SwapKitNumber(BigInt(v)).getBaseValue(\"number\"),\n });\n\n const serializedTx = Transaction.from({\n ...formattedTx,\n nonce: Number.parseInt(formattedTx.nonce, 16),\n type: isEIP1559 ? 2 : 0,\n signature,\n }).serialized;\n\n if (!serializedTx) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { chain: this.chain, derivationPath: this.derivationPath },\n });\n }\n\n return serializedTx;\n };\n\n connect = (provider: Provider | null) => {\n if (!provider) {\n throw new SwapKitError({\n errorKey: \"wallet_provider_not_found\",\n info: {\n wallet: WalletOption.TREZOR,\n chain: this.chain,\n derivationPath: this.derivationPath,\n },\n });\n }\n\n return new TrezorSigner({\n chain: this.chain,\n derivationPath: this.derivationPath,\n provider,\n });\n };\n }\n\n return new TrezorSigner({ chain, derivationPath, provider });\n}\n"
6
- ],
7
- "mappings": "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",
8
- "debugId": "F889E83D9CD533AF64756E2164756E21",
9
- "names": []
10
- }
@@ -1,4 +0,0 @@
1
- import{c as a,d as e}from"./chunk-p1kdg37m.js";import{WalletOption as t}from"@swapkit/helpers";function r(i){let l=Object.keys(i)?.[0]||"";return i?.[l]?.supportedChains||[]}async function p(i){let{match:l}=await import("ts-pattern");return await l(i).with(t.COINBASE_MOBILE,async()=>(await import("./src/coinbase/index.js")).coinbaseWallet).with(t.BITGET,async()=>(await import("./src/bitget/index.js")).bitgetWallet).with(t.CTRL,async()=>(await import("./src/ctrl/index.js")).ctrlWallet).with(t.OKX,async()=>(await import("./src/okx/index.js")).okxWallet).with(t.ONEKEY,async()=>(await import("./src/onekey/index.js")).onekeyWallet).with(t.EXODUS,async()=>(await import("./src/exodus/index.js")).exodusWallet).with(t.KEEPKEY,async()=>(await import("./src/keepkey/index.js")).keepkeyWallet).with(t.KEEPKEY_BEX,async()=>(await import("./src/keepkey-bex/index.js")).keepkeyBexWallet).with(t.WALLETCONNECT,async()=>(await import("./src/walletconnect/index.js")).walletconnectWallet).with(t.KEPLR,t.LEAP,async()=>(await import("./src/keplr/index.js")).keplrWallet).with(t.BRAVE,t.COINBASE_WEB,t.EIP6963,t.METAMASK,t.OKX_MOBILE,t.TRUSTWALLET_WEB,async()=>(await import("./src/evm-extensions/index.js")).evmWallet).with(t.KEYSTORE,async()=>(await import("./src/keystore/index.js")).keystoreWallet).with(t.TREZOR,async()=>(await import("./src/trezor/index.js")).trezorWallet).with(t.LEDGER,t.LEDGER_LIVE,async()=>(await import("./src/ledger/index.js")).ledgerWallet).with(t.PHANTOM,async()=>(await import("./src/phantom/index.js")).phantomWallet).with(t.POLKADOT_JS,async()=>(await import("./src/polkadotjs/index.js")).polkadotWallet).with(t.RADIX_WALLET,async()=>(await import("./src/radix/index.js")).radixWallet).with(t.TALISMAN,async()=>(await import("./src/talisman/index.js")).talismanWallet).exhaustive()}
2
- export{r as a,p as b};
3
-
4
- //# debugId=40B36BBD4009778C64756E2164756E21
@@ -1,3 +0,0 @@
1
- import{c as M,d as Q}from"./chunk-p1kdg37m.js";import{ChainToChainId as G,SwapKitError as B,SwapKitNumber as h,WalletOption as F,derivationPathToString as $}from"@swapkit/helpers";async function l({chain:W,derivationPath:k,provider:N}){let{AbstractSigner:f,Signature:_}=await import("ethers");class Y extends f{address;chain;derivationPath;provider;constructor({chain:j,derivationPath:q,provider:D}){super(D);this.address="",this.chain=j,this.derivationPath=q,this.provider=D}getAddress=async()=>{if(!this.address){let{default:j}=await import("@trezor/connect-web"),q=await j.ethereumGetAddress({path:$(this.derivationPath),showOnTrezor:!0});if(!q.success)throw new B({errorKey:"wallet_trezor_failed_to_get_address",info:{...q,chain:this.chain,derivationPath:this.derivationPath}});this.address=q.payload.address}return this.address};signMessage=async(j)=>{let{default:q}=await import("@trezor/connect-web"),D=await q.ethereumSignMessage({path:$(this.derivationPath),message:j});if(!D.success)throw new B({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{...D,message:j,chain:this.chain,derivationPath:this.derivationPath}});return D.payload.signature};signTypedData(){throw new Error("Not implemented")}signTransaction=async({to:j,gasLimit:q,value:D,data:H,nonce:I,maxFeePerGas:U,maxPriorityFeePerGas:V,gasPrice:X})=>{if(!j)throw new B({errorKey:"wallet_missing_params",info:{to:j}});if(!q)throw new B({errorKey:"wallet_missing_params",info:{gasLimit:q}});let R=U&&V;if(R&&!U)throw new B({errorKey:"wallet_missing_params",info:{maxFeePerGas:U}});if(R&&!V)throw new B({errorKey:"wallet_missing_params",info:{maxPriorityFeePerGas:V}});if(!(R||X))throw new B({errorKey:"wallet_missing_params",info:{gasPrice:X}});let{default:L}=await import("@trezor/connect-web"),{toHexString:J}=await import("@swapkit/toolboxes/evm"),{Transaction:b}=await import("ethers"),C=R?{maxFeePerGas:J(BigInt(U?.toString()||0)),maxPriorityFeePerGas:J(BigInt(V?.toString()||0))}:X&&{gasPrice:J(BigInt(X?.toString()||0))}||{gasPrice:"0x0"},K=J(BigInt(I||await this.provider.getTransactionCount(await this.getAddress(),"pending"))),Z={chainId:Number.parseInt(G[this.chain]),to:j.toString(),value:J(BigInt(D?.toString()||0)),gasLimit:J(BigInt(q?.toString()||0)),nonce:K,data:H?.toString()||"0x",...C},{success:u,payload:A}=await L.ethereumSignTransaction({path:$(this.derivationPath),transaction:Z});if(!u)throw new B({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{...A,chain:this.chain,derivationPath:this.derivationPath}});let{r:z,s:y,v:w}=A,E=_.from({r:z,s:y,v:new h(BigInt(w)).getBaseValue("number")}),O=b.from({...Z,nonce:Number.parseInt(Z.nonce,16),type:R?2:0,signature:E}).serialized;if(!O)throw new B({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:this.chain,derivationPath:this.derivationPath}});return O};connect=(j)=>{if(!j)throw new B({errorKey:"wallet_provider_not_found",info:{wallet:F.TREZOR,chain:this.chain,derivationPath:this.derivationPath}});return new Y({chain:this.chain,derivationPath:this.derivationPath,provider:j})}}return new Y({chain:W,derivationPath:k,provider:N})}export{l as getEVMSigner};
2
-
3
- //# debugId=5C76B7C3B8034EA464756E2164756E21
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/trezor/evmSigner.ts"],
4
- "sourcesContent": [
5
- "import {\n type Chain,\n ChainToChainId,\n type DerivationPathArray,\n SwapKitError,\n SwapKitNumber,\n WalletOption,\n derivationPathToString,\n} from \"@swapkit/helpers\";\nimport type { JsonRpcProvider, Provider, TransactionRequest } from \"ethers\";\n\ntype TrezorEVMSignerParams = {\n chain: Chain;\n derivationPath: DerivationPathArray;\n provider: Provider | JsonRpcProvider;\n};\n\nexport async function getEVMSigner({ chain, derivationPath, provider }: TrezorEVMSignerParams) {\n const { AbstractSigner, Signature } = await import(\"ethers\");\n\n class TrezorSigner extends AbstractSigner {\n address: string;\n chain: Chain;\n derivationPath: DerivationPathArray;\n readonly provider: Provider | JsonRpcProvider;\n\n constructor({ chain, derivationPath, provider }: TrezorEVMSignerParams) {\n super(provider);\n\n this.address = \"\";\n this.chain = chain;\n this.derivationPath = derivationPath;\n this.provider = provider;\n }\n\n getAddress = async () => {\n if (!this.address) {\n const { default: TrezorConnect } = await import(\"@trezor/connect-web\");\n\n const result = await TrezorConnect.ethereumGetAddress({\n path: derivationPathToString(this.derivationPath),\n showOnTrezor: true,\n });\n\n if (!result.success) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_get_address\",\n info: { ...result, chain: this.chain, derivationPath: this.derivationPath },\n });\n }\n\n this.address = result.payload.address;\n }\n\n return this.address;\n };\n\n signMessage = async (message: string) => {\n const { default: TrezorConnect } = await import(\"@trezor/connect-web\");\n\n const result = await TrezorConnect.ethereumSignMessage({\n path: derivationPathToString(this.derivationPath),\n message,\n });\n\n if (!result.success) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { ...result, message, chain: this.chain, derivationPath: this.derivationPath },\n });\n }\n\n return result.payload.signature;\n };\n\n signTypedData(): Promise<string> {\n throw new Error(\"Not implemented\");\n }\n\n signTransaction = async ({\n to,\n gasLimit,\n value,\n data,\n nonce,\n maxFeePerGas,\n maxPriorityFeePerGas,\n gasPrice,\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: any: refactor\n }: TransactionRequest) => {\n if (!to) throw new SwapKitError({ errorKey: \"wallet_missing_params\", info: { to } });\n if (!gasLimit)\n throw new SwapKitError({ errorKey: \"wallet_missing_params\", info: { gasLimit } });\n\n const isEIP1559 = maxFeePerGas && maxPriorityFeePerGas;\n\n if (isEIP1559 && !maxFeePerGas) {\n throw new SwapKitError({ errorKey: \"wallet_missing_params\", info: { maxFeePerGas } });\n }\n if (isEIP1559 && !maxPriorityFeePerGas) {\n throw new SwapKitError({\n errorKey: \"wallet_missing_params\",\n info: { maxPriorityFeePerGas },\n });\n }\n if (!(isEIP1559 || gasPrice)) {\n throw new SwapKitError({ errorKey: \"wallet_missing_params\", info: { gasPrice } });\n }\n\n const { default: TrezorConnect } = await import(\"@trezor/connect-web\");\n const { toHexString } = await import(\"@swapkit/toolboxes/evm\");\n const { Transaction } = await import(\"ethers\");\n\n const additionalFields = isEIP1559\n ? {\n maxFeePerGas: toHexString(BigInt(maxFeePerGas?.toString() || 0)),\n maxPriorityFeePerGas: toHexString(BigInt(maxPriorityFeePerGas?.toString() || 0)),\n }\n : (gasPrice && { gasPrice: toHexString(BigInt(gasPrice?.toString() || 0)) }) || {\n gasPrice: \"0x0\",\n };\n\n const hexifiedNonce = toHexString(\n BigInt(\n nonce || (await this.provider.getTransactionCount(await this.getAddress(), \"pending\")),\n ),\n );\n\n const formattedTx = {\n chainId: Number.parseInt(ChainToChainId[this.chain]),\n to: to.toString(),\n value: toHexString(BigInt(value?.toString() || 0)),\n gasLimit: toHexString(BigInt(gasLimit?.toString() || 0)),\n nonce: hexifiedNonce,\n data: data?.toString() || \"0x\",\n ...additionalFields,\n };\n\n const { success, payload } = await TrezorConnect.ethereumSignTransaction({\n path: derivationPathToString(this.derivationPath),\n transaction: formattedTx,\n });\n\n if (!success) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { ...payload, chain: this.chain, derivationPath: this.derivationPath },\n });\n }\n\n const { r, s, v } = payload;\n\n const signature = Signature.from({\n r,\n s,\n v: new SwapKitNumber(BigInt(v)).getBaseValue(\"number\"),\n });\n\n const serializedTx = Transaction.from({\n ...formattedTx,\n nonce: Number.parseInt(formattedTx.nonce, 16),\n type: isEIP1559 ? 2 : 0,\n signature,\n }).serialized;\n\n if (!serializedTx) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { chain: this.chain, derivationPath: this.derivationPath },\n });\n }\n\n return serializedTx;\n };\n\n connect = (provider: Provider | null) => {\n if (!provider) {\n throw new SwapKitError({\n errorKey: \"wallet_provider_not_found\",\n info: {\n wallet: WalletOption.TREZOR,\n chain: this.chain,\n derivationPath: this.derivationPath,\n },\n });\n }\n\n return new TrezorSigner({\n chain: this.chain,\n derivationPath: this.derivationPath,\n provider,\n });\n };\n }\n\n return new TrezorSigner({ chain, derivationPath, provider });\n}\n"
6
- ],
7
- "mappings": "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",
8
- "debugId": "5C76B7C3B8034EA464756E2164756E21",
9
- "names": []
10
- }