@swapkit/wallets 4.0.0-beta.39 → 4.0.0-beta.40

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 (103) hide show
  1. package/dist/{chunk-qh8q7xr1.js → chunk-10h87ecy.js} +3 -3
  2. package/dist/{chunk-qh8q7xr1.js.map → chunk-10h87ecy.js.map} +1 -1
  3. package/dist/chunk-3t5jkca2.js +5 -0
  4. package/dist/chunk-3t5jkca2.js.map +10 -0
  5. package/dist/{chunk-c11abmv4.js → chunk-3vygfd50.js} +4 -4
  6. package/dist/{chunk-c11abmv4.js.map → chunk-3vygfd50.js.map} +3 -3
  7. package/dist/{chunk-0rgqnhd7.js → chunk-940zcsgd.js} +3 -3
  8. package/dist/{chunk-0rgqnhd7.js.map → chunk-940zcsgd.js.map} +3 -3
  9. package/dist/{chunk-hafkx3bw.js → chunk-bnnq9hg1.js} +3 -3
  10. package/dist/{chunk-hafkx3bw.js.map → chunk-bnnq9hg1.js.map} +1 -1
  11. package/dist/{chunk-5mq0kpmy.js → chunk-bp34qnvm.js} +3 -3
  12. package/dist/{chunk-5mq0kpmy.js.map → chunk-bp34qnvm.js.map} +1 -1
  13. package/dist/{chunk-r308an05.js → chunk-fa0psb24.js} +3 -3
  14. package/dist/{chunk-r308an05.js.map → chunk-fa0psb24.js.map} +1 -1
  15. package/dist/chunk-kfw1mys1.js +4 -0
  16. package/dist/chunk-kfw1mys1.js.map +10 -0
  17. package/dist/{chunk-cgt2fexr.js → chunk-xwda1ncj.js} +3 -3
  18. package/dist/{chunk-cgt2fexr.js.map → chunk-xwda1ncj.js.map} +1 -1
  19. package/dist/src/bitget/index.cjs +2 -2
  20. package/dist/src/bitget/index.cjs.map +4 -4
  21. package/dist/src/bitget/index.js +2 -2
  22. package/dist/src/bitget/index.js.map +4 -4
  23. package/dist/src/coinbase/index.js +2 -2
  24. package/dist/src/coinbase/index.js.map +1 -1
  25. package/dist/src/cosmostation/index.js +2 -2
  26. package/dist/src/cosmostation/index.js.map +1 -1
  27. package/dist/src/ctrl/index.js +2 -2
  28. package/dist/src/ctrl/index.js.map +1 -1
  29. package/dist/src/evm-extensions/index.js +2 -2
  30. package/dist/src/evm-extensions/index.js.map +1 -1
  31. package/dist/src/exodus/index.js +2 -2
  32. package/dist/src/exodus/index.js.map +1 -1
  33. package/dist/src/index.cjs +2 -2
  34. package/dist/src/index.cjs.map +1 -1
  35. package/dist/src/index.js +2 -2
  36. package/dist/src/index.js.map +1 -1
  37. package/dist/src/keepkey/index.js +2 -2
  38. package/dist/src/keepkey/index.js.map +2 -2
  39. package/dist/src/keepkey-bex/index.js +2 -2
  40. package/dist/src/keepkey-bex/index.js.map +1 -1
  41. package/dist/src/keplr/index.js +2 -2
  42. package/dist/src/keplr/index.js.map +1 -1
  43. package/dist/src/keystore/index.js +2 -2
  44. package/dist/src/keystore/index.js.map +1 -1
  45. package/dist/src/ledger/index.cjs +3 -3
  46. package/dist/src/ledger/index.cjs.map +7 -6
  47. package/dist/src/ledger/index.js +3 -3
  48. package/dist/src/ledger/index.js.map +7 -6
  49. package/dist/src/okx/index.cjs +2 -2
  50. package/dist/src/okx/index.cjs.map +4 -4
  51. package/dist/src/okx/index.js +2 -2
  52. package/dist/src/okx/index.js.map +4 -4
  53. package/dist/src/onekey/index.cjs +2 -2
  54. package/dist/src/onekey/index.cjs.map +3 -3
  55. package/dist/src/onekey/index.js +2 -2
  56. package/dist/src/onekey/index.js.map +3 -3
  57. package/dist/src/phantom/index.js +2 -2
  58. package/dist/src/phantom/index.js.map +1 -1
  59. package/dist/src/polkadotjs/index.js +2 -2
  60. package/dist/src/polkadotjs/index.js.map +1 -1
  61. package/dist/src/radix/index.js +2 -2
  62. package/dist/src/radix/index.js.map +1 -1
  63. package/dist/src/talisman/index.js +2 -2
  64. package/dist/src/talisman/index.js.map +1 -1
  65. package/dist/src/trezor/index.cjs +2 -2
  66. package/dist/src/trezor/index.cjs.map +3 -3
  67. package/dist/src/trezor/index.js +2 -2
  68. package/dist/src/trezor/index.js.map +3 -3
  69. package/dist/src/walletconnect/index.cjs +2 -2
  70. package/dist/src/walletconnect/index.cjs.map +5 -5
  71. package/dist/src/walletconnect/index.js +2 -2
  72. package/dist/src/walletconnect/index.js.map +5 -5
  73. package/dist/src/xaman/index.cjs +4 -0
  74. package/dist/src/xaman/index.cjs.map +12 -0
  75. package/dist/src/xaman/index.js +4 -0
  76. package/dist/src/xaman/index.js.map +12 -0
  77. package/package.json +14 -6
  78. package/src/bitget/helpers.ts +65 -30
  79. package/src/bitget/index.ts +1 -1
  80. package/src/ledger/clients/tron.ts +92 -0
  81. package/src/ledger/helpers/getLedgerAddress.ts +5 -0
  82. package/src/ledger/helpers/getLedgerClient.ts +3 -0
  83. package/src/ledger/index.ts +10 -0
  84. package/src/ledger/types.ts +2 -0
  85. package/src/okx/helpers.ts +71 -38
  86. package/src/okx/index.ts +1 -0
  87. package/src/onekey/index.ts +2 -2
  88. package/src/trezor/index.ts +8 -10
  89. package/src/types.ts +35 -0
  90. package/src/utils.ts +1 -0
  91. package/src/walletconnect/constants.ts +13 -0
  92. package/src/walletconnect/helpers.ts +11 -1
  93. package/src/walletconnect/index.ts +34 -0
  94. package/src/walletconnect/namespaces.ts +6 -0
  95. package/src/xaman/README.md +66 -0
  96. package/src/xaman/helpers.ts +59 -0
  97. package/src/xaman/index.ts +79 -0
  98. package/src/xaman/types.ts +26 -0
  99. package/src/xaman/walletMethods.ts +126 -0
  100. package/dist/chunk-9sjqewve.js +0 -5
  101. package/dist/chunk-9sjqewve.js.map +0 -10
  102. package/dist/chunk-sn6pgje5.js +0 -4
  103. package/dist/chunk-sn6pgje5.js.map +0 -10
