@sodax/wallet-sdk-react 1.5.7-beta → 2.0.0-rc.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.
- package/README.md +103 -145
- package/ai-exported/AGENTS.md +122 -0
- package/ai-exported/integration/README.md +102 -0
- package/ai-exported/integration/ai-rules.md +136 -0
- package/ai-exported/integration/architecture.md +181 -0
- package/ai-exported/integration/examples/01-minimal-evm.tsx +75 -0
- package/ai-exported/integration/examples/02-multi-chain-modal.tsx +169 -0
- package/ai-exported/integration/examples/03-nextjs-app-router.tsx +99 -0
- package/ai-exported/integration/examples/04-walletconnect-setup.tsx +89 -0
- package/ai-exported/integration/examples/README.md +29 -0
- package/ai-exported/integration/recipes/batch-operations.md +223 -0
- package/ai-exported/integration/recipes/bridge-to-sdk.md +164 -0
- package/ai-exported/integration/recipes/chain-detection.md +254 -0
- package/ai-exported/integration/recipes/connect-button.md +156 -0
- package/ai-exported/integration/recipes/multi-chain-modal.md +199 -0
- package/ai-exported/integration/recipes/setup.md +158 -0
- package/ai-exported/integration/recipes/sign-message.md +137 -0
- package/ai-exported/integration/recipes/sub-path-imports.md +95 -0
- package/ai-exported/integration/recipes/switch-chain.md +141 -0
- package/ai-exported/integration/recipes/walletconnect-setup.md +139 -0
- package/ai-exported/integration/reference/api-surface.md +175 -0
- package/ai-exported/integration/reference/chain-support.md +78 -0
- package/ai-exported/integration/reference/connectors.md +74 -0
- package/ai-exported/integration/reference/hooks.md +204 -0
- package/ai-exported/integration/reference/wallet-brands.md +106 -0
- package/ai-exported/migration/README.md +49 -0
- package/ai-exported/migration/ai-rules.md +144 -0
- package/ai-exported/migration/breaking-changes.md +305 -0
- package/ai-exported/migration/checklist.md +159 -0
- package/ai-exported/migration/recipes/connect-button.md +166 -0
- package/ai-exported/migration/recipes/multi-chain-modal.md +244 -0
- package/ai-exported/migration/recipes/ssr-setup.md +162 -0
- package/ai-exported/migration/recipes/walletconnect-migration.md +168 -0
- package/ai-exported/migration/reference/components.md +73 -0
- package/ai-exported/migration/reference/config.md +307 -0
- package/ai-exported/migration/reference/hooks.md +278 -0
- package/ai-exported/migration/reference/imports.md +157 -0
- package/dist/XConnector-B9YQTVJ4.d.ts +146 -0
- package/dist/chunk-2BOUGCJ7.mjs +150 -0
- package/dist/chunk-2BOUGCJ7.mjs.map +1 -0
- package/dist/chunk-66BAUK56.mjs +202 -0
- package/dist/chunk-66BAUK56.mjs.map +1 -0
- package/dist/chunk-7ULB6DW4.mjs +102 -0
- package/dist/chunk-7ULB6DW4.mjs.map +1 -0
- package/dist/chunk-BKJB527E.mjs +125 -0
- package/dist/chunk-BKJB527E.mjs.map +1 -0
- package/dist/chunk-BXJLBR4G.mjs +88 -0
- package/dist/chunk-BXJLBR4G.mjs.map +1 -0
- package/dist/chunk-E5IAZ7E6.mjs +186 -0
- package/dist/chunk-E5IAZ7E6.mjs.map +1 -0
- package/dist/chunk-MAQ47Q52.mjs +33 -0
- package/dist/chunk-MAQ47Q52.mjs.map +1 -0
- package/dist/chunk-MXZVF5HR.mjs +34 -0
- package/dist/chunk-MXZVF5HR.mjs.map +1 -0
- package/dist/chunk-N5A2TMF6.mjs +33 -0
- package/dist/chunk-N5A2TMF6.mjs.map +1 -0
- package/dist/chunk-NY7U7OJW.mjs +64 -0
- package/dist/chunk-NY7U7OJW.mjs.map +1 -0
- package/dist/chunk-PJLEJVAU.mjs +140 -0
- package/dist/chunk-PJLEJVAU.mjs.map +1 -0
- package/dist/chunk-PLCA4ZDJ.mjs +1585 -0
- package/dist/chunk-PLCA4ZDJ.mjs.map +1 -0
- package/dist/chunk-TZMKDXFA.mjs +3 -0
- package/dist/chunk-TZMKDXFA.mjs.map +1 -0
- package/dist/chunk-X2MHIWXO.mjs +100 -0
- package/dist/chunk-X2MHIWXO.mjs.map +1 -0
- package/dist/chunk-XZ7CHO2S.mjs +41 -0
- package/dist/chunk-XZ7CHO2S.mjs.map +1 -0
- package/dist/config-OlnzyEUE.d.ts +146 -0
- package/dist/index.cjs +2784 -1594
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +768 -1498
- package/dist/index.mjs +463 -2004
- package/dist/index.mjs.map +1 -1
- package/dist/xchains/bitcoin/index.cjs +1927 -0
- package/dist/xchains/bitcoin/index.cjs.map +1 -0
- package/dist/xchains/bitcoin/index.d.ts +125 -0
- package/dist/xchains/bitcoin/index.mjs +16 -0
- package/dist/xchains/bitcoin/index.mjs.map +1 -0
- package/dist/xchains/evm/index.cjs +316 -0
- package/dist/xchains/evm/index.cjs.map +1 -0
- package/dist/xchains/evm/index.d.ts +39 -0
- package/dist/xchains/evm/index.mjs +5 -0
- package/dist/xchains/evm/index.mjs.map +1 -0
- package/dist/xchains/icon/index.cjs +311 -0
- package/dist/xchains/icon/index.cjs.map +1 -0
- package/dist/xchains/icon/index.d.ts +37 -0
- package/dist/xchains/icon/index.mjs +7 -0
- package/dist/xchains/icon/index.mjs.map +1 -0
- package/dist/xchains/injective/index.cjs +223 -0
- package/dist/xchains/injective/index.cjs.map +1 -0
- package/dist/xchains/injective/index.d.ts +35 -0
- package/dist/xchains/injective/index.mjs +5 -0
- package/dist/xchains/injective/index.mjs.map +1 -0
- package/dist/xchains/near/index.cjs +190 -0
- package/dist/xchains/near/index.cjs.map +1 -0
- package/dist/xchains/near/index.d.ts +34 -0
- package/dist/xchains/near/index.mjs +6 -0
- package/dist/xchains/near/index.mjs.map +1 -0
- package/dist/xchains/solana/index.cjs +186 -0
- package/dist/xchains/solana/index.cjs.map +1 -0
- package/dist/xchains/solana/index.d.ts +26 -0
- package/dist/xchains/solana/index.mjs +7 -0
- package/dist/xchains/solana/index.mjs.map +1 -0
- package/dist/xchains/stacks/index.cjs +240 -0
- package/dist/xchains/stacks/index.cjs.map +1 -0
- package/dist/xchains/stacks/index.d.ts +36 -0
- package/dist/xchains/stacks/index.mjs +5 -0
- package/dist/xchains/stacks/index.mjs.map +1 -0
- package/dist/xchains/stellar/index.cjs +322 -0
- package/dist/xchains/stellar/index.cjs.map +1 -0
- package/dist/xchains/stellar/index.d.ts +44 -0
- package/dist/xchains/stellar/index.mjs +6 -0
- package/dist/xchains/stellar/index.mjs.map +1 -0
- package/dist/xchains/sui/index.cjs +248 -0
- package/dist/xchains/sui/index.cjs.map +1 -0
- package/dist/xchains/sui/index.d.ts +37 -0
- package/dist/xchains/sui/index.mjs +7 -0
- package/dist/xchains/sui/index.mjs.map +1 -0
- package/docs/ADDING_A_NEW_CHAIN.md +440 -0
- package/docs/ARCHITECTURE.md +291 -0
- package/docs/BATCH_OPERATIONS.md +267 -0
- package/docs/CHAIN_DETECTION.md +216 -0
- package/docs/CONFIGURE_PROVIDER.md +360 -0
- package/docs/CONNECTORS.md +247 -0
- package/docs/CONNECT_FLOW.md +276 -0
- package/docs/EVM_SWITCH_CHAIN.md +161 -0
- package/docs/SIGN_MESSAGE.md +213 -0
- package/docs/SUB_PATH_EXPORTS.md +246 -0
- package/docs/WALLETCONNECT.md +154 -0
- package/docs/WALLET_MODAL.md +331 -0
- package/docs/WALLET_PROVIDER_BRIDGE.md +226 -0
- package/package.json +34 -9
- package/skills/SKILLS.md +84 -0
- package/skills/bridge-to-sdk.md +148 -0
- package/skills/connect-button.md +116 -0
- package/skills/evm-only-walletconnect.md +111 -0
- package/skills/multi-chain-modal.md +178 -0
- package/skills/setup.md +107 -0
- package/dist/index.d.cts +0 -1579
- package/src/Hydrate.ts +0 -65
- package/src/SodaxWalletProvider.tsx +0 -97
- package/src/actions/getXChainType.ts +0 -8
- package/src/actions/getXService.ts +0 -33
- package/src/actions/index.ts +0 -2
- package/src/assets/wallets/hana.svg +0 -6
- package/src/assets/wallets/havah.svg +0 -76
- package/src/assets/wallets/keplr.svg +0 -30
- package/src/assets/wallets/metamask.svg +0 -60
- package/src/assets/wallets/phantom.svg +0 -4
- package/src/assets/wallets/sui.svg +0 -20
- package/src/core/XConnector.ts +0 -54
- package/src/core/XService.ts +0 -85
- package/src/core/index.ts +0 -2
- package/src/hooks/index.ts +0 -11
- package/src/hooks/useEthereumChainId.ts +0 -44
- package/src/hooks/useEvmSwitchChain.ts +0 -91
- package/src/hooks/useWalletProvider.ts +0 -206
- package/src/hooks/useXAccount.ts +0 -51
- package/src/hooks/useXAccounts.ts +0 -56
- package/src/hooks/useXBalances.ts +0 -65
- package/src/hooks/useXConnect.ts +0 -118
- package/src/hooks/useXConnection.ts +0 -72
- package/src/hooks/useXConnectors.ts +0 -72
- package/src/hooks/useXDisconnect.ts +0 -73
- package/src/hooks/useXService.ts +0 -8
- package/src/hooks/useXSignMessage.ts +0 -82
- package/src/index.ts +0 -19
- package/src/types/index.ts +0 -22
- package/src/useXWagmiStore.ts +0 -116
- package/src/utils/index.ts +0 -21
- package/src/xchains/bitcoin/BitcoinXConnector.ts +0 -34
- package/src/xchains/bitcoin/BitcoinXService.ts +0 -40
- package/src/xchains/bitcoin/OKXXConnector.ts +0 -117
- package/src/xchains/bitcoin/UnisatXConnector.ts +0 -117
- package/src/xchains/bitcoin/XverseXConnector.ts +0 -232
- package/src/xchains/bitcoin/index.ts +0 -7
- package/src/xchains/bitcoin/useBitcoinXConnectors.ts +0 -14
- package/src/xchains/evm/EvmXConnector.ts +0 -27
- package/src/xchains/evm/EvmXService.ts +0 -211
- package/src/xchains/evm/index.ts +0 -3
- package/src/xchains/icon/IconHanaXConnector.ts +0 -39
- package/src/xchains/icon/IconXService.ts +0 -117
- package/src/xchains/icon/actions.ts +0 -28
- package/src/xchains/icon/iconex/index.tsx +0 -46
- package/src/xchains/icon/index.ts +0 -2
- package/src/xchains/injective/InjectiveXConnector.ts +0 -60
- package/src/xchains/injective/InjectiveXService.ts +0 -62
- package/src/xchains/injective/actions.ts +0 -32
- package/src/xchains/injective/index.ts +0 -2
- package/src/xchains/near/NearXConnector.ts +0 -42
- package/src/xchains/near/NearXService.ts +0 -46
- package/src/xchains/near/useNearXConnectors.ts +0 -23
- package/src/xchains/solana/SolanaXConnector.ts +0 -26
- package/src/xchains/solana/SolanaXService.ts +0 -46
- package/src/xchains/solana/index.ts +0 -2
- package/src/xchains/stacks/StacksXConnector.ts +0 -63
- package/src/xchains/stacks/StacksXService.ts +0 -59
- package/src/xchains/stacks/constants.ts +0 -42
- package/src/xchains/stacks/index.ts +0 -4
- package/src/xchains/stacks/useStacksXConnectors.ts +0 -7
- package/src/xchains/stellar/CustomSorobanServer.ts +0 -93
- package/src/xchains/stellar/StellarWalletsKitXConnector.ts +0 -53
- package/src/xchains/stellar/StellarXService.ts +0 -93
- package/src/xchains/stellar/actions.ts +0 -24
- package/src/xchains/stellar/index.tsx +0 -2
- package/src/xchains/stellar/useStellarXConnectors.ts +0 -21
- package/src/xchains/stellar/utils.ts +0 -49
- package/src/xchains/sui/SuiXConnector.ts +0 -28
- package/src/xchains/sui/SuiXService.ts +0 -66
- package/src/xchains/sui/index.ts +0 -2
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var transactions = require('@stacks/transactions');
|
|
4
|
+
var network = require('@stacks/network');
|
|
5
|
+
var connect = require('@stacks/connect');
|
|
6
|
+
var react = require('react');
|
|
7
|
+
|
|
8
|
+
// src/core/XService.ts
|
|
9
|
+
var XService = class {
|
|
10
|
+
/** The blockchain type this service handles */
|
|
11
|
+
xChainType;
|
|
12
|
+
/** Available wallet connectors for this chain */
|
|
13
|
+
xConnectors = [];
|
|
14
|
+
constructor(xChainType) {
|
|
15
|
+
this.xChainType = xChainType;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Gets the balance of a specific token for an address
|
|
19
|
+
* @param address The wallet address to check
|
|
20
|
+
* @param xToken The token to get the balance for
|
|
21
|
+
* @returns Promise resolving to the token balance as a bigint
|
|
22
|
+
*/
|
|
23
|
+
async getBalance(address, xToken) {
|
|
24
|
+
return 0n;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Gets balances for multiple tokens for an address
|
|
28
|
+
* @param address The wallet address to check
|
|
29
|
+
* @param xTokens Array of tokens to get balances for
|
|
30
|
+
* @returns Promise resolving to object mapping token addresses to balances
|
|
31
|
+
*/
|
|
32
|
+
async getBalances(address, xTokens) {
|
|
33
|
+
if (!address) return {};
|
|
34
|
+
const balancePromises = xTokens.map(async (xToken) => {
|
|
35
|
+
const balance = await this.getBalance(address, xToken);
|
|
36
|
+
return { address: xToken.address, balance };
|
|
37
|
+
});
|
|
38
|
+
const balances = await Promise.all(balancePromises);
|
|
39
|
+
return balances.reduce((acc, { address: address2, balance }) => {
|
|
40
|
+
acc[address2] = balance;
|
|
41
|
+
return acc;
|
|
42
|
+
}, {});
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Gets all available connectors for this chain
|
|
46
|
+
*/
|
|
47
|
+
getXConnectors() {
|
|
48
|
+
return this.xConnectors;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Sets the available connectors for this chain
|
|
52
|
+
*/
|
|
53
|
+
setXConnectors(xConnectors) {
|
|
54
|
+
this.xConnectors = xConnectors;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Gets a specific connector by its ID
|
|
58
|
+
* @param xConnectorId The connector ID to look up
|
|
59
|
+
* @returns The matching connector or undefined if not found
|
|
60
|
+
*/
|
|
61
|
+
getXConnectorById(xConnectorId) {
|
|
62
|
+
return this.getXConnectors().find((xConnector) => xConnector.id === xConnectorId);
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
var StacksXService = class _StacksXService extends XService {
|
|
66
|
+
static instance;
|
|
67
|
+
network;
|
|
68
|
+
constructor(network$1) {
|
|
69
|
+
super("STACKS");
|
|
70
|
+
this.network = network.networkFrom(network$1 || "mainnet");
|
|
71
|
+
}
|
|
72
|
+
static getInstance(network$1) {
|
|
73
|
+
if (!_StacksXService.instance) {
|
|
74
|
+
_StacksXService.instance = new _StacksXService(network$1);
|
|
75
|
+
} else if (network$1) {
|
|
76
|
+
_StacksXService.instance.network = network.networkFrom(network$1);
|
|
77
|
+
}
|
|
78
|
+
return _StacksXService.instance;
|
|
79
|
+
}
|
|
80
|
+
async getBalance(address, xToken) {
|
|
81
|
+
if (!address) return 0n;
|
|
82
|
+
if (xToken.symbol === "STX") {
|
|
83
|
+
const url = `${this.network.client.baseUrl}/extended/v1/address/${address}/balances`;
|
|
84
|
+
try {
|
|
85
|
+
const response = await fetch(url);
|
|
86
|
+
if (!response.ok) {
|
|
87
|
+
throw new Error(`Error fetching data: ${response.statusText}`);
|
|
88
|
+
}
|
|
89
|
+
const data = await response.json();
|
|
90
|
+
return BigInt(data.stx.balance);
|
|
91
|
+
} catch (error) {
|
|
92
|
+
console.error("Error fetching STX balance:", error);
|
|
93
|
+
return 0n;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const parts = xToken.address.split(".");
|
|
97
|
+
const contractAddress = parts[0] ?? "";
|
|
98
|
+
const contractName = parts[1] ?? "";
|
|
99
|
+
try {
|
|
100
|
+
const result = await transactions.fetchCallReadOnlyFunction({
|
|
101
|
+
contractAddress,
|
|
102
|
+
contractName,
|
|
103
|
+
functionName: "get-balance",
|
|
104
|
+
functionArgs: [transactions.Cl.principal(address)],
|
|
105
|
+
network: this.network,
|
|
106
|
+
senderAddress: address
|
|
107
|
+
});
|
|
108
|
+
return result.value.value;
|
|
109
|
+
} catch (error) {
|
|
110
|
+
console.error("Error fetching token balance:", error);
|
|
111
|
+
return 0n;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
// src/core/XConnector.ts
|
|
117
|
+
var XConnector = class {
|
|
118
|
+
/** The blockchain type this connector supports */
|
|
119
|
+
xChainType;
|
|
120
|
+
/** Display name of the wallet provider */
|
|
121
|
+
name;
|
|
122
|
+
/** Unique identifier for the connector */
|
|
123
|
+
_id;
|
|
124
|
+
/** Optional icon URL for the wallet provider */
|
|
125
|
+
_icon;
|
|
126
|
+
constructor(xChainType, name, id) {
|
|
127
|
+
this.xChainType = xChainType;
|
|
128
|
+
this.name = name;
|
|
129
|
+
this._id = id;
|
|
130
|
+
}
|
|
131
|
+
/** Get the unique identifier for this connector */
|
|
132
|
+
get id() {
|
|
133
|
+
return this._id;
|
|
134
|
+
}
|
|
135
|
+
/** Get the optional icon URL for this wallet provider */
|
|
136
|
+
get icon() {
|
|
137
|
+
return this._icon;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* True when the wallet extension backing this connector is installed.
|
|
141
|
+
* Default: true (for provider-managed chains where connector presence already
|
|
142
|
+
* implies install — EVM via EIP-6963, Solana/Sui via adapter discovery).
|
|
143
|
+
* Subclasses backed by extension injection (Bitcoin, ICON, Stacks) override
|
|
144
|
+
* this with a window probe.
|
|
145
|
+
*/
|
|
146
|
+
get isInstalled() {
|
|
147
|
+
return true;
|
|
148
|
+
}
|
|
149
|
+
/** URL to install the wallet extension when missing. Subclasses override. */
|
|
150
|
+
get installUrl() {
|
|
151
|
+
return void 0;
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
function getProviderFromId(id) {
|
|
155
|
+
return id.split(".").reduce((acc, part) => acc?.[part], window);
|
|
156
|
+
}
|
|
157
|
+
var StacksXConnector = class extends XConnector {
|
|
158
|
+
config;
|
|
159
|
+
constructor(config) {
|
|
160
|
+
super("STACKS", config.name, config.id);
|
|
161
|
+
this.config = config;
|
|
162
|
+
}
|
|
163
|
+
async connect() {
|
|
164
|
+
const provider = this.getProvider();
|
|
165
|
+
if (!provider) {
|
|
166
|
+
throw new Error(`${this.config.name} is not installed. Install the extension and reload the page.`);
|
|
167
|
+
}
|
|
168
|
+
const response = await connect.request({ provider }, "stx_getAddresses");
|
|
169
|
+
const stxAddress = response.addresses.find((a) => a.purpose === "stacks");
|
|
170
|
+
if (!stxAddress) {
|
|
171
|
+
console.warn(
|
|
172
|
+
`[StacksXConnector] ${this.config.name}: no address with purpose="stacks" returned from stx_getAddresses`,
|
|
173
|
+
response.addresses
|
|
174
|
+
);
|
|
175
|
+
return void 0;
|
|
176
|
+
}
|
|
177
|
+
return {
|
|
178
|
+
address: stxAddress.address,
|
|
179
|
+
xChainType: this.xChainType
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
async disconnect() {
|
|
183
|
+
connect.disconnect();
|
|
184
|
+
}
|
|
185
|
+
get icon() {
|
|
186
|
+
return this.config.icon;
|
|
187
|
+
}
|
|
188
|
+
get isInstalled() {
|
|
189
|
+
if (typeof window === "undefined") return false;
|
|
190
|
+
return getProviderFromId(this.config.id) !== void 0;
|
|
191
|
+
}
|
|
192
|
+
get installUrl() {
|
|
193
|
+
return this.config.installUrl;
|
|
194
|
+
}
|
|
195
|
+
getProvider() {
|
|
196
|
+
return getProviderFromId(this.config.id);
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
// src/xchains/stacks/constants.ts
|
|
201
|
+
var LEATHER_ICON = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgdmlld0JveD0iMCAwIDEyOCAxMjgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIxMjgiIGhlaWdodD0iMTI4IiByeD0iMjYuODM4NyIgZmlsbD0iIzEyMTAwRiIvPgo8cGF0aCBkPSJNNzQuOTE3MSA1Mi43MTE0QzgyLjQ3NjYgNTEuNTQwOCA5My40MDg3IDQzLjU4MDQgOTMuNDA4NyAzNy4zNzYxQzkzLjQwODcgMzUuNTAzMSA5MS44OTY4IDM0LjIxNTQgODkuNjg3MSAzNC4yMTU0Qzg1LjUwMDQgMzQuMjE1NCA3OC40MDYxIDQwLjUzNjggNzQuOTE3MSA1Mi43MTE0Wk0zOS45MTEgODMuNDk5MUMzMC4wMjU2IDgzLjQ5OTEgMjkuMjExNSA5My4zMzI0IDM5LjA5NjkgOTMuMzMyNEM0My41MTYzIDkzLjMzMjQgNDguODY2MSA5MS41NzY0IDUxLjY1NzMgODguNDE1N0M0Ny41ODY4IDg0LjkwMzggNDQuMjE0MSA4My40OTkxIDM5LjkxMSA4My40OTkxWk0xMDIuODI5IDc5LjI4NDhDMTAzLjQxIDk1Ljc5MDcgOTUuMDM2OSAxMDUuMDM5IDgwLjg0ODQgMTA1LjAzOUM3Mi40NzQ4IDEwNS4wMzkgNjguMjg4MSAxMDEuODc4IDU5LjMzMyA5Ni4wMjQ5QzU0LjY4MSAxMDEuMTc2IDQ1Ljg0MjMgMTA1LjAzOSAzOC41MTU0IDEwNS4wMzlDMTMuMjc4NSAxMDUuMDM5IDE0LjMyNTIgNzIuODQ2MyA0MC4wMjczIDcyLjg0NjNDNDUuMzc3MSA3Mi44NDYzIDQ5LjkxMjggNzQuMjUxMSA1NS43Mjc3IDc3Ljg4TDU5LjU2NTYgNjQuNDE3N0M0My43NDg5IDYwLjA4NjQgMzUuODQwNSA0Ny45MTE4IDQzLjYzMjYgMzAuNDY5M0g1Ni4xOTI5QzQ5LjIxNSA0Mi4wNTg2IDUzLjk4MzIgNTEuNjU3OCA2Mi44MjIgNTIuNzExNEM2Ny41OTAzIDM1LjczNzIgNzcuODI0NiAyMi41MDkgOTEuNDMxNiAyMi41MDlDOTkuMTA3NCAyMi41MDkgMTA1LjE1NSAyNy41NDI4IDEwNS4xNTUgMzYuNjczN0MxMDUuMTU1IDUxLjMwNjYgODYuMDgxOSA2My4yNDcxIDcxLjY2MDcgNjQuNDE3N0w2NS43Mjk1IDg1LjM3MjFDNzIuNDc0OCA5My4yMTUzIDkxLjE5OSAxMDAuODI0IDkxLjE5OSA3OS4yODQ4SDEwMi44MjlaIiBmaWxsPSIjRjVGMUVEIi8+Cjwvc3ZnPgo=";
|
|
202
|
+
var XVERSE_ICON = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MDAiIGhlaWdodD0iNjAwIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGZpbGw9IiMxNzE3MTciIGQ9Ik0wIDBoNjAwdjYwMEgweiIvPjxwYXRoIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTQ0MCA0MzUuNHYtNTFjMC0yLS44LTMuOS0yLjItNS4zTDIyMCAxNjIuMmE3LjYgNy42IDAgMCAwLTUuNC0yLjJoLTUxLjFjLTIuNSAwLTQuNiAyLTQuNiA0LjZ2NDcuM2MwIDIgLjggNCAyLjIgNS40bDc4LjIgNzcuOGE0LjYgNC42IDAgMCAxIDAgNi41bC03OSA3OC43Yy0xIC45LTEuNCAyLTEuNCAzLjJ2NTJjMCAyLjQgMiA0LjUgNC42IDQuNUgyNDljMi42IDAgNC42LTIgNC42LTQuNlY0MDVjMC0xLjIuNS0yLjQgMS40LTMuM2w0Mi40LTQyLjJhNC42IDQuNiAwIDAgMSA2LjQgMGw3OC43IDc4LjRhNy42IDcuNiAwIDAgMCA1LjQgMi4yaDQ3LjVjMi41IDAgNC42LTIgNC42LTQuNloiLz48cGF0aCBmaWxsPSIjRUU3QTMwIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0zMjUuNiAyMjcuMmg0Mi44YzIuNiAwIDQuNiAyLjEgNC42IDQuNnY0Mi42YzAgNCA1IDYuMSA4IDMuMmw1OC43LTU4LjVjLjgtLjggMS4zLTIgMS4zLTMuMnYtNTEuMmMwLTIuNi0yLTQuNi00LjYtNC42TDM4NCAxNjBjLTEuMiAwLTIuNC41LTMuMyAxLjNsLTU4LjQgNTguMWE0LjYgNC42IDAgMCAwIDMuMiA3LjhaIi8+PC9nPjwvc3ZnPg==";
|
|
203
|
+
var ASIGNA_ICON = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzAwMDEwMCIgZD0iTTAgMGgzMnYzMkgweiIvPjxwYXRoIGZpbGw9InVybCgjYSkiIGQ9Ik0xNS4xMSA1LjU1YTMgMyAwIDAgMC0xLjgyIDEuM2wtLjA1LjA4LS40My43Mi0uMDcuMTEtLjUuODUtLjA1LjA5LTEuMjkgMi4xOC0uMDQuMDctLjQ3LjgtLjA2LjEtLjQ2Ljc4LS4wNy4xMS0xLjYzIDIuNzYtLjA3LjExLS4zOC42Ni0uMDUuMDgtLjczIDEuMjQtLjM1LjYtLjQuNjctLjA1LjA5TDUuMSAyMC43bC0uMTEuMTgtLjE0LjIzLS4wNy4xMy0uMzMuNTUtLjA0LjA3di4wMWExLjI2IDEuMjYgMCAwIDAtLjE0LjQ3IDEuMzEgMS4zMSAwIDAgMCAxLjI0IDEuNGgxLjVsLjA1LS4wNi4wNC0uMDYuODctMS4yMS4wNS0uMDguNzctMS4wNy4wNS0uMDcuNC0uNTcuMDUtLjA2LjI0LS4zNGExLjUyIDEuNTIgMCAwIDEgMS4zOS0uNjIgMS41IDEuNSAwIDAgMSAuNjQuMiAxLjQ3IDEuNDcgMCAwIDEgLjczIDEuMjcgMS40NCAxLjQ0IDAgMCAxLS4yNy44NGwtLjYzLjg4LS4wNS4wNy0uMzIuNDUtLjA2LjA4LS4wOC4xMi0uMTIuMTYtLjA1LjA4aDIuMTNhMi4zMiAyLjMyIDAgMCAwIDEuNzctLjk2bDEuMTgtMS42My43Ny0xLjA4IDEuMy0xLjhhMS4yNCAxLjI0IDAgMCAxIC41NS0uNDNsLjA4LS4wM2ExLjMgMS4zIDAgMCAxIC4zLS4wNiAxLjI4IDEuMjggMCAwIDEgMS4xNS41NGwuMTEuMmExLjEzIDEuMTMgMCAwIDEgLjEuNDEgMS4xOSAxLjE5IDAgMCAxLS4yMy43N2wtLjAzLjA1LS41Ny44LS43Ljk4LS4yNy4zN2ExLjIyIDEuMjIgMCAwIDAtLjIuNSAxLjA1IDEuMDUgMCAwIDAtLjAyLjIzdi4wNmExLjE3IDEuMTcgMCAwIDAgLjE0LjQzbC4wMi4wNS4wNy4xYTEuNDQgMS40NCAwIDAgMCAuMS4xMWwuMDUuMDYuMDEuMDFhMS44IDEuOCAwIDAgMCAuMTQuMWMwIC4wMi4wMi4wMy4wNC4wM2ExIDEgMCAwIDAgLjA4LjA1bC4wNy4wNGExLjI1IDEuMjUgMCAwIDAgLjUuMWg2LjljLjEgMCAuMi0uMDEuMjktLjAzbC4wNi0uMDJhMS4yNyAxLjI3IDAgMCAwIC4yNy0uMS41Ny41NyAwIDAgMCAuMDctLjAzIDEuMjEgMS4yMSAwIDAgMCAuMjYtLjE5bC4wOC0uMDdhLjkyLjkyIDAgMCAwIC4xNS0uMTkgMS41NSAxLjU1IDAgMCAwIC4wOS0uMTdsLjAyLS4wNWExLjIyIDEuMjIgMCAwIDAgLjA4LS4yNnYtLjA0bC4wMi0uMDh2LS4wOGExLjMyIDEuMzIgMCAwIDAtLjItLjc0bC0xLjYtMi42NC0uMDYtLjEtLjItLjMyLS4zMy0uNTR2LS4wMWwtLjA1LS4wOC0xLjMtMi4xNS0uMDctLjEtLjA0LS4wNi0uOC0xLjMyLS4wNC0uMDctLjItLjM0LS4xLS4xNC0uMS0uMTYtLjUzLS45LS4xMy0uMi0uMDktLjE0LTIuMTctMy41Ny0uMDQtLjA3LS43Mi0xLjE5LS4wNS0uMDctLjQtLjY1YTIuNjUgMi42NSAwIDAgMC0uMy0uNCAyLjk2IDIuOTYgMCAwIDAtLjk3LS43NCAzLjA0IDMuMDQgMCAwIDAtMS4zLS4zYy0uMjUgMC0uNS4wNC0uNzQuMVoiLz48cGF0aCBmaWxsPSJ1cmwoI2IpIiBkPSJNMTkgMTYuM2E1LjQ1IDUuNDUgMCAwIDAtLjgzIDEuNTZsLS4wNC4xNWExLjM2IDEuMzYgMCAwIDEgLjI4LS4xNiAxLjI0IDEuMjQgMCAwIDEgLjM4LS4wOGguMWExLjI4IDEuMjggMCAwIDEgMS4wNS41NGMuMDQuMDYuMDguMTMuMS4yYTEuMjQgMS4yNCAwIDAgMSAuMDkuMjcgMS4xOSAxLjE5IDAgMCAxLS4yLjkxbC0uMDQuMDUtLjU3Ljc5LS43Ljk5LS4yNy4zN2ExLjIzIDEuMjMgMCAwIDAtLjIuNDIgMS4wNiAxLjA2IDAgMCAwLS4wMi4zMXYuMDZhMS4xNyAxLjE3IDAgMCAwIC4xNi40Ny45My45MyAwIDAgMCAuMDcuMSAxLjUgMS41IDAgMCAwIC4xLjEybC4wNS4wNmguMDFhMS45NCAxLjk0IDAgMCAwIC4wOS4wOCAxIDEgMCAwIDAgLjE3LjFsLjA3LjA0YTEuMjUgMS4yNSAwIDAgMCAuNS4xaDYuOWMuMSAwIC4yIDAgLjI4LS4wMmwuMDctLjAyYTEuMzIgMS4zMiAwIDAgMCAuMzQtLjEzbC4xNi0uMS4wMy0uMDNhMS4yOSAxLjI5IDAgMCAwIC4yLS4yIDIuNDMgMi40MyAwIDAgMCAuMTItLjE3Yy4wMy0uMDMuMDUtLjA4LjA3LS4xMmwuMDItLjA1YTEuMjEgMS4yMSAwIDAgMCAuMDktLjN2LS4wOGwuMDEtLjA5YTEuMzIgMS4zMiAwIDAgMC0uMi0uNzNsLTEuNi0yLjY0LS4wNi0uMS0uMi0uMzItLjMzLS41NHYtLjAybC0uMDUtLjA3LTEuMy0yLjE1LS4xMi0uMDctLjA3LS4wNGE0Ljk0IDQuOTQgMCAwIDAtMi40Ni0uNjdjLTEuMDMgMC0xLjc2LjU3LTIuMjYgMS4yWiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xMi4yOSAyMS4wOGMwIC4yOS0uMDkuNTgtLjI3Ljg0bC0xLjMxIDEuODRIN2wyLjUyLTMuNTNhMS41NCAxLjU0IDAgMCAxIDIuMS0uMzZjLjQzLjI4LjY2Ljc0LjY2IDEuMloiLz48cGF0aCBmaWxsPSIjMDAwIiBkPSJNMTEuMTYgMjEuMjVhLjU2LjU2IDAgMCAxLS41Ny41NS41Ni41NiAwIDAgMS0uNTctLjU2LjU2LjU2IDAgMCAxIC41Ny0uNTUuNTYuNTYgMCAwIDEgLjU3LjU2WiIvPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjE1LjIzIiB4Mj0iMTkuMyIgeTE9IjI1Ljc4IiB5Mj0iNi4xMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiM2NTIyRjQiLz48c3RvcCBvZmZzZXQ9Ii41NSIgc3RvcC1jb2xvcj0iIzlCNkJGRiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0E1ODVGRiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJiIiB4MT0iMjIuNTkiIHgyPSIyNC44IiB5MT0iMjQuNzEiIHkyPSIxNS41MyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiM0MjFGOEIiLz48c3RvcCBvZmZzZXQ9Ii41NSIgc3RvcC1jb2xvcj0iIzcyMzBGRiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzk3NzNGRiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjwvc3ZnPg==";
|
|
204
|
+
var FORDEFI_ICON = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDIiIGhlaWdodD0iNDIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHBhdGggZmlsbD0iIzEwMTExNCIgZD0iTTAgMGg0MnY0MkgweiIvPgogIDxwYXRoIGQ9Ik0xOS40NyAyNi44OUg1djMuNTdhNC41NyA0LjU3IDAgMCAwIDQuNTggNC41N2g1LjgzbDQuMDYtOC4xNFoiIGZpbGw9IiM3OTk0RkYiLz4KICA8cGF0aCBkPSJNNSAxNy40aDI3LjU4bC0zLjIgNi43OEg1VjE3LjRaIiBmaWxsPSIjNDg2REZGIi8+CiAgPHBhdGggZD0iTTE0LjY3IDdINXY3LjY4aDMzVjdoLTkuNjd2NS43NGgtMlY3aC05LjY3djUuNzRoLTEuOTlWN1oiIGZpbGw9IiM1Q0QxRkEiLz4KPC9zdmc+Cg==";
|
|
205
|
+
var STACKS_PROVIDERS = [
|
|
206
|
+
{
|
|
207
|
+
id: "LeatherProvider",
|
|
208
|
+
name: "Leather",
|
|
209
|
+
icon: LEATHER_ICON,
|
|
210
|
+
installUrl: "https://chrome.google.com/webstore/detail/hiro-wallet/ldinpeekobnhjjdofggfgjlcehhmanlj"
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
id: "XverseProviders.BitcoinProvider",
|
|
214
|
+
name: "Xverse Wallet",
|
|
215
|
+
icon: XVERSE_ICON,
|
|
216
|
+
installUrl: "https://chrome.google.com/webstore/detail/xverse-wallet/idnnbdplmphpflfnlkomgpfbpcgelopg"
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
id: "AsignaProvider",
|
|
220
|
+
name: "Asigna Multisig",
|
|
221
|
+
icon: ASIGNA_ICON,
|
|
222
|
+
installUrl: "https://stx.asigna.io/"
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
id: "FordefiProviders.UtxoProvider",
|
|
226
|
+
name: "Fordefi",
|
|
227
|
+
icon: FORDEFI_ICON,
|
|
228
|
+
installUrl: "https://chromewebstore.google.com/detail/fordefi/hcmehenccjdmfbojapcbcofkgdpbnlle"
|
|
229
|
+
}
|
|
230
|
+
];
|
|
231
|
+
function useStacksXConnectors() {
|
|
232
|
+
return react.useMemo(() => STACKS_PROVIDERS.map((config) => new StacksXConnector(config)), []);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
exports.STACKS_PROVIDERS = STACKS_PROVIDERS;
|
|
236
|
+
exports.StacksXConnector = StacksXConnector;
|
|
237
|
+
exports.StacksXService = StacksXService;
|
|
238
|
+
exports.useStacksXConnectors = useStacksXConnectors;
|
|
239
|
+
//# sourceMappingURL=index.cjs.map
|
|
240
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/core/XService.ts","../../../src/xchains/stacks/StacksXService.ts","../../../src/core/XConnector.ts","../../../src/xchains/stacks/StacksXConnector.ts","../../../src/xchains/stacks/constants.ts","../../../src/xchains/stacks/useStacksXConnectors.ts"],"names":["address","network","networkFrom","fetchCallReadOnlyFunction","Cl","request","disconnect","useMemo"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ChainType, IXServiceBase, XToken } from '@sodax/types';\nimport type { IXConnector } from '@/types/interfaces.js';\n\n/**\n * Abstract base class for blockchain service implementations.\n *\n * The XService class serves as a foundation for implementing blockchain-specific services\n * in a multi-chain environment. It provides a standardized interface for:\n * 1. Managing wallet connectors for different blockchain types\n * 2. Querying token balances across different chains\n *\n * Each blockchain implementation (e.g., Solana, EVM chains) extends this class\n * to provide chain-specific functionality while maintaining a consistent interface.\n *\n * @abstract\n * @class XService\n * @property {ChainType} xChainType - The blockchain type this service handles (e.g., 'SOLANA', 'EVM')\n * @property {XConnector[]} xConnectors - Available wallet connectors for this chain\n *\n */\nexport abstract class XService implements IXServiceBase {\n /** The blockchain type this service handles */\n public readonly xChainType: ChainType;\n\n /** Available wallet connectors for this chain */\n private xConnectors: IXConnector[] = [];\n\n constructor(xChainType: ChainType) {\n this.xChainType = xChainType;\n }\n\n /**\n * Gets the balance of a specific token for an address\n * @param address The wallet address to check\n * @param xToken The token to get the balance for\n * @returns Promise resolving to the token balance as a bigint\n */\n public async getBalance(address: string | undefined, xToken: XToken): Promise<bigint> {\n return 0n;\n }\n\n /**\n * Gets balances for multiple tokens for an address\n * @param address The wallet address to check\n * @param xTokens Array of tokens to get balances for\n * @returns Promise resolving to object mapping token addresses to balances\n */\n public async getBalances(address: string | undefined, xTokens: readonly XToken[]): Promise<Record<string, bigint>> {\n if (!address) return {};\n\n const balancePromises = xTokens.map(async xToken => {\n const balance = await this.getBalance(address, xToken);\n return { address: xToken.address, balance };\n });\n\n const balances = await Promise.all(balancePromises);\n return balances.reduce<Record<string, bigint>>((acc, { address, balance }) => {\n acc[address] = balance;\n return acc;\n }, {});\n }\n\n /**\n * Gets all available connectors for this chain\n */\n public getXConnectors(): IXConnector[] {\n return this.xConnectors;\n }\n\n /**\n * Sets the available connectors for this chain\n */\n public setXConnectors(xConnectors: IXConnector[]): void {\n this.xConnectors = xConnectors;\n }\n\n /**\n * Gets a specific connector by its ID\n * @param xConnectorId The connector ID to look up\n * @returns The matching connector or undefined if not found\n */\n public getXConnectorById(xConnectorId: string): IXConnector | undefined {\n return this.getXConnectors().find(xConnector => xConnector.id === xConnectorId);\n }\n}\n","import { XService } from '@/core/XService.js';\nimport type { XToken } from '@sodax/types';\nimport { fetchCallReadOnlyFunction, Cl, type UIntCV, type ResponseOkCV } from '@stacks/transactions';\nimport { networkFrom, type StacksNetwork, type StacksNetworkName } from '@stacks/network';\n\nexport class StacksXService extends XService {\n private static instance: StacksXService;\n\n public network: StacksNetwork;\n\n private constructor(network?: StacksNetworkName | StacksNetwork) {\n super('STACKS');\n this.network = networkFrom(network || 'mainnet');\n }\n\n public static getInstance(network?: StacksNetworkName | StacksNetwork): StacksXService {\n if (!StacksXService.instance) {\n StacksXService.instance = new StacksXService(network);\n } else if (network) {\n StacksXService.instance.network = networkFrom(network);\n }\n return StacksXService.instance;\n }\n\n override async getBalance(address: string | undefined, xToken: XToken): Promise<bigint> {\n if (!address) return 0n;\n\n // native STX balance\n if (xToken.symbol === 'STX') {\n const url = `${this.network.client.baseUrl}/extended/v1/address/${address}/balances`;\n try {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Error fetching data: ${response.statusText}`);\n }\n const data = await response.json();\n return BigInt(data.stx.balance);\n } catch (error) {\n console.error('Error fetching STX balance:', error);\n return 0n;\n }\n }\n\n // SIP-010 fungible token balance via read-only contract call\n const parts = xToken.address.split('.');\n const contractAddress = parts[0] ?? '';\n const contractName = parts[1] ?? '';\n try {\n const result = (await fetchCallReadOnlyFunction({\n contractAddress,\n contractName,\n functionName: 'get-balance',\n functionArgs: [Cl.principal(address)],\n network: this.network,\n senderAddress: address,\n })) as ResponseOkCV<UIntCV>;\n return result.value.value as bigint;\n } catch (error) {\n console.error('Error fetching token balance:', error);\n return 0n;\n }\n }\n}\n","import type { ChainType } from '@sodax/types';\nimport type { XAccount } from '@/types/index.js';\nimport type { IXConnector } from '@/types/interfaces.js';\n\n/**\n * Base class for wallet provider connectors that handles connection management and wallet interactions\n *\n * @abstract\n * @class XConnector\n * @property {ChainType} xChainType - The blockchain type this connector supports\n * @property {string} name - Display name of the wallet provider\n * @property {string} _id - Unique identifier for the connector\n * @property {string | undefined} _icon - Optional icon URL for the wallet provider\n */\n\nexport abstract class XConnector implements IXConnector {\n /** The blockchain type this connector supports */\n public readonly xChainType: ChainType;\n\n /** Display name of the wallet provider */\n public readonly name: string;\n\n /** Unique identifier for the connector */\n public readonly _id: string;\n\n /** Optional icon URL for the wallet provider */\n public readonly _icon?: string;\n\n constructor(xChainType: ChainType, name: string, id: string) {\n this.xChainType = xChainType;\n this.name = name;\n this._id = id;\n }\n\n /**\n * Connects to the wallet provider\n * @returns Promise resolving to the connected account, or undefined if connection fails\n */\n abstract connect(): Promise<XAccount | undefined>;\n\n /**\n * Disconnects from the wallet provider\n */\n abstract disconnect(): Promise<void>;\n\n /** Get the unique identifier for this connector */\n public get id(): string {\n return this._id;\n }\n\n /** Get the optional icon URL for this wallet provider */\n public get icon(): string | undefined {\n return this._icon;\n }\n\n /**\n * True when the wallet extension backing this connector is installed.\n * Default: true (for provider-managed chains where connector presence already\n * implies install — EVM via EIP-6963, Solana/Sui via adapter discovery).\n * Subclasses backed by extension injection (Bitcoin, ICON, Stacks) override\n * this with a window probe.\n */\n public get isInstalled(): boolean {\n return true;\n }\n\n /** URL to install the wallet extension when missing. Subclasses override. */\n public get installUrl(): string | undefined {\n return undefined;\n }\n}\n","import type { XAccount } from '@/types/index.js';\nimport { XConnector } from '@/core/index.js';\nimport type { StacksProvider } from '@stacks/connect';\nimport { request, disconnect } from '@stacks/connect';\n\nexport interface StacksProviderConfig {\n /** The provider ID matching the window path, e.g. 'LeatherProvider' or 'XverseProviders.BitcoinProvider' */\n id: string;\n name: string;\n icon: string;\n installUrl?: string;\n}\n\n/** Resolves a provider from `window` by dot-separated ID, matching @stacks/connect-ui's getProviderFromId */\nfunction getProviderFromId(id: string): StacksProvider | undefined {\n return id.split('.').reduce<unknown>((acc, part) => (acc as Record<string, unknown>)?.[part], window) as\n | StacksProvider\n | undefined;\n}\n\nexport class StacksXConnector extends XConnector {\n private readonly config: StacksProviderConfig;\n\n constructor(config: StacksProviderConfig) {\n super('STACKS', config.name, config.id);\n this.config = config;\n }\n\n async connect(): Promise<XAccount | undefined> {\n const provider = this.getProvider();\n\n if (!provider) {\n // Throw instead of silently navigating to the install URL — callers\n // that bypass `useWalletModal.selectWallet`'s pre-check otherwise\n // see a tab open with no surfaced error. Consumers read\n // `connector.installUrl` to render the install CTA on the caught\n // error.\n throw new Error(`${this.config.name} is not installed. Install the extension and reload the page.`);\n }\n\n const response = await request({ provider }, 'stx_getAddresses');\n // Stacks SDK types don't include `purpose` on AddressEntry, but wallets return it at runtime\n const stxAddress = response.addresses.find(a => (a as unknown as { purpose?: string }).purpose === 'stacks');\n\n if (!stxAddress) {\n console.warn(\n `[StacksXConnector] ${this.config.name}: no address with purpose=\"stacks\" returned from stx_getAddresses`,\n response.addresses,\n );\n return undefined;\n }\n\n return {\n address: stxAddress.address,\n xChainType: this.xChainType,\n };\n }\n\n async disconnect(): Promise<void> {\n disconnect();\n }\n\n public override get icon(): string {\n return this.config.icon;\n }\n\n public override get isInstalled(): boolean {\n if (typeof window === 'undefined') return false;\n return getProviderFromId(this.config.id) !== undefined;\n }\n\n public override get installUrl(): string | undefined {\n return this.config.installUrl;\n }\n\n public getProvider(): StacksProvider | undefined {\n return getProviderFromId(this.config.id);\n }\n}\n","import type { StacksProviderConfig } from './StacksXConnector.js';\n\n// Icons sourced from @stacks/connect DEFAULT_PROVIDERS\n// https://github.com/stx-labs/connect/blob/main/packages/connect/src/providers.ts\nconst LEATHER_ICON =\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgdmlld0JveD0iMCAwIDEyOCAxMjgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIxMjgiIGhlaWdodD0iMTI4IiByeD0iMjYuODM4NyIgZmlsbD0iIzEyMTAwRiIvPgo8cGF0aCBkPSJNNzQuOTE3MSA1Mi43MTE0QzgyLjQ3NjYgNTEuNTQwOCA5My40MDg3IDQzLjU4MDQgOTMuNDA4NyAzNy4zNzYxQzkzLjQwODcgMzUuNTAzMSA5MS44OTY4IDM0LjIxNTQgODkuNjg3MSAzNC4yMTU0Qzg1LjUwMDQgMzQuMjE1NCA3OC40MDYxIDQwLjUzNjggNzQuOTE3MSA1Mi43MTE0Wk0zOS45MTEgODMuNDk5MUMzMC4wMjU2IDgzLjQ5OTEgMjkuMjExNSA5My4zMzI0IDM5LjA5NjkgOTMuMzMyNEM0My41MTYzIDkzLjMzMjQgNDguODY2MSA5MS41NzY0IDUxLjY1NzMgODguNDE1N0M0Ny41ODY4IDg0LjkwMzggNDQuMjE0MSA4My40OTkxIDM5LjkxMSA4My40OTkxWk0xMDIuODI5IDc5LjI4NDhDMTAzLjQxIDk1Ljc5MDcgOTUuMDM2OSAxMDUuMDM5IDgwLjg0ODQgMTA1LjAzOUM3Mi40NzQ4IDEwNS4wMzkgNjguMjg4MSAxMDEuODc4IDU5LjMzMyA5Ni4wMjQ5QzU0LjY4MSAxMDEuMTc2IDQ1Ljg0MjMgMTA1LjAzOSAzOC41MTU0IDEwNS4wMzlDMTMuMjc4NSAxMDUuMDM5IDE0LjMyNTIgNzIuODQ2MyA0MC4wMjczIDcyLjg0NjNDNDUuMzc3MSA3Mi44NDYzIDQ5LjkxMjggNzQuMjUxMSA1NS43Mjc3IDc3Ljg4TDU5LjU2NTYgNjQuNDE3N0M0My43NDg5IDYwLjA4NjQgMzUuODQwNSA0Ny45MTE4IDQzLjYzMjYgMzAuNDY5M0g1Ni4xOTI5QzQ5LjIxNSA0Mi4wNTg2IDUzLjk4MzIgNTEuNjU3OCA2Mi44MjIgNTIuNzExNEM2Ny41OTAzIDM1LjczNzIgNzcuODI0NiAyMi41MDkgOTEuNDMxNiAyMi41MDlDOTkuMTA3NCAyMi41MDkgMTA1LjE1NSAyNy41NDI4IDEwNS4xNTUgMzYuNjczN0MxMDUuMTU1IDUxLjMwNjYgODYuMDgxOSA2My4yNDcxIDcxLjY2MDcgNjQuNDE3N0w2NS43Mjk1IDg1LjM3MjFDNzIuNDc0OCA5My4yMTUzIDkxLjE5OSAxMDAuODI0IDkxLjE5OSA3OS4yODQ4SDEwMi44MjlaIiBmaWxsPSIjRjVGMUVEIi8+Cjwvc3ZnPgo=';\n\nconst XVERSE_ICON =\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MDAiIGhlaWdodD0iNjAwIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGZpbGw9IiMxNzE3MTciIGQ9Ik0wIDBoNjAwdjYwMEgweiIvPjxwYXRoIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTQ0MCA0MzUuNHYtNTFjMC0yLS44LTMuOS0yLjItNS4zTDIyMCAxNjIuMmE3LjYgNy42IDAgMCAwLTUuNC0yLjJoLTUxLjFjLTIuNSAwLTQuNiAyLTQuNiA0LjZ2NDcuM2MwIDIgLjggNCAyLjIgNS40bDc4LjIgNzcuOGE0LjYgNC42IDAgMCAxIDAgNi41bC03OSA3OC43Yy0xIC45LTEuNCAyLTEuNCAzLjJ2NTJjMCAyLjQgMiA0LjUgNC42IDQuNUgyNDljMi42IDAgNC42LTIgNC42LTQuNlY0MDVjMC0xLjIuNS0yLjQgMS40LTMuM2w0Mi40LTQyLjJhNC42IDQuNiAwIDAgMSA2LjQgMGw3OC43IDc4LjRhNy42IDcuNiAwIDAgMCA1LjQgMi4yaDQ3LjVjMi41IDAgNC42LTIgNC42LTQuNloiLz48cGF0aCBmaWxsPSIjRUU3QTMwIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0zMjUuNiAyMjcuMmg0Mi44YzIuNiAwIDQuNiAyLjEgNC42IDQuNnY0Mi42YzAgNCA1IDYuMSA4IDMuMmw1OC43LTU4LjVjLjgtLjggMS4zLTIgMS4zLTMuMnYtNTEuMmMwLTIuNi0yLTQuNi00LjYtNC42TDM4NCAxNjBjLTEuMiAwLTIuNC41LTMuMyAxLjNsLTU4LjQgNTguMWE0LjYgNC42IDAgMCAwIDMuMiA3LjhaIi8+PC9nPjwvc3ZnPg==';\n\nconst ASIGNA_ICON =\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzAwMDEwMCIgZD0iTTAgMGgzMnYzMkgweiIvPjxwYXRoIGZpbGw9InVybCgjYSkiIGQ9Ik0xNS4xMSA1LjU1YTMgMyAwIDAgMC0xLjgyIDEuM2wtLjA1LjA4LS40My43Mi0uMDcuMTEtLjUuODUtLjA1LjA5LTEuMjkgMi4xOC0uMDQuMDctLjQ3LjgtLjA2LjEtLjQ2Ljc4LS4wNy4xMS0xLjYzIDIuNzYtLjA3LjExLS4zOC42Ni0uMDUuMDgtLjczIDEuMjQtLjM1LjYtLjQuNjctLjA1LjA5TDUuMSAyMC43bC0uMTEuMTgtLjE0LjIzLS4wNy4xMy0uMzMuNTUtLjA0LjA3di4wMWExLjI2IDEuMjYgMCAwIDAtLjE0LjQ3IDEuMzEgMS4zMSAwIDAgMCAxLjI0IDEuNGgxLjVsLjA1LS4wNi4wNC0uMDYuODctMS4yMS4wNS0uMDguNzctMS4wNy4wNS0uMDcuNC0uNTcuMDUtLjA2LjI0LS4zNGExLjUyIDEuNTIgMCAwIDEgMS4zOS0uNjIgMS41IDEuNSAwIDAgMSAuNjQuMiAxLjQ3IDEuNDcgMCAwIDEgLjczIDEuMjcgMS40NCAxLjQ0IDAgMCAxLS4yNy44NGwtLjYzLjg4LS4wNS4wNy0uMzIuNDUtLjA2LjA4LS4wOC4xMi0uMTIuMTYtLjA1LjA4aDIuMTNhMi4zMiAyLjMyIDAgMCAwIDEuNzctLjk2bDEuMTgtMS42My43Ny0xLjA4IDEuMy0xLjhhMS4yNCAxLjI0IDAgMCAxIC41NS0uNDNsLjA4LS4wM2ExLjMgMS4zIDAgMCAxIC4zLS4wNiAxLjI4IDEuMjggMCAwIDEgMS4xNS41NGwuMTEuMmExLjEzIDEuMTMgMCAwIDEgLjEuNDEgMS4xOSAxLjE5IDAgMCAxLS4yMy43N2wtLjAzLjA1LS41Ny44LS43Ljk4LS4yNy4zN2ExLjIyIDEuMjIgMCAwIDAtLjIuNSAxLjA1IDEuMDUgMCAwIDAtLjAyLjIzdi4wNmExLjE3IDEuMTcgMCAwIDAgLjE0LjQzbC4wMi4wNS4wNy4xYTEuNDQgMS40NCAwIDAgMCAuMS4xMWwuMDUuMDYuMDEuMDFhMS44IDEuOCAwIDAgMCAuMTQuMWMwIC4wMi4wMi4wMy4wNC4wM2ExIDEgMCAwIDAgLjA4LjA1bC4wNy4wNGExLjI1IDEuMjUgMCAwIDAgLjUuMWg2LjljLjEgMCAuMi0uMDEuMjktLjAzbC4wNi0uMDJhMS4yNyAxLjI3IDAgMCAwIC4yNy0uMS41Ny41NyAwIDAgMCAuMDctLjAzIDEuMjEgMS4yMSAwIDAgMCAuMjYtLjE5bC4wOC0uMDdhLjkyLjkyIDAgMCAwIC4xNS0uMTkgMS41NSAxLjU1IDAgMCAwIC4wOS0uMTdsLjAyLS4wNWExLjIyIDEuMjIgMCAwIDAgLjA4LS4yNnYtLjA0bC4wMi0uMDh2LS4wOGExLjMyIDEuMzIgMCAwIDAtLjItLjc0bC0xLjYtMi42NC0uMDYtLjEtLjItLjMyLS4zMy0uNTR2LS4wMWwtLjA1LS4wOC0xLjMtMi4xNS0uMDctLjEtLjA0LS4wNi0uOC0xLjMyLS4wNC0uMDctLjItLjM0LS4xLS4xNC0uMS0uMTYtLjUzLS45LS4xMy0uMi0uMDktLjE0LTIuMTctMy41Ny0uMDQtLjA3LS43Mi0xLjE5LS4wNS0uMDctLjQtLjY1YTIuNjUgMi42NSAwIDAgMC0uMy0uNCAyLjk2IDIuOTYgMCAwIDAtLjk3LS43NCAzLjA0IDMuMDQgMCAwIDAtMS4zLS4zYy0uMjUgMC0uNS4wNC0uNzQuMVoiLz48cGF0aCBmaWxsPSJ1cmwoI2IpIiBkPSJNMTkgMTYuM2E1LjQ1IDUuNDUgMCAwIDAtLjgzIDEuNTZsLS4wNC4xNWExLjM2IDEuMzYgMCAwIDEgLjI4LS4xNiAxLjI0IDEuMjQgMCAwIDEgLjM4LS4wOGguMWExLjI4IDEuMjggMCAwIDEgMS4wNS41NGMuMDQuMDYuMDguMTMuMS4yYTEuMjQgMS4yNCAwIDAgMSAuMDkuMjcgMS4xOSAxLjE5IDAgMCAxLS4yLjkxbC0uMDQuMDUtLjU3Ljc5LS43Ljk5LS4yNy4zN2ExLjIzIDEuMjMgMCAwIDAtLjIuNDIgMS4wNiAxLjA2IDAgMCAwLS4wMi4zMXYuMDZhMS4xNyAxLjE3IDAgMCAwIC4xNi40Ny45My45MyAwIDAgMCAuMDcuMSAxLjUgMS41IDAgMCAwIC4xLjEybC4wNS4wNmguMDFhMS45NCAxLjk0IDAgMCAwIC4wOS4wOCAxIDEgMCAwIDAgLjE3LjFsLjA3LjA0YTEuMjUgMS4yNSAwIDAgMCAuNS4xaDYuOWMuMSAwIC4yIDAgLjI4LS4wMmwuMDctLjAyYTEuMzIgMS4zMiAwIDAgMCAuMzQtLjEzbC4xNi0uMS4wMy0uMDNhMS4yOSAxLjI5IDAgMCAwIC4yLS4yIDIuNDMgMi40MyAwIDAgMCAuMTItLjE3Yy4wMy0uMDMuMDUtLjA4LjA3LS4xMmwuMDItLjA1YTEuMjEgMS4yMSAwIDAgMCAuMDktLjN2LS4wOGwuMDEtLjA5YTEuMzIgMS4zMiAwIDAgMC0uMi0uNzNsLTEuNi0yLjY0LS4wNi0uMS0uMi0uMzItLjMzLS41NHYtLjAybC0uMDUtLjA3LTEuMy0yLjE1LS4xMi0uMDctLjA3LS4wNGE0Ljk0IDQuOTQgMCAwIDAtMi40Ni0uNjdjLTEuMDMgMC0xLjc2LjU3LTIuMjYgMS4yWiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xMi4yOSAyMS4wOGMwIC4yOS0uMDkuNTgtLjI3Ljg0bC0xLjMxIDEuODRIN2wyLjUyLTMuNTNhMS41NCAxLjU0IDAgMCAxIDIuMS0uMzZjLjQzLjI4LjY2Ljc0LjY2IDEuMloiLz48cGF0aCBmaWxsPSIjMDAwIiBkPSJNMTEuMTYgMjEuMjVhLjU2LjU2IDAgMCAxLS41Ny41NS41Ni41NiAwIDAgMS0uNTctLjU2LjU2LjU2IDAgMCAxIC41Ny0uNTUuNTYuNTYgMCAwIDEgLjU3LjU2WiIvPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjE1LjIzIiB4Mj0iMTkuMyIgeTE9IjI1Ljc4IiB5Mj0iNi4xMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiM2NTIyRjQiLz48c3RvcCBvZmZzZXQ9Ii41NSIgc3RvcC1jb2xvcj0iIzlCNkJGRiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0E1ODVGRiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJiIiB4MT0iMjIuNTkiIHgyPSIyNC44IiB5MT0iMjQuNzEiIHkyPSIxNS41MyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiM0MjFGOEIiLz48c3RvcCBvZmZzZXQ9Ii41NSIgc3RvcC1jb2xvcj0iIzcyMzBGRiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzk3NzNGRiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjwvc3ZnPg==';\n\nconst FORDEFI_ICON =\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDIiIGhlaWdodD0iNDIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHBhdGggZmlsbD0iIzEwMTExNCIgZD0iTTAgMGg0MnY0MkgweiIvPgogIDxwYXRoIGQ9Ik0xOS40NyAyNi44OUg1djMuNTdhNC41NyA0LjU3IDAgMCAwIDQuNTggNC41N2g1LjgzbDQuMDYtOC4xNFoiIGZpbGw9IiM3OTk0RkYiLz4KICA8cGF0aCBkPSJNNSAxNy40aDI3LjU4bC0zLjIgNi43OEg1VjE3LjRaIiBmaWxsPSIjNDg2REZGIi8+CiAgPHBhdGggZD0iTTE0LjY3IDdINXY3LjY4aDMzVjdoLTkuNjd2NS43NGgtMlY3aC05LjY3djUuNzRoLTEuOTlWN1oiIGZpbGw9IiM1Q0QxRkEiLz4KPC9zdmc+Cg==';\n\nexport const STACKS_PROVIDERS: StacksProviderConfig[] = [\n {\n id: 'LeatherProvider',\n name: 'Leather',\n icon: LEATHER_ICON,\n installUrl: 'https://chrome.google.com/webstore/detail/hiro-wallet/ldinpeekobnhjjdofggfgjlcehhmanlj',\n },\n {\n id: 'XverseProviders.BitcoinProvider',\n name: 'Xverse Wallet',\n icon: XVERSE_ICON,\n installUrl: 'https://chrome.google.com/webstore/detail/xverse-wallet/idnnbdplmphpflfnlkomgpfbpcgelopg',\n },\n {\n id: 'AsignaProvider',\n name: 'Asigna Multisig',\n icon: ASIGNA_ICON,\n installUrl: 'https://stx.asigna.io/',\n },\n {\n id: 'FordefiProviders.UtxoProvider',\n name: 'Fordefi',\n icon: FORDEFI_ICON,\n installUrl: 'https://chromewebstore.google.com/detail/fordefi/hcmehenccjdmfbojapcbcofkgdpbnlle',\n },\n];\n","import { useMemo } from 'react';\nimport { StacksXConnector } from './StacksXConnector.js';\nimport { STACKS_PROVIDERS } from './constants.js';\n\nexport function useStacksXConnectors(): StacksXConnector[] {\n return useMemo(() => STACKS_PROVIDERS.map(config => new StacksXConnector(config)), []);\n}\n"]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { b as XService, c as XConnector, X as XAccount } from '../../XConnector-B9YQTVJ4.js';
|
|
2
|
+
import { XToken } from '@sodax/types';
|
|
3
|
+
import { StacksNetwork, StacksNetworkName } from '@stacks/network';
|
|
4
|
+
import { StacksProvider } from '@stacks/connect';
|
|
5
|
+
|
|
6
|
+
declare class StacksXService extends XService {
|
|
7
|
+
private static instance;
|
|
8
|
+
network: StacksNetwork;
|
|
9
|
+
private constructor();
|
|
10
|
+
static getInstance(network?: StacksNetworkName | StacksNetwork): StacksXService;
|
|
11
|
+
getBalance(address: string | undefined, xToken: XToken): Promise<bigint>;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
interface StacksProviderConfig {
|
|
15
|
+
/** The provider ID matching the window path, e.g. 'LeatherProvider' or 'XverseProviders.BitcoinProvider' */
|
|
16
|
+
id: string;
|
|
17
|
+
name: string;
|
|
18
|
+
icon: string;
|
|
19
|
+
installUrl?: string;
|
|
20
|
+
}
|
|
21
|
+
declare class StacksXConnector extends XConnector {
|
|
22
|
+
private readonly config;
|
|
23
|
+
constructor(config: StacksProviderConfig);
|
|
24
|
+
connect(): Promise<XAccount | undefined>;
|
|
25
|
+
disconnect(): Promise<void>;
|
|
26
|
+
get icon(): string;
|
|
27
|
+
get isInstalled(): boolean;
|
|
28
|
+
get installUrl(): string | undefined;
|
|
29
|
+
getProvider(): StacksProvider | undefined;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
declare const STACKS_PROVIDERS: StacksProviderConfig[];
|
|
33
|
+
|
|
34
|
+
declare function useStacksXConnectors(): StacksXConnector[];
|
|
35
|
+
|
|
36
|
+
export { STACKS_PROVIDERS, type StacksProviderConfig, StacksXConnector, StacksXService, useStacksXConnectors };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.mjs"}
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var stellarWalletsKit = require('@creit.tech/stellar-wallets-kit');
|
|
4
|
+
var StellarSdk = require('@stellar/stellar-sdk');
|
|
5
|
+
|
|
6
|
+
function _interopNamespace(e) {
|
|
7
|
+
if (e && e.__esModule) return e;
|
|
8
|
+
var n = Object.create(null);
|
|
9
|
+
if (e) {
|
|
10
|
+
Object.keys(e).forEach(function (k) {
|
|
11
|
+
if (k !== 'default') {
|
|
12
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
13
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function () { return e[k]; }
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
n.default = e;
|
|
21
|
+
return Object.freeze(n);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
var StellarSdk__namespace = /*#__PURE__*/_interopNamespace(StellarSdk);
|
|
25
|
+
|
|
26
|
+
// src/core/XService.ts
|
|
27
|
+
var XService = class {
|
|
28
|
+
/** The blockchain type this service handles */
|
|
29
|
+
xChainType;
|
|
30
|
+
/** Available wallet connectors for this chain */
|
|
31
|
+
xConnectors = [];
|
|
32
|
+
constructor(xChainType) {
|
|
33
|
+
this.xChainType = xChainType;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Gets the balance of a specific token for an address
|
|
37
|
+
* @param address The wallet address to check
|
|
38
|
+
* @param xToken The token to get the balance for
|
|
39
|
+
* @returns Promise resolving to the token balance as a bigint
|
|
40
|
+
*/
|
|
41
|
+
async getBalance(address, xToken) {
|
|
42
|
+
return 0n;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Gets balances for multiple tokens for an address
|
|
46
|
+
* @param address The wallet address to check
|
|
47
|
+
* @param xTokens Array of tokens to get balances for
|
|
48
|
+
* @returns Promise resolving to object mapping token addresses to balances
|
|
49
|
+
*/
|
|
50
|
+
async getBalances(address, xTokens) {
|
|
51
|
+
if (!address) return {};
|
|
52
|
+
const balancePromises = xTokens.map(async (xToken) => {
|
|
53
|
+
const balance = await this.getBalance(address, xToken);
|
|
54
|
+
return { address: xToken.address, balance };
|
|
55
|
+
});
|
|
56
|
+
const balances = await Promise.all(balancePromises);
|
|
57
|
+
return balances.reduce((acc, { address: address2, balance }) => {
|
|
58
|
+
acc[address2] = balance;
|
|
59
|
+
return acc;
|
|
60
|
+
}, {});
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Gets all available connectors for this chain
|
|
64
|
+
*/
|
|
65
|
+
getXConnectors() {
|
|
66
|
+
return this.xConnectors;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Sets the available connectors for this chain
|
|
70
|
+
*/
|
|
71
|
+
setXConnectors(xConnectors) {
|
|
72
|
+
this.xConnectors = xConnectors;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Gets a specific connector by its ID
|
|
76
|
+
* @param xConnectorId The connector ID to look up
|
|
77
|
+
* @returns The matching connector or undefined if not found
|
|
78
|
+
*/
|
|
79
|
+
getXConnectorById(xConnectorId) {
|
|
80
|
+
return this.getXConnectors().find((xConnector) => xConnector.id === xConnectorId);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
var CustomSorobanServer = class extends StellarSdk.rpc.Server {
|
|
84
|
+
customHeaders;
|
|
85
|
+
constructor(serverUrl, customHeaders) {
|
|
86
|
+
super(serverUrl, {
|
|
87
|
+
allowHttp: true
|
|
88
|
+
});
|
|
89
|
+
this.customHeaders = customHeaders;
|
|
90
|
+
}
|
|
91
|
+
async simulateTransaction(tx) {
|
|
92
|
+
const requestOptions = {
|
|
93
|
+
method: "POST",
|
|
94
|
+
headers: {
|
|
95
|
+
"Content-Type": "application/json",
|
|
96
|
+
...this.customHeaders
|
|
97
|
+
},
|
|
98
|
+
body: JSON.stringify({
|
|
99
|
+
id: 1,
|
|
100
|
+
jsonrpc: "2.0",
|
|
101
|
+
method: "simulateTransaction",
|
|
102
|
+
params: {
|
|
103
|
+
transaction: tx.toXDR()
|
|
104
|
+
}
|
|
105
|
+
})
|
|
106
|
+
};
|
|
107
|
+
const response = await fetch(`${this.serverURL}`, requestOptions);
|
|
108
|
+
if (!response.ok) {
|
|
109
|
+
throw new Error(`HTTP error simulating TX! status: ${response.status}`);
|
|
110
|
+
}
|
|
111
|
+
return response.json().then((json) => StellarSdk.rpc.parseRawSimulation(json.result));
|
|
112
|
+
}
|
|
113
|
+
async sendTransaction(tx) {
|
|
114
|
+
const requestOptions = {
|
|
115
|
+
method: "POST",
|
|
116
|
+
headers: {
|
|
117
|
+
"Content-Type": "application/json",
|
|
118
|
+
...this.customHeaders
|
|
119
|
+
},
|
|
120
|
+
body: JSON.stringify({
|
|
121
|
+
id: 1,
|
|
122
|
+
jsonrpc: "2.0",
|
|
123
|
+
method: "sendTransaction",
|
|
124
|
+
params: {
|
|
125
|
+
transaction: tx.toXDR()
|
|
126
|
+
}
|
|
127
|
+
})
|
|
128
|
+
};
|
|
129
|
+
const response = await fetch(`${this.serverURL}`, requestOptions);
|
|
130
|
+
if (!response.ok) {
|
|
131
|
+
throw new Error(`HTTP error submitting TX! status: ${response.status}`);
|
|
132
|
+
}
|
|
133
|
+
return response.json().then((json) => json.result);
|
|
134
|
+
}
|
|
135
|
+
async getTransaction(hash) {
|
|
136
|
+
const requestOptions = {
|
|
137
|
+
method: "POST",
|
|
138
|
+
headers: {
|
|
139
|
+
"Content-Type": "application/json",
|
|
140
|
+
...this.customHeaders
|
|
141
|
+
},
|
|
142
|
+
body: JSON.stringify({
|
|
143
|
+
id: 1,
|
|
144
|
+
jsonrpc: "2.0",
|
|
145
|
+
method: "getTransaction",
|
|
146
|
+
params: { hash }
|
|
147
|
+
})
|
|
148
|
+
};
|
|
149
|
+
const response = await fetch(`${this.serverURL}`, requestOptions);
|
|
150
|
+
if (!response.ok) {
|
|
151
|
+
throw new Error(`HTTP error getting TX! status: ${response.status}`);
|
|
152
|
+
}
|
|
153
|
+
return response.json().then((json) => json.result);
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
var CustomSorobanServer_default = CustomSorobanServer;
|
|
157
|
+
var accountToScVal = (account) => new StellarSdk.Address(account).toScVal();
|
|
158
|
+
var simulateTx = (tx, server) => server.simulateTransaction(tx);
|
|
159
|
+
var getTokenBalance = async (address, tokenId, txBuilder, server) => {
|
|
160
|
+
const params = [accountToScVal(address)];
|
|
161
|
+
const contract = new StellarSdk.Contract(tokenId);
|
|
162
|
+
const tx = txBuilder.addOperation(contract.call("balance", ...params)).setTimeout(StellarSdk.TimeoutInfinite).build();
|
|
163
|
+
const result = await simulateTx(tx, server);
|
|
164
|
+
if (!StellarSdk.rpc.Api.isSimulationSuccess(result)) {
|
|
165
|
+
throw new Error(`Simulation failed: ${JSON.stringify(result)}`);
|
|
166
|
+
}
|
|
167
|
+
return result.result ? StellarSdk.scValToBigInt(result.result.retval) : 0n;
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
// src/constants.ts
|
|
171
|
+
var STELLAR_DEFAULT_HORIZON_RPC_URL = "https://horizon.stellar.org";
|
|
172
|
+
var STELLAR_DEFAULT_SOROBAN_RPC_URL = "https://rpc.ankr.com/stellar_soroban";
|
|
173
|
+
|
|
174
|
+
// src/xchains/stellar/StellarXService.ts
|
|
175
|
+
var STELLAR_BASE_RESERVE_STROOPS = 5e6;
|
|
176
|
+
function parseXlmBalanceToStroops(balanceStr) {
|
|
177
|
+
const parts = balanceStr.split(".");
|
|
178
|
+
const whole = parts[0] ?? "0";
|
|
179
|
+
const frac = (parts[1] ?? "").padEnd(7, "0").slice(0, 7);
|
|
180
|
+
return BigInt(whole + frac);
|
|
181
|
+
}
|
|
182
|
+
var StellarXService = class _StellarXService extends XService {
|
|
183
|
+
static instance;
|
|
184
|
+
walletsKit;
|
|
185
|
+
server;
|
|
186
|
+
sorobanServer;
|
|
187
|
+
constructor(horizonRpcUrl, sorobanRpcUrl) {
|
|
188
|
+
super("STELLAR");
|
|
189
|
+
this.walletsKit = new stellarWalletsKit.StellarWalletsKit({
|
|
190
|
+
network: stellarWalletsKit.WalletNetwork.PUBLIC,
|
|
191
|
+
modules: stellarWalletsKit.allowAllModules()
|
|
192
|
+
});
|
|
193
|
+
this.server = new StellarSdk__namespace.Horizon.Server(horizonRpcUrl ?? STELLAR_DEFAULT_HORIZON_RPC_URL, { allowHttp: true });
|
|
194
|
+
this.sorobanServer = new CustomSorobanServer_default(sorobanRpcUrl ?? STELLAR_DEFAULT_SOROBAN_RPC_URL, {});
|
|
195
|
+
}
|
|
196
|
+
static getInstance(horizonRpcUrl, sorobanRpcUrl) {
|
|
197
|
+
if (!_StellarXService.instance) {
|
|
198
|
+
_StellarXService.instance = new _StellarXService(horizonRpcUrl, sorobanRpcUrl);
|
|
199
|
+
} else {
|
|
200
|
+
if (horizonRpcUrl) {
|
|
201
|
+
_StellarXService.instance.server = new StellarSdk__namespace.Horizon.Server(horizonRpcUrl, { allowHttp: true });
|
|
202
|
+
}
|
|
203
|
+
if (sorobanRpcUrl) {
|
|
204
|
+
_StellarXService.instance.sorobanServer = new CustomSorobanServer_default(sorobanRpcUrl, {});
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return _StellarXService.instance;
|
|
208
|
+
}
|
|
209
|
+
async getBalance(address, xToken) {
|
|
210
|
+
if (!address) return BigInt(0);
|
|
211
|
+
const stellarAccount = await this.server.loadAccount(address);
|
|
212
|
+
if (xToken.symbol === "XLM") {
|
|
213
|
+
const xlmBalance = stellarAccount.balances.find((balance) => balance.asset_type === "native");
|
|
214
|
+
if (xlmBalance) {
|
|
215
|
+
const rawBalanceStroops = parseXlmBalanceToStroops(xlmBalance.balance);
|
|
216
|
+
const sellingLiabilitiesStroops = xlmBalance.selling_liabilities ? parseXlmBalanceToStroops(xlmBalance.selling_liabilities) : BigInt(0);
|
|
217
|
+
const reserveFields = stellarAccount;
|
|
218
|
+
const subentryCount = reserveFields.subentry_count ?? 0;
|
|
219
|
+
const numSponsoring = reserveFields.num_sponsoring ?? 0;
|
|
220
|
+
const numSponsored = reserveFields.num_sponsored ?? 0;
|
|
221
|
+
const reserveCount = Math.max(0, 2 + subentryCount + numSponsoring - numSponsored);
|
|
222
|
+
const minBalanceStroops = BigInt(reserveCount) * BigInt(STELLAR_BASE_RESERVE_STROOPS) + sellingLiabilitiesStroops;
|
|
223
|
+
const availableStroops = rawBalanceStroops > minBalanceStroops ? rawBalanceStroops - minBalanceStroops : BigInt(0);
|
|
224
|
+
return availableStroops;
|
|
225
|
+
}
|
|
226
|
+
} else {
|
|
227
|
+
try {
|
|
228
|
+
const txBuilder = new StellarSdk__namespace.TransactionBuilder(stellarAccount, {
|
|
229
|
+
fee: StellarSdk__namespace.BASE_FEE,
|
|
230
|
+
networkPassphrase: StellarSdk__namespace.Networks.PUBLIC
|
|
231
|
+
});
|
|
232
|
+
const balance = await getTokenBalance(address, xToken.address, txBuilder, this.sorobanServer);
|
|
233
|
+
return balance;
|
|
234
|
+
} catch (e) {
|
|
235
|
+
console.error(`Error while fetching token on Stellar: ${xToken.symbol}, Error: ${e}`);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
return BigInt(0);
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
|
|
242
|
+
// src/core/XConnector.ts
|
|
243
|
+
var XConnector = class {
|
|
244
|
+
/** The blockchain type this connector supports */
|
|
245
|
+
xChainType;
|
|
246
|
+
/** Display name of the wallet provider */
|
|
247
|
+
name;
|
|
248
|
+
/** Unique identifier for the connector */
|
|
249
|
+
_id;
|
|
250
|
+
/** Optional icon URL for the wallet provider */
|
|
251
|
+
_icon;
|
|
252
|
+
constructor(xChainType, name, id) {
|
|
253
|
+
this.xChainType = xChainType;
|
|
254
|
+
this.name = name;
|
|
255
|
+
this._id = id;
|
|
256
|
+
}
|
|
257
|
+
/** Get the unique identifier for this connector */
|
|
258
|
+
get id() {
|
|
259
|
+
return this._id;
|
|
260
|
+
}
|
|
261
|
+
/** Get the optional icon URL for this wallet provider */
|
|
262
|
+
get icon() {
|
|
263
|
+
return this._icon;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* True when the wallet extension backing this connector is installed.
|
|
267
|
+
* Default: true (for provider-managed chains where connector presence already
|
|
268
|
+
* implies install — EVM via EIP-6963, Solana/Sui via adapter discovery).
|
|
269
|
+
* Subclasses backed by extension injection (Bitcoin, ICON, Stacks) override
|
|
270
|
+
* this with a window probe.
|
|
271
|
+
*/
|
|
272
|
+
get isInstalled() {
|
|
273
|
+
return true;
|
|
274
|
+
}
|
|
275
|
+
/** URL to install the wallet extension when missing. Subclasses override. */
|
|
276
|
+
get installUrl() {
|
|
277
|
+
return void 0;
|
|
278
|
+
}
|
|
279
|
+
};
|
|
280
|
+
|
|
281
|
+
// src/xchains/stellar/StellarWalletsKitXConnector.ts
|
|
282
|
+
var StellarWalletsKitXConnector = class extends XConnector {
|
|
283
|
+
_wallet;
|
|
284
|
+
constructor(wallet) {
|
|
285
|
+
super("STELLAR", wallet.name, wallet.id);
|
|
286
|
+
this._wallet = wallet;
|
|
287
|
+
}
|
|
288
|
+
getXService() {
|
|
289
|
+
return StellarXService.getInstance();
|
|
290
|
+
}
|
|
291
|
+
async connect() {
|
|
292
|
+
const kit = this.getXService().walletsKit;
|
|
293
|
+
if (!this._wallet) {
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
if (!this._wallet.isAvailable) {
|
|
297
|
+
throw new Error(`${this._wallet.name} is not installed. Install the wallet and reload the page.`);
|
|
298
|
+
}
|
|
299
|
+
kit.setWallet(this._wallet.id);
|
|
300
|
+
const { address } = await kit.getAddress();
|
|
301
|
+
return {
|
|
302
|
+
address,
|
|
303
|
+
xChainType: this.xChainType
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
async disconnect() {
|
|
307
|
+
}
|
|
308
|
+
get icon() {
|
|
309
|
+
return this._wallet.icon;
|
|
310
|
+
}
|
|
311
|
+
get isInstalled() {
|
|
312
|
+
return this._wallet.isAvailable;
|
|
313
|
+
}
|
|
314
|
+
get installUrl() {
|
|
315
|
+
return this._wallet.url;
|
|
316
|
+
}
|
|
317
|
+
};
|
|
318
|
+
|
|
319
|
+
exports.StellarWalletsKitXConnector = StellarWalletsKitXConnector;
|
|
320
|
+
exports.StellarXService = StellarXService;
|
|
321
|
+
//# sourceMappingURL=index.cjs.map
|
|
322
|
+
//# sourceMappingURL=index.cjs.map
|