@sodax/wallet-sdk-react 1.3.1-beta → 1.4.1-beta

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.
package/dist/index.cjs CHANGED
@@ -3,6 +3,8 @@
3
3
  var types = require('@sodax/types');
4
4
  var nearConnect = require('@hot-labs/near-connect');
5
5
  var nearApiJs = require('near-api-js');
6
+ var transactions = require('@stacks/transactions');
7
+ var network = require('@stacks/network');
6
8
  var satsConnect = require('sats-connect');
7
9
  var React2 = require('react');
8
10
  var dappKit = require('@mysten/dapp-kit');
@@ -26,6 +28,7 @@ var splToken = require('@solana/spl-token');
26
28
  var stellarWalletsKit = require('@creit.tech/stellar-wallets-kit');
27
29
  var StellarSdk = require('@stellar/stellar-sdk');
28
30
  var IconSdkRaw = require('icon-sdk-js');
31
+ var connect = require('@stacks/connect');
29
32
  var reactQuery = require('@tanstack/react-query');
30
33
  var chains$1 = require('viem/chains');
31
34
  var walletSdkCore = require('@sodax/wallet-sdk-core');
@@ -146,6 +149,50 @@ var NearXService = class _NearXService extends XService {
146
149
  return BigInt(res ?? 0);
147
150
  }
148
151
  };
152
+ var StacksXService = class _StacksXService extends XService {
153
+ constructor() {
154
+ super("STACKS");
155
+ this.network = network.networkFrom("mainnet");
156
+ }
157
+ static getInstance() {
158
+ if (!_StacksXService.instance) {
159
+ _StacksXService.instance = new _StacksXService();
160
+ }
161
+ return _StacksXService.instance;
162
+ }
163
+ async getBalance(address, xToken) {
164
+ if (!address) return 0n;
165
+ if (xToken.symbol === "STX") {
166
+ const url = `${this.network?.client.baseUrl}/extended/v1/address/${address}/balances`;
167
+ try {
168
+ const response = await fetch(url);
169
+ if (!response.ok) {
170
+ throw new Error(`Error fetching data: ${response.statusText}`);
171
+ }
172
+ const data = await response.json();
173
+ return BigInt(data.stx.balance);
174
+ } catch (error) {
175
+ console.error("Error fetching STX balance:", error);
176
+ return 0n;
177
+ }
178
+ }
179
+ const [contractAddress, contractName] = xToken.address.split(".");
180
+ try {
181
+ const result = await transactions.fetchCallReadOnlyFunction({
182
+ contractAddress,
183
+ contractName,
184
+ functionName: "get-balance",
185
+ functionArgs: [transactions.Cl.principal(address)],
186
+ network: this.network,
187
+ senderAddress: address
188
+ });
189
+ return result.value.value;
190
+ } catch (error) {
191
+ console.error("Error fetching token balance:", error);
192
+ return 0n;
193
+ }
194
+ }
195
+ };
149
196
 
150
197
  // src/actions/getXService.ts
