@solana/connector 0.1.8 → 0.1.10
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 +97 -0
- package/dist/chunk-4JT24DIX.js +466 -0
- package/dist/chunk-4JT24DIX.js.map +1 -0
- package/dist/chunk-4KD6HQQG.js +69 -0
- package/dist/chunk-4KD6HQQG.js.map +1 -0
- package/dist/{chunk-DSUCH44G.js → chunk-64LV76OK.js} +2 -67
- package/dist/chunk-64LV76OK.js.map +1 -0
- package/dist/{chunk-FTXIXM43.js → chunk-6AJJJG5B.js} +614 -138
- package/dist/chunk-6AJJJG5B.js.map +1 -0
- package/dist/chunk-7XHVZW2L.mjs +460 -0
- package/dist/chunk-7XHVZW2L.mjs.map +1 -0
- package/dist/{chunk-K3BNIGPX.js → chunk-ATYK5OKR.js} +81 -33
- package/dist/chunk-ATYK5OKR.js.map +1 -0
- package/dist/{chunk-J7DHGLW6.mjs → chunk-DKCZA2QI.mjs} +3 -61
- package/dist/chunk-DKCZA2QI.mjs.map +1 -0
- package/dist/chunk-FVA4TUI4.mjs +178 -0
- package/dist/chunk-FVA4TUI4.mjs.map +1 -0
- package/dist/chunk-HO6QNKFM.mjs +61 -0
- package/dist/chunk-HO6QNKFM.mjs.map +1 -0
- package/dist/chunk-MN7XNCYI.js +230 -0
- package/dist/chunk-MN7XNCYI.js.map +1 -0
- package/dist/{chunk-6F6M6L7R.mjs → chunk-QOIQBWMP.mjs} +524 -56
- package/dist/chunk-QOIQBWMP.mjs.map +1 -0
- package/dist/{chunk-TTOKQAPX.mjs → chunk-WGZYKDXF.mjs} +57 -11
- package/dist/chunk-WGZYKDXF.mjs.map +1 -0
- package/dist/compat.js +10 -9
- package/dist/compat.js.map +1 -1
- package/dist/compat.mjs +2 -1
- package/dist/compat.mjs.map +1 -1
- package/dist/headless.d.mts +217 -100
- package/dist/headless.d.ts +217 -100
- package/dist/headless.js +190 -168
- package/dist/headless.mjs +5 -3
- package/dist/index.d.mts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +233 -203
- package/dist/index.mjs +6 -4
- package/dist/react.d.mts +72 -4
- package/dist/react.d.ts +72 -4
- package/dist/react.js +52 -36
- package/dist/react.mjs +2 -2
- package/dist/{standard-shim-CT49DM5l.d.mts → standard-shim-BTUm7cur.d.mts} +280 -1
- package/dist/{standard-shim-D9guL5fz.d.ts → standard-shim-LsQ97i9T.d.ts} +280 -1
- package/dist/walletconnect-D4JN6H2O.js +28 -0
- package/dist/walletconnect-D4JN6H2O.js.map +1 -0
- package/dist/walletconnect-I3PZUBTA.mjs +3 -0
- package/dist/walletconnect-I3PZUBTA.mjs.map +1 -0
- package/package.json +6 -2
- package/dist/chunk-6F6M6L7R.mjs.map +0 -1
- package/dist/chunk-AOIXHVRH.js +0 -535
- package/dist/chunk-AOIXHVRH.js.map +0 -1
- package/dist/chunk-DSUCH44G.js.map +0 -1
- package/dist/chunk-FTXIXM43.js.map +0 -1
- package/dist/chunk-G575OAT4.mjs +0 -476
- package/dist/chunk-G575OAT4.mjs.map +0 -1
- package/dist/chunk-J7DHGLW6.mjs.map +0 -1
- package/dist/chunk-K3BNIGPX.js.map +0 -1
- package/dist/chunk-TTOKQAPX.mjs.map +0 -1
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunk4KD6HQQG_js = require('./chunk-4KD6HQQG.js');
|
|
4
|
+
var chunk64LV76OK_js = require('./chunk-64LV76OK.js');
|
|
4
5
|
var react = require('react');
|
|
5
6
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
7
|
var webcryptoEd25519Polyfill = require('@solana/webcrypto-ed25519-polyfill');
|
|
8
|
+
var core = require('@wallet-ui/core');
|
|
7
9
|
var addresses = require('@solana/addresses');
|
|
8
|
-
var
|
|
10
|
+
var v4 = require('zod/v4');
|
|
9
11
|
var codecs = require('@solana/codecs');
|
|
12
|
+
var transactions = require('@solana/transactions');
|
|
10
13
|
|
|
11
14
|
// src/lib/wallet/standard-shim.ts
|
|
12
15
|
var registry = null, registryInitPromise = null, registryInitResolve = null, ready = new Promise((resolve, reject) => {
|
|
@@ -96,7 +99,7 @@ function toClusterId(network) {
|
|
|
96
99
|
function getDefaultRpcUrl(network) {
|
|
97
100
|
let normalized = normalizeNetwork(network);
|
|
98
101
|
try {
|
|
99
|
-
return
|
|
102
|
+
return chunk64LV76OK_js.getPublicSolanaRpcUrl(normalized);
|
|
100
103
|
} catch {
|
|
101
104
|
return PUBLIC_RPC_ENDPOINTS[normalized] ?? PUBLIC_RPC_ENDPOINTS.localnet;
|
|
102
105
|
}
|
|
@@ -151,14 +154,14 @@ function getClusterExplorerUrl(cluster, path) {
|
|
|
151
154
|
}
|
|
152
155
|
function getTransactionUrl(signature, cluster) {
|
|
153
156
|
let clusterType = getClusterType(cluster), explorerCluster = clusterType === "custom" || clusterType === "localnet" ? "devnet" : clusterType;
|
|
154
|
-
return
|
|
157
|
+
return chunk64LV76OK_js.getExplorerLink({
|
|
155
158
|
transaction: signature,
|
|
156
159
|
cluster: explorerCluster === "mainnet" ? "mainnet" : explorerCluster
|
|
157
160
|
});
|
|
158
161
|
}
|
|
159
162
|
function getAddressUrl(address, cluster) {
|
|
160
163
|
let clusterType = getClusterType(cluster), explorerCluster = clusterType === "custom" || clusterType === "localnet" ? "devnet" : clusterType;
|
|
161
|
-
return
|
|
164
|
+
return chunk64LV76OK_js.getExplorerLink({
|
|
162
165
|
address,
|
|
163
166
|
cluster: explorerCluster === "mainnet" ? "mainnet" : explorerCluster
|
|
164
167
|
});
|
|
@@ -221,9 +224,9 @@ var POLL_INTERVALS_MS = [1e3, 2e3, 3e3, 5e3, 5e3], DEFAULT_MAX_RETRIES = 3, DEFA
|
|
|
221
224
|
// src/lib/core/state-manager.ts
|
|
222
225
|
var StateManager = class {
|
|
223
226
|
constructor(initialState) {
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
+
chunk64LV76OK_js.__publicField(this, "state");
|
|
228
|
+
chunk64LV76OK_js.__publicField(this, "listeners", /* @__PURE__ */ new Set());
|
|
229
|
+
chunk64LV76OK_js.__publicField(this, "notifyTimeout");
|
|
227
230
|
this.state = initialState;
|
|
228
231
|
}
|
|
229
232
|
/**
|
|
@@ -282,10 +285,10 @@ var StateManager = class {
|
|
|
282
285
|
};
|
|
283
286
|
|
|
284
287
|
// src/lib/core/event-emitter.ts
|
|
285
|
-
var logger =
|
|
288
|
+
var logger = chunk64LV76OK_js.createLogger("EventEmitter"), EventEmitter = class {
|
|
286
289
|
constructor(debug = false) {
|
|
287
|
-
|
|
288
|
-
|
|
290
|
+
chunk64LV76OK_js.__publicField(this, "listeners", /* @__PURE__ */ new Set());
|
|
291
|
+
chunk64LV76OK_js.__publicField(this, "debug");
|
|
289
292
|
this.debug = debug;
|
|
290
293
|
}
|
|
291
294
|
/**
|
|
@@ -341,12 +344,12 @@ var logger = chunkDSUCH44G_js.createLogger("EventEmitter"), EventEmitter = class
|
|
|
341
344
|
// src/lib/core/debug-metrics.ts
|
|
342
345
|
var DebugMetrics = class {
|
|
343
346
|
constructor() {
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
347
|
+
chunk64LV76OK_js.__publicField(this, "stateUpdates", 0);
|
|
348
|
+
chunk64LV76OK_js.__publicField(this, "noopUpdates", 0);
|
|
349
|
+
chunk64LV76OK_js.__publicField(this, "updateTimes", []);
|
|
350
|
+
chunk64LV76OK_js.__publicField(this, "lastUpdateTime", 0);
|
|
351
|
+
chunk64LV76OK_js.__publicField(this, "eventListenerCount", 0);
|
|
352
|
+
chunk64LV76OK_js.__publicField(this, "subscriptionCount", 0);
|
|
350
353
|
}
|
|
351
354
|
/**
|
|
352
355
|
* Record a state update attempt
|
|
@@ -386,11 +389,11 @@ var DebugMetrics = class {
|
|
|
386
389
|
// src/lib/core/base-collaborator.ts
|
|
387
390
|
var BaseCollaborator = class {
|
|
388
391
|
constructor(config, loggerPrefix) {
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
this.stateManager = config.stateManager, this.eventEmitter = config.eventEmitter, this.debug = config.debug ?? false, this.logger =
|
|
392
|
+
chunk64LV76OK_js.__publicField(this, "stateManager");
|
|
393
|
+
chunk64LV76OK_js.__publicField(this, "eventEmitter");
|
|
394
|
+
chunk64LV76OK_js.__publicField(this, "debug");
|
|
395
|
+
chunk64LV76OK_js.__publicField(this, "logger");
|
|
396
|
+
this.stateManager = config.stateManager, this.eventEmitter = config.eventEmitter, this.debug = config.debug ?? false, this.logger = chunk64LV76OK_js.createLogger(loggerPrefix);
|
|
394
397
|
}
|
|
395
398
|
/**
|
|
396
399
|
* Log debug message if debug mode is enabled
|
|
@@ -413,7 +416,7 @@ var BaseCollaborator = class {
|
|
|
413
416
|
};
|
|
414
417
|
|
|
415
418
|
// src/lib/wallet/authenticity-verifier.ts
|
|
416
|
-
var logger2 =
|
|
419
|
+
var logger2 = chunk64LV76OK_js.createLogger("WalletAuthenticity"), WalletAuthenticityVerifier = class {
|
|
417
420
|
/**
|
|
418
421
|
* Verify a wallet's authenticity using dynamic heuristics
|
|
419
422
|
*
|
|
@@ -622,8 +625,40 @@ var logger2 = chunkDSUCH44G_js.createLogger("WalletAuthenticity"), WalletAuthent
|
|
|
622
625
|
}
|
|
623
626
|
};
|
|
624
627
|
|
|
628
|
+
// src/lib/wallet/wallet-icon-overrides.ts
|
|
629
|
+
var PHANTOM_ICON = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHJ4PSIxMiIgZmlsbD0iIzk3ODZFNCIvPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF80NF82MTApIj48cGF0aCBkPSJNNS43NjU1IDE1Ljc5N0M1Ljc2NTUgMTcuMjIyIDYuNDk4NzkgMTcuNTUgNy4yNjE0MSAxNy41NUM4Ljg3NDYzIDE3LjU1IDEwLjA4NyAxNi4wODQxIDEwLjgxMDUgMTQuOTI1NkMxMC43MjI1IDE1LjE4MTkgMTAuNjczNiAxNS40MzgyIDEwLjY3MzYgMTUuNjg0MkMxMC42NzM2IDE2LjM2MDkgMTEuMDQ1MiAxNi44NDI3IDExLjc3ODUgMTYuODQyN0MxMi43ODU1IDE2Ljg0MjcgMTMuODYxIDE1LjkyIDE0LjQxODMgMTQuOTI1NkMxNC4zNzkyIDE1LjA2OTIgMTQuMzU5NiAxNS4yMDI0IDE0LjM1OTYgMTUuMzI1NEMxNC4zNTk2IDE1Ljc5NyAxNC42MTM4IDE2LjA5NDMgMTUuMTMyIDE2LjA5NDNDMTYuNzY0OCAxNi4wOTQzIDE4LjQwNzQgMTMuMDcwMSAxOC40MDc0IDEwLjQyNTJDMTguNDA3NCA4LjM2NDU5IDE3LjQxMDEgNi41NTAwNSAxNC45MDcxIDYuNTUwMDVDMTAuNTA3NCA2LjU1MDA1IDUuNzY1NSAxMi4xNjc5IDUuNzY1NSAxNS43OTdaTTEzLjM5MTcgMTAuMTk5NkMxMy4zOTE3IDkuNjg3MDUgMTMuNjY1NCA5LjMyODI1IDE0LjA2NjMgOS4zMjgyNUMxNC40NTc0IDkuMzI4MjUgMTQuNzMxMiA5LjY4NzA1IDE0LjczMTIgMTAuMTk5NkMxNC43MzEyIDEwLjcxMjIgMTQuNDU3NCAxMS4wODEzIDE0LjA2NjMgMTEuMDgxM0MxMy42NjU0IDExLjA4MTMgMTMuMzkxNyAxMC43MTIyIDEzLjM5MTcgMTAuMTk5NlpNMTUuNDg0IDEwLjE5OTZDMTUuNDg0IDkuNjg3MDUgMTUuNzU3OCA5LjMyODI1IDE2LjE1ODYgOS4zMjgyNUMxNi41NDk3IDkuMzI4MjUgMTYuODIzNSA5LjY4NzA1IDE2LjgyMzUgMTAuMTk5NkMxNi44MjM1IDEwLjcxMjIgMTYuNTQ5NyAxMS4wODEzIDE2LjE1ODYgMTEuMDgxM0MxNS43NTc4IDExLjA4MTMgMTUuNDg0IDEwLjcxMjIgMTUuNDg0IDEwLjE5OTZaIiBmaWxsPSIjRkVGREY4Ii8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDBfNDRfNjEwIj48cmVjdCB3aWR0aD0iMTIuNzYiIGhlaWdodD0iMTEiIGZpbGw9IndoaXRlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1LjcwNjQyIDYuNTQ5OTMpIi8+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+", SOLFLARE_ICON = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHJ4PSIxMiIgZmlsbD0iI0ZGRUY0NiIvPjxwYXRoIGQ9Ik0xMi4xMjg1IDEyLjUyNjZMMTIuOTU1NiAxMS43Mjc2TDE0LjQ5NzYgMTIuMjMyM0MxNS41MDcgMTIuNTY4NyAxNi4wMTE3IDEzLjE4NTUgMTYuMDExNyAxNC4wNTQ3QzE2LjAxMTcgMTQuNzEzNiAxNS43NTkzIDE1LjE0ODIgMTUuMjU0NyAxNS43MDg5TDE1LjEwMDUgMTUuODc3MUwxNS4xNTY1IDE1LjQ4NDZDMTUuMzgwOCAxNC4wNTQ3IDE0Ljk2MDMgMTMuNDM3OSAxMy41NzI0IDEyLjk4OTJMMTIuMTI4NSAxMi41MjY2Wk0xMC4wNTM3IDcuNjM0MTRMMTQuMjU5MyA5LjAzNkwxMy4zNDgxIDkuOTA1MTdMMTEuMTYxMiA5LjE3NjE5QzEwLjQwNDIgOC45MjM4NSAxMC4xNTE4IDguNTE3MzEgMTAuMDUzNyA3LjY2MjE3VjcuNjM0MTRaTTkuODAxMzUgMTQuNzU1NkwxMC43NTQ2IDEzLjg0NDRMMTIuNTQ5MSAxNC40MzMyQzEzLjQ4ODMgMTQuNzQxNiAxMy44MTA3IDE1LjE0ODIgMTMuNzEyNiAxNi4xNzE1TDkuODAxMzUgMTQuNzU1NlpNOC41OTU3NyAxMC42OTAyQzguNTk1NzcgMTAuNDIzOSA4LjczNTk1IDEwLjE3MTUgOC45NzQyNyA5Ljk2MTIyQzkuMjI2NjEgMTAuMzI1NyA5LjY2MTE4IDEwLjY0ODEgMTAuMzQ4MSAxMC44NzI1TDExLjgzNDEgMTEuMzYzMUwxMS4wMDcgMTIuMTYyMkw5LjU0OTAzIDExLjY4NTVDOC44NzYxNCAxMS40NjEyIDguNTk1NzcgMTEuMTI0OCA4LjU5NTc3IDEwLjY5MDJaTTEyLjk5NzYgMTguMDVDMTYuMDgxNyAxNi4wMDMzIDE3LjczNTkgMTQuNjE1NCAxNy43MzU5IDEyLjkwNTJDMTcuNzM1OSAxMS43Njk2IDE3LjA2MyAxMS4xMzg4IDE1LjU3NzEgMTAuNjQ4MUwxNC40NTU2IDEwLjI2OTZMMTcuNTI1NyA3LjMyNTcyTDE2LjkwODggNi42NjY4NEwxNS45OTc2IDcuNDY1OUwxMS42OTM5IDYuMDUwMDJDMTAuMzYyMSA2LjQ4NDYgOC42Nzk4OCA3Ljc2MDMgOC42Nzk4OCA5LjAzNkM4LjY3OTg4IDkuMTc2MTggOC42OTM5IDkuMzE2MzcgOC43MzU5NSA5LjQ3MDU5QzcuNjI4NDcgMTAuMTAxNCA3LjE3OTg4IDEwLjY5MDIgNy4xNzk4OCAxMS40MTkxQzcuMTc5ODggMTIuMTA2MSA3LjU0NDM2IDEyLjc5MyA4LjcwNzkyIDEzLjE3MTVMOS42MzMxNCAxMy40Nzk5TDYuNDM2ODkgMTYuNTVMNy4wNTM3MSAxNy4yMDg5TDguMDQ5MDQgMTYuMjk3N0wxMi45OTc2IDE4LjA1WiIgZmlsbD0iIzAyMDUwQSIvPjwvc3ZnPg==", BACKPACK_ICON = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHJ4PSIxMiIgZmlsbD0iI0UzM0UzRiIvPjxwYXRoIGQ9Ik0xNS41MTg2IDEzLjkyNzJDMTUuOTgxMSAxMy45MjcyIDE2LjIxMjcgMTMuOTI3MSAxNi4zNTY0IDE0LjA3MDhDMTYuNTAwMiAxNC4yMTQ1IDE2LjUgMTQuNDQ2MiAxNi41IDE0LjkwODdWMTUuNTY0QzE2LjUgMTYuNDg5MyAxNi41MDAyIDE2Ljk1MjIgMTYuMjEyOSAxNy4yMzk3QzE1LjkyNTMgMTcuNTI3MyAxNS40NjE4IDE3LjUyNzggMTQuNTM2MSAxNy41Mjc4SDkuNDYzODdDOC41Mzg0MiAxNy41Mjc4IDguMDc1NjcgMTcuNTI3MSA3Ljc4ODA5IDE3LjIzOTdDNy41MDA1NCAxNi45NTIyIDcuNSAxNi40ODk0IDcuNSAxNS41NjRWMTQuOTA4N0M3LjUgMTQuNDQ2MiA3LjQ5OTgyIDE0LjIxNDUgNy42NDM1NSAxNC4wNzA4QzcuNzg3MyAxMy45MjcxIDguMDE4OTEgMTMuOTI3MiA4LjQ4MTQ1IDEzLjkyNzJIMTUuNTE4NlpNMTIgNi4zNTg4OUMxNi41NjUzIDYuMzU4ODkgMTYuNSA5LjQwMjM4IDE2LjUgMTAuODU4OVYxMi40OTU2QzE2LjQ5OTkgMTIuNzY2NyAxNi4yNzk5IDEyLjk4NjggMTYuMDA4OCAxMi45ODY4SDcuOTkxMjFDNy43MjAxMiAxMi45ODY4IDcuNTAwMDYgMTIuNzY2NyA3LjUgMTIuNDk1NkM3LjUgMTIuNDk1NiA3LjUgMTIuMzE1MyA3LjUgMTAuODU4OUM3LjQ5OTk5IDkuNDAyMzkgNy40MzQ3OCA2LjM1ODkzIDEyIDYuMzU4ODlaTTEyIDcuNTE5MDRDMTEuMjMxOSA3LjUxOTEgMTAuNjA5NCA4LjE0MTU1IDEwLjYwOTQgOC45MDk2N0MxMC42MDk0IDkuNjc3NzggMTEuMjMxOSAxMC4zMDAyIDEyIDEwLjMwMDNDMTIuNzY4MiAxMC4zMDAzIDEzLjM5MDYgOS42Nzc4MiAxMy4zOTA2IDguOTA5NjdDMTMuMzkwNiA4LjE0MTUxIDEyLjc2ODIgNy41MTkwNCAxMiA3LjUxOTA0Wk0xMS45OTkgNC40NzIxN0MxMi45ODQxIDQuNDcyMjIgMTMuODQ2MiA0LjgxNjczIDE0LjA3NDIgNS4zNzc0NEMxNC4xMDg1IDUuNDczODcgMTQuMTI1OCA1LjUyMjIyIDE0LjA5NTcgNS41NTgxMUMxNC4wNjUyIDUuNTk0MDIgMTQuMDA1OCA1LjU4MzQyIDEzLjg4NzcgNS41NjIwMUMxMy41ODIyIDUuNTA2NjUgMTMuMTQ5MyA1LjQ2ODc3IDEyLjc2ODYgNS40NTc1MkMxMi41MjU4IDUuNDQ0NDggMTIuMjY5NSA1LjQzNzk5IDEyIDUuNDM3OTlDMTEuNzMwNSA1LjQzNzk5IDExLjQ3NDIgNS40NDQ0OCAxMS4yMzE0IDUuNDU3NTJDMTAuODQ5IDUuNDY4NzcgMTAuNDE0OSA1LjUwNjU4IDEwLjEwODQgNS41NjAwNkM5Ljk5MzM1IDUuNTgwMTMgOS45MzU2NSA1LjU5MDQ3IDkuOTA1MjcgNS41NTUxOEM5Ljg3NDk3IDUuNTE5MzUgOS44OTEyOCA1LjQ3MTQ0IDkuOTI0OCA1LjM3NjQ2QzEwLjE1MSA0LjgxNzQ4IDExLjAxNDIgNC40NzIxNyAxMS45OTkgNC40NzIxN1oiIGZpbGw9IndoaXRlIi8+PC9zdmc+", WALLET_ICON_OVERRIDES = {
|
|
630
|
+
Phantom: PHANTOM_ICON,
|
|
631
|
+
Solflare: SOLFLARE_ICON,
|
|
632
|
+
Backpack: BACKPACK_ICON
|
|
633
|
+
}, ICON_PROXY_CACHE = /* @__PURE__ */ new WeakMap();
|
|
634
|
+
function getWalletIconOverride(walletName) {
|
|
635
|
+
return WALLET_ICON_OVERRIDES[walletName];
|
|
636
|
+
}
|
|
637
|
+
function createIconProxy(wallet, icon) {
|
|
638
|
+
let cached = ICON_PROXY_CACHE.get(wallet);
|
|
639
|
+
if (cached) return cached;
|
|
640
|
+
let proxy = new Proxy(wallet, {
|
|
641
|
+
get(target, prop) {
|
|
642
|
+
if (prop === "icon") return icon;
|
|
643
|
+
let value = Reflect.get(target, prop, target);
|
|
644
|
+
return typeof value == "function" ? value.bind(target) : value;
|
|
645
|
+
}
|
|
646
|
+
});
|
|
647
|
+
return ICON_PROXY_CACHE.set(wallet, proxy), proxy;
|
|
648
|
+
}
|
|
649
|
+
function applyWalletIconOverride(wallet) {
|
|
650
|
+
let override = getWalletIconOverride(wallet.name);
|
|
651
|
+
if (!override || wallet.icon === override) return wallet;
|
|
652
|
+
if (Object.isExtensible(wallet))
|
|
653
|
+
try {
|
|
654
|
+
return wallet.icon = override, wallet;
|
|
655
|
+
} catch {
|
|
656
|
+
}
|
|
657
|
+
return createIconProxy(wallet, override);
|
|
658
|
+
}
|
|
659
|
+
|
|
625
660
|
// src/lib/wallet/detector.ts
|
|
626
|
-
var logger3 =
|
|
661
|
+
var logger3 = chunk64LV76OK_js.createLogger("WalletDetector");
|
|
627
662
|
function hasFeature(wallet, featureName) {
|
|
628
663
|
return wallet.features != null && wallet.features[featureName] !== void 0;
|
|
629
664
|
}
|
|
@@ -645,7 +680,7 @@ function verifyWalletName(wallet, requestedName) {
|
|
|
645
680
|
var WalletDetector = class extends BaseCollaborator {
|
|
646
681
|
constructor(stateManager, eventEmitter, debug = false) {
|
|
647
682
|
super({ stateManager, eventEmitter, debug }, "WalletDetector");
|
|
648
|
-
|
|
683
|
+
chunk64LV76OK_js.__publicField(this, "unsubscribers", []);
|
|
649
684
|
}
|
|
650
685
|
/**
|
|
651
686
|
* Initialize wallet detection (synchronous)
|
|
@@ -752,9 +787,9 @@ var WalletDetector = class extends BaseCollaborator {
|
|
|
752
787
|
* Convert a Wallet Standard wallet to WalletInfo with capability checks
|
|
753
788
|
*/
|
|
754
789
|
mapToWalletInfo(wallet) {
|
|
755
|
-
let hasConnect = hasFeature(
|
|
790
|
+
let walletWithIcon = applyWalletIconOverride(wallet), hasConnect = hasFeature(walletWithIcon, "standard:connect"), hasDisconnect = hasFeature(walletWithIcon, "standard:disconnect"), isSolana = Array.isArray(walletWithIcon.chains) && walletWithIcon.chains.some((c) => typeof c == "string" && c.includes("solana"));
|
|
756
791
|
return {
|
|
757
|
-
wallet,
|
|
792
|
+
wallet: walletWithIcon,
|
|
758
793
|
installed: true,
|
|
759
794
|
connectable: hasConnect && hasDisconnect && isSolana
|
|
760
795
|
};
|
|
@@ -795,10 +830,13 @@ function getEventsFeature(wallet) {
|
|
|
795
830
|
var ConnectionManager = class extends BaseCollaborator {
|
|
796
831
|
constructor(stateManager, eventEmitter, walletStorage, debug = false) {
|
|
797
832
|
super({ stateManager, eventEmitter, debug }, "ConnectionManager");
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
833
|
+
chunk64LV76OK_js.__publicField(this, "walletStorage");
|
|
834
|
+
chunk64LV76OK_js.__publicField(this, "walletChangeUnsub", null);
|
|
835
|
+
chunk64LV76OK_js.__publicField(this, "pollTimer", null);
|
|
836
|
+
chunk64LV76OK_js.__publicField(this, "pollAttempts", 0);
|
|
837
|
+
chunk64LV76OK_js.__publicField(this, "connectAttemptId", 0);
|
|
838
|
+
chunk64LV76OK_js.__publicField(this, "pendingWallet", null);
|
|
839
|
+
chunk64LV76OK_js.__publicField(this, "pendingWalletName", null);
|
|
802
840
|
this.walletStorage = walletStorage;
|
|
803
841
|
}
|
|
804
842
|
/**
|
|
@@ -806,8 +844,8 @@ var ConnectionManager = class extends BaseCollaborator {
|
|
|
806
844
|
*/
|
|
807
845
|
async connect(wallet, walletName) {
|
|
808
846
|
if (typeof window > "u") return;
|
|
809
|
-
let name = walletName || wallet.name;
|
|
810
|
-
this.eventEmitter.emit({
|
|
847
|
+
let name = walletName || wallet.name, attemptId = ++this.connectAttemptId;
|
|
848
|
+
this.pendingWallet = wallet, this.pendingWalletName = name, this.eventEmitter.emit({
|
|
811
849
|
type: "connecting",
|
|
812
850
|
wallet: name,
|
|
813
851
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
@@ -815,7 +853,10 @@ var ConnectionManager = class extends BaseCollaborator {
|
|
|
815
853
|
try {
|
|
816
854
|
let connect = getConnectFeature(wallet);
|
|
817
855
|
if (!connect) throw new Error(`Wallet ${name} does not support standard connect`);
|
|
818
|
-
let result = await connect({ silent: false })
|
|
856
|
+
let result = await connect({ silent: false });
|
|
857
|
+
if (attemptId !== this.connectAttemptId)
|
|
858
|
+
throw new Error("Connection cancelled");
|
|
859
|
+
let walletAccounts = wallet.accounts, accountMap = /* @__PURE__ */ new Map();
|
|
819
860
|
for (let a of [...walletAccounts, ...result.accounts]) accountMap.set(a.address, a);
|
|
820
861
|
let accounts = Array.from(accountMap.values()).map((a) => this.toAccountInfo(a)), state = this.getState(), previouslySelected = state.selectedAccount, previousAddresses = new Set(state.accounts.map((a) => a.address)), selected = accounts.find((a) => !previousAddresses.has(a.address))?.address ?? previouslySelected ?? accounts[0]?.address ?? null;
|
|
821
862
|
this.stateManager.updateState(
|
|
@@ -842,6 +883,8 @@ var ConnectionManager = class extends BaseCollaborator {
|
|
|
842
883
|
accountsCount: accounts.length
|
|
843
884
|
}), this.walletStorage && (!("isAvailable" in this.walletStorage) || typeof this.walletStorage.isAvailable != "function" || this.walletStorage.isAvailable() ? this.walletStorage.set(name) : this.log("Storage not available (private browsing?), skipping wallet persistence")), this.subscribeToWalletEvents();
|
|
844
885
|
} catch (e) {
|
|
886
|
+
if (attemptId !== this.connectAttemptId)
|
|
887
|
+
throw e;
|
|
845
888
|
let errorMessage = e instanceof Error ? e.message : String(e);
|
|
846
889
|
throw this.eventEmitter.emit({
|
|
847
890
|
type: "connection:failed",
|
|
@@ -863,22 +906,21 @@ var ConnectionManager = class extends BaseCollaborator {
|
|
|
863
906
|
},
|
|
864
907
|
true
|
|
865
908
|
), e;
|
|
909
|
+
} finally {
|
|
910
|
+
this.pendingWallet === wallet && this.pendingWalletName === name && (this.pendingWallet = null, this.pendingWalletName = null);
|
|
866
911
|
}
|
|
867
912
|
}
|
|
868
913
|
/**
|
|
869
914
|
* Disconnect from wallet
|
|
870
915
|
*/
|
|
871
916
|
async disconnect() {
|
|
872
|
-
this.walletChangeUnsub && (this.walletChangeUnsub(), this.walletChangeUnsub = null), this.stopPollingWalletAccounts();
|
|
873
|
-
let wallet = this.getState().selectedWallet;
|
|
874
|
-
if (
|
|
875
|
-
let disconnect = getDisconnectFeature(wallet);
|
|
876
|
-
disconnect && await disconnect();
|
|
877
|
-
}
|
|
878
|
-
this.stateManager.updateState(
|
|
917
|
+
this.connectAttemptId++, this.walletChangeUnsub && (this.walletChangeUnsub(), this.walletChangeUnsub = null), this.stopPollingWalletAccounts();
|
|
918
|
+
let wallet = this.getState().selectedWallet ?? this.pendingWallet;
|
|
919
|
+
if (this.pendingWallet = null, this.pendingWalletName = null, this.stateManager.updateState(
|
|
879
920
|
{
|
|
880
921
|
selectedWallet: null,
|
|
881
922
|
connected: false,
|
|
923
|
+
connecting: false,
|
|
882
924
|
accounts: [],
|
|
883
925
|
selectedAccount: null
|
|
884
926
|
},
|
|
@@ -886,7 +928,14 @@ var ConnectionManager = class extends BaseCollaborator {
|
|
|
886
928
|
), this.eventEmitter.emit({
|
|
887
929
|
type: "wallet:disconnected",
|
|
888
930
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
889
|
-
}), this.walletStorage && "clear" in this.walletStorage && typeof this.walletStorage.clear == "function" ? this.walletStorage.clear() : this.walletStorage?.set(void 0)
|
|
931
|
+
}), this.walletStorage && "clear" in this.walletStorage && typeof this.walletStorage.clear == "function" ? this.walletStorage.clear() : this.walletStorage?.set(void 0), wallet) {
|
|
932
|
+
let disconnect = getDisconnectFeature(wallet);
|
|
933
|
+
if (disconnect)
|
|
934
|
+
try {
|
|
935
|
+
await disconnect();
|
|
936
|
+
} catch {
|
|
937
|
+
}
|
|
938
|
+
}
|
|
890
939
|
}
|
|
891
940
|
/**
|
|
892
941
|
* Select a different account
|
|
@@ -993,13 +1042,13 @@ var ConnectionManager = class extends BaseCollaborator {
|
|
|
993
1042
|
};
|
|
994
1043
|
|
|
995
1044
|
// src/lib/wallet/auto-connector.ts
|
|
996
|
-
var logger4 =
|
|
1045
|
+
var logger4 = chunk64LV76OK_js.createLogger("AutoConnector"), MIN_ADDRESS_LENGTH = 30, AutoConnector = class {
|
|
997
1046
|
constructor(walletDetector, connectionManager, stateManager, walletStorage, debug = false) {
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1047
|
+
chunk64LV76OK_js.__publicField(this, "walletDetector");
|
|
1048
|
+
chunk64LV76OK_js.__publicField(this, "connectionManager");
|
|
1049
|
+
chunk64LV76OK_js.__publicField(this, "stateManager");
|
|
1050
|
+
chunk64LV76OK_js.__publicField(this, "walletStorage");
|
|
1051
|
+
chunk64LV76OK_js.__publicField(this, "debug");
|
|
1003
1052
|
this.walletDetector = walletDetector, this.connectionManager = connectionManager, this.stateManager = stateManager, this.walletStorage = walletStorage, this.debug = debug;
|
|
1004
1053
|
}
|
|
1005
1054
|
async attemptAutoConnect() {
|
|
@@ -1094,12 +1143,12 @@ var logger4 = chunkDSUCH44G_js.createLogger("AutoConnector"), MIN_ADDRESS_LENGTH
|
|
|
1094
1143
|
],
|
|
1095
1144
|
features,
|
|
1096
1145
|
accounts: []
|
|
1097
|
-
};
|
|
1146
|
+
}, walletWithIcon = applyWalletIconOverride(wallet);
|
|
1098
1147
|
this.stateManager.updateState(
|
|
1099
1148
|
{
|
|
1100
1149
|
wallets: [
|
|
1101
1150
|
{
|
|
1102
|
-
wallet,
|
|
1151
|
+
wallet: walletWithIcon,
|
|
1103
1152
|
installed: true,
|
|
1104
1153
|
connectable: true
|
|
1105
1154
|
}
|
|
@@ -1107,7 +1156,7 @@ var logger4 = chunkDSUCH44G_js.createLogger("AutoConnector"), MIN_ADDRESS_LENGTH
|
|
|
1107
1156
|
},
|
|
1108
1157
|
true
|
|
1109
1158
|
), await ready;
|
|
1110
|
-
let walletsApi = getWalletsRegistry(), registryWallet = walletsApi.get().find((w) => w.name === storedWalletName), walletToUse = registryWallet ||
|
|
1159
|
+
let walletsApi = getWalletsRegistry(), registryWallet = walletsApi.get().find((w) => w.name === storedWalletName), walletToUse = applyWalletIconOverride(registryWallet || walletWithIcon);
|
|
1111
1160
|
return this.debug && logger4.info("Attempting to connect via instant auto-connect", {
|
|
1112
1161
|
walletName: storedWalletName,
|
|
1113
1162
|
usingRegistry: !!registryWallet
|
|
@@ -1153,7 +1202,7 @@ var logger4 = chunkDSUCH44G_js.createLogger("AutoConnector"), MIN_ADDRESS_LENGTH
|
|
|
1153
1202
|
var ClusterManager = class extends BaseCollaborator {
|
|
1154
1203
|
constructor(stateManager, eventEmitter, clusterStorage, config, debug = false) {
|
|
1155
1204
|
super({ stateManager, eventEmitter, debug }, "ClusterManager");
|
|
1156
|
-
|
|
1205
|
+
chunk64LV76OK_js.__publicField(this, "clusterStorage");
|
|
1157
1206
|
if (this.clusterStorage = clusterStorage, config) {
|
|
1158
1207
|
let clusters = config.clusters ?? [], initialClusterId = this.clusterStorage?.get() ?? config.initialCluster ?? "solana:mainnet", initialCluster = clusters.find((c) => c.id === initialClusterId) ?? clusters[0] ?? null;
|
|
1159
1208
|
this.stateManager.updateState({
|
|
@@ -1168,7 +1217,7 @@ var ClusterManager = class extends BaseCollaborator {
|
|
|
1168
1217
|
async setCluster(clusterId) {
|
|
1169
1218
|
let state = this.getState(), previousClusterId = state.cluster?.id || null, cluster = state.clusters.find((c) => c.id === clusterId);
|
|
1170
1219
|
if (!cluster)
|
|
1171
|
-
throw
|
|
1220
|
+
throw chunk64LV76OK_js.Errors.clusterNotFound(
|
|
1172
1221
|
clusterId,
|
|
1173
1222
|
state.clusters.map((c) => c.id)
|
|
1174
1223
|
);
|
|
@@ -1197,9 +1246,9 @@ var ClusterManager = class extends BaseCollaborator {
|
|
|
1197
1246
|
var TransactionTracker = class extends BaseCollaborator {
|
|
1198
1247
|
constructor(stateManager, eventEmitter, maxTransactions = 20, debug = false) {
|
|
1199
1248
|
super({ stateManager, eventEmitter, debug }, "TransactionTracker");
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1249
|
+
chunk64LV76OK_js.__publicField(this, "transactions", []);
|
|
1250
|
+
chunk64LV76OK_js.__publicField(this, "totalTransactions", 0);
|
|
1251
|
+
chunk64LV76OK_js.__publicField(this, "maxTransactions");
|
|
1203
1252
|
this.maxTransactions = maxTransactions;
|
|
1204
1253
|
}
|
|
1205
1254
|
/**
|
|
@@ -1253,10 +1302,10 @@ var TransactionTracker = class extends BaseCollaborator {
|
|
|
1253
1302
|
// src/lib/health/health-monitor.ts
|
|
1254
1303
|
var HealthMonitor = class {
|
|
1255
1304
|
constructor(stateManager, walletStorage, clusterStorage, isInitialized) {
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1305
|
+
chunk64LV76OK_js.__publicField(this, "stateManager");
|
|
1306
|
+
chunk64LV76OK_js.__publicField(this, "walletStorage");
|
|
1307
|
+
chunk64LV76OK_js.__publicField(this, "clusterStorage");
|
|
1308
|
+
chunk64LV76OK_js.__publicField(this, "isInitialized");
|
|
1260
1309
|
this.stateManager = stateManager, this.walletStorage = walletStorage, this.clusterStorage = clusterStorage, this.isInitialized = isInitialized ?? (() => true);
|
|
1261
1310
|
}
|
|
1262
1311
|
/**
|
|
@@ -1308,19 +1357,20 @@ var HealthMonitor = class {
|
|
|
1308
1357
|
};
|
|
1309
1358
|
|
|
1310
1359
|
// src/lib/core/connector-client.ts
|
|
1311
|
-
var logger5 =
|
|
1360
|
+
var logger5 = chunk64LV76OK_js.createLogger("ConnectorClient"), ConnectorClient = class {
|
|
1312
1361
|
constructor(config = {}) {
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1362
|
+
chunk64LV76OK_js.__publicField(this, "stateManager");
|
|
1363
|
+
chunk64LV76OK_js.__publicField(this, "eventEmitter");
|
|
1364
|
+
chunk64LV76OK_js.__publicField(this, "walletDetector");
|
|
1365
|
+
chunk64LV76OK_js.__publicField(this, "connectionManager");
|
|
1366
|
+
chunk64LV76OK_js.__publicField(this, "autoConnector");
|
|
1367
|
+
chunk64LV76OK_js.__publicField(this, "clusterManager");
|
|
1368
|
+
chunk64LV76OK_js.__publicField(this, "transactionTracker");
|
|
1369
|
+
chunk64LV76OK_js.__publicField(this, "debugMetrics");
|
|
1370
|
+
chunk64LV76OK_js.__publicField(this, "healthMonitor");
|
|
1371
|
+
chunk64LV76OK_js.__publicField(this, "initialized", false);
|
|
1372
|
+
chunk64LV76OK_js.__publicField(this, "config");
|
|
1373
|
+
chunk64LV76OK_js.__publicField(this, "walletConnectRegistration", null);
|
|
1324
1374
|
this.config = config;
|
|
1325
1375
|
let initialState = {
|
|
1326
1376
|
wallets: [],
|
|
@@ -1363,8 +1413,10 @@ var logger5 = chunkDSUCH44G_js.createLogger("ConnectorClient"), ConnectorClient
|
|
|
1363
1413
|
}
|
|
1364
1414
|
initialize() {
|
|
1365
1415
|
if (typeof window > "u" || this.initialized) return;
|
|
1366
|
-
let { error } =
|
|
1367
|
-
this.walletDetector.initialize(), this.config.
|
|
1416
|
+
let { error } = chunk4KD6HQQG_js.tryCatchSync(() => {
|
|
1417
|
+
this.walletDetector.initialize(), this.config.walletConnect?.enabled && this.initializeWalletConnect().catch((err) => {
|
|
1418
|
+
this.config.debug && logger5.error("WalletConnect initialization failed", { error: err });
|
|
1419
|
+
}), this.config.autoConnect && setTimeout(() => {
|
|
1368
1420
|
this.autoConnector.attemptAutoConnect().catch((err) => {
|
|
1369
1421
|
this.config.debug && logger5.error("Auto-connect error", { error: err });
|
|
1370
1422
|
});
|
|
@@ -1372,6 +1424,19 @@ var logger5 = chunkDSUCH44G_js.createLogger("ConnectorClient"), ConnectorClient
|
|
|
1372
1424
|
});
|
|
1373
1425
|
error && this.config.debug && logger5.error("Connector initialization failed", { error });
|
|
1374
1426
|
}
|
|
1427
|
+
/**
|
|
1428
|
+
* Initialize WalletConnect integration
|
|
1429
|
+
* Dynamically imports and registers the WalletConnect wallet
|
|
1430
|
+
*/
|
|
1431
|
+
async initializeWalletConnect() {
|
|
1432
|
+
if (this.config.walletConnect?.enabled)
|
|
1433
|
+
try {
|
|
1434
|
+
let { registerWalletConnectWallet } = await import('./walletconnect-D4JN6H2O.js');
|
|
1435
|
+
this.walletConnectRegistration = await registerWalletConnectWallet(this.config.walletConnect), this.config.debug && logger5.info("WalletConnect wallet registered successfully");
|
|
1436
|
+
} catch (error) {
|
|
1437
|
+
this.config.debug && logger5.error("Failed to register WalletConnect wallet", { error });
|
|
1438
|
+
}
|
|
1439
|
+
}
|
|
1375
1440
|
async select(walletName) {
|
|
1376
1441
|
let wallet = this.stateManager.getSnapshot().wallets.find((w) => w.wallet.name === walletName)?.wallet;
|
|
1377
1442
|
if (!wallet) throw new Error(`Wallet ${walletName} not found`);
|
|
@@ -1395,7 +1460,7 @@ var logger5 = chunkDSUCH44G_js.createLogger("ConnectorClient"), ConnectorClient
|
|
|
1395
1460
|
getRpcUrl() {
|
|
1396
1461
|
let cluster = this.clusterManager.getCluster();
|
|
1397
1462
|
if (!cluster) return null;
|
|
1398
|
-
let { data, error } =
|
|
1463
|
+
let { data, error } = chunk4KD6HQQG_js.tryCatchSync(() => getClusterRpcUrl(cluster));
|
|
1399
1464
|
return error ? (this.config.debug && logger5.error("Failed to get RPC URL", { error }), null) : data;
|
|
1400
1465
|
}
|
|
1401
1466
|
subscribe(listener) {
|
|
@@ -1410,7 +1475,7 @@ var logger5 = chunkDSUCH44G_js.createLogger("ConnectorClient"), ConnectorClient
|
|
|
1410
1475
|
for (let key of storageKeys) {
|
|
1411
1476
|
let storage = this.config.storage?.[key];
|
|
1412
1477
|
if (storage && "reset" in storage && typeof storage.reset == "function") {
|
|
1413
|
-
let resetFn = storage.reset, { error } =
|
|
1478
|
+
let resetFn = storage.reset, { error } = chunk4KD6HQQG_js.tryCatchSync(() => resetFn());
|
|
1414
1479
|
error ? this.config.debug && logger5.error("Failed to reset storage", { key, error }) : this.config.debug && logger5.debug("Reset storage", { key });
|
|
1415
1480
|
}
|
|
1416
1481
|
}
|
|
@@ -1464,11 +1529,17 @@ var logger5 = chunkDSUCH44G_js.createLogger("ConnectorClient"), ConnectorClient
|
|
|
1464
1529
|
this.debugMetrics.resetMetrics();
|
|
1465
1530
|
}
|
|
1466
1531
|
destroy() {
|
|
1532
|
+
if (this.walletConnectRegistration)
|
|
1533
|
+
try {
|
|
1534
|
+
this.walletConnectRegistration.unregister(), this.walletConnectRegistration = null;
|
|
1535
|
+
} catch (error) {
|
|
1536
|
+
this.config.debug && logger5.warn("Error unregistering WalletConnect wallet", { error });
|
|
1537
|
+
}
|
|
1467
1538
|
this.connectionManager.disconnect().catch(() => {
|
|
1468
1539
|
}), this.walletDetector.destroy(), this.eventEmitter.offAll(), this.stateManager.clear();
|
|
1469
1540
|
}
|
|
1470
1541
|
};
|
|
1471
|
-
var logger6 =
|
|
1542
|
+
var logger6 = chunk64LV76OK_js.createLogger("ErrorBoundary"), WalletErrorType = /* @__PURE__ */ ((WalletErrorType2) => (WalletErrorType2.CONNECTION_FAILED = "CONNECTION_FAILED", WalletErrorType2.TRANSACTION_FAILED = "TRANSACTION_FAILED", WalletErrorType2.NETWORK_ERROR = "NETWORK_ERROR", WalletErrorType2.WALLET_NOT_FOUND = "WALLET_NOT_FOUND", WalletErrorType2.USER_REJECTED = "USER_REJECTED", WalletErrorType2.INSUFFICIENT_FUNDS = "INSUFFICIENT_FUNDS", WalletErrorType2.UNKNOWN_ERROR = "UNKNOWN_ERROR", WalletErrorType2))(WalletErrorType || {}), ErrorLogger = class {
|
|
1472
1543
|
static log(error, errorInfo, context) {
|
|
1473
1544
|
if (process.env.NODE_ENV === "development" && logger6.error(error.message, {
|
|
1474
1545
|
error,
|
|
@@ -1487,7 +1558,7 @@ var logger6 = chunkDSUCH44G_js.createLogger("ErrorBoundary"), WalletErrorType =
|
|
|
1487
1558
|
}
|
|
1488
1559
|
};
|
|
1489
1560
|
function classifyError(error) {
|
|
1490
|
-
if (
|
|
1561
|
+
if (chunk64LV76OK_js.isConnectorError(error))
|
|
1491
1562
|
return {
|
|
1492
1563
|
...error,
|
|
1493
1564
|
type: {
|
|
@@ -1516,8 +1587,8 @@ function classifyError(error) {
|
|
|
1516
1587
|
var ConnectorErrorBoundary = class extends react.Component {
|
|
1517
1588
|
constructor(props) {
|
|
1518
1589
|
super(props);
|
|
1519
|
-
|
|
1520
|
-
|
|
1590
|
+
chunk64LV76OK_js.__publicField(this, "retryTimeouts", /* @__PURE__ */ new Set());
|
|
1591
|
+
chunk64LV76OK_js.__publicField(this, "retry", () => {
|
|
1521
1592
|
let { maxRetries = 3 } = this.props;
|
|
1522
1593
|
this.state.retryCount >= maxRetries || this.setState((prevState) => ({
|
|
1523
1594
|
hasError: false,
|
|
@@ -1739,7 +1810,7 @@ function withErrorBoundary(Component2, errorBoundaryProps) {
|
|
|
1739
1810
|
let WrappedComponent = (props) => /* @__PURE__ */ jsxRuntime.jsx(ConnectorErrorBoundary, { ...errorBoundaryProps, children: /* @__PURE__ */ jsxRuntime.jsx(Component2, { ...props }) });
|
|
1740
1811
|
return WrappedComponent.displayName = `withErrorBoundary(${Component2.displayName || Component2.name})`, WrappedComponent;
|
|
1741
1812
|
}
|
|
1742
|
-
var logger7 =
|
|
1813
|
+
var logger7 = chunk64LV76OK_js.createLogger("Polyfills"), installed = false;
|
|
1743
1814
|
function installPolyfills() {
|
|
1744
1815
|
if (!(installed || typeof window > "u"))
|
|
1745
1816
|
try {
|
|
@@ -1766,6 +1837,355 @@ function getPolyfillStatus() {
|
|
|
1766
1837
|
environment: typeof window < "u" ? "browser" : "server"
|
|
1767
1838
|
};
|
|
1768
1839
|
}
|
|
1840
|
+
var logger8 = chunk64LV76OK_js.createLogger("EnhancedStorage"), STORAGE_VERSION = "v1", EnhancedStorage = class extends core.Storage {
|
|
1841
|
+
constructor(key, initial, options) {
|
|
1842
|
+
super(key, initial);
|
|
1843
|
+
this.options = options;
|
|
1844
|
+
chunk64LV76OK_js.__publicField(this, "errorHandlers", /* @__PURE__ */ new Set());
|
|
1845
|
+
chunk64LV76OK_js.__publicField(this, "validators", []);
|
|
1846
|
+
chunk64LV76OK_js.__publicField(this, "memoryFallback");
|
|
1847
|
+
this.memoryFallback = initial, options?.onError && this.errorHandlers.add(options.onError), options?.validator && this.validators.push(options.validator);
|
|
1848
|
+
}
|
|
1849
|
+
set(value) {
|
|
1850
|
+
try {
|
|
1851
|
+
return this.validate(value) ? (super.set(value), this.memoryFallback = value, true) : (logger8.warn("Validation failed", { key: this.key }), false);
|
|
1852
|
+
} catch (error) {
|
|
1853
|
+
return this.handleError(error), this.options?.useMemoryFallback ? (this.memoryFallback = value, true) : false;
|
|
1854
|
+
}
|
|
1855
|
+
}
|
|
1856
|
+
get() {
|
|
1857
|
+
try {
|
|
1858
|
+
return super.get();
|
|
1859
|
+
} catch (error) {
|
|
1860
|
+
return this.handleError(error), this.options?.useMemoryFallback ? this.memoryFallback : this.initial;
|
|
1861
|
+
}
|
|
1862
|
+
}
|
|
1863
|
+
validate(value) {
|
|
1864
|
+
return this.validators.every((validator) => validator(value));
|
|
1865
|
+
}
|
|
1866
|
+
addValidator(validator) {
|
|
1867
|
+
return this.validators.push(validator), this;
|
|
1868
|
+
}
|
|
1869
|
+
onError(handler) {
|
|
1870
|
+
return this.errorHandlers.add(handler), this;
|
|
1871
|
+
}
|
|
1872
|
+
transform(transformer) {
|
|
1873
|
+
return transformer(this.get());
|
|
1874
|
+
}
|
|
1875
|
+
reset() {
|
|
1876
|
+
this.set(this.initial);
|
|
1877
|
+
}
|
|
1878
|
+
clear() {
|
|
1879
|
+
try {
|
|
1880
|
+
typeof window < "u" && window.localStorage && window.localStorage.removeItem(this.key), this.reset();
|
|
1881
|
+
} catch (error) {
|
|
1882
|
+
this.handleError(error);
|
|
1883
|
+
}
|
|
1884
|
+
}
|
|
1885
|
+
isAvailable() {
|
|
1886
|
+
try {
|
|
1887
|
+
if (typeof window > "u") return false;
|
|
1888
|
+
let testKey = `__storage_test_${this.key}__`;
|
|
1889
|
+
return window.localStorage.setItem(testKey, "test"), window.localStorage.removeItem(testKey), true;
|
|
1890
|
+
} catch {
|
|
1891
|
+
return false;
|
|
1892
|
+
}
|
|
1893
|
+
}
|
|
1894
|
+
static migrate(oldKey, newStorage) {
|
|
1895
|
+
try {
|
|
1896
|
+
if (typeof window > "u") return false;
|
|
1897
|
+
let oldValue = window.localStorage.getItem(oldKey);
|
|
1898
|
+
if (oldValue) {
|
|
1899
|
+
let parsed = JSON.parse(oldValue);
|
|
1900
|
+
return newStorage.set(parsed), window.localStorage.removeItem(oldKey), true;
|
|
1901
|
+
}
|
|
1902
|
+
return false;
|
|
1903
|
+
} catch {
|
|
1904
|
+
return false;
|
|
1905
|
+
}
|
|
1906
|
+
}
|
|
1907
|
+
handleError(error) {
|
|
1908
|
+
logger8.error("Storage error", { key: this.key, error }), this.errorHandlers.forEach((handler) => {
|
|
1909
|
+
try {
|
|
1910
|
+
handler(error);
|
|
1911
|
+
} catch (err) {
|
|
1912
|
+
logger8.error("Error in error handler", { error: err });
|
|
1913
|
+
}
|
|
1914
|
+
});
|
|
1915
|
+
}
|
|
1916
|
+
};
|
|
1917
|
+
function createEnhancedStorageAccount(options) {
|
|
1918
|
+
let key = options?.key ?? `connector-kit:${STORAGE_VERSION}:account`;
|
|
1919
|
+
return new EnhancedStorage(key, options?.initial, {
|
|
1920
|
+
validator: options?.validator,
|
|
1921
|
+
onError: options?.onError,
|
|
1922
|
+
useMemoryFallback: true
|
|
1923
|
+
// Always fallback for SSR
|
|
1924
|
+
});
|
|
1925
|
+
}
|
|
1926
|
+
function createEnhancedStorageCluster(options) {
|
|
1927
|
+
let key = options?.key ?? `connector-kit:${STORAGE_VERSION}:cluster`, storage = new EnhancedStorage(key, options?.initial ?? "solana:mainnet", {
|
|
1928
|
+
onError: options?.onError,
|
|
1929
|
+
useMemoryFallback: true
|
|
1930
|
+
});
|
|
1931
|
+
return options?.validClusters && storage.addValidator((clusterId) => options.validClusters.includes(clusterId)), storage;
|
|
1932
|
+
}
|
|
1933
|
+
function createEnhancedStorageWallet(options) {
|
|
1934
|
+
let key = options?.key ?? `connector-kit:${STORAGE_VERSION}:wallet`;
|
|
1935
|
+
return new EnhancedStorage(key, options?.initial, {
|
|
1936
|
+
onError: options?.onError,
|
|
1937
|
+
useMemoryFallback: true
|
|
1938
|
+
});
|
|
1939
|
+
}
|
|
1940
|
+
var EnhancedStorageAdapter = class {
|
|
1941
|
+
constructor(storage) {
|
|
1942
|
+
this.storage = storage;
|
|
1943
|
+
}
|
|
1944
|
+
get() {
|
|
1945
|
+
return this.storage.get();
|
|
1946
|
+
}
|
|
1947
|
+
set(value) {
|
|
1948
|
+
this.storage.set(value);
|
|
1949
|
+
}
|
|
1950
|
+
subscribe(callback) {
|
|
1951
|
+
return this.storage.value.subscribe(callback);
|
|
1952
|
+
}
|
|
1953
|
+
validate(value) {
|
|
1954
|
+
return this.storage.validate(value);
|
|
1955
|
+
}
|
|
1956
|
+
reset() {
|
|
1957
|
+
this.storage.reset();
|
|
1958
|
+
}
|
|
1959
|
+
clear() {
|
|
1960
|
+
this.storage.clear();
|
|
1961
|
+
}
|
|
1962
|
+
isAvailable() {
|
|
1963
|
+
return this.storage.isAvailable();
|
|
1964
|
+
}
|
|
1965
|
+
transform(transformer) {
|
|
1966
|
+
return this.storage.transform(transformer);
|
|
1967
|
+
}
|
|
1968
|
+
addValidator(validator) {
|
|
1969
|
+
return this.storage.addValidator(validator), this;
|
|
1970
|
+
}
|
|
1971
|
+
onError(handler) {
|
|
1972
|
+
return this.storage.onError(handler), this;
|
|
1973
|
+
}
|
|
1974
|
+
};
|
|
1975
|
+
var logger9 = chunk64LV76OK_js.createLogger("DefaultConfig");
|
|
1976
|
+
function getDefaultConfig(options) {
|
|
1977
|
+
let {
|
|
1978
|
+
appName,
|
|
1979
|
+
appUrl,
|
|
1980
|
+
autoConnect = true,
|
|
1981
|
+
debug,
|
|
1982
|
+
network = "mainnet-beta",
|
|
1983
|
+
enableMobile = true,
|
|
1984
|
+
storage,
|
|
1985
|
+
clusters,
|
|
1986
|
+
customClusters = [],
|
|
1987
|
+
persistClusterSelection = true,
|
|
1988
|
+
clusterStorageKey,
|
|
1989
|
+
enableErrorBoundary = true,
|
|
1990
|
+
maxRetries = DEFAULT_MAX_RETRIES,
|
|
1991
|
+
onError,
|
|
1992
|
+
imageProxy,
|
|
1993
|
+
programLabels,
|
|
1994
|
+
coingecko,
|
|
1995
|
+
walletConnect
|
|
1996
|
+
} = options, defaultClusters = clusters ?? [
|
|
1997
|
+
core.createSolanaMainnet(),
|
|
1998
|
+
core.createSolanaDevnet(),
|
|
1999
|
+
core.createSolanaTestnet(),
|
|
2000
|
+
...network === "localnet" ? [core.createSolanaLocalnet()] : [],
|
|
2001
|
+
...customClusters || []
|
|
2002
|
+
], validClusterIds = defaultClusters.map((c) => c.id), accountStorage = createEnhancedStorageAccount({
|
|
2003
|
+
validator: (address) => address ? addresses.isAddress(address) : true,
|
|
2004
|
+
onError: (error) => {
|
|
2005
|
+
debug && logger9.error("Account Storage error", { error }), onError && onError(error, {
|
|
2006
|
+
componentStack: "account-storage"
|
|
2007
|
+
});
|
|
2008
|
+
}
|
|
2009
|
+
}), clusterStorage = createEnhancedStorageCluster({
|
|
2010
|
+
key: clusterStorageKey,
|
|
2011
|
+
initial: getInitialCluster(network),
|
|
2012
|
+
validClusters: persistClusterSelection ? validClusterIds : void 0,
|
|
2013
|
+
onError: (error) => {
|
|
2014
|
+
debug && logger9.error("Cluster Storage error", { error }), onError && onError(error, {
|
|
2015
|
+
componentStack: "cluster-storage"
|
|
2016
|
+
});
|
|
2017
|
+
}
|
|
2018
|
+
}), walletStorage = createEnhancedStorageWallet({
|
|
2019
|
+
onError: (error) => {
|
|
2020
|
+
debug && logger9.error("Wallet Storage error", { error }), onError && onError(error, {
|
|
2021
|
+
componentStack: "wallet-storage"
|
|
2022
|
+
});
|
|
2023
|
+
}
|
|
2024
|
+
});
|
|
2025
|
+
if (typeof window < "u") {
|
|
2026
|
+
let oldAccountKey = "connector-kit:account", oldWalletKey = "connector-kit:wallet", oldClusterKey = clusterStorageKey || "connector-kit:cluster";
|
|
2027
|
+
EnhancedStorage.migrate(oldAccountKey, accountStorage), EnhancedStorage.migrate(oldWalletKey, walletStorage), EnhancedStorage.migrate(oldClusterKey, clusterStorage);
|
|
2028
|
+
}
|
|
2029
|
+
let defaultStorage = storage ?? {
|
|
2030
|
+
account: new EnhancedStorageAdapter(accountStorage),
|
|
2031
|
+
cluster: new EnhancedStorageAdapter(clusterStorage),
|
|
2032
|
+
wallet: new EnhancedStorageAdapter(walletStorage)
|
|
2033
|
+
}, walletConnectConfig = buildWalletConnectConfig(walletConnect, appName, appUrl, clusterStorageKey ?? "connector-kit:v1:cluster");
|
|
2034
|
+
return {
|
|
2035
|
+
autoConnect,
|
|
2036
|
+
debug: debug ?? process.env.NODE_ENV === "development",
|
|
2037
|
+
storage: defaultStorage,
|
|
2038
|
+
appName,
|
|
2039
|
+
appUrl,
|
|
2040
|
+
enableMobile,
|
|
2041
|
+
network,
|
|
2042
|
+
cluster: {
|
|
2043
|
+
clusters: defaultClusters,
|
|
2044
|
+
persistSelection: persistClusterSelection,
|
|
2045
|
+
initialCluster: getInitialCluster(network)
|
|
2046
|
+
},
|
|
2047
|
+
errorBoundary: {
|
|
2048
|
+
enabled: enableErrorBoundary,
|
|
2049
|
+
maxRetries,
|
|
2050
|
+
onError
|
|
2051
|
+
},
|
|
2052
|
+
imageProxy,
|
|
2053
|
+
programLabels,
|
|
2054
|
+
coingecko,
|
|
2055
|
+
walletConnect: walletConnectConfig
|
|
2056
|
+
};
|
|
2057
|
+
}
|
|
2058
|
+
function buildWalletConnectConfig(walletConnect, appName, appUrl, clusterStorageKey) {
|
|
2059
|
+
if (!walletConnect) return;
|
|
2060
|
+
let configProjectId = typeof walletConnect == "object" ? walletConnect.projectId : void 0, envProjectId = typeof process < "u" ? process.env.NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID : void 0, projectId = configProjectId || envProjectId;
|
|
2061
|
+
if (!projectId) {
|
|
2062
|
+
(typeof walletConnect == "object" || walletConnect === true) && logger9.warn("WalletConnect enabled but no project ID found. Set NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID or provide projectId in config.");
|
|
2063
|
+
return;
|
|
2064
|
+
}
|
|
2065
|
+
let origin = appUrl || (typeof window < "u" ? window.location.origin : "http://localhost:3000"), customMetadata = typeof walletConnect == "object" ? walletConnect.metadata : void 0, customDefaultChain = typeof walletConnect == "object" ? walletConnect.defaultChain : void 0, customRelayUrl = typeof walletConnect == "object" ? walletConnect.relayUrl : void 0;
|
|
2066
|
+
return {
|
|
2067
|
+
enabled: true,
|
|
2068
|
+
projectId,
|
|
2069
|
+
metadata: {
|
|
2070
|
+
name: customMetadata?.name ?? appName,
|
|
2071
|
+
description: customMetadata?.description ?? `${appName} - Powered by ConnectorKit`,
|
|
2072
|
+
url: customMetadata?.url ?? origin,
|
|
2073
|
+
icons: customMetadata?.icons ?? [`${origin}/icon.svg`]
|
|
2074
|
+
},
|
|
2075
|
+
defaultChain: customDefaultChain ?? "solana:mainnet",
|
|
2076
|
+
relayUrl: customRelayUrl,
|
|
2077
|
+
// Auto-sync with cluster storage
|
|
2078
|
+
getCurrentChain: () => {
|
|
2079
|
+
if (typeof window > "u") return "solana:mainnet";
|
|
2080
|
+
let storageKey = clusterStorageKey || "connector-kit:v1:cluster";
|
|
2081
|
+
try {
|
|
2082
|
+
let stored = localStorage.getItem(storageKey);
|
|
2083
|
+
if (stored) {
|
|
2084
|
+
let id = JSON.parse(stored);
|
|
2085
|
+
if (id === "solana:mainnet" || id === "solana:devnet" || id === "solana:testnet")
|
|
2086
|
+
return id;
|
|
2087
|
+
}
|
|
2088
|
+
} catch {
|
|
2089
|
+
}
|
|
2090
|
+
return customDefaultChain ?? "solana:mainnet";
|
|
2091
|
+
}
|
|
2092
|
+
// Note: onDisplayUri, onSessionEstablished, onSessionDisconnected are auto-wired by AppProvider
|
|
2093
|
+
};
|
|
2094
|
+
}
|
|
2095
|
+
function getInitialCluster(network = "mainnet-beta") {
|
|
2096
|
+
return toClusterId(network);
|
|
2097
|
+
}
|
|
2098
|
+
function getDefaultMobileConfig(options) {
|
|
2099
|
+
let baseUrl = options.appUrl || (typeof window < "u" ? window.location.origin : "https://localhost:3000");
|
|
2100
|
+
return {
|
|
2101
|
+
appIdentity: {
|
|
2102
|
+
name: options.appName,
|
|
2103
|
+
uri: baseUrl,
|
|
2104
|
+
icon: `${baseUrl}/favicon.ico`
|
|
2105
|
+
},
|
|
2106
|
+
cluster: options.network || "mainnet-beta"
|
|
2107
|
+
};
|
|
2108
|
+
}
|
|
2109
|
+
var solanaNetworkSchema = v4.z.enum(["mainnet", "mainnet-beta", "devnet", "testnet", "localnet"]), solanaClusterIdSchema = v4.z.string().regex(/^solana:(mainnet|devnet|testnet|localnet|[a-zA-Z0-9-]+)$/, {
|
|
2110
|
+
message: 'Cluster ID must be in format "solana:<network>" (e.g., "solana:mainnet")'
|
|
2111
|
+
}), urlSchema = v4.z.string().url("Invalid URL format"), optionalUrlSchema = urlSchema.optional(), coinGeckoConfigSchema = v4.z.strictObject({
|
|
2112
|
+
apiKey: v4.z.string().optional(),
|
|
2113
|
+
isPro: v4.z.boolean().optional(),
|
|
2114
|
+
maxRetries: v4.z.number().int().positive().max(10).optional(),
|
|
2115
|
+
baseDelay: v4.z.number().int().positive().max(3e4).optional(),
|
|
2116
|
+
maxTimeout: v4.z.number().int().positive().max(12e4).optional()
|
|
2117
|
+
}).optional(), walletConnectMetadataSchema = v4.z.object({
|
|
2118
|
+
name: v4.z.string().min(1, "WalletConnect app name is required"),
|
|
2119
|
+
description: v4.z.string(),
|
|
2120
|
+
url: urlSchema,
|
|
2121
|
+
icons: v4.z.array(v4.z.string())
|
|
2122
|
+
}), walletConnectObjectConfigSchema = v4.z.object({
|
|
2123
|
+
enabled: v4.z.boolean().optional(),
|
|
2124
|
+
projectId: v4.z.string().min(1, "WalletConnect projectId is required"),
|
|
2125
|
+
metadata: walletConnectMetadataSchema,
|
|
2126
|
+
defaultChain: v4.z.enum(["solana:mainnet", "solana:devnet", "solana:testnet"]).optional(),
|
|
2127
|
+
onDisplayUri: v4.z.custom((val) => typeof val == "function").optional(),
|
|
2128
|
+
onSessionEstablished: v4.z.custom((val) => typeof val == "function").optional(),
|
|
2129
|
+
onSessionDisconnected: v4.z.custom((val) => typeof val == "function").optional(),
|
|
2130
|
+
relayUrl: urlSchema.optional()
|
|
2131
|
+
}), walletConnectConfigSchema = v4.z.union([v4.z.literal(true), walletConnectObjectConfigSchema]).optional(), storageAdapterSchema = v4.z.looseObject({
|
|
2132
|
+
get: v4.z.custom((val) => typeof val == "function"),
|
|
2133
|
+
set: v4.z.custom((val) => typeof val == "function")
|
|
2134
|
+
}), storageConfigSchema = v4.z.object({
|
|
2135
|
+
account: storageAdapterSchema,
|
|
2136
|
+
cluster: storageAdapterSchema,
|
|
2137
|
+
wallet: storageAdapterSchema
|
|
2138
|
+
}).optional(), solanaClusterSchema = v4.z.object({
|
|
2139
|
+
id: solanaClusterIdSchema,
|
|
2140
|
+
label: v4.z.string().min(1, "Cluster label cannot be empty"),
|
|
2141
|
+
url: urlSchema,
|
|
2142
|
+
urlWs: urlSchema.optional()
|
|
2143
|
+
}), clusterConfigSchema = v4.z.object({
|
|
2144
|
+
clusters: v4.z.array(solanaClusterSchema).optional(),
|
|
2145
|
+
persistSelection: v4.z.boolean().optional(),
|
|
2146
|
+
initialCluster: solanaClusterIdSchema.optional()
|
|
2147
|
+
}).optional(), defaultConfigOptionsSchema = v4.z.object({
|
|
2148
|
+
// Required
|
|
2149
|
+
appName: v4.z.string().min(1, "Application name is required"),
|
|
2150
|
+
// Optional strings
|
|
2151
|
+
appUrl: optionalUrlSchema,
|
|
2152
|
+
imageProxy: v4.z.string().optional(),
|
|
2153
|
+
clusterStorageKey: v4.z.string().optional(),
|
|
2154
|
+
// Optional booleans
|
|
2155
|
+
autoConnect: v4.z.boolean().optional(),
|
|
2156
|
+
debug: v4.z.boolean().optional(),
|
|
2157
|
+
enableMobile: v4.z.boolean().optional(),
|
|
2158
|
+
persistClusterSelection: v4.z.boolean().optional(),
|
|
2159
|
+
enableErrorBoundary: v4.z.boolean().optional(),
|
|
2160
|
+
// Network
|
|
2161
|
+
network: solanaNetworkSchema.optional(),
|
|
2162
|
+
// Numbers
|
|
2163
|
+
maxRetries: v4.z.number().int().positive().max(10).optional(),
|
|
2164
|
+
// Complex types
|
|
2165
|
+
storage: storageConfigSchema,
|
|
2166
|
+
clusters: v4.z.array(solanaClusterSchema).optional(),
|
|
2167
|
+
customClusters: v4.z.array(solanaClusterSchema).optional(),
|
|
2168
|
+
programLabels: v4.z.record(v4.z.string(), v4.z.string()).optional(),
|
|
2169
|
+
coingecko: coinGeckoConfigSchema,
|
|
2170
|
+
walletConnect: walletConnectConfigSchema,
|
|
2171
|
+
// Functions (can't validate implementation, just existence)
|
|
2172
|
+
onError: v4.z.custom((val) => typeof val == "function").optional()
|
|
2173
|
+
}); v4.z.strictObject({
|
|
2174
|
+
autoConnect: v4.z.boolean().optional(),
|
|
2175
|
+
debug: v4.z.boolean().optional(),
|
|
2176
|
+
storage: storageConfigSchema,
|
|
2177
|
+
cluster: clusterConfigSchema,
|
|
2178
|
+
imageProxy: v4.z.string().optional(),
|
|
2179
|
+
programLabels: v4.z.record(v4.z.string(), v4.z.string()).optional(),
|
|
2180
|
+
coingecko: coinGeckoConfigSchema,
|
|
2181
|
+
walletConnect: walletConnectConfigSchema
|
|
2182
|
+
}).optional();
|
|
2183
|
+
function validateConfigOptions(options) {
|
|
2184
|
+
return defaultConfigOptionsSchema.safeParse(options);
|
|
2185
|
+
}
|
|
2186
|
+
function parseConfigOptions(options) {
|
|
2187
|
+
return defaultConfigOptionsSchema.parse(options);
|
|
2188
|
+
}
|
|
1769
2189
|
|
|
1770
2190
|
// src/utils/formatting.ts
|
|
1771
2191
|
function formatAddress(address, options = {}) {
|
|
@@ -1977,7 +2397,7 @@ async function copySignatureToClipboard(signature, options) {
|
|
|
1977
2397
|
}
|
|
1978
2398
|
|
|
1979
2399
|
// src/lib/transaction/transaction-validator.ts
|
|
1980
|
-
var
|
|
2400
|
+
var logger10 = chunk64LV76OK_js.createLogger("TransactionValidator"), MAX_TRANSACTION_SIZE = 1232, MIN_TRANSACTION_SIZE = 64, TransactionValidator = class {
|
|
1981
2401
|
/**
|
|
1982
2402
|
* Validate a transaction before signing
|
|
1983
2403
|
*
|
|
@@ -2000,7 +2420,7 @@ var logger8 = chunkDSUCH44G_js.createLogger("TransactionValidator"), MAX_TRANSAC
|
|
|
2000
2420
|
try {
|
|
2001
2421
|
serialized = transaction.serialize();
|
|
2002
2422
|
} catch (serializeError) {
|
|
2003
|
-
|
|
2423
|
+
logger10.debug("Transaction not yet serializable (may need signing)", {
|
|
2004
2424
|
error: serializeError instanceof Error ? serializeError.message : String(serializeError)
|
|
2005
2425
|
});
|
|
2006
2426
|
}
|
|
@@ -2010,10 +2430,10 @@ var logger8 = chunkDSUCH44G_js.createLogger("TransactionValidator"), MAX_TRANSAC
|
|
|
2010
2430
|
return errors.push(
|
|
2011
2431
|
"Transaction type not recognized - must be a Transaction object with serialize() or Uint8Array"
|
|
2012
2432
|
), { valid: false, errors, warnings };
|
|
2013
|
-
serialized && (size = serialized.length, size > maxSize && (errors.push(`Transaction too large: ${size} bytes (max ${maxSize} bytes)`),
|
|
2433
|
+
serialized && (size = serialized.length, size > maxSize && (errors.push(`Transaction too large: ${size} bytes (max ${maxSize} bytes)`), logger10.warn("Transaction exceeds maximum size", { size, maxSize })), size < minSize && warnings.push(`Transaction is very small: ${size} bytes (min recommended ${minSize} bytes)`), size === 0 && errors.push("Transaction is empty (0 bytes)"), this.hasSuspiciousPattern(serialized) && warnings.push("Transaction contains unusual patterns - please review carefully"));
|
|
2014
2434
|
} catch (error) {
|
|
2015
2435
|
let errorMessage = error instanceof Error ? error.message : String(error);
|
|
2016
|
-
errors.push(`Transaction validation failed: ${errorMessage}`),
|
|
2436
|
+
errors.push(`Transaction validation failed: ${errorMessage}`), logger10.error("Validation error", { error: errorMessage });
|
|
2017
2437
|
}
|
|
2018
2438
|
if (checkDuplicateSignatures && typeof transaction == "object" && "signatures" in transaction) {
|
|
2019
2439
|
let signatures = transaction.signatures;
|
|
@@ -2026,7 +2446,7 @@ var logger8 = chunkDSUCH44G_js.createLogger("TransactionValidator"), MAX_TRANSAC
|
|
|
2026
2446
|
}
|
|
2027
2447
|
strict && warnings.length > 0 && (errors.push(...warnings.map((w) => `Strict mode: ${w}`)), warnings.length = 0);
|
|
2028
2448
|
let valid = errors.length === 0;
|
|
2029
|
-
return valid ? warnings.length > 0 ?
|
|
2449
|
+
return valid ? warnings.length > 0 ? logger10.debug("Transaction validation passed with warnings", { warnings, size }) : logger10.debug("Transaction validation passed", { size }) : logger10.warn("Transaction validation failed", { errors, size }), {
|
|
2030
2450
|
valid,
|
|
2031
2451
|
errors,
|
|
2032
2452
|
warnings,
|
|
@@ -2066,7 +2486,7 @@ var logger8 = chunkDSUCH44G_js.createLogger("TransactionValidator"), MAX_TRANSAC
|
|
|
2066
2486
|
let result = this.validate(transaction, options);
|
|
2067
2487
|
if (!result.valid)
|
|
2068
2488
|
throw new Error(`Transaction validation failed: ${result.errors.join(", ")}`);
|
|
2069
|
-
result.warnings.length > 0 &&
|
|
2489
|
+
result.warnings.length > 0 && logger10.warn("Transaction validation warnings", { warnings: result.warnings });
|
|
2070
2490
|
}
|
|
2071
2491
|
/**
|
|
2072
2492
|
* Batch validate multiple transactions
|
|
@@ -2077,12 +2497,31 @@ var logger8 = chunkDSUCH44G_js.createLogger("TransactionValidator"), MAX_TRANSAC
|
|
|
2077
2497
|
* @returns Array of validation results
|
|
2078
2498
|
*/
|
|
2079
2499
|
static validateBatch(transactions, options) {
|
|
2080
|
-
return transactions.map((tx, index) => (
|
|
2500
|
+
return transactions.map((tx, index) => (logger10.debug(`Validating transaction ${index + 1}/${transactions.length}`), this.validate(tx, options)));
|
|
2081
2501
|
}
|
|
2082
2502
|
};
|
|
2083
|
-
|
|
2084
|
-
|
|
2085
|
-
|
|
2503
|
+
var logger11 = chunk64LV76OK_js.createLogger("TransactionSigner");
|
|
2504
|
+
function signatureBytesToBase58(bytes) {
|
|
2505
|
+
if (bytes.length !== 64)
|
|
2506
|
+
throw new Error(`Invalid signature length: expected 64 bytes, got ${bytes.length}`);
|
|
2507
|
+
return codecs.getBase58Decoder().decode(bytes);
|
|
2508
|
+
}
|
|
2509
|
+
function extractSignatureString(result) {
|
|
2510
|
+
if (typeof result == "string")
|
|
2511
|
+
return result;
|
|
2512
|
+
if (result instanceof Uint8Array)
|
|
2513
|
+
return signatureBytesToBase58(result);
|
|
2514
|
+
if (Array.isArray(result) && result.length > 0)
|
|
2515
|
+
return extractSignatureString(result[0]);
|
|
2516
|
+
if (result && typeof result == "object") {
|
|
2517
|
+
let record = result;
|
|
2518
|
+
if ("signature" in record)
|
|
2519
|
+
return extractSignatureString(record.signature);
|
|
2520
|
+
if (Array.isArray(record.signatures) && record.signatures.length > 0)
|
|
2521
|
+
return extractSignatureString(record.signatures[0]);
|
|
2522
|
+
}
|
|
2523
|
+
throw new Error("Unexpected wallet response format for signAndSendTransaction");
|
|
2524
|
+
}
|
|
2086
2525
|
function createTransactionSigner(config) {
|
|
2087
2526
|
let { wallet, account, cluster, eventEmitter } = config;
|
|
2088
2527
|
if (!wallet || !account)
|
|
@@ -2096,14 +2535,14 @@ function createTransactionSigner(config) {
|
|
|
2096
2535
|
address,
|
|
2097
2536
|
async signTransaction(transaction) {
|
|
2098
2537
|
if (!capabilities.canSign)
|
|
2099
|
-
throw
|
|
2538
|
+
throw chunk64LV76OK_js.Errors.featureNotSupported("transaction signing");
|
|
2100
2539
|
let validation = TransactionValidator.validate(transaction);
|
|
2101
2540
|
if (!validation.valid)
|
|
2102
|
-
throw
|
|
2103
|
-
validation.warnings.length > 0 &&
|
|
2541
|
+
throw logger11.error("Transaction validation failed", { errors: validation.errors }), chunk64LV76OK_js.Errors.invalidTransaction(validation.errors.join(", "));
|
|
2542
|
+
validation.warnings.length > 0 && logger11.warn("Transaction validation warnings", { warnings: validation.warnings });
|
|
2104
2543
|
try {
|
|
2105
|
-
let signFeature = features["solana:signTransaction"], { serialized, wasWeb3js } =
|
|
2106
|
-
|
|
2544
|
+
let signFeature = features["solana:signTransaction"], { serialized, wasWeb3js } = chunk4KD6HQQG_js.prepareTransactionForWallet(transaction);
|
|
2545
|
+
logger11.debug("Signing transaction", {
|
|
2107
2546
|
wasWeb3js,
|
|
2108
2547
|
serializedLength: serialized.length,
|
|
2109
2548
|
serializedType: serialized.constructor.name,
|
|
@@ -2112,26 +2551,26 @@ function createTransactionSigner(config) {
|
|
|
2112
2551
|
});
|
|
2113
2552
|
let result, usedFormat = "";
|
|
2114
2553
|
try {
|
|
2115
|
-
|
|
2554
|
+
logger11.debug("Trying array format: transactions: [Uint8Array]"), result = await signFeature.signTransaction({
|
|
2116
2555
|
account,
|
|
2117
2556
|
transactions: [serialized],
|
|
2118
2557
|
...cluster ? { chain: cluster.id } : {}
|
|
2119
2558
|
}), usedFormat = "array";
|
|
2120
2559
|
} catch (err1) {
|
|
2121
2560
|
let error1 = err1 instanceof Error ? err1 : new Error(String(err1));
|
|
2122
|
-
|
|
2561
|
+
logger11.debug("Array format failed, trying singular format", { error: error1.message });
|
|
2123
2562
|
try {
|
|
2124
|
-
|
|
2563
|
+
logger11.debug("Trying singular format: transaction: Uint8Array"), result = await signFeature.signTransaction({
|
|
2125
2564
|
account,
|
|
2126
2565
|
transaction: serialized,
|
|
2127
2566
|
...cluster ? { chain: cluster.id } : {}
|
|
2128
2567
|
}), usedFormat = "singular";
|
|
2129
2568
|
} catch (err2) {
|
|
2130
2569
|
let error2 = err2 instanceof Error ? err2 : new Error(String(err2));
|
|
2131
|
-
throw
|
|
2570
|
+
throw logger11.error("Both array and singular formats failed", { error: error2.message }), error2;
|
|
2132
2571
|
}
|
|
2133
2572
|
}
|
|
2134
|
-
|
|
2573
|
+
logger11.debug("Wallet signed successfully", { format: usedFormat });
|
|
2135
2574
|
let signedTx;
|
|
2136
2575
|
if (Array.isArray(result.signedTransactions) && result.signedTransactions[0])
|
|
2137
2576
|
signedTx = result.signedTransactions[0];
|
|
@@ -2143,31 +2582,31 @@ function createTransactionSigner(config) {
|
|
|
2143
2582
|
signedTx = result;
|
|
2144
2583
|
else
|
|
2145
2584
|
throw new Error(`Unexpected wallet response format: ${JSON.stringify(Object.keys(result))}`);
|
|
2146
|
-
if (
|
|
2585
|
+
if (logger11.debug("Extracted signed transaction", {
|
|
2147
2586
|
hasSignedTx: !!signedTx,
|
|
2148
2587
|
signedTxType: signedTx?.constructor?.name,
|
|
2149
2588
|
signedTxLength: signedTx?.length,
|
|
2150
2589
|
isUint8Array: signedTx instanceof Uint8Array,
|
|
2151
2590
|
hasSerialize: typeof signedTx?.serialize == "function"
|
|
2152
2591
|
}), signedTx && typeof signedTx.serialize == "function")
|
|
2153
|
-
return
|
|
2592
|
+
return logger11.debug("Wallet returned web3.js object directly, no conversion needed"), signedTx;
|
|
2154
2593
|
if (signedTx && signedTx.signedTransaction) {
|
|
2155
|
-
|
|
2594
|
+
logger11.debug("Found signedTransaction property");
|
|
2156
2595
|
let bytes = signedTx.signedTransaction;
|
|
2157
2596
|
if (bytes instanceof Uint8Array)
|
|
2158
|
-
return await
|
|
2597
|
+
return await chunk4KD6HQQG_js.convertSignedTransaction(bytes, wasWeb3js);
|
|
2159
2598
|
}
|
|
2160
2599
|
if (signedTx instanceof Uint8Array)
|
|
2161
|
-
return await
|
|
2162
|
-
throw
|
|
2600
|
+
return await chunk4KD6HQQG_js.convertSignedTransaction(signedTx, wasWeb3js);
|
|
2601
|
+
throw logger11.error("Unexpected wallet response format", {
|
|
2163
2602
|
type: typeof signedTx,
|
|
2164
2603
|
constructor: signedTx?.constructor?.name
|
|
2165
|
-
}), new
|
|
2604
|
+
}), new chunk64LV76OK_js.ValidationError(
|
|
2166
2605
|
"INVALID_FORMAT",
|
|
2167
2606
|
"Wallet returned unexpected format - not a Transaction or Uint8Array"
|
|
2168
2607
|
);
|
|
2169
2608
|
} catch (error) {
|
|
2170
|
-
throw
|
|
2609
|
+
throw chunk64LV76OK_js.Errors.signingFailed(error);
|
|
2171
2610
|
}
|
|
2172
2611
|
},
|
|
2173
2612
|
async signAllTransactions(transactions) {
|
|
@@ -2175,18 +2614,24 @@ function createTransactionSigner(config) {
|
|
|
2175
2614
|
return [];
|
|
2176
2615
|
if (capabilities.supportsBatchSigning)
|
|
2177
2616
|
try {
|
|
2178
|
-
let signFeature = features["solana:signAllTransactions"], prepared = transactions.map((tx) =>
|
|
2617
|
+
let signFeature = features["solana:signAllTransactions"], prepared = transactions.map((tx) => chunk4KD6HQQG_js.prepareTransactionForWallet(tx)), serializedTxs = prepared.map((p) => p.serialized), wasWeb3js = prepared[0].wasWeb3js, result = await signFeature.signAllTransactions({
|
|
2179
2618
|
account,
|
|
2180
2619
|
transactions: serializedTxs,
|
|
2181
2620
|
...cluster ? { chain: cluster.id } : {}
|
|
2182
|
-
});
|
|
2621
|
+
}), signedBytesArray;
|
|
2622
|
+
if (Array.isArray(result))
|
|
2623
|
+
signedBytesArray = result.map((item) => item.signedTransaction);
|
|
2624
|
+
else if ("signedTransactions" in result)
|
|
2625
|
+
signedBytesArray = result.signedTransactions;
|
|
2626
|
+
else
|
|
2627
|
+
throw new Error("Unexpected signAllTransactions response format");
|
|
2183
2628
|
return await Promise.all(
|
|
2184
|
-
|
|
2185
|
-
(signedBytes) =>
|
|
2629
|
+
signedBytesArray.map(
|
|
2630
|
+
(signedBytes) => chunk4KD6HQQG_js.convertSignedTransaction(signedBytes, wasWeb3js)
|
|
2186
2631
|
)
|
|
2187
2632
|
);
|
|
2188
2633
|
} catch (error) {
|
|
2189
|
-
throw new
|
|
2634
|
+
throw new chunk64LV76OK_js.TransactionError(
|
|
2190
2635
|
"SIGNING_FAILED",
|
|
2191
2636
|
"Failed to sign transactions in batch",
|
|
2192
2637
|
{ count: transactions.length },
|
|
@@ -2194,14 +2639,14 @@ function createTransactionSigner(config) {
|
|
|
2194
2639
|
);
|
|
2195
2640
|
}
|
|
2196
2641
|
if (!capabilities.canSign)
|
|
2197
|
-
throw
|
|
2642
|
+
throw chunk64LV76OK_js.Errors.featureNotSupported("transaction signing");
|
|
2198
2643
|
let signed = [];
|
|
2199
2644
|
for (let i = 0; i < transactions.length; i++)
|
|
2200
2645
|
try {
|
|
2201
2646
|
let signedTx = await signer.signTransaction(transactions[i]);
|
|
2202
2647
|
signed.push(signedTx);
|
|
2203
2648
|
} catch (error) {
|
|
2204
|
-
throw new
|
|
2649
|
+
throw new chunk64LV76OK_js.TransactionError(
|
|
2205
2650
|
"SIGNING_FAILED",
|
|
2206
2651
|
`Failed to sign transaction ${i + 1} of ${transactions.length}`,
|
|
2207
2652
|
{ index: i, total: transactions.length },
|
|
@@ -2212,9 +2657,9 @@ function createTransactionSigner(config) {
|
|
|
2212
2657
|
},
|
|
2213
2658
|
async signAndSendTransaction(transaction, options) {
|
|
2214
2659
|
if (!capabilities.canSend)
|
|
2215
|
-
throw
|
|
2660
|
+
throw chunk64LV76OK_js.Errors.featureNotSupported("sending transactions");
|
|
2216
2661
|
try {
|
|
2217
|
-
let sendFeature = features["solana:signAndSendTransaction"], { serialized } =
|
|
2662
|
+
let sendFeature = features["solana:signAndSendTransaction"], { serialized } = chunk4KD6HQQG_js.prepareTransactionForWallet(transaction);
|
|
2218
2663
|
eventEmitter && eventEmitter.emit({
|
|
2219
2664
|
type: "transaction:preparing",
|
|
2220
2665
|
transaction: serialized,
|
|
@@ -2242,28 +2687,28 @@ function createTransactionSigner(config) {
|
|
|
2242
2687
|
transaction: serialized
|
|
2243
2688
|
});
|
|
2244
2689
|
}
|
|
2245
|
-
let signature =
|
|
2690
|
+
let signature = extractSignatureString(result);
|
|
2246
2691
|
return eventEmitter && eventEmitter.emit({
|
|
2247
2692
|
type: "transaction:sent",
|
|
2248
2693
|
signature,
|
|
2249
2694
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
2250
2695
|
}), signature;
|
|
2251
2696
|
} catch (error) {
|
|
2252
|
-
throw new
|
|
2697
|
+
throw new chunk64LV76OK_js.TransactionError("SEND_FAILED", "Failed to send transaction", void 0, error);
|
|
2253
2698
|
}
|
|
2254
2699
|
},
|
|
2255
2700
|
async signAndSendTransactions(transactions, options) {
|
|
2256
2701
|
if (transactions.length === 0)
|
|
2257
2702
|
return [];
|
|
2258
2703
|
if (!capabilities.canSend)
|
|
2259
|
-
throw
|
|
2704
|
+
throw chunk64LV76OK_js.Errors.featureNotSupported("sending transactions");
|
|
2260
2705
|
let signatures = [];
|
|
2261
2706
|
for (let i = 0; i < transactions.length; i++)
|
|
2262
2707
|
try {
|
|
2263
2708
|
let sig = await signer.signAndSendTransaction(transactions[i], options);
|
|
2264
2709
|
signatures.push(sig);
|
|
2265
2710
|
} catch (error) {
|
|
2266
|
-
throw new
|
|
2711
|
+
throw new chunk64LV76OK_js.TransactionError(
|
|
2267
2712
|
"SEND_FAILED",
|
|
2268
2713
|
`Failed to send transaction ${i + 1} of ${transactions.length}`,
|
|
2269
2714
|
{ index: i, total: transactions.length },
|
|
@@ -2281,7 +2726,7 @@ function createTransactionSigner(config) {
|
|
|
2281
2726
|
...cluster ? { chain: cluster.id } : {}
|
|
2282
2727
|
})).signature;
|
|
2283
2728
|
} catch (error) {
|
|
2284
|
-
throw new
|
|
2729
|
+
throw new chunk64LV76OK_js.TransactionError("SIGNING_FAILED", "Failed to sign message", void 0, error);
|
|
2285
2730
|
}
|
|
2286
2731
|
}
|
|
2287
2732
|
},
|
|
@@ -2291,16 +2736,16 @@ function createTransactionSigner(config) {
|
|
|
2291
2736
|
};
|
|
2292
2737
|
return signer;
|
|
2293
2738
|
}
|
|
2294
|
-
var TransactionSignerError = class extends
|
|
2739
|
+
var TransactionSignerError = class extends chunk64LV76OK_js.TransactionError {
|
|
2295
2740
|
constructor(message, code, originalError) {
|
|
2296
2741
|
let newCode = code === "WALLET_NOT_CONNECTED" ? "FEATURE_NOT_SUPPORTED" : code;
|
|
2297
2742
|
super(newCode, message, void 0, originalError), this.name = "TransactionSignerError";
|
|
2298
2743
|
}
|
|
2299
2744
|
};
|
|
2300
2745
|
function isTransactionSignerError(error) {
|
|
2301
|
-
return error instanceof TransactionSignerError || error instanceof
|
|
2746
|
+
return error instanceof TransactionSignerError || error instanceof chunk64LV76OK_js.TransactionError;
|
|
2302
2747
|
}
|
|
2303
|
-
var
|
|
2748
|
+
var logger12 = chunk64LV76OK_js.createLogger("KitTransactionSigner");
|
|
2304
2749
|
function encodeShortVecLength(value) {
|
|
2305
2750
|
let bytes = [], remaining = value;
|
|
2306
2751
|
for (; remaining >= 128; )
|
|
@@ -2320,6 +2765,29 @@ function decodeShortVecLength(data) {
|
|
|
2320
2765
|
}
|
|
2321
2766
|
return { length, bytesConsumed: size };
|
|
2322
2767
|
}
|
|
2768
|
+
function parseMessageSigners(messageBytes) {
|
|
2769
|
+
let offset = 0;
|
|
2770
|
+
if (messageBytes.length < 4)
|
|
2771
|
+
throw new Error("Invalid message: too short for header");
|
|
2772
|
+
if (messageBytes[0] === 128 && (offset = 1), offset + 3 > messageBytes.length)
|
|
2773
|
+
throw new Error("Invalid message: incomplete header");
|
|
2774
|
+
let numSignerAccounts = messageBytes[offset];
|
|
2775
|
+
if (offset += 3, offset >= messageBytes.length)
|
|
2776
|
+
throw new Error("Invalid message: no static accounts section");
|
|
2777
|
+
let { length: numStaticAccounts, bytesConsumed } = decodeShortVecLength(messageBytes.subarray(offset));
|
|
2778
|
+
offset += bytesConsumed;
|
|
2779
|
+
let staticAccounts = [], base58Decoder = codecs.getBase58Decoder();
|
|
2780
|
+
for (let i = 0; i < numStaticAccounts && i < numSignerAccounts; i++) {
|
|
2781
|
+
if (offset + 32 > messageBytes.length)
|
|
2782
|
+
throw new Error(`Invalid message: incomplete account ${i}`);
|
|
2783
|
+
let accountBytes = messageBytes.subarray(offset, offset + 32), accountAddress = base58Decoder.decode(accountBytes);
|
|
2784
|
+
staticAccounts.push(accountAddress), offset += 32;
|
|
2785
|
+
}
|
|
2786
|
+
return {
|
|
2787
|
+
numSigners: numSignerAccounts,
|
|
2788
|
+
staticAccounts
|
|
2789
|
+
};
|
|
2790
|
+
}
|
|
2323
2791
|
function createTransactionBytesForSigning(messageBytes, numSigners) {
|
|
2324
2792
|
let numSignaturesBytes = encodeShortVecLength(numSigners), signatureSlots = new Uint8Array(numSigners * 64), totalLength = numSignaturesBytes.length + signatureSlots.length + messageBytes.length, transactionBytes = new Uint8Array(totalLength), offset = 0;
|
|
2325
2793
|
return transactionBytes.set(numSignaturesBytes, offset), offset += numSignaturesBytes.length, transactionBytes.set(signatureSlots, offset), offset += signatureSlots.length, transactionBytes.set(messageBytes, offset), transactionBytes;
|
|
@@ -2332,7 +2800,7 @@ function extractSignature(signedTx) {
|
|
|
2332
2800
|
let signatureStart = bytesConsumed;
|
|
2333
2801
|
return signedTx.slice(signatureStart, signatureStart + 64);
|
|
2334
2802
|
}
|
|
2335
|
-
if (
|
|
2803
|
+
if (chunk4KD6HQQG_js.isWeb3jsTransaction(signedTx)) {
|
|
2336
2804
|
let signatures = signedTx.signatures;
|
|
2337
2805
|
if (!signatures || signatures.length === 0)
|
|
2338
2806
|
throw new Error("No signatures found in web3.js transaction");
|
|
@@ -2351,8 +2819,8 @@ function createKitTransactionSigner(connectorSigner) {
|
|
|
2351
2819
|
address: signerAddress,
|
|
2352
2820
|
async modifyAndSignTransactions(transactions$1) {
|
|
2353
2821
|
let transactionData = transactions$1.map((tx) => {
|
|
2354
|
-
let messageBytes = new Uint8Array(tx.messageBytes), numSigners =
|
|
2355
|
-
return
|
|
2822
|
+
let messageBytes = new Uint8Array(tx.messageBytes), { numSigners } = parseMessageSigners(messageBytes), wireFormat = createTransactionBytesForSigning(messageBytes, numSigners);
|
|
2823
|
+
return logger12.debug("Preparing wire format for wallet", {
|
|
2356
2824
|
signerAddress,
|
|
2357
2825
|
messageBytesLength: messageBytes.length,
|
|
2358
2826
|
wireFormatLength: wireFormat.length,
|
|
@@ -2373,7 +2841,7 @@ function createKitTransactionSigner(connectorSigner) {
|
|
|
2373
2841
|
let signedTxBytes;
|
|
2374
2842
|
if (signedTx instanceof Uint8Array)
|
|
2375
2843
|
signedTxBytes = signedTx;
|
|
2376
|
-
else if (
|
|
2844
|
+
else if (chunk4KD6HQQG_js.isWeb3jsTransaction(signedTx)) {
|
|
2377
2845
|
let txObj = signedTx;
|
|
2378
2846
|
if (typeof txObj.serialize == "function")
|
|
2379
2847
|
signedTxBytes = txObj.serialize();
|
|
@@ -2381,14 +2849,14 @@ function createKitTransactionSigner(connectorSigner) {
|
|
|
2381
2849
|
throw new Error("Web3.js transaction without serialize method");
|
|
2382
2850
|
} else
|
|
2383
2851
|
throw new Error("Unknown signed transaction format");
|
|
2384
|
-
if (
|
|
2852
|
+
if (logger12.debug("Wallet returned signed transaction", {
|
|
2385
2853
|
returnedLength: signedTxBytes.length,
|
|
2386
2854
|
sentLength: wireFormat.length,
|
|
2387
2855
|
lengthsMatch: signedTxBytes.length === wireFormat.length,
|
|
2388
2856
|
signedFirstBytes: Array.from(signedTxBytes.slice(0, 20)),
|
|
2389
2857
|
sentFirstBytes: Array.from(wireFormat.slice(0, 20))
|
|
2390
2858
|
}), signedTxBytes.length !== wireFormat.length) {
|
|
2391
|
-
|
|
2859
|
+
logger12.warn("Wallet modified transaction! Using wallet version", {
|
|
2392
2860
|
originalLength: wireFormat.length,
|
|
2393
2861
|
modifiedLength: signedTxBytes.length,
|
|
2394
2862
|
difference: signedTxBytes.length - wireFormat.length
|
|
@@ -2399,13 +2867,13 @@ function createKitTransactionSigner(connectorSigner) {
|
|
|
2399
2867
|
lifetimeConstraint: originalWithLifetime.lifetimeConstraint
|
|
2400
2868
|
} : {}
|
|
2401
2869
|
};
|
|
2402
|
-
return
|
|
2870
|
+
return logger12.debug("Using modified transaction from wallet", {
|
|
2403
2871
|
modifiedMessageBytesLength: walletTransaction.messageBytes.length,
|
|
2404
2872
|
signatures: Object.keys(walletTransaction.signatures)
|
|
2405
2873
|
}), transactions.assertIsTransactionWithinSizeLimit(result), result;
|
|
2406
2874
|
}
|
|
2407
2875
|
let extractedSignatureBytes = extractSignature(signedTxBytes), signatureBase58 = codecs.getBase58Decoder().decode(extractedSignatureBytes);
|
|
2408
|
-
|
|
2876
|
+
logger12.debug("Extracted signature from wallet (unmodified)", {
|
|
2409
2877
|
signerAddress,
|
|
2410
2878
|
signatureLength: extractedSignatureBytes.length,
|
|
2411
2879
|
signatureBase58
|
|
@@ -2420,7 +2888,7 @@ function createKitTransactionSigner(connectorSigner) {
|
|
|
2420
2888
|
};
|
|
2421
2889
|
return transactions.assertIsTransactionWithinSizeLimit(signedTransaction), signedTransaction;
|
|
2422
2890
|
} catch (error) {
|
|
2423
|
-
return
|
|
2891
|
+
return logger12.error("Failed to decode signed transaction", { error }), transactions.assertIsTransactionWithinSizeLimit(originalTransaction), originalTransaction;
|
|
2424
2892
|
}
|
|
2425
2893
|
});
|
|
2426
2894
|
}
|
|
@@ -2431,13 +2899,17 @@ var createGillTransactionSigner = createKitTransactionSigner;
|
|
|
2431
2899
|
exports.ClipboardErrorType = ClipboardErrorType;
|
|
2432
2900
|
exports.ConnectorClient = ConnectorClient;
|
|
2433
2901
|
exports.ConnectorErrorBoundary = ConnectorErrorBoundary;
|
|
2434
|
-
exports.
|
|
2902
|
+
exports.EnhancedStorage = EnhancedStorage;
|
|
2903
|
+
exports.EnhancedStorageAdapter = EnhancedStorageAdapter;
|
|
2435
2904
|
exports.PUBLIC_RPC_ENDPOINTS = PUBLIC_RPC_ENDPOINTS;
|
|
2436
2905
|
exports.TransactionSignerError = TransactionSignerError;
|
|
2437
2906
|
exports.WalletErrorType = WalletErrorType;
|
|
2438
2907
|
exports.copyAddressToClipboard = copyAddressToClipboard;
|
|
2439
2908
|
exports.copySignatureToClipboard = copySignatureToClipboard;
|
|
2440
2909
|
exports.copyToClipboard = copyToClipboard;
|
|
2910
|
+
exports.createEnhancedStorageAccount = createEnhancedStorageAccount;
|
|
2911
|
+
exports.createEnhancedStorageCluster = createEnhancedStorageCluster;
|
|
2912
|
+
exports.createEnhancedStorageWallet = createEnhancedStorageWallet;
|
|
2441
2913
|
exports.createGillTransactionSigner = createGillTransactionSigner;
|
|
2442
2914
|
exports.createKitTransactionSigner = createKitTransactionSigner;
|
|
2443
2915
|
exports.createTransactionSigner = createTransactionSigner;
|
|
@@ -2457,6 +2929,8 @@ exports.getClusterExplorerUrl = getClusterExplorerUrl;
|
|
|
2457
2929
|
exports.getClusterName = getClusterName;
|
|
2458
2930
|
exports.getClusterRpcUrl = getClusterRpcUrl;
|
|
2459
2931
|
exports.getClusterType = getClusterType;
|
|
2932
|
+
exports.getDefaultConfig = getDefaultConfig;
|
|
2933
|
+
exports.getDefaultMobileConfig = getDefaultMobileConfig;
|
|
2460
2934
|
exports.getDefaultRpcUrl = getDefaultRpcUrl;
|
|
2461
2935
|
exports.getNetworkDisplayName = getNetworkDisplayName;
|
|
2462
2936
|
exports.getPolyfillStatus = getPolyfillStatus;
|
|
@@ -2477,9 +2951,11 @@ exports.isTestnet = isTestnet;
|
|
|
2477
2951
|
exports.isTestnetCluster = isTestnetCluster;
|
|
2478
2952
|
exports.isTransactionSignerError = isTransactionSignerError;
|
|
2479
2953
|
exports.normalizeNetwork = normalizeNetwork;
|
|
2954
|
+
exports.parseConfigOptions = parseConfigOptions;
|
|
2480
2955
|
exports.ready = ready;
|
|
2481
2956
|
exports.toClusterId = toClusterId;
|
|
2482
2957
|
exports.truncate = truncate;
|
|
2958
|
+
exports.validateConfigOptions = validateConfigOptions;
|
|
2483
2959
|
exports.withErrorBoundary = withErrorBoundary;
|
|
2484
|
-
//# sourceMappingURL=chunk-
|
|
2485
|
-
//# sourceMappingURL=chunk-
|
|
2960
|
+
//# sourceMappingURL=chunk-6AJJJG5B.js.map
|
|
2961
|
+
//# sourceMappingURL=chunk-6AJJJG5B.js.map
|