@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.
- package/README.md +17 -0
- package/dist/{chunk-UCISIAOG.mjs → chunk-A7WQ3K75.mjs} +3 -3
- package/dist/{chunk-UCISIAOG.mjs.map → chunk-A7WQ3K75.mjs.map} +1 -1
- package/dist/{chunk-4Z2F6ERB.js → chunk-B6YBZB6H.js} +49 -48
- package/dist/chunk-B6YBZB6H.js.map +1 -0
- package/dist/{chunk-SITQ4JWM.js → chunk-BF67LVVM.js} +17 -21
- package/dist/chunk-BF67LVVM.js.map +1 -0
- package/dist/{chunk-IDTUFDNB.mjs → chunk-DFKGCW7K.mjs} +98 -12
- package/dist/chunk-DFKGCW7K.mjs.map +1 -0
- package/dist/chunk-E3DAIOYS.mjs +22 -0
- package/dist/chunk-E3DAIOYS.mjs.map +1 -0
- package/dist/chunk-FG7HTQTV.mjs +7 -0
- package/dist/chunk-FG7HTQTV.mjs.map +1 -0
- package/dist/chunk-L5FWMNWO.js +9 -0
- package/dist/chunk-L5FWMNWO.js.map +1 -0
- package/dist/{chunk-HN5AJF7F.js → chunk-NLPEO5GT.js} +5 -5
- package/dist/{chunk-HN5AJF7F.js.map → chunk-NLPEO5GT.js.map} +1 -1
- package/dist/chunk-QST7XLMB.js +26 -0
- package/dist/chunk-QST7XLMB.js.map +1 -0
- package/dist/{chunk-ZZTY3O4N.mjs → chunk-SJCQ3KZE.mjs} +4 -7
- package/dist/chunk-SJCQ3KZE.mjs.map +1 -0
- package/dist/{chunk-BZ2VBJCZ.js → chunk-ULEPN4NL.js} +181 -95
- package/dist/chunk-ULEPN4NL.js.map +1 -0
- package/dist/{chunk-HPQ5T32K.mjs → chunk-UOML5ULB.mjs} +4 -4
- package/dist/{chunk-HPQ5T32K.mjs.map → chunk-UOML5ULB.mjs.map} +1 -1
- package/dist/{chunk-MDR4Y37Z.mjs → chunk-WPDCSFX2.mjs} +5 -4
- package/dist/chunk-WPDCSFX2.mjs.map +1 -0
- package/dist/{chunk-BJAVJQLK.js → chunk-X2X5TFXS.js} +6 -6
- package/dist/{chunk-BJAVJQLK.js.map → chunk-X2X5TFXS.js.map} +1 -1
- package/dist/compat.js +2 -2
- package/dist/compat.mjs +1 -1
- package/dist/fireblocks-FLKRTJU3.js +67 -0
- package/dist/fireblocks-FLKRTJU3.js.map +1 -0
- package/dist/fireblocks-KCJV3GEK.mjs +65 -0
- package/dist/fireblocks-KCJV3GEK.mjs.map +1 -0
- package/dist/headless.d.mts +11 -11
- package/dist/headless.d.ts +11 -11
- package/dist/headless.js +147 -147
- package/dist/headless.mjs +4 -4
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +188 -188
- package/dist/index.mjs +5 -5
- package/dist/privy-6LYDE24Z.mjs +64 -0
- package/dist/privy-6LYDE24Z.mjs.map +1 -0
- package/dist/privy-ID4YFTKR.js +66 -0
- package/dist/privy-ID4YFTKR.js.map +1 -0
- package/dist/protocol-G-z1lRqo.d.mts +166 -0
- package/dist/protocol-G-z1lRqo.d.ts +166 -0
- package/dist/react.d.mts +3 -3
- package/dist/react.d.ts +3 -3
- package/dist/react.js +49 -49
- package/dist/react.mjs +2 -2
- package/dist/remote.d.mts +46 -0
- package/dist/remote.d.ts +46 -0
- package/dist/remote.js +212 -0
- package/dist/remote.js.map +1 -0
- package/dist/remote.mjs +198 -0
- package/dist/remote.mjs.map +1 -0
- package/dist/server.d.mts +141 -0
- package/dist/server.d.ts +141 -0
- package/dist/server.js +189 -0
- package/dist/server.js.map +1 -0
- package/dist/server.mjs +187 -0
- package/dist/server.mjs.map +1 -0
- package/dist/{standard-shim-tmnQelaJ.d.ts → standard-shim-BB0Lkg_C.d.ts} +44 -1
- package/dist/{standard-shim-CGB88PPO.d.mts → standard-shim-n5phZB1d.d.mts} +44 -1
- package/dist/{walletconnect-447EY3OJ.js → walletconnect-F2M3PAAN.js} +8 -8
- package/dist/{walletconnect-447EY3OJ.js.map → walletconnect-F2M3PAAN.js.map} +1 -1
- package/dist/walletconnect-Z6LPGALR.mjs +3 -0
- package/dist/{walletconnect-U455PO4I.mjs.map → walletconnect-Z6LPGALR.mjs.map} +1 -1
- package/package.json +27 -2
- package/dist/chunk-4Z2F6ERB.js.map +0 -1
- package/dist/chunk-BZ2VBJCZ.js.map +0 -1
- package/dist/chunk-IDTUFDNB.mjs.map +0 -1
- package/dist/chunk-MDR4Y37Z.mjs.map +0 -1
- package/dist/chunk-SITQ4JWM.js.map +0 -1
- package/dist/chunk-ZZTY3O4N.mjs.map +0 -1
- 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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
269
|
-
|
|
270
|
-
|
|
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 =
|
|
330
|
+
var logger = chunkBF67LVVM_js.createLogger("EventEmitter"), EventEmitter = class {
|
|
330
331
|
constructor(debug = false) {
|
|
331
|
-
|
|
332
|
-
|
|
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
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
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
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
this.stateManager = config.stateManager, this.eventEmitter = config.eventEmitter, this.debug = config.debug ?? false, this.logger =
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
746
|
-
newCount !== previousCount && this.log("\u{1F50D} WalletDetector: found wallets:",
|
|
747
|
-
|
|
748
|
-
|
|
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
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
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 =
|
|
1434
|
+
var logger4 = chunkBF67LVVM_js.createLogger("AutoConnector"), MIN_ADDRESS_LENGTH = 30, AutoConnector = class {
|
|
1366
1435
|
constructor(walletDetector, connectionManager, stateManager, walletStorage, debug = false, walletStateStorage) {
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
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
|
-
|
|
1440
|
+
chunkL5FWMNWO_js.__publicField(this, "walletStorage");
|
|
1372
1441
|
/** vNext wallet state storage (connector ID + account) */
|
|
1373
|
-
|
|
1374
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
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
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
|
|
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 =
|
|
1782
|
+
var logger5 = chunkBF67LVVM_js.createLogger("ConnectorClient"), ConnectorClient = class {
|
|
1714
1783
|
constructor(config = {}) {
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
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-
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
|
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 }),
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
3024
|
+
return error instanceof TransactionSignerError || error instanceof chunkBF67LVVM_js.TransactionError;
|
|
2939
3025
|
}
|
|
2940
|
-
var logger11 =
|
|
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-
|
|
3164
|
-
//# sourceMappingURL=chunk-
|
|
3249
|
+
//# sourceMappingURL=chunk-ULEPN4NL.js.map
|
|
3250
|
+
//# sourceMappingURL=chunk-ULEPN4NL.js.map
|