151
198
  function getXService(xChainType) {
@@ -166,6 +213,8 @@ function getXService(xChainType) {
166
213
  return StellarXService.getInstance();
167
214
  case "NEAR":
168
215
  return NearXService.getInstance();
216
+ case "STACKS":
217
+ return StacksXService.getInstance();
169
218
  default:
170
219
  throw new Error(`Unsupported chain type: ${xChainType}`);
171
220
  }
@@ -198,6 +247,8 @@ var isNativeToken = (xToken) => {
198
247
  // solana
199
248
  "CAS3J7GYLGXMF6TDJBBYYSE3HQ6BBSMLNUQ34T6TZMYMW2EVH34XOWMA",
200
249
  // stellar
250
+ "ST000000000000000000002AMW42H.nativetoken",
251
+ // stacks
201
252
  "0:0"
202
253
  // bitcoin
203
254
  ];
@@ -354,10 +405,10 @@ var XverseWalletProvider = class {
354
405
  return 1;
355
406
  }
356
407
  async signTransaction(psbtBase64, finalize = false) {
357
- const { request: request2 } = await import('sats-connect');
408
+ const { request: request3 } = await import('sats-connect');
358
409
  const inputCount = this.countPsbtInputs(psbtBase64);
359
410
  const signingIndexes = Array.from({ length: inputCount }, (_, i) => i);
360
- const response = await request2("signPsbt", {
411
+ const response = await request3("signPsbt", {
361
412
  psbt: psbtBase64,
362
413
  broadcast: false,
363
414
  signInputs: {
@@ -374,8 +425,8 @@ var XverseWalletProvider = class {
374
425
  return result.psbt;
375
426
  }
376
427
  async signEcdsaMessage(message) {
377
- const { request: request2 } = await import('sats-connect');
378
- const response = await request2("signMessage", {
428
+ const { request: request3 } = await import('sats-connect');
429
+ const response = await request3("signMessage", {
379
430
  address: this.address,
380
431
  message,
381
432
  protocol: satsConnect.MessageSigningProtocols.ECDSA
@@ -386,8 +437,8 @@ var XverseWalletProvider = class {
386
437
  return response.result.signature;
387
438
  }
388
439
  async signBip322Message(message) {
389
- const { request: request2 } = await import('sats-connect');
390
- const response = await request2("signMessage", {
440
+ const { request: request3 } = await import('sats-connect');
441
+ const response = await request3("signMessage", {
391
442
  address: this.address,
392
443
  message,
393
444
  protocol: satsConnect.MessageSigningProtocols.BIP322
@@ -398,8 +449,8 @@ var XverseWalletProvider = class {
398
449
  return response.result.signature;
399
450
  }
400
451
  async sendBitcoin(toAddress, satoshis) {
401
- const { request: request2 } = await import('sats-connect');
402
- const response = await request2("sendTransfer", {
452
+ const { request: request3 } = await import('sats-connect');
453
+ const response = await request3("sendTransfer", {
403
454
  recipients: [
404
455
  {
405
456
  address: toAddress,
@@ -437,8 +488,8 @@ var XverseXConnector = class _XverseXConnector extends BitcoinXConnector {
437
488
  if (!_XverseXConnector.isAvailable()) {
438
489
  throw new Error("Xverse wallet is not installed");
439
490
  }
440
- const { request: request2 } = await import('sats-connect');
441
- const response = await request2("getAccounts", {
491
+ const { request: request3 } = await import('sats-connect');
492
+ const response = await request3("getAccounts", {
442
493
  purposes: [this.addressPurpose],
443
494
  message: "Connect to Sodax"
444
495
  });
@@ -1188,11 +1239,82 @@ var IconHanaXConnector = class extends XConnector {
1188
1239
  return "https://raw.githubusercontent.com/balancednetwork/icons/master/wallets/hana.svg";
1189
1240
  }
1190
1241
  };
1242
+ function getProviderFromId(id) {
1243
+ return id.split(".").reduce((acc, part) => acc?.[part], window);
1244
+ }
1245
+ var StacksXConnector = class extends XConnector {
1246
+ constructor(config) {
1247
+ super("STACKS", config.name, config.id);
1248
+ this.config = config;
1249
+ }
1250
+ async connect() {
1251
+ const provider = this.getProvider();
1252
+ if (!provider) {
1253
+ if (this.config.installUrl) {
1254
+ window.open(this.config.installUrl, "_blank");
1255
+ }
1256
+ return void 0;
1257
+ }
1258
+ const response = await connect.request({ provider }, "stx_getAddresses");
1259
+ const stxAddress = response.addresses.find((a) => a.purpose === "stacks");
1260
+ if (!stxAddress) {
1261
+ return void 0;
1262
+ }
1263
+ return {
1264
+ address: stxAddress.address,
1265
+ xChainType: this.xChainType
1266
+ };
1267
+ }
1268
+ async disconnect() {
1269
+ connect.disconnect();
1270
+ }
1271
+ get icon() {
1272
+ return this.config.icon;
1273
+ }
1274
+ getProvider() {
1275
+ return getProviderFromId(this.config.id);
1276
+ }
1277
+ };
1278
+
1279
+ // src/xchains/stacks/constants.ts
1280
+ var LEATHER_ICON = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgdmlld0JveD0iMCAwIDEyOCAxMjgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIxMjgiIGhlaWdodD0iMTI4IiByeD0iMjYuODM4NyIgZmlsbD0iIzEyMTAwRiIvPgo8cGF0aCBkPSJNNzQuOTE3MSA1Mi43MTE0QzgyLjQ3NjYgNTEuNTQwOCA5My40MDg3IDQzLjU4MDQgOTMuNDA4NyAzNy4zNzYxQzkzLjQwODcgMzUuNTAzMSA5MS44OTY4IDM0LjIxNTQgODkuNjg3MSAzNC4yMTU0Qzg1LjUwMDQgMzQuMjE1NCA3OC40MDYxIDQwLjUzNjggNzQuOTE3MSA1Mi43MTE0Wk0zOS45MTEgODMuNDk5MUMzMC4wMjU2IDgzLjQ5OTEgMjkuMjExNSA5My4zMzI0IDM5LjA5NjkgOTMuMzMyNEM0My41MTYzIDkzLjMzMjQgNDguODY2MSA5MS41NzY0IDUxLjY1NzMgODguNDE1N0M0Ny41ODY4IDg0LjkwMzggNDQuMjE0MSA4My40OTkxIDM5LjkxMSA4My40OTkxWk0xMDIuODI5IDc5LjI4NDhDMTAzLjQxIDk1Ljc5MDcgOTUuMDM2OSAxMDUuMDM5IDgwLjg0ODQgMTA1LjAzOUM3Mi40NzQ4IDEwNS4wMzkgNjguMjg4MSAxMDEuODc4IDU5LjMzMyA5Ni4wMjQ5QzU0LjY4MSAxMDEuMTc2IDQ1Ljg0MjMgMTA1LjAzOSAzOC41MTU0IDEwNS4wMzlDMTMuMjc4NSAxMDUuMDM5IDE0LjMyNTIgNzIuODQ2MyA0MC4wMjczIDcyLjg0NjNDNDUuMzc3MSA3Mi44NDYzIDQ5LjkxMjggNzQuMjUxMSA1NS43Mjc3IDc3Ljg4TDU5LjU2NTYgNjQuNDE3N0M0My43NDg5IDYwLjA4NjQgMzUuODQwNSA0Ny45MTE4IDQzLjYzMjYgMzAuNDY5M0g1Ni4xOTI5QzQ5LjIxNSA0Mi4wNTg2IDUzLjk4MzIgNTEuNjU3OCA2Mi44MjIgNTIuNzExNEM2Ny41OTAzIDM1LjczNzIgNzcuODI0NiAyMi41MDkgOTEuNDMxNiAyMi41MDlDOTkuMTA3NCAyMi41MDkgMTA1LjE1NSAyNy41NDI4IDEwNS4xNTUgMzYuNjczN0MxMDUuMTU1IDUxLjMwNjYgODYuMDgxOSA2My4yNDcxIDcxLjY2MDcgNjQuNDE3N0w2NS43Mjk1IDg1LjM3MjFDNzIuNDc0OCA5My4yMTUzIDkxLjE5OSAxMDAuODI0IDkxLjE5OSA3OS4yODQ4SDEwMi44MjlaIiBmaWxsPSIjRjVGMUVEIi8+Cjwvc3ZnPgo=";
1281
+ var XVERSE_ICON = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MDAiIGhlaWdodD0iNjAwIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGZpbGw9IiMxNzE3MTciIGQ9Ik0wIDBoNjAwdjYwMEgweiIvPjxwYXRoIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTQ0MCA0MzUuNHYtNTFjMC0yLS44LTMuOS0yLjItNS4zTDIyMCAxNjIuMmE3LjYgNy42IDAgMCAwLTUuNC0yLjJoLTUxLjFjLTIuNSAwLTQuNiAyLTQuNiA0LjZ2NDcuM2MwIDIgLjggNCAyLjIgNS40bDc4LjIgNzcuOGE0LjYgNC42IDAgMCAxIDAgNi41bC03OSA3OC43Yy0xIC45LTEuNCAyLTEuNCAzLjJ2NTJjMCAyLjQgMiA0LjUgNC42IDQuNUgyNDljMi42IDAgNC42LTIgNC42LTQuNlY0MDVjMC0xLjIuNS0yLjQgMS40LTMuM2w0Mi40LTQyLjJhNC42IDQuNiAwIDAgMSA2LjQgMGw3OC43IDc4LjRhNy42IDcuNiAwIDAgMCA1LjQgMi4yaDQ3LjVjMi41IDAgNC42LTIgNC42LTQuNloiLz48cGF0aCBmaWxsPSIjRUU3QTMwIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0zMjUuNiAyMjcuMmg0Mi44YzIuNiAwIDQuNiAyLjEgNC42IDQuNnY0Mi42YzAgNCA1IDYuMSA4IDMuMmw1OC43LTU4LjVjLjgtLjggMS4zLTIgMS4zLTMuMnYtNTEuMmMwLTIuNi0yLTQuNi00LjYtNC42TDM4NCAxNjBjLTEuMiAwLTIuNC41LTMuMyAxLjNsLTU4LjQgNTguMWE0LjYgNC42IDAgMCAwIDMuMiA3LjhaIi8+PC9nPjwvc3ZnPg==";
1282
+ var ASIGNA_ICON = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzAwMDEwMCIgZD0iTTAgMGgzMnYzMkgweiIvPjxwYXRoIGZpbGw9InVybCgjYSkiIGQ9Ik0xNS4xMSA1LjU1YTMgMyAwIDAgMC0xLjgyIDEuM2wtLjA1LjA4LS40My43Mi0uMDcuMTEtLjUuODUtLjA1LjA5LTEuMjkgMi4xOC0uMDQuMDctLjQ3LjgtLjA2LjEtLjQ2Ljc4LS4wNy4xMS0xLjYzIDIuNzYtLjA3LjExLS4zOC42Ni0uMDUuMDgtLjczIDEuMjQtLjM1LjYtLjQuNjctLjA1LjA5TDUuMSAyMC43bC0uMTEuMTgtLjE0LjIzLS4wNy4xMy0uMzMuNTUtLjA0LjA3di4wMWExLjI2IDEuMjYgMCAwIDAtLjE0LjQ3IDEuMzEgMS4zMSAwIDAgMCAxLjI0IDEuNGgxLjVsLjA1LS4wNi4wNC0uMDYuODctMS4yMS4wNS0uMDguNzctMS4wNy4wNS0uMDcuNC0uNTcuMDUtLjA2LjI0LS4zNGExLjUyIDEuNTIgMCAwIDEgMS4zOS0uNjIgMS41IDEuNSAwIDAgMSAuNjQuMiAxLjQ3IDEuNDcgMCAwIDEgLjczIDEuMjcgMS40NCAxLjQ0IDAgMCAxLS4yNy44NGwtLjYzLjg4LS4wNS4wNy0uMzIuNDUtLjA2LjA4LS4wOC4xMi0uMTIuMTYtLjA1LjA4aDIuMTNhMi4zMiAyLjMyIDAgMCAwIDEuNzctLjk2bDEuMTgtMS42My43Ny0xLjA4IDEuMy0xLjhhMS4yNCAxLjI0IDAgMCAxIC41NS0uNDNsLjA4LS4wM2ExLjMgMS4zIDAgMCAxIC4zLS4wNiAxLjI4IDEuMjggMCAwIDEgMS4xNS41NGwuMTEuMmExLjEzIDEuMTMgMCAwIDEgLjEuNDEgMS4xOSAxLjE5IDAgMCAxLS4yMy43N2wtLjAzLjA1LS41Ny44LS43Ljk4LS4yNy4zN2ExLjIyIDEuMjIgMCAwIDAtLjIuNSAxLjA1IDEuMDUgMCAwIDAtLjAyLjIzdi4wNmExLjE3IDEuMTcgMCAwIDAgLjE0LjQzbC4wMi4wNS4wNy4xYTEuNDQgMS40NCAwIDAgMCAuMS4xMWwuMDUuMDYuMDEuMDFhMS44IDEuOCAwIDAgMCAuMTQuMWMwIC4wMi4wMi4wMy4wNC4wM2ExIDEgMCAwIDAgLjA4LjA1bC4wNy4wNGExLjI1IDEuMjUgMCAwIDAgLjUuMWg2LjljLjEgMCAuMi0uMDEuMjktLjAzbC4wNi0uMDJhMS4yNyAxLjI3IDAgMCAwIC4yNy0uMS41Ny41NyAwIDAgMCAuMDctLjAzIDEuMjEgMS4yMSAwIDAgMCAuMjYtLjE5bC4wOC0uMDdhLjkyLjkyIDAgMCAwIC4xNS0uMTkgMS41NSAxLjU1IDAgMCAwIC4wOS0uMTdsLjAyLS4wNWExLjIyIDEuMjIgMCAwIDAgLjA4LS4yNnYtLjA0bC4wMi0uMDh2LS4wOGExLjMyIDEuMzIgMCAwIDAtLjItLjc0bC0xLjYtMi42NC0uMDYtLjEtLjItLjMyLS4zMy0uNTR2LS4wMWwtLjA1LS4wOC0xLjMtMi4xNS0uMDctLjEtLjA0LS4wNi0uOC0xLjMyLS4wNC0uMDctLjItLjM0LS4xLS4xNC0uMS0uMTYtLjUzLS45LS4xMy0uMi0uMDktLjE0LTIuMTctMy41Ny0uMDQtLjA3LS43Mi0xLjE5LS4wNS0uMDctLjQtLjY1YTIuNjUgMi42NSAwIDAgMC0uMy0uNCAyLjk2IDIuOTYgMCAwIDAtLjk3LS43NCAzLjA0IDMuMDQgMCAwIDAtMS4zLS4zYy0uMjUgMC0uNS4wNC0uNzQuMVoiLz48cGF0aCBmaWxsPSJ1cmwoI2IpIiBkPSJNMTkgMTYuM2E1LjQ1IDUuNDUgMCAwIDAtLjgzIDEuNTZsLS4wNC4xNWExLjM2IDEuMzYgMCAwIDEgLjI4LS4xNiAxLjI0IDEuMjQgMCAwIDEgLjM4LS4wOGguMWExLjI4IDEuMjggMCAwIDEgMS4wNS41NGMuMDQuMDYuMDguMTMuMS4yYTEuMjQgMS4yNCAwIDAgMSAuMDkuMjcgMS4xOSAxLjE5IDAgMCAxLS4yLjkxbC0uMDQuMDUtLjU3Ljc5LS43Ljk5LS4yNy4zN2ExLjIzIDEuMjMgMCAwIDAtLjIuNDIgMS4wNiAxLjA2IDAgMCAwLS4wMi4zMXYuMDZhMS4xNyAxLjE3IDAgMCAwIC4xNi40Ny45My45MyAwIDAgMCAuMDcuMSAxLjUgMS41IDAgMCAwIC4xLjEybC4wNS4wNmguMDFhMS45NCAxLjk0IDAgMCAwIC4wOS4wOCAxIDEgMCAwIDAgLjE3LjFsLjA3LjA0YTEuMjUgMS4yNSAwIDAgMCAuNS4xaDYuOWMuMSAwIC4yIDAgLjI4LS4wMmwuMDctLjAyYTEuMzIgMS4zMiAwIDAgMCAuMzQtLjEzbC4xNi0uMS4wMy0uMDNhMS4yOSAxLjI5IDAgMCAwIC4yLS4yIDIuNDMgMi40MyAwIDAgMCAuMTItLjE3Yy4wMy0uMDMuMDUtLjA4LjA3LS4xMmwuMDItLjA1YTEuMjEgMS4yMSAwIDAgMCAuMDktLjN2LS4wOGwuMDEtLjA5YTEuMzIgMS4zMiAwIDAgMC0uMi0uNzNsLTEuNi0yLjY0LS4wNi0uMS0uMi0uMzItLjMzLS41NHYtLjAybC0uMDUtLjA3LTEuMy0yLjE1LS4xMi0uMDctLjA3LS4wNGE0Ljk0IDQuOTQgMCAwIDAtMi40Ni0uNjdjLTEuMDMgMC0xLjc2LjU3LTIuMjYgMS4yWiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xMi4yOSAyMS4wOGMwIC4yOS0uMDkuNTgtLjI3Ljg0bC0xLjMxIDEuODRIN2wyLjUyLTMuNTNhMS41NCAxLjU0IDAgMCAxIDIuMS0uMzZjLjQzLjI4LjY2Ljc0LjY2IDEuMloiLz48cGF0aCBmaWxsPSIjMDAwIiBkPSJNMTEuMTYgMjEuMjVhLjU2LjU2IDAgMCAxLS41Ny41NS41Ni41NiAwIDAgMS0uNTctLjU2LjU2LjU2IDAgMCAxIC41Ny0uNTUuNTYuNTYgMCAwIDEgLjU3LjU2WiIvPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjE1LjIzIiB4Mj0iMTkuMyIgeTE9IjI1Ljc4IiB5Mj0iNi4xMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiM2NTIyRjQiLz48c3RvcCBvZmZzZXQ9Ii41NSIgc3RvcC1jb2xvcj0iIzlCNkJGRiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0E1ODVGRiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJiIiB4MT0iMjIuNTkiIHgyPSIyNC44IiB5MT0iMjQuNzEiIHkyPSIxNS41MyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiM0MjFGOEIiLz48c3RvcCBvZmZzZXQ9Ii41NSIgc3RvcC1jb2xvcj0iIzcyMzBGRiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzk3NzNGRiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjwvc3ZnPg==";
1283
+ var FORDEFI_ICON = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDIiIGhlaWdodD0iNDIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHBhdGggZmlsbD0iIzEwMTExNCIgZD0iTTAgMGg0MnY0MkgweiIvPgogIDxwYXRoIGQ9Ik0xOS40NyAyNi44OUg1djMuNTdhNC41NyA0LjU3IDAgMCAwIDQuNTggNC41N2g1LjgzbDQuMDYtOC4xNFoiIGZpbGw9IiM3OTk0RkYiLz4KICA8cGF0aCBkPSJNNSAxNy40aDI3LjU4bC0zLjIgNi43OEg1VjE3LjRaIiBmaWxsPSIjNDg2REZGIi8+CiAgPHBhdGggZD0iTTE0LjY3IDdINXY3LjY4aDMzVjdoLTkuNjd2NS43NGgtMlY3aC05LjY3djUuNzRoLTEuOTlWN1oiIGZpbGw9IiM1Q0QxRkEiLz4KPC9zdmc+Cg==";
1284
+ var STACKS_PROVIDERS = [
1285
+ {
1286
+ id: "LeatherProvider",
1287
+ name: "Leather",
1288
+ icon: LEATHER_ICON,
1289
+ installUrl: "https://chrome.google.com/webstore/detail/hiro-wallet/ldinpeekobnhjjdofggfgjlcehhmanlj"
1290
+ },
1291
+ {
1292
+ id: "XverseProviders.BitcoinProvider",
1293
+ name: "Xverse Wallet",
1294
+ icon: XVERSE_ICON,
1295
+ installUrl: "https://chrome.google.com/webstore/detail/xverse-wallet/idnnbdplmphpflfnlkomgpfbpcgelopg"
1296
+ },
1297
+ {
1298
+ id: "AsignaProvider",
1299
+ name: "Asigna Multisig",
1300
+ icon: ASIGNA_ICON,
1301
+ installUrl: "https://stx.asigna.io/"
1302
+ },
1303
+ {
1304
+ id: "FordefiProviders.UtxoProvider",
1305
+ name: "Fordefi",
1306
+ icon: FORDEFI_ICON,
1307
+ installUrl: "https://chromewebstore.google.com/detail/fordefi/hcmehenccjdmfbojapcbcofkgdpbnlle"
1308
+ }
1309
+ ];
1310
+ function useStacksXConnectors() {
1311
+ return React2.useMemo(() => STACKS_PROVIDERS.map((config) => new StacksXConnector(config)), []);
1312
+ }
1191
1313
 
1192
1314
  // src/useXWagmiStore.ts
1193
1315
  var initXServices = () => {
1194
1316
  const xServices = {};
1195
- ["EVM", "BITCOIN", "INJECTIVE", "STELLAR", "SUI", "SOLANA", "ICON", "NEAR"].forEach((key) => {
1317
+ ["EVM", "BITCOIN", "INJECTIVE", "STELLAR", "SUI", "SOLANA", "ICON", "NEAR", "STACKS"].forEach((key) => {
1196
1318
  const xChainType = key;
1197
1319
  switch (xChainType) {
1198
1320
  // EVM, SUI, Solana wallet connectors are supported by their own sdks. wagmi, @mysten/dapp-kit, @solana/wallet-adapter-react.
@@ -1233,6 +1355,10 @@ var initXServices = () => {
1233
1355
  xServices[xChainType] = NearXService.getInstance();
1234
1356
  xServices[xChainType].setXConnectors([]);
1235
1357
  break;
1358
+ case "STACKS":
1359
+ xServices[xChainType] = StacksXService.getInstance();
1360
+ xServices[xChainType].setXConnectors(STACKS_PROVIDERS.map((config) => new StacksXConnector(config)));
1361
+ break;
1236
1362
  }
1237
1363
  });
1238
1364
  return xServices;
@@ -1520,6 +1646,7 @@ function useXConnectors(xChainType) {
1520
1646
  const suiWallets = dappKit.useWallets();
1521
1647
  const { data: stellarXConnectors } = useStellarXConnectors();
1522
1648
  const { data: nearXConnectors } = useNearXConnectors();
1649
+ const stacksXConnectors = useStacksXConnectors();
1523
1650
  const { wallets: solanaWallets } = walletAdapterReact.useWallet();
1524
1651
  const xConnectors = React2.useMemo(() => {
1525
1652
  if (!xChainType || !xService) {
@@ -1536,10 +1663,21 @@ function useXConnectors(xChainType) {
1536
1663
  return solanaWallets.filter((wallet) => wallet.readyState === "Installed").map((wallet) => new SolanaXConnector(wallet));
1537
1664
  case "NEAR":
1538
1665
  return nearXConnectors || [];
1666
+ case "STACKS":
1667
+ return stacksXConnectors;
1539
1668
  default:
1540
1669
  return xService.getXConnectors();
1541
1670
  }
1542
- }, [xService, xChainType, evmConnectors, suiWallets, stellarXConnectors, solanaWallets, nearXConnectors]);
1671
+ }, [
1672
+ xService,
1673
+ xChainType,
1674
+ evmConnectors,
1675
+ suiWallets,
1676
+ stellarXConnectors,
1677
+ solanaWallets,
1678
+ nearXConnectors,
1679
+ stacksXConnectors
1680
+ ]);
1543
1681
  return xConnectors;
1544
1682
  }
1545
1683
  function useXDisconnect() {
@@ -1660,6 +1798,8 @@ function useWalletProvider(spokeChainId) {
1660
1798
  const { data: evmWalletClient } = wagmi.useWalletClient();
1661
1799
  const xService = useXService(getXChainType(spokeChainId));
1662
1800
  const xAccount = useXAccount(spokeChainId);
1801
+ const stacksConnection = useXConnection("STACKS");
1802
+ const stacksConnectors = useXConnectors("STACKS");
1663
1803
  const xConnection = useXConnection(xChainType);
1664
1804
  return React2.useMemo(() => {
1665
1805
  switch (xChainType) {
@@ -1740,10 +1880,27 @@ function useWalletProvider(spokeChainId) {
1740
1880
  }
1741
1881
  return new walletSdkCore.NearWalletProvider({ wallet: nearXService.walletSelector });
1742
1882
  }
1883
+ case "STACKS": {
1884
+ const address = xAccount.address;
1885
+ if (!address) {
1886
+ return void 0;
1887
+ }
1888
+ const activeStacksConnector = stacksConnectors.find((c) => c.id === stacksConnection?.xConnectorId);
1889
+ return new walletSdkCore.StacksWalletProvider({ address, provider: activeStacksConnector?.getProvider() });
1890
+ }
1743
1891
  default:
1744
1892
  return void 0;
1745
1893
  }
1746
- }, [xChainType, evmPublicClient, evmWalletClient, xService, xAccount, xConnection]);
1894
+ }, [
1895
+ xChainType,
1896
+ evmPublicClient,
1897
+ evmWalletClient,
1898
+ xService,
1899
+ xAccount,
1900
+ stacksConnection,
1901
+ stacksConnectors,
1902
+ xConnection
1903
+ ]);
1747
1904
  }
1748
1905
  function useXSignMessage() {
1749
1906
  const { signMessage } = walletAdapterReact.useWallet();
@@ -1807,7 +1964,7 @@ function useBitcoinXConnectors() {
1807
1964
  return xService?.getXConnectors() || [];
1808
1965
  }, [xService]);
1809
1966
  }
1810
- var Hydrate = () => {
1967
+ var Hydrate = ({ rpcConfig }) => {
1811
1968
  const suiClient = dappKit.useSuiClient();
1812
1969
  React2.useEffect(() => {
1813
1970
  if (suiClient) {
@@ -1844,6 +2001,12 @@ var Hydrate = () => {
1844
2001
  EvmXService.getInstance().wagmiConfig = wagmiConfig;
1845
2002
  }
1846
2003
  }, [wagmiConfig]);
2004
+ React2.useEffect(() => {
2005
+ StacksXService.getInstance().network = network.createNetwork({
2006
+ network: "mainnet",
2007
+ client: { baseUrl: rpcConfig.stacks ?? "https://api.mainnet.hiro.so" }
2008
+ });
2009
+ }, [rpcConfig.stacks]);
1847
2010
  return null;
1848
2011
  };
1849
2012
 
@@ -1898,7 +2061,7 @@ var SodaxWalletProvider = ({ children, rpcConfig }) => {
1898
2061
  return createWagmiConfig(rpcConfig);
1899
2062
  }, [rpcConfig]);
1900
2063
  const wallets = React2.useMemo(() => [new walletAdapterWallets.UnsafeBurnerWalletAdapter()], []);
1901
- return /* @__PURE__ */ React2__default.default.createElement(reactQuery.QueryClientProvider, { client: queryClient }, /* @__PURE__ */ React2__default.default.createElement(wagmi.WagmiProvider, { reconnectOnMount: false, config: wagmiConfig }, /* @__PURE__ */ React2__default.default.createElement(dappKit.SuiClientProvider, { networks: { mainnet: { url: client.getFullnodeUrl("mainnet") } }, defaultNetwork: "mainnet" }, /* @__PURE__ */ React2__default.default.createElement(dappKit.WalletProvider, { autoConnect: true }, /* @__PURE__ */ React2__default.default.createElement(walletAdapterReact.ConnectionProvider, { endpoint: rpcConfig["solana"] ?? "https://api.mainnet-beta.solana.com" }, /* @__PURE__ */ React2__default.default.createElement(walletAdapterReact.WalletProvider, { wallets, autoConnect: true }, /* @__PURE__ */ React2__default.default.createElement(Hydrate, null), children))))));
2064
+ return /* @__PURE__ */ React2__default.default.createElement(reactQuery.QueryClientProvider, { client: queryClient }, /* @__PURE__ */ React2__default.default.createElement(wagmi.WagmiProvider, { reconnectOnMount: false, config: wagmiConfig }, /* @__PURE__ */ React2__default.default.createElement(dappKit.SuiClientProvider, { networks: { mainnet: { url: client.getFullnodeUrl("mainnet") } }, defaultNetwork: "mainnet" }, /* @__PURE__ */ React2__default.default.createElement(dappKit.WalletProvider, { autoConnect: true }, /* @__PURE__ */ React2__default.default.createElement(walletAdapterReact.ConnectionProvider, { endpoint: rpcConfig["solana"] ?? "https://api.mainnet-beta.solana.com" }, /* @__PURE__ */ React2__default.default.createElement(walletAdapterReact.WalletProvider, { wallets, autoConnect: true }, /* @__PURE__ */ React2__default.default.createElement(Hydrate, { rpcConfig }), children))))));
1902
2065
  };
1903
2066
  reconnectIcon();
1904
2067
  reconnectStellar();
@@ -1923,9 +2086,12 @@ exports.InjectiveKelprXConnector = InjectiveKelprXConnector;
1923
2086
  exports.InjectiveMetamaskXConnector = InjectiveMetamaskXConnector;
1924
2087
  exports.InjectiveXService = InjectiveXService;
1925
2088
  exports.OKXXConnector = OKXXConnector;
2089
+ exports.STACKS_PROVIDERS = STACKS_PROVIDERS;
1926
2090
  exports.SodaxWalletProvider = SodaxWalletProvider;
1927
2091
  exports.SolanaXConnector = SolanaXConnector;
1928
2092
  exports.SolanaXService = SolanaXService;
2093
+ exports.StacksXConnector = StacksXConnector;
2094
+ exports.StacksXService = StacksXService;
1929
2095
  exports.StellarWalletsKitXConnector = StellarWalletsKitXConnector;
1930
2096
  exports.StellarXService = StellarXService;
1931
2097
  exports.SuiXConnector = SuiXConnector;
@@ -1942,6 +2108,7 @@ exports.isNativeToken = isNativeToken;
1942
2108
  exports.switchEthereumChain = switchEthereumChain;
1943
2109
  exports.useBitcoinXConnectors = useBitcoinXConnectors;
1944
2110
  exports.useEvmSwitchChain = useEvmSwitchChain;
2111
+ exports.useStacksXConnectors = useStacksXConnectors;
1945
2112
  exports.useWalletProvider = useWalletProvider;
1946
2113
  exports.useXAccount = useXAccount;
1947
2114
  exports.useXAccounts = useXAccounts;