@sodax/wallet-sdk-react 2.0.0-rc.3 → 2.0.0-rc.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/README.md +12 -5
  2. package/dist/{XConnector-B9YQTVJ4.d.ts → XConnector-12q0OVe5.d.ts} +1 -1
  3. package/dist/{chunk-NY7U7OJW.mjs → chunk-7V7O3Q7Y.mjs} +0 -2
  4. package/dist/{chunk-BXJLBR4G.mjs → chunk-C6M34IVL.mjs} +2 -4
  5. package/dist/{chunk-XZ7CHO2S.mjs → chunk-FSOGMSJH.mjs} +2 -4
  6. package/dist/{chunk-X2MHIWXO.mjs → chunk-IFXZQW4C.mjs} +0 -2
  7. package/dist/{chunk-7ULB6DW4.mjs → chunk-JQ4H4GJ5.mjs} +3 -5
  8. package/dist/{chunk-N5A2TMF6.mjs → chunk-LKSSME2J.mjs} +2 -4
  9. package/dist/{chunk-BKJB527E.mjs → chunk-MWWVB7TD.mjs} +2 -4
  10. package/dist/{chunk-MXZVF5HR.mjs → chunk-NAKCAL2M.mjs} +0 -2
  11. package/dist/{chunk-PJLEJVAU.mjs → chunk-OPYSVPRW.mjs} +10 -6
  12. package/dist/chunk-QMXBY3UI.mjs +1 -0
  13. package/dist/{chunk-MAQ47Q52.mjs → chunk-TACW7Z4D.mjs} +0 -2
  14. package/dist/{chunk-PLCA4ZDJ.mjs → chunk-VCESC6QT.mjs} +54 -30
  15. package/dist/{chunk-2BOUGCJ7.mjs → chunk-WPZOLGVB.mjs} +4 -6
  16. package/dist/{chunk-66BAUK56.mjs → chunk-X7BHR7WS.mjs} +4 -6
  17. package/dist/{chunk-E5IAZ7E6.mjs → chunk-Z5GXDHGL.mjs} +11 -7
  18. package/dist/{config-OlnzyEUE.d.ts → config-DEsqgrG1.d.ts} +10 -5
  19. package/dist/index.d.ts +6 -6
  20. package/dist/index.mjs +20 -31
  21. package/dist/xchains/bitcoin/index.d.ts +1 -1
  22. package/dist/xchains/bitcoin/index.mjs +14 -16
  23. package/dist/xchains/evm/index.d.ts +3 -3
  24. package/dist/xchains/evm/index.mjs +3 -5
  25. package/dist/xchains/icon/index.d.ts +1 -1
  26. package/dist/xchains/icon/index.mjs +5 -7
  27. package/dist/xchains/injective/index.d.ts +2 -2
  28. package/dist/xchains/injective/index.mjs +3 -5
  29. package/dist/xchains/near/index.d.ts +1 -1
  30. package/dist/xchains/near/index.mjs +4 -6
  31. package/dist/xchains/solana/index.d.ts +1 -1
  32. package/dist/xchains/solana/index.mjs +5 -7
  33. package/dist/xchains/stacks/index.d.ts +10 -4
  34. package/dist/xchains/stacks/index.mjs +3 -5
  35. package/dist/xchains/stellar/index.d.ts +1 -1
  36. package/dist/xchains/stellar/index.mjs +4 -6
  37. package/dist/xchains/sui/index.d.ts +1 -1
  38. package/dist/xchains/sui/index.mjs +5 -7
  39. package/docs/ADDING_A_NEW_CHAIN.md +1 -1
  40. package/docs/SUB_PATH_EXPORTS.md +14 -42
  41. package/package.json +35 -28
  42. package/ai-exported/AGENTS.md +0 -122
  43. package/ai-exported/integration/README.md +0 -102
  44. package/ai-exported/integration/ai-rules.md +0 -136
  45. package/ai-exported/integration/architecture.md +0 -181
  46. package/ai-exported/integration/examples/01-minimal-evm.tsx +0 -75
  47. package/ai-exported/integration/examples/02-multi-chain-modal.tsx +0 -169
  48. package/ai-exported/integration/examples/03-nextjs-app-router.tsx +0 -99
  49. package/ai-exported/integration/examples/04-walletconnect-setup.tsx +0 -89
  50. package/ai-exported/integration/examples/README.md +0 -29
  51. package/ai-exported/integration/recipes/batch-operations.md +0 -223
  52. package/ai-exported/integration/recipes/bridge-to-sdk.md +0 -164
  53. package/ai-exported/integration/recipes/chain-detection.md +0 -254
  54. package/ai-exported/integration/recipes/connect-button.md +0 -156
  55. package/ai-exported/integration/recipes/multi-chain-modal.md +0 -199
  56. package/ai-exported/integration/recipes/setup.md +0 -160
  57. package/ai-exported/integration/recipes/sign-message.md +0 -137
  58. package/ai-exported/integration/recipes/sub-path-imports.md +0 -95
  59. package/ai-exported/integration/recipes/switch-chain.md +0 -141
  60. package/ai-exported/integration/recipes/walletconnect-setup.md +0 -139
  61. package/ai-exported/integration/reference/api-surface.md +0 -175
  62. package/ai-exported/integration/reference/chain-support.md +0 -78
  63. package/ai-exported/integration/reference/connectors.md +0 -74
  64. package/ai-exported/integration/reference/hooks.md +0 -204
  65. package/ai-exported/integration/reference/wallet-brands.md +0 -106
  66. package/ai-exported/migration/README.md +0 -49
  67. package/ai-exported/migration/ai-rules.md +0 -144
  68. package/ai-exported/migration/breaking-changes.md +0 -305
  69. package/ai-exported/migration/checklist.md +0 -159
  70. package/ai-exported/migration/recipes/connect-button.md +0 -166
  71. package/ai-exported/migration/recipes/multi-chain-modal.md +0 -244
  72. package/ai-exported/migration/recipes/ssr-setup.md +0 -164
  73. package/ai-exported/migration/recipes/walletconnect-migration.md +0 -168
  74. package/ai-exported/migration/reference/components.md +0 -73
  75. package/ai-exported/migration/reference/config.md +0 -325
  76. package/ai-exported/migration/reference/hooks.md +0 -323
  77. package/ai-exported/migration/reference/imports.md +0 -157
  78. package/dist/chunk-2BOUGCJ7.mjs.map +0 -1
  79. package/dist/chunk-66BAUK56.mjs.map +0 -1
  80. package/dist/chunk-7ULB6DW4.mjs.map +0 -1
  81. package/dist/chunk-BKJB527E.mjs.map +0 -1
  82. package/dist/chunk-BXJLBR4G.mjs.map +0 -1
  83. package/dist/chunk-E5IAZ7E6.mjs.map +0 -1
  84. package/dist/chunk-MAQ47Q52.mjs.map +0 -1
  85. package/dist/chunk-MXZVF5HR.mjs.map +0 -1
  86. package/dist/chunk-N5A2TMF6.mjs.map +0 -1
  87. package/dist/chunk-NY7U7OJW.mjs.map +0 -1
  88. package/dist/chunk-PJLEJVAU.mjs.map +0 -1
  89. package/dist/chunk-PLCA4ZDJ.mjs.map +0 -1
  90. package/dist/chunk-TZMKDXFA.mjs +0 -3
  91. package/dist/chunk-TZMKDXFA.mjs.map +0 -1
  92. package/dist/chunk-X2MHIWXO.mjs.map +0 -1
  93. package/dist/chunk-XZ7CHO2S.mjs.map +0 -1
  94. package/dist/index.cjs +0 -3337
  95. package/dist/index.cjs.map +0 -1
  96. package/dist/index.mjs.map +0 -1
  97. package/dist/xchains/bitcoin/index.cjs +0 -1927
  98. package/dist/xchains/bitcoin/index.cjs.map +0 -1
  99. package/dist/xchains/bitcoin/index.mjs.map +0 -1
  100. package/dist/xchains/evm/index.cjs +0 -316
  101. package/dist/xchains/evm/index.cjs.map +0 -1
  102. package/dist/xchains/evm/index.mjs.map +0 -1
  103. package/dist/xchains/icon/index.cjs +0 -311
  104. package/dist/xchains/icon/index.cjs.map +0 -1
  105. package/dist/xchains/icon/index.mjs.map +0 -1
  106. package/dist/xchains/injective/index.cjs +0 -223
  107. package/dist/xchains/injective/index.cjs.map +0 -1
  108. package/dist/xchains/injective/index.mjs.map +0 -1
  109. package/dist/xchains/near/index.cjs +0 -190
  110. package/dist/xchains/near/index.cjs.map +0 -1
  111. package/dist/xchains/near/index.mjs.map +0 -1
  112. package/dist/xchains/solana/index.cjs +0 -186
  113. package/dist/xchains/solana/index.cjs.map +0 -1
  114. package/dist/xchains/solana/index.mjs.map +0 -1
  115. package/dist/xchains/stacks/index.cjs +0 -240
  116. package/dist/xchains/stacks/index.cjs.map +0 -1
  117. package/dist/xchains/stacks/index.mjs.map +0 -1
  118. package/dist/xchains/stellar/index.cjs +0 -322
  119. package/dist/xchains/stellar/index.cjs.map +0 -1
  120. package/dist/xchains/stellar/index.mjs.map +0 -1
  121. package/dist/xchains/sui/index.cjs +0 -248
  122. package/dist/xchains/sui/index.cjs.map +0 -1
  123. package/dist/xchains/sui/index.mjs.map +0 -1
  124. package/skills/SKILLS.md +0 -84
  125. package/skills/bridge-to-sdk.md +0 -148
  126. package/skills/connect-button.md +0 -116
  127. package/skills/evm-only-walletconnect.md +0 -111
  128. package/skills/multi-chain-modal.md +0 -178
  129. package/skills/setup.md +0 -107
