@solana/connector 0.1.9 → 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 (62) hide show
  1. package/README.md +403 -50
  2. package/dist/chunk-4KD6HQQG.js +69 -0
  3. package/dist/chunk-4KD6HQQG.js.map +1 -0
  4. package/dist/chunk-BJAVJQLK.js +230 -0
  5. package/dist/chunk-BJAVJQLK.js.map +1 -0
  6. package/dist/{chunk-5HRJKCIL.js → chunk-BZ2VBJCZ.js} +1061 -424
  7. package/dist/chunk-BZ2VBJCZ.js.map +1 -0
  8. package/dist/{chunk-WDXEP4AJ.js → chunk-EM4KNOKG.js} +658 -190
  9. package/dist/chunk-EM4KNOKG.js.map +1 -0
  10. package/dist/chunk-HN5AJF7F.js +507 -0
  11. package/dist/chunk-HN5AJF7F.js.map +1 -0
  12. package/dist/chunk-HO6QNKFM.mjs +61 -0
  13. package/dist/chunk-HO6QNKFM.mjs.map +1 -0
  14. package/dist/chunk-HPQ5T32K.mjs +178 -0
  15. package/dist/chunk-HPQ5T32K.mjs.map +1 -0
  16. package/dist/{chunk-MAXA3HEP.mjs → chunk-IDTUFDNB.mjs} +962 -344
  17. package/dist/chunk-IDTUFDNB.mjs.map +1 -0
  18. package/dist/{chunk-P5LXUDP6.mjs → chunk-RTXUS5KG.mjs} +579 -119
  19. package/dist/chunk-RTXUS5KG.mjs.map +1 -0
  20. package/dist/{chunk-DSUCH44G.js → chunk-SITQ4JWM.js} +23 -67
  21. package/dist/chunk-SITQ4JWM.js.map +1 -0
  22. package/dist/chunk-UCISIAOG.mjs +501 -0
  23. package/dist/chunk-UCISIAOG.mjs.map +1 -0
  24. package/dist/{chunk-J7DHGLW6.mjs → chunk-ZZTY3O4N.mjs} +21 -61
  25. package/dist/chunk-ZZTY3O4N.mjs.map +1 -0
  26. package/dist/compat.d.mts +1 -1
  27. package/dist/compat.d.ts +1 -1
  28. package/dist/compat.js +10 -9
  29. package/dist/compat.js.map +1 -1
  30. package/dist/compat.mjs +2 -1
  31. package/dist/compat.mjs.map +1 -1
  32. package/dist/headless.d.mts +239 -104
  33. package/dist/headless.d.ts +239 -104
  34. package/dist/headless.js +255 -169
  35. package/dist/headless.mjs +5 -3
  36. package/dist/index.d.mts +4 -4
  37. package/dist/index.d.ts +4 -4
  38. package/dist/index.js +316 -206
  39. package/dist/index.mjs +6 -4
  40. package/dist/react.d.mts +299 -9
  41. package/dist/react.d.ts +299 -9
  42. package/dist/react.js +90 -38
  43. package/dist/react.mjs +2 -2
  44. package/dist/{standard-shim-CT49DM5l.d.mts → standard-shim-CGB88PPO.d.mts} +673 -52
  45. package/dist/{standard-shim-D9guL5fz.d.ts → standard-shim-tmnQelaJ.d.ts} +673 -52
  46. package/dist/{transaction-signer-T-KVQFi8.d.mts → transaction-signer-7NaYmP5w.d.mts} +1 -0
  47. package/dist/{transaction-signer-T-KVQFi8.d.ts → transaction-signer-7NaYmP5w.d.ts} +1 -0
  48. package/dist/walletconnect-447EY3OJ.js +28 -0
  49. package/dist/walletconnect-447EY3OJ.js.map +1 -0
  50. package/dist/walletconnect-U455PO4I.mjs +3 -0
  51. package/dist/walletconnect-U455PO4I.mjs.map +1 -0
  52. package/package.json +6 -2
  53. package/dist/chunk-5HRJKCIL.js.map +0 -1
  54. package/dist/chunk-DSUCH44G.js.map +0 -1
  55. package/dist/chunk-I6TJLYNA.js +0 -535
  56. package/dist/chunk-I6TJLYNA.js.map +0 -1
  57. package/dist/chunk-J7DHGLW6.mjs.map +0 -1
  58. package/dist/chunk-JOBLG62A.mjs +0 -476
  59. package/dist/chunk-JOBLG62A.mjs.map +0 -1
  60. package/dist/chunk-MAXA3HEP.mjs.map +0 -1
  61. package/dist/chunk-P5LXUDP6.mjs.map +0 -1
  62. package/dist/chunk-WDXEP4AJ.js.map +0 -1
@@ -1,13 +1,57 @@
1
1
  'use strict';
2
2
 
3
- var chunkDSUCH44G_js = require('./chunk-DSUCH44G.js');
4
- var react = require('react');
5
- var jsxRuntime = require('react/jsx-runtime');
3
+ var chunk4KD6HQQG_js = require('./chunk-4KD6HQQG.js');
4
+ var chunkSITQ4JWM_js = require('./chunk-SITQ4JWM.js');
6
5
  var webcryptoEd25519Polyfill = require('@solana/webcrypto-ed25519-polyfill');
6
+ var core = require('@wallet-ui/core');
7
7
  var addresses = require('@solana/addresses');
8
+ var v4 = require('zod/v4');
8
9
  var codecs = require('@solana/codecs');
9
10
  var transactions = require('@solana/transactions');
10
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
+
11
55
  // src/lib/wallet/standard-shim.ts