package/src/types.ts CHANGED
@@ -30,6 +30,7 @@ import type { radixWallet } from "./radix";
30
30
  import type { talismanWallet } from "./talisman";
31
31
  import type { trezorWallet } from "./trezor";
32
32
  import type { walletconnectWallet } from "./walletconnect";
33
+ import type { xamanWallet } from "./xaman";
33
34
 
34
35
  export type SKWallets = {
35
36
  [WalletOption.BITGET]: typeof bitgetWallet;
@@ -58,6 +59,7 @@ export type SKWallets = {
58
59
  [WalletOption.TREZOR]: typeof trezorWallet;
59
60
  [WalletOption.TRUSTWALLET_WEB]: typeof evmWallet;
60
61
  [WalletOption.WALLETCONNECT]: typeof walletconnectWallet;
62
+ [WalletOption.XAMAN]: typeof xamanWallet;
61
63
  };
62
64
 
63
65
  export type SKConnectWallets = SKWallets[keyof SKWallets];
@@ -89,6 +91,7 @@ export type SKWalletsSupportedChains = {
89
91
  [WalletOption.TREZOR]: typeof trezorWallet.connectTrezor.supportedChains;
90
92
  [WalletOption.TRUSTWALLET_WEB]: typeof evmWallet.connectEVMWallet.supportedChains;
91
93
  [WalletOption.WALLETCONNECT]: typeof walletconnectWallet.connectWalletconnect.supportedChains;
94
+ [WalletOption.XAMAN]: typeof xamanWallet.connectXaman.supportedChains;
92
95
  };
93
96
 
94
97
  type UnisatToSignInputs = {
@@ -161,6 +164,22 @@ declare global {
161
164
  };
162
165
  solana: SolanaProvider;
163
166
  ethereum: EthereumWindowProvider;
167
+ tronLink: {
168
+ request: (args: { method: string; params?: any }) => Promise<any>;
169
+ ready: boolean;
170
+ };
171
+ tronWeb: {
172
+ defaultAddress: {
173
+ base58: string;
174
+ hex: string;
175
+ };
176
+ trx: {
177
+ sign: (transaction: any) => Promise<any>;
178
+ sendRawTransaction: (signedTransaction: any) => Promise<any>;
179
+ getAccount: (address: string) => Promise<any>;
180
+ getBalance: (address: string) => Promise<number>;
181
+ };
182
+ };
164
183
  };
165
184
 
166
185
  okxwallet?:
@@ -207,6 +226,22 @@ declare global {
207
226
  transactions: any[];
208
227
  }) => Promise<any>;
209
228
  };
229
+ tronLink: {
230
+ request: (args: { method: string; params?: any }) => Promise<any>;
231
+ ready: boolean;
232
+ tronWeb: {
233
+ defaultAddress: {
234
+ base58: string;
235
+ hex: string;
236
+ };
237
+ trx: {
238
+ sign: (transaction: any) => Promise<any>;
239
+ sendRawTransaction: (signedTransaction: any) => Promise<any>;
240
+ getAccount: (address: string) => Promise<any>;
241
+ getBalance: (address: string) => Promise<number>;
242
+ };
243
+ };
244
+ };
210
245
  }
211
246
  | EthereumWindowProvider;
212
247
  }
package/src/utils.ts CHANGED
@@ -52,6 +52,7 @@ export async function loadWallet<W extends WalletOption>(walletOption: W): Promi
52
52
  .with(WalletOption.POLKADOT_JS, async () => (await import("./polkadotjs")).polkadotWallet)
53
53
  .with(WalletOption.RADIX_WALLET, async () => (await import("./radix")).radixWallet)
54
54
  .with(WalletOption.TALISMAN, async () => (await import("./talisman")).talismanWallet)
55
+ .with(WalletOption.XAMAN, async () => (await import("./xaman")).xamanWallet)
55
56
  .exhaustive();
56
57
 
57
58
  return wallet as SKWallets[W];
@@ -15,6 +15,7 @@ export const POLYGON_MAINNET_ID = "eip155:137";
15
15
  export const BASE_MAINNET_ID = "eip155:8453";
16
16
  export const NEAR_MAINNET_ID = "near:mainnet";
17
17
  export const NEAR_TESTNET_ID = "near:testnet";
18
+ export const TRON_MAINNET_ID = "tron:0x2b6653dc";
18
19
 
19
20
  export const DEFAULT_LOGGER = "debug";
20
21
 
@@ -85,3 +86,15 @@ export enum DEFAULT_NEAR_METHODS {
85
86
  }
86
87
 
87
88
  export enum DEFAULT_NEAR_EVENTS {}
89
+
90
+ /**
91
+ * TRON
92
+ */
93
+ export enum DEFAULT_TRON_METHODS {
94
+ TRON_SIGN_MESSAGE = "tron_signMessage",
95
+ TRON_SIGN_TRANSACTION = "tron_signTransaction",
96
+ TRON_SEND_TRANSACTION = "tron_sendTransaction",
97
+ TRON_GET_ACCOUNTS = "tron_getAccounts",
98
+ }
99
+
100
+ export enum DEFAULT_TRON_EVENTS {}
@@ -14,10 +14,18 @@ import {
14
14
  OPTIMISM_MAINNET_ID,
15
15
  POLYGON_MAINNET_ID,
16
16
  THORCHAIN_MAINNET_ID,
17
+ TRON_MAINNET_ID,
17
18
  } from "./constants";
