@0xsquid/react-hooks 7.1.1-wallets-refactor-beta.0 → 7.1.1-wallets-refactor-beta.1

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 (159) hide show
  1. package/dist/core/client/index.d.ts +2 -0
  2. package/dist/core/client/index.js +3 -0
  3. package/dist/core/client/index.js.map +1 -1
  4. package/dist/core/connectors/xrpl/CrossMark.d.ts +13 -0
  5. package/dist/core/connectors/xrpl/CrossMark.js +76 -0
  6. package/dist/core/connectors/xrpl/CrossMark.js.map +1 -0
  7. package/dist/core/connectors/xrpl/Xaman.d.ts +16 -0
  8. package/dist/core/connectors/xrpl/Xaman.js +80 -0
  9. package/dist/core/connectors/xrpl/Xaman.js.map +1 -0
  10. package/dist/core/connectors/xrpl/XamanQr.d.ts +15 -0
  11. package/dist/core/connectors/xrpl/XamanQr.js +78 -0
  12. package/dist/core/connectors/xrpl/XamanQr.js.map +1 -0
  13. package/dist/core/connectors/xrpl/XrplMetamaskSnap.d.ts +35 -0
  14. package/dist/core/connectors/xrpl/XrplMetamaskSnap.js +176 -0
  15. package/dist/core/connectors/xrpl/XrplMetamaskSnap.js.map +1 -0
  16. package/dist/core/constants.d.ts +8 -5
  17. package/dist/core/constants.js +14 -5
  18. package/dist/core/constants.js.map +1 -1
  19. package/dist/core/index.d.ts +1 -1
  20. package/dist/core/index.js +1 -1
  21. package/dist/core/index.js.map +1 -1
  22. package/dist/core/multicall3.d.ts +5 -1
  23. package/dist/core/multicall3.js +21 -1
  24. package/dist/core/multicall3.js.map +1 -1
  25. package/dist/core/providers/XrplProvider.d.ts +17 -0
  26. package/dist/core/providers/XrplProvider.js +15 -0
  27. package/dist/core/providers/XrplProvider.js.map +1 -0
  28. package/dist/core/queries/queries-keys.d.ts +9 -1
  29. package/dist/core/queries/queries-keys.js +33 -0
  30. package/dist/core/queries/queries-keys.js.map +1 -1
  31. package/dist/core/types/event.d.ts +7 -0
  32. package/dist/core/types/index.d.ts +2 -1
  33. package/dist/core/types/index.js +2 -1
  34. package/dist/core/types/index.js.map +1 -1
  35. package/dist/core/types/wallet.d.ts +39 -17
  36. package/dist/core/types/wallet.js +4 -0
  37. package/dist/core/types/wallet.js.map +1 -1
  38. package/dist/core/types/xrpl.d.ts +70 -0
  39. package/dist/core/types/xrpl.js +20 -0
  40. package/dist/core/types/xrpl.js.map +1 -0
  41. package/dist/core/wallets.js +48 -3
  42. package/dist/core/wallets.js.map +1 -1
  43. package/dist/hooks/evm/useEvm.js +26 -4
  44. package/dist/hooks/evm/useEvm.js.map +1 -1
  45. package/dist/hooks/evm/useEvmWallets.d.ts +0 -3
  46. package/dist/hooks/evm/useEvmWallets.js +0 -3
  47. package/dist/hooks/evm/useEvmWallets.js.map +1 -1
  48. package/dist/hooks/index.d.ts +2 -0
  49. package/dist/hooks/index.js +2 -0
  50. package/dist/hooks/index.js.map +1 -1
  51. package/dist/hooks/solana/useSolana.js +2 -3
  52. package/dist/hooks/solana/useSolana.js.map +1 -1
  53. package/dist/hooks/store/useAddressBookStore.d.ts +1 -1
  54. package/dist/hooks/store/useAddressBookStore.js +6 -2
  55. package/dist/hooks/store/useAddressBookStore.js.map +1 -1
  56. package/dist/hooks/store/useWalletStore.d.ts +22 -3
  57. package/dist/hooks/store/useWalletStore.js +18 -4
  58. package/dist/hooks/store/useWalletStore.js.map +1 -1
  59. package/dist/hooks/sui/useSui.js +2 -3
  60. package/dist/hooks/sui/useSui.js.map +1 -1
  61. package/dist/hooks/tokens/useAllConnectedWalletBalances.js +11 -0
  62. package/dist/hooks/tokens/useAllConnectedWalletBalances.js.map +1 -1
  63. package/dist/hooks/tokens/useAllTokensWithBalanceForChainType.js +13 -2
  64. package/dist/hooks/tokens/useAllTokensWithBalanceForChainType.js.map +1 -1
  65. package/dist/hooks/tokens/useBalance.d.ts +1 -0
  66. package/dist/hooks/tokens/useBalance.js +22 -1
  67. package/dist/hooks/tokens/useBalance.js.map +1 -1
  68. package/dist/hooks/tokens/useMultiChainBalance.js +10 -1
  69. package/dist/hooks/tokens/useMultiChainBalance.js.map +1 -1
  70. package/dist/hooks/tokens/useNativeBalance.d.ts +1 -0
  71. package/dist/hooks/tokens/useNativeBalance.js +33 -1
  72. package/dist/hooks/tokens/useNativeBalance.js.map +1 -1
  73. package/dist/hooks/tokens/useNativeTokenForChain.js +3 -1
  74. package/dist/hooks/tokens/useNativeTokenForChain.js.map +1 -1
  75. package/dist/hooks/tokens/useSquidTokens.d.ts +1 -0
  76. package/dist/hooks/tokens/useSquidTokens.js +6 -1
  77. package/dist/hooks/tokens/useSquidTokens.js.map +1 -1
  78. package/dist/hooks/transaction/send/useSendTransaction.d.ts +1 -1
  79. package/dist/hooks/transaction/send/useSendTransaction.js +28 -3
  80. package/dist/hooks/transaction/send/useSendTransaction.js.map +1 -1
  81. package/dist/hooks/transaction/useAllTransactionsStatus.js +7 -0
  82. package/dist/hooks/transaction/useAllTransactionsStatus.js.map +1 -1
  83. package/dist/hooks/transaction/useExecuteTransaction.d.ts +1 -0
  84. package/dist/hooks/transaction/useExecuteTransaction.js +60 -6
  85. package/dist/hooks/transaction/useExecuteTransaction.js.map +1 -1
  86. package/dist/hooks/transaction/useSendTransactionStatus.js +14 -4
  87. package/dist/hooks/transaction/useSendTransactionStatus.js.map +1 -1
  88. package/dist/hooks/wallet/useAutoConnect.js +1 -4
  89. package/dist/hooks/wallet/useAutoConnect.js.map +1 -1
  90. package/dist/hooks/wallet/useMultiChainWallet.d.ts +241 -0
  91. package/dist/hooks/wallet/useMultiChainWallet.js +16 -0
  92. package/dist/hooks/wallet/useMultiChainWallet.js.map +1 -1
  93. package/dist/hooks/wallet/useSigner.d.ts +1 -0
  94. package/dist/hooks/wallet/useSigner.js +7 -0
  95. package/dist/hooks/wallet/useSigner.js.map +1 -1
  96. package/dist/hooks/wallet/useWallet.d.ts +251 -6
  97. package/dist/hooks/wallet/useWallet.js +40 -3
  98. package/dist/hooks/wallet/useWallet.js.map +1 -1
  99. package/dist/hooks/wallet/useWallets.js +4 -1
  100. package/dist/hooks/wallet/useWallets.js.map +1 -1
  101. package/dist/hooks/xrpl/useXrpl.d.ts +2 -0
  102. package/dist/hooks/xrpl/useXrpl.js +21 -0
  103. package/dist/hooks/xrpl/useXrpl.js.map +1 -0
  104. package/dist/hooks/xrpl/useXrplTrustLine.d.ts +17 -0
  105. package/dist/hooks/xrpl/useXrplTrustLine.js +137 -0
  106. package/dist/hooks/xrpl/useXrplTrustLine.js.map +1 -0
  107. package/dist/hooks/xrpl/useXrplWallets.d.ts +43 -0
  108. package/dist/hooks/xrpl/useXrplWallets.js +46 -0
  109. package/dist/hooks/xrpl/useXrplWallets.js.map +1 -0
  110. package/dist/provider/index.js +7 -5
  111. package/dist/provider/index.js.map +1 -1
  112. package/dist/services/external/rpcService.d.ts +2 -0
  113. package/dist/services/external/rpcService.js +30 -4
  114. package/dist/services/external/rpcService.js.map +1 -1
  115. package/dist/services/external/websocket.d.ts +6 -0
  116. package/dist/services/external/websocket.js +34 -0
  117. package/dist/services/external/websocket.js.map +1 -0
  118. package/dist/services/external/xaman.d.ts +30 -0
  119. package/dist/services/external/xaman.js +46 -0
  120. package/dist/services/external/xaman.js.map +1 -0
  121. package/dist/services/external/xrplRpcClient.d.ts +39 -0
  122. package/dist/services/external/xrplRpcClient.js +167 -0
  123. package/dist/services/external/xrplRpcClient.js.map +1 -0
  124. package/dist/services/index.d.ts +1 -0
  125. package/dist/services/index.js +1 -0
  126. package/dist/services/index.js.map +1 -1
  127. package/dist/services/internal/errorService.js +1 -1
  128. package/dist/services/internal/errorService.js.map +1 -1
  129. package/dist/services/internal/eventService.d.ts +15 -0
  130. package/dist/services/internal/eventService.js +21 -0
  131. package/dist/services/internal/eventService.js.map +1 -1
  132. package/dist/services/internal/evmService.js +14 -7
  133. package/dist/services/internal/evmService.js.map +1 -1
  134. package/dist/services/internal/sendTransaction.d.ts +6 -0
  135. package/dist/services/internal/sendTransaction.js +46 -1
  136. package/dist/services/internal/sendTransaction.js.map +1 -1
  137. package/dist/services/internal/sendTransactionStatus.js +16 -0
  138. package/dist/services/internal/sendTransactionStatus.js.map +1 -1
  139. package/dist/services/internal/solanaService.js +5 -2
  140. package/dist/services/internal/solanaService.js.map +1 -1
  141. package/dist/services/internal/transactionService.js +4 -2
  142. package/dist/services/internal/transactionService.js.map +1 -1
  143. package/dist/services/internal/transactionStatusService.js +2 -1
  144. package/dist/services/internal/transactionStatusService.js.map +1 -1
  145. package/dist/services/internal/walletService.d.ts +9 -7
  146. package/dist/services/internal/walletService.js +31 -25
  147. package/dist/services/internal/walletService.js.map +1 -1
  148. package/dist/services/internal/walletStandardService.d.ts +7 -0
  149. package/dist/services/internal/walletStandardService.js +7 -0
  150. package/dist/services/internal/walletStandardService.js.map +1 -1
  151. package/dist/services/internal/xrplService.d.ts +17 -0
  152. package/dist/services/internal/xrplService.js +52 -0
  153. package/dist/services/internal/xrplService.js.map +1 -0
  154. package/dist/tests/walletService.test.js +14 -14
  155. package/dist/tests/walletService.test.js.map +1 -1
  156. package/package.json +4 -2
  157. package/dist/hooks/bitcoin/useBitcoinWallets.d.ts +0 -4
  158. package/dist/hooks/bitcoin/useBitcoinWallets.js +0 -10
  159. package/dist/hooks/bitcoin/useBitcoinWallets.js.map +0 -1
