@solana/connector 0.1.6 → 0.1.8

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 (50) hide show
  1. package/README.md +122 -44
  2. package/dist/{chunk-VMSZJPR5.mjs → chunk-6F6M6L7R.mjs} +152 -173
  3. package/dist/chunk-6F6M6L7R.mjs.map +1 -0
  4. package/dist/{chunk-NQXK7PGX.js → chunk-AOIXHVRH.js} +82 -235
  5. package/dist/chunk-AOIXHVRH.js.map +1 -0
  6. package/dist/chunk-DSUCH44G.js +678 -0
  7. package/dist/chunk-DSUCH44G.js.map +1 -0
  8. package/dist/{chunk-JUZVCBAI.js → chunk-FTXIXM43.js} +240 -271
  9. package/dist/chunk-FTXIXM43.js.map +1 -0
  10. package/dist/{chunk-QKVL45F6.mjs → chunk-G575OAT4.mjs} +73 -218
  11. package/dist/chunk-G575OAT4.mjs.map +1 -0
  12. package/dist/chunk-J7DHGLW6.mjs +638 -0
  13. package/dist/chunk-J7DHGLW6.mjs.map +1 -0
  14. package/dist/{chunk-ULUYX23Q.js → chunk-K3BNIGPX.js} +1023 -404
  15. package/dist/chunk-K3BNIGPX.js.map +1 -0
  16. package/dist/{chunk-3STZXVXD.mjs → chunk-TTOKQAPX.mjs} +998 -388
  17. package/dist/chunk-TTOKQAPX.mjs.map +1 -0
  18. package/dist/compat.d.mts +1 -1
  19. package/dist/compat.d.ts +1 -1
  20. package/dist/compat.js +40 -39
  21. package/dist/compat.js.map +1 -1
  22. package/dist/compat.mjs +39 -38
  23. package/dist/compat.mjs.map +1 -1
  24. package/dist/headless.d.mts +540 -152
  25. package/dist/headless.d.ts +540 -152
  26. package/dist/headless.js +226 -190
  27. package/dist/headless.mjs +3 -3
  28. package/dist/index.d.mts +8 -6
  29. package/dist/index.d.ts +8 -6
  30. package/dist/index.js +286 -218
  31. package/dist/index.mjs +4 -4
  32. package/dist/react.d.mts +283 -16
  33. package/dist/react.d.ts +283 -16
  34. package/dist/react.js +60 -28
  35. package/dist/react.mjs +2 -2
  36. package/dist/{wallet-standard-shim--YcrQNRt.d.ts → standard-shim-CT49DM5l.d.mts} +72 -252
  37. package/dist/{wallet-standard-shim-Dx7H8Ctf.d.mts → standard-shim-D9guL5fz.d.ts} +72 -252
  38. package/dist/{transaction-signer-D9d8nxwb.d.mts → transaction-signer-T-KVQFi8.d.mts} +2 -2
  39. package/dist/{transaction-signer-D9d8nxwb.d.ts → transaction-signer-T-KVQFi8.d.ts} +2 -2
  40. package/package.json +3 -3
  41. package/dist/chunk-3STZXVXD.mjs.map +0 -1
  42. package/dist/chunk-I64FD2EH.js +0 -312
  43. package/dist/chunk-I64FD2EH.js.map +0 -1
  44. package/dist/chunk-JUZVCBAI.js.map +0 -1
  45. package/dist/chunk-NQXK7PGX.js.map +0 -1
  46. package/dist/chunk-QKVL45F6.mjs.map +0 -1
  47. package/dist/chunk-QL3IT3TS.mjs +0 -299
  48. package/dist/chunk-QL3IT3TS.mjs.map +0 -1
  49. package/dist/chunk-ULUYX23Q.js.map +0 -1
  50. package/dist/chunk-VMSZJPR5.mjs.map +0 -1
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkI64FD2EH_js = require('./chunk-I64FD2EH.js');
3
+ var chunkDSUCH44G_js = require('./chunk-DSUCH44G.js');
4
4
  var react = require('react');
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
6
  var webcryptoEd25519Polyfill = require('@solana/webcrypto-ed25519-polyfill');
@@ -8,8 +8,25 @@ var addresses = require('@solana/addresses');
8
8
  var transactions = require('@solana/transactions');
9
9
  var codecs = require('@solana/codecs');
10
10
 