18
19
 
19
20
  export const getAddressByChain = (
20
- chain: EVMChain | Chain.THORChain | Chain.Maya | Chain.Kujira | Chain.Cosmos | Chain.Near,
21
+ chain:
22
+ | EVMChain
23
+ | Chain.THORChain
24
+ | Chain.Maya
25
+ | Chain.Kujira
26
+ | Chain.Cosmos
27
+ | Chain.Near
28
+ | Chain.Tron,
21
29
  accounts: string[],
22
30
  ) => {
23
31
  const account = accounts.find((account) => account.startsWith(chainToChainId(chain))) || "";
@@ -55,6 +63,8 @@ export const chainToChainId = (chain: Chain) => {
55
63
  const { isStagenet } = SKConfig.get("envs");
56
64
  return isStagenet ? NEAR_TESTNET_ID : NEAR_MAINNET_ID;
57
65
  }
66
+ case Chain.Tron:
67
+ return TRON_MAINNET_ID;
58
68
  default:
59
69
  return "";
60
70
  }
@@ -11,6 +11,7 @@ import {
11
11
  } from "@swapkit/helpers";
12
12
  import type { ThorchainDepositParams, createThorchainToolbox } from "@swapkit/toolboxes/cosmos";
13
13
  import type { NearSigner } from "@swapkit/toolboxes/near";
14
+ import type { TronSignedTransaction, TronSigner, TronTransaction } from "@swapkit/toolboxes/tron";
14
15
  import type { WalletConnectModal } from "@walletconnect/modal";
15
16
  import type { SessionTypes, SignClientTypes } from "@walletconnect/types";
16
17
  import type { Transaction } from "near-api-js/lib/transaction";
