@solana/connector 0.1.10 → 0.2.0

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 (55) hide show
  1. package/README.md +344 -88
  2. package/dist/{chunk-MN7XNCYI.js → chunk-BJAVJQLK.js} +6 -6
  3. package/dist/{chunk-MN7XNCYI.js.map → chunk-BJAVJQLK.js.map} +1 -1
  4. package/dist/{chunk-6AJJJG5B.js → chunk-BZ2VBJCZ.js} +618 -415
  5. package/dist/chunk-BZ2VBJCZ.js.map +1 -0
  6. package/dist/{chunk-ATYK5OKR.js → chunk-EM4KNOKG.js} +614 -194
  7. package/dist/chunk-EM4KNOKG.js.map +1 -0
  8. package/dist/{chunk-4JT24DIX.js → chunk-HN5AJF7F.js} +61 -20
  9. package/dist/chunk-HN5AJF7F.js.map +1 -0
  10. package/dist/{chunk-FVA4TUI4.mjs → chunk-HPQ5T32K.mjs} +4 -4
  11. package/dist/{chunk-FVA4TUI4.mjs.map → chunk-HPQ5T32K.mjs.map} +1 -1
  12. package/dist/{chunk-QOIQBWMP.mjs → chunk-IDTUFDNB.mjs} +531 -339
  13. package/dist/chunk-IDTUFDNB.mjs.map +1 -0
  14. package/dist/{chunk-WGZYKDXF.mjs → chunk-RTXUS5KG.mjs} +529 -115
  15. package/dist/chunk-RTXUS5KG.mjs.map +1 -0
  16. package/dist/{chunk-64LV76OK.js → chunk-SITQ4JWM.js} +23 -2
  17. package/dist/chunk-SITQ4JWM.js.map +1 -0
  18. package/dist/{chunk-7XHVZW2L.mjs → chunk-UCISIAOG.mjs} +60 -19
  19. package/dist/chunk-UCISIAOG.mjs.map +1 -0
  20. package/dist/{chunk-DKCZA2QI.mjs → chunk-ZZTY3O4N.mjs} +21 -3
  21. package/dist/chunk-ZZTY3O4N.mjs.map +1 -0
  22. package/dist/compat.d.mts +1 -1
  23. package/dist/compat.d.ts +1 -1
  24. package/dist/compat.js +2 -2
  25. package/dist/compat.mjs +1 -1
  26. package/dist/headless.d.mts +25 -7
  27. package/dist/headless.d.ts +25 -7
  28. package/dist/headless.js +196 -132
  29. package/dist/headless.mjs +4 -4
  30. package/dist/index.d.mts +4 -4
  31. package/dist/index.d.ts +4 -4
  32. package/dist/index.js +255 -175
  33. package/dist/index.mjs +5 -5
  34. package/dist/react.d.mts +230 -8
  35. package/dist/react.d.ts +230 -8
  36. package/dist/react.js +78 -42
  37. package/dist/react.mjs +2 -2
  38. package/dist/{standard-shim-BTUm7cur.d.mts → standard-shim-CGB88PPO.d.mts} +396 -54
  39. package/dist/{standard-shim-LsQ97i9T.d.ts → standard-shim-tmnQelaJ.d.ts} +396 -54
  40. package/dist/{transaction-signer-T-KVQFi8.d.ts → transaction-signer-7NaYmP5w.d.mts} +1 -0
  41. package/dist/{transaction-signer-T-KVQFi8.d.mts → transaction-signer-7NaYmP5w.d.ts} +1 -0
  42. package/dist/{walletconnect-D4JN6H2O.js → walletconnect-447EY3OJ.js} +8 -8
  43. package/dist/{walletconnect-D4JN6H2O.js.map → walletconnect-447EY3OJ.js.map} +1 -1
  44. package/dist/walletconnect-U455PO4I.mjs +3 -0
  45. package/dist/{walletconnect-I3PZUBTA.mjs.map → walletconnect-U455PO4I.mjs.map} +1 -1
  46. package/package.json +1 -1
  47. package/dist/chunk-4JT24DIX.js.map +0 -1
  48. package/dist/chunk-64LV76OK.js.map +0 -1
  49. package/dist/chunk-6AJJJG5B.js.map +0 -1
  50. package/dist/chunk-7XHVZW2L.mjs.map +0 -1
  51. package/dist/chunk-ATYK5OKR.js.map +0 -1
  52. package/dist/chunk-DKCZA2QI.mjs.map +0 -1
  53. package/dist/chunk-QOIQBWMP.mjs.map +0 -1
  54. package/dist/chunk-WGZYKDXF.mjs.map +0 -1
  55. package/dist/walletconnect-I3PZUBTA.mjs +0 -3
@@ -1,9 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var chunk4KD6HQQG_js = require('./chunk-4KD6HQQG.js');
4
- var chunk64LV76OK_js = require('./chunk-64LV76OK.js');
5
- var react = require('react');
6
- var jsxRuntime = require('react/jsx-runtime');
4
+ var chunkSITQ4JWM_js = require('./chunk-SITQ4JWM.js');
7
5
  var webcryptoEd25519Polyfill = require('@solana/webcrypto-ed25519-polyfill');
8
6
  var core = require('@wallet-ui/core');
9
7
  var addresses = require('@solana/addresses');
@@ -11,6 +9,49 @@ var v4 = require('zod/v4');
11
9
  var codecs = require('@solana/codecs');
12
10
  var transactions = require('@solana/transactions');
13
11
 
12
+ // src/types/session.ts
13
+ function createConnectorId(walletName) {
14
+ return `wallet-standard:${walletName.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "")}`;
15
+ }
16
+ function isWalletConnectorId(value) {
17
+ return typeof value == "string" && (value.startsWith("wallet-standard:") || value === "walletconnect" || value.startsWith("mwa:"));
18
+ }
19
+ function getWalletNameFromConnectorId(connectorId) {
20
+ return connectorId === "walletconnect" ? "WalletConnect" : connectorId.startsWith("mwa:") ? connectorId.slice(4) : connectorId.startsWith("wallet-standard:") ? connectorId.slice(16).split("-").map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ") : connectorId;
21
+ }
22
+ function isDisconnected(status) {
23
+ return status.status === "disconnected";
24
+ }
25
+ function isConnecting(status) {
26
+ return status.status === "connecting";
27
+ }
28
+ function isConnected(status) {
29
+ return status.status === "connected";
30
+ }
31
+ function isStatusError(status) {
32
+ return status.status === "error";
33
+ }
34
+ var isWalletStatusError = isStatusError, INITIAL_WALLET_STATUS = {
35
+ status: "disconnected"
36
+ };
37
+ function toLegacyWalletState(wallet) {
38
+ switch (wallet.status) {
39
+ case "disconnected":
40
+ return { connected: false, connecting: false, selectedAccount: null, accounts: [] };
41
+ case "connecting":
42
+ return { connected: false, connecting: true, selectedAccount: null, accounts: [] };
43
+ case "connected":
44
+ return {
45
+ connected: true,
46
+ connecting: false,
47
+ selectedAccount: wallet.session.selectedAccount.address,
48
+ accounts: wallet.session.accounts.map((a) => ({ address: a.address, label: a.label }))
49
+ };
50
+ case "error":
51
+ return { connected: false, connecting: false, selectedAccount: null, accounts: [] };
52
+ }
53
+ }
54
+
14
55
  // src/lib/wallet/standard-shim.ts