@@ -3,12 +3,14 @@ import { StargateClient } from "@cosmjs/stargate";
3
3
  import { SuiClient } from "@mysten/sui/client";
4
4
  import { Connection as SolanaConnection } from "@solana/web3.js";
5
5
  import { JsonRpcProvider } from "ethers";
6
+ import { XrplRpcClient } from "../../services/external/xrplRpcClient";
6
7
  type ChainTypeToClient = {
7
8
  [ChainType.EVM]: JsonRpcProvider;
8
9
  [ChainType.COSMOS]: StargateClient;
9
10
  [ChainType.SOLANA]: SolanaConnection;
10
11
  [ChainType.BTC]: null;
11
12
  [ChainType.SUI]: SuiClient;
13
+ [ChainType.XRPL]: XrplRpcClient;
12
14
  };
13
15
  export declare function getClient<T extends ChainType>(chain: ChainData): Promise<ChainTypeToClient[T]>;
14
16
  export {};
@@ -4,6 +4,7 @@ import { SuiClient } from "@mysten/sui/client";
4
4
  import { Connection as SolanaConnection } from "@solana/web3.js";
5
5
  import { JsonRpcProvider } from "ethers";
6
6
  import { getWorkingCosmosRpcUrl } from "../../services/external/rpcService";
7
+ import { XrplRpcClient } from "../../services/external/xrplRpcClient";
7
8
  import { SOLANA_RPC_URL } from "../constants";