11
- // src/lib/adapters/wallet-standard-shim.ts
12
- var registry = null;
11
+ // src/lib/wallet/standard-shim.ts
12
+ var registry = null, registryInitPromise = null, registryInitResolve = null, ready = new Promise((resolve, reject) => {
13
+ if (typeof window > "u") {
14
+ resolve();
15
+ return;
16
+ }
17
+ registryInitResolve = resolve;
18
+ let nav = window.navigator;
19
+ if (nav.wallets && typeof nav.wallets.get == "function") {
20
+ registry = nav.wallets, resolve();
21
+ return;
22
+ }
23
+ registryInitPromise = import('@wallet-standard/app').then((mod) => {
24
+ let walletStandardRegistry = mod.getWallets?.();
25
+ walletStandardRegistry && (registry = walletStandardRegistry), resolve();
26
+ }).catch((err) => {
27
+ console.warn("[standard-shim] Failed to load @wallet-standard/app:", err), resolve();
28
+ });
29
+ });
13
30
  function getWalletsRegistry() {
14
31
  if (typeof window > "u")
15
32
  return {
@@ -17,12 +34,13 @@ function getWalletsRegistry() {
17
34
  on: () => () => {
18
35
  }
19
36
  };
20
- if (!registry) {
37
+ if (!registry && !registryInitPromise) {
21
38
  let nav = window.navigator;
22
- nav.wallets && typeof nav.wallets.get == "function" ? registry = nav.wallets : import('@wallet-standard/app').then((mod) => {
39
+ nav.wallets && typeof nav.wallets.get == "function" ? (registry = nav.wallets, registryInitResolve?.()) : registryInitPromise = import('@wallet-standard/app').then((mod) => {
23
40
  let walletStandardRegistry = mod.getWallets?.();
24
- walletStandardRegistry && (registry = walletStandardRegistry);
41
+ walletStandardRegistry && (registry = walletStandardRegistry), registryInitResolve?.();
25
42
  }).catch(() => {
43
+ registryInitResolve?.();
26
44
  });
27
45
  }
28
46
  return {
@@ -51,135 +69,6 @@ function getWalletsRegistry() {
51
69
  };
52
70
  }
53
71
 
54
- // src/lib/errors/index.ts
55
- var ConnectorError = class extends Error {
56
- constructor(message, context, originalError) {
57
- super(message);
58
- chunkI64FD2EH_js.__publicField(this, "context");
59
- chunkI64FD2EH_js.__publicField(this, "originalError");
60
- chunkI64FD2EH_js.__publicField(this, "timestamp");
61
- this.name = this.constructor.name, this.context = context, this.originalError = originalError, this.timestamp = (/* @__PURE__ */ new Date()).toISOString(), Error.captureStackTrace && Error.captureStackTrace(this, this.constructor);
62
- }
63
- toJSON() {
64
- return {
65
- name: this.name,
66
- code: this.code,
67
- message: this.message,
68
- recoverable: this.recoverable,
69
- context: this.context,
70
- timestamp: this.timestamp,
71
- originalError: this.originalError?.message
72
- };
73
- }
74
- }, ConnectionError = class extends ConnectorError {
75
- constructor(code, message, context, originalError) {
76
- super(message, context, originalError);
77
- chunkI64FD2EH_js.__publicField(this, "code");
78
- chunkI64FD2EH_js.__publicField(this, "recoverable", true);
79
- this.code = code;
80
- }
81
- }, ValidationError = class extends ConnectorError {
82
- constructor(code, message, context, originalError) {
83
- super(message, context, originalError);
84
- chunkI64FD2EH_js.__publicField(this, "code");
85
- chunkI64FD2EH_js.__publicField(this, "recoverable", false);
86
- this.code = code;
87
- }
88
- }, ConfigurationError = class extends ConnectorError {
89
- constructor(code, message, context, originalError) {
90
- super(message, context, originalError);
91
- chunkI64FD2EH_js.__publicField(this, "code");
92
- chunkI64FD2EH_js.__publicField(this, "recoverable", false);
93
- this.code = code;
94
- }
95
- }, NetworkError = class extends ConnectorError {
96
- constructor(code, message, context, originalError) {
97
- super(message, context, originalError);
98
- chunkI64FD2EH_js.__publicField(this, "code");
99
- chunkI64FD2EH_js.__publicField(this, "recoverable", true);
100
- this.code = code;
101
- }
102
- }, TransactionError = class extends ConnectorError {
103
- constructor(code, message, context, originalError) {
104
- super(message, context, originalError);
105
- chunkI64FD2EH_js.__publicField(this, "code");
106
- chunkI64FD2EH_js.__publicField(this, "recoverable");
107
- this.code = code, this.recoverable = ["USER_REJECTED", "SEND_FAILED", "SIMULATION_FAILED"].includes(code);
108
- }
109
- };
110
- function isConnectorError(error) {
111
- return error instanceof ConnectorError;
112
- }
113
- function isConnectionError(error) {
114
- return error instanceof ConnectionError;
115
- }
116
- function isValidationError(error) {
117
- return error instanceof ValidationError;
118
- }
119
- function isConfigurationError(error) {
120
- return error instanceof ConfigurationError;
121
- }
122
- function isNetworkError(error) {
123
- return error instanceof NetworkError;
124
- }
125
- function isTransactionError(error) {
126
- return error instanceof TransactionError;
127
- }
128
- var Errors = {
129
- walletNotConnected: (context) => new ConnectionError("WALLET_NOT_CONNECTED", "No wallet connected", context),
130
- walletNotFound: (walletName) => new ConnectionError("WALLET_NOT_FOUND", `Wallet not found${walletName ? `: ${walletName}` : ""}`, {
131
- walletName
132
- }),
133
- connectionFailed: (originalError) => new ConnectionError("CONNECTION_FAILED", "Failed to connect to wallet", void 0, originalError),
134
- accountNotAvailable: (address) => new ConnectionError("ACCOUNT_NOT_AVAILABLE", "Requested account not available", { address }),
135
- invalidTransaction: (reason, context) => new ValidationError("INVALID_TRANSACTION", `Invalid transaction: ${reason}`, context),
136
- invalidFormat: (expectedFormat, actualFormat) => new ValidationError("INVALID_FORMAT", `Invalid format: expected ${expectedFormat}`, {
137
- expectedFormat,
138
- actualFormat
139
- }),
140
- unsupportedFormat: (format) => new ValidationError("UNSUPPORTED_FORMAT", `Unsupported format: ${format}`, { format }),
141
- missingProvider: (hookName) => new ConfigurationError(
142
- "MISSING_PROVIDER",
143
- `${hookName} must be used within ConnectorProvider. Wrap your app with <ConnectorProvider> or <UnifiedProvider>.`,
144
- { hookName }
145
- ),
146
- clusterNotFound: (clusterId, availableClusters) => new ConfigurationError(
147
- "CLUSTER_NOT_FOUND",
148
- `Cluster ${clusterId} not found. Available clusters: ${availableClusters.join(", ")}`,
149
- { clusterId, availableClusters }
150
- ),
151
- rpcError: (message, originalError) => new NetworkError("RPC_ERROR", message, void 0, originalError),
152
- networkTimeout: () => new NetworkError("NETWORK_TIMEOUT", "Network request timed out"),
153
- signingFailed: (originalError) => new TransactionError("SIGNING_FAILED", "Failed to sign transaction", void 0, originalError),
154
- featureNotSupported: (feature) => new TransactionError("FEATURE_NOT_SUPPORTED", `Wallet does not support ${feature}`, { feature }),
155
- userRejected: (operation) => new TransactionError("USER_REJECTED", `User rejected ${operation}`, { operation })
156
- };
157
- function toConnectorError(error, defaultMessage = "An unexpected error occurred") {
158
- if (isConnectorError(error))
159
- return error;
160
- if (error instanceof Error) {
161
- let message = error.message.toLowerCase();
162
- return message.includes("user rejected") || message.includes("user denied") ? Errors.userRejected("transaction") : message.includes("wallet not found") || message.includes("not installed") ? Errors.walletNotFound() : message.includes("not connected") ? Errors.walletNotConnected() : message.includes("network") || message.includes("fetch") ? Errors.rpcError(error.message, error) : message.includes("invalid") ? new ValidationError("VALIDATION_FAILED", error.message, void 0, error) : new TransactionError("SIGNING_FAILED", error.message, void 0, error);
163
- }
164
- return new TransactionError("SIGNING_FAILED", defaultMessage, { originalError: String(error) });
165
- }
166
- function getUserFriendlyMessage(error) {
167
- return isConnectorError(error) ? {
168
- WALLET_NOT_CONNECTED: "Please connect your wallet to continue.",
169
- WALLET_NOT_FOUND: "Wallet not found. Please install a supported wallet.",
170
- CONNECTION_FAILED: "Failed to connect to wallet. Please try again.",
171
- USER_REJECTED: "Transaction was cancelled.",
172
- FEATURE_NOT_SUPPORTED: "This wallet does not support this feature.",
173
- SIGNING_FAILED: "Failed to sign transaction. Please try again.",
174
- SEND_FAILED: "Failed to send transaction. Please try again.",
175
- INVALID_CLUSTER: "Invalid network configuration.",
176
- CLUSTER_NOT_FOUND: "Network not found.",
177
- MISSING_PROVIDER: "Application not properly configured.",
178
- RPC_ERROR: "Network error. Please check your connection.",
179
- NETWORK_TIMEOUT: "Request timed out. Please try again."
180
- }[error.code] || error.message || "An error occurred." : "An unexpected error occurred. Please try again.";
181
- }
182
-
183
72
  // src/utils/network.ts
184
73
  var PUBLIC_RPC_ENDPOINTS = {
185
74
  mainnet: "https://api.mainnet-beta.solana.com",
@@ -207,7 +96,7 @@ function toClusterId(network) {
207
96
  function getDefaultRpcUrl(network) {
208
97
  let normalized = normalizeNetwork(network);
209
98
  try {
210
- return chunkI64FD2EH_js.getPublicSolanaRpcUrl(normalized);
99
+ return chunkDSUCH44G_js.getPublicSolanaRpcUrl(normalized);
211
100
  } catch {
212
101
  return PUBLIC_RPC_ENDPOINTS[normalized] ?? PUBLIC_RPC_ENDPOINTS.localnet;
213
102
  }
@@ -230,6 +119,11 @@ function getNetworkDisplayName(network) {
230
119
  }
231
120
 
232
121
  // src/utils/cluster.ts
122
+ function getMaybeStringProp(value, prop) {
123
+ if (typeof value != "object" || value === null) return;
124
+ let v = value[prop];
125
+ return typeof v == "string" ? v : void 0;
126
+ }
233
127
  function getClusterRpcUrl(cluster) {
234
128
  if (typeof cluster == "string") {
235
129
  let presets2 = {
@@ -240,7 +134,7 @@ function getClusterRpcUrl(cluster) {
240
134
  return presets2[cluster];
241
135
  throw new Error(`Unknown cluster: ${cluster}`);
242
136
  }
243
- let url = cluster.url || cluster.rpcUrl;
137
+ let url = cluster.url ?? getMaybeStringProp(cluster, "rpcUrl");
244
138
  if (!url)
245
139
  throw new Error("Cluster URL is required");
246
140
  if (url.startsWith("http://") || url.startsWith("https://"))
@@ -257,14 +151,14 @@ function getClusterExplorerUrl(cluster, path) {
257
151
  }
258
152
  function getTransactionUrl(signature, cluster) {
259
153
  let clusterType = getClusterType(cluster), explorerCluster = clusterType === "custom" || clusterType === "localnet" ? "devnet" : clusterType;
260
- return chunkI64FD2EH_js.getExplorerLink({
154
+ return chunkDSUCH44G_js.getExplorerLink({
261
155
  transaction: signature,
262
156
  cluster: explorerCluster === "mainnet" ? "mainnet" : explorerCluster
263
157
  });
264
158
  }
265
159
  function getAddressUrl(address, cluster) {
266
160
  let clusterType = getClusterType(cluster), explorerCluster = clusterType === "custom" || clusterType === "localnet" ? "devnet" : clusterType;
267
- return chunkI64FD2EH_js.getExplorerLink({
161
+ return chunkDSUCH44G_js.getExplorerLink({
268
162
  address,
269
163
  cluster: explorerCluster === "mainnet" ? "mainnet" : explorerCluster
270
164
  });
@@ -285,16 +179,17 @@ function isTestnetCluster(cluster) {
285
179
  return cluster.id === "solana:testnet";
286
180
  }
287
181
  function isLocalCluster(cluster) {
288
- let url = cluster.url || cluster.rpcUrl;
182
+ let url = cluster.url ?? getMaybeStringProp(cluster, "rpcUrl");
289
183
  return url ? cluster.id === "solana:localnet" || url.includes("localhost") || url.includes("127.0.0.1") : cluster.id === "solana:localnet";
290
184
  }
291
185
  function getClusterName(cluster) {
292
186
  if (cluster.label) return cluster.label;
293
- if (cluster.name) return cluster.name;
187
+ let name = getMaybeStringProp(cluster, "name");
188
+ if (name) return name;
294
189
  let parts = cluster.id.split(":");
295
190
  if (parts.length >= 2 && parts[1]) {
296
- let name = parts.slice(1).join(":");
297
- return name.charAt(0).toUpperCase() + name.slice(1).replace(/-/g, " ");
191
+ let name2 = parts.slice(1).join(":");
192
+ return name2.charAt(0).toUpperCase() + name2.slice(1).replace(/-/g, " ");
298
193
  }
299
194
  return "Unknown";
300
195
  }
@@ -326,9 +221,9 @@ var POLL_INTERVALS_MS = [1e3, 2e3, 3e3, 5e3, 5e3], DEFAULT_MAX_RETRIES = 3, DEFA
326
221
  // src/lib/core/state-manager.ts
327
222
  var StateManager = class {
328
223
  constructor(initialState) {
329
- chunkI64FD2EH_js.__publicField(this, "state");
330
- chunkI64FD2EH_js.__publicField(this, "listeners", /* @__PURE__ */ new Set());
331
- chunkI64FD2EH_js.__publicField(this, "notifyTimeout");
224
+ chunkDSUCH44G_js.__publicField(this, "state");
225
+ chunkDSUCH44G_js.__publicField(this, "listeners", /* @__PURE__ */ new Set());
226
+ chunkDSUCH44G_js.__publicField(this, "notifyTimeout");
332
227
  this.state = initialState;
333
228
  }
334
229
  /**
@@ -387,10 +282,10 @@ var StateManager = class {
387
282
  };
388
283
 
389
284
  // src/lib/core/event-emitter.ts
390
- var logger = chunkI64FD2EH_js.createLogger("EventEmitter"), EventEmitter = class {
285
+ var logger = chunkDSUCH44G_js.createLogger("EventEmitter"), EventEmitter = class {
391
286
  constructor(debug = false) {
392
- chunkI64FD2EH_js.__publicField(this, "listeners", /* @__PURE__ */ new Set());
393
- chunkI64FD2EH_js.__publicField(this, "debug");
287
+ chunkDSUCH44G_js.__publicField(this, "listeners", /* @__PURE__ */ new Set());
288
+ chunkDSUCH44G_js.__publicField(this, "debug");
394
289
  this.debug = debug;
395
290
  }
396
291
  /**
@@ -446,12 +341,12 @@ var logger = chunkI64FD2EH_js.createLogger("EventEmitter"), EventEmitter = class
446
341
  // src/lib/core/debug-metrics.ts
447
342
  var DebugMetrics = class {
448
343
  constructor() {
449
- chunkI64FD2EH_js.__publicField(this, "stateUpdates", 0);
450
- chunkI64FD2EH_js.__publicField(this, "noopUpdates", 0);
451
- chunkI64FD2EH_js.__publicField(this, "updateTimes", []);
452
- chunkI64FD2EH_js.__publicField(this, "lastUpdateTime", 0);
453
- chunkI64FD2EH_js.__publicField(this, "eventListenerCount", 0);
454
- chunkI64FD2EH_js.__publicField(this, "subscriptionCount", 0);
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);
455
350
  }
456
351
  /**
457
352
  * Record a state update attempt
@@ -491,11 +386,11 @@ var DebugMetrics = class {
491
386
  // src/lib/core/base-collaborator.ts
492
387
  var BaseCollaborator = class {
493
388
  constructor(config, loggerPrefix) {
494
- chunkI64FD2EH_js.__publicField(this, "stateManager");
495
- chunkI64FD2EH_js.__publicField(this, "eventEmitter");
496
- chunkI64FD2EH_js.__publicField(this, "debug");
497
- chunkI64FD2EH_js.__publicField(this, "logger");
498
- this.stateManager = config.stateManager, this.eventEmitter = config.eventEmitter, this.debug = config.debug ?? false, this.logger = chunkI64FD2EH_js.createLogger(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);
499
394
  }
500
395
  /**
501
396
  * Log debug message if debug mode is enabled
@@ -517,8 +412,8 @@ var BaseCollaborator = class {
517
412
  }
518
413
  };
519
414
 
520
- // src/lib/connection/wallet-authenticity-verifier.ts
521
- var logger2 = chunkI64FD2EH_js.createLogger("WalletAuthenticity"), WalletAuthenticityVerifier = class {
415
+ // src/lib/wallet/authenticity-verifier.ts
416
+ var logger2 = chunkDSUCH44G_js.createLogger("WalletAuthenticity"), WalletAuthenticityVerifier = class {
522
417
  /**
523
418
  * Verify a wallet's authenticity using dynamic heuristics
524
419
  *
@@ -727,8 +622,8 @@ var logger2 = chunkI64FD2EH_js.createLogger("WalletAuthenticity"), WalletAuthent
727
622
  }
728
623
  };
729
624
 
730
- // src/lib/connection/wallet-detector.ts
731
- var logger3 = chunkI64FD2EH_js.createLogger("WalletDetector");
625
+ // src/lib/wallet/detector.ts
626
+ var logger3 = chunkDSUCH44G_js.createLogger("WalletDetector");
732
627
  function hasFeature(wallet, featureName) {
733
628
  return wallet.features != null && wallet.features[featureName] !== void 0;
734
629
  }
@@ -750,10 +645,17 @@ function verifyWalletName(wallet, requestedName) {
750
645
  var WalletDetector = class extends BaseCollaborator {
751
646
  constructor(stateManager, eventEmitter, debug = false) {
752
647
  super({ stateManager, eventEmitter, debug }, "WalletDetector");
753
- chunkI64FD2EH_js.__publicField(this, "unsubscribers", []);
648
+ chunkDSUCH44G_js.__publicField(this, "unsubscribers", []);
754
649
  }
755
650
  /**
756
- * Initialize wallet detection
651
+ * Initialize wallet detection (synchronous)
652
+ *
653
+ * Sets up registry listeners immediately. Due to the async nature of registry initialization,
654
+ * the initial call to `get()` may return an empty array if called before the registry is ready.
655
+ * Event listeners will fire as wallets register, providing eventual consistency.
656
+ *
657
+ * For deterministic detection where you need all wallets available immediately,
658
+ * use `initializeAsync()` instead.
757
659
  */
758
660
  initialize() {
759
661
  if (!(typeof window > "u"))
@@ -776,6 +678,24 @@ var WalletDetector = class extends BaseCollaborator {
776
678
  } catch {
777
679
  }
778
680
  }
681
+ /**
682
+ * Initialize wallet detection with deterministic registry availability (async)
683
+ *
684
+ * Awaits the registry `ready` Promise before performing initial detection,
685
+ * ensuring all registered wallets are available on the first `get()` call.
686
+ *
687
+ * Use this when you need guaranteed wallet availability before proceeding
688
+ * (e.g., auto-reconnect logic, checking if a specific wallet is installed).
689
+ *
690
+ * @example
691
+ * ```ts
692
+ * await walletDetector.initializeAsync();
693
+ * const wallets = walletDetector.getDetectedWallets(); // Guaranteed populated
694
+ * ```
695
+ */
696
+ async initializeAsync() {
697
+ typeof window > "u" || (await ready, this.initialize());
698
+ }
779
699
  /**
780
700
  * Check if a specific wallet is available immediately via direct window object detection
781
701
  */
@@ -862,7 +782,7 @@ var WalletDetector = class extends BaseCollaborator {
862
782
  }
863
783
  };
864
784
 
865
- // src/lib/connection/connection-manager.ts
785
+ // src/lib/wallet/connection-manager.ts
866
786
  function getConnectFeature(wallet) {
867
787
  return wallet.features["standard:connect"]?.connect ?? null;
868
788
  }
@@ -875,10 +795,10 @@ function getEventsFeature(wallet) {
875
795
  var ConnectionManager = class extends BaseCollaborator {
876
796
  constructor(stateManager, eventEmitter, walletStorage, debug = false) {
877
797
  super({ stateManager, eventEmitter, debug }, "ConnectionManager");
878
- chunkI64FD2EH_js.__publicField(this, "walletStorage");
879
- chunkI64FD2EH_js.__publicField(this, "walletChangeUnsub", null);
880
- chunkI64FD2EH_js.__publicField(this, "pollTimer", null);
881
- chunkI64FD2EH_js.__publicField(this, "pollAttempts", 0);
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);
882
802
  this.walletStorage = walletStorage;
883
803
  }
884
804
  /**
@@ -1072,14 +992,14 @@ var ConnectionManager = class extends BaseCollaborator {
1072
992
  }
1073
993
  };
1074
994
 
1075
- // src/lib/connection/auto-connector.ts
1076
- var logger4 = chunkI64FD2EH_js.createLogger("AutoConnector"), MIN_ADDRESS_LENGTH = 30, AutoConnector = class {
995
+ // src/lib/wallet/auto-connector.ts
996
+ var logger4 = chunkDSUCH44G_js.createLogger("AutoConnector"), MIN_ADDRESS_LENGTH = 30, AutoConnector = class {
1077
997
  constructor(walletDetector, connectionManager, stateManager, walletStorage, debug = false) {
1078
- chunkI64FD2EH_js.__publicField(this, "walletDetector");
1079
- chunkI64FD2EH_js.__publicField(this, "connectionManager");
1080
- chunkI64FD2EH_js.__publicField(this, "stateManager");
1081
- chunkI64FD2EH_js.__publicField(this, "walletStorage");
1082
- chunkI64FD2EH_js.__publicField(this, "debug");
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");
1083
1003
  this.walletDetector = walletDetector, this.connectionManager = connectionManager, this.stateManager = stateManager, this.walletStorage = walletStorage, this.debug = debug;
1084
1004
  }
1085
1005
  async attemptAutoConnect() {
@@ -1186,7 +1106,7 @@ var logger4 = chunkI64FD2EH_js.createLogger("AutoConnector"), MIN_ADDRESS_LENGTH
1186
1106
  ]
1187
1107
  },
1188
1108
  true
1189
- );
1109
+ ), await ready;
1190
1110
  let walletsApi = getWalletsRegistry(), registryWallet = walletsApi.get().find((w) => w.name === storedWalletName), walletToUse = registryWallet || wallet;
1191
1111
  return this.debug && logger4.info("Attempting to connect via instant auto-connect", {
1192
1112
  walletName: storedWalletName,
@@ -1233,7 +1153,7 @@ var logger4 = chunkI64FD2EH_js.createLogger("AutoConnector"), MIN_ADDRESS_LENGTH
1233
1153
  var ClusterManager = class extends BaseCollaborator {
1234
1154
  constructor(stateManager, eventEmitter, clusterStorage, config, debug = false) {
1235
1155
  super({ stateManager, eventEmitter, debug }, "ClusterManager");
1236
- chunkI64FD2EH_js.__publicField(this, "clusterStorage");
1156
+ chunkDSUCH44G_js.__publicField(this, "clusterStorage");
1237
1157
  if (this.clusterStorage = clusterStorage, config) {
1238
1158
  let clusters = config.clusters ?? [], initialClusterId = this.clusterStorage?.get() ?? config.initialCluster ?? "solana:mainnet", initialCluster = clusters.find((c) => c.id === initialClusterId) ?? clusters[0] ?? null;
1239
1159
  this.stateManager.updateState({
@@ -1248,7 +1168,7 @@ var ClusterManager = class extends BaseCollaborator {
1248
1168
  async setCluster(clusterId) {
1249
1169
  let state = this.getState(), previousClusterId = state.cluster?.id || null, cluster = state.clusters.find((c) => c.id === clusterId);
1250
1170
  if (!cluster)
1251
- throw Errors.clusterNotFound(
1171
+ throw chunkDSUCH44G_js.Errors.clusterNotFound(
1252
1172
  clusterId,
1253
1173
  state.clusters.map((c) => c.id)
1254
1174
  );
@@ -1277,16 +1197,16 @@ var ClusterManager = class extends BaseCollaborator {
1277
1197
  var TransactionTracker = class extends BaseCollaborator {
1278
1198
  constructor(stateManager, eventEmitter, maxTransactions = 20, debug = false) {
1279
1199
  super({ stateManager, eventEmitter, debug }, "TransactionTracker");
1280
- chunkI64FD2EH_js.__publicField(this, "transactions", []);
1281
- chunkI64FD2EH_js.__publicField(this, "totalTransactions", 0);
1282
- chunkI64FD2EH_js.__publicField(this, "maxTransactions");
1200
+ chunkDSUCH44G_js.__publicField(this, "transactions", []);
1201
+ chunkDSUCH44G_js.__publicField(this, "totalTransactions", 0);
1202
+ chunkDSUCH44G_js.__publicField(this, "maxTransactions");
1283
1203
  this.maxTransactions = maxTransactions;
1284
1204
  }
1285
1205
  /**
1286
1206
  * Track a transaction for debugging and monitoring
1287
1207
  */
1288
1208
  trackTransaction(activity) {
1289
- let clusterId = this.getState().cluster?.id || "solana:devnet", fullActivity = {
1209
+ let clusterId = this.getState().cluster?.id ?? "solana:devnet", fullActivity = {
1290
1210
  ...activity,
1291
1211
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
1292
1212
  cluster: clusterId
@@ -1302,10 +1222,10 @@ var TransactionTracker = class extends BaseCollaborator {
1302
1222
  * Update transaction status (e.g., from pending to confirmed/failed)
1303
1223
  */
1304
1224
  updateStatus(signature, status, error) {
1305
- let tx = this.transactions.find((t) => t.signature === signature);
1225
+ let tx = this.transactions.find((t) => String(t.signature) === signature);
1306
1226
  tx && (tx.status = status, error && (tx.error = error), this.eventEmitter.emit({
1307
1227
  type: "transaction:updated",
1308
- signature,
1228
+ signature: tx.signature,
1309
1229
  status,
1310
1230
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
1311
1231
  }), this.log("[Connector] Transaction updated:", { signature, status, error }));
@@ -1333,10 +1253,10 @@ var TransactionTracker = class extends BaseCollaborator {
1333
1253
  // src/lib/health/health-monitor.ts
1334
1254
  var HealthMonitor = class {
1335
1255
  constructor(stateManager, walletStorage, clusterStorage, isInitialized) {
1336
- chunkI64FD2EH_js.__publicField(this, "stateManager");
1337
- chunkI64FD2EH_js.__publicField(this, "walletStorage");
1338
- chunkI64FD2EH_js.__publicField(this, "clusterStorage");
1339
- chunkI64FD2EH_js.__publicField(this, "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");
1340
1260
  this.stateManager = stateManager, this.walletStorage = walletStorage, this.clusterStorage = clusterStorage, this.isInitialized = isInitialized ?? (() => true);
1341
1261
  }
1342
1262
  /**
@@ -1388,19 +1308,19 @@ var HealthMonitor = class {
1388
1308
  };
1389
1309
 
1390
1310
  // src/lib/core/connector-client.ts
1391
- var logger5 = chunkI64FD2EH_js.createLogger("ConnectorClient"), ConnectorClient = class {
1311
+ var logger5 = chunkDSUCH44G_js.createLogger("ConnectorClient"), ConnectorClient = class {
1392
1312
  constructor(config = {}) {
1393
- chunkI64FD2EH_js.__publicField(this, "stateManager");
1394
- chunkI64FD2EH_js.__publicField(this, "eventEmitter");
1395
- chunkI64FD2EH_js.__publicField(this, "walletDetector");
1396
- chunkI64FD2EH_js.__publicField(this, "connectionManager");
1397
- chunkI64FD2EH_js.__publicField(this, "autoConnector");
1398
- chunkI64FD2EH_js.__publicField(this, "clusterManager");
1399
- chunkI64FD2EH_js.__publicField(this, "transactionTracker");
1400
- chunkI64FD2EH_js.__publicField(this, "debugMetrics");
1401
- chunkI64FD2EH_js.__publicField(this, "healthMonitor");
1402
- chunkI64FD2EH_js.__publicField(this, "initialized", false);
1403
- chunkI64FD2EH_js.__publicField(this, "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");
1404
1324
  this.config = config;
1405
1325
  let initialState = {
1406
1326
  wallets: [],
@@ -1442,16 +1362,15 @@ var logger5 = chunkI64FD2EH_js.createLogger("ConnectorClient"), ConnectorClient
1442
1362
  ), this.initialize();
1443
1363
  }
1444
1364
  initialize() {
1445
- if (!(typeof window > "u") && !this.initialized)
1446
- try {
1447
- this.walletDetector.initialize(), this.config.autoConnect && setTimeout(() => {
1448
- this.autoConnector.attemptAutoConnect().catch((err) => {
1449
- this.config.debug && logger5.error("Auto-connect error", { error: err });
1450
- });
1451
- }, 100), this.initialized = true;
1452
- } catch (e) {
1453
- this.config.debug && logger5.error("Connector initialization failed", { error: e });
1454
- }
1365
+ if (typeof window > "u" || this.initialized) return;
1366
+ let { error } = chunkDSUCH44G_js.tryCatchSync(() => {
1367
+ this.walletDetector.initialize(), this.config.autoConnect && setTimeout(() => {
1368
+ this.autoConnector.attemptAutoConnect().catch((err) => {
1369
+ this.config.debug && logger5.error("Auto-connect error", { error: err });
1370
+ });
1371
+ }, 100), this.initialized = true;
1372
+ });
1373
+ error && this.config.debug && logger5.error("Connector initialization failed", { error });
1455
1374
  }
1456
1375
  async select(walletName) {
1457
1376
  let wallet = this.stateManager.getSnapshot().wallets.find((w) => w.wallet.name === walletName)?.wallet;
@@ -1476,11 +1395,8 @@ var logger5 = chunkI64FD2EH_js.createLogger("ConnectorClient"), ConnectorClient
1476
1395
  getRpcUrl() {
1477
1396
  let cluster = this.clusterManager.getCluster();
1478
1397
  if (!cluster) return null;
1479
- try {
1480
- return getClusterRpcUrl(cluster);
1481
- } catch (error) {
1482
- return this.config.debug && logger5.error("Failed to get RPC URL", { error }), null;
1483
- }
1398
+ let { data, error } = chunkDSUCH44G_js.tryCatchSync(() => getClusterRpcUrl(cluster));
1399
+ return error ? (this.config.debug && logger5.error("Failed to get RPC URL", { error }), null) : data;
1484
1400
  }
1485
1401
  subscribe(listener) {
1486
1402
  return this.stateManager.subscribe(listener);
@@ -1493,12 +1409,10 @@ var logger5 = chunkI64FD2EH_js.createLogger("ConnectorClient"), ConnectorClient
1493
1409
  let storageKeys = ["account", "wallet", "cluster"];
1494
1410
  for (let key of storageKeys) {
1495
1411
  let storage = this.config.storage?.[key];
1496
- if (storage && "reset" in storage && typeof storage.reset == "function")
1497
- try {
1498
- storage.reset(), this.config.debug && logger5.debug("Reset storage", { key });
1499
- } catch (error) {
1500
- this.config.debug && logger5.error("Failed to reset storage", { key, error });
1501
- }
1412
+ if (storage && "reset" in storage && typeof storage.reset == "function") {
1413
+ let resetFn = storage.reset, { error } = chunkDSUCH44G_js.tryCatchSync(() => resetFn());
1414
+ error ? this.config.debug && logger5.error("Failed to reset storage", { key, error }) : this.config.debug && logger5.debug("Reset storage", { key });
1415
+ }
1502
1416
  }
1503
1417
  this.eventEmitter.emit({
1504
1418
  type: "storage:reset",
@@ -1554,7 +1468,7 @@ var logger5 = chunkI64FD2EH_js.createLogger("ConnectorClient"), ConnectorClient
1554
1468
  }), this.walletDetector.destroy(), this.eventEmitter.offAll(), this.stateManager.clear();
1555
1469
  }
1556
1470
  };
1557
- var logger6 = chunkI64FD2EH_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 {
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 {
1558
1472
  static log(error, errorInfo, context) {
1559
1473
  if (process.env.NODE_ENV === "development" && logger6.error(error.message, {
1560
1474
  error,
@@ -1573,7 +1487,7 @@ var logger6 = chunkI64FD2EH_js.createLogger("ErrorBoundary"), WalletErrorType =
1573
1487
  }
1574
1488
  };
1575
1489
  function classifyError(error) {
1576
- if (isConnectorError(error))
1490
+ if (chunkDSUCH44G_js.isConnectorError(error))
1577
1491
  return {
1578
1492
  ...error,
1579
1493
  type: {
@@ -1602,8 +1516,8 @@ function classifyError(error) {
1602
1516
  var ConnectorErrorBoundary = class extends react.Component {
1603
1517
  constructor(props) {
1604
1518
  super(props);
1605
- chunkI64FD2EH_js.__publicField(this, "retryTimeouts", /* @__PURE__ */ new Set());
1606
- chunkI64FD2EH_js.__publicField(this, "retry", () => {
1519
+ chunkDSUCH44G_js.__publicField(this, "retryTimeouts", /* @__PURE__ */ new Set());
1520
+ chunkDSUCH44G_js.__publicField(this, "retry", () => {
1607
1521
  let { maxRetries = 3 } = this.props;
1608
1522
  this.state.retryCount >= maxRetries || this.setState((prevState) => ({
1609
1523
  hasError: false,
@@ -1825,7 +1739,7 @@ function withErrorBoundary(Component2, errorBoundaryProps) {
1825
1739
  let WrappedComponent = (props) => /* @__PURE__ */ jsxRuntime.jsx(ConnectorErrorBoundary, { ...errorBoundaryProps, children: /* @__PURE__ */ jsxRuntime.jsx(Component2, { ...props }) });
1826
1740
  return WrappedComponent.displayName = `withErrorBoundary(${Component2.displayName || Component2.name})`, WrappedComponent;
1827
1741
  }
1828
- var logger7 = chunkI64FD2EH_js.createLogger("Polyfills"), installed = false;
1742
+ var logger7 = chunkDSUCH44G_js.createLogger("Polyfills"), installed = false;
1829
1743
  function installPolyfills() {
1830
1744
  if (!(installed || typeof window > "u"))
1831
1745
  try {
@@ -1888,6 +1802,71 @@ function formatTokenAmount(amount, decimals, options = {}) {
1888
1802
  maximumFractionDigits: maxDecimals
1889
1803
  });
1890
1804
  }
1805
+ var MAX_SAFE_INTEGER = BigInt(Number.MAX_SAFE_INTEGER);
1806
+ function isSafeInteger(value) {
1807
+ return value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;
1808
+ }
1809
+ function splitBigIntDecimals(amount, decimals) {
1810
+ if (decimals <= 0)
1811
+ return { whole: amount.toString(), fraction: "" };
1812
+ let str = amount.toString(), isNegative = str.startsWith("-"), absStr = isNegative ? str.slice(1) : str;
1813
+ if (absStr.length <= decimals) {
1814
+ let padded = absStr.padStart(decimals, "0");
1815
+ return {
1816
+ whole: isNegative ? "-0" : "0",
1817
+ fraction: padded
1818
+ };
1819
+ }
1820
+ let splitPoint = absStr.length - decimals;
1821
+ return {
1822
+ whole: (isNegative ? "-" : "") + absStr.slice(0, splitPoint),
1823
+ fraction: absStr.slice(splitPoint)
1824
+ };
1825
+ }
1826
+ function formatBigIntBalance(amount, decimals, options = {}) {
1827
+ let { maxDecimals = Math.min(decimals, 6), minDecimals = 0, locale, useGrouping = true } = options;
1828
+ if (isSafeInteger(amount))
1829
+ return (Number(amount) / Math.pow(10, decimals)).toLocaleString(locale, {
1830
+ minimumFractionDigits: minDecimals,
1831
+ maximumFractionDigits: maxDecimals,
1832
+ useGrouping
1833
+ });
1834
+ let { whole, fraction } = splitBigIntDecimals(amount, decimals), truncatedFraction = fraction.slice(0, maxDecimals);
1835
+ for (; truncatedFraction.length > minDecimals && truncatedFraction.endsWith("0"); )
1836
+ truncatedFraction = truncatedFraction.slice(0, -1);
1837
+ truncatedFraction = truncatedFraction.padEnd(minDecimals, "0");
1838
+ let formattedWhole = whole;
1839
+ if (useGrouping) {
1840
+ let isNegative = whole.startsWith("-"), absWhole = isNegative ? whole.slice(1) : whole, parts = [];
1841
+ for (let i = absWhole.length; i > 0; i -= 3)
1842
+ parts.unshift(absWhole.slice(Math.max(0, i - 3), i));
1843
+ formattedWhole = (isNegative ? "-" : "") + parts.join(",");
1844
+ }
1845
+ return truncatedFraction.length === 0 ? formattedWhole : `${formattedWhole}.${truncatedFraction}`;
1846
+ }
1847
+ function formatLamportsToSolSafe(lamports, options = {}) {
1848
+ let { maxDecimals = 4, minDecimals = 0, suffix = false, locale } = options, formatted = formatBigIntBalance(lamports, 9, {
1849
+ maxDecimals,
1850
+ minDecimals,
1851
+ locale
1852
+ });
1853
+ return suffix ? `${formatted} SOL` : formatted;
1854
+ }
1855
+ function formatBigIntUsd(amount, decimals, usdPrice, options = {}) {
1856
+ let { locale, currency = "USD" } = options, { whole, fraction } = splitBigIntDecimals(amount, decimals), wholeNum = parseFloat(whole), fractionNum = fraction ? parseFloat("0." + fraction) : 0;
1857
+ return ((wholeNum + fractionNum) * usdPrice).toLocaleString(locale, {
1858
+ style: "currency",
1859
+ currency,
1860
+ minimumFractionDigits: 2,
1861
+ maximumFractionDigits: 2
1862
+ });
1863
+ }
1864
+ function formatTokenBalanceSafe(amount, decimals, options = {}) {
1865
+ return formatBigIntBalance(amount, decimals, {
1866
+ maxDecimals: options.maxDecimals ?? Math.min(decimals, 6),
1867
+ locale: options.locale
1868
+ });
1869
+ }
1891
1870
  var ClipboardErrorType = /* @__PURE__ */ ((ClipboardErrorType2) => (ClipboardErrorType2.NOT_SUPPORTED = "not_supported", ClipboardErrorType2.PERMISSION_DENIED = "permission_denied", ClipboardErrorType2.SSR = "ssr", ClipboardErrorType2.EMPTY_VALUE = "empty_value", ClipboardErrorType2.INVALID_VALUE = "invalid_value", ClipboardErrorType2.UNKNOWN = "unknown", ClipboardErrorType2))(ClipboardErrorType || {});
1892
1871
  function isClipboardAvailable() {
1893
1872
  if (typeof window > "u" || typeof document > "u")
@@ -1998,7 +1977,7 @@ async function copySignatureToClipboard(signature, options) {
1998
1977
  }
1999
1978
 
2000
1979
  // src/lib/transaction/transaction-validator.ts
2001
- var logger8 = chunkI64FD2EH_js.createLogger("TransactionValidator"), MAX_TRANSACTION_SIZE = 1232, MIN_TRANSACTION_SIZE = 64, TransactionValidator = class {
1980
+ var logger8 = chunkDSUCH44G_js.createLogger("TransactionValidator"), MAX_TRANSACTION_SIZE = 1232, MIN_TRANSACTION_SIZE = 64, TransactionValidator = class {
2002
1981
  /**
2003
1982
  * Validate a transaction before signing
2004
1983
  *
@@ -2103,7 +2082,7 @@ var logger8 = chunkI64FD2EH_js.createLogger("TransactionValidator"), MAX_TRANSAC
2103
2082
  };
2104
2083
 
2105
2084
  // src/lib/transaction/transaction-signer.ts
2106
- var logger9 = chunkI64FD2EH_js.createLogger("TransactionSigner");
2085
+ var logger9 = chunkDSUCH44G_js.createLogger("TransactionSigner");
2107
2086
  function createTransactionSigner(config) {
2108
2087
  let { wallet, account, cluster, eventEmitter } = config;
2109
2088
  if (!wallet || !account)
@@ -2117,13 +2096,13 @@ function createTransactionSigner(config) {
2117
2096
  address,
2118
2097
  async signTransaction(transaction) {
2119
2098
  if (!capabilities.canSign)
2120
- throw Errors.featureNotSupported("transaction signing");
2099
+ throw chunkDSUCH44G_js.Errors.featureNotSupported("transaction signing");
2121
2100
  let validation = TransactionValidator.validate(transaction);
2122
2101
  if (!validation.valid)
2123
- throw logger9.error("Transaction validation failed", { errors: validation.errors }), Errors.invalidTransaction(validation.errors.join(", "));
2102
+ throw logger9.error("Transaction validation failed", { errors: validation.errors }), chunkDSUCH44G_js.Errors.invalidTransaction(validation.errors.join(", "));
2124
2103
  validation.warnings.length > 0 && logger9.warn("Transaction validation warnings", { warnings: validation.warnings });
2125
2104
  try {
2126
- let signFeature = features["solana:signTransaction"], { serialized, wasWeb3js } = chunkI64FD2EH_js.prepareTransactionForWallet(transaction);
2105
+ let signFeature = features["solana:signTransaction"], { serialized, wasWeb3js } = chunkDSUCH44G_js.prepareTransactionForWallet(transaction);
2127
2106
  logger9.debug("Signing transaction", {
2128
2107
  wasWeb3js,
2129
2108
  serializedLength: serialized.length,
@@ -2176,19 +2155,19 @@ function createTransactionSigner(config) {
2176
2155
  logger9.debug("Found signedTransaction property");
2177
2156
  let bytes = signedTx.signedTransaction;
2178
2157
  if (bytes instanceof Uint8Array)
2179
- return await chunkI64FD2EH_js.convertSignedTransaction(bytes, wasWeb3js);
2158
+ return await chunkDSUCH44G_js.convertSignedTransaction(bytes, wasWeb3js);
2180
2159
  }
2181
2160
  if (signedTx instanceof Uint8Array)
2182
- return await chunkI64FD2EH_js.convertSignedTransaction(signedTx, wasWeb3js);
2161
+ return await chunkDSUCH44G_js.convertSignedTransaction(signedTx, wasWeb3js);
2183
2162
  throw logger9.error("Unexpected wallet response format", {
2184
2163
  type: typeof signedTx,
2185
2164
  constructor: signedTx?.constructor?.name
2186
- }), new ValidationError(
2165
+ }), new chunkDSUCH44G_js.ValidationError(
2187
2166
  "INVALID_FORMAT",
2188
2167
  "Wallet returned unexpected format - not a Transaction or Uint8Array"
2189
2168
  );
2190
2169
  } catch (error) {
2191
- throw Errors.signingFailed(error);
2170
+ throw chunkDSUCH44G_js.Errors.signingFailed(error);
2192
2171
  }
2193
2172
  },
2194
2173
  async signAllTransactions(transactions) {
@@ -2196,18 +2175,18 @@ function createTransactionSigner(config) {
2196
2175
  return [];
2197
2176
  if (capabilities.supportsBatchSigning)
2198
2177
  try {
2199
- let signFeature = features["solana:signAllTransactions"], prepared = transactions.map((tx) => chunkI64FD2EH_js.prepareTransactionForWallet(tx)), serializedTxs = prepared.map((p) => p.serialized), wasWeb3js = prepared[0].wasWeb3js, result = await signFeature.signAllTransactions({
2178
+ 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({
2200
2179
  account,
2201
2180
  transactions: serializedTxs,
2202
2181
  ...cluster ? { chain: cluster.id } : {}
2203
2182
  });
2204
2183
  return await Promise.all(
2205
2184
  result.signedTransactions.map(
2206
- (signedBytes) => chunkI64FD2EH_js.convertSignedTransaction(signedBytes, wasWeb3js)
2185
+ (signedBytes) => chunkDSUCH44G_js.convertSignedTransaction(signedBytes, wasWeb3js)
2207
2186
  )
2208
2187
  );
2209
2188
  } catch (error) {
2210
- throw new TransactionError(
2189
+ throw new chunkDSUCH44G_js.TransactionError(
2211
2190
  "SIGNING_FAILED",
2212
2191
  "Failed to sign transactions in batch",
2213
2192
  { count: transactions.length },
@@ -2215,14 +2194,14 @@ function createTransactionSigner(config) {
2215
2194
  );
2216
2195
  }
2217
2196
  if (!capabilities.canSign)
2218
- throw Errors.featureNotSupported("transaction signing");
2197
+ throw chunkDSUCH44G_js.Errors.featureNotSupported("transaction signing");
2219
2198
  let signed = [];
2220
2199
  for (let i = 0; i < transactions.length; i++)
2221
2200
  try {
2222
2201
  let signedTx = await signer.signTransaction(transactions[i]);
2223
2202
  signed.push(signedTx);
2224
2203
  } catch (error) {
2225
- throw new TransactionError(
2204
+ throw new chunkDSUCH44G_js.TransactionError(
2226
2205
  "SIGNING_FAILED",
2227
2206
  `Failed to sign transaction ${i + 1} of ${transactions.length}`,
2228
2207
  { index: i, total: transactions.length },
@@ -2233,9 +2212,9 @@ function createTransactionSigner(config) {
2233
2212
  },
2234
2213
  async signAndSendTransaction(transaction, options) {
2235
2214
  if (!capabilities.canSend)
2236
- throw Errors.featureNotSupported("sending transactions");
2215
+ throw chunkDSUCH44G_js.Errors.featureNotSupported("sending transactions");
2237
2216
  try {
2238
- let sendFeature = features["solana:signAndSendTransaction"], { serialized } = chunkI64FD2EH_js.prepareTransactionForWallet(transaction);
2217
+ let sendFeature = features["solana:signAndSendTransaction"], { serialized } = chunkDSUCH44G_js.prepareTransactionForWallet(transaction);
2239
2218
  eventEmitter && eventEmitter.emit({
2240
2219
  type: "transaction:preparing",
2241
2220
  transaction: serialized,
@@ -2270,21 +2249,21 @@ function createTransactionSigner(config) {
2270
2249
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
2271
2250
  }), signature;
2272
2251
  } catch (error) {
2273
- throw new TransactionError("SEND_FAILED", "Failed to send transaction", void 0, error);
2252
+ throw new chunkDSUCH44G_js.TransactionError("SEND_FAILED", "Failed to send transaction", void 0, error);
2274
2253
  }
2275
2254
  },
2276
2255
  async signAndSendTransactions(transactions, options) {
2277
2256
  if (transactions.length === 0)
2278
2257
  return [];
2279
2258
  if (!capabilities.canSend)
2280
- throw Errors.featureNotSupported("sending transactions");
2259
+ throw chunkDSUCH44G_js.Errors.featureNotSupported("sending transactions");
2281
2260
  let signatures = [];
2282
2261
  for (let i = 0; i < transactions.length; i++)
2283
2262
  try {
2284
2263
  let sig = await signer.signAndSendTransaction(transactions[i], options);
2285
2264
  signatures.push(sig);
2286
2265
  } catch (error) {
2287
- throw new TransactionError(
2266
+ throw new chunkDSUCH44G_js.TransactionError(
2288
2267
  "SEND_FAILED",
2289
2268
  `Failed to send transaction ${i + 1} of ${transactions.length}`,
2290
2269
  { index: i, total: transactions.length },
@@ -2302,7 +2281,7 @@ function createTransactionSigner(config) {
2302
2281
  ...cluster ? { chain: cluster.id } : {}
2303
2282
  })).signature;
2304
2283
  } catch (error) {
2305
- throw new TransactionError("SIGNING_FAILED", "Failed to sign message", void 0, error);
2284
+ throw new chunkDSUCH44G_js.TransactionError("SIGNING_FAILED", "Failed to sign message", void 0, error);
2306
2285
  }
2307
2286
  }
2308
2287
  },
@@ -2312,16 +2291,16 @@ function createTransactionSigner(config) {
2312
2291
  };
2313
2292
  return signer;
2314
2293
  }
2315
- var TransactionSignerError = class extends TransactionError {
2294
+ var TransactionSignerError = class extends chunkDSUCH44G_js.TransactionError {
2316
2295
  constructor(message, code, originalError) {
2317
2296
  let newCode = code === "WALLET_NOT_CONNECTED" ? "FEATURE_NOT_SUPPORTED" : code;
2318
2297
  super(newCode, message, void 0, originalError), this.name = "TransactionSignerError";
2319
2298
  }
2320
2299
  };
2321
2300
  function isTransactionSignerError(error) {
2322
- return error instanceof TransactionSignerError || error instanceof TransactionError;
2301
+ return error instanceof TransactionSignerError || error instanceof chunkDSUCH44G_js.TransactionError;
2323
2302
  }
2324
- var logger10 = chunkI64FD2EH_js.createLogger("KitTransactionSigner");
2303
+ var logger10 = chunkDSUCH44G_js.createLogger("KitTransactionSigner");
2325
2304
  function encodeShortVecLength(value) {
2326
2305
  let bytes = [], remaining = value;
2327
2306
  for (; remaining >= 128; )
@@ -2353,7 +2332,7 @@ function extractSignature(signedTx) {
2353
2332
  let signatureStart = bytesConsumed;
2354
2333
  return signedTx.slice(signatureStart, signatureStart + 64);
2355
2334
  }
2356
- if (chunkI64FD2EH_js.isWeb3jsTransaction(signedTx)) {
2335
+ if (chunkDSUCH44G_js.isWeb3jsTransaction(signedTx)) {
2357
2336
  let signatures = signedTx.signatures;
2358
2337
  if (!signatures || signatures.length === 0)
2359
2338
  throw new Error("No signatures found in web3.js transaction");
@@ -2394,7 +2373,7 @@ function createKitTransactionSigner(connectorSigner) {
2394
2373
  let signedTxBytes;
2395
2374
  if (signedTx instanceof Uint8Array)
2396
2375
  signedTxBytes = signedTx;
2397
- else if (chunkI64FD2EH_js.isWeb3jsTransaction(signedTx)) {
2376
+ else if (chunkDSUCH44G_js.isWeb3jsTransaction(signedTx)) {
2398
2377
  let txObj = signedTx;
2399
2378
  if (typeof txObj.serialize == "function")
2400
2379
  signedTxBytes = txObj.serialize();
@@ -2450,18 +2429,11 @@ function createKitTransactionSigner(connectorSigner) {
2450
2429
  var createGillTransactionSigner = createKitTransactionSigner;
2451
2430
 
2452
2431
  exports.ClipboardErrorType = ClipboardErrorType;
2453
- exports.ConfigurationError = ConfigurationError;
2454
- exports.ConnectionError = ConnectionError;
2455
2432
  exports.ConnectorClient = ConnectorClient;
2456
- exports.ConnectorError = ConnectorError;
2457
2433
  exports.ConnectorErrorBoundary = ConnectorErrorBoundary;
2458
2434
  exports.DEFAULT_MAX_RETRIES = DEFAULT_MAX_RETRIES;
2459
- exports.Errors = Errors;
2460
- exports.NetworkError = NetworkError;
2461
2435
  exports.PUBLIC_RPC_ENDPOINTS = PUBLIC_RPC_ENDPOINTS;
2462
- exports.TransactionError = TransactionError;
2463
2436
  exports.TransactionSignerError = TransactionSignerError;
2464
- exports.ValidationError = ValidationError;
2465
2437
  exports.WalletErrorType = WalletErrorType;
2466
2438
  exports.copyAddressToClipboard = copyAddressToClipboard;
2467
2439
  exports.copySignatureToClipboard = copySignatureToClipboard;
@@ -2470,9 +2442,13 @@ exports.createGillTransactionSigner = createGillTransactionSigner;
2470
2442
  exports.createKitTransactionSigner = createKitTransactionSigner;
2471
2443
  exports.createTransactionSigner = createTransactionSigner;
2472
2444
  exports.formatAddress = formatAddress;
2445
+ exports.formatBigIntBalance = formatBigIntBalance;
2446
+ exports.formatBigIntUsd = formatBigIntUsd;
2447
+ exports.formatLamportsToSolSafe = formatLamportsToSolSafe;
2473
2448
  exports.formatNumber = formatNumber;
2474
2449
  exports.formatSOL = formatSOL;
2475
2450
  exports.formatTokenAmount = formatTokenAmount;
2451
+ exports.formatTokenBalanceSafe = formatTokenBalanceSafe;
2476
2452
  exports.getAddressUrl = getAddressUrl;
2477
2453
  exports.getBlockUrl = getBlockUrl;
2478
2454
  exports.getChainIdForWalletStandard = getChainIdForWalletStandard;
@@ -2486,13 +2462,9 @@ exports.getNetworkDisplayName = getNetworkDisplayName;
2486
2462
  exports.getPolyfillStatus = getPolyfillStatus;
2487
2463
  exports.getTokenUrl = getTokenUrl;
2488
2464
  exports.getTransactionUrl = getTransactionUrl;
2489
- exports.getUserFriendlyMessage = getUserFriendlyMessage;
2490
2465
  exports.getWalletsRegistry = getWalletsRegistry;
2491
2466
  exports.installPolyfills = installPolyfills;
2492
2467
  exports.isClipboardAvailable = isClipboardAvailable;
2493
- exports.isConfigurationError = isConfigurationError;
2494
- exports.isConnectionError = isConnectionError;
2495
- exports.isConnectorError = isConnectorError;
2496
2468
  exports.isCryptoAvailable = isCryptoAvailable;
2497
2469
  exports.isDevnet = isDevnet;
2498
2470
  exports.isDevnetCluster = isDevnetCluster;
@@ -2500,17 +2472,14 @@ exports.isLocalCluster = isLocalCluster;
2500
2472
  exports.isLocalnet = isLocalnet;
2501
2473
  exports.isMainnet = isMainnet;
2502
2474
  exports.isMainnetCluster = isMainnetCluster;
2503
- exports.isNetworkError = isNetworkError;
2504
2475
  exports.isPolyfillInstalled = isPolyfillInstalled;
2505
2476
  exports.isTestnet = isTestnet;
2506
2477
  exports.isTestnetCluster = isTestnetCluster;
2507
- exports.isTransactionError = isTransactionError;
2508
2478
  exports.isTransactionSignerError = isTransactionSignerError;
2509
- exports.isValidationError = isValidationError;
2510
2479
  exports.normalizeNetwork = normalizeNetwork;
2480
+ exports.ready = ready;
2511
2481
  exports.toClusterId = toClusterId;
2512
- exports.toConnectorError = toConnectorError;
2513
2482
  exports.truncate = truncate;
2514
2483
  exports.withErrorBoundary = withErrorBoundary;
2515
- //# sourceMappingURL=chunk-JUZVCBAI.js.map
2516
- //# sourceMappingURL=chunk-JUZVCBAI.js.map
2484
+ //# sourceMappingURL=chunk-FTXIXM43.js.map
2485
+ //# sourceMappingURL=chunk-FTXIXM43.js.map