@@ -1,186 +0,0 @@
1
- 'use strict';
2
-
3
- require('@sodax/types');
4
- var web3_js = require('@solana/web3.js');
5
- var splToken = require('@solana/spl-token');
6
-
7
- // src/core/XService.ts
8
- var XService = class {
9
- /** The blockchain type this service handles */
10
- xChainType;
11
- /** Available wallet connectors for this chain */
12
- xConnectors = [];
13
- constructor(xChainType) {
14
- this.xChainType = xChainType;
15
- }
16
- /**
17
- * Gets the balance of a specific token for an address
18
- * @param address The wallet address to check
19
- * @param xToken The token to get the balance for
20
- * @returns Promise resolving to the token balance as a bigint
21
- */
22
- async getBalance(address, xToken) {
23
- return 0n;
24
- }
25
- /**
26
- * Gets balances for multiple tokens for an address
27
- * @param address The wallet address to check
28
- * @param xTokens Array of tokens to get balances for
29
- * @returns Promise resolving to object mapping token addresses to balances
30
- */
31
- async getBalances(address, xTokens) {
32
- if (!address) return {};
33
- const balancePromises = xTokens.map(async (xToken) => {
34
- const balance = await this.getBalance(address, xToken);
35
- return { address: xToken.address, balance };
36
- });
37
- const balances = await Promise.all(balancePromises);
38
- return balances.reduce((acc, { address: address2, balance }) => {
39
- acc[address2] = balance;
40
- return acc;
41
- }, {});
42
- }
43
- /**
44
- * Gets all available connectors for this chain
45
- */
46
- getXConnectors() {
47
- return this.xConnectors;
48
- }
49
- /**
50
- * Sets the available connectors for this chain
51
- */
52
- setXConnectors(xConnectors) {
53
- this.xConnectors = xConnectors;
54
- }
55
- /**
56
- * Gets a specific connector by its ID
57
- * @param xConnectorId The connector ID to look up
58
- * @returns The matching connector or undefined if not found
59
- */
60
- getXConnectorById(xConnectorId) {
61
- return this.getXConnectors().find((xConnector) => xConnector.id === xConnectorId);
62
- }
63
- };
64
-
65
- // src/utils/index.ts
66
- var isNativeToken = (xToken) => {
67
- const nativeAddresses = [
68
- "cx0000000000000000000000000000000000000000",
69
- "0x0000000000000000000000000000000000000000",
70
- "inj",
71
- "0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",
72
- "hx0000000000000000000000000000000000000000",
73
- "11111111111111111111111111111111",
74
- // solana
75
- "CAS3J7GYLGXMF6TDJBBYYSE3HQ6BBSMLNUQ34T6TZMYMW2EVH34XOWMA",
76
- // stellar
77
- "ST000000000000000000002AMW42H.nativetoken",
78
- // stacks
79
- "0:0"
80
- // bitcoin
81
- ];
82
- return nativeAddresses.includes(xToken.address);
83
- };
84
- var SolanaXService = class _SolanaXService extends XService {
85
- static instance;
86
- connection;
87
- wallet;
88
- constructor() {
89
- super("SOLANA");
90
- }
91
- static getInstance() {
92
- if (!_SolanaXService.instance) {
93
- _SolanaXService.instance = new _SolanaXService();
94
- }
95
- return _SolanaXService.instance;
96
- }
97
- async getBalance(address, xToken) {
98
- if (!address) return BigInt(0);
99
- const connection = this.connection;
100
- if (!connection) {
101
- return BigInt(0);
102
- }
103
- try {
104
- if (isNativeToken(xToken)) {
105
- const newBalance = await connection.getBalance(new web3_js.PublicKey(address));
106
- return BigInt(newBalance);
107
- }
108
- const tokenAccountPubkey = splToken.getAssociatedTokenAddressSync(new web3_js.PublicKey(xToken.address), new web3_js.PublicKey(address));
109
- const tokenAccount = await splToken.getAccount(connection, tokenAccountPubkey);
110
- return BigInt(tokenAccount.amount);
111
- } catch {
112
- return BigInt(0);
113
- }
114
- }
115
- };
116
-
117
- // src/core/XConnector.ts
118
- var XConnector = class {
119
- /** The blockchain type this connector supports */
120
- xChainType;
121
- /** Display name of the wallet provider */
122
- name;
123
- /** Unique identifier for the connector */
124
- _id;
125
- /** Optional icon URL for the wallet provider */
126
- _icon;
127
- constructor(xChainType, name, id) {
128
- this.xChainType = xChainType;
129
- this.name = name;
130
- this._id = id;
131
- }
132
- /** Get the unique identifier for this connector */
133
- get id() {
134
- return this._id;
135
- }
136
- /** Get the optional icon URL for this wallet provider */
137
- get icon() {
138
- return this._icon;
139
- }
140
- /**
141
- * True when the wallet extension backing this connector is installed.
142
- * Default: true (for provider-managed chains where connector presence already
143
- * implies install — EVM via EIP-6963, Solana/Sui via adapter discovery).
144
- * Subclasses backed by extension injection (Bitcoin, ICON, Stacks) override
145
- * this with a window probe.
146
- */
147
- get isInstalled() {
148
- return true;
149
- }
150
- /** URL to install the wallet extension when missing. Subclasses override. */
151
- get installUrl() {
152
- return void 0;
153
- }
154
- };
155
-
156
- // src/xchains/solana/SolanaXConnector.ts
157
- var SolanaXConnector = class extends XConnector {
158
- wallet;
159
- constructor(wallet) {
160
- super("SOLANA", wallet?.adapter.name, wallet?.adapter.name);
161
- this.wallet = wallet;
162
- }
163
- getXService() {
164
- return SolanaXService.getInstance();
165
- }
166
- async connect() {
167
- return;
168
- }
169
- async disconnect() {
170
- }
171
- get icon() {
172
- return this.wallet?.adapter.icon;
173
- }
174
- get isInstalled() {
175
- const state = this.wallet?.readyState;
176
- return state === "Installed" || state === "Loadable";
177
- }
178
- get installUrl() {
179
- return this.wallet?.adapter.url;
180
- }
181
- };
182
-
183
- exports.SolanaXConnector = SolanaXConnector;
184
- exports.SolanaXService = SolanaXService;
185
- //# sourceMappingURL=index.cjs.map
186
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/core/XService.ts","../../../src/utils/index.ts","../../../src/xchains/solana/SolanaXService.ts","../../../src/core/XConnector.ts","../../../src/xchains/solana/SolanaXConnector.ts"],"names":["address","PublicKey","getAssociatedTokenAddressSync","getAccount"],"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 { baseChainInfo, type SpokeChainKey, type XToken } from '@sodax/types';\n\nexport { sortConnectors, type SortConnectorsOptions } from './sortConnectors.js';\nexport {\n getEntryDefaults,\n getRpcUrl,\n resolveEvmDefaults,\n type WalletDefaultsByKey,\n} from './walletRpcConfig.js';\n\nexport const isNativeToken = (xToken: XToken): boolean => {\n const nativeAddresses = [\n 'cx0000000000000000000000000000000000000000',\n '0x0000000000000000000000000000000000000000',\n 'inj',\n '0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI',\n 'hx0000000000000000000000000000000000000000',\n '11111111111111111111111111111111', // solana\n 'CAS3J7GYLGXMF6TDJBBYYSE3HQ6BBSMLNUQ34T6TZMYMW2EVH34XOWMA', // stellar\n 'ST000000000000000000002AMW42H.nativetoken', // stacks\n '0:0', // bitcoin\n ];\n\n return nativeAddresses.includes(xToken.address);\n};\n\nexport const getWagmiChainId = (xChainId: SpokeChainKey): number => {\n const chainId = baseChainInfo[xChainId].chainId;\n if (typeof chainId !== 'number') {\n throw new Error(`[wallet-sdk-react] getWagmiChainId: expected numeric chainId, got ${typeof chainId}`);\n }\n return chainId;\n};\n","import { XService } from '@/core/XService.js';\nimport { isNativeToken } from '@/utils/index.js';\nimport type { XToken } from '@sodax/types';\nimport { type Connection, PublicKey } from '@solana/web3.js';\nimport { getAccount, getAssociatedTokenAddressSync } from '@solana/spl-token';\nimport type { WalletContextState } from '@solana/wallet-adapter-react';\n\nexport class SolanaXService extends XService {\n private static instance: SolanaXService;\n\n public connection: Connection | undefined;\n public wallet: WalletContextState | undefined;\n\n private constructor() {\n super('SOLANA');\n }\n\n public static getInstance(): SolanaXService {\n if (!SolanaXService.instance) {\n SolanaXService.instance = new SolanaXService();\n }\n return SolanaXService.instance;\n }\n\n override async getBalance(address: string | undefined, xToken: XToken): Promise<bigint> {\n if (!address) return BigInt(0);\n\n const connection = this.connection;\n if (!connection) {\n return BigInt(0);\n }\n\n try {\n if (isNativeToken(xToken)) {\n const newBalance = await connection.getBalance(new PublicKey(address));\n return BigInt(newBalance);\n }\n\n const tokenAccountPubkey = getAssociatedTokenAddressSync(new PublicKey(xToken.address), new PublicKey(address));\n const tokenAccount = await getAccount(connection, tokenAccountPubkey);\n return BigInt(tokenAccount.amount);\n } catch {\n return BigInt(0);\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';\n// Wallet is the type from useWallet().wallets — each entry has .adapter (name, icon, url) and .readyState.\nimport type { Wallet } from '@solana/wallet-adapter-react';\n\nimport { XConnector } from '@/core/index.js';\nimport { SolanaXService } from './SolanaXService.js';\n\nexport class SolanaXConnector extends XConnector {\n wallet: Wallet;\n constructor(wallet: Wallet) {\n super('SOLANA', wallet?.adapter.name, wallet?.adapter.name);\n this.wallet = wallet;\n }\n\n getXService(): SolanaXService {\n return SolanaXService.getInstance();\n }\n\n async connect(): Promise<XAccount | undefined> {\n return;\n }\n\n async disconnect(): Promise<void> {}\n\n public override get icon(): string {\n return this.wallet?.adapter.icon;\n }\n\n public override get isInstalled(): boolean {\n // WalletReadyState string values from @solana/wallet-adapter-base.\n // Imported as string literals to avoid adding -base as an explicit dep.\n // - 'Installed' — browser extension is injected (Phantom, Solflare, …).\n // - 'Loadable' — adapter can bootstrap the wallet on demand (e.g. mobile\n // deep-link adapters). The wallet isn't physically\n // present, but `connect()` will load it on first use,\n // so treat it as installed — otherwise the modal would\n // show a spurious \"Install\" CTA for a wallet the user\n // can actually connect to.\n const state = this.wallet?.readyState as string | undefined;\n return state === 'Installed' || state === 'Loadable';\n }\n\n public override get installUrl(): string | undefined {\n return this.wallet?.adapter.url;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.mjs"}
@@ -1,240 +0,0 @@
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
@@ -1 +0,0 @@
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"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.mjs"}