@solana/connector 0.2.1 → 0.2.3

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 (79) hide show
  1. package/README.md +17 -0
  2. package/dist/{chunk-UCISIAOG.mjs → chunk-A7WQ3K75.mjs} +3 -3
  3. package/dist/{chunk-UCISIAOG.mjs.map → chunk-A7WQ3K75.mjs.map} +1 -1
  4. package/dist/{chunk-4Z2F6ERB.js → chunk-B6YBZB6H.js} +49 -48
  5. package/dist/chunk-B6YBZB6H.js.map +1 -0
  6. package/dist/{chunk-SITQ4JWM.js → chunk-BF67LVVM.js} +17 -21
  7. package/dist/chunk-BF67LVVM.js.map +1 -0
  8. package/dist/{chunk-IDTUFDNB.mjs → chunk-DFKGCW7K.mjs} +98 -12
  9. package/dist/chunk-DFKGCW7K.mjs.map +1 -0
  10. package/dist/chunk-E3DAIOYS.mjs +22 -0
  11. package/dist/chunk-E3DAIOYS.mjs.map +1 -0
  12. package/dist/chunk-FG7HTQTV.mjs +7 -0
  13. package/dist/chunk-FG7HTQTV.mjs.map +1 -0
  14. package/dist/chunk-L5FWMNWO.js +9 -0
  15. package/dist/chunk-L5FWMNWO.js.map +1 -0
  16. package/dist/{chunk-HN5AJF7F.js → chunk-NLPEO5GT.js} +5 -5
  17. package/dist/{chunk-HN5AJF7F.js.map → chunk-NLPEO5GT.js.map} +1 -1
  18. package/dist/chunk-QST7XLMB.js +26 -0
  19. package/dist/chunk-QST7XLMB.js.map +1 -0
  20. package/dist/{chunk-ZZTY3O4N.mjs → chunk-SJCQ3KZE.mjs} +4 -7
  21. package/dist/chunk-SJCQ3KZE.mjs.map +1 -0
  22. package/dist/{chunk-BZ2VBJCZ.js → chunk-ULEPN4NL.js} +181 -95
  23. package/dist/chunk-ULEPN4NL.js.map +1 -0
  24. package/dist/{chunk-HPQ5T32K.mjs → chunk-UOML5ULB.mjs} +4 -4
  25. package/dist/{chunk-HPQ5T32K.mjs.map → chunk-UOML5ULB.mjs.map} +1 -1
  26. package/dist/{chunk-MDR4Y37Z.mjs → chunk-WPDCSFX2.mjs} +5 -4
  27. package/dist/chunk-WPDCSFX2.mjs.map +1 -0
  28. package/dist/{chunk-BJAVJQLK.js → chunk-X2X5TFXS.js} +6 -6
  29. package/dist/{chunk-BJAVJQLK.js.map → chunk-X2X5TFXS.js.map} +1 -1
  30. package/dist/compat.js +2 -2
  31. package/dist/compat.mjs +1 -1
  32. package/dist/fireblocks-FLKRTJU3.js +67 -0
  33. package/dist/fireblocks-FLKRTJU3.js.map +1 -0
  34. package/dist/fireblocks-KCJV3GEK.mjs +65 -0
  35. package/dist/fireblocks-KCJV3GEK.mjs.map +1 -0
  36. package/dist/headless.d.mts +11 -11
  37. package/dist/headless.d.ts +11 -11
  38. package/dist/headless.js +147 -147
  39. package/dist/headless.mjs +4 -4
  40. package/dist/index.d.mts +1 -1
  41. package/dist/index.d.ts +1 -1
  42. package/dist/index.js +188 -188
  43. package/dist/index.mjs +5 -5
  44. package/dist/privy-6LYDE24Z.mjs +64 -0
  45. package/dist/privy-6LYDE24Z.mjs.map +1 -0
  46. package/dist/privy-ID4YFTKR.js +66 -0
  47. package/dist/privy-ID4YFTKR.js.map +1 -0
  48. package/dist/protocol-G-z1lRqo.d.mts +166 -0
  49. package/dist/protocol-G-z1lRqo.d.ts +166 -0
  50. package/dist/react.d.mts +3 -3
  51. package/dist/react.d.ts +3 -3
  52. package/dist/react.js +49 -49
  53. package/dist/react.mjs +2 -2
  54. package/dist/remote.d.mts +46 -0
  55. package/dist/remote.d.ts +46 -0
  56. package/dist/remote.js +212 -0
  57. package/dist/remote.js.map +1 -0
  58. package/dist/remote.mjs +198 -0
  59. package/dist/remote.mjs.map +1 -0
  60. package/dist/server.d.mts +141 -0
  61. package/dist/server.d.ts +141 -0
  62. package/dist/server.js +189 -0
  63. package/dist/server.js.map +1 -0
  64. package/dist/server.mjs +187 -0
  65. package/dist/server.mjs.map +1 -0
  66. package/dist/{standard-shim-tmnQelaJ.d.ts → standard-shim-BB0Lkg_C.d.ts} +44 -1
  67. package/dist/{standard-shim-CGB88PPO.d.mts → standard-shim-n5phZB1d.d.mts} +44 -1
  68. package/dist/{walletconnect-447EY3OJ.js → walletconnect-F2M3PAAN.js} +8 -8
  69. package/dist/{walletconnect-447EY3OJ.js.map → walletconnect-F2M3PAAN.js.map} +1 -1
  70. package/dist/walletconnect-Z6LPGALR.mjs +3 -0
  71. package/dist/{walletconnect-U455PO4I.mjs.map → walletconnect-Z6LPGALR.mjs.map} +1 -1
  72. package/package.json +27 -2
  73. package/dist/chunk-4Z2F6ERB.js.map +0 -1
  74. package/dist/chunk-BZ2VBJCZ.js.map +0 -1
  75. package/dist/chunk-IDTUFDNB.mjs.map +0 -1
  76. package/dist/chunk-MDR4Y37Z.mjs.map +0 -1
  77. package/dist/chunk-SITQ4JWM.js.map +0 -1
  78. package/dist/chunk-ZZTY3O4N.mjs.map +0 -1
  79. package/dist/walletconnect-U455PO4I.mjs +0 -3