8
9
  const clientCache = new Map();
9
10
  export async function getClient(chain) {
@@ -30,6 +31,8 @@ async function createClient(chain) {
30
31
  return new SuiClient({
31
32
  url: chain.rpc,
32
33
  });
34
+ case ChainType.XRPL:
35
+ return new XrplRpcClient(chain.rpc);
33
36
  }
34
37
  }
35
38
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,IAAI,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAY9C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAgD,CAAC;AAE5E,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,KAAgB;IAEhB,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,OAAO,EAAW,CAAC;IAE3D,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QACxB,OAAO,WAAW,CAAC,GAAG,CAAC,GAAG,CAAyB,CAAC;KACrD;IAED,MAAM,MAAM,GAAG,MAAM,YAAY,CAAI,KAAK,CAAC,CAAC;IAE5C,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAE7B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,KAAgB;IAEhB,QAAQ,KAAK,CAAC,SAAS,EAAE;QACvB,KAAK,SAAS,CAAC,GAAG;YAChB,OAAO,IAAI,eAAe,CAAC,KAAK,CAAC,GAAG,CAAyB,CAAC;QAEhE,KAAK,SAAS,CAAC,MAAM;YACnB,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,KAAK,CAAC,CAAC;YACnD,OAAO,CAAC,MAAM,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAyB,CAAC;QAExE,KAAK,SAAS,CAAC,MAAM;YACnB,OAAO,IAAI,gBAAgB,CAAC,cAAc,CAAyB,CAAC;QAEtE,KAAK,SAAS,CAAC,GAAG;YAChB,OAAO,IAA4B,CAAC;QAEtC,KAAK,SAAS,CAAC,GAAG;YAChB,OAAO,IAAI,SAAS,CAAC;gBACnB,GAAG,EAAE,KAAK,CAAC,GAAG;aACf,CAAyB,CAAC;KAC9B;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,IAAI,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAa9C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAgD,CAAC;AAE5E,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,KAAgB;IAEhB,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,OAAO,EAAW,CAAC;IAE3D,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QACxB,OAAO,WAAW,CAAC,GAAG,CAAC,GAAG,CAAyB,CAAC;KACrD;IAED,MAAM,MAAM,GAAG,MAAM,YAAY,CAAI,KAAK,CAAC,CAAC;IAE5C,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAE7B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,KAAgB;IAEhB,QAAQ,KAAK,CAAC,SAAS,EAAE;QACvB,KAAK,SAAS,CAAC,GAAG;YAChB,OAAO,IAAI,eAAe,CAAC,KAAK,CAAC,GAAG,CAAyB,CAAC;QAEhE,KAAK,SAAS,CAAC,MAAM;YACnB,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,KAAK,CAAC,CAAC;YACnD,OAAO,CAAC,MAAM,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAyB,CAAC;QAExE,KAAK,SAAS,CAAC,MAAM;YACnB,OAAO,IAAI,gBAAgB,CAAC,cAAc,CAAyB,CAAC;QAEtE,KAAK,SAAS,CAAC,GAAG;YAChB,OAAO,IAA4B,CAAC;QAEtC,KAAK,SAAS,CAAC,GAAG;YAChB,OAAO,IAAI,SAAS,CAAC;gBACnB,GAAG,EAAE,KAAK,CAAC,GAAG;aACf,CAAyB,CAAC;QAE7B,KAAK,SAAS,CAAC,IAAI;YACjB,OAAO,IAAI,aAAa,CAAC,KAAK,CAAC,GAAG,CAAyB,CAAC;KAC/D;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { XrplConnector, XrplNetwork, XrplTransaction } from "../../types/xrpl";
2
+ export declare class CrossmarkConnector implements XrplConnector {
3
+ private getProvider;
4
+ connect(): Promise<string>;
5
+ signAndSubmit({ network, tx, }: {
6
+ network: XrplNetwork;
7
+ tx: XrplTransaction;
8
+ }): Promise<{
9
+ hash: string;
10
+ status: string;
11
+ }>;
12
+ private getActiveNetwork;
13
+ }
@@ -0,0 +1,76 @@
1
+ import { XrplNetwork } from "../../types/xrpl";
2
+ var NetworkLabel;
3
+ (function (NetworkLabel) {
4
+ NetworkLabel["XAHAU"] = "xahau";
5
+ NetworkLabel["XRPL"] = "xrp ledger";
6
+ })(NetworkLabel || (NetworkLabel = {}));
7
+ var NetworkType;
8
+ (function (NetworkType) {
9
+ NetworkType["TESTNET"] = "testnet";
10
+ NetworkType["MAINNET"] = "mainnet";
11
+ NetworkType["DEVNET"] = "devnet";
12
+ })(NetworkType || (NetworkType = {}));
13
+ export class CrossmarkConnector {
14
+ getProvider() {
15
+ return window?.xrpl?.crossmark;
16
+ }
17
+ async connect() {
18
+ const provider = this.getProvider();
19
+ if (!provider) {
20
+ throw new Error("Crossmark provider not found");
21
+ }
22
+ await provider.async.signInAndWait();
23
+ const address = provider.session?.address;
24
+ if (!address) {
25
+ throw new Error("Crossmark address not found");
26
+ }
27
+ return address;
28
+ }
29
+ async signAndSubmit({ network, tx, }) {
30
+ const activeNetwork = this.getActiveNetwork();
31
+ if (activeNetwork !== network) {
32
+ throw new Error(`Invalid network (expected ${network}, got ${activeNetwork})`);
33
+ }
34
+ const provider = this.getProvider();
35
+ if (!provider) {
36
+ throw new Error("Crossmark provider not found");
37
+ }
38
+ const result = await provider.async.signAndSubmitAndWait(tx);
39
+ const { data } = result.response;
40
+ if (data.meta?.isRejected) {
41
+ throw new Error("User rejected the request.");
42
+ }
43
+ if (data.meta?.isError) {
44
+ throw new Error(data.errorMessage || "Error signing transaction");
45
+ }
46
+ if (!data.resp.result) {
47
+ throw new Error("Invalid transaction response");
48
+ }
49
+ return {
50
+ hash: data.resp.result.hash,
51
+ status: data.resp.result.meta.TransactionResult,
52
+ };
53
+ }
54
+ getActiveNetwork() {
55
+ const provider = this.getProvider();
56
+ if (!provider) {
57
+ throw new Error("Crossmark provider not found");
58
+ }
59
+ const network = provider.session?.network;
60
+ if (!network) {
61
+ throw new Error("Crossmark network not found");
62
+ }
63
+ if (network.label !== NetworkLabel.XRPL) {
64
+ throw new Error(`Active network is not supported (expected '${NetworkLabel.XRPL}', got '${network.label}')`);
65
+ }
66
+ switch (network.type) {
67
+ case NetworkType.MAINNET:
68
+ return XrplNetwork.MAINNET;
69
+ case NetworkType.TESTNET:
70
+ return XrplNetwork.TESTNET;
71
+ default:
72
+ throw new Error(`Active network is not supported (got '${network.type}')`);
73
+ }
74
+ }
75
+ }
76
+ //# sourceMappingURL=CrossMark.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CrossMark.js","sourceRoot":"","sources":["../../../../src/core/connectors/xrpl/CrossMark.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,WAAW,EAAmB,MAAM,kBAAkB,CAAC;AAE/E,IAAK,YAGJ;AAHD,WAAK,YAAY;IACf,+BAAe,CAAA;IACf,mCAAmB,CAAA;AACrB,CAAC,EAHI,YAAY,KAAZ,YAAY,QAGhB;AAED,IAAK,WAIJ;AAJD,WAAK,WAAW;IACd,kCAAmB,CAAA;IACnB,kCAAmB,CAAA;IACnB,gCAAiB,CAAA;AACnB,CAAC,EAJI,WAAW,KAAX,WAAW,QAIf;AAwCD,MAAM,OAAO,kBAAkB;IACrB,WAAW;QACjB,OAAQ,MAAc,EAAE,IAAI,EAAE,SAAS,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAEpC,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;SACjD;QAED,MAAM,QAAQ,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QAErC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;QAE1C,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;SAChD;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,EAClB,OAAO,EACP,EAAE,GAIH;QACC,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE9C,IAAI,aAAa,KAAK,OAAO,EAAE;YAC7B,MAAM,IAAI,KAAK,CACb,6BAA6B,OAAO,SAAS,aAAa,GAAG,CAC9D,CAAC;SACH;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAEpC,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;SACjD;QAED,MAAM,MAAM,GACV,MAAM,QAAQ,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;QAEhD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC;QAEjC,IAAI,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE;YACzB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;SAC/C;QAED,IAAI,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE;YACtB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,2BAA2B,CAAC,CAAC;SACnE;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;SACjD;QAED,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI;YAC3B,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB;SAChD,CAAC;IACJ,CAAC;IAEO,gBAAgB;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAEpC,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;SACjD;QAED,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;QAE1C,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;SAChD;QAED,IAAI,OAAO,CAAC,KAAK,KAAK,YAAY,CAAC,IAAI,EAAE;YACvC,MAAM,IAAI,KAAK,CACb,8CAA8C,YAAY,CAAC,IAAI,WAAW,OAAO,CAAC,KAAK,IAAI,CAC5F,CAAC;SACH;QAED,QAAQ,OAAO,CAAC,IAAI,EAAE;YACpB,KAAK,WAAW,CAAC,OAAO;gBACtB,OAAO,WAAW,CAAC,OAAO,CAAC;YAC7B,KAAK,WAAW,CAAC,OAAO;gBACtB,OAAO,WAAW,CAAC,OAAO,CAAC;YAC7B;gBACE,MAAM,IAAI,KAAK,CACb,yCAAyC,OAAO,CAAC,IAAI,IAAI,CAC1D,CAAC;SACL;IACH,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ import type { Xumm } from "xumm";
2
+ import { XrplConnector, XrplNetwork, XrplTransaction } from "../../types/xrpl";
3
+ export declare class XamanConnector implements XrplConnector {
4
+ xummAppId: string;
5
+ xumm: Xumm | null;
6
+ private validateXummInitialized;
7
+ private initializeXumm;
8
+ connect(): Promise<string>;
9
+ signAndSubmit({ network, tx, }: {
10
+ tx: XrplTransaction;
11
+ network: XrplNetwork;
12
+ }): Promise<{
13
+ hash: string;
14
+ status: string;
15
+ }>;
16
+ }
@@ -0,0 +1,80 @@
1
+ import { XamanClient } from "../../../services/external/xaman";
2
+ import { XrplTxStatus, } from "../../types/xrpl";
3
+ export class XamanConnector {
4
+ // Xumm app ID, safe to expose on client-side
5
+ xummAppId = "5f341f00-03c6-4f3e-a367-e69698ca8337";
6
+ xumm = null;
7
+ validateXummInitialized() {
8
+ if (!this.xumm) {
9
+ throw new Error("Xumm is not initialized");
10
+ }
11
+ }
12
+ async initializeXumm() {
13
+ // the Xumm constructor can run in 3 different environments: Server, Browser, and xApp (Xaman's embedded browser)
14
+ // When running in server, the constructor needs both App ID and API secret
15
+ // When running in xApp or browser envs, the constructor only needs the App ID
16
+ // We cannot initialize the Xumm instance in the constructor
17
+ // as it would throw an error in SRR (API secret is required in server env),
18
+ // so we need to initialize it on the client-side
19
+ if (!this.xumm) {
20
+ const { Xumm } = await import("xumm");
21
+ this.xumm = new Xumm(this.xummAppId);
22
+ }
23
+ }
24
+ async connect() {
25
+ await this.initializeXumm();
26
+ this.validateXummInitialized();
27
+ const connectedAddress = await this.xumm.user.account;
28
+ if (!connectedAddress) {
29
+ throw new Error("User not connected");
30
+ }
31
+ return connectedAddress;
32
+ }
33
+ async signAndSubmit({ network, tx, }) {
34
+ this.validateXummInitialized();
35
+ if (!this.xumm.xapp) {
36
+ throw new Error("Not in xApp context");
37
+ }
38
+ if (!this.xumm.payload) {
39
+ throw new Error("Payload not available");
40
+ }
41
+ const xamanNetwork = XamanClient.getXamanNetwork(network);
42
+ const txPayload = await this.xumm.payload.create({
43
+ TransactionType: "Payment",
44
+ options: {
45
+ force_network: xamanNetwork,
46
+ },
47
+ txjson: tx,
48
+ });
49
+ await this.xumm.xapp.openSignRequest(txPayload);
50
+ const response = await new Promise((resolve, reject) => {
51
+ this.validateXummInitialized();
52
+ if (!this.xumm.xapp) {
53
+ reject(new Error("Not in xApp context"));
54
+ }
55
+ this.xumm.on("payload", async (data) => {
56
+ this.validateXummInitialized();
57
+ if (data && data.reason === "DECLINED") {
58
+ reject(new Error("User rejected the request."));
59
+ }
60
+ if (data && data.reason === "SIGNED") {
61
+ if (!this.xumm.payload) {
62
+ throw new Error("Payload not available");
63
+ }
64
+ const fullPayload = await this.xumm.payload.get(data.uuid);
65
+ if (fullPayload?.response.txid) {
66
+ resolve({
67
+ hash: fullPayload.response.txid,
68
+ status: XrplTxStatus.SUCCESS,
69
+ });
70
+ }
71
+ else {
72
+ reject(new Error("Transaction hash not found"));
73
+ }
74
+ }
75
+ });
76
+ });
77
+ return response;
78
+ }
79
+ }
80
+ //# sourceMappingURL=Xaman.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Xaman.js","sourceRoot":"","sources":["../../../../src/core/connectors/xrpl/Xaman.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { XrplConnector, XrplNetwork, XrplTransaction } from "../../types/xrpl";
2
+ export declare class XamanQrConnector implements XrplConnector {
3
+ cancelConnectQr: (() => void) | null;
4
+ cancelSignAndSubmitQr: (() => void) | null;
5
+ cancelConnect(): void;
6
+ cancelSignAndSubmit(): void;
7
+ connect(): Promise<string>;
8
+ signAndSubmit({ tx, network, }: {
9
+ tx: XrplTransaction;
10
+ network: XrplNetwork;
11
+ }): Promise<{
12
+ hash: string;
13
+ status: string;
14
+ }>;
15
+ }
@@ -0,0 +1,78 @@
1
+ import { WidgetEvents } from "../../../services";
2
+ import { websocket } from "../../../services/external/websocket";
3
+ import { XamanClient } from "../../../services/external/xaman";
4
+ import { XrplTxStatus, } from "../../types/xrpl";
5
+ export class XamanQrConnector {
6
+ cancelConnectQr = null;
7
+ cancelSignAndSubmitQr = null;
8
+ cancelConnect() {
9
+ this.cancelConnectQr?.();
10
+ }
11
+ cancelSignAndSubmit() {
12
+ this.cancelSignAndSubmitQr?.();
13
+ }
14
+ async connect() {
15
+ const controller = new AbortController();
16
+ this.cancelConnectQr = () => {
17
+ controller.abort("User canceled the connection process");
18
+ };
19
+ const response = await XamanClient.signIn(controller.signal);
20
+ WidgetEvents.getInstance().dispatchQrCodeGeneratedForConnect({
21
+ matrix: response.qrMatrix,
22
+ });
23
+ const { promise, close } = websocket(response.wsStatusUrl, (event, resolve, reject) => {
24
+ const msg = JSON.parse(event.data);
25
+ if (msg.signed === true) {
26
+ XamanClient.userSession(msg.payload_uuidv4).then((data) => {
27
+ resolve(data.response.account);
28
+ });
29
+ }
30
+ else if (msg.signed === false) {
31
+ reject(new Error("User rejected the request."));
32
+ }
33
+ });
34
+ this.cancelConnectQr = () => {
35
+ close();
36
+ };
37
+ const address = await promise;
38
+ return address;
39
+ }
40
+ async signAndSubmit({ tx, network, }) {
41
+ const controller = new AbortController();
42
+ this.cancelSignAndSubmitQr = () => {
43
+ controller.abort("User canceled the transaction");
44
+ };
45
+ const response = await XamanClient.sendTx({
46
+ tx,
47
+ network,
48
+ signal: controller.signal,
49
+ });
50
+ WidgetEvents.getInstance().dispatchQrCodeGeneratedForSign({
51
+ matrix: response.qrMatrix,
52
+ });
53
+ const { promise, close } = websocket(response.wsStatusUrl, (event, resolve, reject) => {
54
+ const msg = JSON.parse(event.data);
55
+ if (msg.opened === true) {
56
+ // User has scanned the QR code
57
+ WidgetEvents.getInstance().dispatchQrTxScannedAwaitingApproval(undefined);
58
+ }
59
+ else if (msg.signed === true) {
60
+ // Tx has been signed
61
+ resolve({
62
+ hash: msg.txid,
63
+ status: XrplTxStatus.SUCCESS,
64
+ });
65
+ }
66
+ else if (msg.signed === false) {
67
+ // User rejected the transaction
68
+ reject(new Error("User rejected the request."));
69
+ }
70
+ });
71
+ this.cancelSignAndSubmitQr = () => {
72
+ close();
73
+ };
74
+ const result = await promise;
75
+ return result;
76
+ }
77
+ }
78
+ //# sourceMappingURL=XamanQr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"XamanQr.js","sourceRoot":"","sources":["../../../../src/core/connectors/xrpl/XamanQr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { EIP6963AnnounceProviderEvent, EIP6963RequestProviderEvent } from "@metamask/providers";
2
+ import { XrplConnector, XrplNetwork, XrplTransaction } from "../../types/xrpl";
3
+ declare enum EIP6963EventNames {
4
+ Announce = "eip6963:announceProvider",
5
+ Request = "eip6963:requestProvider"
6
+ }
7
+ declare global {
8
+ interface WindowEventMap {
9
+ [EIP6963EventNames.Announce]: EIP6963AnnounceProviderEvent;
10
+ [EIP6963EventNames.Request]: EIP6963RequestProviderEvent;
11
+ }
12
+ }
13
+ export declare class XrplMetamaskSnapConnector implements XrplConnector {
14
+ private provider?;
15
+ connect(): Promise<string>;
16
+ signAndSubmit({ network, tx, }: {
17
+ network: XrplNetwork;
18
+ tx: XrplTransaction;
19
+ }): Promise<{
20
+ hash: string;
21
+ status: string;
22
+ }>;
23
+ private initialize;
24
+ private requestSnap;
25
+ private getAccount;
26
+ private getActiveNetwork;
27
+ private changeNetwork;
28
+ private invokeSnap;
29
+ private getProvider;
30
+ private hasSnapsSupport;
31
+ private getMetamaskEIP6963Provider;
32
+ private request;
33
+ private getNetworkChainId;
34
+ }
35
+ export {};
@@ -0,0 +1,176 @@
1
+ import { XrplNetwork } from "../../types/xrpl";
2
+ var EIP6963EventNames;
3
+ (function (EIP6963EventNames) {
4
+ EIP6963EventNames["Announce"] = "eip6963:announceProvider";
5
+ EIP6963EventNames["Request"] = "eip6963:requestProvider";
6
+ })(EIP6963EventNames || (EIP6963EventNames = {}));
7
+ var NetworkChainId;
8
+ (function (NetworkChainId) {
9
+ NetworkChainId[NetworkChainId["MAINNET"] = 0] = "MAINNET";
10
+ NetworkChainId[NetworkChainId["TESTNET"] = 1] = "TESTNET";
11
+ NetworkChainId[NetworkChainId["DEVNET"] = 2] = "DEVNET";
12
+ })(NetworkChainId || (NetworkChainId = {}));
13
+ const snapId = "npm:xrpl-snap";
14
+ export class XrplMetamaskSnapConnector {
15
+ provider;
16
+ async connect() {
17
+ await this.initialize();
18
+ await this.requestSnap(snapId);
19
+ const { account } = await this.getAccount();
20
+ return account;
21
+ }
22
+ async signAndSubmit({ network, tx, }) {
23
+ if (!this.provider)
24
+ throw new Error("Provider not initialized");
25
+ const activeNetwork = await this.getActiveNetwork();
26
+ const targetChainId = this.getNetworkChainId(network);
27
+ if (activeNetwork.chainId !== targetChainId) {
28
+ await this.changeNetwork(targetChainId);
29
+ }
30
+ const res = await this.invokeSnap({
31
+ method: "xrpl_signAndSubmit",
32
+ params: tx,
33
+ });
34
+ if (!res?.result) {
35
+ throw new Error("Invalid transaction result");
36
+ }
37
+ const txResponse = res.result.tx_json;
38
+ const txStatus = res.result.engine_result;
39
+ return {
40
+ hash: txResponse.hash,
41
+ status: txStatus,
42
+ };
43
+ }
44
+ // Cannot use constructor because of the async initialization
45
+ async initialize() {
46
+ this.provider = await this.getProvider();
47
+ }
48
+ async requestSnap(id) {
49
+ await this.request({
50
+ method: "wallet_requestSnaps",
51
+ params: {
52
+ [id]: {},
53
+ },
54
+ });
55
+ }
56
+ async getAccount() {
57
+ return this.invokeSnap({
58
+ method: "xrpl_getAccount",
59
+ params: undefined,
60
+ });
61
+ }
62
+ async getActiveNetwork() {
63
+ return this.invokeSnap({
64
+ method: "xrpl_getActiveNetwork",
65
+ params: undefined,
66
+ });
67
+ }
68
+ async changeNetwork(chainId) {
69
+ try {
70
+ return await this.invokeSnap({
71
+ method: "xrpl_changeNetwork",
72
+ params: { chainId },
73
+ });
74
+ }
75
+ catch (error) {
76
+ // changeNetwork may fail if the user is already on the correct network
77
+ // so we don't need to handle the error here
78
+ return null;
79
+ }
80
+ }
81
+ async invokeSnap({ params, method, }) {
82
+ return this.request({
83
+ method: "wallet_invokeSnap",
84
+ params: {
85
+ snapId,
86
+ request: {
87
+ method,
88
+ params,
89
+ },
90
+ },
91
+ });
92
+ }
93
+ async getProvider() {
94
+ if (typeof window === "undefined") {
95
+ return null;
96
+ }
97
+ if (await this.hasSnapsSupport(window.ethereum)) {
98
+ return window.ethereum;
99
+ }
100
+ if (window.ethereum?.detected) {
101
+ for (const provider of window.ethereum.detected) {
102
+ if (await this.hasSnapsSupport(provider)) {
103
+ return provider;
104
+ }
105
+ }
106
+ }
107
+ if (window.ethereum?.providers) {
108
+ for (const provider of window.ethereum.providers) {
109
+ if (await this.hasSnapsSupport(provider)) {
110
+ return provider;
111
+ }
112
+ }
113
+ }
114
+ // Need to use EIP-6963 provider discovery because we need Metamask to be installed
115
+ // other wallets overriding Metamask won't work here because they don't support Metamask snaps
116
+ const eip6963Provider = await this.getMetamaskEIP6963Provider();
117
+ if (eip6963Provider && (await this.hasSnapsSupport(eip6963Provider))) {
118
+ return eip6963Provider;
119
+ }
120
+ return null;
121
+ }
122
+ async hasSnapsSupport(provider = window.ethereum) {
123
+ try {
124
+ await provider.request({
125
+ method: "wallet_getSnaps",
126
+ });
127
+ return true;
128
+ }
129
+ catch {
130
+ return false;
131
+ }
132
+ }
133
+ async getMetamaskEIP6963Provider() {
134
+ return new Promise((rawResolve) => {
135
+ // Timeout looking for providers after 500ms
136
+ const timeout = setTimeout(() => {
137
+ resolve(null);
138
+ }, 500);
139
+ function resolve(provider) {
140
+ // Resolve the promise with a Metamask provider and clean up the timeout.
141
+ window.removeEventListener(EIP6963EventNames.Announce, onAnnounceProvider);
142
+ clearTimeout(timeout);
143
+ rawResolve(provider);
144
+ }
145
+ /**
146
+ * Listener for the EIP6963 announceProvider event.
147
+ * Resolves the promise if a Metamask provider is found.
148
+ */
149
+ function onAnnounceProvider({ detail }) {
150
+ const { info, provider } = detail;
151
+ if (info.rdns.includes("io.metamask")) {
152
+ resolve(provider);
153
+ }
154
+ }
155
+ window.addEventListener(EIP6963EventNames.Announce, onAnnounceProvider);
156
+ window.dispatchEvent(new Event(EIP6963EventNames.Request));
157
+ });
158
+ }
159
+ async request({ method, params }) {
160
+ if (!this.provider) {
161
+ throw new Error("XRPL Metamask provider not initialized");
162
+ }
163
+ return this.provider.request({ method, params });
164
+ }
165
+ getNetworkChainId(network) {
166
+ switch (network) {
167
+ case XrplNetwork.MAINNET:
168
+ return NetworkChainId.MAINNET;
169
+ case XrplNetwork.TESTNET:
170
+ return NetworkChainId.TESTNET;
171
+ default:
172
+ throw new Error(`Network ${network} is not supported`);
173
+ }
174
+ }
175
+ }
176
+ //# sourceMappingURL=XrplMetamaskSnap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"XrplMetamaskSnap.js","sourceRoot":"","sources":["../../../../src/core/connectors/xrpl/XrplMetamaskSnap.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ export declare const nativeCosmosTokenAddress = "uosmo";
7
7
  export declare const nativeSolanaTokenAddress = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