12
56
  var registry = null, registryInitPromise = null, registryInitResolve = null, ready = new Promise((resolve, reject) => {
13
57
  if (typeof window > "u") {
@@ -96,7 +140,7 @@ function toClusterId(network) {
96
140
  function getDefaultRpcUrl(network) {
97
141
  let normalized = normalizeNetwork(network);
98
142
  try {
99
- return chunkDSUCH44G_js.getPublicSolanaRpcUrl(normalized);
143
+ return chunkSITQ4JWM_js.getPublicSolanaRpcUrl(normalized);
100
144
  } catch {
101
145
  return PUBLIC_RPC_ENDPOINTS[normalized] ?? PUBLIC_RPC_ENDPOINTS.localnet;
102
146
  }
@@ -151,14 +195,14 @@ function getClusterExplorerUrl(cluster, path) {
151
195
  }
152
196
  function getTransactionUrl(signature, cluster) {
153
197
  let clusterType = getClusterType(cluster), explorerCluster = clusterType === "custom" || clusterType === "localnet" ? "devnet" : clusterType;
154
- return chunkDSUCH44G_js.getExplorerLink({
198
+ return chunkSITQ4JWM_js.getExplorerLink({
155
199
  transaction: signature,
156
200
  cluster: explorerCluster === "mainnet" ? "mainnet" : explorerCluster
157
201
  });
158
202
  }
159
203
  function getAddressUrl(address, cluster) {
160
204
  let clusterType = getClusterType(cluster), explorerCluster = clusterType === "custom" || clusterType === "localnet" ? "devnet" : clusterType;
161
- return chunkDSUCH44G_js.getExplorerLink({
205
+ return chunkSITQ4JWM_js.getExplorerLink({
162
206
  address,
163
207
  cluster: explorerCluster === "mainnet" ? "mainnet" : explorerCluster
164
208
  });
@@ -221,9 +265,9 @@ var POLL_INTERVALS_MS = [1e3, 2e3, 3e3, 5e3, 5e3], DEFAULT_MAX_RETRIES = 3, DEFA
221
265
  // src/lib/core/state-manager.ts
222
266
  var StateManager = class {
223
267
  constructor(initialState) {
224
- chunkDSUCH44G_js.__publicField(this, "state");
225
- chunkDSUCH44G_js.__publicField(this, "listeners", /* @__PURE__ */ new Set());
226
- chunkDSUCH44G_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");
227
271
  this.state = initialState;
228
272
  }
229
273
  /**
@@ -282,10 +326,10 @@ var StateManager = class {
282
326
  };
283
327
 
284
328
  // src/lib/core/event-emitter.ts
285
- var logger = chunkDSUCH44G_js.createLogger("EventEmitter"), EventEmitter = class {
329
+ var logger = chunkSITQ4JWM_js.createLogger("EventEmitter"), EventEmitter = class {
286
330
  constructor(debug = false) {
287
- chunkDSUCH44G_js.__publicField(this, "listeners", /* @__PURE__ */ new Set());
288
- chunkDSUCH44G_js.__publicField(this, "debug");
331
+ chunkSITQ4JWM_js.__publicField(this, "listeners", /* @__PURE__ */ new Set());
332
+ chunkSITQ4JWM_js.__publicField(this, "debug");
289
333
  this.debug = debug;
290
334
  }
291
335
  /**
@@ -341,12 +385,12 @@ var logger = chunkDSUCH44G_js.createLogger("EventEmitter"), EventEmitter = class
341
385
  // src/lib/core/debug-metrics.ts
342
386
  var DebugMetrics = class {
343
387
  constructor() {
344
- chunkDSUCH44G_js.__publicField(this, "stateUpdates", 0);
345
- chunkDSUCH44G_js.__publicField(this, "noopUpdates", 0);
346
- chunkDSUCH44G_js.__publicField(this, "updateTimes", []);
347
- chunkDSUCH44G_js.__publicField(this, "lastUpdateTime", 0);
348
- chunkDSUCH44G_js.__publicField(this, "eventListenerCount", 0);
349
- chunkDSUCH44G_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);
350
394
  }
351
395
  /**
352
396
  * Record a state update attempt
@@ -386,11 +430,11 @@ var DebugMetrics = class {
386
430
  // src/lib/core/base-collaborator.ts
387
431
  var BaseCollaborator = class {
388
432
  constructor(config, loggerPrefix) {
389
- chunkDSUCH44G_js.__publicField(this, "stateManager");
390
- chunkDSUCH44G_js.__publicField(this, "eventEmitter");
391
- chunkDSUCH44G_js.__publicField(this, "debug");
392
- chunkDSUCH44G_js.__publicField(this, "logger");
393
- this.stateManager = config.stateManager, this.eventEmitter = config.eventEmitter, this.debug = config.debug ?? false, this.logger = chunkDSUCH44G_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);
394
438
  }
395
439
  /**
396
440
  * Log debug message if debug mode is enabled
@@ -413,7 +457,7 @@ var BaseCollaborator = class {
413
457
  };
414
458
 
415
459
  // src/lib/wallet/authenticity-verifier.ts
416
- var logger2 = chunkDSUCH44G_js.createLogger("WalletAuthenticity"), WalletAuthenticityVerifier = class {
460
+ var logger2 = chunkSITQ4JWM_js.createLogger("WalletAuthenticity"), WalletAuthenticityVerifier = class {
417
461
  /**
418
462
  * Verify a wallet's authenticity using dynamic heuristics
419
463
  *
@@ -622,8 +666,43 @@ var logger2 = chunkDSUCH44G_js.createLogger("WalletAuthenticity"), WalletAuthent
622
666
  }
623
667
  };
624
668
 
669
+ // src/lib/wallet/wallet-icon-overrides.ts
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 = {
671
+ Phantom: PHANTOM_ICON,
672
+ Solflare: SOLFLARE_ICON,
673
+ Backpack: BACKPACK_ICON
674
+ }, ICON_PROXY_CACHE = /* @__PURE__ */ new WeakMap();
675
+ function getWalletIconOverride(walletName) {
676
+ return WALLET_ICON_OVERRIDES[walletName];
677
+ }
678
+ function createIconProxy(wallet, icon) {
679
+ let cached = ICON_PROXY_CACHE.get(wallet);
680
+ if (cached) return cached;
681
+ let proxy = new Proxy(wallet, {
682
+ get(target, prop) {
683
+ if (prop === "icon") return icon;
684
+ let value = Reflect.get(target, prop, target);
685
+ return typeof value == "function" ? value.bind(target) : value;
686
+ }
687
+ });
688
+ return ICON_PROXY_CACHE.set(wallet, proxy), proxy;
689
+ }
690
+ function applyWalletIconOverride(wallet) {
691
+ let override = getWalletIconOverride(wallet.name);
692
+ if (!override || wallet.icon === override) return wallet;
693
+ if (Object.isExtensible(wallet))
694
+ try {
695
+ return wallet.icon = override, wallet;
696
+ } catch {
697
+ }
698
+ return createIconProxy(wallet, override);
699
+ }
700
+
625
701
  // src/lib/wallet/detector.ts
626
- var logger3 = chunkDSUCH44G_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
+ }
627
706
  function hasFeature(wallet, featureName) {
628
707
  return wallet.features != null && wallet.features[featureName] !== void 0;
629
708
  }
@@ -645,7 +724,9 @@ function verifyWalletName(wallet, requestedName) {
645
724
  var WalletDetector = class extends BaseCollaborator {
646
725
  constructor(stateManager, eventEmitter, debug = false) {
647
726
  super({ stateManager, eventEmitter, debug }, "WalletDetector");
648
- chunkDSUCH44G_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());
649
730
  }
650
731
  /**
651
732
  * Initialize wallet detection (synchronous)
@@ -661,11 +742,10 @@ var WalletDetector = class extends BaseCollaborator {
661
742
  if (!(typeof window > "u"))
662
743
  try {
663
744
  let walletsApi = getWalletsRegistry(), update = () => {
664
- let ws = walletsApi.get(), previousCount = this.getState().wallets.length, newCount = ws.length;
665
- newCount !== previousCount && this.log("\u{1F50D} WalletDetector: found wallets:", newCount);
666
- let unique = this.deduplicateWallets(ws);
667
- this.stateManager.updateState({
668
- 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))
669
749
  }), newCount !== previousCount && newCount > 0 && this.eventEmitter.emit({
670
750
  type: "wallets:detected",
671
751
  count: newCount,
@@ -743,20 +823,64 @@ var WalletDetector = class extends BaseCollaborator {
743
823
  return null;
744
824
  }
745
825
  /**
746
- * Get currently detected wallets
826
+ * Get currently detected wallets (legacy)
827
+ * @deprecated Use getConnectors() for vNext API
747
828
  */
748
829
  getDetectedWallets() {
749
830
  return this.getState().wallets;
750
831
  }
751
832
  /**
752
- * 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)
753
877
  */
754
878
  mapToWalletInfo(wallet) {
755
- let hasConnect = hasFeature(wallet, "standard:connect"), hasDisconnect = hasFeature(wallet, "standard:disconnect"), isSolana = Array.isArray(wallet.chains) && wallet.chains.some((c) => typeof c == "string" && c.includes("solana"));
879
+ let walletWithIcon = applyWalletIconOverride(wallet), hasConnect = hasFeature(walletWithIcon, "standard:connect"), isSolana = isSolanaWallet(walletWithIcon);
756
880
  return {
757
- wallet,
881
+ wallet: walletWithIcon,
758
882
  installed: true,
759
- connectable: hasConnect && hasDisconnect && isSolana
883
+ connectable: hasConnect && isSolana
760
884
  };
761
885
  }
762
886
  /**
@@ -795,30 +919,262 @@ function getEventsFeature(wallet) {
795
919
  var ConnectionManager = class extends BaseCollaborator {
796
920
  constructor(stateManager, eventEmitter, walletStorage, debug = false) {
797
921
  super({ stateManager, eventEmitter, debug }, "ConnectionManager");
798
- chunkDSUCH44G_js.__publicField(this, "walletStorage");
799
- chunkDSUCH44G_js.__publicField(this, "walletChangeUnsub", null);
800
- chunkDSUCH44G_js.__publicField(this, "pollTimer", null);
801
- chunkDSUCH44G_js.__publicField(this, "pollAttempts", 0);
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);
802
929
  this.walletStorage = walletStorage;
803
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
+ }
1053
+ /**
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
+ }
804
1131
  /**
805
- * Connect to a wallet
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
806
1144
  */
807
1145
  async connect(wallet, walletName) {
808
1146
  if (typeof window > "u") return;
809
- let name = walletName || wallet.name;
1147
+ let name = walletName || wallet.name, attemptId = ++this.connectAttemptId;
1148
+ this.pendingWallet = wallet, this.pendingWalletName = name;
1149
+ let connectorId = createConnectorId(name);
810
1150
  this.eventEmitter.emit({
811
1151
  type: "connecting",
812
1152
  wallet: name,
813
1153
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
1154
+ }), this.updateWalletStatus({
1155
+ status: "connecting",
1156
+ connectorId
814
1157
  }), this.stateManager.updateState({ connecting: true }, true);
815
1158
  try {
816
1159
  let connect = getConnectFeature(wallet);
817
1160
  if (!connect) throw new Error(`Wallet ${name} does not support standard connect`);
818
- let result = await connect({ silent: false }), walletAccounts = wallet.accounts, accountMap = /* @__PURE__ */ new Map();
1161
+ let result = await connect({ silent: false });
1162
+ if (attemptId !== this.connectAttemptId)
1163
+ throw new Error("Connection cancelled");
1164
+ let walletAccounts = wallet.accounts, accountMap = /* @__PURE__ */ new Map();
819
1165
  for (let a of [...walletAccounts, ...result.accounts]) accountMap.set(a.address, a);
820
- 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;
821
- 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(
822
1178
  {
823
1179
  selectedWallet: wallet,
824
1180
  connected: true,
@@ -842,7 +1198,9 @@ var ConnectionManager = class extends BaseCollaborator {
842
1198
  accountsCount: accounts.length
843
1199
  }), this.walletStorage && (!("isAvailable" in this.walletStorage) || typeof this.walletStorage.isAvailable != "function" || this.walletStorage.isAvailable() ? this.walletStorage.set(name) : this.log("Storage not available (private browsing?), skipping wallet persistence")), this.subscribeToWalletEvents();
844
1200
  } catch (e) {
845
- let errorMessage = e instanceof Error ? e.message : String(e);
1201
+ if (attemptId !== this.connectAttemptId)
1202
+ throw e;
1203
+ let errorMessage = e instanceof Error ? e.message : String(e), error = e instanceof Error ? e : new Error(errorMessage);
846
1204
  throw this.eventEmitter.emit({
847
1205
  type: "connection:failed",
848
1206
  wallet: name,
@@ -850,9 +1208,14 @@ var ConnectionManager = class extends BaseCollaborator {
850
1208
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
851
1209
  }), this.eventEmitter.emit({
852
1210
  type: "error",
853
- error: e instanceof Error ? e : new Error(errorMessage),
1211
+ error,
854
1212
  context: "wallet-connection",
855
1213
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
1214
+ }), this.updateWalletStatus({
1215
+ status: "error",
1216
+ error,
1217
+ connectorId,
1218
+ recoverable: this.isRecoverableError(error)
856
1219
  }), this.stateManager.updateState(
857
1220
  {
858
1221
  selectedWallet: null,
@@ -863,22 +1226,21 @@ var ConnectionManager = class extends BaseCollaborator {
863
1226
  },
864
1227
  true
865
1228
  ), e;
1229
+ } finally {
1230
+ this.pendingWallet === wallet && this.pendingWalletName === name && (this.pendingWallet = null, this.pendingWalletName = null);
866
1231
  }
867
1232
  }
868
1233
  /**
869
1234
  * Disconnect from wallet
870
1235
  */
871
1236
  async disconnect() {
872
- this.walletChangeUnsub && (this.walletChangeUnsub(), this.walletChangeUnsub = null), this.stopPollingWalletAccounts();
873
- let wallet = this.getState().selectedWallet;
874
- if (wallet) {
875
- let disconnect = getDisconnectFeature(wallet);
876
- disconnect && await disconnect();
877
- }
878
- this.stateManager.updateState(
1237
+ this.connectAttemptId++, this.walletChangeUnsub && (this.walletChangeUnsub(), this.walletChangeUnsub = null), this.stopPollingWalletAccounts();
1238
+ let wallet = this.getState().selectedWallet ?? this.pendingWallet;
1239
+ if (this.pendingWallet = null, this.pendingWalletName = null, this.updateWalletStatus(INITIAL_WALLET_STATUS), this.stateManager.updateState(
879
1240
  {
880
1241
  selectedWallet: null,
881
1242
  connected: false,
1243
+ connecting: false,
882
1244
  accounts: [],
883
1245
  selectedAccount: null
884
1246
  },
@@ -886,7 +1248,14 @@ var ConnectionManager = class extends BaseCollaborator {
886
1248
  ), this.eventEmitter.emit({
887
1249
  type: "wallet:disconnected",
888
1250
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
889
- }), this.walletStorage && "clear" in this.walletStorage && typeof this.walletStorage.clear == "function" ? this.walletStorage.clear() : this.walletStorage?.set(void 0);
1251
+ }), this.walletStorage && "clear" in this.walletStorage && typeof this.walletStorage.clear == "function" ? this.walletStorage.clear() : this.walletStorage?.set(void 0), wallet) {
1252
+ let disconnect = getDisconnectFeature(wallet);
1253
+ if (disconnect)
1254
+ try {
1255
+ await disconnect();
1256
+ } catch {
1257
+ }
1258
+ }
890
1259
  }
891
1260
  /**
892
1261
  * Select a different account
@@ -993,17 +1362,50 @@ var ConnectionManager = class extends BaseCollaborator {
993
1362
  };
994
1363
 
995
1364
  // src/lib/wallet/auto-connector.ts
996
- var logger4 = chunkDSUCH44G_js.createLogger("AutoConnector"), MIN_ADDRESS_LENGTH = 30, AutoConnector = class {
997
- constructor(walletDetector, connectionManager, stateManager, walletStorage, debug = false) {
998
- chunkDSUCH44G_js.__publicField(this, "walletDetector");
999
- chunkDSUCH44G_js.__publicField(this, "connectionManager");
1000
- chunkDSUCH44G_js.__publicField(this, "stateManager");
1001
- chunkDSUCH44G_js.__publicField(this, "walletStorage");
1002
- chunkDSUCH44G_js.__publicField(this, "debug");
1003
- 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;
1004
1376
  }
1005
1377
  async attemptAutoConnect() {
1006
- 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
+ }
1007
1409
  }
1008
1410
  async attemptInstantConnect() {
1009
1411
  let storedWalletName = this.walletStorage?.get();
@@ -1094,12 +1496,12 @@ var logger4 = chunkDSUCH44G_js.createLogger("AutoConnector"), MIN_ADDRESS_LENGTH
1094
1496
  ],
1095
1497
  features,
1096
1498
  accounts: []
1097
- };
1499
+ }, walletWithIcon = applyWalletIconOverride(wallet);
1098
1500
  this.stateManager.updateState(
1099
1501
  {
1100
1502
  wallets: [
1101
1503
  {
1102
- wallet,
1504
+ wallet: walletWithIcon,
1103
1505
  installed: true,
1104
1506
  connectable: true
1105
1507
  }
@@ -1107,7 +1509,7 @@ var logger4 = chunkDSUCH44G_js.createLogger("AutoConnector"), MIN_ADDRESS_LENGTH
1107
1509
  },
1108
1510
  true
1109
1511
  ), await ready;
1110
- let walletsApi = getWalletsRegistry(), registryWallet = walletsApi.get().find((w) => w.name === storedWalletName), walletToUse = registryWallet || wallet;
1512
+ let walletsApi = getWalletsRegistry(), registryWallet = walletsApi.get().find((w) => w.name === storedWalletName), walletToUse = applyWalletIconOverride(registryWallet || walletWithIcon);
1111
1513
  return this.debug && logger4.info("Attempting to connect via instant auto-connect", {
1112
1514
  walletName: storedWalletName,
1113
1515
  usingRegistry: !!registryWallet
@@ -1153,7 +1555,7 @@ var logger4 = chunkDSUCH44G_js.createLogger("AutoConnector"), MIN_ADDRESS_LENGTH
1153
1555
  var ClusterManager = class extends BaseCollaborator {
1154
1556
  constructor(stateManager, eventEmitter, clusterStorage, config, debug = false) {
1155
1557
  super({ stateManager, eventEmitter, debug }, "ClusterManager");
1156
- chunkDSUCH44G_js.__publicField(this, "clusterStorage");
1558
+ chunkSITQ4JWM_js.__publicField(this, "clusterStorage");
1157
1559
  if (this.clusterStorage = clusterStorage, config) {
1158
1560
  let clusters = config.clusters ?? [], initialClusterId = this.clusterStorage?.get() ?? config.initialCluster ?? "solana:mainnet", initialCluster = clusters.find((c) => c.id === initialClusterId) ?? clusters[0] ?? null;
1159
1561
  this.stateManager.updateState({
@@ -1168,7 +1570,7 @@ var ClusterManager = class extends BaseCollaborator {
1168
1570
  async setCluster(clusterId) {
1169
1571
  let state = this.getState(), previousClusterId = state.cluster?.id || null, cluster = state.clusters.find((c) => c.id === clusterId);
1170
1572
  if (!cluster)
1171
- throw chunkDSUCH44G_js.Errors.clusterNotFound(
1573
+ throw chunkSITQ4JWM_js.Errors.clusterNotFound(
1172
1574
  clusterId,
1173
1575
  state.clusters.map((c) => c.id)
1174
1576
  );
@@ -1197,9 +1599,9 @@ var ClusterManager = class extends BaseCollaborator {
1197
1599
  var TransactionTracker = class extends BaseCollaborator {
1198
1600
  constructor(stateManager, eventEmitter, maxTransactions = 20, debug = false) {
1199
1601
  super({ stateManager, eventEmitter, debug }, "TransactionTracker");
1200
- chunkDSUCH44G_js.__publicField(this, "transactions", []);
1201
- chunkDSUCH44G_js.__publicField(this, "totalTransactions", 0);
1202
- chunkDSUCH44G_js.__publicField(this, "maxTransactions");
1602
+ chunkSITQ4JWM_js.__publicField(this, "transactions", []);
1603
+ chunkSITQ4JWM_js.__publicField(this, "totalTransactions", 0);
1604
+ chunkSITQ4JWM_js.__publicField(this, "maxTransactions");
1203
1605
  this.maxTransactions = maxTransactions;
1204
1606
  }
1205
1607
  /**
@@ -1253,10 +1655,10 @@ var TransactionTracker = class extends BaseCollaborator {
1253
1655
  // src/lib/health/health-monitor.ts
1254
1656
  var HealthMonitor = class {
1255
1657
  constructor(stateManager, walletStorage, clusterStorage, isInitialized) {
1256
- chunkDSUCH44G_js.__publicField(this, "stateManager");
1257
- chunkDSUCH44G_js.__publicField(this, "walletStorage");
1258
- chunkDSUCH44G_js.__publicField(this, "clusterStorage");
1259
- chunkDSUCH44G_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");
1260
1662
  this.stateManager = stateManager, this.walletStorage = walletStorage, this.clusterStorage = clusterStorage, this.isInitialized = isInitialized ?? (() => true);
1261
1663
  }
1262
1664
  /**
@@ -1308,21 +1710,26 @@ var HealthMonitor = class {
1308
1710
  };
1309
1711
 
1310
1712
  // src/lib/core/connector-client.ts
1311
- var logger5 = chunkDSUCH44G_js.createLogger("ConnectorClient"), ConnectorClient = class {
1713
+ var logger5 = chunkSITQ4JWM_js.createLogger("ConnectorClient"), ConnectorClient = class {
1312
1714
  constructor(config = {}) {
1313
- chunkDSUCH44G_js.__publicField(this, "stateManager");
1314
- chunkDSUCH44G_js.__publicField(this, "eventEmitter");
1315
- chunkDSUCH44G_js.__publicField(this, "walletDetector");
1316
- chunkDSUCH44G_js.__publicField(this, "connectionManager");
1317
- chunkDSUCH44G_js.__publicField(this, "autoConnector");
1318
- chunkDSUCH44G_js.__publicField(this, "clusterManager");
1319
- chunkDSUCH44G_js.__publicField(this, "transactionTracker");
1320
- chunkDSUCH44G_js.__publicField(this, "debugMetrics");
1321
- chunkDSUCH44G_js.__publicField(this, "healthMonitor");
1322
- chunkDSUCH44G_js.__publicField(this, "initialized", false);
1323
- chunkDSUCH44G_js.__publicField(this, "config");
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);
1324
1727
  this.config = config;
1325
1728
  let initialState = {
1729
+ // vNext wallet status
1730
+ wallet: INITIAL_WALLET_STATUS,
1731
+ connectors: [],
1732
+ // Legacy fields (for backwards compatibility)
1326
1733
  wallets: [],
1327
1734
  selectedWallet: null,
1328
1735
  connected: false,
@@ -1363,8 +1770,10 @@ var logger5 = chunkDSUCH44G_js.createLogger("ConnectorClient"), ConnectorClient
1363
1770
  }
1364
1771
  initialize() {
1365
1772
  if (typeof window > "u" || this.initialized) return;
1366
- let { error } = chunkDSUCH44G_js.tryCatchSync(() => {
1367
- this.walletDetector.initialize(), this.config.autoConnect && setTimeout(() => {
1773
+ let { error } = chunk4KD6HQQG_js.tryCatchSync(() => {
1774
+ this.walletDetector.initialize(), this.config.walletConnect?.enabled && this.initializeWalletConnect().catch((err) => {
1775
+ this.config.debug && logger5.error("WalletConnect initialization failed", { error: err });
1776
+ }), this.config.autoConnect && setTimeout(() => {
1368
1777
  this.autoConnector.attemptAutoConnect().catch((err) => {
1369
1778
  this.config.debug && logger5.error("Auto-connect error", { error: err });
1370
1779
  });
@@ -1372,11 +1781,62 @@ var logger5 = chunkDSUCH44G_js.createLogger("ConnectorClient"), ConnectorClient
1372
1781
  });
1373
1782
  error && this.config.debug && logger5.error("Connector initialization failed", { error });
1374
1783
  }
1784
+ /**
1785
+ * Initialize WalletConnect integration
1786
+ * Dynamically imports and registers the WalletConnect wallet
1787
+ */
1788
+ async initializeWalletConnect() {
1789
+ if (this.config.walletConnect?.enabled)
1790
+ try {
1791
+ let { registerWalletConnectWallet } = await import('./walletconnect-447EY3OJ.js');
1792
+ this.walletConnectRegistration = await registerWalletConnectWallet(this.config.walletConnect), this.config.debug && logger5.info("WalletConnect wallet registered successfully");
1793
+ } catch (error) {
1794
+ this.config.debug && logger5.error("Failed to register WalletConnect wallet", { error });
1795
+ }
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
+ */
1375
1832
  async select(walletName) {
1376
1833
  let wallet = this.stateManager.getSnapshot().wallets.find((w) => w.wallet.name === walletName)?.wallet;
1377
1834
  if (!wallet) throw new Error(`Wallet ${walletName} not found`);
1378
1835
  await this.connectionManager.connect(wallet, walletName);
1379
1836
  }
1837
+ /**
1838
+ * @deprecated Use `disconnectWallet()` instead.
1839
+ */
1380
1840
  async disconnect() {
1381
1841
  await this.connectionManager.disconnect();
1382
1842
  }
@@ -1395,7 +1855,7 @@ var logger5 = chunkDSUCH44G_js.createLogger("ConnectorClient"), ConnectorClient
1395
1855
  getRpcUrl() {
1396
1856
  let cluster = this.clusterManager.getCluster();
1397
1857
  if (!cluster) return null;
1398
- let { data, error } = chunkDSUCH44G_js.tryCatchSync(() => getClusterRpcUrl(cluster));
1858
+ let { data, error } = chunk4KD6HQQG_js.tryCatchSync(() => getClusterRpcUrl(cluster));
1399
1859
  return error ? (this.config.debug && logger5.error("Failed to get RPC URL", { error }), null) : data;
1400
1860
  }
1401
1861
  subscribe(listener) {
@@ -1410,7 +1870,7 @@ var logger5 = chunkDSUCH44G_js.createLogger("ConnectorClient"), ConnectorClient
1410
1870
  for (let key of storageKeys) {
1411
1871
  let storage = this.config.storage?.[key];
1412
1872
  if (storage && "reset" in storage && typeof storage.reset == "function") {
1413
- let resetFn = storage.reset, { error } = chunkDSUCH44G_js.tryCatchSync(() => resetFn());
1873
+ let resetFn = storage.reset, { error } = chunk4KD6HQQG_js.tryCatchSync(() => resetFn());
1414
1874
  error ? this.config.debug && logger5.error("Failed to reset storage", { key, error }) : this.config.debug && logger5.debug("Reset storage", { key });
1415
1875
  }
1416
1876
  }
@@ -1464,288 +1924,23 @@ var logger5 = chunkDSUCH44G_js.createLogger("ConnectorClient"), ConnectorClient
1464
1924
  this.debugMetrics.resetMetrics();
1465
1925
  }
1466
1926
  destroy() {
1467
- this.connectionManager.disconnect().catch(() => {
1468
- }), this.walletDetector.destroy(), this.eventEmitter.offAll(), this.stateManager.clear();
1469
- }
1470
- };
1471
- var logger6 = chunkDSUCH44G_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 {
1472
- static log(error, errorInfo, context) {
1473
- if (process.env.NODE_ENV === "development" && logger6.error(error.message, {
1474
- error,
1475
- errorInfo,
1476
- context
1477
- }), process.env.NODE_ENV === "production" && typeof window < "u")
1927
+ if (this.walletConnectRegistration)
1478
1928
  try {
1479
- let gtag = window.gtag;
1480
- typeof gtag == "function" && gtag("event", "exception", {
1481
- description: error.message,
1482
- fatal: false,
1483
- custom_map: { error_type: "wallet_error", ...context }
1484
- });
1485
- } catch {
1929
+ this.walletConnectRegistration.unregister(), this.walletConnectRegistration = null;
1930
+ } catch (error) {
1931
+ this.config.debug && logger5.warn("Error unregistering WalletConnect wallet", { error });
1486
1932
  }
1933
+ this.connectionManager.disconnect().catch(() => {
1934
+ }), this.walletDetector.destroy(), this.eventEmitter.offAll(), this.stateManager.clear();
1487
1935
  }
1488
1936
  };
1489
- function classifyError(error) {
1490
- if (chunkDSUCH44G_js.isConnectorError(error))
1491
- return {
1492
- ...error,
1493
- type: {
1494
- WALLET_NOT_CONNECTED: "CONNECTION_FAILED" /* CONNECTION_FAILED */,
1495
- WALLET_NOT_FOUND: "WALLET_NOT_FOUND" /* WALLET_NOT_FOUND */,
1496
- CONNECTION_FAILED: "CONNECTION_FAILED" /* CONNECTION_FAILED */,
1497
- USER_REJECTED: "USER_REJECTED" /* USER_REJECTED */,
1498
- RPC_ERROR: "NETWORK_ERROR" /* NETWORK_ERROR */,
1499
- NETWORK_TIMEOUT: "NETWORK_ERROR" /* NETWORK_ERROR */,
1500
- SIGNING_FAILED: "TRANSACTION_FAILED" /* TRANSACTION_FAILED */,
1501
- SEND_FAILED: "TRANSACTION_FAILED" /* TRANSACTION_FAILED */
1502
- }[error.code] || "UNKNOWN_ERROR" /* UNKNOWN_ERROR */,
1503
- recoverable: error.recoverable,
1504
- context: error.context
1505
- };
1506
- let walletError = error;
1507
- if (walletError.type) return walletError;
1508
- let type = "UNKNOWN_ERROR" /* UNKNOWN_ERROR */, recoverable = false;
1509
- 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), {
1510
- ...error,
1511
- type,
1512
- recoverable,
1513
- context: { originalMessage: error.message }
1514
- };
1515
- }
1516
- var ConnectorErrorBoundary = class extends react.Component {
1517
- constructor(props) {
1518
- super(props);
1519
- chunkDSUCH44G_js.__publicField(this, "retryTimeouts", /* @__PURE__ */ new Set());
1520
- chunkDSUCH44G_js.__publicField(this, "retry", () => {
1521
- let { maxRetries = 3 } = this.props;
1522
- this.state.retryCount >= maxRetries || this.setState((prevState) => ({
1523
- hasError: false,
1524
- error: null,
1525
- errorInfo: null,
1526
- retryCount: prevState.retryCount + 1
1527
- }));
1528
- });
1529
- this.state = {
1530
- hasError: false,
1531
- error: null,
1532
- errorInfo: null,
1533
- errorId: "",
1534
- retryCount: 0
1535
- };
1536
- }
1537
- static getDerivedStateFromError(error) {
1538
- return {
1539
- hasError: true,
1540
- error,
1541
- errorId: `error_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`
1542
- };
1543
- }
1544
- componentDidCatch(error, errorInfo) {
1545
- this.setState({ errorInfo }), ErrorLogger.log(error, errorInfo, {
1546
- retryCount: this.state.retryCount,
1547
- errorId: this.state.errorId,
1548
- timestamp: (/* @__PURE__ */ new Date()).toISOString()
1549
- }), this.props.onError?.(error, errorInfo);
1550
- }
1551
- componentWillUnmount() {
1552
- this.retryTimeouts.forEach((timeout) => clearTimeout(timeout));
1553
- }
1554
- render() {
1555
- if (this.state.hasError && this.state.error) {
1556
- let walletError = classifyError(this.state.error);
1557
- return this.props.fallback ? this.props.fallback(walletError, this.retry) : /* @__PURE__ */ jsxRuntime.jsx(DefaultErrorFallback, { error: walletError, onRetry: this.retry });
1558
- }
1559
- return this.props.children;
1560
- }
1561
- };
1562
- function DefaultErrorFallback({ error, onRetry }) {
1563
- let [isPending, startTransition] = react.useTransition(), [isRetrying, setIsRetrying] = react.useState(false), handleRetry = react.useCallback(() => {
1564
- setIsRetrying(true), startTransition(() => {
1565
- setTimeout(() => {
1566
- onRetry(), setIsRetrying(false);
1567
- }, 500);
1568
- });
1569
- }, [onRetry]), { title, message, actionText, showRetry } = react.useMemo(() => {
1570
- switch (error.type) {
1571
- case "USER_REJECTED" /* USER_REJECTED */:
1572
- return {
1573
- title: "Transaction Cancelled",
1574
- message: "You cancelled the transaction. No problem!",
1575
- actionText: "Try Again",
1576
- showRetry: true
1577
- };
1578
- case "WALLET_NOT_FOUND" /* WALLET_NOT_FOUND */:
1579
- return {
1580
- title: "Wallet Not Found",
1581
- message: "Please install a supported Solana wallet to continue.",
1582
- actionText: "Check Wallets",
1583
- showRetry: true
1584
- };
1585
- case "NETWORK_ERROR" /* NETWORK_ERROR */:
1586
- return {
1587
- title: "Network Error",
1588
- message: "Having trouble connecting. Please check your internet connection.",
1589
- actionText: "Retry",
1590
- showRetry: true
1591
- };
1592
- case "INSUFFICIENT_FUNDS" /* INSUFFICIENT_FUNDS */:
1593
- return {
1594
- title: "Insufficient Funds",
1595
- message: "You don't have enough SOL for this transaction.",
1596
- actionText: "Add Funds",
1597
- showRetry: false
1598
- };
1599
- default:
1600
- return {
1601
- title: "Something went wrong",
1602
- message: "An unexpected error occurred. Please try again.",
1603
- actionText: "Retry",
1604
- showRetry: error.recoverable
1605
- };
1606
- }
1607
- }, [error.type, error.recoverable]);
1608
- return /* @__PURE__ */ jsxRuntime.jsxs(
1609
- "div",
1610
- {
1611
- style: {
1612
- display: "flex",
1613
- flexDirection: "column",
1614
- alignItems: "center",
1615
- justifyContent: "center",
1616
- padding: "2rem",
1617
- textAlign: "center",
1618
- borderRadius: "12px",
1619
- border: "1px solid #e5e7eb",
1620
- backgroundColor: "#fafafa",
1621
- maxWidth: "400px",
1622
- margin: "0 auto"
1623
- },
1624
- children: [
1625
- /* @__PURE__ */ jsxRuntime.jsx(
1626
- "div",
1627
- {
1628
- style: {
1629
- width: "48px",
1630
- height: "48px",
1631
- borderRadius: "50%",
1632
- backgroundColor: "#fee2e2",
1633
- display: "flex",
1634
- alignItems: "center",
1635
- justifyContent: "center",
1636
- marginBottom: "1rem"
1637
- },
1638
- 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" }) })
1639
- }
1640
- ),
1641
- /* @__PURE__ */ jsxRuntime.jsx(
1642
- "h3",
1643
- {
1644
- style: {
1645
- margin: "0 0 0.5rem 0",
1646
- fontSize: "1.125rem",
1647
- fontWeight: "600",
1648
- color: "#111827"
1649
- },
1650
- children: title
1651
- }
1652
- ),
1653
- /* @__PURE__ */ jsxRuntime.jsx(
1654
- "p",
1655
- {
1656
- style: {
1657
- margin: "0 0 1.5rem 0",
1658
- fontSize: "0.875rem",
1659
- color: "#6b7280",
1660
- lineHeight: "1.5"
1661
- },
1662
- children: message
1663
- }
1664
- ),
1665
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", gap: "0.75rem", flexWrap: "wrap" }, children: [
1666
- showRetry && /* @__PURE__ */ jsxRuntime.jsx(
1667
- "button",
1668
- {
1669
- onClick: handleRetry,
1670
- disabled: isPending || isRetrying,
1671
- style: {
1672
- padding: "0.5rem 1rem",
1673
- backgroundColor: "#3b82f6",
1674
- color: "white",
1675
- border: "none",
1676
- borderRadius: "6px",
1677
- fontSize: "0.875rem",
1678
- fontWeight: "500",
1679
- cursor: isPending || isRetrying ? "wait" : "pointer",
1680
- opacity: isPending || isRetrying ? 0.7 : 1,
1681
- transition: "all 0.2s"
1682
- },
1683
- children: isRetrying ? "Retrying..." : actionText
1684
- }
1685
- ),
1686
- /* @__PURE__ */ jsxRuntime.jsx(
1687
- "button",
1688
- {
1689
- onClick: () => window.location.reload(),
1690
- style: {
1691
- padding: "0.5rem 1rem",
1692
- backgroundColor: "transparent",
1693
- color: "#6b7280",
1694
- border: "1px solid #d1d5db",
1695
- borderRadius: "6px",
1696
- fontSize: "0.875rem",
1697
- fontWeight: "500",
1698
- cursor: "pointer",
1699
- transition: "all 0.2s"
1700
- },
1701
- children: "Refresh Page"
1702
- }
1703
- )
1704
- ] }),
1705
- process.env.NODE_ENV === "development" && /* @__PURE__ */ jsxRuntime.jsxs(
1706
- "details",
1707
- {
1708
- style: {
1709
- marginTop: "1rem",
1710
- fontSize: "0.75rem",
1711
- color: "#6b7280",
1712
- width: "100%"
1713
- },
1714
- children: [
1715
- /* @__PURE__ */ jsxRuntime.jsx("summary", { style: { cursor: "pointer", marginBottom: "0.5rem" }, children: "Error Details" }),
1716
- /* @__PURE__ */ jsxRuntime.jsx(
1717
- "pre",
1718
- {
1719
- style: {
1720
- whiteSpace: "pre-wrap",
1721
- wordBreak: "break-all",
1722
- backgroundColor: "#f3f4f6",
1723
- padding: "0.5rem",
1724
- borderRadius: "4px",
1725
- overflow: "auto",
1726
- maxHeight: "200px"
1727
- },
1728
- children: error.message
1729
- }
1730
- )
1731
- ]
1732
- }
1733
- )
1734
- ]
1735
- }
1736
- );
1737
- }
1738
- function withErrorBoundary(Component2, errorBoundaryProps) {
1739
- let WrappedComponent = (props) => /* @__PURE__ */ jsxRuntime.jsx(ConnectorErrorBoundary, { ...errorBoundaryProps, children: /* @__PURE__ */ jsxRuntime.jsx(Component2, { ...props }) });
1740
- return WrappedComponent.displayName = `withErrorBoundary(${Component2.displayName || Component2.name})`, WrappedComponent;
1741
- }
1742
- var logger7 = chunkDSUCH44G_js.createLogger("Polyfills"), installed = false;
1937
+ var logger6 = chunkSITQ4JWM_js.createLogger("Polyfills"), installed = false;
1743
1938
  function installPolyfills() {
1744
1939
  if (!(installed || typeof window > "u"))
1745
1940
  try {
1746
- webcryptoEd25519Polyfill.install(), installed = true, logger7.info("Browser compatibility polyfills installed");
1941
+ webcryptoEd25519Polyfill.install(), installed = true, logger6.info("Browser compatibility polyfills installed");
1747
1942
  } catch (error) {
1748
- logger7 && logger7.warn("Failed to install polyfills", { error }), installed = true;
1943
+ logger6 && logger6.warn("Failed to install polyfills", { error }), installed = true;
1749
1944
  }
1750
1945
  }
1751
1946
  function isPolyfillInstalled() {
@@ -1766,6 +1961,404 @@ function getPolyfillStatus() {
1766
1961
  environment: typeof window < "u" ? "browser" : "server"
1767
1962
  };
1768
1963
  }
1964
+ var logger7 = chunkSITQ4JWM_js.createLogger("EnhancedStorage"), STORAGE_VERSION = "v1", EnhancedStorage = class extends core.Storage {
1965
+ constructor(key, initial, options) {
1966
+ super(key, initial);
1967
+ this.options = options;
1968
+ chunkSITQ4JWM_js.__publicField(this, "errorHandlers", /* @__PURE__ */ new Set());
1969
+ chunkSITQ4JWM_js.__publicField(this, "validators", []);
1970
+ chunkSITQ4JWM_js.__publicField(this, "memoryFallback");
1971
+ this.memoryFallback = initial, options?.onError && this.errorHandlers.add(options.onError), options?.validator && this.validators.push(options.validator);
1972
+ }
1973
+ set(value) {
1974
+ try {
1975
+ return this.validate(value) ? (super.set(value), this.memoryFallback = value, true) : (logger7.warn("Validation failed", { key: this.key }), false);
1976
+ } catch (error) {
1977
+ return this.handleError(error), this.options?.useMemoryFallback ? (this.memoryFallback = value, true) : false;
1978
+ }
1979
+ }
1980
+ get() {
1981
+ try {
1982
+ return super.get();
1983
+ } catch (error) {
1984
+ return this.handleError(error), this.options?.useMemoryFallback ? this.memoryFallback : this.initial;
1985
+ }
1986
+ }
1987
+ validate(value) {
1988
+ return this.validators.every((validator) => validator(value));
1989
+ }
1990
+ addValidator(validator) {
1991
+ return this.validators.push(validator), this;
1992
+ }
1993
+ onError(handler) {
1994
+ return this.errorHandlers.add(handler), this;
1995
+ }
1996
+ transform(transformer) {
1997
+ return transformer(this.get());
1998
+ }
1999
+ reset() {
2000
+ this.set(this.initial);
2001
+ }
2002
+ clear() {
2003
+ try {
2004
+ typeof window < "u" && window.localStorage && window.localStorage.removeItem(this.key), this.reset();
2005
+ } catch (error) {
2006
+ this.handleError(error);
2007
+ }
2008
+ }
2009
+ isAvailable() {
2010
+ try {
2011
+ if (typeof window > "u") return false;
2012
+ let testKey = `__storage_test_${this.key}__`;
2013
+ return window.localStorage.setItem(testKey, "test"), window.localStorage.removeItem(testKey), true;
2014
+ } catch {
2015
+ return false;
2016
+ }
2017
+ }
2018
+ static migrate(oldKey, newStorage) {
2019
+ try {
2020
+ if (typeof window > "u") return false;
2021
+ let oldValue = window.localStorage.getItem(oldKey);
2022
+ if (oldValue) {
2023
+ let parsed = JSON.parse(oldValue);
2024
+ return newStorage.set(parsed), window.localStorage.removeItem(oldKey), true;
2025
+ }
2026
+ return false;
2027
+ } catch {
2028
+ return false;
2029
+ }
2030
+ }
2031
+ handleError(error) {
2032
+ logger7.error("Storage error", { key: this.key, error }), this.errorHandlers.forEach((handler) => {
2033
+ try {
2034
+ handler(error);
2035
+ } catch (err) {
2036
+ logger7.error("Error in error handler", { error: err });
2037
+ }
2038
+ });
2039
+ }
2040
+ };
2041
+ function createEnhancedStorageAccount(options) {
2042
+ let key = options?.key ?? `connector-kit:${STORAGE_VERSION}:account`;
2043
+ return new EnhancedStorage(key, options?.initial, {
2044
+ validator: options?.validator,
2045
+ onError: options?.onError,
2046
+ useMemoryFallback: true
2047
+ // Always fallback for SSR
2048
+ });
2049
+ }
2050
+ function createEnhancedStorageCluster(options) {
2051
+ let key = options?.key ?? `connector-kit:${STORAGE_VERSION}:cluster`, storage = new EnhancedStorage(key, options?.initial ?? "solana:mainnet", {
2052
+ onError: options?.onError,
2053
+ useMemoryFallback: true
2054
+ });
2055
+ return options?.validClusters && storage.addValidator((clusterId) => options.validClusters.includes(clusterId)), storage;
2056
+ }
2057
+ function createEnhancedStorageWallet(options) {
2058
+ let key = options?.key ?? `connector-kit:${STORAGE_VERSION}:wallet`;
2059
+ return new EnhancedStorage(key, options?.initial, {
2060
+ onError: options?.onError,
2061
+ useMemoryFallback: true
2062
+ });
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
+ }
2111
+ var EnhancedStorageAdapter = class {
2112
+ constructor(storage) {
2113
+ this.storage = storage;
2114
+ }
2115
+ get() {
2116
+ return this.storage.get();
2117
+ }
2118
+ set(value) {
2119
+ this.storage.set(value);
2120
+ }
2121
+ subscribe(callback) {
2122
+ return this.storage.value.subscribe(callback);
2123
+ }
2124
+ validate(value) {
2125
+ return this.storage.validate(value);
2126
+ }
2127
+ reset() {
2128
+ this.storage.reset();
2129
+ }
2130
+ clear() {
2131
+ this.storage.clear();
2132
+ }
2133
+ isAvailable() {
2134
+ return this.storage.isAvailable();
2135
+ }
2136
+ transform(transformer) {
2137
+ return this.storage.transform(transformer);
2138
+ }
2139
+ addValidator(validator) {
2140
+ return this.storage.addValidator(validator), this;
2141
+ }
2142
+ onError(handler) {
2143
+ return this.storage.onError(handler), this;
2144
+ }
2145
+ };
2146
+ var logger8 = chunkSITQ4JWM_js.createLogger("DefaultConfig");
2147
+ function getDefaultConfig(options) {
2148
+ let {
2149
+ appName,
2150
+ appUrl,
2151
+ autoConnect = true,
2152
+ debug,
2153
+ network = "mainnet-beta",
2154
+ enableMobile = true,
2155
+ storage,
2156
+ clusters,
2157
+ customClusters = [],
2158
+ persistClusterSelection = true,
2159
+ clusterStorageKey,
2160
+ enableErrorBoundary = true,
2161
+ maxRetries = DEFAULT_MAX_RETRIES,
2162
+ onError,
2163
+ imageProxy,
2164
+ programLabels,
2165
+ coingecko,
2166
+ walletConnect
2167
+ } = options, defaultClusters = clusters ?? [
2168
+ core.createSolanaMainnet(),
2169
+ core.createSolanaDevnet(),
2170
+ core.createSolanaTestnet(),
2171
+ ...network === "localnet" ? [core.createSolanaLocalnet()] : [],
2172
+ ...customClusters || []
2173
+ ], validClusterIds = defaultClusters.map((c) => c.id), accountStorage = createEnhancedStorageAccount({
2174
+ validator: (address) => address ? addresses.isAddress(address) : true,
2175
+ onError: (error) => {
2176
+ debug && logger8.error("Account Storage error", { error }), onError && onError(error, {
2177
+ componentStack: "account-storage"
2178
+ });
2179
+ }
2180
+ }), clusterStorage = createEnhancedStorageCluster({
2181
+ key: clusterStorageKey,
2182
+ initial: getInitialCluster(network),
2183
+ validClusters: persistClusterSelection ? validClusterIds : void 0,
2184
+ onError: (error) => {
2185
+ debug && logger8.error("Cluster Storage error", { error }), onError && onError(error, {
2186
+ componentStack: "cluster-storage"
2187
+ });
2188
+ }
2189
+ }), walletStorage = createEnhancedStorageWallet({
2190
+ onError: (error) => {
2191
+ debug && logger8.error("Wallet Storage error", { error }), onError && onError(error, {
2192
+ componentStack: "wallet-storage"
2193
+ });
2194
+ }
2195
+ });
2196
+ if (typeof window < "u") {
2197
+ let oldAccountKey = "connector-kit:account", oldWalletKey = "connector-kit:wallet", oldClusterKey = clusterStorageKey || "connector-kit:cluster";
2198
+ EnhancedStorage.migrate(oldAccountKey, accountStorage), EnhancedStorage.migrate(oldWalletKey, walletStorage), EnhancedStorage.migrate(oldClusterKey, clusterStorage);
2199
+ }
2200
+ let defaultStorage = storage ?? {
2201
+ account: new EnhancedStorageAdapter(accountStorage),
2202
+ cluster: new EnhancedStorageAdapter(clusterStorage),
2203
+ wallet: new EnhancedStorageAdapter(walletStorage)
2204
+ }, walletConnectConfig = buildWalletConnectConfig(walletConnect, appName, appUrl, clusterStorageKey ?? "connector-kit:v1:cluster");
2205
+ return {
2206
+ autoConnect,
2207
+ debug: debug ?? process.env.NODE_ENV === "development",
2208
+ storage: defaultStorage,
2209
+ appName,
2210
+ appUrl,
2211
+ enableMobile,
2212
+ network,
2213
+ cluster: {
2214
+ clusters: defaultClusters,
2215
+ persistSelection: persistClusterSelection,
2216
+ initialCluster: getInitialCluster(network)
2217
+ },
2218
+ errorBoundary: {
2219
+ enabled: enableErrorBoundary,
2220
+ maxRetries,
2221
+ onError
2222
+ },
2223
+ imageProxy,
2224
+ programLabels,
2225
+ coingecko,
2226
+ walletConnect: walletConnectConfig
2227
+ };
2228
+ }
2229
+ function buildWalletConnectConfig(walletConnect, appName, appUrl, clusterStorageKey) {
2230
+ if (!walletConnect) return;
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;
2232
+ if (!projectId) {
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
+ );
2236
+ return;
2237
+ }
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;
2239
+ return {
2240
+ enabled: true,
2241
+ projectId,
2242
+ metadata: {
2243
+ name: customMetadata?.name ?? appName,
2244
+ description: customMetadata?.description ?? `${appName} - Powered by ConnectorKit`,
2245
+ url: customMetadata?.url ?? origin,
2246
+ icons: customMetadata?.icons ?? [`${origin}/icon.svg`]
2247
+ },
2248
+ defaultChain: customDefaultChain ?? "solana:mainnet",
2249
+ relayUrl: customRelayUrl,
2250
+ // Auto-sync with cluster storage
2251
+ getCurrentChain: () => {
2252
+ if (typeof window > "u") return "solana:mainnet";
2253
+ let storageKey = clusterStorageKey || "connector-kit:v1:cluster";
2254
+ try {
2255
+ let stored = localStorage.getItem(storageKey);
2256
+ if (stored) {
2257
+ let id = JSON.parse(stored);
2258
+ if (id === "solana:mainnet" || id === "solana:devnet" || id === "solana:testnet")
2259
+ return id;
2260
+ }
2261
+ } catch {
2262
+ }
2263
+ return customDefaultChain ?? "solana:mainnet";
2264
+ }
2265
+ // Note: onDisplayUri, onSessionEstablished, onSessionDisconnected are auto-wired by AppProvider
2266
+ };
2267
+ }
2268
+ function getInitialCluster(network = "mainnet-beta") {
2269
+ return toClusterId(network);
2270
+ }
2271
+ function getDefaultMobileConfig(options) {
2272
+ let baseUrl = options.appUrl || (typeof window < "u" ? window.location.origin : "https://localhost:3000");
2273
+ return {
2274
+ appIdentity: {
2275
+ name: options.appName,
2276
+ uri: baseUrl,
2277
+ icon: `${baseUrl}/favicon.ico`
2278
+ },
2279
+ cluster: options.network || "mainnet-beta"
2280
+ };
2281
+ }
2282
+ var solanaNetworkSchema = v4.z.enum(["mainnet", "mainnet-beta", "devnet", "testnet", "localnet"]), solanaClusterIdSchema = v4.z.string().regex(/^solana:(mainnet|devnet|testnet|localnet|[a-zA-Z0-9-]+)$/, {
2283
+ message: 'Cluster ID must be in format "solana:<network>" (e.g., "solana:mainnet")'
2284
+ }), urlSchema = v4.z.string().url("Invalid URL format"), optionalUrlSchema = urlSchema.optional(), coinGeckoConfigSchema = v4.z.strictObject({
2285
+ apiKey: v4.z.string().optional(),
2286
+ isPro: v4.z.boolean().optional(),
2287
+ maxRetries: v4.z.number().int().positive().max(10).optional(),
2288
+ baseDelay: v4.z.number().int().positive().max(3e4).optional(),
2289
+ maxTimeout: v4.z.number().int().positive().max(12e4).optional()
2290
+ }).optional(), walletConnectMetadataSchema = v4.z.object({
2291
+ name: v4.z.string().min(1, "WalletConnect app name is required"),
2292
+ description: v4.z.string(),
2293
+ url: urlSchema,
2294
+ icons: v4.z.array(v4.z.string())
2295
+ }), walletConnectObjectConfigSchema = v4.z.object({
2296
+ enabled: v4.z.boolean().optional(),
2297
+ projectId: v4.z.string().min(1, "WalletConnect projectId is required"),
2298
+ metadata: walletConnectMetadataSchema,
2299
+ defaultChain: v4.z.enum(["solana:mainnet", "solana:devnet", "solana:testnet"]).optional(),
2300
+ onDisplayUri: v4.z.custom((val) => typeof val == "function").optional(),
2301
+ onSessionEstablished: v4.z.custom((val) => typeof val == "function").optional(),
2302
+ onSessionDisconnected: v4.z.custom((val) => typeof val == "function").optional(),
2303
+ relayUrl: urlSchema.optional()
2304
+ }), walletConnectConfigSchema = v4.z.union([v4.z.literal(true), walletConnectObjectConfigSchema]).optional(), storageAdapterSchema = v4.z.looseObject({
2305
+ get: v4.z.custom((val) => typeof val == "function"),
2306
+ set: v4.z.custom((val) => typeof val == "function")
2307
+ }), storageConfigSchema = v4.z.object({
2308
+ account: storageAdapterSchema,
2309
+ cluster: storageAdapterSchema,
2310
+ wallet: storageAdapterSchema
2311
+ }).optional(), solanaClusterSchema = v4.z.object({
2312
+ id: solanaClusterIdSchema,
2313
+ label: v4.z.string().min(1, "Cluster label cannot be empty"),
2314
+ url: urlSchema,
2315
+ urlWs: urlSchema.optional()
2316
+ }), clusterConfigSchema = v4.z.object({
2317
+ clusters: v4.z.array(solanaClusterSchema).optional(),
2318
+ persistSelection: v4.z.boolean().optional(),
2319
+ initialCluster: solanaClusterIdSchema.optional()
2320
+ }).optional(), defaultConfigOptionsSchema = v4.z.object({
2321
+ // Required
2322
+ appName: v4.z.string().min(1, "Application name is required"),
2323
+ // Optional strings
2324
+ appUrl: optionalUrlSchema,
2325
+ imageProxy: v4.z.string().optional(),
2326
+ clusterStorageKey: v4.z.string().optional(),
2327
+ // Optional booleans
2328
+ autoConnect: v4.z.boolean().optional(),
2329
+ debug: v4.z.boolean().optional(),
2330
+ enableMobile: v4.z.boolean().optional(),
2331
+ persistClusterSelection: v4.z.boolean().optional(),
2332
+ enableErrorBoundary: v4.z.boolean().optional(),
2333
+ // Network
2334
+ network: solanaNetworkSchema.optional(),
2335
+ // Numbers
2336
+ maxRetries: v4.z.number().int().positive().max(10).optional(),
2337
+ // Complex types
2338
+ storage: storageConfigSchema,
2339
+ clusters: v4.z.array(solanaClusterSchema).optional(),
2340
+ customClusters: v4.z.array(solanaClusterSchema).optional(),
2341
+ programLabels: v4.z.record(v4.z.string(), v4.z.string()).optional(),
2342
+ coingecko: coinGeckoConfigSchema,
2343
+ walletConnect: walletConnectConfigSchema,
2344
+ // Functions (can't validate implementation, just existence)
2345
+ onError: v4.z.custom((val) => typeof val == "function").optional()
2346
+ }); v4.z.strictObject({
2347
+ autoConnect: v4.z.boolean().optional(),
2348
+ debug: v4.z.boolean().optional(),
2349
+ storage: storageConfigSchema,
2350
+ cluster: clusterConfigSchema,
2351
+ imageProxy: v4.z.string().optional(),
2352
+ programLabels: v4.z.record(v4.z.string(), v4.z.string()).optional(),
2353
+ coingecko: coinGeckoConfigSchema,
2354
+ walletConnect: walletConnectConfigSchema
2355
+ }).optional();
2356
+ function validateConfigOptions(options) {
2357
+ return defaultConfigOptionsSchema.safeParse(options);
2358
+ }
2359
+ function parseConfigOptions(options) {
2360
+ return defaultConfigOptionsSchema.parse(options);
2361
+ }
1769
2362
 
1770
2363
  // src/utils/formatting.ts
1771
2364
  function formatAddress(address, options = {}) {
@@ -1977,7 +2570,7 @@ async function copySignatureToClipboard(signature, options) {
1977
2570
  }
1978
2571
 
1979
2572
  // src/lib/transaction/transaction-validator.ts
1980
- var logger8 = chunkDSUCH44G_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 {
1981
2574
  /**
1982
2575
  * Validate a transaction before signing
1983
2576
  *
@@ -2000,7 +2593,7 @@ var logger8 = chunkDSUCH44G_js.createLogger("TransactionValidator"), MAX_TRANSAC
2000
2593
  try {
2001
2594
  serialized = transaction.serialize();
2002
2595
  } catch (serializeError) {
2003
- logger8.debug("Transaction not yet serializable (may need signing)", {
2596
+ logger9.debug("Transaction not yet serializable (may need signing)", {
2004
2597
  error: serializeError instanceof Error ? serializeError.message : String(serializeError)
2005
2598
  });
2006
2599
  }
@@ -2010,10 +2603,10 @@ var logger8 = chunkDSUCH44G_js.createLogger("TransactionValidator"), MAX_TRANSAC
2010
2603
  return errors.push(
2011
2604
  "Transaction type not recognized - must be a Transaction object with serialize() or Uint8Array"
2012
2605
  ), { valid: false, errors, warnings };
2013
- serialized && (size = serialized.length, size > maxSize && (errors.push(`Transaction too large: ${size} bytes (max ${maxSize} bytes)`), logger8.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"));
2014
2607
  } catch (error) {
2015
2608
  let errorMessage = error instanceof Error ? error.message : String(error);
2016
- errors.push(`Transaction validation failed: ${errorMessage}`), logger8.error("Validation error", { error: errorMessage });
2609
+ errors.push(`Transaction validation failed: ${errorMessage}`), logger9.error("Validation error", { error: errorMessage });
2017
2610
  }
2018
2611
  if (checkDuplicateSignatures && typeof transaction == "object" && "signatures" in transaction) {
2019
2612
  let signatures = transaction.signatures;
@@ -2026,7 +2619,7 @@ var logger8 = chunkDSUCH44G_js.createLogger("TransactionValidator"), MAX_TRANSAC
2026
2619
  }
2027
2620
  strict && warnings.length > 0 && (errors.push(...warnings.map((w) => `Strict mode: ${w}`)), warnings.length = 0);
2028
2621
  let valid = errors.length === 0;
2029
- return valid ? warnings.length > 0 ? logger8.debug("Transaction validation passed with warnings", { warnings, size }) : logger8.debug("Transaction validation passed", { size }) : logger8.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 }), {
2030
2623
  valid,
2031
2624
  errors,
2032
2625
  warnings,
@@ -2066,7 +2659,7 @@ var logger8 = chunkDSUCH44G_js.createLogger("TransactionValidator"), MAX_TRANSAC
2066
2659
  let result = this.validate(transaction, options);
2067
2660
  if (!result.valid)
2068
2661
  throw new Error(`Transaction validation failed: ${result.errors.join(", ")}`);
2069
- result.warnings.length > 0 && logger8.warn("Transaction validation warnings", { warnings: result.warnings });
2662
+ result.warnings.length > 0 && logger9.warn("Transaction validation warnings", { warnings: result.warnings });
2070
2663
  }
2071
2664
  /**
2072
2665
  * Batch validate multiple transactions
@@ -2077,10 +2670,10 @@ var logger8 = chunkDSUCH44G_js.createLogger("TransactionValidator"), MAX_TRANSAC
2077
2670
  * @returns Array of validation results
2078
2671
  */
2079
2672
  static validateBatch(transactions, options) {
2080
- return transactions.map((tx, index) => (logger8.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)));
2081
2674
  }
2082
2675
  };
2083
- var logger9 = chunkDSUCH44G_js.createLogger("TransactionSigner");
2676
+ var logger10 = chunkSITQ4JWM_js.createLogger("TransactionSigner");
2084
2677
  function signatureBytesToBase58(bytes) {
2085
2678
  if (bytes.length !== 64)
2086
2679
  throw new Error(`Invalid signature length: expected 64 bytes, got ${bytes.length}`);
@@ -2102,6 +2695,24 @@ function extractSignatureString(result) {
2102
2695
  }
2103
2696
  throw new Error("Unexpected wallet response format for signAndSendTransaction");
2104
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
+ }
2105
2716
  function createTransactionSigner(config) {
2106
2717
  let { wallet, account, cluster, eventEmitter } = config;
2107
2718
  if (!wallet || !account)
@@ -2115,14 +2726,14 @@ function createTransactionSigner(config) {
2115
2726
  address,
2116
2727
  async signTransaction(transaction) {
2117
2728
  if (!capabilities.canSign)
2118
- throw chunkDSUCH44G_js.Errors.featureNotSupported("transaction signing");
2729
+ throw chunkSITQ4JWM_js.Errors.featureNotSupported("transaction signing");
2119
2730
  let validation = TransactionValidator.validate(transaction);
2120
2731
  if (!validation.valid)
2121
- throw logger9.error("Transaction validation failed", { errors: validation.errors }), chunkDSUCH44G_js.Errors.invalidTransaction(validation.errors.join(", "));
2122
- validation.warnings.length > 0 && logger9.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 });
2123
2734
  try {
2124
- let signFeature = features["solana:signTransaction"], { serialized, wasWeb3js } = chunkDSUCH44G_js.prepareTransactionForWallet(transaction);
2125
- logger9.debug("Signing transaction", {
2735
+ let signFeature = features["solana:signTransaction"], { serialized, wasWeb3js } = chunk4KD6HQQG_js.prepareTransactionForWallet(transaction);
2736
+ logger10.debug("Signing transaction", {
2126
2737
  wasWeb3js,
2127
2738
  serializedLength: serialized.length,
2128
2739
  serializedType: serialized.constructor.name,
@@ -2131,26 +2742,26 @@ function createTransactionSigner(config) {
2131
2742
  });
2132
2743
  let result, usedFormat = "";
2133
2744
  try {
2134
- logger9.debug("Trying array format: transactions: [Uint8Array]"), result = await signFeature.signTransaction({
2745
+ logger10.debug("Trying array format: transactions: [Uint8Array]"), result = await signFeature.signTransaction({
2135
2746
  account,
2136
2747
  transactions: [serialized],
2137
2748
  ...cluster ? { chain: cluster.id } : {}
2138
2749
  }), usedFormat = "array";
2139
2750
  } catch (err1) {
2140
2751
  let error1 = err1 instanceof Error ? err1 : new Error(String(err1));
2141
- logger9.debug("Array format failed, trying singular format", { error: error1.message });
2752
+ logger10.debug("Array format failed, trying singular format", { error: error1.message });
2142
2753
  try {
2143
- logger9.debug("Trying singular format: transaction: Uint8Array"), result = await signFeature.signTransaction({
2754
+ logger10.debug("Trying singular format: transaction: Uint8Array"), result = await signFeature.signTransaction({
2144
2755
  account,
2145
2756
  transaction: serialized,
2146
2757
  ...cluster ? { chain: cluster.id } : {}
2147
2758
  }), usedFormat = "singular";
2148
2759
  } catch (err2) {
2149
2760
  let error2 = err2 instanceof Error ? err2 : new Error(String(err2));
2150
- throw logger9.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;
2151
2762
  }
2152
2763
  }
2153
- logger9.debug("Wallet signed successfully", { format: usedFormat });
2764
+ logger10.debug("Wallet signed successfully", { format: usedFormat });
2154
2765
  let signedTx;
2155
2766
  if (Array.isArray(result.signedTransactions) && result.signedTransactions[0])
2156
2767
  signedTx = result.signedTransactions[0];
@@ -2162,31 +2773,31 @@ function createTransactionSigner(config) {
2162
2773
  signedTx = result;
2163
2774
  else
2164
2775
  throw new Error(`Unexpected wallet response format: ${JSON.stringify(Object.keys(result))}`);
2165
- if (logger9.debug("Extracted signed transaction", {
2776
+ if (logger10.debug("Extracted signed transaction", {
2166
2777
  hasSignedTx: !!signedTx,
2167
2778
  signedTxType: signedTx?.constructor?.name,
2168
2779
  signedTxLength: signedTx?.length,
2169
2780
  isUint8Array: signedTx instanceof Uint8Array,
2170
2781
  hasSerialize: typeof signedTx?.serialize == "function"
2171
2782
  }), signedTx && typeof signedTx.serialize == "function")
2172
- return logger9.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;
2173
2784
  if (signedTx && signedTx.signedTransaction) {
2174
- logger9.debug("Found signedTransaction property");
2785
+ logger10.debug("Found signedTransaction property");
2175
2786
  let bytes = signedTx.signedTransaction;
2176
2787
  if (bytes instanceof Uint8Array)
2177
- return await chunkDSUCH44G_js.convertSignedTransaction(bytes, wasWeb3js);
2788
+ return await chunk4KD6HQQG_js.convertSignedTransaction(bytes, wasWeb3js);
2178
2789
  }
2179
2790
  if (signedTx instanceof Uint8Array)
2180
- return await chunkDSUCH44G_js.convertSignedTransaction(signedTx, wasWeb3js);
2181
- throw logger9.error("Unexpected wallet response format", {
2791
+ return await chunk4KD6HQQG_js.convertSignedTransaction(signedTx, wasWeb3js);
2792
+ throw logger10.error("Unexpected wallet response format", {
2182
2793
  type: typeof signedTx,
2183
2794
  constructor: signedTx?.constructor?.name
2184
- }), new chunkDSUCH44G_js.ValidationError(
2795
+ }), new chunkSITQ4JWM_js.ValidationError(
2185
2796
  "INVALID_FORMAT",
2186
2797
  "Wallet returned unexpected format - not a Transaction or Uint8Array"
2187
2798
  );
2188
2799
  } catch (error) {
2189
- throw chunkDSUCH44G_js.Errors.signingFailed(error);
2800
+ throw chunkSITQ4JWM_js.Errors.signingFailed(error);
2190
2801
  }
2191
2802
  },
2192
2803
  async signAllTransactions(transactions) {
@@ -2194,18 +2805,24 @@ function createTransactionSigner(config) {
2194
2805
  return [];
2195
2806
  if (capabilities.supportsBatchSigning)
2196
2807
  try {
2197
- let signFeature = features["solana:signAllTransactions"], prepared = transactions.map((tx) => chunkDSUCH44G_js.prepareTransactionForWallet(tx)), serializedTxs = prepared.map((p) => p.serialized), wasWeb3js = prepared[0].wasWeb3js, result = await signFeature.signAllTransactions({
2808
+ let signFeature = features["solana:signAllTransactions"], prepared = transactions.map((tx) => chunk4KD6HQQG_js.prepareTransactionForWallet(tx)), serializedTxs = prepared.map((p) => p.serialized), wasWeb3js = prepared[0].wasWeb3js, result = await signFeature.signAllTransactions({
2198
2809
  account,
2199
2810
  transactions: serializedTxs,
2200
2811
  ...cluster ? { chain: cluster.id } : {}
2201
- });
2812
+ }), signedBytesArray;
2813
+ if (Array.isArray(result))
2814
+ signedBytesArray = result.map((item) => item.signedTransaction);
2815
+ else if ("signedTransactions" in result)
2816
+ signedBytesArray = result.signedTransactions;
2817
+ else
2818
+ throw new Error("Unexpected signAllTransactions response format");
2202
2819
  return await Promise.all(
2203
- result.signedTransactions.map(
2204
- (signedBytes) => chunkDSUCH44G_js.convertSignedTransaction(signedBytes, wasWeb3js)
2820
+ signedBytesArray.map(
2821
+ (signedBytes) => chunk4KD6HQQG_js.convertSignedTransaction(signedBytes, wasWeb3js)
2205
2822
  )
2206
2823
  );
2207
2824
  } catch (error) {
2208
- throw new chunkDSUCH44G_js.TransactionError(
2825
+ throw new chunkSITQ4JWM_js.TransactionError(
2209
2826
  "SIGNING_FAILED",
2210
2827
  "Failed to sign transactions in batch",
2211
2828
  { count: transactions.length },
@@ -2213,14 +2830,14 @@ function createTransactionSigner(config) {
2213
2830
  );
2214
2831
  }
2215
2832
  if (!capabilities.canSign)
2216
- throw chunkDSUCH44G_js.Errors.featureNotSupported("transaction signing");
2833
+ throw chunkSITQ4JWM_js.Errors.featureNotSupported("transaction signing");
2217
2834
  let signed = [];
2218
2835
  for (let i = 0; i < transactions.length; i++)
2219
2836
  try {
2220
2837
  let signedTx = await signer.signTransaction(transactions[i]);
2221
2838
  signed.push(signedTx);
2222
2839
  } catch (error) {
2223
- throw new chunkDSUCH44G_js.TransactionError(
2840
+ throw new chunkSITQ4JWM_js.TransactionError(
2224
2841
  "SIGNING_FAILED",
2225
2842
  `Failed to sign transaction ${i + 1} of ${transactions.length}`,
2226
2843
  { index: i, total: transactions.length },
@@ -2231,9 +2848,9 @@ function createTransactionSigner(config) {
2231
2848
  },
2232
2849
  async signAndSendTransaction(transaction, options) {
2233
2850
  if (!capabilities.canSend)
2234
- throw chunkDSUCH44G_js.Errors.featureNotSupported("sending transactions");
2851
+ throw chunkSITQ4JWM_js.Errors.featureNotSupported("sending transactions");
2235
2852
  try {
2236
- let sendFeature = features["solana:signAndSendTransaction"], { serialized } = chunkDSUCH44G_js.prepareTransactionForWallet(transaction);
2853
+ let sendFeature = features["solana:signAndSendTransaction"], { serialized } = chunk4KD6HQQG_js.prepareTransactionForWallet(transaction);
2237
2854
  eventEmitter && eventEmitter.emit({
2238
2855
  type: "transaction:preparing",
2239
2856
  transaction: serialized,
@@ -2268,21 +2885,21 @@ function createTransactionSigner(config) {
2268
2885
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
2269
2886
  }), signature;
2270
2887
  } catch (error) {
2271
- throw new chunkDSUCH44G_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);
2272
2889
  }
2273
2890
  },
2274
2891
  async signAndSendTransactions(transactions, options) {
2275
2892
  if (transactions.length === 0)
2276
2893
  return [];
2277
2894
  if (!capabilities.canSend)
2278
- throw chunkDSUCH44G_js.Errors.featureNotSupported("sending transactions");
2895
+ throw chunkSITQ4JWM_js.Errors.featureNotSupported("sending transactions");
2279
2896
  let signatures = [];
2280
2897
  for (let i = 0; i < transactions.length; i++)
2281
2898
  try {
2282
2899
  let sig = await signer.signAndSendTransaction(transactions[i], options);
2283
2900
  signatures.push(sig);
2284
2901
  } catch (error) {
2285
- throw new chunkDSUCH44G_js.TransactionError(
2902
+ throw new chunkSITQ4JWM_js.TransactionError(
2286
2903
  "SEND_FAILED",
2287
2904
  `Failed to send transaction ${i + 1} of ${transactions.length}`,
2288
2905
  { index: i, total: transactions.length },
@@ -2294,13 +2911,14 @@ function createTransactionSigner(config) {
2294
2911
  ...capabilities.canSignMessage && {
2295
2912
  async signMessage(message) {
2296
2913
  try {
2297
- return (await features["solana:signMessage"].signMessage({
2914
+ let result = await features["solana:signMessage"].signMessage({
2298
2915
  account,
2299
2916
  message,
2300
2917
  ...cluster ? { chain: cluster.id } : {}
2301
- })).signature;
2918
+ });
2919
+ return extractSignatureBytes(result);
2302
2920
  } catch (error) {
2303
- throw new chunkDSUCH44G_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);
2304
2922
  }
2305
2923
  }
2306
2924
  },
@@ -2310,16 +2928,16 @@ function createTransactionSigner(config) {
2310
2928
  };
2311
2929
  return signer;
2312
2930
  }
2313
- var TransactionSignerError = class extends chunkDSUCH44G_js.TransactionError {
2931
+ var TransactionSignerError = class extends chunkSITQ4JWM_js.TransactionError {
2314
2932
  constructor(message, code, originalError) {
2315
2933
  let newCode = code === "WALLET_NOT_CONNECTED" ? "FEATURE_NOT_SUPPORTED" : code;
2316
2934
  super(newCode, message, void 0, originalError), this.name = "TransactionSignerError";
2317
2935
  }
2318
2936
  };
2319
2937
  function isTransactionSignerError(error) {
2320
- return error instanceof TransactionSignerError || error instanceof chunkDSUCH44G_js.TransactionError;
2938
+ return error instanceof TransactionSignerError || error instanceof chunkSITQ4JWM_js.TransactionError;
2321
2939
  }
2322
- var logger10 = chunkDSUCH44G_js.createLogger("KitTransactionSigner");
2940
+ var logger11 = chunkSITQ4JWM_js.createLogger("KitTransactionSigner");
2323
2941
  function encodeShortVecLength(value) {
2324
2942
  let bytes = [], remaining = value;
2325
2943
  for (; remaining >= 128; )
@@ -2374,7 +2992,7 @@ function extractSignature(signedTx) {
2374
2992
  let signatureStart = bytesConsumed;
2375
2993
  return signedTx.slice(signatureStart, signatureStart + 64);
2376
2994
  }
2377
- if (chunkDSUCH44G_js.isWeb3jsTransaction(signedTx)) {
2995
+ if (chunk4KD6HQQG_js.isWeb3jsTransaction(signedTx)) {
2378
2996
  let signatures = signedTx.signatures;
2379
2997
  if (!signatures || signatures.length === 0)
2380
2998
  throw new Error("No signatures found in web3.js transaction");
@@ -2394,7 +3012,7 @@ function createKitTransactionSigner(connectorSigner) {
2394
3012
  async modifyAndSignTransactions(transactions$1) {
2395
3013
  let transactionData = transactions$1.map((tx) => {
2396
3014
  let messageBytes = new Uint8Array(tx.messageBytes), { numSigners } = parseMessageSigners(messageBytes), wireFormat = createTransactionBytesForSigning(messageBytes, numSigners);
2397
- return logger10.debug("Preparing wire format for wallet", {
3015
+ return logger11.debug("Preparing wire format for wallet", {
2398
3016
  signerAddress,
2399
3017
  messageBytesLength: messageBytes.length,
2400
3018
  wireFormatLength: wireFormat.length,
@@ -2415,7 +3033,7 @@ function createKitTransactionSigner(connectorSigner) {
2415
3033
  let signedTxBytes;
2416
3034
  if (signedTx instanceof Uint8Array)
2417
3035
  signedTxBytes = signedTx;
2418
- else if (chunkDSUCH44G_js.isWeb3jsTransaction(signedTx)) {
3036
+ else if (chunk4KD6HQQG_js.isWeb3jsTransaction(signedTx)) {
2419
3037
  let txObj = signedTx;
2420
3038
  if (typeof txObj.serialize == "function")
2421
3039
  signedTxBytes = txObj.serialize();
@@ -2423,14 +3041,14 @@ function createKitTransactionSigner(connectorSigner) {
2423
3041
  throw new Error("Web3.js transaction without serialize method");
2424
3042
  } else
2425
3043
  throw new Error("Unknown signed transaction format");
2426
- if (logger10.debug("Wallet returned signed transaction", {
3044
+ if (logger11.debug("Wallet returned signed transaction", {
2427
3045
  returnedLength: signedTxBytes.length,
2428
3046
  sentLength: wireFormat.length,
2429
3047
  lengthsMatch: signedTxBytes.length === wireFormat.length,
2430
3048
  signedFirstBytes: Array.from(signedTxBytes.slice(0, 20)),
2431
3049
  sentFirstBytes: Array.from(wireFormat.slice(0, 20))
2432
3050
  }), signedTxBytes.length !== wireFormat.length) {
2433
- logger10.warn("Wallet modified transaction! Using wallet version", {
3051
+ logger11.warn("Wallet modified transaction! Using wallet version", {
2434
3052
  originalLength: wireFormat.length,
2435
3053
  modifiedLength: signedTxBytes.length,
2436
3054
  difference: signedTxBytes.length - wireFormat.length
@@ -2441,13 +3059,13 @@ function createKitTransactionSigner(connectorSigner) {
2441
3059
  lifetimeConstraint: originalWithLifetime.lifetimeConstraint
2442
3060
  } : {}
2443
3061
  };
2444
- return logger10.debug("Using modified transaction from wallet", {
3062
+ return logger11.debug("Using modified transaction from wallet", {
2445
3063
  modifiedMessageBytesLength: walletTransaction.messageBytes.length,
2446
3064
  signatures: Object.keys(walletTransaction.signatures)
2447
3065
  }), transactions.assertIsTransactionWithinSizeLimit(result), result;
2448
3066
  }
2449
3067
  let extractedSignatureBytes = extractSignature(signedTxBytes), signatureBase58 = codecs.getBase58Decoder().decode(extractedSignatureBytes);
2450
- logger10.debug("Extracted signature from wallet (unmodified)", {
3068
+ logger11.debug("Extracted signature from wallet (unmodified)", {
2451
3069
  signerAddress,
2452
3070
  signatureLength: extractedSignatureBytes.length,
2453
3071
  signatureBase58
@@ -2462,7 +3080,7 @@ function createKitTransactionSigner(connectorSigner) {
2462
3080
  };
2463
3081
  return transactions.assertIsTransactionWithinSizeLimit(signedTransaction), signedTransaction;
2464
3082
  } catch (error) {
2465
- return logger10.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;
2466
3084
  }
2467
3085
  });
2468
3086
  }
@@ -2472,14 +3090,21 @@ var createGillTransactionSigner = createKitTransactionSigner;
2472
3090
 
2473
3091
  exports.ClipboardErrorType = ClipboardErrorType;
2474
3092
  exports.ConnectorClient = ConnectorClient;
2475
- exports.ConnectorErrorBoundary = ConnectorErrorBoundary;
2476
- exports.DEFAULT_MAX_RETRIES = DEFAULT_MAX_RETRIES;
3093
+ exports.EnhancedStorage = EnhancedStorage;
3094
+ exports.EnhancedStorageAdapter = EnhancedStorageAdapter;
3095
+ exports.INITIAL_WALLET_STATUS = INITIAL_WALLET_STATUS;
2477
3096
  exports.PUBLIC_RPC_ENDPOINTS = PUBLIC_RPC_ENDPOINTS;
2478
3097
  exports.TransactionSignerError = TransactionSignerError;
2479
- exports.WalletErrorType = WalletErrorType;
3098
+ exports.WALLET_STATE_VERSION = WALLET_STATE_VERSION;
3099
+ exports.clearWalletState = clearWalletState;
2480
3100
  exports.copyAddressToClipboard = copyAddressToClipboard;
2481
3101
  exports.copySignatureToClipboard = copySignatureToClipboard;
2482
3102
  exports.copyToClipboard = copyToClipboard;
3103
+ exports.createConnectorId = createConnectorId;
3104
+ exports.createEnhancedStorageAccount = createEnhancedStorageAccount;
3105
+ exports.createEnhancedStorageCluster = createEnhancedStorageCluster;
3106
+ exports.createEnhancedStorageWallet = createEnhancedStorageWallet;
3107
+ exports.createEnhancedStorageWalletState = createEnhancedStorageWalletState;
2483
3108
  exports.createGillTransactionSigner = createGillTransactionSigner;
2484
3109
  exports.createKitTransactionSigner = createKitTransactionSigner;
2485
3110
  exports.createTransactionSigner = createTransactionSigner;
@@ -2499,29 +3124,41 @@ exports.getClusterExplorerUrl = getClusterExplorerUrl;
2499
3124
  exports.getClusterName = getClusterName;
2500
3125
  exports.getClusterRpcUrl = getClusterRpcUrl;
2501
3126
  exports.getClusterType = getClusterType;
3127
+ exports.getDefaultConfig = getDefaultConfig;
3128
+ exports.getDefaultMobileConfig = getDefaultMobileConfig;
2502
3129
  exports.getDefaultRpcUrl = getDefaultRpcUrl;
2503
3130
  exports.getNetworkDisplayName = getNetworkDisplayName;
2504
3131
  exports.getPolyfillStatus = getPolyfillStatus;
2505
3132
  exports.getTokenUrl = getTokenUrl;
2506
3133
  exports.getTransactionUrl = getTransactionUrl;
3134
+ exports.getWalletNameFromConnectorId = getWalletNameFromConnectorId;
2507
3135
  exports.getWalletsRegistry = getWalletsRegistry;
2508
3136
  exports.installPolyfills = installPolyfills;
2509
3137
  exports.isClipboardAvailable = isClipboardAvailable;
3138
+ exports.isConnected = isConnected;
3139
+ exports.isConnecting = isConnecting;
2510
3140
  exports.isCryptoAvailable = isCryptoAvailable;
2511
3141
  exports.isDevnet = isDevnet;
2512
3142
  exports.isDevnetCluster = isDevnetCluster;
3143
+ exports.isDisconnected = isDisconnected;
2513
3144
  exports.isLocalCluster = isLocalCluster;
2514
3145
  exports.isLocalnet = isLocalnet;
2515
3146
  exports.isMainnet = isMainnet;
2516
3147
  exports.isMainnetCluster = isMainnetCluster;
2517
3148
  exports.isPolyfillInstalled = isPolyfillInstalled;
3149
+ exports.isStatusError = isStatusError;
2518
3150
  exports.isTestnet = isTestnet;
2519
3151
  exports.isTestnetCluster = isTestnetCluster;
2520
3152
  exports.isTransactionSignerError = isTransactionSignerError;
3153
+ exports.isWalletConnectorId = isWalletConnectorId;
3154
+ exports.isWalletStatusError = isWalletStatusError;
2521
3155
  exports.normalizeNetwork = normalizeNetwork;
3156
+ exports.parseConfigOptions = parseConfigOptions;
2522
3157
  exports.ready = ready;
3158
+ exports.saveWalletState = saveWalletState;
2523
3159
  exports.toClusterId = toClusterId;
3160
+ exports.toLegacyWalletState = toLegacyWalletState;
2524
3161
  exports.truncate = truncate;
2525
- exports.withErrorBoundary = withErrorBoundary;
2526
- //# sourceMappingURL=chunk-5HRJKCIL.js.map
2527
- //# sourceMappingURL=chunk-5HRJKCIL.js.map
3162
+ exports.validateConfigOptions = validateConfigOptions;
3163
+ //# sourceMappingURL=chunk-BZ2VBJCZ.js.map
3164
+ //# sourceMappingURL=chunk-BZ2VBJCZ.js.map