@@ -1,7 +1,8 @@
1
1
  'use strict';
2
2
 
3
3
  var chunk4KD6HQQG_js = require('./chunk-4KD6HQQG.js');
4
- var chunkSITQ4JWM_js = require('./chunk-SITQ4JWM.js');
4
+ var chunkBF67LVVM_js = require('./chunk-BF67LVVM.js');
5
+ var chunkL5FWMNWO_js = require('./chunk-L5FWMNWO.js');
5
6
  var webcryptoEd25519Polyfill = require('@solana/webcrypto-ed25519-polyfill');
6
7
  var core = require('@wallet-ui/core');
7
8
  var addresses = require('@solana/addresses');
@@ -140,7 +141,7 @@ function toClusterId(network) {
140
141
  function getDefaultRpcUrl(network) {
141
142
  let normalized = normalizeNetwork(network);
142
143
  try {
143
- return chunkSITQ4JWM_js.getPublicSolanaRpcUrl(normalized);
144
+ return chunkBF67LVVM_js.getPublicSolanaRpcUrl(normalized);
144
145
  } catch {
145
146
  return PUBLIC_RPC_ENDPOINTS[normalized] ?? PUBLIC_RPC_ENDPOINTS.localnet;
146
147
  }
@@ -195,14 +196,14 @@ function getClusterExplorerUrl(cluster, path) {
195
196
  }
196
197
  function getTransactionUrl(signature, cluster) {
197
198
  let clusterType = getClusterType(cluster), explorerCluster = clusterType === "custom" || clusterType === "localnet" ? "devnet" : clusterType;
198
- return chunkSITQ4JWM_js.getExplorerLink({
199
+ return chunkBF67LVVM_js.getExplorerLink({
199
200
  transaction: signature,
200
201
  cluster: explorerCluster === "mainnet" ? "mainnet" : explorerCluster
201
202
  });
202
203
  }
203
204
  function getAddressUrl(address, cluster) {
204
205
  let clusterType = getClusterType(cluster), explorerCluster = clusterType === "custom" || clusterType === "localnet" ? "devnet" : clusterType;
205
- return chunkSITQ4JWM_js.getExplorerLink({
206
+ return chunkBF67LVVM_js.getExplorerLink({
206
207
  address,
207
208
  cluster: explorerCluster === "mainnet" ? "mainnet" : explorerCluster
208
209
  });
@@ -265,9 +266,9 @@ var POLL_INTERVALS_MS = [1e3, 2e3, 3e3, 5e3, 5e3], DEFAULT_MAX_RETRIES = 3, DEFA
265
266
  // src/lib/core/state-manager.ts
266
267
  var StateManager = class {
267
268
  constructor(initialState) {
268
- chunkSITQ4JWM_js.__publicField(this, "state");
269
- chunkSITQ4JWM_js.__publicField(this, "listeners", /* @__PURE__ */ new Set());
270
- chunkSITQ4JWM_js.__publicField(this, "notifyTimeout");
269
+ chunkL5FWMNWO_js.__publicField(this, "state");
270
+ chunkL5FWMNWO_js.__publicField(this, "listeners", /* @__PURE__ */ new Set());
271
+ chunkL5FWMNWO_js.__publicField(this, "notifyTimeout");
271
272
  this.state = initialState;
272
273
  }
273
274
  /**
@@ -326,10 +327,10 @@ var StateManager = class {
326
327
  };
327
328
 
328
329
  // src/lib/core/event-emitter.ts
329
- var logger = chunkSITQ4JWM_js.createLogger("EventEmitter"), EventEmitter = class {
330
+ var logger = chunkBF67LVVM_js.createLogger("EventEmitter"), EventEmitter = class {
330
331
  constructor(debug = false) {
331
- chunkSITQ4JWM_js.__publicField(this, "listeners", /* @__PURE__ */ new Set());
332
- chunkSITQ4JWM_js.__publicField(this, "debug");
332
+ chunkL5FWMNWO_js.__publicField(this, "listeners", /* @__PURE__ */ new Set());
333
+ chunkL5FWMNWO_js.__publicField(this, "debug");
333
334
  this.debug = debug;
334
335
  }
335
336
  /**
@@ -385,12 +386,12 @@ var logger = chunkSITQ4JWM_js.createLogger("EventEmitter"), EventEmitter = class
385
386
  // src/lib/core/debug-metrics.ts
386
387
  var DebugMetrics = class {
387
388
  constructor() {
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);
389
+ chunkL5FWMNWO_js.__publicField(this, "stateUpdates", 0);
390
+ chunkL5FWMNWO_js.__publicField(this, "noopUpdates", 0);
391
+ chunkL5FWMNWO_js.__publicField(this, "updateTimes", []);
392
+ chunkL5FWMNWO_js.__publicField(this, "lastUpdateTime", 0);
393
+ chunkL5FWMNWO_js.__publicField(this, "eventListenerCount", 0);
394
+ chunkL5FWMNWO_js.__publicField(this, "subscriptionCount", 0);
394
395
  }
395
396
  /**
396
397
  * Record a state update attempt
@@ -430,11 +431,11 @@ var DebugMetrics = class {
430
431
  // src/lib/core/base-collaborator.ts
431
432
  var BaseCollaborator = class {
432
433
  constructor(config, 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);
434
+ chunkL5FWMNWO_js.__publicField(this, "stateManager");
435
+ chunkL5FWMNWO_js.__publicField(this, "eventEmitter");
436
+ chunkL5FWMNWO_js.__publicField(this, "debug");
437
+ chunkL5FWMNWO_js.__publicField(this, "logger");
438
+ this.stateManager = config.stateManager, this.eventEmitter = config.eventEmitter, this.debug = config.debug ?? false, this.logger = chunkBF67LVVM_js.createLogger(loggerPrefix);
438
439
  }
439
440
  /**
440
441
  * Log debug message if debug mode is enabled
@@ -457,7 +458,7 @@ var BaseCollaborator = class {
457
458
  };
458
459
 
459
460
  // src/lib/wallet/authenticity-verifier.ts
460
- var logger2 = chunkSITQ4JWM_js.createLogger("WalletAuthenticity"), WalletAuthenticityVerifier = class {
461
+ var logger2 = chunkBF67LVVM_js.createLogger("WalletAuthenticity"), WalletAuthenticityVerifier = class {
461
462
  /**
462
463
  * Verify a wallet's authenticity using dynamic heuristics
463
464
  *
@@ -699,10 +700,32 @@ function applyWalletIconOverride(wallet) {
699
700
  }
700
701
 
701
702
  // src/lib/wallet/detector.ts
702
- var logger3 = chunkSITQ4JWM_js.createLogger("WalletDetector");
703
+ var logger3 = chunkBF67LVVM_js.createLogger("WalletDetector");
703
704
  function isSolanaWallet(wallet) {
704
705
  return Array.isArray(wallet.chains) && wallet.chains.some((chain) => typeof chain == "string" && chain.startsWith("solana:"));
705
706
  }
707
+ function normalizeWalletName(value) {
708
+ return value.trim().toLowerCase();
709
+ }
710
+ function applyWalletDisplayConfig(wallets, config) {
711
+ if (!config) return [...wallets];
712
+ let allowList = (config.allowList ?? []).map(normalizeWalletName).filter(Boolean), denyList = (config.denyList ?? []).map(normalizeWalletName).filter(Boolean), featured = (config.featured ?? []).map(normalizeWalletName).filter(Boolean), allowSet = new Set(allowList), denySet = new Set(denyList), filtered = wallets.filter((wallet) => {
713
+ let name = normalizeWalletName(wallet.name);
714
+ return !(denySet.has(name) || allowSet.size > 0 && !allowSet.has(name));
715
+ });
716
+ if (featured.length === 0) return filtered;
717
+ let byName = /* @__PURE__ */ new Map();
718
+ for (let wallet of filtered)
719
+ byName.set(normalizeWalletName(wallet.name), wallet);
720
+ let featuredWallets = [], featuredNames = /* @__PURE__ */ new Set();
721
+ for (let name of featured) {
722
+ if (featuredNames.has(name)) continue;
723
+ let wallet = byName.get(name);
724
+ wallet && (featuredNames.add(name), featuredWallets.push(wallet));
725
+ }
726
+ let remaining = filtered.filter((wallet) => !featuredNames.has(normalizeWalletName(wallet.name)));
727
+ return [...featuredWallets, ...remaining];
728
+ }
706
729
  function hasFeature(wallet, featureName) {
707
730
  return wallet.features != null && wallet.features[featureName] !== void 0;
708
731
  }
@@ -724,9 +747,51 @@ function verifyWalletName(wallet, requestedName) {
724
747
  var WalletDetector = class extends BaseCollaborator {
725
748
  constructor(stateManager, eventEmitter, debug = false) {
726
749
  super({ stateManager, eventEmitter, debug }, "WalletDetector");
727
- chunkSITQ4JWM_js.__publicField(this, "unsubscribers", []);
750
+ chunkL5FWMNWO_js.__publicField(this, "unsubscribers", []);
751
+ chunkL5FWMNWO_js.__publicField(this, "additionalWallets", []);
752
+ chunkL5FWMNWO_js.__publicField(this, "walletDisplayConfig");
728
753
  /** Map from stable connector ID to Wallet reference (not stored in state) */
729
- chunkSITQ4JWM_js.__publicField(this, "connectorRegistry", /* @__PURE__ */ new Map());
754
+ chunkL5FWMNWO_js.__publicField(this, "connectorRegistry", /* @__PURE__ */ new Map());
755
+ }
756
+ /**
757
+ * Set additional wallets to include alongside Wallet Standard wallets.
758
+ * These wallets (e.g., remote signers) will be merged with detected wallets.
759
+ *
760
+ * @param wallets - Array of Wallet Standard compatible wallets
761
+ */
762
+ setAdditionalWallets(wallets) {
763
+ this.additionalWallets = wallets, this.refreshWallets();
764
+ }
765
+ /**
766
+ * Get additional wallets that have been configured
767
+ */
768
+ getAdditionalWallets() {
769
+ return this.additionalWallets;
770
+ }
771
+ /**
772
+ * Set wallet display controls for Wallet Standard auto-discovery.
773
+ * This affects which detected wallets are exposed as connectors (and therefore selectable / autoConnect-able).
774
+ */
775
+ setWalletDisplayConfig(config) {
776
+ this.walletDisplayConfig = config, this.unsubscribers.length > 0 && this.refreshWallets();
777
+ }
778
+ /**
779
+ * Refresh wallet list (re-detect and merge)
780
+ */
781
+ refreshWallets() {
782
+ if (!(typeof window > "u"))
783
+ try {
784
+ let registryWallets = getWalletsRegistry().get().filter(isSolanaWallet), additionalWallets = this.additionalWallets.filter(isSolanaWallet), unique = this.deduplicateWallets([...registryWallets, ...additionalWallets]), filtered = applyWalletDisplayConfig(unique, this.walletDisplayConfig);
785
+ this.updateConnectorRegistry(filtered), this.stateManager.updateState({
786
+ wallets: filtered.map((w) => this.mapToWalletInfo(w)),
787
+ connectors: filtered.map((w) => this.mapToConnectorMetadata(w))
788
+ }), this.log("\u{1F50D} WalletDetector: refreshed wallets", {
789
+ registry: registryWallets.length,
790
+ additional: additionalWallets.length,
791
+ total: filtered.length
792
+ });
793
+ } catch {
794
+ }
730
795
  }
731
796
  /**
732
797
  * Initialize wallet detection (synchronous)
@@ -742,10 +807,14 @@ var WalletDetector = class extends BaseCollaborator {
742
807
  if (!(typeof window > "u"))
743
808
  try {
744
809
  let walletsApi = getWalletsRegistry(), update = () => {
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))
810
+ let ws = walletsApi.get(), previousCount = this.getState().wallets.length, registryWallets = ws.filter(isSolanaWallet), additionalWallets = this.additionalWallets.filter(isSolanaWallet), unique = this.deduplicateWallets([...registryWallets, ...additionalWallets]), filtered = applyWalletDisplayConfig(unique, this.walletDisplayConfig), newCount = filtered.length;
811
+ newCount !== previousCount && this.log("\u{1F50D} WalletDetector: found wallets:", {
812
+ registry: registryWallets.length,
813
+ additional: additionalWallets.length,
814
+ total: newCount
815
+ }), this.updateConnectorRegistry(filtered), this.stateManager.updateState({
816
+ wallets: filtered.map((w) => this.mapToWalletInfo(w)),
817
+ connectors: filtered.map((w) => this.mapToConnectorMetadata(w))
749
818
  }), newCount !== previousCount && newCount > 0 && this.eventEmitter.emit({
750
819
  type: "wallets:detected",
751
820
  count: newCount,
@@ -919,13 +988,13 @@ function getEventsFeature(wallet) {
919
988
  var ConnectionManager = class extends BaseCollaborator {
920
989
  constructor(stateManager, eventEmitter, walletStorage, debug = false) {
921
990
  super({ stateManager, eventEmitter, debug }, "ConnectionManager");
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);
991
+ chunkL5FWMNWO_js.__publicField(this, "walletStorage");
992
+ chunkL5FWMNWO_js.__publicField(this, "walletChangeUnsub", null);
993
+ chunkL5FWMNWO_js.__publicField(this, "pollTimer", null);
994
+ chunkL5FWMNWO_js.__publicField(this, "pollAttempts", 0);
995
+ chunkL5FWMNWO_js.__publicField(this, "connectAttemptId", 0);
996
+ chunkL5FWMNWO_js.__publicField(this, "pendingWallet", null);
997
+ chunkL5FWMNWO_js.__publicField(this, "pendingWalletName", null);
929
998
  this.walletStorage = walletStorage;
930
999
  }
931
1000
  // ========================================================================
@@ -1362,16 +1431,16 @@ var ConnectionManager = class extends BaseCollaborator {
1362
1431
  };
1363
1432
 
1364
1433
  // src/lib/wallet/auto-connector.ts
1365
- var logger4 = chunkSITQ4JWM_js.createLogger("AutoConnector"), MIN_ADDRESS_LENGTH = 30, AutoConnector = class {
1434
+ var logger4 = chunkBF67LVVM_js.createLogger("AutoConnector"), MIN_ADDRESS_LENGTH = 30, AutoConnector = class {
1366
1435
  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");
1436
+ chunkL5FWMNWO_js.__publicField(this, "walletDetector");
1437
+ chunkL5FWMNWO_js.__publicField(this, "connectionManager");
1438
+ chunkL5FWMNWO_js.__publicField(this, "stateManager");
1370
1439
  /** Legacy wallet name storage */
1371
- chunkSITQ4JWM_js.__publicField(this, "walletStorage");
1440
+ chunkL5FWMNWO_js.__publicField(this, "walletStorage");
1372
1441
  /** vNext wallet state storage (connector ID + account) */
1373
- chunkSITQ4JWM_js.__publicField(this, "walletStateStorage");
1374
- chunkSITQ4JWM_js.__publicField(this, "debug");
1442
+ chunkL5FWMNWO_js.__publicField(this, "walletStateStorage");
1443
+ chunkL5FWMNWO_js.__publicField(this, "debug");
1375
1444
  this.walletDetector = walletDetector, this.connectionManager = connectionManager, this.stateManager = stateManager, this.walletStorage = walletStorage, this.walletStateStorage = walletStateStorage, this.debug = debug;
1376
1445
  }
1377
1446
  async attemptAutoConnect() {
@@ -1555,7 +1624,7 @@ var logger4 = chunkSITQ4JWM_js.createLogger("AutoConnector"), MIN_ADDRESS_LENGTH
1555
1624
  var ClusterManager = class extends BaseCollaborator {
1556
1625
  constructor(stateManager, eventEmitter, clusterStorage, config, debug = false) {
1557
1626
  super({ stateManager, eventEmitter, debug }, "ClusterManager");
1558
- chunkSITQ4JWM_js.__publicField(this, "clusterStorage");
1627
+ chunkL5FWMNWO_js.__publicField(this, "clusterStorage");
1559
1628
  if (this.clusterStorage = clusterStorage, config) {
1560
1629
  let clusters = config.clusters ?? [], initialClusterId = this.clusterStorage?.get() ?? config.initialCluster ?? "solana:mainnet", initialCluster = clusters.find((c) => c.id === initialClusterId) ?? clusters[0] ?? null;
1561
1630
  this.stateManager.updateState({
@@ -1570,7 +1639,7 @@ var ClusterManager = class extends BaseCollaborator {
1570
1639
  async setCluster(clusterId) {
1571
1640
  let state = this.getState(), previousClusterId = state.cluster?.id || null, cluster = state.clusters.find((c) => c.id === clusterId);
1572
1641
  if (!cluster)
1573
- throw chunkSITQ4JWM_js.Errors.clusterNotFound(
1642
+ throw chunkBF67LVVM_js.Errors.clusterNotFound(
1574
1643
  clusterId,
1575
1644
  state.clusters.map((c) => c.id)
1576
1645
  );
@@ -1599,9 +1668,9 @@ var ClusterManager = class extends BaseCollaborator {
1599
1668
  var TransactionTracker = class extends BaseCollaborator {
1600
1669
  constructor(stateManager, eventEmitter, maxTransactions = 20, debug = false) {
1601
1670
  super({ stateManager, eventEmitter, debug }, "TransactionTracker");
1602
- chunkSITQ4JWM_js.__publicField(this, "transactions", []);
1603
- chunkSITQ4JWM_js.__publicField(this, "totalTransactions", 0);
1604
- chunkSITQ4JWM_js.__publicField(this, "maxTransactions");
1671
+ chunkL5FWMNWO_js.__publicField(this, "transactions", []);
1672
+ chunkL5FWMNWO_js.__publicField(this, "totalTransactions", 0);
1673
+ chunkL5FWMNWO_js.__publicField(this, "maxTransactions");
1605
1674
  this.maxTransactions = maxTransactions;
1606
1675
  }
1607
1676
  /**
@@ -1655,10 +1724,10 @@ var TransactionTracker = class extends BaseCollaborator {
1655
1724
  // src/lib/health/health-monitor.ts
1656
1725
  var HealthMonitor = class {
1657
1726
  constructor(stateManager, walletStorage, clusterStorage, 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");
1727
+ chunkL5FWMNWO_js.__publicField(this, "stateManager");
1728
+ chunkL5FWMNWO_js.__publicField(this, "walletStorage");
1729
+ chunkL5FWMNWO_js.__publicField(this, "clusterStorage");
1730
+ chunkL5FWMNWO_js.__publicField(this, "isInitialized");
1662
1731
  this.stateManager = stateManager, this.walletStorage = walletStorage, this.clusterStorage = clusterStorage, this.isInitialized = isInitialized ?? (() => true);
1663
1732
  }
1664
1733
  /**
@@ -1710,20 +1779,20 @@ var HealthMonitor = class {
1710
1779
  };
1711
1780
 
1712
1781
  // src/lib/core/connector-client.ts
1713
- var logger5 = chunkSITQ4JWM_js.createLogger("ConnectorClient"), ConnectorClient = class {
1782
+ var logger5 = chunkBF67LVVM_js.createLogger("ConnectorClient"), ConnectorClient = class {
1714
1783
  constructor(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);
1784
+ chunkL5FWMNWO_js.__publicField(this, "stateManager");
1785
+ chunkL5FWMNWO_js.__publicField(this, "eventEmitter");
1786
+ chunkL5FWMNWO_js.__publicField(this, "walletDetector");
1787
+ chunkL5FWMNWO_js.__publicField(this, "connectionManager");
1788
+ chunkL5FWMNWO_js.__publicField(this, "autoConnector");
1789
+ chunkL5FWMNWO_js.__publicField(this, "clusterManager");
1790
+ chunkL5FWMNWO_js.__publicField(this, "transactionTracker");
1791
+ chunkL5FWMNWO_js.__publicField(this, "debugMetrics");
1792
+ chunkL5FWMNWO_js.__publicField(this, "healthMonitor");
1793
+ chunkL5FWMNWO_js.__publicField(this, "initialized", false);
1794
+ chunkL5FWMNWO_js.__publicField(this, "config");
1795
+ chunkL5FWMNWO_js.__publicField(this, "walletConnectRegistration", null);
1727
1796
  this.config = config;
1728
1797
  let initialState = {
1729
1798
  // vNext wallet status
@@ -1771,7 +1840,7 @@ var logger5 = chunkSITQ4JWM_js.createLogger("ConnectorClient"), ConnectorClient
1771
1840
  initialize() {
1772
1841
  if (typeof window > "u" || this.initialized) return;
1773
1842
  let { error } = chunk4KD6HQQG_js.tryCatchSync(() => {
1774
- this.walletDetector.initialize(), this.config.walletConnect?.enabled && this.initializeWalletConnect().catch((err) => {
1843
+ this.config.additionalWallets && this.config.additionalWallets.length > 0 && this.walletDetector.setAdditionalWallets(this.config.additionalWallets), this.walletDetector.setWalletDisplayConfig(this.config.wallets), this.walletDetector.initialize(), this.config.walletConnect?.enabled && this.initializeWalletConnect().catch((err) => {
1775
1844
  this.config.debug && logger5.error("WalletConnect initialization failed", { error: err });
1776
1845
  }), this.config.autoConnect && setTimeout(() => {
1777
1846
  this.autoConnector.attemptAutoConnect().catch((err) => {
@@ -1788,7 +1857,7 @@ var logger5 = chunkSITQ4JWM_js.createLogger("ConnectorClient"), ConnectorClient
1788
1857
  async initializeWalletConnect() {
1789
1858
  if (this.config.walletConnect?.enabled)
1790
1859
  try {
1791
- let { registerWalletConnectWallet } = await import('./walletconnect-447EY3OJ.js');
1860
+ let { registerWalletConnectWallet } = await import('./walletconnect-F2M3PAAN.js');
1792
1861
  this.walletConnectRegistration = await registerWalletConnectWallet(this.config.walletConnect), this.config.debug && logger5.info("WalletConnect wallet registered successfully");
1793
1862
  } catch (error) {
1794
1863
  this.config.debug && logger5.error("Failed to register WalletConnect wallet", { error });
@@ -1934,7 +2003,7 @@ var logger5 = chunkSITQ4JWM_js.createLogger("ConnectorClient"), ConnectorClient
1934
2003
  }), this.walletDetector.destroy(), this.eventEmitter.offAll(), this.stateManager.clear();
1935
2004
  }
1936
2005
  };
1937
- var logger6 = chunkSITQ4JWM_js.createLogger("Polyfills"), installed = false;
2006
+ var logger6 = chunkBF67LVVM_js.createLogger("Polyfills"), installed = false;
1938
2007
  function installPolyfills() {
1939
2008
  if (!(installed || typeof window > "u"))
1940
2009
  try {
@@ -1961,13 +2030,13 @@ function getPolyfillStatus() {
1961
2030
  environment: typeof window < "u" ? "browser" : "server"
1962
2031
  };
1963
2032
  }
1964
- var logger7 = chunkSITQ4JWM_js.createLogger("EnhancedStorage"), STORAGE_VERSION = "v1", EnhancedStorage = class extends core.Storage {
2033
+ var logger7 = chunkBF67LVVM_js.createLogger("EnhancedStorage"), STORAGE_VERSION = "v1", EnhancedStorage = class extends core.Storage {
1965
2034
  constructor(key, initial, options) {
1966
2035
  super(key, initial);
1967
2036
  this.options = options;
1968
- chunkSITQ4JWM_js.__publicField(this, "errorHandlers", /* @__PURE__ */ new Set());
1969
- chunkSITQ4JWM_js.__publicField(this, "validators", []);
1970
- chunkSITQ4JWM_js.__publicField(this, "memoryFallback");
2037
+ chunkL5FWMNWO_js.__publicField(this, "errorHandlers", /* @__PURE__ */ new Set());
2038
+ chunkL5FWMNWO_js.__publicField(this, "validators", []);
2039
+ chunkL5FWMNWO_js.__publicField(this, "memoryFallback");
1971
2040
  this.memoryFallback = initial, options?.onError && this.errorHandlers.add(options.onError), options?.validator && this.validators.push(options.validator);
1972
2041
  }
1973
2042
  set(value) {
@@ -2143,7 +2212,7 @@ var EnhancedStorageAdapter = class {
2143
2212
  return this.storage.onError(handler), this;
2144
2213
  }
2145
2214
  };
2146
- var logger8 = chunkSITQ4JWM_js.createLogger("DefaultConfig");
2215
+ var logger8 = chunkBF67LVVM_js.createLogger("DefaultConfig");
2147
2216
  function getDefaultConfig(options) {
2148
2217
  let {
2149
2218
  appName,
@@ -2163,7 +2232,9 @@ function getDefaultConfig(options) {
2163
2232
  imageProxy,
2164
2233
  programLabels,
2165
2234
  coingecko,
2166
- walletConnect
2235
+ walletConnect,
2236
+ additionalWallets,
2237
+ wallets
2167
2238
  } = options, defaultClusters = clusters ?? [
2168
2239
  core.createSolanaMainnet(),
2169
2240
  core.createSolanaDevnet(),
@@ -2210,6 +2281,7 @@ function getDefaultConfig(options) {
2210
2281
  appUrl,
2211
2282
  enableMobile,
2212
2283
  network,
2284
+ wallets,
2213
2285
  cluster: {
2214
2286
  clusters: defaultClusters,
2215
2287
  persistSelection: persistClusterSelection,
@@ -2223,7 +2295,8 @@ function getDefaultConfig(options) {
2223
2295
  imageProxy,
2224
2296
  programLabels,
2225
2297
  coingecko,
2226
- walletConnect: walletConnectConfig
2298
+ walletConnect: walletConnectConfig,
2299
+ additionalWallets
2227
2300
  };
2228
2301
  }
2229
2302
  function buildWalletConnectConfig(walletConnect, appName, appUrl, clusterStorageKey) {
@@ -2317,6 +2390,13 @@ var solanaNetworkSchema = v4.z.enum(["mainnet", "mainnet-beta", "devnet", "testn
2317
2390
  clusters: v4.z.array(solanaClusterSchema).optional(),
2318
2391
  persistSelection: v4.z.boolean().optional(),
2319
2392
  initialCluster: solanaClusterIdSchema.optional()
2393
+ }).optional(), walletSchema = v4.z.custom(
2394
+ (val) => typeof val == "object" && val !== null && "name" in val && "version" in val && "features" in val && "chains" in val,
2395
+ { message: "Invalid Wallet Standard wallet object" }
2396
+ ), nonEmptyTrimmedStringSchema = v4.z.string().transform((s) => s.trim()).refine((s) => s.length > 0, { message: "Wallet name cannot be empty or whitespace-only" }), walletDisplayConfigSchema = v4.z.object({
2397
+ allowList: v4.z.array(nonEmptyTrimmedStringSchema).optional(),
2398
+ denyList: v4.z.array(nonEmptyTrimmedStringSchema).optional(),
2399
+ featured: v4.z.array(nonEmptyTrimmedStringSchema).optional()
2320
2400
  }).optional(), defaultConfigOptionsSchema = v4.z.object({
2321
2401
  // Required
2322
2402
  appName: v4.z.string().min(1, "Application name is required"),
@@ -2341,17 +2421,23 @@ var solanaNetworkSchema = v4.z.enum(["mainnet", "mainnet-beta", "devnet", "testn
2341
2421
  programLabels: v4.z.record(v4.z.string(), v4.z.string()).optional(),
2342
2422
  coingecko: coinGeckoConfigSchema,
2343
2423
  walletConnect: walletConnectConfigSchema,
2424
+ // Additional wallets (remote signers, etc.)
2425
+ additionalWallets: v4.z.array(walletSchema).optional(),
2426
+ // Wallet display controls
2427
+ wallets: walletDisplayConfigSchema,
2344
2428
  // Functions (can't validate implementation, just existence)
2345
2429
  onError: v4.z.custom((val) => typeof val == "function").optional()
2346
2430
  }); v4.z.strictObject({
2347
2431
  autoConnect: v4.z.boolean().optional(),
2348
2432
  debug: v4.z.boolean().optional(),
2433
+ wallets: walletDisplayConfigSchema,
2349
2434
  storage: storageConfigSchema,
2350
2435
  cluster: clusterConfigSchema,
2351
2436
  imageProxy: v4.z.string().optional(),
2352
2437
  programLabels: v4.z.record(v4.z.string(), v4.z.string()).optional(),
2353
2438
  coingecko: coinGeckoConfigSchema,
2354
- walletConnect: walletConnectConfigSchema
2439
+ walletConnect: walletConnectConfigSchema,
2440
+ additionalWallets: v4.z.array(walletSchema).optional()
2355
2441
  }).optional();
2356
2442
  function validateConfigOptions(options) {
2357
2443
  return defaultConfigOptionsSchema.safeParse(options);
@@ -2570,7 +2656,7 @@ async function copySignatureToClipboard(signature, options) {
2570
2656
  }
2571
2657
 
2572
2658
  // src/lib/transaction/transaction-validator.ts
2573
- var logger9 = chunkSITQ4JWM_js.createLogger("TransactionValidator"), MAX_TRANSACTION_SIZE = 1232, MIN_TRANSACTION_SIZE = 64, TransactionValidator = class {
2659
+ var logger9 = chunkBF67LVVM_js.createLogger("TransactionValidator"), MAX_TRANSACTION_SIZE = 1232, MIN_TRANSACTION_SIZE = 64, TransactionValidator = class {
2574
2660
  /**
2575
2661
  * Validate a transaction before signing
2576
2662
  *
@@ -2673,7 +2759,7 @@ var logger9 = chunkSITQ4JWM_js.createLogger("TransactionValidator"), MAX_TRANSAC
2673
2759
  return transactions.map((tx, index) => (logger9.debug(`Validating transaction ${index + 1}/${transactions.length}`), this.validate(tx, options)));
2674
2760
  }
2675
2761
  };
2676
- var logger10 = chunkSITQ4JWM_js.createLogger("TransactionSigner");
2762
+ var logger10 = chunkBF67LVVM_js.createLogger("TransactionSigner");
2677
2763
  function signatureBytesToBase58(bytes) {
2678
2764
  if (bytes.length !== 64)
2679
2765
  throw new Error(`Invalid signature length: expected 64 bytes, got ${bytes.length}`);
@@ -2726,10 +2812,10 @@ function createTransactionSigner(config) {
2726
2812
  address,
2727
2813
  async signTransaction(transaction) {
2728
2814
  if (!capabilities.canSign)
2729
- throw chunkSITQ4JWM_js.Errors.featureNotSupported("transaction signing");
2815
+ throw chunkBF67LVVM_js.Errors.featureNotSupported("transaction signing");
2730
2816
  let validation = TransactionValidator.validate(transaction);
2731
2817
  if (!validation.valid)
2732
- throw logger10.error("Transaction validation failed", { errors: validation.errors }), chunkSITQ4JWM_js.Errors.invalidTransaction(validation.errors.join(", "));
2818
+ throw logger10.error("Transaction validation failed", { errors: validation.errors }), chunkBF67LVVM_js.Errors.invalidTransaction(validation.errors.join(", "));
2733
2819
  validation.warnings.length > 0 && logger10.warn("Transaction validation warnings", { warnings: validation.warnings });
2734
2820
  try {
2735
2821
  let signFeature = features["solana:signTransaction"], { serialized, wasWeb3js } = chunk4KD6HQQG_js.prepareTransactionForWallet(transaction);
@@ -2792,12 +2878,12 @@ function createTransactionSigner(config) {
2792
2878
  throw logger10.error("Unexpected wallet response format", {
2793
2879
  type: typeof signedTx,
2794
2880
  constructor: signedTx?.constructor?.name
2795
- }), new chunkSITQ4JWM_js.ValidationError(
2881
+ }), new chunkBF67LVVM_js.ValidationError(
2796
2882
  "INVALID_FORMAT",
2797
2883
  "Wallet returned unexpected format - not a Transaction or Uint8Array"
2798
2884
  );
2799
2885
  } catch (error) {
2800
- throw chunkSITQ4JWM_js.Errors.signingFailed(error);
2886
+ throw chunkBF67LVVM_js.Errors.signingFailed(error);
2801
2887
  }
2802
2888
  },
2803
2889
  async signAllTransactions(transactions) {
@@ -2822,7 +2908,7 @@ function createTransactionSigner(config) {
2822
2908
  )
2823
2909
  );
2824
2910
  } catch (error) {
2825
- throw new chunkSITQ4JWM_js.TransactionError(
2911
+ throw new chunkBF67LVVM_js.TransactionError(
2826
2912
  "SIGNING_FAILED",
2827
2913
  "Failed to sign transactions in batch",
2828
2914
  { count: transactions.length },
@@ -2830,14 +2916,14 @@ function createTransactionSigner(config) {
2830
2916
  );
2831
2917
  }
2832
2918
  if (!capabilities.canSign)
2833
- throw chunkSITQ4JWM_js.Errors.featureNotSupported("transaction signing");
2919
+ throw chunkBF67LVVM_js.Errors.featureNotSupported("transaction signing");
2834
2920
  let signed = [];
2835
2921
  for (let i = 0; i < transactions.length; i++)
2836
2922
  try {
2837
2923
  let signedTx = await signer.signTransaction(transactions[i]);
2838
2924
  signed.push(signedTx);
2839
2925
  } catch (error) {
2840
- throw new chunkSITQ4JWM_js.TransactionError(
2926
+ throw new chunkBF67LVVM_js.TransactionError(
2841
2927
  "SIGNING_FAILED",
2842
2928
  `Failed to sign transaction ${i + 1} of ${transactions.length}`,
2843
2929
  { index: i, total: transactions.length },
@@ -2848,7 +2934,7 @@ function createTransactionSigner(config) {
2848
2934
  },
2849
2935
  async signAndSendTransaction(transaction, options) {
2850
2936
  if (!capabilities.canSend)
2851
- throw chunkSITQ4JWM_js.Errors.featureNotSupported("sending transactions");
2937
+ throw chunkBF67LVVM_js.Errors.featureNotSupported("sending transactions");
2852
2938
  try {
2853
2939
  let sendFeature = features["solana:signAndSendTransaction"], { serialized } = chunk4KD6HQQG_js.prepareTransactionForWallet(transaction);
2854
2940
  eventEmitter && eventEmitter.emit({
@@ -2885,21 +2971,21 @@ function createTransactionSigner(config) {
2885
2971
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
2886
2972
  }), signature;
2887
2973
  } catch (error) {
2888
- throw new chunkSITQ4JWM_js.TransactionError("SEND_FAILED", "Failed to send transaction", void 0, error);
2974
+ throw new chunkBF67LVVM_js.TransactionError("SEND_FAILED", "Failed to send transaction", void 0, error);
2889
2975
  }
2890
2976
  },
2891
2977
  async signAndSendTransactions(transactions, options) {
2892
2978
  if (transactions.length === 0)
2893
2979
  return [];
2894
2980
  if (!capabilities.canSend)
2895
- throw chunkSITQ4JWM_js.Errors.featureNotSupported("sending transactions");
2981
+ throw chunkBF67LVVM_js.Errors.featureNotSupported("sending transactions");
2896
2982
  let signatures = [];
2897
2983
  for (let i = 0; i < transactions.length; i++)
2898
2984
  try {
2899
2985
  let sig = await signer.signAndSendTransaction(transactions[i], options);
2900
2986
  signatures.push(sig);
2901
2987
  } catch (error) {
2902
- throw new chunkSITQ4JWM_js.TransactionError(
2988
+ throw new chunkBF67LVVM_js.TransactionError(
2903
2989
  "SEND_FAILED",
2904
2990
  `Failed to send transaction ${i + 1} of ${transactions.length}`,
2905
2991
  { index: i, total: transactions.length },
@@ -2918,7 +3004,7 @@ function createTransactionSigner(config) {
2918
3004
  });
2919
3005
  return extractSignatureBytes(result);
2920
3006
  } catch (error) {
2921
- throw new chunkSITQ4JWM_js.TransactionError("SIGNING_FAILED", "Failed to sign message", void 0, error);
3007
+ throw new chunkBF67LVVM_js.TransactionError("SIGNING_FAILED", "Failed to sign message", void 0, error);
2922
3008
  }
2923
3009
  }
2924
3010
  },
@@ -2928,16 +3014,16 @@ function createTransactionSigner(config) {
2928
3014
  };
2929
3015
  return signer;
2930
3016
  }
2931
- var TransactionSignerError = class extends chunkSITQ4JWM_js.TransactionError {
3017
+ var TransactionSignerError = class extends chunkBF67LVVM_js.TransactionError {
2932
3018
  constructor(message, code, originalError) {
2933
3019
  let newCode = code === "WALLET_NOT_CONNECTED" ? "FEATURE_NOT_SUPPORTED" : code;
2934
3020
  super(newCode, message, void 0, originalError), this.name = "TransactionSignerError";
2935
3021
  }
2936
3022
  };
2937
3023
  function isTransactionSignerError(error) {
2938
- return error instanceof TransactionSignerError || error instanceof chunkSITQ4JWM_js.TransactionError;
3024
+ return error instanceof TransactionSignerError || error instanceof chunkBF67LVVM_js.TransactionError;
2939
3025
  }
2940
- var logger11 = chunkSITQ4JWM_js.createLogger("KitTransactionSigner");
3026
+ var logger11 = chunkBF67LVVM_js.createLogger("KitTransactionSigner");
2941
3027
  function encodeShortVecLength(value) {
2942
3028
  let bytes = [], remaining = value;
2943
3029
  for (; remaining >= 128; )
@@ -3160,5 +3246,5 @@ exports.toClusterId = toClusterId;
3160
3246
  exports.toLegacyWalletState = toLegacyWalletState;
3161
3247
  exports.truncate = truncate;
3162
3248
  exports.validateConfigOptions = validateConfigOptions;
3163
- //# sourceMappingURL=chunk-BZ2VBJCZ.js.map
3164
- //# sourceMappingURL=chunk-BZ2VBJCZ.js.map
3249
+ //# sourceMappingURL=chunk-ULEPN4NL.js.map
3250
+ //# sourceMappingURL=chunk-ULEPN4NL.js.map