@@ -47,6 +48,7 @@ export const walletconnectWallet = createWallet({
47
48
  Chain.Optimism,
48
49
  Chain.Polygon,
49
50
  Chain.THORChain,
51
+ Chain.Tron,
50
52
  ],
51
53
  connect: ({ addChain, supportedChains, walletType }) =>
52
54
  async function connectWalletconnect(
@@ -315,6 +317,38 @@ async function getToolbox<T extends (typeof WC_SUPPORTED_CHAINS)[number]>({
315
317
  return toolbox;
316
318
  }
317
319
 
320
+ case Chain.Tron: {
321
+ const { createTronToolbox } = await import("@swapkit/toolboxes/tron");
322
+ const { DEFAULT_TRON_METHODS } = await import("./constants");
323
+
324
+ // Create a Tron signer that uses WalletConnect
325
+ const signer: TronSigner = {
326
+ getAddress() {
327
+ return Promise.resolve(address);
328
+ },
329
+
330
+ async signTransaction(transaction: TronTransaction) {
331
+ if (!walletconnect) {
332
+ throw new SwapKitError("wallet_walletconnect_connection_not_established");
333
+ }
334
+
335
+ const signedTx = await walletconnect.client.request({
336
+ topic: session.topic,
337
+ chainId: chainToChainId(Chain.Tron),
338
+ request: {
339
+ method: DEFAULT_TRON_METHODS.TRON_SIGN_TRANSACTION,
340
+ params: { transaction },
341
+ },
342
+ });
343
+
344
+ return signedTx as TronSignedTransaction;
345
+ },
346
+ };
347
+
348
+ const toolbox = await createTronToolbox({ signer });
349
+ return toolbox;
350
+ }
351
+
318
352
  default:
319
353
  throw new SwapKitError({
320
354
  errorKey: "wallet_chain_not_supported",
@@ -11,6 +11,8 @@ import {
11
11
  DEFAULT_POLKADOT_METHODS,
12
12
  DEFAULT_SOLANA_EVENTS,
13
13
  DEFAULT_SOLANA_METHODS,
14
+ DEFAULT_TRON_EVENTS,
15
+ DEFAULT_TRON_METHODS,
14
16
  } from "./constants";
15
17
 
16
18
  export const getNamespacesFromChains = (chains: string[]) => {
@@ -37,6 +39,8 @@ export const getSupportedMethodsByNamespace = (namespace: string) => {
37
39
  return Object.values(DEFAULT_POLKADOT_METHODS);
38
40
  case "near":
39
41
  return Object.values(DEFAULT_NEAR_METHODS);
42
+ case "tron":
43
+ return Object.values(DEFAULT_TRON_METHODS);
40
44
  default:
41
45
  throw new SwapKitError({
42
46
  errorKey: "wallet_walletconnect_namespace_not_supported",
@@ -57,6 +61,8 @@ export const getSupportedEventsByNamespace = (namespace: string) => {
57
61
  return Object.values(DEFAULT_POLKADOT_EVENTS);
58
62
  case "near":
59
63
  return Object.values(DEFAULT_NEAR_EVENTS);
64
+ case "tron":
65
+ return Object.values(DEFAULT_TRON_EVENTS);
60
66
  default:
61
67
  throw new SwapKitError({
62
68
  errorKey: "wallet_walletconnect_namespace_not_supported",
@@ -0,0 +1,66 @@
1
+ # Xaman Wallet Integration
2
+
3
+ ## Configuration
4
+
5
+ ### Option 1: Configure via SKConfig (Recommended)
6
+
7
+ ```typescript
8
+ import { SwapKit } from "@swapkit/core";
9
+ import { SKConfig } from "@swapkit/helpers";
10
+
11
+ // Set the Xaman API key globally
12
+ SKConfig.setApiKey("xaman", "your-xaman-api-key");
13
+
14
+ // Or configure during SwapKit initialization
15
+ const swapKit = SwapKit({
16
+ config: {
17
+ apiKeys: {
18
+ xaman: "your-xaman-api-key"
19
+ }
20
+ }
21
+ });
22
+
23
+ // Connect to Xaman wallet
24
+ await swapKit.connectWallet(WalletOption.XAMAN, [Chain.Ripple]);
25
+ ```
26
+
27
+ ### Option 2: Pass API key during connection
28
+
29
+ ```typescript
30
+ // Connect with API key override
31
+ await swapKit.connectWallet(WalletOption.XAMAN, [Chain.Ripple], {
32
+ apiKey: "your-xaman-api-key"
33
+ });
34
+ ```
35
+
36
+ ## Usage Example
37
+
38
+ ```typescript
39
+ // Get the connected wallet
40
+ const wallet = swapKit.getWallet(Chain.Ripple);
41
+
42
+ // Send XRP
43
+ const txHash = await wallet.transfer({
44
+ assetValue: AssetValue.from({ chain: Chain.Ripple, value: 1 }),
45
+ recipient: "rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH",
46
+ memo: "Payment memo"
47
+ });
48
+ ```
49
+
50
+ ## Destination Tags
51
+
52
+ For exchange addresses that require destination tags:
53
+
54
+ ```typescript
55
+ // The destination tag should be included in the memo field
56
+ // Format: "DestinationTag:123456"
57
+ const txHash = await wallet.transfer({
58
+ assetValue: AssetValue.from({ chain: Chain.Ripple, value: 10 }),
59
+ recipient: "rExchangeAddress...",
60
+ memo: "DestinationTag:123456"
61
+ });
62
+ ```
63
+
64
+ ## Getting an API Key
65
+
66
+ To use the Xaman wallet, you need to obtain an API key from the [Xaman Developer Console](https://apps.xumm.dev/).
@@ -0,0 +1,59 @@
1
+ import { type AssetValue, Chain, SwapKitError } from "@swapkit/helpers";
2
+ import type { Xumm } from "xumm";
3
+ import { sendXamanTransaction } from "./walletMethods.js";
4
+
5
+ interface GetWalletForChainParams {
6
+ chain: Chain;
7
+ address: string;
8
+ rpcUrl?: string;
9
+ xumm: Xumm;
10
+ }
11
+
12
+ export async function getWalletForChain({ xumm, chain, address, rpcUrl }: GetWalletForChainParams) {
13
+ switch (chain) {
14
+ case Chain.Ripple: {
15
+ const { getRippleToolbox } = await import("@swapkit/toolboxes/ripple");
16
+
17
+ // const api = apis?.[chain]; // Unused for now
18
+ const toolbox = await getRippleToolbox({ rpcUrl });
19
+
20
+ // Override transfer method to use Xaman transaction flow
21
+ const transfer = async (params: {
22
+ assetValue: AssetValue;
23
+ recipient: string;
24
+ memo?: string;
25
+ }) => {
26
+ const { recipient, assetValue, memo } = params;
27
+
28
+ // Create and subscribe to payment via Xaman
29
+ const paymentResult = await sendXamanTransaction(xumm, {
30
+ from: address,
31
+ destination: recipient,
32
+ amount: assetValue.getValue("string"),
33
+ memo: memo,
34
+ });
35
+
36
+ // If not successful or no transaction ID, throw error
37
+ if (!(paymentResult.result.success && paymentResult.result.transactionId)) {
38
+ throw new SwapKitError("wallet_xaman_transaction_failed");
39
+ }
40
+
41
+ // Return the transaction ID string
42
+ return paymentResult.result.transactionId;
43
+ };
44
+
45
+ return {
46
+ ...toolbox,
47
+ address,
48
+ getAddress: () => address,
49
+ transfer,
50
+ // Expose Xaman-specific methods
51
+ createAndSubscribePayment: sendXamanTransaction,
52
+ disconnect: xumm.logout,
53
+ };
54
+ }
55
+
56
+ default:
57
+ throw new SwapKitError("wallet_chain_not_supported", { wallet: "Xaman", chain });
58
+ }
59
+ }
@@ -0,0 +1,79 @@
1
+ import {
2
+ Chain,
3
+ SKConfig,
4
+ SwapKitError,
5
+ WalletOption,
6
+ createWallet,
7
+ filterSupportedChains,
8
+ } from "@swapkit/helpers";
9
+ import { Xumm } from "xumm";
10
+ import { getWalletSupportedChains } from "../utils";
11
+ import { getWalletForChain } from "./helpers.js";
12
+ import type { XamanConfig } from "./types.js";
13
+ import { connectXamanWallet as connectXamanWalletMethod } from "./walletMethods.js";
14
+
15
+ export const xamanWallet = createWallet({
16
+ name: "connectXaman",
17
+ walletType: WalletOption.XAMAN,
18
+ supportedChains: [Chain.Ripple],
19
+ connect: ({ addChain, supportedChains: walletSupportedChains, walletType }) =>
20
+ async function connectXamanWallet(chains: Chain[], xamanConfigOverwrite?: XamanConfig) {
21
+ const supportedChains = filterSupportedChains({
22
+ chains,
23
+ supportedChains: walletSupportedChains,
24
+ walletType,
25
+ });
26
+
27
+ const { xaman: xamanApiKey } = SKConfig.get("apiKeys");
28
+ const apiKey = xamanConfigOverwrite?.apiKey || xamanApiKey;
29
+
30
+ if (!apiKey) {
31
+ throw new SwapKitError("wallet_missing_api_key", { wallet: "Xaman" });
32
+ }
33
+
34
+ const xumm = new Xumm(apiKey);
35
+
36
+ return new Promise<boolean>((resolve, reject) => {
37
+ xumm.on("success", async () => {
38
+ try {
39
+ const address = await connectXamanWalletMethod(xumm);
40
+
41
+ const promises = supportedChains.map(async (chain) => {
42
+ const rpcUrl = SKConfig.get("rpcUrls")[chain];
43
+ const walletMethods = await getWalletForChain({
44
+ xumm,
45
+ chain,
46
+ address,
47
+ rpcUrl,
48
+ });
49
+
50
+ addChain({
51
+ ...walletMethods,
52
+ chain,
53
+ balance: [],
54
+ walletType: WalletOption.XAMAN,
55
+ address,
56
+ disconnect: xumm.logout,
57
+ });
58
+ });
59
+
60
+ await Promise.all(promises);
61
+ resolve(true);
62
+ } catch (error) {
63
+ reject(error);
64
+ }
65
+ });
66
+
67
+ xumm.on("error", (error) => {
68
+ reject(error);
69
+ });
70
+
71
+ xumm.authorize();
72
+ });
73
+ },
74
+ });
75
+
76
+ export const XAMAN_SUPPORTED_CHAINS = getWalletSupportedChains(xamanWallet);
77
+ export type XamanSupportedChain = (typeof XAMAN_SUPPORTED_CHAINS)[number];
78
+
79
+ export type { XamanConfig } from "./types.js";
@@ -0,0 +1,26 @@
1
+ export interface XamanConfig {
2
+ apiKey: string;
3
+ }
4
+
5
+ export interface XamanPaymentParams {
6
+ destination: string;
7
+ from: string;
8
+ amount: string;
9
+ memo?: string;
10
+ destinationTag?: number;
11
+ }
12
+
13
+ export interface XamanPaymentResult {
14
+ payloadId: string;
15
+ qrCode: string;
16
+ deepLink: string;
17
+ websocketUrl: string;
18
+ result: XamanTransactionResult;
19
+ }
20
+
21
+ export interface XamanTransactionResult {
22
+ success: boolean;
23
+ transactionId?: string;
24
+ account?: string;
25
+ reason?: string;
26
+ }
@@ -0,0 +1,126 @@
1
+ import { SwapKitError } from "@swapkit/helpers";
2
+ import type { Xumm } from "xumm";
3
+ import type { XamanPaymentParams } from "./types.js";
4
+
5
+ export const connectXamanWallet = async (xumm: Xumm) => {
6
+ if (!xumm) {
7
+ throw new SwapKitError("wallet_xaman_not_configured");
8
+ }
9
+
10
+ try {
11
+ const user = await xumm.user;
12
+ const account = await user?.account;
13
+
14
+ if (account) {
15
+ return account;
16
+ }
17
+
18
+ throw new SwapKitError("wallet_xaman_auth_failed");
19
+ } catch (error) {
20
+ console.error("Xaman wallet connection failed:", error);
21
+ throw new SwapKitError("wallet_xaman_connection_failed");
22
+ }
23
+ };
24
+
25
+ // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: might need refactoring later
26
+ export const sendXamanTransaction = async (xumm: Xumm, params: XamanPaymentParams) => {
27
+ try {
28
+ // Validate required parameters
29
+ if (!(params.destination && params.amount && params.from)) {
30
+ throw new SwapKitError("wallet_xaman_connection_failed");
31
+ }
32
+
33
+ // Convert XRP to drops (1 XRP = 1,000,000 drops)
34
+ const amountInDrops = (Number.parseFloat(params.amount) * 1000000).toString();
35
+
36
+ // Create transaction object
37
+ const transaction = {
38
+ TransactionType: "Payment" as const,
39
+ Destination: params.destination,
40
+ Amount: amountInDrops,
41
+ Account: params.from,
42
+ ...(params.destinationTag !== undefined && {
43
+ DestinationTag: params.destinationTag,
44
+ }),
45
+ ...(params.memo && {
46
+ Memos: [
47
+ {
48
+ Memo: {
49
+ MemoData: Buffer.from(params.memo, "utf8").toString("hex").toUpperCase(),
50
+ },
51
+ },
52
+ ],
53
+ }),
54
+ };
55
+
56
+ // Create and subscribe to payload following the official example
57
+ const subscription = await xumm.payload?.createAndSubscribe(transaction, (event) => {
58
+ if ("signed" in event.data) {
59
+ // Return event.data to close subscription and resolve promise
60
+ return event.data; // { signed: true|false, payload_uuidv4: '...' }
61
+ }
62
+ return undefined;
63
+ });
64
+
65
+ if (!subscription) {
66
+ throw new SwapKitError("wallet_xaman_transaction_failed");
67
+ }
68
+
69
+ const { created } = subscription;
70
+
71
+ // Handle payload presentation based on runtime environment
72
+ if (xumm.runtime?.xapp) {
73
+ xumm.xapp?.openSignRequest(created);
74
+ } else if (typeof window !== "undefined") {
75
+ const url =
76
+ created.pushed && created.next?.no_push_msg_received
77
+ ? created.next.no_push_msg_received
78
+ : created.next?.always;
79
+ if (url) window.open(url);
80
+ }
81
+
82
+ // Wait until the user signed/rejected
83
+ const resolved = await subscription.resolved;
84
+
85
+ if (!resolved || typeof resolved !== "object" || !("signed" in resolved) || !resolved.signed) {
86
+ throw new SwapKitError("wallet_xaman_transaction_failed");
87
+ }
88
+
89
+ // Fetch the full payload result using the UUID from resolved data
90
+ const payloadDetails = await xumm.payload?.get((resolved as any).payload_uuidv4);
91
+
92
+ if (!payloadDetails) {
93
+ throw new SwapKitError("wallet_xaman_monitoring_failed");
94
+ }
95
+
96
+ // Extract transaction ID from response
97
+ const transactionId = payloadDetails.response?.txid || "";
98
+ const account = payloadDetails.response?.account || "";
99
+
100
+ if (!transactionId) {
101
+ throw new SwapKitError("wallet_xaman_transaction_failed");
102
+ }
103
+
104
+ // Return comprehensive result
105
+ return {
106
+ // Initial payload info for QR codes, deep links, etc.
107
+ payloadId: created.uuid || "",
108
+ qrCode: created.refs?.qr_png || "",
109
+ deepLink: created.next?.always || "",
110
+ websocketUrl: created.refs?.websocket_status || "",
111
+ // Final transaction result - SUCCESS with tx hash
112
+ result: {
113
+ success: true,
114
+ transactionId,
115
+ account,
116
+ reason: undefined,
117
+ },
118
+ };
119
+ } catch (error) {
120
+ console.error("Xaman payment creation and subscription failed:", error);
121
+ if (error instanceof SwapKitError) {
122
+ throw error;
123
+ }
124
+ throw new SwapKitError("wallet_xaman_transaction_failed");
125
+ }
126
+ };
@@ -1,5 +0,0 @@
1
- import"./chunk-r308an05.js";var B="wss://relay.walletconnect.com",J="eip155:1",Q="eip155:56",W="eip155:43114",X="cosmos:thorchain",Y="cosmos:cosmoshub-4",Z="cosmos:kaiyo-1",$="cosmos:mayachain-mainnet-v1",c="eip155:42161",e="eip155:10",g="eip155:137",h="eip155:8453",o="near:mainnet",r="near:testnet",G="debug",a={name:"THORSwap",description:"THORSwap multi-chain dex aggregator powered by THORChain",url:"https://app.thorswap.finance/",icons:["https://static.thorswap.net/logo.png"]},l;((f)=>{f.ETH_SEND_TRANSACTION="eth_sendTransaction";f.ETH_SIGN="eth_sign";f.PERSONAL_SIGN="personal_sign";f.ETH_SIGN_TYPED_DATA="eth_signTypedData"})(l||={});var m;((b)=>{b.ETH_CHAIN_CHANGED="chainChanged";b.ETH_ACCOUNTS_CHANGED="accountsChanged"})(m||={});var p;((k)=>{k.COSMOS_SIGN_DIRECT="cosmos_signDirect";k.COSMOS_SIGN_AMINO="cosmos_signAmino";k.COSMOS_GET_ACCOUNTS="cosmos_getAccounts"})(p||={});var q;((j)=>{})(q||={});var u;((b)=>{b.SOL_SIGN_TRANSACTION="solana_signTransaction";b.SOL_SIGN_MESSAGE="solana_signMessage"})(u||={});var v;((j)=>{})(v||={});var w;((b)=>{b.POLKADOT_SIGN_TRANSACTION="polkadot_signTransaction";b.POLKADOT_SIGN_MESSAGE="polkadot_signMessage"})(w||={});var x;((j)=>{})(x||={});var y;((d)=>{d.NEAR_SIGN_IN="near_signIn";d.NEAR_SIGN_OUT="near_signOut";d.NEAR_GET_ACCOUNTS="near_getAccounts";d.NEAR_SIGN_AND_SEND_TRANSACTION="near_signAndSendTransaction";d.NEAR_SIGN_AND_SEND_TRANSACTIONS="near_signAndSendTransactions"})(y||={});var z;((j)=>{})(z||={});export{X as THORCHAIN_MAINNET_ID,g as POLYGON_MAINNET_ID,e as OPTIMISM_MAINNET_ID,r as NEAR_TESTNET_ID,o as NEAR_MAINNET_ID,$ as MAYACHAIN_MAINNET_ID,Z as KUJIRA_MAINNET_ID,J as ETHEREUM_MAINNET_ID,u as DEFAULT_SOLANA_METHODS,v as DEFAULT_SOLANA_EVENTS,B as DEFAULT_RELAY_URL,w as DEFAULT_POLKADOT_METHODS,x as DEFAULT_POLKADOT_EVENTS,y as DEFAULT_NEAR_METHODS,z as DEFAULT_NEAR_EVENTS,G as DEFAULT_LOGGER,m as DEFAULT_EIP_155_EVENTS,l as DEFAULT_EIP155_METHODS,p as DEFAULT_COSMOS_METHODS,q as DEFAULT_COSMOS_EVENTS,a as DEFAULT_APP_METADATA,Y as COSMOS_HUB_MAINNET_ID,Q as BSC_MAINNET_ID,h as BASE_MAINNET_ID,W as AVALANCHE_MAINNET_ID,c as ARBITRUM_ONE_MAINNET_ID};
2
- export{B as a,J as b,Q as c,W as d,X as e,Y as f,Z as g,$ as h,c as i,e as j,g as k,h as l,o as m,r as n,G as o,a as p,l as q,m as r,p as s,q as t,u,v,w,x,y,z};
3
-
4
- //# debugId=AE0835C8E7A4677464756E2164756E21
5
- //# sourceMappingURL=chunk-9sjqewve.js.map
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/walletconnect/constants.ts"],
4
- "sourcesContent": [
5
- "import type { ClientMetadata } from \"./types\";\n\nexport const DEFAULT_RELAY_URL = \"wss://relay.walletconnect.com\";\n\nexport const ETHEREUM_MAINNET_ID = \"eip155:1\";\nexport const BSC_MAINNET_ID = \"eip155:56\";\nexport const AVALANCHE_MAINNET_ID = \"eip155:43114\";\nexport const THORCHAIN_MAINNET_ID = \"cosmos:thorchain\";\nexport const COSMOS_HUB_MAINNET_ID = \"cosmos:cosmoshub-4\";\nexport const KUJIRA_MAINNET_ID = \"cosmos:kaiyo-1\";\nexport const MAYACHAIN_MAINNET_ID = \"cosmos:mayachain-mainnet-v1\";\nexport const ARBITRUM_ONE_MAINNET_ID = \"eip155:42161\";\nexport const OPTIMISM_MAINNET_ID = \"eip155:10\";\nexport const POLYGON_MAINNET_ID = \"eip155:137\";\nexport const BASE_MAINNET_ID = \"eip155:8453\";\nexport const NEAR_MAINNET_ID = \"near:mainnet\";\nexport const NEAR_TESTNET_ID = \"near:testnet\";\n\nexport const DEFAULT_LOGGER = \"debug\";\n\nexport const DEFAULT_APP_METADATA: ClientMetadata = {\n name: \"THORSwap\",\n description: \"THORSwap multi-chain dex aggregator powered by THORChain\",\n url: \"https://app.thorswap.finance/\",\n icons: [\"https://static.thorswap.net/logo.png\"],\n};\n\n/**\n * EIP155\n */\nexport enum DEFAULT_EIP155_METHODS {\n ETH_SEND_TRANSACTION = \"eth_sendTransaction\",\n // not supported by most WC wallets\n // ETH_SIGN_TRANSACTION = 'eth_signTransaction',\n ETH_SIGN = \"eth_sign\",\n PERSONAL_SIGN = \"personal_sign\",\n ETH_SIGN_TYPED_DATA = \"eth_signTypedData\",\n}\n\nexport enum DEFAULT_EIP_155_EVENTS {\n ETH_CHAIN_CHANGED = \"chainChanged\",\n ETH_ACCOUNTS_CHANGED = \"accountsChanged\",\n}\n\n/**\n * COSMOS\n */\nexport enum DEFAULT_COSMOS_METHODS {\n COSMOS_SIGN_DIRECT = \"cosmos_signDirect\",\n COSMOS_SIGN_AMINO = \"cosmos_signAmino\",\n COSMOS_GET_ACCOUNTS = \"cosmos_getAccounts\",\n}\n\nexport enum DEFAULT_COSMOS_EVENTS {}\n\n/**\n * SOLANA\n */\nexport enum DEFAULT_SOLANA_METHODS {\n SOL_SIGN_TRANSACTION = \"solana_signTransaction\",\n SOL_SIGN_MESSAGE = \"solana_signMessage\",\n}\n\nexport enum DEFAULT_SOLANA_EVENTS {}\n\n/**\n * POLKADOT\n */\nexport enum DEFAULT_POLKADOT_METHODS {\n POLKADOT_SIGN_TRANSACTION = \"polkadot_signTransaction\",\n POLKADOT_SIGN_MESSAGE = \"polkadot_signMessage\",\n}\n\nexport enum DEFAULT_POLKADOT_EVENTS {}\n\n/**\n * NEAR\n */\nexport enum DEFAULT_NEAR_METHODS {\n NEAR_SIGN_IN = \"near_signIn\",\n NEAR_SIGN_OUT = \"near_signOut\",\n NEAR_GET_ACCOUNTS = \"near_getAccounts\",\n NEAR_SIGN_AND_SEND_TRANSACTION = \"near_signAndSendTransaction\",\n NEAR_SIGN_AND_SEND_TRANSACTIONS = \"near_signAndSendTransactions\",\n}\n\nexport enum DEFAULT_NEAR_EVENTS {}\n"
6
- ],
7
- "mappings": "4BAEO,IAAM,EAAoB,gCAEpB,EAAsB,WACtB,EAAiB,YACjB,EAAuB,eACvB,EAAuB,mBACvB,EAAwB,qBACxB,EAAoB,iBACpB,EAAuB,8BACvB,EAA0B,eAC1B,EAAsB,YACtB,EAAqB,aACrB,EAAkB,cAClB,EAAkB,eAClB,EAAkB,eAElB,EAAiB,QAEjB,EAAuC,CAClD,KAAM,WACN,YAAa,2DACb,IAAK,gCACL,MAAO,CAAC,sCAAsC,CAChD,EAKY,GAAL,CAAK,IAAL,CACL,uBAAuB,sBAGvB,WAAW,WACX,gBAAgB,gBAChB,sBAAsB,sBANZ,QASL,IAAK,GAAL,CAAK,IAAL,CACL,oBAAoB,eACpB,uBAAuB,oBAFb,QAQL,IAAK,GAAL,CAAK,IAAL,CACL,qBAAqB,oBACrB,oBAAoB,mBACpB,sBAAsB,uBAHZ,QAML,IAAK,GAAL,CAAK,IAAL,IAAK,QAKL,IAAK,GAAL,CAAK,IAAL,CACL,uBAAuB,yBACvB,mBAAmB,uBAFT,QAKL,IAAK,GAAL,CAAK,IAAL,IAAK,QAKL,IAAK,GAAL,CAAK,IAAL,CACL,4BAA4B,2BAC5B,wBAAwB,yBAFd,QAKL,IAAK,GAAL,CAAK,IAAL,IAAK,QAKL,IAAK,GAAL,CAAK,IAAL,CACL,eAAe,cACf,gBAAgB,eAChB,oBAAoB,mBACpB,iCAAiC,8BACjC,kCAAkC,iCALxB,QAQL,IAAK,GAAL,CAAK,IAAL,IAAK",
8
- "debugId": "AE0835C8E7A4677464756E2164756E21",
9
- "names": []
10
- }
@@ -1,4 +0,0 @@
1
- var B="wss://relay.walletconnect.com",J="eip155:1",Q="eip155:56",W="eip155:43114",X="cosmos:thorchain",Y="cosmos:cosmoshub-4",Z="cosmos:kaiyo-1",$="cosmos:mayachain-mainnet-v1",c="eip155:42161",e="eip155:10",g="eip155:137",h="eip155:8453",o="near:mainnet",r="near:testnet",G="debug",a={name:"THORSwap",description:"THORSwap multi-chain dex aggregator powered by THORChain",url:"https://app.thorswap.finance/",icons:["https://static.thorswap.net/logo.png"]},l;((f)=>{f.ETH_SEND_TRANSACTION="eth_sendTransaction";f.ETH_SIGN="eth_sign";f.PERSONAL_SIGN="personal_sign";f.ETH_SIGN_TYPED_DATA="eth_signTypedData"})(l||={});var m;((b)=>{b.ETH_CHAIN_CHANGED="chainChanged";b.ETH_ACCOUNTS_CHANGED="accountsChanged"})(m||={});var p;((k)=>{k.COSMOS_SIGN_DIRECT="cosmos_signDirect";k.COSMOS_SIGN_AMINO="cosmos_signAmino";k.COSMOS_GET_ACCOUNTS="cosmos_getAccounts"})(p||={});var q;((j)=>{})(q||={});var u;((b)=>{b.SOL_SIGN_TRANSACTION="solana_signTransaction";b.SOL_SIGN_MESSAGE="solana_signMessage"})(u||={});var v;((j)=>{})(v||={});var w;((b)=>{b.POLKADOT_SIGN_TRANSACTION="polkadot_signTransaction";b.POLKADOT_SIGN_MESSAGE="polkadot_signMessage"})(w||={});var x;((j)=>{})(x||={});var y;((d)=>{d.NEAR_SIGN_IN="near_signIn";d.NEAR_SIGN_OUT="near_signOut";d.NEAR_GET_ACCOUNTS="near_getAccounts";d.NEAR_SIGN_AND_SEND_TRANSACTION="near_signAndSendTransaction";d.NEAR_SIGN_AND_SEND_TRANSACTIONS="near_signAndSendTransactions"})(y||={});var z;((j)=>{})(z||={});
2
-
3
- //# debugId=1E13BB1472FEAD2C64756E2164756E21
4
- //# sourceMappingURL=chunk-sn6pgje5.js.map
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/walletconnect/constants.ts"],
4
- "sourcesContent": [
5
- "import type { ClientMetadata } from \"./types\";\n\nexport const DEFAULT_RELAY_URL = \"wss://relay.walletconnect.com\";\n\nexport const ETHEREUM_MAINNET_ID = \"eip155:1\";\nexport const BSC_MAINNET_ID = \"eip155:56\";\nexport const AVALANCHE_MAINNET_ID = \"eip155:43114\";\nexport const THORCHAIN_MAINNET_ID = \"cosmos:thorchain\";\nexport const COSMOS_HUB_MAINNET_ID = \"cosmos:cosmoshub-4\";\nexport const KUJIRA_MAINNET_ID = \"cosmos:kaiyo-1\";\nexport const MAYACHAIN_MAINNET_ID = \"cosmos:mayachain-mainnet-v1\";\nexport const ARBITRUM_ONE_MAINNET_ID = \"eip155:42161\";\nexport const OPTIMISM_MAINNET_ID = \"eip155:10\";\nexport const POLYGON_MAINNET_ID = \"eip155:137\";\nexport const BASE_MAINNET_ID = \"eip155:8453\";\nexport const NEAR_MAINNET_ID = \"near:mainnet\";\nexport const NEAR_TESTNET_ID = \"near:testnet\";\n\nexport const DEFAULT_LOGGER = \"debug\";\n\nexport const DEFAULT_APP_METADATA: ClientMetadata = {\n name: \"THORSwap\",\n description: \"THORSwap multi-chain dex aggregator powered by THORChain\",\n url: \"https://app.thorswap.finance/\",\n icons: [\"https://static.thorswap.net/logo.png\"],\n};\n\n/**\n * EIP155\n */\nexport enum DEFAULT_EIP155_METHODS {\n ETH_SEND_TRANSACTION = \"eth_sendTransaction\",\n // not supported by most WC wallets\n // ETH_SIGN_TRANSACTION = 'eth_signTransaction',\n ETH_SIGN = \"eth_sign\",\n PERSONAL_SIGN = \"personal_sign\",\n ETH_SIGN_TYPED_DATA = \"eth_signTypedData\",\n}\n\nexport enum DEFAULT_EIP_155_EVENTS {\n ETH_CHAIN_CHANGED = \"chainChanged\",\n ETH_ACCOUNTS_CHANGED = \"accountsChanged\",\n}\n\n/**\n * COSMOS\n */\nexport enum DEFAULT_COSMOS_METHODS {\n COSMOS_SIGN_DIRECT = \"cosmos_signDirect\",\n COSMOS_SIGN_AMINO = \"cosmos_signAmino\",\n COSMOS_GET_ACCOUNTS = \"cosmos_getAccounts\",\n}\n\nexport enum DEFAULT_COSMOS_EVENTS {}\n\n/**\n * SOLANA\n */\nexport enum DEFAULT_SOLANA_METHODS {\n SOL_SIGN_TRANSACTION = \"solana_signTransaction\",\n SOL_SIGN_MESSAGE = \"solana_signMessage\",\n}\n\nexport enum DEFAULT_SOLANA_EVENTS {}\n\n/**\n * POLKADOT\n */\nexport enum DEFAULT_POLKADOT_METHODS {\n POLKADOT_SIGN_TRANSACTION = \"polkadot_signTransaction\",\n POLKADOT_SIGN_MESSAGE = \"polkadot_signMessage\",\n}\n\nexport enum DEFAULT_POLKADOT_EVENTS {}\n\n/**\n * NEAR\n */\nexport enum DEFAULT_NEAR_METHODS {\n NEAR_SIGN_IN = \"near_signIn\",\n NEAR_SIGN_OUT = \"near_signOut\",\n NEAR_GET_ACCOUNTS = \"near_getAccounts\",\n NEAR_SIGN_AND_SEND_TRANSACTION = \"near_signAndSendTransaction\",\n NEAR_SIGN_AND_SEND_TRANSACTIONS = \"near_signAndSendTransactions\",\n}\n\nexport enum DEFAULT_NEAR_EVENTS {}\n"
6
- ],
7
- "mappings": "AAEO,IAAM,EAAoB,gCAEpB,EAAsB,WACtB,EAAiB,YACjB,EAAuB,eACvB,EAAuB,mBACvB,EAAwB,qBACxB,EAAoB,iBACpB,EAAuB,8BACvB,EAA0B,eAC1B,EAAsB,YACtB,EAAqB,aACrB,EAAkB,cAClB,EAAkB,eAClB,EAAkB,eAElB,EAAiB,QAEjB,EAAuC,CAClD,KAAM,WACN,YAAa,2DACb,IAAK,gCACL,MAAO,CAAC,sCAAsC,CAChD,EAKY,GAAL,CAAK,IAAL,CACL,uBAAuB,sBAGvB,WAAW,WACX,gBAAgB,gBAChB,sBAAsB,sBANZ,QASL,IAAK,GAAL,CAAK,IAAL,CACL,oBAAoB,eACpB,uBAAuB,oBAFb,QAQL,IAAK,GAAL,CAAK,IAAL,CACL,qBAAqB,oBACrB,oBAAoB,mBACpB,sBAAsB,uBAHZ,QAML,IAAK,GAAL,CAAK,IAAL,IAAK,QAKL,IAAK,GAAL,CAAK,IAAL,CACL,uBAAuB,yBACvB,mBAAmB,uBAFT,QAKL,IAAK,GAAL,CAAK,IAAL,IAAK,QAKL,IAAK,GAAL,CAAK,IAAL,CACL,4BAA4B,2BAC5B,wBAAwB,yBAFd,QAKL,IAAK,GAAL,CAAK,IAAL,IAAK,QAKL,IAAK,GAAL,CAAK,IAAL,CACL,eAAe,cACf,gBAAgB,eAChB,oBAAoB,mBACpB,iCAAiC,8BACjC,kCAAkC,iCALxB,QAQL,IAAK,GAAL,CAAK,IAAL,IAAK",
8
- "debugId": "1E13BB1472FEAD2C64756E2164756E21",
9
- "names": []
10
- }