8
8
  export declare const nativeBitcoinTokenAddress = "satoshi";
9
9
  export declare const nativeSuiTokenAddress = "0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI";
10
+ export declare const nativeXrplTokenAddress = "xrp";
10
11
  export declare const maxPriceImpact = 30;
11
12
  export declare const limitTradeSizeUsd = 10000000;
12
13
  export declare const defaultSlippage: SlippageOption;
@@ -16,6 +17,7 @@ export declare const gasRefundMultiplier = 25;
16
17
  export declare const transparentClass = "tw-bg-opacity-80";
17
18
  export declare const subTransparentClass = "tw-bg-opacity-50";
18
19
  export declare const internalSquidApiBaseUrl = "https://app.squidrouter.com/api";
20
+ export declare const internalSquidXamanApiBaseUrl = "https://squid-app-v2-git-feat-xaman-wallet-0xsquid.vercel.app/api/xaman/";
19
21
  export declare const TOKEN_PRICE_API_URL = "https://beta.app.squidrouter.com/api/coingecko";
20
22
  export declare const BETA_INTERNAL_API_BASE_URL = "https://squid-app-v2-git-feat-api-fiat-onramp-0xsquid.vercel.app/api";
21
23
  export declare const SOLANA_RPC_URL = "https://meredith-ute2ko-fast-mainnet.helius-rpc.com";