15
56
  var registry = null, registryInitPromise = null, registryInitResolve = null, ready = new Promise((resolve, reject) => {
16
57
  if (typeof window > "u") {
@@ -99,7 +140,7 @@ function toClusterId(network) {
99
140
  function getDefaultRpcUrl(network) {
100
141
  let normalized = normalizeNetwork(network);
101
142
  try {
102
- return chunk64LV76OK_js.getPublicSolanaRpcUrl(normalized);
143
+ return chunkSITQ4JWM_js.getPublicSolanaRpcUrl(normalized);
103
144
  } catch {
104
145
  return PUBLIC_RPC_ENDPOINTS[normalized] ?? PUBLIC_RPC_ENDPOINTS.localnet;
105
146
  }
@@ -154,14 +195,14 @@ function getClusterExplorerUrl(cluster, path) {
154
195
  }
155
196
  function getTransactionUrl(signature, cluster) {
156
197
  let clusterType = getClusterType(cluster), explorerCluster = clusterType === "custom" || clusterType === "localnet" ? "devnet" : clusterType;
157
- return chunk64LV76OK_js.getExplorerLink({
198
+ return chunkSITQ4JWM_js.getExplorerLink({
158
199
  transaction: signature,
159
200
  cluster: explorerCluster === "mainnet" ? "mainnet" : explorerCluster
160
201
  });
161
202
  }
162
203
  function getAddressUrl(address, cluster) {
163
204
  let clusterType = getClusterType(cluster), explorerCluster = clusterType === "custom" || clusterType === "localnet" ? "devnet" : clusterType;
164
- return chunk64LV76OK_js.getExplorerLink({
205
+ return chunkSITQ4JWM_js.getExplorerLink({
165
206
  address,
166
207
  cluster: explorerCluster === "mainnet" ? "mainnet" : explorerCluster
167
208
  });
@@ -224,9 +265,9 @@ var POLL_INTERVALS_MS = [1e3, 2e3, 3e3, 5e3, 5e3], DEFAULT_MAX_RETRIES = 3, DEFA
224
265
  // src/lib/core/state-manager.ts
225
266
  var StateManager = class {
226
267
  constructor(initialState) {
227
- chunk64LV76OK_js.__publicField(this, "state");
228
- chunk64LV76OK_js.__publicField(this, "listeners", /* @__PURE__ */ new Set());
229
- chunk64LV76OK_js.__publicField(this, "notifyTimeout");
268
+ chunkSITQ4JWM_js.__publicField(this, "state");
269
+ chunkSITQ4JWM_js.__publicField(this, "listeners", /* @__PURE__ */ new Set());
270
+ chunkSITQ4JWM_js.__publicField(this, "notifyTimeout");
230
271
  this.state = initialState;
231
272
  }
232
273
  /**
@@ -285,10 +326,10 @@ var StateManager = class {
285
326
  };
286
327
 
287
328
  // src/lib/core/event-emitter.ts
288
- var logger = chunk64LV76OK_js.createLogger("EventEmitter"), EventEmitter = class {
329
+ var logger = chunkSITQ4JWM_js.createLogger("EventEmitter"), EventEmitter = class {
289
330
  constructor(debug = false) {
290
- chunk64LV76OK_js.__publicField(this, "listeners", /* @__PURE__ */ new Set());
291
- chunk64LV76OK_js.__publicField(this, "debug");
331
+ chunkSITQ4JWM_js.__publicField(this, "listeners", /* @__PURE__ */ new Set());
332
+ chunkSITQ4JWM_js.__publicField(this, "debug");
292
333
  this.debug = debug;
293
334
  }
294
335
  /**
@@ -344,12 +385,12 @@ var logger = chunk64LV76OK_js.createLogger("EventEmitter"), EventEmitter = class
344
385
  // src/lib/core/debug-metrics.ts
345
386
  var DebugMetrics = class {
346
387
  constructor() {
347
- chunk64LV76OK_js.__publicField(this, "stateUpdates", 0);
348
- chunk64LV76OK_js.__publicField(this, "noopUpdates", 0);
349
- chunk64LV76OK_js.__publicField(this, "updateTimes", []);
350
- chunk64LV76OK_js.__publicField(this, "lastUpdateTime", 0);
351
- chunk64LV76OK_js.__publicField(this, "eventListenerCount", 0);
352
- chunk64LV76OK_js.__publicField(this, "subscriptionCount", 0);
388
+ chunkSITQ4JWM_js.__publicField(this, "stateUpdates", 0);
389
+ chunkSITQ4JWM_js.__publicField(this, "noopUpdates", 0);
390
+ chunkSITQ4JWM_js.__publicField(this, "updateTimes", []);
391
+ chunkSITQ4JWM_js.__publicField(this, "lastUpdateTime", 0);
392
+ chunkSITQ4JWM_js.__publicField(this, "eventListenerCount", 0);
393
+ chunkSITQ4JWM_js.__publicField(this, "subscriptionCount", 0);
353
394
  }
354
395
  /**
355
396
  * Record a state update attempt
@@ -389,11 +430,11 @@ var DebugMetrics = class {
389
430
  // src/lib/core/base-collaborator.ts
390
431
  var BaseCollaborator = class {
391
432
  constructor(config, loggerPrefix) {
392
- chunk64LV76OK_js.__publicField(this, "stateManager");
393
- chunk64LV76OK_js.__publicField(this, "eventEmitter");
394
- chunk64LV76OK_js.__publicField(this, "debug");
395
- chunk64LV76OK_js.__publicField(this, "logger");
396
- this.stateManager = config.stateManager, this.eventEmitter = config.eventEmitter, this.debug = config.debug ?? false, this.logger = chunk64LV76OK_js.createLogger(loggerPrefix);
433
+ chunkSITQ4JWM_js.__publicField(this, "stateManager");
434
+ chunkSITQ4JWM_js.__publicField(this, "eventEmitter");
435
+ chunkSITQ4JWM_js.__publicField(this, "debug");
436
+ chunkSITQ4JWM_js.__publicField(this, "logger");
437
+ this.stateManager = config.stateManager, this.eventEmitter = config.eventEmitter, this.debug = config.debug ?? false, this.logger = chunkSITQ4JWM_js.createLogger(loggerPrefix);
397
438
  }
398
439
  /**
399
440
  * Log debug message if debug mode is enabled
@@ -416,7 +457,7 @@ var BaseCollaborator = class {
416
457
  };
417
458
 
418
459
  // src/lib/wallet/authenticity-verifier.ts
419
- var logger2 = chunk64LV76OK_js.createLogger("WalletAuthenticity"), WalletAuthenticityVerifier = class {
460
+ var logger2 = chunkSITQ4JWM_js.createLogger("WalletAuthenticity"), WalletAuthenticityVerifier = class {
420
461
  /**
421
462
  * Verify a wallet's authenticity using dynamic heuristics
422
463
  *
@@ -626,7 +667,7 @@ var logger2 = chunk64LV76OK_js.createLogger("WalletAuthenticity"), WalletAuthent
626
667
  };
627
668
 
628
669
  // src/lib/wallet/wallet-icon-overrides.ts
629
- var PHANTOM_ICON = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHJ4PSIxMiIgZmlsbD0iIzk3ODZFNCIvPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF80NF82MTApIj48cGF0aCBkPSJNNS43NjU1IDE1Ljc5N0M1Ljc2NTUgMTcuMjIyIDYuNDk4NzkgMTcuNTUgNy4yNjE0MSAxNy41NUM4Ljg3NDYzIDE3LjU1IDEwLjA4NyAxNi4wODQxIDEwLjgxMDUgMTQuOTI1NkMxMC43MjI1IDE1LjE4MTkgMTAuNjczNiAxNS40MzgyIDEwLjY3MzYgMTUuNjg0MkMxMC42NzM2IDE2LjM2MDkgMTEuMDQ1MiAxNi44NDI3IDExLjc3ODUgMTYuODQyN0MxMi43ODU1IDE2Ljg0MjcgMTMuODYxIDE1LjkyIDE0LjQxODMgMTQuOTI1NkMxNC4zNzkyIDE1LjA2OTIgMTQuMzU5NiAxNS4yMDI0IDE0LjM1OTYgMTUuMzI1NEMxNC4zNTk2IDE1Ljc5NyAxNC42MTM4IDE2LjA5NDMgMTUuMTMyIDE2LjA5NDNDMTYuNzY0OCAxNi4wOTQzIDE4LjQwNzQgMTMuMDcwMSAxOC40MDc0IDEwLjQyNTJDMTguNDA3NCA4LjM2NDU5IDE3LjQxMDEgNi41NTAwNSAxNC45MDcxIDYuNTUwMDVDMTAuNTA3NCA2LjU1MDA1IDUuNzY1NSAxMi4xNjc5IDUuNzY1NSAxNS43OTdaTTEzLjM5MTcgMTAuMTk5NkMxMy4zOTE3IDkuNjg3MDUgMTMuNjY1NCA5LjMyODI1IDE0LjA2NjMgOS4zMjgyNUMxNC40NTc0IDkuMzI4MjUgMTQuNzMxMiA5LjY4NzA1IDE0LjczMTIgMTAuMTk5NkMxNC43MzEyIDEwLjcxMjIgMTQuNDU3NCAxMS4wODEzIDE0LjA2NjMgMTEuMDgxM0MxMy42NjU0IDExLjA4MTMgMTMuMzkxNyAxMC43MTIyIDEzLjM5MTcgMTAuMTk5NlpNMTUuNDg0IDEwLjE5OTZDMTUuNDg0IDkuNjg3MDUgMTUuNzU3OCA5LjMyODI1IDE2LjE1ODYgOS4zMjgyNUMxNi41NDk3IDkuMzI4MjUgMTYuODIzNSA5LjY4NzA1IDE2LjgyMzUgMTAuMTk5NkMxNi44MjM1IDEwLjcxMjIgMTYuNTQ5NyAxMS4wODEzIDE2LjE1ODYgMTEuMDgxM0MxNS43NTc4IDExLjA4MTMgMTUuNDg0IDEwLjcxMjIgMTUuNDg0IDEwLjE5OTZaIiBmaWxsPSIjRkVGREY4Ii8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDBfNDRfNjEwIj48cmVjdCB3aWR0aD0iMTIuNzYiIGhlaWdodD0iMTEiIGZpbGw9IndoaXRlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1LjcwNjQyIDYuNTQ5OTMpIi8+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+", SOLFLARE_ICON = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHJ4PSIxMiIgZmlsbD0iI0ZGRUY0NiIvPjxwYXRoIGQ9Ik0xMi4xMjg1IDEyLjUyNjZMMTIuOTU1NiAxMS43Mjc2TDE0LjQ5NzYgMTIuMjMyM0MxNS41MDcgMTIuNTY4NyAxNi4wMTE3IDEzLjE4NTUgMTYuMDExNyAxNC4wNTQ3QzE2LjAxMTcgMTQuNzEzNiAxNS43NTkzIDE1LjE0ODIgMTUuMjU0NyAxNS43MDg5TDE1LjEwMDUgMTUuODc3MUwxNS4xNTY1IDE1LjQ4NDZDMTUuMzgwOCAxNC4wNTQ3IDE0Ljk2MDMgMTMuNDM3OSAxMy41NzI0IDEyLjk4OTJMMTIuMTI4NSAxMi41MjY2Wk0xMC4wNTM3IDcuNjM0MTRMMTQuMjU5MyA5LjAzNkwxMy4zNDgxIDkuOTA1MTdMMTEuMTYxMiA5LjE3NjE5QzEwLjQwNDIgOC45MjM4NSAxMC4xNTE4IDguNTE3MzEgMTAuMDUzNyA3LjY2MjE3VjcuNjM0MTRaTTkuODAxMzUgMTQuNzU1NkwxMC43NTQ2IDEzLjg0NDRMMTIuNTQ5MSAxNC40MzMyQzEzLjQ4ODMgMTQuNzQxNiAxMy44MTA3IDE1LjE0ODIgMTMuNzEyNiAxNi4xNzE1TDkuODAxMzUgMTQuNzU1NlpNOC41OTU3NyAxMC42OTAyQzguNTk1NzcgMTAuNDIzOSA4LjczNTk1IDEwLjE3MTUgOC45NzQyNyA5Ljk2MTIyQzkuMjI2NjEgMTAuMzI1NyA5LjY2MTE4IDEwLjY0ODEgMTAuMzQ4MSAxMC44NzI1TDExLjgzNDEgMTEuMzYzMUwxMS4wMDcgMTIuMTYyMkw5LjU0OTAzIDExLjY4NTVDOC44NzYxNCAxMS40NjEyIDguNTk1NzcgMTEuMTI0OCA4LjU5NTc3IDEwLjY5MDJaTTEyLjk5NzYgMTguMDVDMTYuMDgxNyAxNi4wMDMzIDE3LjczNTkgMTQuNjE1NCAxNy43MzU5IDEyLjkwNTJDMTcuNzM1OSAxMS43Njk2IDE3LjA2MyAxMS4xMzg4IDE1LjU3NzEgMTAuNjQ4MUwxNC40NTU2IDEwLjI2OTZMMTcuNTI1NyA3LjMyNTcyTDE2LjkwODggNi42NjY4NEwxNS45OTc2IDcuNDY1OUwxMS42OTM5IDYuMDUwMDJDMTAuMzYyMSA2LjQ4NDYgOC42Nzk4OCA3Ljc2MDMgOC42Nzk4OCA5LjAzNkM4LjY3OTg4IDkuMTc2MTggOC42OTM5IDkuMzE2MzcgOC43MzU5NSA5LjQ3MDU5QzcuNjI4NDcgMTAuMTAxNCA3LjE3OTg4IDEwLjY5MDIgNy4xNzk4OCAxMS40MTkxQzcuMTc5ODggMTIuMTA2MSA3LjU0NDM2IDEyLjc5MyA4LjcwNzkyIDEzLjE3MTVMOS42MzMxNCAxMy40Nzk5TDYuNDM2ODkgMTYuNTVMNy4wNTM3MSAxNy4yMDg5TDguMDQ5MDQgMTYuMjk3N0wxMi45OTc2IDE4LjA1WiIgZmlsbD0iIzAyMDUwQSIvPjwvc3ZnPg==", BACKPACK_ICON = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHJ4PSIxMiIgZmlsbD0iI0UzM0UzRiIvPjxwYXRoIGQ9Ik0xNS41MTg2IDEzLjkyNzJDMTUuOTgxMSAxMy45MjcyIDE2LjIxMjcgMTMuOTI3MSAxNi4zNTY0IDE0LjA3MDhDMTYuNTAwMiAxNC4yMTQ1IDE2LjUgMTQuNDQ2MiAxNi41IDE0LjkwODdWMTUuNTY0QzE2LjUgMTYuNDg5MyAxNi41MDAyIDE2Ljk1MjIgMTYuMjEyOSAxNy4yMzk3QzE1LjkyNTMgMTcuNTI3MyAxNS40NjE4IDE3LjUyNzggMTQuNTM2MSAxNy41Mjc4SDkuNDYzODdDOC41Mzg0MiAxNy41Mjc4IDguMDc1NjcgMTcuNTI3MSA3Ljc4ODA5IDE3LjIzOTdDNy41MDA1NCAxNi45NTIyIDcuNSAxNi40ODk0IDcuNSAxNS41NjRWMTQuOTA4N0M3LjUgMTQuNDQ2MiA3LjQ5OTgyIDE0LjIxNDUgNy42NDM1NSAxNC4wNzA4QzcuNzg3MyAxMy45MjcxIDguMDE4OTEgMTMuOTI3MiA4LjQ4MTQ1IDEzLjkyNzJIMTUuNTE4NlpNMTIgNi4zNTg4OUMxNi41NjUzIDYuMzU4ODkgMTYuNSA5LjQwMjM4IDE2LjUgMTAuODU4OVYxMi40OTU2QzE2LjQ5OTkgMTIuNzY2NyAxNi4yNzk5IDEyLjk4NjggMTYuMDA4OCAxMi45ODY4SDcuOTkxMjFDNy43MjAxMiAxMi45ODY4IDcuNTAwMDYgMTIuNzY2NyA3LjUgMTIuNDk1NkM3LjUgMTIuNDk1NiA3LjUgMTIuMzE1MyA3LjUgMTAuODU4OUM3LjQ5OTk5IDkuNDAyMzkgNy40MzQ3OCA2LjM1ODkzIDEyIDYuMzU4ODlaTTEyIDcuNTE5MDRDMTEuMjMxOSA3LjUxOTEgMTAuNjA5NCA4LjE0MTU1IDEwLjYwOTQgOC45MDk2N0MxMC42MDk0IDkuNjc3NzggMTEuMjMxOSAxMC4zMDAyIDEyIDEwLjMwMDNDMTIuNzY4MiAxMC4zMDAzIDEzLjM5MDYgOS42Nzc4MiAxMy4zOTA2IDguOTA5NjdDMTMuMzkwNiA4LjE0MTUxIDEyLjc2ODIgNy41MTkwNCAxMiA3LjUxOTA0Wk0xMS45OTkgNC40NzIxN0MxMi45ODQxIDQuNDcyMjIgMTMuODQ2MiA0LjgxNjczIDE0LjA3NDIgNS4zNzc0NEMxNC4xMDg1IDUuNDczODcgMTQuMTI1OCA1LjUyMjIyIDE0LjA5NTcgNS41NTgxMUMxNC4wNjUyIDUuNTk0MDIgMTQuMDA1OCA1LjU4MzQyIDEzLjg4NzcgNS41NjIwMUMxMy41ODIyIDUuNTA2NjUgMTMuMTQ5MyA1LjQ2ODc3IDEyLjc2ODYgNS40NTc1MkMxMi41MjU4IDUuNDQ0NDggMTIuMjY5NSA1LjQzNzk5IDEyIDUuNDM3OTlDMTEuNzMwNSA1LjQzNzk5IDExLjQ3NDIgNS40NDQ0OCAxMS4yMzE0IDUuNDU3NTJDMTAuODQ5IDUuNDY4NzcgMTAuNDE0OSA1LjUwNjU4IDEwLjEwODQgNS41NjAwNkM5Ljk5MzM1IDUuNTgwMTMgOS45MzU2NSA1LjU5MDQ3IDkuOTA1MjcgNS41NTUxOEM5Ljg3NDk3IDUuNTE5MzUgOS44OTEyOCA1LjQ3MTQ0IDkuOTI0OCA1LjM3NjQ2QzEwLjE1MSA0LjgxNzQ4IDExLjAxNDIgNC40NzIxNyAxMS45OTkgNC40NzIxN1oiIGZpbGw9IndoaXRlIi8+PC9zdmc+", WALLET_ICON_OVERRIDES = {
670
+ var PHANTOM_ICON = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBmaWxsPSIjOTc4NkU0Ii8+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF80NF82MTApIj4KPHBhdGggZD0iTTUuNzY1NSAxNS43OTdDNS43NjU1IDE3LjIyMiA2LjQ5ODc5IDE3LjU1IDcuMjYxNDEgMTcuNTVDOC44NzQ2MyAxNy41NSAxMC4wODcgMTYuMDg0MSAxMC44MTA1IDE0LjkyNTZDMTAuNzIyNSAxNS4xODE5IDEwLjY3MzYgMTUuNDM4MiAxMC42NzM2IDE1LjY4NDJDMTAuNjczNiAxNi4zNjA5IDExLjA0NTIgMTYuODQyNyAxMS43Nzg1IDE2Ljg0MjdDMTIuNzg1NSAxNi44NDI3IDEzLjg2MSAxNS45MiAxNC40MTgzIDE0LjkyNTZDMTQuMzc5MiAxNS4wNjkyIDE0LjM1OTYgMTUuMjAyNCAxNC4zNTk2IDE1LjMyNTRDMTQuMzU5NiAxNS43OTcgMTQuNjEzOCAxNi4wOTQzIDE1LjEzMiAxNi4wOTQzQzE2Ljc2NDggMTYuMDk0MyAxOC40MDc0IDEzLjA3MDEgMTguNDA3NCAxMC40MjUyQzE4LjQwNzQgOC4zNjQ1OSAxNy40MTAxIDYuNTUwMDUgMTQuOTA3MSA2LjU1MDA1QzEwLjUwNzQgNi41NTAwNSA1Ljc2NTUgMTIuMTY3OSA1Ljc2NTUgMTUuNzk3Wk0xMy4zOTE3IDEwLjE5OTZDMTMuMzkxNyA5LjY4NzA1IDEzLjY2NTQgOS4zMjgyNSAxNC4wNjYzIDkuMzI4MjVDMTQuNDU3NCA5LjMyODI1IDE0LjczMTIgOS42ODcwNSAxNC43MzEyIDEwLjE5OTZDMTQuNzMxMiAxMC43MTIyIDE0LjQ1NzQgMTEuMDgxMyAxNC4wNjYzIDExLjA4MTNDMTMuNjY1NCAxMS4wODEzIDEzLjM5MTcgMTAuNzEyMiAxMy4zOTE3IDEwLjE5OTZaTTE1LjQ4NCAxMC4xOTk2QzE1LjQ4NCA5LjY4NzA1IDE1Ljc1NzggOS4zMjgyNSAxNi4xNTg2IDkuMzI4MjVDMTYuNTQ5NyA5LjMyODI1IDE2LjgyMzUgOS42ODcwNSAxNi44MjM1IDEwLjE5OTZDMTYuODIzNSAxMC43MTIyIDE2LjU0OTcgMTEuMDgxMyAxNi4xNTg2IDExLjA4MTNDMTUuNzU3OCAxMS4wODEzIDE1LjQ4NCAxMC43MTIyIDE1LjQ4NCAxMC4xOTk2WiIgZmlsbD0iI0ZFRkRGOCIvPgo8L2c+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzQ0XzYxMCI+CjxyZWN0IHdpZHRoPSIxMi43NiIgaGVpZ2h0PSIxMSIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUuNzA2NDIgNi41NDk5MykiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4=", SOLFLARE_ICON = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBmaWxsPSIjRkZFRjQ2Ii8+CjxwYXRoIGQ9Ik0xMi4xMjg1IDEyLjUyNjZMMTIuOTU1NiAxMS43Mjc2TDE0LjQ5NzYgMTIuMjMyM0MxNS41MDcgMTIuNTY4NyAxNi4wMTE3IDEzLjE4NTUgMTYuMDExNyAxNC4wNTQ3QzE2LjAxMTcgMTQuNzEzNiAxNS43NTkzIDE1LjE0ODIgMTUuMjU0NyAxNS43MDg5TDE1LjEwMDUgMTUuODc3MUwxNS4xNTY1IDE1LjQ4NDZDMTUuMzgwOCAxNC4wNTQ3IDE0Ljk2MDMgMTMuNDM3OSAxMy41NzI0IDEyLjk4OTJMMTIuMTI4NSAxMi41MjY2Wk0xMC4wNTM3IDcuNjM0MTRMMTQuMjU5MyA5LjAzNkwxMy4zNDgxIDkuOTA1MTdMMTEuMTYxMiA5LjE3NjE5QzEwLjQwNDIgOC45MjM4NSAxMC4xNTE4IDguNTE3MzEgMTAuMDUzNyA3LjY2MjE3VjcuNjM0MTRaTTkuODAxMzUgMTQuNzU1NkwxMC43NTQ2IDEzLjg0NDRMMTIuNTQ5MSAxNC40MzMyQzEzLjQ4ODMgMTQuNzQxNiAxMy44MTA3IDE1LjE0ODIgMTMuNzEyNiAxNi4xNzE1TDkuODAxMzUgMTQuNzU1NlpNOC41OTU3NyAxMC42OTAyQzguNTk1NzcgMTAuNDIzOSA4LjczNTk1IDEwLjE3MTUgOC45NzQyNyA5Ljk2MTIyQzkuMjI2NjEgMTAuMzI1NyA5LjY2MTE4IDEwLjY0ODEgMTAuMzQ4MSAxMC44NzI1TDExLjgzNDEgMTEuMzYzMUwxMS4wMDcgMTIuMTYyMkw5LjU0OTAzIDExLjY4NTVDOC44NzYxNCAxMS40NjEyIDguNTk1NzcgMTEuMTI0OCA4LjU5NTc3IDEwLjY5MDJaTTEyLjk5NzYgMTguMDVDMTYuMDgxNyAxNi4wMDMzIDE3LjczNTkgMTQuNjE1NCAxNy43MzU5IDEyLjkwNTJDMTcuNzM1OSAxMS43Njk2IDE3LjA2MyAxMS4xMzg4IDE1LjU3NzEgMTAuNjQ4MUwxNC40NTU2IDEwLjI2OTZMMTcuNTI1NyA3LjMyNTcyTDE2LjkwODggNi42NjY4NEwxNS45OTc2IDcuNDY1OUwxMS42OTM5IDYuMDUwMDJDMTAuMzYyMSA2LjQ4NDYgOC42Nzk4OCA3Ljc2MDMgOC42Nzk4OCA5LjAzNkM4LjY3OTg4IDkuMTc2MTggOC42OTM5IDkuMzE2MzcgOC43MzU5NSA5LjQ3MDU5QzcuNjI4NDcgMTAuMTAxNCA3LjE3OTg4IDEwLjY5MDIgNy4xNzk4OCAxMS40MTkxQzcuMTc5ODggMTIuMTA2MSA3LjU0NDM2IDEyLjc5MyA4LjcwNzkyIDEzLjE3MTVMOS42MzMxNCAxMy40Nzk5TDYuNDM2ODkgMTYuNTVMNy4wNTM3MSAxNy4yMDg5TDguMDQ5MDQgMTYuMjk3N0wxMi45OTc2IDE4LjA1WiIgZmlsbD0iIzAyMDUwQSIvPgo8L3N2Zz4=", BACKPACK_ICON = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBmaWxsPSIjRTMzRTNGIi8+CjxwYXRoIGQ9Ik0xNS41MTg2IDEzLjkyNzJDMTUuOTgxMSAxMy45MjcyIDE2LjIxMjcgMTMuOTI3MSAxNi4zNTY0IDE0LjA3MDhDMTYuNTAwMiAxNC4yMTQ1IDE2LjUgMTQuNDQ2MiAxNi41IDE0LjkwODdWMTUuNTY0QzE2LjUgMTYuNDg5MyAxNi41MDAyIDE2Ljk1MjIgMTYuMjEyOSAxNy4yMzk3QzE1LjkyNTMgMTcuNTI3MyAxNS40NjE4IDE3LjUyNzggMTQuNTM2MSAxNy41Mjc4SDkuNDYzODdDOC41Mzg0MiAxNy41Mjc4IDguMDc1NjcgMTcuNTI3MSA3Ljc4ODA5IDE3LjIzOTdDNy41MDA1NCAxNi45NTIyIDcuNSAxNi40ODk0IDcuNSAxNS41NjRWMTQuOTA4N0M3LjUgMTQuNDQ2MiA3LjQ5OTgyIDE0LjIxNDUgNy42NDM1NSAxNC4wNzA4QzcuNzg3MyAxMy45MjcxIDguMDE4OTEgMTMuOTI3MiA4LjQ4MTQ1IDEzLjkyNzJIMTUuNTE4NlpNMTIgNi4zNTg4OUMxNi41NjUzIDYuMzU4ODkgMTYuNSA5LjQwMjM4IDE2LjUgMTAuODU4OVYxMi40OTU2QzE2LjQ5OTkgMTIuNzY2NyAxNi4yNzk5IDEyLjk4NjggMTYuMDA4OCAxMi45ODY4SDcuOTkxMjFDNy43MjAxMiAxMi45ODY4IDcuNTAwMDYgMTIuNzY2NyA3LjUgMTIuNDk1NkM3LjUgMTIuNDk1NiA3LjUgMTIuMzE1MyA3LjUgMTAuODU4OUM3LjQ5OTk5IDkuNDAyMzkgNy40MzQ3OCA2LjM1ODkzIDEyIDYuMzU4ODlaTTEyIDcuNTE5MDRDMTEuMjMxOSA3LjUxOTEgMTAuNjA5NCA4LjE0MTU1IDEwLjYwOTQgOC45MDk2N0MxMC42MDk0IDkuNjc3NzggMTEuMjMxOSAxMC4zMDAyIDEyIDEwLjMwMDNDMTIuNzY4MiAxMC4zMDAzIDEzLjM5MDYgOS42Nzc4MiAxMy4zOTA2IDguOTA5NjdDMTMuMzkwNiA4LjE0MTUxIDEyLjc2ODIgNy41MTkwNCAxMiA3LjUxOTA0Wk0xMS45OTkgNC40NzIxN0MxMi45ODQxIDQuNDcyMjIgMTMuODQ2MiA0LjgxNjczIDE0LjA3NDIgNS4zNzc0NEMxNC4xMDg1IDUuNDczODcgMTQuMTI1OCA1LjUyMjIyIDE0LjA5NTcgNS41NTgxMUMxNC4wNjUyIDUuNTk0MDIgMTQuMDA1OCA1LjU4MzQyIDEzLjg4NzcgNS41NjIwMUMxMy41ODIyIDUuNTA2NjUgMTMuMTQ5MyA1LjQ2ODc3IDEyLjc2ODYgNS40NTc1MkMxMi41MjU4IDUuNDQ0NDggMTIuMjY5NSA1LjQzNzk5IDEyIDUuNDM3OTlDMTEuNzMwNSA1LjQzNzk5IDExLjQ3NDIgNS40NDQ0OCAxMS4yMzE0IDUuNDU3NTJDMTAuODQ5IDUuNDY4NzcgMTAuNDE0OSA1LjUwNjU4IDEwLjEwODQgNS41NjAwNkM5Ljk5MzM1IDUuNTgwMTMgOS45MzU2NSA1LjU5MDQ3IDkuOTA1MjcgNS41NTUxOEM5Ljg3NDk3IDUuNTE5MzUgOS44OTEyOCA1LjQ3MTQ0IDkuOTI0OCA1LjM3NjQ2QzEwLjE1MSA0LjgxNzQ4IDExLjAxNDIgNC40NzIxNyAxMS45OTkgNC40NzIxN1oiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPg==", WALLET_ICON_OVERRIDES = {
630
671
  Phantom: PHANTOM_ICON,
631
672
  Solflare: SOLFLARE_ICON,
632
673
  Backpack: BACKPACK_ICON
@@ -658,7 +699,10 @@ function applyWalletIconOverride(wallet) {
658
699
  }
659
700
 
660
701
  // src/lib/wallet/detector.ts
661
- var logger3 = chunk64LV76OK_js.createLogger("WalletDetector");
702
+ var logger3 = chunkSITQ4JWM_js.createLogger("WalletDetector");
703
+ function isSolanaWallet(wallet) {
704
+ return Array.isArray(wallet.chains) && wallet.chains.some((chain) => typeof chain == "string" && chain.startsWith("solana:"));
705
+ }
662
706
  function hasFeature(wallet, featureName) {
663
707
  return wallet.features != null && wallet.features[featureName] !== void 0;
664
708
  }
@@ -680,7 +724,9 @@ function verifyWalletName(wallet, requestedName) {
680
724
  var WalletDetector = class extends BaseCollaborator {
681
725
  constructor(stateManager, eventEmitter, debug = false) {
682
726
  super({ stateManager, eventEmitter, debug }, "WalletDetector");
683
- chunk64LV76OK_js.__publicField(this, "unsubscribers", []);
727
+ chunkSITQ4JWM_js.__publicField(this, "unsubscribers", []);
728
+ /** Map from stable connector ID to Wallet reference (not stored in state) */
729
+ chunkSITQ4JWM_js.__publicField(this, "connectorRegistry", /* @__PURE__ */ new Map());
684
730
  }
685
731
  /**
686
732
  * Initialize wallet detection (synchronous)
@@ -696,11 +742,10 @@ var WalletDetector = class extends BaseCollaborator {
696
742
  if (!(typeof window > "u"))
697
743
  try {
698
744
  let walletsApi = getWalletsRegistry(), update = () => {
699
- let ws = walletsApi.get(), previousCount = this.getState().wallets.length, newCount = ws.length;
700
- newCount !== previousCount && this.log("\u{1F50D} WalletDetector: found wallets:", newCount);
701
- let unique = this.deduplicateWallets(ws);
702
- this.stateManager.updateState({
703
- wallets: unique.map((w) => this.mapToWalletInfo(w))
745
+ let solanaWallets = walletsApi.get().filter(isSolanaWallet), unique = this.deduplicateWallets(solanaWallets), previousCount = this.getState().wallets.length, newCount = unique.length;
746
+ newCount !== previousCount && this.log("\u{1F50D} WalletDetector: found wallets:", newCount), this.updateConnectorRegistry(unique), this.stateManager.updateState({
747
+ wallets: unique.map((w) => this.mapToWalletInfo(w)),
748
+ connectors: unique.map((w) => this.mapToConnectorMetadata(w))
704
749
  }), newCount !== previousCount && newCount > 0 && this.eventEmitter.emit({
705
750
  type: "wallets:detected",
706
751
  count: newCount,
@@ -778,20 +823,64 @@ var WalletDetector = class extends BaseCollaborator {
778
823
  return null;
779
824
  }
780
825
  /**
781
- * Get currently detected wallets
826
+ * Get currently detected wallets (legacy)
827
+ * @deprecated Use getConnectors() for vNext API
782
828
  */
783
829
  getDetectedWallets() {
784
830
  return this.getState().wallets;
785
831
  }
786
832
  /**
787
- * Convert a Wallet Standard wallet to WalletInfo with capability checks
833
+ * Get all available connectors (vNext API)
834
+ */
835
+ getConnectors() {
836
+ return this.getState().connectors;
837
+ }
838
+ /**
839
+ * Get a wallet by its stable connector ID (vNext API)
840
+ * Returns the Wallet reference for connection operations
841
+ */
842
+ getConnectorById(connectorId) {
843
+ return this.connectorRegistry.get(connectorId);
844
+ }
845
+ /**
846
+ * Get connector metadata by ID
847
+ */
848
+ getConnectorMetadata(connectorId) {
849
+ return this.getState().connectors.find((c) => c.id === connectorId);
850
+ }
851
+ /**
852
+ * Update the connector registry map
853
+ */
854
+ updateConnectorRegistry(wallets) {
855
+ this.connectorRegistry.clear();
856
+ for (let wallet of wallets) {
857
+ let connectorId = createConnectorId(wallet.name);
858
+ this.connectorRegistry.set(connectorId, wallet);
859
+ }
860
+ }
861
+ /**
862
+ * Convert a Wallet Standard wallet to WalletConnectorMetadata (serializable)
863
+ */
864
+ mapToConnectorMetadata(wallet) {
865
+ let walletWithIcon = applyWalletIconOverride(wallet), hasConnect = hasFeature(walletWithIcon, "standard:connect"), isSolana = isSolanaWallet(walletWithIcon), ready2 = hasConnect && isSolana;
866
+ return {
867
+ id: createConnectorId(wallet.name),
868
+ name: wallet.name,
869
+ icon: typeof walletWithIcon.icon == "string" ? walletWithIcon.icon : "",
870
+ ready: ready2,
871
+ chains: walletWithIcon.chains ?? [],
872
+ features: Object.keys(walletWithIcon.features ?? {})
873
+ };
874
+ }
875
+ /**
876
+ * Convert a Wallet Standard wallet to WalletInfo with capability checks (legacy)
788
877
  */
789
878
  mapToWalletInfo(wallet) {
790
- let walletWithIcon = applyWalletIconOverride(wallet), hasConnect = hasFeature(walletWithIcon, "standard:connect"), hasDisconnect = hasFeature(walletWithIcon, "standard:disconnect"), isSolana = Array.isArray(walletWithIcon.chains) && walletWithIcon.chains.some((c) => typeof c == "string" && c.includes("solana"));
879
+ let walletWithIcon = applyWalletIconOverride(wallet), hasConnect = hasFeature(walletWithIcon, "standard:connect"), isSolana = isSolanaWallet(walletWithIcon);
791
880
  return {
792
881
  wallet: walletWithIcon,
793
882
  installed: true,
794
- connectable: hasConnect && hasDisconnect && isSolana
883
+ connectable: hasConnect && isSolana
795
884
  };
796
885
  }
797
886
  /**
@@ -830,25 +919,241 @@ function getEventsFeature(wallet) {
830
919
  var ConnectionManager = class extends BaseCollaborator {
831
920
  constructor(stateManager, eventEmitter, walletStorage, debug = false) {
832
921
  super({ stateManager, eventEmitter, debug }, "ConnectionManager");
833
- chunk64LV76OK_js.__publicField(this, "walletStorage");
834
- chunk64LV76OK_js.__publicField(this, "walletChangeUnsub", null);
835
- chunk64LV76OK_js.__publicField(this, "pollTimer", null);
836
- chunk64LV76OK_js.__publicField(this, "pollAttempts", 0);
837
- chunk64LV76OK_js.__publicField(this, "connectAttemptId", 0);
838
- chunk64LV76OK_js.__publicField(this, "pendingWallet", null);
839
- chunk64LV76OK_js.__publicField(this, "pendingWalletName", null);
922
+ chunkSITQ4JWM_js.__publicField(this, "walletStorage");
923
+ chunkSITQ4JWM_js.__publicField(this, "walletChangeUnsub", null);
924
+ chunkSITQ4JWM_js.__publicField(this, "pollTimer", null);
925
+ chunkSITQ4JWM_js.__publicField(this, "pollAttempts", 0);
926
+ chunkSITQ4JWM_js.__publicField(this, "connectAttemptId", 0);
927
+ chunkSITQ4JWM_js.__publicField(this, "pendingWallet", null);
928
+ chunkSITQ4JWM_js.__publicField(this, "pendingWalletName", null);
840
929
  this.walletStorage = walletStorage;
841
930
  }
931
+ // ========================================================================
932
+ // vNext Connection Methods (connector-id based, silent-first)
933
+ // ========================================================================
934
+ /**
935
+ * Connect to a wallet using the vNext API with silent-first support.
936
+ *
937
+ * @param wallet - Wallet Standard wallet instance
938
+ * @param connectorId - Stable connector identifier
939
+ * @param options - Connection options (silent mode, preferred account, etc.)
940
+ */
941
+ async connectWallet(wallet, connectorId, options) {
942
+ if (typeof window > "u") return;
943
+ let attemptId = ++this.connectAttemptId;
944
+ this.pendingWallet = wallet, this.pendingWalletName = wallet.name;
945
+ let { silent = false, allowInteractiveFallback = true, preferredAccount } = options ?? {};
946
+ this.updateWalletStatus({
947
+ status: "connecting",
948
+ connectorId
949
+ }), this.stateManager.updateState({ connecting: true }, true), this.eventEmitter.emit({
950
+ type: "connecting",
951
+ wallet: wallet.name,
952
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
953
+ });
954
+ try {
955
+ let connect = getConnectFeature(wallet);
956
+ if (!connect) throw new Error(`Wallet ${wallet.name} does not support standard connect`);
957
+ let result;
958
+ if (silent)
959
+ try {
960
+ if (result = await connect({ silent: true }), attemptId !== this.connectAttemptId) throw new Error("Connection cancelled");
961
+ let hasAccounts = result.accounts.length > 0 || wallet.accounts.length > 0;
962
+ if (!hasAccounts && allowInteractiveFallback)
963
+ this.log("Silent connect returned no accounts, trying interactive..."), result = await connect({ silent: false });
964
+ else if (!hasAccounts)
965
+ throw new Error("Silent connection failed: no accounts returned");
966
+ } catch (silentError) {
967
+ if (attemptId !== this.connectAttemptId) throw new Error("Connection cancelled");
968
+ if (allowInteractiveFallback)
969
+ this.log("Silent connect failed, trying interactive...", silentError), result = await connect({ silent: false });
970
+ else
971
+ throw silentError;
972
+ }
973
+ else
974
+ result = await connect({ silent: false });
975
+ if (attemptId !== this.connectAttemptId) throw new Error("Connection cancelled");
976
+ let walletAccounts = wallet.accounts, accountMap = /* @__PURE__ */ new Map();
977
+ for (let a of [...walletAccounts, ...result.accounts]) accountMap.set(a.address, a);
978
+ let sessionAccounts = Array.from(accountMap.values()).map((a) => ({
979
+ address: a.address,
980
+ label: a.label,
981
+ account: a
982
+ })), legacyAccounts = sessionAccounts.map((a) => this.toAccountInfo(a.account)), selectedAccount = sessionAccounts[0];
983
+ if (preferredAccount) {
984
+ let preferred = sessionAccounts.find((a) => a.address === preferredAccount);
985
+ preferred && (selectedAccount = preferred);
986
+ }
987
+ let session = this.createSession(wallet, connectorId, sessionAccounts, selectedAccount);
988
+ this.updateWalletStatus({
989
+ status: "connected",
990
+ session
991
+ }), this.stateManager.updateState(
992
+ {
993
+ selectedWallet: wallet,
994
+ connected: true,
995
+ connecting: false,
996
+ accounts: legacyAccounts,
997
+ selectedAccount: selectedAccount?.address ?? null
998
+ },
999
+ true
1000
+ ), this.log("\u2705 Connection successful (vNext)", {
1001
+ connectorId,
1002
+ selectedAccount: selectedAccount?.address,
1003
+ accountsCount: sessionAccounts.length
1004
+ }), selectedAccount && this.eventEmitter.emit({
1005
+ type: "wallet:connected",
1006
+ wallet: wallet.name,
1007
+ account: selectedAccount.address,
1008
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
1009
+ }), this.walletStorage && (!("isAvailable" in this.walletStorage) || typeof this.walletStorage.isAvailable != "function" || this.walletStorage.isAvailable()) && this.walletStorage.set(wallet.name), this.subscribeToWalletEventsVNext(wallet, connectorId);
1010
+ } catch (e) {
1011
+ if (attemptId !== this.connectAttemptId) throw e;
1012
+ let errorMessage = e instanceof Error ? e.message : String(e), error = e instanceof Error ? e : new Error(errorMessage);
1013
+ throw this.updateWalletStatus({
1014
+ status: "error",
1015
+ error,
1016
+ connectorId,
1017
+ recoverable: this.isRecoverableError(error)
1018
+ }), this.stateManager.updateState(
1019
+ {
1020
+ selectedWallet: null,
1021
+ connected: false,
1022
+ connecting: false,
1023
+ accounts: [],
1024
+ selectedAccount: null
1025
+ },
1026
+ true
1027
+ ), this.eventEmitter.emit({
1028
+ type: "connection:failed",
1029
+ wallet: wallet.name,
1030
+ error: errorMessage,
1031
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
1032
+ }), e;
1033
+ } finally {
1034
+ this.pendingWallet === wallet && (this.pendingWallet = null, this.pendingWalletName = null);
1035
+ }
1036
+ }
1037
+ /**
1038
+ * Create a WalletSession object
1039
+ */
1040
+ createSession(wallet, connectorId, accounts, selectedAccount) {
1041
+ let listeners = /* @__PURE__ */ new Set();
1042
+ return {
1043
+ connectorId,
1044
+ accounts,
1045
+ selectedAccount,
1046
+ onAccountsChanged: (listener) => (listeners.add(listener), () => listeners.delete(listener)),
1047
+ selectAccount: async (address) => {
1048
+ if (accounts.find((a) => a.address === address))
1049
+ return this.selectAccount(address);
1050
+ }
1051
+ };
1052
+ }
842
1053
  /**
843
- * Connect to a wallet
1054
+ * Update wallet status in state
1055
+ */
1056
+ updateWalletStatus(status) {
1057
+ this.stateManager.updateState({ wallet: status });
1058
+ }
1059
+ /**
1060
+ * Subscribe to wallet events (vNext version with improved account change handling)
1061
+ */
1062
+ subscribeToWalletEventsVNext(wallet, connectorId) {
1063
+ this.walletChangeUnsub && (this.walletChangeUnsub(), this.walletChangeUnsub = null), this.stopPollingWalletAccounts();
1064
+ let eventsOn = getEventsFeature(wallet);
1065
+ if (!eventsOn) {
1066
+ this.startPollingWalletAccountsVNext(wallet, connectorId);
1067
+ return;
1068
+ }
1069
+ try {
1070
+ this.walletChangeUnsub = eventsOn("change", (properties) => {
1071
+ let changeAccounts = properties?.accounts ?? [];
1072
+ this.handleAccountsChanged(changeAccounts, connectorId, wallet);
1073
+ });
1074
+ } catch {
1075
+ this.startPollingWalletAccountsVNext(wallet, connectorId);
1076
+ }
1077
+ }
1078
+ /**
1079
+ * Handle accounts changed event with proper validation
1080
+ */
1081
+ handleAccountsChanged(newAccounts, connectorId, wallet) {
1082
+ let state = this.getState();
1083
+ if (newAccounts.length === 0) {
1084
+ this.log("No accounts available, disconnecting..."), this.disconnect();
1085
+ return;
1086
+ }
1087
+ let sessionAccounts = newAccounts.map((a) => ({
1088
+ address: a.address,
1089
+ label: a.label,
1090
+ account: a
1091
+ })), legacyAccounts = sessionAccounts.map((a) => this.toAccountInfo(a.account)), currentSelected = state.selectedAccount, selectedAccount = sessionAccounts.find((a) => a.address === currentSelected);
1092
+ if (selectedAccount || (selectedAccount = sessionAccounts[0], this.eventEmitter.emit({
1093
+ type: "account:changed",
1094
+ account: selectedAccount.address,
1095
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
1096
+ })), state.wallet.status === "connected") {
1097
+ let session = this.createSession(wallet, connectorId, sessionAccounts, selectedAccount);
1098
+ this.updateWalletStatus({
1099
+ status: "connected",
1100
+ session
1101
+ });
1102
+ }
1103
+ this.stateManager.updateState({
1104
+ accounts: legacyAccounts,
1105
+ selectedAccount: selectedAccount.address
1106
+ });
1107
+ }
1108
+ /**
1109
+ * Start polling wallet accounts (vNext version)
1110
+ */
1111
+ startPollingWalletAccountsVNext(wallet, connectorId) {
1112
+ if (this.pollTimer) return;
1113
+ this.pollAttempts = 0;
1114
+ let poll = () => {
1115
+ if (this.pollAttempts >= 20) {
1116
+ this.stopPollingWalletAccounts(), this.log("Stopped wallet polling after max attempts");
1117
+ return;
1118
+ }
1119
+ try {
1120
+ let walletAccounts = wallet.accounts;
1121
+ walletAccounts.length > 0 && (this.handleAccountsChanged(walletAccounts, connectorId, wallet), this.pollAttempts = 0);
1122
+ } catch (error) {
1123
+ this.log("Wallet polling error:", error);
1124
+ }
1125
+ this.pollAttempts++;
1126
+ let intervalIndex = Math.min(this.pollAttempts, POLL_INTERVALS_MS.length - 1), interval = POLL_INTERVALS_MS[intervalIndex];
1127
+ this.pollTimer = setTimeout(poll, interval);
1128
+ };
1129
+ poll();
1130
+ }
1131
+ /**
1132
+ * Check if an error is recoverable
1133
+ */
1134
+ isRecoverableError(error) {
1135
+ let message = error.message.toLowerCase();
1136
+ return message.includes("user rejected") || message.includes("user denied") || message.includes("cancelled") || message.includes("canceled");
1137
+ }
1138
+ // ========================================================================
1139
+ // Legacy Connection Methods (kept for backwards compatibility)
1140
+ // ========================================================================
1141
+ /**
1142
+ * Connect to a wallet (legacy API)
1143
+ * @deprecated Use connectWallet() instead
844
1144
  */
845
1145
  async connect(wallet, walletName) {
846
1146
  if (typeof window > "u") return;
847
1147
  let name = walletName || wallet.name, attemptId = ++this.connectAttemptId;
848
- this.pendingWallet = wallet, this.pendingWalletName = name, this.eventEmitter.emit({
1148
+ this.pendingWallet = wallet, this.pendingWalletName = name;
1149
+ let connectorId = createConnectorId(name);
1150
+ this.eventEmitter.emit({
849
1151
  type: "connecting",
850
1152
  wallet: name,
851
1153
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
1154
+ }), this.updateWalletStatus({
1155
+ status: "connecting",
1156
+ connectorId
852
1157
  }), this.stateManager.updateState({ connecting: true }, true);
853
1158
  try {
854
1159
  let connect = getConnectFeature(wallet);
@@ -858,8 +1163,18 @@ var ConnectionManager = class extends BaseCollaborator {
858
1163
  throw new Error("Connection cancelled");
859
1164
  let walletAccounts = wallet.accounts, accountMap = /* @__PURE__ */ new Map();
860
1165
  for (let a of [...walletAccounts, ...result.accounts]) accountMap.set(a.address, a);
861
- let accounts = Array.from(accountMap.values()).map((a) => this.toAccountInfo(a)), state = this.getState(), previouslySelected = state.selectedAccount, previousAddresses = new Set(state.accounts.map((a) => a.address)), selected = accounts.find((a) => !previousAddresses.has(a.address))?.address ?? previouslySelected ?? accounts[0]?.address ?? null;
862
- this.stateManager.updateState(
1166
+ let sessionAccounts = Array.from(accountMap.values()).map((a) => ({
1167
+ address: a.address,
1168
+ label: a.label,
1169
+ account: a
1170
+ }));
1171
+ if (sessionAccounts.length === 0)
1172
+ throw new Error(`Wallet ${name} connected but returned no accounts`);
1173
+ let accounts = sessionAccounts.map((a) => this.toAccountInfo(a.account)), state = this.getState(), previouslySelected = state.selectedAccount, previousAddresses = new Set(state.accounts.map((a) => a.address)), selected = accounts.find((a) => !previousAddresses.has(a.address))?.address ?? previouslySelected ?? accounts[0]?.address ?? null, selectedSessionAccount = (selected ? sessionAccounts.find((a) => a.address === selected) : void 0) ?? sessionAccounts[0], session = this.createSession(wallet, connectorId, sessionAccounts, selectedSessionAccount);
1174
+ this.updateWalletStatus({
1175
+ status: "connected",
1176
+ session
1177
+ }), this.stateManager.updateState(
863
1178
  {
864
1179
  selectedWallet: wallet,
865
1180
  connected: true,
@@ -885,7 +1200,7 @@ var ConnectionManager = class extends BaseCollaborator {
885
1200
  } catch (e) {
886
1201
  if (attemptId !== this.connectAttemptId)
887
1202
  throw e;
888
- let errorMessage = e instanceof Error ? e.message : String(e);
1203
+ let errorMessage = e instanceof Error ? e.message : String(e), error = e instanceof Error ? e : new Error(errorMessage);
889
1204
  throw this.eventEmitter.emit({
890
1205
  type: "connection:failed",
891
1206
  wallet: name,
@@ -893,9 +1208,14 @@ var ConnectionManager = class extends BaseCollaborator {
893
1208
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
894
1209
  }), this.eventEmitter.emit({
895
1210
  type: "error",
896
- error: e instanceof Error ? e : new Error(errorMessage),
1211
+ error,
897
1212
  context: "wallet-connection",
898
1213
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
1214
+ }), this.updateWalletStatus({
1215
+ status: "error",
1216
+ error,
1217
+ connectorId,
1218
+ recoverable: this.isRecoverableError(error)
899
1219
  }), this.stateManager.updateState(
900
1220
  {
901
1221
  selectedWallet: null,
@@ -916,7 +1236,7 @@ var ConnectionManager = class extends BaseCollaborator {
916
1236
  async disconnect() {
917
1237
  this.connectAttemptId++, this.walletChangeUnsub && (this.walletChangeUnsub(), this.walletChangeUnsub = null), this.stopPollingWalletAccounts();
918
1238
  let wallet = this.getState().selectedWallet ?? this.pendingWallet;
919
- if (this.pendingWallet = null, this.pendingWalletName = null, this.stateManager.updateState(
1239
+ if (this.pendingWallet = null, this.pendingWalletName = null, this.updateWalletStatus(INITIAL_WALLET_STATUS), this.stateManager.updateState(
920
1240
  {
921
1241
  selectedWallet: null,
922
1242
  connected: false,
@@ -1042,17 +1362,50 @@ var ConnectionManager = class extends BaseCollaborator {
1042
1362
  };
1043
1363
 
1044
1364
  // src/lib/wallet/auto-connector.ts
1045
- var logger4 = chunk64LV76OK_js.createLogger("AutoConnector"), MIN_ADDRESS_LENGTH = 30, AutoConnector = class {
1046
- constructor(walletDetector, connectionManager, stateManager, walletStorage, debug = false) {
1047
- chunk64LV76OK_js.__publicField(this, "walletDetector");
1048
- chunk64LV76OK_js.__publicField(this, "connectionManager");
1049
- chunk64LV76OK_js.__publicField(this, "stateManager");
1050
- chunk64LV76OK_js.__publicField(this, "walletStorage");
1051
- chunk64LV76OK_js.__publicField(this, "debug");
1052
- this.walletDetector = walletDetector, this.connectionManager = connectionManager, this.stateManager = stateManager, this.walletStorage = walletStorage, this.debug = debug;
1365
+ var logger4 = chunkSITQ4JWM_js.createLogger("AutoConnector"), MIN_ADDRESS_LENGTH = 30, AutoConnector = class {
1366
+ constructor(walletDetector, connectionManager, stateManager, walletStorage, debug = false, walletStateStorage) {
1367
+ chunkSITQ4JWM_js.__publicField(this, "walletDetector");
1368
+ chunkSITQ4JWM_js.__publicField(this, "connectionManager");
1369
+ chunkSITQ4JWM_js.__publicField(this, "stateManager");
1370
+ /** Legacy wallet name storage */
1371
+ chunkSITQ4JWM_js.__publicField(this, "walletStorage");
1372
+ /** vNext wallet state storage (connector ID + account) */
1373
+ chunkSITQ4JWM_js.__publicField(this, "walletStateStorage");
1374
+ chunkSITQ4JWM_js.__publicField(this, "debug");
1375
+ this.walletDetector = walletDetector, this.connectionManager = connectionManager, this.stateManager = stateManager, this.walletStorage = walletStorage, this.walletStateStorage = walletStateStorage, this.debug = debug;
1053
1376
  }
1054
1377
  async attemptAutoConnect() {
1055
- return await this.attemptInstantConnect() ? true : (await this.attemptStandardConnect(), this.stateManager.getSnapshot().connected);
1378
+ return this.walletStateStorage && await this.attemptVNextAutoConnect() || await this.attemptInstantConnect() ? true : (await this.attemptStandardConnect(), this.stateManager.getSnapshot().connected);
1379
+ }
1380
+ /**
1381
+ * vNext auto-connect using stored connector ID with silent-first approach.
1382
+ * This won't prompt the user unless they explicitly initiated the connect.
1383
+ */
1384
+ async attemptVNextAutoConnect() {
1385
+ let walletState = this.walletStateStorage?.get();
1386
+ if (!walletState || !walletState.autoConnect)
1387
+ return this.debug && logger4.debug("vNext auto-connect: No stored wallet state or autoConnect disabled"), false;
1388
+ let { connectorId, lastAccount } = walletState;
1389
+ await ready;
1390
+ let wallet = this.walletDetector.getConnectorById(connectorId);
1391
+ if (!wallet)
1392
+ return this.debug && logger4.debug("vNext auto-connect: Connector not found", { connectorId }), false;
1393
+ try {
1394
+ return this.debug && logger4.info("vNext auto-connect: Attempting silent connect", {
1395
+ connectorId,
1396
+ lastAccount
1397
+ }), await this.connectionManager.connectWallet(wallet, connectorId, {
1398
+ silent: true,
1399
+ allowInteractiveFallback: false,
1400
+ // Don't prompt on auto-connect
1401
+ preferredAccount: lastAccount
1402
+ }), this.debug && logger4.info("vNext auto-connect: Silent connect successful", { connectorId }), true;
1403
+ } catch (error) {
1404
+ return this.debug && logger4.debug("vNext auto-connect: Silent connect failed (expected for first-time or revoked)", {
1405
+ connectorId,
1406
+ error: error instanceof Error ? error.message : error
1407
+ }), false;
1408
+ }
1056
1409
  }
1057
1410
  async attemptInstantConnect() {
1058
1411
  let storedWalletName = this.walletStorage?.get();
@@ -1202,7 +1555,7 @@ var logger4 = chunk64LV76OK_js.createLogger("AutoConnector"), MIN_ADDRESS_LENGTH
1202
1555
  var ClusterManager = class extends BaseCollaborator {
1203
1556
  constructor(stateManager, eventEmitter, clusterStorage, config, debug = false) {
1204
1557
  super({ stateManager, eventEmitter, debug }, "ClusterManager");
1205
- chunk64LV76OK_js.__publicField(this, "clusterStorage");
1558
+ chunkSITQ4JWM_js.__publicField(this, "clusterStorage");
1206
1559
  if (this.clusterStorage = clusterStorage, config) {
1207
1560
  let clusters = config.clusters ?? [], initialClusterId = this.clusterStorage?.get() ?? config.initialCluster ?? "solana:mainnet", initialCluster = clusters.find((c) => c.id === initialClusterId) ?? clusters[0] ?? null;
1208
1561
  this.stateManager.updateState({
@@ -1217,7 +1570,7 @@ var ClusterManager = class extends BaseCollaborator {
1217
1570
  async setCluster(clusterId) {
1218
1571
  let state = this.getState(), previousClusterId = state.cluster?.id || null, cluster = state.clusters.find((c) => c.id === clusterId);
1219
1572
  if (!cluster)
1220
- throw chunk64LV76OK_js.Errors.clusterNotFound(
1573
+ throw chunkSITQ4JWM_js.Errors.clusterNotFound(
1221
1574
  clusterId,
1222
1575
  state.clusters.map((c) => c.id)
1223
1576
  );
@@ -1246,9 +1599,9 @@ var ClusterManager = class extends BaseCollaborator {
1246
1599
  var TransactionTracker = class extends BaseCollaborator {
1247
1600
  constructor(stateManager, eventEmitter, maxTransactions = 20, debug = false) {
1248
1601
  super({ stateManager, eventEmitter, debug }, "TransactionTracker");
1249
- chunk64LV76OK_js.__publicField(this, "transactions", []);
1250
- chunk64LV76OK_js.__publicField(this, "totalTransactions", 0);
1251
- chunk64LV76OK_js.__publicField(this, "maxTransactions");
1602
+ chunkSITQ4JWM_js.__publicField(this, "transactions", []);
1603
+ chunkSITQ4JWM_js.__publicField(this, "totalTransactions", 0);
1604
+ chunkSITQ4JWM_js.__publicField(this, "maxTransactions");
1252
1605
  this.maxTransactions = maxTransactions;
1253
1606
  }
1254
1607
  /**
@@ -1302,10 +1655,10 @@ var TransactionTracker = class extends BaseCollaborator {
1302
1655
  // src/lib/health/health-monitor.ts
1303
1656
  var HealthMonitor = class {
1304
1657
  constructor(stateManager, walletStorage, clusterStorage, isInitialized) {
1305
- chunk64LV76OK_js.__publicField(this, "stateManager");
1306
- chunk64LV76OK_js.__publicField(this, "walletStorage");
1307
- chunk64LV76OK_js.__publicField(this, "clusterStorage");
1308
- chunk64LV76OK_js.__publicField(this, "isInitialized");
1658
+ chunkSITQ4JWM_js.__publicField(this, "stateManager");
1659
+ chunkSITQ4JWM_js.__publicField(this, "walletStorage");
1660
+ chunkSITQ4JWM_js.__publicField(this, "clusterStorage");
1661
+ chunkSITQ4JWM_js.__publicField(this, "isInitialized");
1309
1662
  this.stateManager = stateManager, this.walletStorage = walletStorage, this.clusterStorage = clusterStorage, this.isInitialized = isInitialized ?? (() => true);
1310
1663
  }
1311
1664
  /**
@@ -1357,22 +1710,26 @@ var HealthMonitor = class {
1357
1710
  };
1358
1711
 
1359
1712
  // src/lib/core/connector-client.ts
1360
- var logger5 = chunk64LV76OK_js.createLogger("ConnectorClient"), ConnectorClient = class {
1713
+ var logger5 = chunkSITQ4JWM_js.createLogger("ConnectorClient"), ConnectorClient = class {
1361
1714
  constructor(config = {}) {
1362
- chunk64LV76OK_js.__publicField(this, "stateManager");
1363
- chunk64LV76OK_js.__publicField(this, "eventEmitter");
1364
- chunk64LV76OK_js.__publicField(this, "walletDetector");
1365
- chunk64LV76OK_js.__publicField(this, "connectionManager");
1366
- chunk64LV76OK_js.__publicField(this, "autoConnector");
1367
- chunk64LV76OK_js.__publicField(this, "clusterManager");
1368
- chunk64LV76OK_js.__publicField(this, "transactionTracker");
1369
- chunk64LV76OK_js.__publicField(this, "debugMetrics");
1370
- chunk64LV76OK_js.__publicField(this, "healthMonitor");
1371
- chunk64LV76OK_js.__publicField(this, "initialized", false);
1372
- chunk64LV76OK_js.__publicField(this, "config");
1373
- chunk64LV76OK_js.__publicField(this, "walletConnectRegistration", null);
1715
+ chunkSITQ4JWM_js.__publicField(this, "stateManager");
1716
+ chunkSITQ4JWM_js.__publicField(this, "eventEmitter");
1717
+ chunkSITQ4JWM_js.__publicField(this, "walletDetector");
1718
+ chunkSITQ4JWM_js.__publicField(this, "connectionManager");
1719
+ chunkSITQ4JWM_js.__publicField(this, "autoConnector");
1720
+ chunkSITQ4JWM_js.__publicField(this, "clusterManager");
1721
+ chunkSITQ4JWM_js.__publicField(this, "transactionTracker");
1722
+ chunkSITQ4JWM_js.__publicField(this, "debugMetrics");
1723
+ chunkSITQ4JWM_js.__publicField(this, "healthMonitor");
1724
+ chunkSITQ4JWM_js.__publicField(this, "initialized", false);
1725
+ chunkSITQ4JWM_js.__publicField(this, "config");
1726
+ chunkSITQ4JWM_js.__publicField(this, "walletConnectRegistration", null);
1374
1727
  this.config = config;
1375
1728
  let initialState = {
1729
+ // vNext wallet status
1730
+ wallet: INITIAL_WALLET_STATUS,
1731
+ connectors: [],
1732
+ // Legacy fields (for backwards compatibility)
1376
1733
  wallets: [],
1377
1734
  selectedWallet: null,
1378
1735
  connected: false,
@@ -1431,17 +1788,55 @@ var logger5 = chunk64LV76OK_js.createLogger("ConnectorClient"), ConnectorClient
1431
1788
  async initializeWalletConnect() {
1432
1789
  if (this.config.walletConnect?.enabled)
1433
1790
  try {
1434
- let { registerWalletConnectWallet } = await import('./walletconnect-D4JN6H2O.js');
1791
+ let { registerWalletConnectWallet } = await import('./walletconnect-447EY3OJ.js');
1435
1792
  this.walletConnectRegistration = await registerWalletConnectWallet(this.config.walletConnect), this.config.debug && logger5.info("WalletConnect wallet registered successfully");
1436
1793
  } catch (error) {
1437
1794
  this.config.debug && logger5.error("Failed to register WalletConnect wallet", { error });
1438
1795
  }
1439
1796
  }
1797
+ // ========================================================================
1798
+ // vNext Wallet Actions (connector-id based)
1799
+ // ========================================================================
1800
+ /**
1801
+ * Connect to a wallet using its stable connector ID.
1802
+ * This is the recommended way to connect in vNext.
1803
+ *
1804
+ * @param connectorId - Stable connector identifier
1805
+ * @param options - Connection options (silent mode, preferred account, etc.)
1806
+ */
1807
+ async connectWallet(connectorId, options) {
1808
+ let connector = this.walletDetector.getConnectorById(connectorId);
1809
+ if (!connector)
1810
+ throw new Error(`Connector ${connectorId} not found`);
1811
+ await this.connectionManager.connectWallet(connector, connectorId, options);
1812
+ }
1813
+ /**
1814
+ * Disconnect the current wallet session.
1815
+ * This is the vNext equivalent of disconnect().
1816
+ */
1817
+ async disconnectWallet() {
1818
+ await this.connectionManager.disconnect();
1819
+ }
1820
+ /**
1821
+ * Get a connector by its ID (for advanced use cases).
1822
+ */
1823
+ getConnector(connectorId) {
1824
+ return this.walletDetector.getConnectorById(connectorId);
1825
+ }
1826
+ // ========================================================================
1827
+ // Legacy Actions (kept for backwards compatibility)
1828
+ // ========================================================================
1829
+ /**
1830
+ * @deprecated Use `connectWallet(connectorId)` instead.
1831
+ */
1440
1832
  async select(walletName) {
1441
1833
  let wallet = this.stateManager.getSnapshot().wallets.find((w) => w.wallet.name === walletName)?.wallet;
1442
1834
  if (!wallet) throw new Error(`Wallet ${walletName} not found`);
1443
1835
  await this.connectionManager.connect(wallet, walletName);
1444
1836
  }
1837
+ /**
1838
+ * @deprecated Use `disconnectWallet()` instead.
1839
+ */
1445
1840
  async disconnect() {
1446
1841
  await this.connectionManager.disconnect();
1447
1842
  }
@@ -1539,284 +1934,13 @@ var logger5 = chunk64LV76OK_js.createLogger("ConnectorClient"), ConnectorClient
1539
1934
  }), this.walletDetector.destroy(), this.eventEmitter.offAll(), this.stateManager.clear();
1540
1935
  }
1541
1936
  };
1542
- var logger6 = chunk64LV76OK_js.createLogger("ErrorBoundary"), WalletErrorType = /* @__PURE__ */ ((WalletErrorType2) => (WalletErrorType2.CONNECTION_FAILED = "CONNECTION_FAILED", WalletErrorType2.TRANSACTION_FAILED = "TRANSACTION_FAILED", WalletErrorType2.NETWORK_ERROR = "NETWORK_ERROR", WalletErrorType2.WALLET_NOT_FOUND = "WALLET_NOT_FOUND", WalletErrorType2.USER_REJECTED = "USER_REJECTED", WalletErrorType2.INSUFFICIENT_FUNDS = "INSUFFICIENT_FUNDS", WalletErrorType2.UNKNOWN_ERROR = "UNKNOWN_ERROR", WalletErrorType2))(WalletErrorType || {}), ErrorLogger = class {
1543
- static log(error, errorInfo, context) {
1544
- if (process.env.NODE_ENV === "development" && logger6.error(error.message, {
1545
- error,
1546
- errorInfo,
1547
- context
1548
- }), process.env.NODE_ENV === "production" && typeof window < "u")
1549
- try {
1550
- let gtag = window.gtag;
1551
- typeof gtag == "function" && gtag("event", "exception", {
1552
- description: error.message,
1553
- fatal: false,
1554
- custom_map: { error_type: "wallet_error", ...context }
1555
- });
1556
- } catch {
1557
- }
1558
- }
1559
- };
1560
- function classifyError(error) {
1561
- if (chunk64LV76OK_js.isConnectorError(error))
1562
- return {
1563
- ...error,
1564
- type: {
1565
- WALLET_NOT_CONNECTED: "CONNECTION_FAILED" /* CONNECTION_FAILED */,
1566
- WALLET_NOT_FOUND: "WALLET_NOT_FOUND" /* WALLET_NOT_FOUND */,
1567
- CONNECTION_FAILED: "CONNECTION_FAILED" /* CONNECTION_FAILED */,
1568
- USER_REJECTED: "USER_REJECTED" /* USER_REJECTED */,
1569
- RPC_ERROR: "NETWORK_ERROR" /* NETWORK_ERROR */,
1570
- NETWORK_TIMEOUT: "NETWORK_ERROR" /* NETWORK_ERROR */,
1571
- SIGNING_FAILED: "TRANSACTION_FAILED" /* TRANSACTION_FAILED */,
1572
- SEND_FAILED: "TRANSACTION_FAILED" /* TRANSACTION_FAILED */
1573
- }[error.code] || "UNKNOWN_ERROR" /* UNKNOWN_ERROR */,
1574
- recoverable: error.recoverable,
1575
- context: error.context
1576
- };
1577
- let walletError = error;
1578
- if (walletError.type) return walletError;
1579
- let type = "UNKNOWN_ERROR" /* UNKNOWN_ERROR */, recoverable = false;
1580
- return error.message.includes("User rejected") || error.message.includes("User denied") ? (type = "USER_REJECTED" /* USER_REJECTED */, recoverable = true) : error.message.includes("Insufficient funds") ? (type = "INSUFFICIENT_FUNDS" /* INSUFFICIENT_FUNDS */, recoverable = false) : error.message.includes("Network") || error.message.includes("fetch") ? (type = "NETWORK_ERROR" /* NETWORK_ERROR */, recoverable = true) : error.message.includes("Wallet not found") || error.message.includes("not installed") ? (type = "WALLET_NOT_FOUND" /* WALLET_NOT_FOUND */, recoverable = true) : (error.message.includes("Failed to connect") || error.message.includes("Connection")) && (type = "CONNECTION_FAILED" /* CONNECTION_FAILED */, recoverable = true), {
1581
- ...error,
1582
- type,
1583
- recoverable,
1584
- context: { originalMessage: error.message }
1585
- };
1586
- }
1587
- var ConnectorErrorBoundary = class extends react.Component {
1588
- constructor(props) {
1589
- super(props);
1590
- chunk64LV76OK_js.__publicField(this, "retryTimeouts", /* @__PURE__ */ new Set());
1591
- chunk64LV76OK_js.__publicField(this, "retry", () => {
1592
- let { maxRetries = 3 } = this.props;
1593
- this.state.retryCount >= maxRetries || this.setState((prevState) => ({
1594
- hasError: false,
1595
- error: null,
1596
- errorInfo: null,
1597
- retryCount: prevState.retryCount + 1
1598
- }));
1599
- });
1600
- this.state = {
1601
- hasError: false,
1602
- error: null,
1603
- errorInfo: null,
1604
- errorId: "",
1605
- retryCount: 0
1606
- };
1607
- }
1608
- static getDerivedStateFromError(error) {
1609
- return {
1610
- hasError: true,
1611
- error,
1612
- errorId: `error_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`
1613
- };
1614
- }
1615
- componentDidCatch(error, errorInfo) {
1616
- this.setState({ errorInfo }), ErrorLogger.log(error, errorInfo, {
1617
- retryCount: this.state.retryCount,
1618
- errorId: this.state.errorId,
1619
- timestamp: (/* @__PURE__ */ new Date()).toISOString()
1620
- }), this.props.onError?.(error, errorInfo);
1621
- }
1622
- componentWillUnmount() {
1623
- this.retryTimeouts.forEach((timeout) => clearTimeout(timeout));
1624
- }
1625
- render() {
1626
- if (this.state.hasError && this.state.error) {
1627
- let walletError = classifyError(this.state.error);
1628
- return this.props.fallback ? this.props.fallback(walletError, this.retry) : /* @__PURE__ */ jsxRuntime.jsx(DefaultErrorFallback, { error: walletError, onRetry: this.retry });
1629
- }
1630
- return this.props.children;
1631
- }
1632
- };
1633
- function DefaultErrorFallback({ error, onRetry }) {
1634
- let [isPending, startTransition] = react.useTransition(), [isRetrying, setIsRetrying] = react.useState(false), handleRetry = react.useCallback(() => {
1635
- setIsRetrying(true), startTransition(() => {
1636
- setTimeout(() => {
1637
- onRetry(), setIsRetrying(false);
1638
- }, 500);
1639
- });
1640
- }, [onRetry]), { title, message, actionText, showRetry } = react.useMemo(() => {
1641
- switch (error.type) {
1642
- case "USER_REJECTED" /* USER_REJECTED */:
1643
- return {
1644
- title: "Transaction Cancelled",
1645
- message: "You cancelled the transaction. No problem!",
1646
- actionText: "Try Again",
1647
- showRetry: true
1648
- };
1649
- case "WALLET_NOT_FOUND" /* WALLET_NOT_FOUND */:
1650
- return {
1651
- title: "Wallet Not Found",
1652
- message: "Please install a supported Solana wallet to continue.",
1653
- actionText: "Check Wallets",
1654
- showRetry: true
1655
- };
1656
- case "NETWORK_ERROR" /* NETWORK_ERROR */:
1657
- return {
1658
- title: "Network Error",
1659
- message: "Having trouble connecting. Please check your internet connection.",
1660
- actionText: "Retry",
1661
- showRetry: true
1662
- };
1663
- case "INSUFFICIENT_FUNDS" /* INSUFFICIENT_FUNDS */:
1664
- return {
1665
- title: "Insufficient Funds",
1666
- message: "You don't have enough SOL for this transaction.",
1667
- actionText: "Add Funds",
1668
- showRetry: false
1669
- };
1670
- default:
1671
- return {
1672
- title: "Something went wrong",
1673
- message: "An unexpected error occurred. Please try again.",
1674
- actionText: "Retry",
1675
- showRetry: error.recoverable
1676
- };
1677
- }
1678
- }, [error.type, error.recoverable]);
1679
- return /* @__PURE__ */ jsxRuntime.jsxs(
1680
- "div",
1681
- {
1682
- style: {
1683
- display: "flex",
1684
- flexDirection: "column",
1685
- alignItems: "center",
1686
- justifyContent: "center",
1687
- padding: "2rem",
1688
- textAlign: "center",
1689
- borderRadius: "12px",
1690
- border: "1px solid #e5e7eb",
1691
- backgroundColor: "#fafafa",
1692
- maxWidth: "400px",
1693
- margin: "0 auto"
1694
- },
1695
- children: [
1696
- /* @__PURE__ */ jsxRuntime.jsx(
1697
- "div",
1698
- {
1699
- style: {
1700
- width: "48px",
1701
- height: "48px",
1702
- borderRadius: "50%",
1703
- backgroundColor: "#fee2e2",
1704
- display: "flex",
1705
- alignItems: "center",
1706
- justifyContent: "center",
1707
- marginBottom: "1rem"
1708
- },
1709
- children: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "#dc2626", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z" }) })
1710
- }
1711
- ),
1712
- /* @__PURE__ */ jsxRuntime.jsx(
1713
- "h3",
1714
- {
1715
- style: {
1716
- margin: "0 0 0.5rem 0",
1717
- fontSize: "1.125rem",
1718
- fontWeight: "600",
1719
- color: "#111827"
1720
- },
1721
- children: title
1722
- }
1723
- ),
1724
- /* @__PURE__ */ jsxRuntime.jsx(
1725
- "p",
1726
- {
1727
- style: {
1728
- margin: "0 0 1.5rem 0",
1729
- fontSize: "0.875rem",
1730
- color: "#6b7280",
1731
- lineHeight: "1.5"
1732
- },
1733
- children: message
1734
- }
1735
- ),
1736
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", gap: "0.75rem", flexWrap: "wrap" }, children: [
1737
- showRetry && /* @__PURE__ */ jsxRuntime.jsx(
1738
- "button",
1739
- {
1740
- onClick: handleRetry,
1741
- disabled: isPending || isRetrying,
1742
- style: {
1743
- padding: "0.5rem 1rem",
1744
- backgroundColor: "#3b82f6",
1745
- color: "white",
1746
- border: "none",
1747
- borderRadius: "6px",
1748
- fontSize: "0.875rem",
1749
- fontWeight: "500",
1750
- cursor: isPending || isRetrying ? "wait" : "pointer",
1751
- opacity: isPending || isRetrying ? 0.7 : 1,
1752
- transition: "all 0.2s"
1753
- },
1754
- children: isRetrying ? "Retrying..." : actionText
1755
- }
1756
- ),
1757
- /* @__PURE__ */ jsxRuntime.jsx(
1758
- "button",
1759
- {
1760
- onClick: () => window.location.reload(),
1761
- style: {
1762
- padding: "0.5rem 1rem",
1763
- backgroundColor: "transparent",
1764
- color: "#6b7280",
1765
- border: "1px solid #d1d5db",
1766
- borderRadius: "6px",
1767
- fontSize: "0.875rem",
1768
- fontWeight: "500",
1769
- cursor: "pointer",
1770
- transition: "all 0.2s"
1771
- },
1772
- children: "Refresh Page"
1773
- }
1774
- )
1775
- ] }),
1776
- process.env.NODE_ENV === "development" && /* @__PURE__ */ jsxRuntime.jsxs(
1777
- "details",
1778
- {
1779
- style: {
1780
- marginTop: "1rem",
1781
- fontSize: "0.75rem",
1782
- color: "#6b7280",
1783
- width: "100%"
1784
- },
1785
- children: [
1786
- /* @__PURE__ */ jsxRuntime.jsx("summary", { style: { cursor: "pointer", marginBottom: "0.5rem" }, children: "Error Details" }),
1787
- /* @__PURE__ */ jsxRuntime.jsx(
1788
- "pre",
1789
- {
1790
- style: {
1791
- whiteSpace: "pre-wrap",
1792
- wordBreak: "break-all",
1793
- backgroundColor: "#f3f4f6",
1794
- padding: "0.5rem",
1795
- borderRadius: "4px",
1796
- overflow: "auto",
1797
- maxHeight: "200px"
1798
- },
1799
- children: error.message
1800
- }
1801
- )
1802
- ]
1803
- }
1804
- )
1805
- ]
1806
- }
1807
- );
1808
- }
1809
- function withErrorBoundary(Component2, errorBoundaryProps) {
1810
- let WrappedComponent = (props) => /* @__PURE__ */ jsxRuntime.jsx(ConnectorErrorBoundary, { ...errorBoundaryProps, children: /* @__PURE__ */ jsxRuntime.jsx(Component2, { ...props }) });
1811
- return WrappedComponent.displayName = `withErrorBoundary(${Component2.displayName || Component2.name})`, WrappedComponent;
1812
- }
1813
- var logger7 = chunk64LV76OK_js.createLogger("Polyfills"), installed = false;
1937
+ var logger6 = chunkSITQ4JWM_js.createLogger("Polyfills"), installed = false;
1814
1938
  function installPolyfills() {
1815
1939
  if (!(installed || typeof window > "u"))
1816
1940
  try {
1817
- webcryptoEd25519Polyfill.install(), installed = true, logger7.info("Browser compatibility polyfills installed");
1941
+ webcryptoEd25519Polyfill.install(), installed = true, logger6.info("Browser compatibility polyfills installed");
1818
1942
  } catch (error) {
1819
- logger7 && logger7.warn("Failed to install polyfills", { error }), installed = true;
1943
+ logger6 && logger6.warn("Failed to install polyfills", { error }), installed = true;
1820
1944
  }
1821
1945
  }
1822
1946
  function isPolyfillInstalled() {
@@ -1837,18 +1961,18 @@ function getPolyfillStatus() {
1837
1961
  environment: typeof window < "u" ? "browser" : "server"
1838
1962
  };
1839
1963
  }
1840
- var logger8 = chunk64LV76OK_js.createLogger("EnhancedStorage"), STORAGE_VERSION = "v1", EnhancedStorage = class extends core.Storage {
1964
+ var logger7 = chunkSITQ4JWM_js.createLogger("EnhancedStorage"), STORAGE_VERSION = "v1", EnhancedStorage = class extends core.Storage {
1841
1965
  constructor(key, initial, options) {
1842
1966
  super(key, initial);
1843
1967
  this.options = options;
1844
- chunk64LV76OK_js.__publicField(this, "errorHandlers", /* @__PURE__ */ new Set());
1845
- chunk64LV76OK_js.__publicField(this, "validators", []);
1846
- chunk64LV76OK_js.__publicField(this, "memoryFallback");
1968
+ chunkSITQ4JWM_js.__publicField(this, "errorHandlers", /* @__PURE__ */ new Set());
1969
+ chunkSITQ4JWM_js.__publicField(this, "validators", []);
1970
+ chunkSITQ4JWM_js.__publicField(this, "memoryFallback");
1847
1971
  this.memoryFallback = initial, options?.onError && this.errorHandlers.add(options.onError), options?.validator && this.validators.push(options.validator);
1848
1972
  }
1849
1973
  set(value) {
1850
1974
  try {
1851
- return this.validate(value) ? (super.set(value), this.memoryFallback = value, true) : (logger8.warn("Validation failed", { key: this.key }), false);
1975
+ return this.validate(value) ? (super.set(value), this.memoryFallback = value, true) : (logger7.warn("Validation failed", { key: this.key }), false);
1852
1976
  } catch (error) {
1853
1977
  return this.handleError(error), this.options?.useMemoryFallback ? (this.memoryFallback = value, true) : false;
1854
1978
  }
@@ -1905,11 +2029,11 @@ var logger8 = chunk64LV76OK_js.createLogger("EnhancedStorage"), STORAGE_VERSION
1905
2029
  }
1906
2030
  }
1907
2031
  handleError(error) {
1908
- logger8.error("Storage error", { key: this.key, error }), this.errorHandlers.forEach((handler) => {
2032
+ logger7.error("Storage error", { key: this.key, error }), this.errorHandlers.forEach((handler) => {
1909
2033
  try {
1910
2034
  handler(error);
1911
2035
  } catch (err) {
1912
- logger8.error("Error in error handler", { error: err });
2036
+ logger7.error("Error in error handler", { error: err });
1913
2037
  }
1914
2038
  });
1915
2039
  }
@@ -1937,6 +2061,53 @@ function createEnhancedStorageWallet(options) {
1937
2061
  useMemoryFallback: true
1938
2062
  });
1939
2063
  }
2064
+ var WALLET_STATE_VERSION = 1;
2065
+ function createEnhancedStorageWalletState(options) {
2066
+ let key = options?.key ?? `connector-kit:${STORAGE_VERSION}:wallet-state`, legacyKey = `connector-kit:${STORAGE_VERSION}:wallet`, storage = new EnhancedStorage(key, options?.initial ?? null, {
2067
+ onError: options?.onError,
2068
+ useMemoryFallback: true
2069
+ });
2070
+ if (typeof window < "u" && storage.isAvailable())
2071
+ try {
2072
+ if (!storage.get()) {
2073
+ let legacyValue = window.localStorage.getItem(legacyKey);
2074
+ if (legacyValue) {
2075
+ let legacyWalletName = JSON.parse(legacyValue);
2076
+ if (legacyWalletName && typeof legacyWalletName == "string") {
2077
+ let connectorId = options?.migrateLegacy ? options.migrateLegacy(legacyWalletName) : createConnectorId(legacyWalletName);
2078
+ if (connectorId) {
2079
+ let migratedState = {
2080
+ version: WALLET_STATE_VERSION,
2081
+ connectorId,
2082
+ autoConnect: true,
2083
+ lastConnected: (/* @__PURE__ */ new Date()).toISOString()
2084
+ };
2085
+ storage.set(migratedState), logger7.info("Migrated legacy wallet storage", {
2086
+ from: legacyWalletName,
2087
+ to: connectorId
2088
+ }), window.localStorage.removeItem(legacyKey);
2089
+ }
2090
+ }
2091
+ }
2092
+ }
2093
+ } catch (error) {
2094
+ logger7.warn("Failed to migrate legacy wallet storage", { error });
2095
+ }
2096
+ return storage;
2097
+ }
2098
+ function saveWalletState(storage, connectorId, account, autoConnect = true) {
2099
+ let state = {
2100
+ version: WALLET_STATE_VERSION,
2101
+ connectorId,
2102
+ lastAccount: account,
2103
+ autoConnect,
2104
+ lastConnected: (/* @__PURE__ */ new Date()).toISOString()
2105
+ };
2106
+ storage.set(state);
2107
+ }
2108
+ function clearWalletState(storage) {
2109
+ storage.set(null);
2110
+ }
1940
2111
  var EnhancedStorageAdapter = class {
1941
2112
  constructor(storage) {
1942
2113
  this.storage = storage;
@@ -1972,7 +2143,7 @@ var EnhancedStorageAdapter = class {
1972
2143
  return this.storage.onError(handler), this;
1973
2144
  }
1974
2145
  };
1975
- var logger9 = chunk64LV76OK_js.createLogger("DefaultConfig");
2146
+ var logger8 = chunkSITQ4JWM_js.createLogger("DefaultConfig");
1976
2147
  function getDefaultConfig(options) {
1977
2148
  let {
1978
2149
  appName,
@@ -2002,7 +2173,7 @@ function getDefaultConfig(options) {
2002
2173
  ], validClusterIds = defaultClusters.map((c) => c.id), accountStorage = createEnhancedStorageAccount({
2003
2174
  validator: (address) => address ? addresses.isAddress(address) : true,
2004
2175
  onError: (error) => {
2005
- debug && logger9.error("Account Storage error", { error }), onError && onError(error, {
2176
+ debug && logger8.error("Account Storage error", { error }), onError && onError(error, {
2006
2177
  componentStack: "account-storage"
2007
2178
  });
2008
2179
  }
@@ -2011,13 +2182,13 @@ function getDefaultConfig(options) {
2011
2182
  initial: getInitialCluster(network),
2012
2183
  validClusters: persistClusterSelection ? validClusterIds : void 0,
2013
2184
  onError: (error) => {
2014
- debug && logger9.error("Cluster Storage error", { error }), onError && onError(error, {
2185
+ debug && logger8.error("Cluster Storage error", { error }), onError && onError(error, {
2015
2186
  componentStack: "cluster-storage"
2016
2187
  });
2017
2188
  }
2018
2189
  }), walletStorage = createEnhancedStorageWallet({
2019
2190
  onError: (error) => {
2020
- debug && logger9.error("Wallet Storage error", { error }), onError && onError(error, {
2191
+ debug && logger8.error("Wallet Storage error", { error }), onError && onError(error, {
2021
2192
  componentStack: "wallet-storage"
2022
2193
  });
2023
2194
  }
@@ -2059,7 +2230,9 @@ function buildWalletConnectConfig(walletConnect, appName, appUrl, clusterStorage
2059
2230
  if (!walletConnect) return;
2060
2231
  let configProjectId = typeof walletConnect == "object" ? walletConnect.projectId : void 0, envProjectId = typeof process < "u" ? process.env.NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID : void 0, projectId = configProjectId || envProjectId;
2061
2232
  if (!projectId) {
2062
- (typeof walletConnect == "object" || walletConnect === true) && logger9.warn("WalletConnect enabled but no project ID found. Set NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID or provide projectId in config.");
2233
+ (typeof walletConnect == "object" || walletConnect === true) && logger8.warn(
2234
+ "WalletConnect enabled but no project ID found. Set NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID or provide projectId in config."
2235
+ );
2063
2236
  return;
2064
2237
  }
2065
2238
  let origin = appUrl || (typeof window < "u" ? window.location.origin : "http://localhost:3000"), customMetadata = typeof walletConnect == "object" ? walletConnect.metadata : void 0, customDefaultChain = typeof walletConnect == "object" ? walletConnect.defaultChain : void 0, customRelayUrl = typeof walletConnect == "object" ? walletConnect.relayUrl : void 0;
@@ -2397,7 +2570,7 @@ async function copySignatureToClipboard(signature, options) {
2397
2570
  }
2398
2571
 
2399
2572
  // src/lib/transaction/transaction-validator.ts
2400
- var logger10 = chunk64LV76OK_js.createLogger("TransactionValidator"), MAX_TRANSACTION_SIZE = 1232, MIN_TRANSACTION_SIZE = 64, TransactionValidator = class {
2573
+ var logger9 = chunkSITQ4JWM_js.createLogger("TransactionValidator"), MAX_TRANSACTION_SIZE = 1232, MIN_TRANSACTION_SIZE = 64, TransactionValidator = class {
2401
2574
  /**
2402
2575
  * Validate a transaction before signing
2403
2576
  *
@@ -2420,7 +2593,7 @@ var logger10 = chunk64LV76OK_js.createLogger("TransactionValidator"), MAX_TRANSA
2420
2593
  try {
2421
2594
  serialized = transaction.serialize();
2422
2595
  } catch (serializeError) {
2423
- logger10.debug("Transaction not yet serializable (may need signing)", {
2596
+ logger9.debug("Transaction not yet serializable (may need signing)", {
2424
2597
  error: serializeError instanceof Error ? serializeError.message : String(serializeError)
2425
2598
  });
2426
2599
  }
@@ -2430,10 +2603,10 @@ var logger10 = chunk64LV76OK_js.createLogger("TransactionValidator"), MAX_TRANSA
2430
2603
  return errors.push(
2431
2604
  "Transaction type not recognized - must be a Transaction object with serialize() or Uint8Array"
2432
2605
  ), { valid: false, errors, warnings };
2433
- serialized && (size = serialized.length, size > maxSize && (errors.push(`Transaction too large: ${size} bytes (max ${maxSize} bytes)`), logger10.warn("Transaction exceeds maximum size", { size, maxSize })), size < minSize && warnings.push(`Transaction is very small: ${size} bytes (min recommended ${minSize} bytes)`), size === 0 && errors.push("Transaction is empty (0 bytes)"), this.hasSuspiciousPattern(serialized) && warnings.push("Transaction contains unusual patterns - please review carefully"));
2606
+ serialized && (size = serialized.length, size > maxSize && (errors.push(`Transaction too large: ${size} bytes (max ${maxSize} bytes)`), logger9.warn("Transaction exceeds maximum size", { size, maxSize })), size < minSize && warnings.push(`Transaction is very small: ${size} bytes (min recommended ${minSize} bytes)`), size === 0 && errors.push("Transaction is empty (0 bytes)"), this.hasSuspiciousPattern(serialized) && warnings.push("Transaction contains unusual patterns - please review carefully"));
2434
2607
  } catch (error) {
2435
2608
  let errorMessage = error instanceof Error ? error.message : String(error);
2436
- errors.push(`Transaction validation failed: ${errorMessage}`), logger10.error("Validation error", { error: errorMessage });
2609
+ errors.push(`Transaction validation failed: ${errorMessage}`), logger9.error("Validation error", { error: errorMessage });
2437
2610
  }
2438
2611
  if (checkDuplicateSignatures && typeof transaction == "object" && "signatures" in transaction) {
2439
2612
  let signatures = transaction.signatures;
@@ -2446,7 +2619,7 @@ var logger10 = chunk64LV76OK_js.createLogger("TransactionValidator"), MAX_TRANSA
2446
2619
  }
2447
2620
  strict && warnings.length > 0 && (errors.push(...warnings.map((w) => `Strict mode: ${w}`)), warnings.length = 0);
2448
2621
  let valid = errors.length === 0;
2449
- return valid ? warnings.length > 0 ? logger10.debug("Transaction validation passed with warnings", { warnings, size }) : logger10.debug("Transaction validation passed", { size }) : logger10.warn("Transaction validation failed", { errors, size }), {
2622
+ return valid ? warnings.length > 0 ? logger9.debug("Transaction validation passed with warnings", { warnings, size }) : logger9.debug("Transaction validation passed", { size }) : logger9.warn("Transaction validation failed", { errors, size }), {
2450
2623
  valid,
2451
2624
  errors,
2452
2625
  warnings,
@@ -2486,7 +2659,7 @@ var logger10 = chunk64LV76OK_js.createLogger("TransactionValidator"), MAX_TRANSA
2486
2659
  let result = this.validate(transaction, options);
2487
2660
  if (!result.valid)
2488
2661
  throw new Error(`Transaction validation failed: ${result.errors.join(", ")}`);
2489
- result.warnings.length > 0 && logger10.warn("Transaction validation warnings", { warnings: result.warnings });
2662
+ result.warnings.length > 0 && logger9.warn("Transaction validation warnings", { warnings: result.warnings });
2490
2663
  }
2491
2664
  /**
2492
2665
  * Batch validate multiple transactions
@@ -2497,10 +2670,10 @@ var logger10 = chunk64LV76OK_js.createLogger("TransactionValidator"), MAX_TRANSA
2497
2670
  * @returns Array of validation results
2498
2671
  */
2499
2672
  static validateBatch(transactions, options) {
2500
- return transactions.map((tx, index) => (logger10.debug(`Validating transaction ${index + 1}/${transactions.length}`), this.validate(tx, options)));
2673
+ return transactions.map((tx, index) => (logger9.debug(`Validating transaction ${index + 1}/${transactions.length}`), this.validate(tx, options)));
2501
2674
  }
2502
2675
  };
2503
- var logger11 = chunk64LV76OK_js.createLogger("TransactionSigner");
2676
+ var logger10 = chunkSITQ4JWM_js.createLogger("TransactionSigner");
2504
2677
  function signatureBytesToBase58(bytes) {
2505
2678
  if (bytes.length !== 64)
2506
2679
  throw new Error(`Invalid signature length: expected 64 bytes, got ${bytes.length}`);
@@ -2522,6 +2695,24 @@ function extractSignatureString(result) {
2522
2695
  }
2523
2696
  throw new Error("Unexpected wallet response format for signAndSendTransaction");
2524
2697
  }
2698
+ function extractSignatureBytes(result) {
2699
+ if (result instanceof Uint8Array)
2700
+ return result;
2701
+ if (Array.isArray(result)) {
2702
+ let [first] = result;
2703
+ if (!first)
2704
+ throw new Error("Wallet returned empty results array");
2705
+ return extractSignatureBytes(first);
2706
+ }
2707
+ if (result && typeof result == "object") {
2708
+ let record = result;
2709
+ if ("signature" in record)
2710
+ return extractSignatureBytes(record.signature);
2711
+ if (Array.isArray(record.signatures) && record.signatures.length > 0)
2712
+ return extractSignatureBytes(record.signatures[0]);
2713
+ }
2714
+ throw new Error("Unexpected wallet response format for signMessage");
2715
+ }
2525
2716
  function createTransactionSigner(config) {
2526
2717
  let { wallet, account, cluster, eventEmitter } = config;
2527
2718
  if (!wallet || !account)
@@ -2535,14 +2726,14 @@ function createTransactionSigner(config) {
2535
2726
  address,
2536
2727
  async signTransaction(transaction) {
2537
2728
  if (!capabilities.canSign)
2538
- throw chunk64LV76OK_js.Errors.featureNotSupported("transaction signing");
2729
+ throw chunkSITQ4JWM_js.Errors.featureNotSupported("transaction signing");
2539
2730
  let validation = TransactionValidator.validate(transaction);
2540
2731
  if (!validation.valid)
2541
- throw logger11.error("Transaction validation failed", { errors: validation.errors }), chunk64LV76OK_js.Errors.invalidTransaction(validation.errors.join(", "));
2542
- validation.warnings.length > 0 && logger11.warn("Transaction validation warnings", { warnings: validation.warnings });
2732
+ throw logger10.error("Transaction validation failed", { errors: validation.errors }), chunkSITQ4JWM_js.Errors.invalidTransaction(validation.errors.join(", "));
2733
+ validation.warnings.length > 0 && logger10.warn("Transaction validation warnings", { warnings: validation.warnings });
2543
2734
  try {
2544
2735
  let signFeature = features["solana:signTransaction"], { serialized, wasWeb3js } = chunk4KD6HQQG_js.prepareTransactionForWallet(transaction);
2545
- logger11.debug("Signing transaction", {
2736
+ logger10.debug("Signing transaction", {
2546
2737
  wasWeb3js,
2547
2738
  serializedLength: serialized.length,
2548
2739
  serializedType: serialized.constructor.name,
@@ -2551,26 +2742,26 @@ function createTransactionSigner(config) {
2551
2742
  });
2552
2743
  let result, usedFormat = "";
2553
2744
  try {
2554
- logger11.debug("Trying array format: transactions: [Uint8Array]"), result = await signFeature.signTransaction({
2745
+ logger10.debug("Trying array format: transactions: [Uint8Array]"), result = await signFeature.signTransaction({
2555
2746
  account,
2556
2747
  transactions: [serialized],
2557
2748
  ...cluster ? { chain: cluster.id } : {}
2558
2749
  }), usedFormat = "array";
2559
2750
  } catch (err1) {
2560
2751
  let error1 = err1 instanceof Error ? err1 : new Error(String(err1));
2561
- logger11.debug("Array format failed, trying singular format", { error: error1.message });
2752
+ logger10.debug("Array format failed, trying singular format", { error: error1.message });
2562
2753
  try {
2563
- logger11.debug("Trying singular format: transaction: Uint8Array"), result = await signFeature.signTransaction({
2754
+ logger10.debug("Trying singular format: transaction: Uint8Array"), result = await signFeature.signTransaction({
2564
2755
  account,
2565
2756
  transaction: serialized,
2566
2757
  ...cluster ? { chain: cluster.id } : {}
2567
2758
  }), usedFormat = "singular";
2568
2759
  } catch (err2) {
2569
2760
  let error2 = err2 instanceof Error ? err2 : new Error(String(err2));
2570
- throw logger11.error("Both array and singular formats failed", { error: error2.message }), error2;
2761
+ throw logger10.error("Both array and singular formats failed", { error: error2.message }), error2;
2571
2762
  }
2572
2763
  }
2573
- logger11.debug("Wallet signed successfully", { format: usedFormat });
2764
+ logger10.debug("Wallet signed successfully", { format: usedFormat });
2574
2765
  let signedTx;
2575
2766
  if (Array.isArray(result.signedTransactions) && result.signedTransactions[0])
2576
2767
  signedTx = result.signedTransactions[0];
@@ -2582,31 +2773,31 @@ function createTransactionSigner(config) {
2582
2773
  signedTx = result;
2583
2774
  else
2584
2775
  throw new Error(`Unexpected wallet response format: ${JSON.stringify(Object.keys(result))}`);
2585
- if (logger11.debug("Extracted signed transaction", {
2776
+ if (logger10.debug("Extracted signed transaction", {
2586
2777
  hasSignedTx: !!signedTx,
2587
2778
  signedTxType: signedTx?.constructor?.name,
2588
2779
  signedTxLength: signedTx?.length,
2589
2780
  isUint8Array: signedTx instanceof Uint8Array,
2590
2781
  hasSerialize: typeof signedTx?.serialize == "function"
2591
2782
  }), signedTx && typeof signedTx.serialize == "function")
2592
- return logger11.debug("Wallet returned web3.js object directly, no conversion needed"), signedTx;
2783
+ return logger10.debug("Wallet returned web3.js object directly, no conversion needed"), signedTx;
2593
2784
  if (signedTx && signedTx.signedTransaction) {
2594
- logger11.debug("Found signedTransaction property");
2785
+ logger10.debug("Found signedTransaction property");
2595
2786
  let bytes = signedTx.signedTransaction;
2596
2787
  if (bytes instanceof Uint8Array)
2597
2788
  return await chunk4KD6HQQG_js.convertSignedTransaction(bytes, wasWeb3js);
2598
2789
  }
2599
2790
  if (signedTx instanceof Uint8Array)
2600
2791
  return await chunk4KD6HQQG_js.convertSignedTransaction(signedTx, wasWeb3js);
2601
- throw logger11.error("Unexpected wallet response format", {
2792
+ throw logger10.error("Unexpected wallet response format", {
2602
2793
  type: typeof signedTx,
2603
2794
  constructor: signedTx?.constructor?.name
2604
- }), new chunk64LV76OK_js.ValidationError(
2795
+ }), new chunkSITQ4JWM_js.ValidationError(
2605
2796
  "INVALID_FORMAT",
2606
2797
  "Wallet returned unexpected format - not a Transaction or Uint8Array"
2607
2798
  );
2608
2799
  } catch (error) {
2609
- throw chunk64LV76OK_js.Errors.signingFailed(error);
2800
+ throw chunkSITQ4JWM_js.Errors.signingFailed(error);
2610
2801
  }
2611
2802
  },
2612
2803
  async signAllTransactions(transactions) {
@@ -2631,7 +2822,7 @@ function createTransactionSigner(config) {
2631
2822
  )
2632
2823
  );
2633
2824
  } catch (error) {
2634
- throw new chunk64LV76OK_js.TransactionError(
2825
+ throw new chunkSITQ4JWM_js.TransactionError(
2635
2826
  "SIGNING_FAILED",
2636
2827
  "Failed to sign transactions in batch",
2637
2828
  { count: transactions.length },
@@ -2639,14 +2830,14 @@ function createTransactionSigner(config) {
2639
2830
  );
2640
2831
  }
2641
2832
  if (!capabilities.canSign)
2642
- throw chunk64LV76OK_js.Errors.featureNotSupported("transaction signing");
2833
+ throw chunkSITQ4JWM_js.Errors.featureNotSupported("transaction signing");
2643
2834
  let signed = [];
2644
2835
  for (let i = 0; i < transactions.length; i++)
2645
2836
  try {
2646
2837
  let signedTx = await signer.signTransaction(transactions[i]);
2647
2838
  signed.push(signedTx);
2648
2839
  } catch (error) {
2649
- throw new chunk64LV76OK_js.TransactionError(
2840
+ throw new chunkSITQ4JWM_js.TransactionError(
2650
2841
  "SIGNING_FAILED",
2651
2842
  `Failed to sign transaction ${i + 1} of ${transactions.length}`,
2652
2843
  { index: i, total: transactions.length },
@@ -2657,7 +2848,7 @@ function createTransactionSigner(config) {
2657
2848
  },
2658
2849
  async signAndSendTransaction(transaction, options) {
2659
2850
  if (!capabilities.canSend)
2660
- throw chunk64LV76OK_js.Errors.featureNotSupported("sending transactions");
2851
+ throw chunkSITQ4JWM_js.Errors.featureNotSupported("sending transactions");
2661
2852
  try {
2662
2853
  let sendFeature = features["solana:signAndSendTransaction"], { serialized } = chunk4KD6HQQG_js.prepareTransactionForWallet(transaction);
2663
2854
  eventEmitter && eventEmitter.emit({
@@ -2694,21 +2885,21 @@ function createTransactionSigner(config) {
2694
2885
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
2695
2886
  }), signature;
2696
2887
  } catch (error) {
2697
- throw new chunk64LV76OK_js.TransactionError("SEND_FAILED", "Failed to send transaction", void 0, error);
2888
+ throw new chunkSITQ4JWM_js.TransactionError("SEND_FAILED", "Failed to send transaction", void 0, error);
2698
2889
  }
2699
2890
  },
2700
2891
  async signAndSendTransactions(transactions, options) {
2701
2892
  if (transactions.length === 0)
2702
2893
  return [];
2703
2894
  if (!capabilities.canSend)
2704
- throw chunk64LV76OK_js.Errors.featureNotSupported("sending transactions");
2895
+ throw chunkSITQ4JWM_js.Errors.featureNotSupported("sending transactions");
2705
2896
  let signatures = [];
2706
2897
  for (let i = 0; i < transactions.length; i++)
2707
2898
  try {
2708
2899
  let sig = await signer.signAndSendTransaction(transactions[i], options);
2709
2900
  signatures.push(sig);
2710
2901
  } catch (error) {
2711
- throw new chunk64LV76OK_js.TransactionError(
2902
+ throw new chunkSITQ4JWM_js.TransactionError(
2712
2903
  "SEND_FAILED",
2713
2904
  `Failed to send transaction ${i + 1} of ${transactions.length}`,
2714
2905
  { index: i, total: transactions.length },
@@ -2720,13 +2911,14 @@ function createTransactionSigner(config) {
2720
2911
  ...capabilities.canSignMessage && {
2721
2912
  async signMessage(message) {
2722
2913
  try {
2723
- return (await features["solana:signMessage"].signMessage({
2914
+ let result = await features["solana:signMessage"].signMessage({
2724
2915
  account,
2725
2916
  message,
2726
2917
  ...cluster ? { chain: cluster.id } : {}
2727
- })).signature;
2918
+ });
2919
+ return extractSignatureBytes(result);
2728
2920
  } catch (error) {
2729
- throw new chunk64LV76OK_js.TransactionError("SIGNING_FAILED", "Failed to sign message", void 0, error);
2921
+ throw new chunkSITQ4JWM_js.TransactionError("SIGNING_FAILED", "Failed to sign message", void 0, error);
2730
2922
  }
2731
2923
  }
2732
2924
  },
@@ -2736,16 +2928,16 @@ function createTransactionSigner(config) {
2736
2928
  };
2737
2929
  return signer;
2738
2930
  }
2739
- var TransactionSignerError = class extends chunk64LV76OK_js.TransactionError {
2931
+ var TransactionSignerError = class extends chunkSITQ4JWM_js.TransactionError {
2740
2932
  constructor(message, code, originalError) {
2741
2933
  let newCode = code === "WALLET_NOT_CONNECTED" ? "FEATURE_NOT_SUPPORTED" : code;
2742
2934
  super(newCode, message, void 0, originalError), this.name = "TransactionSignerError";
2743
2935
  }
2744
2936
  };
2745
2937
  function isTransactionSignerError(error) {
2746
- return error instanceof TransactionSignerError || error instanceof chunk64LV76OK_js.TransactionError;
2938
+ return error instanceof TransactionSignerError || error instanceof chunkSITQ4JWM_js.TransactionError;
2747
2939
  }
2748
- var logger12 = chunk64LV76OK_js.createLogger("KitTransactionSigner");
2940
+ var logger11 = chunkSITQ4JWM_js.createLogger("KitTransactionSigner");
2749
2941
  function encodeShortVecLength(value) {
2750
2942
  let bytes = [], remaining = value;
2751
2943
  for (; remaining >= 128; )
@@ -2820,7 +3012,7 @@ function createKitTransactionSigner(connectorSigner) {
2820
3012
  async modifyAndSignTransactions(transactions$1) {
2821
3013
  let transactionData = transactions$1.map((tx) => {
2822
3014
  let messageBytes = new Uint8Array(tx.messageBytes), { numSigners } = parseMessageSigners(messageBytes), wireFormat = createTransactionBytesForSigning(messageBytes, numSigners);
2823
- return logger12.debug("Preparing wire format for wallet", {
3015
+ return logger11.debug("Preparing wire format for wallet", {
2824
3016
  signerAddress,
2825
3017
  messageBytesLength: messageBytes.length,
2826
3018
  wireFormatLength: wireFormat.length,
@@ -2849,14 +3041,14 @@ function createKitTransactionSigner(connectorSigner) {
2849
3041
  throw new Error("Web3.js transaction without serialize method");
2850
3042
  } else
2851
3043
  throw new Error("Unknown signed transaction format");
2852
- if (logger12.debug("Wallet returned signed transaction", {
3044
+ if (logger11.debug("Wallet returned signed transaction", {
2853
3045
  returnedLength: signedTxBytes.length,
2854
3046
  sentLength: wireFormat.length,
2855
3047
  lengthsMatch: signedTxBytes.length === wireFormat.length,
2856
3048
  signedFirstBytes: Array.from(signedTxBytes.slice(0, 20)),
2857
3049
  sentFirstBytes: Array.from(wireFormat.slice(0, 20))
2858
3050
  }), signedTxBytes.length !== wireFormat.length) {
2859
- logger12.warn("Wallet modified transaction! Using wallet version", {
3051
+ logger11.warn("Wallet modified transaction! Using wallet version", {
2860
3052
  originalLength: wireFormat.length,
2861
3053
  modifiedLength: signedTxBytes.length,
2862
3054
  difference: signedTxBytes.length - wireFormat.length
@@ -2867,13 +3059,13 @@ function createKitTransactionSigner(connectorSigner) {
2867
3059
  lifetimeConstraint: originalWithLifetime.lifetimeConstraint
2868
3060
  } : {}
2869
3061
  };
2870
- return logger12.debug("Using modified transaction from wallet", {
3062
+ return logger11.debug("Using modified transaction from wallet", {
2871
3063
  modifiedMessageBytesLength: walletTransaction.messageBytes.length,
2872
3064
  signatures: Object.keys(walletTransaction.signatures)
2873
3065
  }), transactions.assertIsTransactionWithinSizeLimit(result), result;
2874
3066
  }
2875
3067
  let extractedSignatureBytes = extractSignature(signedTxBytes), signatureBase58 = codecs.getBase58Decoder().decode(extractedSignatureBytes);
2876
- logger12.debug("Extracted signature from wallet (unmodified)", {
3068
+ logger11.debug("Extracted signature from wallet (unmodified)", {
2877
3069
  signerAddress,
2878
3070
  signatureLength: extractedSignatureBytes.length,
2879
3071
  signatureBase58
@@ -2888,7 +3080,7 @@ function createKitTransactionSigner(connectorSigner) {
2888
3080
  };
2889
3081
  return transactions.assertIsTransactionWithinSizeLimit(signedTransaction), signedTransaction;
2890
3082
  } catch (error) {
2891
- return logger12.error("Failed to decode signed transaction", { error }), transactions.assertIsTransactionWithinSizeLimit(originalTransaction), originalTransaction;
3083
+ return logger11.error("Failed to decode signed transaction", { error }), transactions.assertIsTransactionWithinSizeLimit(originalTransaction), originalTransaction;
2892
3084
  }
2893
3085
  });
2894
3086
  }
@@ -2898,18 +3090,21 @@ var createGillTransactionSigner = createKitTransactionSigner;
2898
3090
 
2899
3091
  exports.ClipboardErrorType = ClipboardErrorType;
2900
3092
  exports.ConnectorClient = ConnectorClient;
2901
- exports.ConnectorErrorBoundary = ConnectorErrorBoundary;
2902
3093
  exports.EnhancedStorage = EnhancedStorage;
2903
3094
  exports.EnhancedStorageAdapter = EnhancedStorageAdapter;
3095
+ exports.INITIAL_WALLET_STATUS = INITIAL_WALLET_STATUS;
2904
3096
  exports.PUBLIC_RPC_ENDPOINTS = PUBLIC_RPC_ENDPOINTS;
2905
3097
  exports.TransactionSignerError = TransactionSignerError;
2906
- exports.WalletErrorType = WalletErrorType;
3098
+ exports.WALLET_STATE_VERSION = WALLET_STATE_VERSION;
3099
+ exports.clearWalletState = clearWalletState;
2907
3100
  exports.copyAddressToClipboard = copyAddressToClipboard;
2908
3101
  exports.copySignatureToClipboard = copySignatureToClipboard;
2909
3102
  exports.copyToClipboard = copyToClipboard;
3103
+ exports.createConnectorId = createConnectorId;
2910
3104
  exports.createEnhancedStorageAccount = createEnhancedStorageAccount;
2911
3105
  exports.createEnhancedStorageCluster = createEnhancedStorageCluster;
2912
3106
  exports.createEnhancedStorageWallet = createEnhancedStorageWallet;
3107
+ exports.createEnhancedStorageWalletState = createEnhancedStorageWalletState;
2913
3108
  exports.createGillTransactionSigner = createGillTransactionSigner;
2914
3109
  exports.createKitTransactionSigner = createKitTransactionSigner;
2915
3110
  exports.createTransactionSigner = createTransactionSigner;
@@ -2936,26 +3131,34 @@ exports.getNetworkDisplayName = getNetworkDisplayName;
2936
3131
  exports.getPolyfillStatus = getPolyfillStatus;
2937
3132
  exports.getTokenUrl = getTokenUrl;
2938
3133
  exports.getTransactionUrl = getTransactionUrl;
3134
+ exports.getWalletNameFromConnectorId = getWalletNameFromConnectorId;
2939
3135
  exports.getWalletsRegistry = getWalletsRegistry;
2940
3136
  exports.installPolyfills = installPolyfills;
2941
3137
  exports.isClipboardAvailable = isClipboardAvailable;
3138
+ exports.isConnected = isConnected;
3139
+ exports.isConnecting = isConnecting;
2942
3140
  exports.isCryptoAvailable = isCryptoAvailable;
2943
3141
  exports.isDevnet = isDevnet;
2944
3142
  exports.isDevnetCluster = isDevnetCluster;
3143
+ exports.isDisconnected = isDisconnected;
2945
3144
  exports.isLocalCluster = isLocalCluster;
2946
3145
  exports.isLocalnet = isLocalnet;
2947
3146
  exports.isMainnet = isMainnet;
2948
3147
  exports.isMainnetCluster = isMainnetCluster;
2949
3148
  exports.isPolyfillInstalled = isPolyfillInstalled;
3149
+ exports.isStatusError = isStatusError;
2950
3150
  exports.isTestnet = isTestnet;
2951
3151
  exports.isTestnetCluster = isTestnetCluster;
2952
3152
  exports.isTransactionSignerError = isTransactionSignerError;
3153
+ exports.isWalletConnectorId = isWalletConnectorId;
3154
+ exports.isWalletStatusError = isWalletStatusError;
2953
3155
  exports.normalizeNetwork = normalizeNetwork;
2954
3156
  exports.parseConfigOptions = parseConfigOptions;
2955
3157
  exports.ready = ready;
3158
+ exports.saveWalletState = saveWalletState;
2956
3159
  exports.toClusterId = toClusterId;
3160
+ exports.toLegacyWalletState = toLegacyWalletState;
2957
3161
  exports.truncate = truncate;
2958
3162
  exports.validateConfigOptions = validateConfigOptions;
2959
- exports.withErrorBoundary = withErrorBoundary;
2960
- //# sourceMappingURL=chunk-6AJJJG5B.js.map
2961
- //# sourceMappingURL=chunk-6AJJJG5B.js.map
3163
+ //# sourceMappingURL=chunk-BZ2VBJCZ.js.map
3164
+ //# sourceMappingURL=chunk-BZ2VBJCZ.js.map