@sodax/wallet-sdk-react 1.3.1-beta → 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 +182 -15
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +35 -5
- package/dist/index.d.ts +35 -5
- package/dist/index.mjs +180 -17
- 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/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,
|
|
@@ -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:
|
|
441
|
-
const response = await
|
|
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
|
-
}, [
|
|
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
|
-
}, [
|
|
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,
|
|
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;
|