@@ -28,6 +30,7 @@ export declare const CHAIN_IDS: {
28
30
  readonly ARCHWAY: "archway-1";
29
31
  readonly XION: "xion-mainnet-1";
30
32
  readonly NOBLE: "noble-1";
33
+ readonly AGORIC: "agoric-3";
31
34
  readonly ETHEREUM: "1";
32
35
  readonly ETHEREUM_SEPOLIA: "11155111";
33
36
  readonly ARBITRUM: "42161";
@@ -47,15 +50,15 @@ export declare const CHAIN_IDS: {
47
50
  readonly KAVA: "2222";
48
51
  readonly FILECOIN: "314";
49
52
  readonly BERACHAIN: "80094";
50
- readonly GNOSIS: "100";
51
- readonly SONIC: "146";
52
- readonly HYPER_EVM: "999";
53
- readonly SONEIUM: "1868";
54
- readonly PEAQ: "3338";
53
+ readonly SAGA_EVM: "5464";
54
+ readonly XRPL_EVM: "1440000";
55
+ readonly XRPL_EVM_TESTNET: "1449000";
55
56
  readonly BITCOIN: "bitcoin";
56
57
  readonly SOLANA: "solana-mainnet-beta";
57
58
  readonly SUI: "sui-mainnet";
58
59
  readonly SUI_TESTNET: "sui-testnet";
60
+ readonly XRPL: "xrpl-mainnet";
61
+ readonly XRPL_TESTNET: "xrpl-testnet";
59
62
  };
60
63
  export declare const chainTypeToDefaultChainIdMap: Record<ChainType, string>;
61
64
  export declare const chainTypeToNativeTokenAddressMap: Record<ChainType, string>;