@sodax/wallet-sdk-react 1.3.1-beta-rc3 → 1.4.0-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 +194 -17
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +41 -5
- package/dist/index.d.ts +41 -5
- package/dist/index.mjs +192 -19
- package/dist/index.mjs.map +1 -1
- package/package.json +6 -3
- package/src/Hydrate.ts +11 -1
- package/src/SodaxWalletProvider.tsx +1 -1
- package/src/actions/getXService.ts +3 -0
- package/src/hooks/useWalletProvider.ts +36 -3
- package/src/hooks/useXConnectors.ts +15 -2
- package/src/index.ts +1 -0
- package/src/useXWagmiStore.ts +6 -1
- package/src/utils/index.ts +1 -0
- package/src/xchains/bitcoin/XverseXConnector.ts +19 -3
- package/src/xchains/bitcoin/index.ts +1 -0
- package/src/xchains/stacks/StacksXConnector.ts +63 -0
- package/src/xchains/stacks/StacksXService.ts +59 -0
- package/src/xchains/stacks/constants.ts +42 -0
- package/src/xchains/stacks/index.ts +4 -0
- package/src/xchains/stacks/useStacksXConnectors.ts +7 -0
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:
|
|
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
|
|
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:
|
|
378
|
-
const response = await
|
|
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:
|
|
390
|
-
const response = await
|
|
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:
|
|
402
|
-
const response = await
|
|
452
|
+
const { request: request3 } = await import('sats-connect');
|
|
453
|
+
const response = await request3("sendTransfer", {
|
|
403
454
|
recipients: [
|
|
404
455
|
{
|
|
405
456
|
address: toAddress,
|
|
@@ -413,9 +464,19 @@ var XverseWalletProvider = class {
|
|
|
413
464
|
return response.result.txid;
|
|
414
465
|
}
|
|
415
466
|
};
|
|
467
|
+
var XVERSE_ADDRESS_TYPE_KEY = "xverse-address-type";
|
|
416
468
|
var XverseXConnector = class _XverseXConnector extends BitcoinXConnector {
|
|
417
469
|
constructor() {
|
|
418
470
|
super("Xverse", "xverse");
|
|
471
|
+
const saved = typeof window !== "undefined" ? localStorage.getItem(XVERSE_ADDRESS_TYPE_KEY) : null;
|
|
472
|
+
this.addressPurpose = saved === "segwit" ? satsConnect.AddressPurpose.Payment : satsConnect.AddressPurpose.Ordinals;
|
|
473
|
+
}
|
|
474
|
+
/** Set address purpose and persist to localStorage. */
|
|
475
|
+
setAddressPurpose(type) {
|
|
476
|
+
this.addressPurpose = type === "taproot" ? satsConnect.AddressPurpose.Ordinals : satsConnect.AddressPurpose.Payment;
|
|
477
|
+
if (typeof window !== "undefined") {
|
|
478
|
+
localStorage.setItem(XVERSE_ADDRESS_TYPE_KEY, type);
|
|
479
|
+
}
|
|
419
480
|
}
|
|
420
481
|
static isAvailable() {
|
|
421
482
|
return typeof window !== "undefined" && !!window.BitcoinProvider;
|
|
@@ -427,16 +488,16 @@ var XverseXConnector = class _XverseXConnector extends BitcoinXConnector {
|
|
|
427
488
|
if (!_XverseXConnector.isAvailable()) {
|
|
428
489
|
throw new Error("Xverse wallet is not installed");
|
|
429
490
|
}
|
|
430
|
-
const { request:
|
|
431
|
-
const response = await
|
|
432
|
-
purposes: [
|
|
491
|
+
const { request: request3 } = await import('sats-connect');
|
|
492
|
+
const response = await request3("getAccounts", {
|
|
493
|
+
purposes: [this.addressPurpose],
|
|
433
494
|
message: "Connect to Sodax"
|
|
434
495
|
});
|
|
435
496
|
if (response.status === "error") {
|
|
436
497
|
throw new Error(response.error?.message || "Xverse connection failed");
|
|
437
498
|
}
|
|
438
499
|
const accounts = response.result;
|
|
439
|
-
const paymentAccount = accounts.find((a) => a.purpose ===
|
|
500
|
+
const paymentAccount = accounts.find((a) => a.purpose === this.addressPurpose) || accounts[0];
|
|
440
501
|
if (!paymentAccount) return void 0;
|
|
441
502
|
this.walletProvider = new XverseWalletProvider(
|
|
442
503
|
paymentAccount.address,
|
|
@@ -1178,11 +1239,82 @@ var IconHanaXConnector = class extends XConnector {
|
|
|
1178
1239
|
return "https://raw.githubusercontent.com/balancednetwork/icons/master/wallets/hana.svg";
|
|
1179
1240
|
}
|
|
1180
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
|
+
}
|
|
1181
1313
|
|
|
1182
1314
|
// src/useXWagmiStore.ts
|
|
1183
1315
|
var initXServices = () => {
|
|
1184
1316
|
const xServices = {};
|
|
1185
|
-
["EVM", "BITCOIN", "INJECTIVE", "STELLAR", "SUI", "SOLANA", "ICON", "NEAR"].forEach((key) => {
|
|
1317
|
+
["EVM", "BITCOIN", "INJECTIVE", "STELLAR", "SUI", "SOLANA", "ICON", "NEAR", "STACKS"].forEach((key) => {
|
|
1186
1318
|
const xChainType = key;
|
|
1187
1319
|
switch (xChainType) {
|
|
1188
1320
|
// EVM, SUI, Solana wallet connectors are supported by their own sdks. wagmi, @mysten/dapp-kit, @solana/wallet-adapter-react.
|
|
@@ -1223,6 +1355,10 @@ var initXServices = () => {
|
|
|
1223
1355
|
xServices[xChainType] = NearXService.getInstance();
|
|
1224
1356
|
xServices[xChainType].setXConnectors([]);
|
|
1225
1357
|
break;
|
|
1358
|
+
case "STACKS":
|
|
1359
|
+
xServices[xChainType] = StacksXService.getInstance();
|
|
1360
|
+
xServices[xChainType].setXConnectors(STACKS_PROVIDERS.map((config) => new StacksXConnector(config)));
|
|
1361
|
+
break;
|
|
1226
1362
|
}
|
|
1227
1363
|
});
|
|
1228
1364
|
return xServices;
|
|
@@ -1510,6 +1646,7 @@ function useXConnectors(xChainType) {
|
|
|
1510
1646
|
const suiWallets = dappKit.useWallets();
|
|
1511
1647
|
const { data: stellarXConnectors } = useStellarXConnectors();
|
|
1512
1648
|
const { data: nearXConnectors } = useNearXConnectors();
|
|
1649
|
+
const stacksXConnectors = useStacksXConnectors();
|
|
1513
1650
|
const { wallets: solanaWallets } = walletAdapterReact.useWallet();
|
|
1514
1651
|
const xConnectors = React2.useMemo(() => {
|
|
1515
1652
|
if (!xChainType || !xService) {
|
|
@@ -1526,10 +1663,21 @@ function useXConnectors(xChainType) {
|
|
|
1526
1663
|
return solanaWallets.filter((wallet) => wallet.readyState === "Installed").map((wallet) => new SolanaXConnector(wallet));
|
|
1527
1664
|
case "NEAR":
|
|
1528
1665
|
return nearXConnectors || [];
|
|
1666
|
+
case "STACKS":
|
|
1667
|
+
return stacksXConnectors;
|
|
1529
1668
|
default:
|
|
1530
1669
|
return xService.getXConnectors();
|
|
1531
1670
|
}
|
|
1532
|
-
}, [
|
|
1671
|
+
}, [
|
|
1672
|
+
xService,
|
|
1673
|
+
xChainType,
|
|
1674
|
+
evmConnectors,
|
|
1675
|
+
suiWallets,
|
|
1676
|
+
stellarXConnectors,
|
|
1677
|
+
solanaWallets,
|
|
1678
|
+
nearXConnectors,
|
|
1679
|
+
stacksXConnectors
|
|
1680
|
+
]);
|
|
1533
1681
|
return xConnectors;
|
|
1534
1682
|
}
|
|
1535
1683
|
function useXDisconnect() {
|
|
@@ -1650,6 +1798,8 @@ function useWalletProvider(spokeChainId) {
|
|
|
1650
1798
|
const { data: evmWalletClient } = wagmi.useWalletClient();
|
|
1651
1799
|
const xService = useXService(getXChainType(spokeChainId));
|
|
1652
1800
|
const xAccount = useXAccount(spokeChainId);
|
|
1801
|
+
const stacksConnection = useXConnection("STACKS");
|
|
1802
|
+
const stacksConnectors = useXConnectors("STACKS");
|
|
1653
1803
|
const xConnection = useXConnection(xChainType);
|
|
1654
1804
|
return React2.useMemo(() => {
|
|
1655
1805
|
switch (xChainType) {
|
|
@@ -1730,10 +1880,27 @@ function useWalletProvider(spokeChainId) {
|
|
|
1730
1880
|
}
|
|
1731
1881
|
return new walletSdkCore.NearWalletProvider({ wallet: nearXService.walletSelector });
|
|
1732
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
|
+
}
|
|
1733
1891
|
default:
|
|
1734
1892
|
return void 0;
|
|
1735
1893
|
}
|
|
1736
|
-
}, [
|
|
1894
|
+
}, [
|
|
1895
|
+
xChainType,
|
|
1896
|
+
evmPublicClient,
|
|
1897
|
+
evmWalletClient,
|
|
1898
|
+
xService,
|
|
1899
|
+
xAccount,
|
|
1900
|
+
stacksConnection,
|
|
1901
|
+
stacksConnectors,
|
|
1902
|
+
xConnection
|
|
1903
|
+
]);
|
|
1737
1904
|
}
|
|
1738
1905
|
function useXSignMessage() {
|
|
1739
1906
|
const { signMessage } = walletAdapterReact.useWallet();
|
|
@@ -1797,7 +1964,7 @@ function useBitcoinXConnectors() {
|
|
|
1797
1964
|
return xService?.getXConnectors() || [];
|
|
1798
1965
|
}, [xService]);
|
|
1799
1966
|
}
|
|
1800
|
-
var Hydrate = () => {
|
|
1967
|
+
var Hydrate = ({ rpcConfig }) => {
|
|
1801
1968
|
const suiClient = dappKit.useSuiClient();
|
|
1802
1969
|
React2.useEffect(() => {
|
|
1803
1970
|
if (suiClient) {
|
|
@@ -1834,6 +2001,12 @@ var Hydrate = () => {
|
|
|
1834
2001
|
EvmXService.getInstance().wagmiConfig = wagmiConfig;
|
|
1835
2002
|
}
|
|
1836
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]);
|
|
1837
2010
|
return null;
|
|
1838
2011
|
};
|
|
1839
2012
|
|
|
@@ -1888,7 +2061,7 @@ var SodaxWalletProvider = ({ children, rpcConfig }) => {
|
|
|
1888
2061
|
return createWagmiConfig(rpcConfig);
|
|
1889
2062
|
}, [rpcConfig]);
|
|
1890
2063
|
const wallets = React2.useMemo(() => [new walletAdapterWallets.UnsafeBurnerWalletAdapter()], []);
|
|
1891
|
-
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,
|
|
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))))));
|
|
1892
2065
|
};
|
|
1893
2066
|
reconnectIcon();
|
|
1894
2067
|
reconnectStellar();
|
|
@@ -1913,9 +2086,12 @@ exports.InjectiveKelprXConnector = InjectiveKelprXConnector;
|
|
|
1913
2086
|
exports.InjectiveMetamaskXConnector = InjectiveMetamaskXConnector;
|
|
1914
2087
|
exports.InjectiveXService = InjectiveXService;
|
|
1915
2088
|
exports.OKXXConnector = OKXXConnector;
|
|
2089
|
+
exports.STACKS_PROVIDERS = STACKS_PROVIDERS;
|
|
1916
2090
|
exports.SodaxWalletProvider = SodaxWalletProvider;
|
|
1917
2091
|
exports.SolanaXConnector = SolanaXConnector;
|
|
1918
2092
|
exports.SolanaXService = SolanaXService;
|
|
2093
|
+
exports.StacksXConnector = StacksXConnector;
|
|
2094
|
+
exports.StacksXService = StacksXService;
|
|
1919
2095
|
exports.StellarWalletsKitXConnector = StellarWalletsKitXConnector;
|
|
1920
2096
|
exports.StellarXService = StellarXService;
|
|
1921
2097
|
exports.SuiXConnector = SuiXConnector;
|
|
@@ -1932,6 +2108,7 @@ exports.isNativeToken = isNativeToken;
|
|
|
1932
2108
|
exports.switchEthereumChain = switchEthereumChain;
|
|
1933
2109
|
exports.useBitcoinXConnectors = useBitcoinXConnectors;
|
|
1934
2110
|
exports.useEvmSwitchChain = useEvmSwitchChain;
|
|
2111
|
+
exports.useStacksXConnectors = useStacksXConnectors;
|
|
1935
2112
|
exports.useWalletProvider = useWalletProvider;
|
|
1936
2113
|
exports.useXAccount = useXAccount;
|
|
1937
2114
|
exports.useXAccounts = useXAccounts;
|