@shadow-corp/nearconnect 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +546 -0
- package/build/InjectedWallet.d.ts +22 -0
- package/build/InjectedWallet.js +58 -0
- package/build/InjectedWallet.js.map +1 -0
- package/build/NearConnector.d.ts +151 -0
- package/build/NearConnector.js +536 -0
- package/build/NearConnector.js.map +1 -0
- package/build/ParentFrameWallet.d.ts +22 -0
- package/build/ParentFrameWallet.js +66 -0
- package/build/ParentFrameWallet.js.map +1 -0
- package/build/SandboxedWallet/code.d.ts +7 -0
- package/build/SandboxedWallet/code.js +324 -0
- package/build/SandboxedWallet/code.js.map +1 -0
- package/build/SandboxedWallet/executor.d.ts +23 -0
- package/build/SandboxedWallet/executor.js +338 -0
- package/build/SandboxedWallet/executor.js.map +1 -0
- package/build/SandboxedWallet/iframe.d.ts +18 -0
- package/build/SandboxedWallet/iframe.js +78 -0
- package/build/SandboxedWallet/iframe.js.map +1 -0
- package/build/SandboxedWallet/index.d.ts +24 -0
- package/build/SandboxedWallet/index.js +54 -0
- package/build/SandboxedWallet/index.js.map +1 -0
- package/build/actions/index.d.ts +3 -0
- package/build/actions/index.js +105 -0
- package/build/actions/index.js.map +1 -0
- package/build/actions/types.d.ts +76 -0
- package/build/actions/types.js +3 -0
- package/build/actions/types.js.map +1 -0
- package/build/connection/health.d.ts +213 -0
- package/build/connection/health.js +391 -0
- package/build/connection/health.js.map +1 -0
- package/build/connection/index.d.ts +4 -0
- package/build/connection/index.js +48 -0
- package/build/connection/index.js.map +1 -0
- package/build/connection/reconnect.d.ts +261 -0
- package/build/connection/reconnect.js +454 -0
- package/build/connection/reconnect.js.map +1 -0
- package/build/connection/retry.d.ts +187 -0
- package/build/connection/retry.js +427 -0
- package/build/connection/retry.js.map +1 -0
- package/build/connection/state.d.ts +222 -0
- package/build/connection/state.js +431 -0
- package/build/connection/state.js.map +1 -0
- package/build/errors.d.ts +177 -0
- package/build/errors.js +546 -0
- package/build/errors.js.map +1 -0
- package/build/hardware/errors.d.ts +36 -0
- package/build/hardware/errors.js +127 -0
- package/build/hardware/errors.js.map +1 -0
- package/build/hardware/index.d.ts +7 -0
- package/build/hardware/index.js +39 -0
- package/build/hardware/index.js.map +1 -0
- package/build/hardware/near-app.d.ts +95 -0
- package/build/hardware/near-app.js +291 -0
- package/build/hardware/near-app.js.map +1 -0
- package/build/hardware/transport.d.ts +94 -0
- package/build/hardware/transport.js +267 -0
- package/build/hardware/transport.js.map +1 -0
- package/build/hardware/types.d.ts +98 -0
- package/build/hardware/types.js +72 -0
- package/build/hardware/types.js.map +1 -0
- package/build/helpers/analytics.d.ts +191 -0
- package/build/helpers/analytics.js +304 -0
- package/build/helpers/analytics.js.map +1 -0
- package/build/helpers/base58.d.ts +6 -0
- package/build/helpers/base58.js +47 -0
- package/build/helpers/base58.js.map +1 -0
- package/build/helpers/events.d.ts +42 -0
- package/build/helpers/events.js +68 -0
- package/build/helpers/events.js.map +1 -0
- package/build/helpers/html.d.ts +8 -0
- package/build/helpers/html.js +30 -0
- package/build/helpers/html.js.map +1 -0
- package/build/helpers/indexdb.d.ts +14 -0
- package/build/helpers/indexdb.js +166 -0
- package/build/helpers/indexdb.js.map +1 -0
- package/build/helpers/manifest.d.ts +147 -0
- package/build/helpers/manifest.js +329 -0
- package/build/helpers/manifest.js.map +1 -0
- package/build/helpers/queue.d.ts +11 -0
- package/build/helpers/queue.js +48 -0
- package/build/helpers/queue.js.map +1 -0
- package/build/helpers/session.d.ts +119 -0
- package/build/helpers/session.js +289 -0
- package/build/helpers/session.js.map +1 -0
- package/build/helpers/simulation.d.ts +128 -0
- package/build/helpers/simulation.js +441 -0
- package/build/helpers/simulation.js.map +1 -0
- package/build/helpers/storage.d.ts +58 -0
- package/build/helpers/storage.js +190 -0
- package/build/helpers/storage.js.map +1 -0
- package/build/helpers/trust.d.ts +157 -0
- package/build/helpers/trust.js +340 -0
- package/build/helpers/trust.js.map +1 -0
- package/build/helpers/url.d.ts +1 -0
- package/build/helpers/url.js +13 -0
- package/build/helpers/url.js.map +1 -0
- package/build/helpers/uuid.d.ts +1 -0
- package/build/helpers/uuid.js +14 -0
- package/build/helpers/uuid.js.map +1 -0
- package/build/index.d.ts +21 -0
- package/build/index.js +167 -0
- package/build/index.js.map +1 -0
- package/build/popups/IframeWalletPopup.d.ts +16 -0
- package/build/popups/IframeWalletPopup.js +38 -0
- package/build/popups/IframeWalletPopup.js.map +1 -0
- package/build/popups/NearWalletsPopup.d.ts +25 -0
- package/build/popups/NearWalletsPopup.js +153 -0
- package/build/popups/NearWalletsPopup.js.map +1 -0
- package/build/popups/Popup.d.ts +22 -0
- package/build/popups/Popup.js +94 -0
- package/build/popups/Popup.js.map +1 -0
- package/build/popups/styles.d.ts +1 -0
- package/build/popups/styles.js +257 -0
- package/build/popups/styles.js.map +1 -0
- package/build/security/audit-log.d.ts +123 -0
- package/build/security/audit-log.js +268 -0
- package/build/security/audit-log.js.map +1 -0
- package/build/security/csp.d.ts +68 -0
- package/build/security/csp.js +328 -0
- package/build/security/csp.js.map +1 -0
- package/build/security/index.d.ts +10 -0
- package/build/security/index.js +42 -0
- package/build/security/index.js.map +1 -0
- package/build/security/origin-guard.d.ts +90 -0
- package/build/security/origin-guard.js +244 -0
- package/build/security/origin-guard.js.map +1 -0
- package/build/security/rate-limiter.d.ts +84 -0
- package/build/security/rate-limiter.js +212 -0
- package/build/security/rate-limiter.js.map +1 -0
- package/build/security/secure-storage.d.ts +77 -0
- package/build/security/secure-storage.js +242 -0
- package/build/security/secure-storage.js.map +1 -0
- package/build/security/transaction-guard.d.ts +71 -0
- package/build/security/transaction-guard.js +239 -0
- package/build/security/transaction-guard.js.map +1 -0
- package/build/types.d.ts +508 -0
- package/build/types.js +3 -0
- package/build/types.js.map +1 -0
- package/build/ui/AccountSwitcherModal.d.ts +53 -0
- package/build/ui/AccountSwitcherModal.js +239 -0
- package/build/ui/AccountSwitcherModal.js.map +1 -0
- package/build/ui/Modal.d.ts +84 -0
- package/build/ui/Modal.js +278 -0
- package/build/ui/Modal.js.map +1 -0
- package/build/ui/TransactionModal.d.ts +84 -0
- package/build/ui/TransactionModal.js +406 -0
- package/build/ui/TransactionModal.js.map +1 -0
- package/build/ui/WalletSelectorModal.d.ts +97 -0
- package/build/ui/WalletSelectorModal.js +481 -0
- package/build/ui/WalletSelectorModal.js.map +1 -0
- package/build/ui/icons.d.ts +19 -0
- package/build/ui/icons.js +65 -0
- package/build/ui/icons.js.map +1 -0
- package/build/ui/index.d.ts +10 -0
- package/build/ui/index.js +31 -0
- package/build/ui/index.js.map +1 -0
- package/build/ui/styles.d.ts +5 -0
- package/build/ui/styles.js +973 -0
- package/build/ui/styles.js.map +1 -0
- package/build/ui/theme.d.ts +133 -0
- package/build/ui/theme.js +204 -0
- package/build/ui/theme.js.map +1 -0
- package/build/wallets/external/index.d.ts +4 -0
- package/build/wallets/external/index.js +9 -0
- package/build/wallets/external/index.js.map +1 -0
- package/build/wallets/external/manager.d.ts +152 -0
- package/build/wallets/external/manager.js +586 -0
- package/build/wallets/external/manager.js.map +1 -0
- package/build/wallets/privileged/index.d.ts +5 -0
- package/build/wallets/privileged/index.js +12 -0
- package/build/wallets/privileged/index.js.map +1 -0
- package/build/wallets/privileged/ledger.d.ts +132 -0
- package/build/wallets/privileged/ledger.js +563 -0
- package/build/wallets/privileged/ledger.js.map +1 -0
- package/build/wallets/privileged/manager.d.ts +54 -0
- package/build/wallets/privileged/manager.js +174 -0
- package/build/wallets/privileged/manager.js.map +1 -0
- package/package.json +33 -0
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConnectionStateMachine = exports.DEFAULT_STATE_MACHINE_CONFIG = void 0;
|
|
4
|
+
exports.createStateMachine = createStateMachine;
|
|
5
|
+
exports.getStatusDescription = getStatusDescription;
|
|
6
|
+
const errors_1 = require("../errors");
|
|
7
|
+
/**
|
|
8
|
+
* Valid state transitions
|
|
9
|
+
*/
|
|
10
|
+
const VALID_TRANSITIONS = {
|
|
11
|
+
idle: ["detecting", "connecting"],
|
|
12
|
+
detecting: ["connecting", "error", "idle"],
|
|
13
|
+
connecting: ["authenticating", "connected", "error", "idle"],
|
|
14
|
+
authenticating: ["connected", "error", "idle"],
|
|
15
|
+
connected: ["signing", "disconnecting", "reconnecting", "error"],
|
|
16
|
+
signing: ["connected", "error"],
|
|
17
|
+
reconnecting: ["connected", "error", "idle"],
|
|
18
|
+
disconnecting: ["idle", "error"],
|
|
19
|
+
error: ["idle", "connecting", "reconnecting"],
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Default state machine configuration
|
|
23
|
+
*/
|
|
24
|
+
exports.DEFAULT_STATE_MACHINE_CONFIG = {
|
|
25
|
+
maxHistorySize: 50,
|
|
26
|
+
persistState: false,
|
|
27
|
+
storageKey: "near-connect:state",
|
|
28
|
+
stateExpiration: 24 * 60 * 60 * 1000, // 24 hours
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Connection State Machine
|
|
32
|
+
*
|
|
33
|
+
* Manages connection lifecycle with proper state transitions
|
|
34
|
+
*/
|
|
35
|
+
class ConnectionStateMachine {
|
|
36
|
+
state = { status: "idle" };
|
|
37
|
+
history = [];
|
|
38
|
+
config;
|
|
39
|
+
listeners = {
|
|
40
|
+
enter: new Map(),
|
|
41
|
+
exit: new Map(),
|
|
42
|
+
transition: new Set(),
|
|
43
|
+
};
|
|
44
|
+
constructor(config = {}) {
|
|
45
|
+
this.config = { ...exports.DEFAULT_STATE_MACHINE_CONFIG, ...config };
|
|
46
|
+
this.restoreState();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get current state
|
|
50
|
+
*/
|
|
51
|
+
get current() {
|
|
52
|
+
return this.state;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get current status (convenience getter)
|
|
56
|
+
*/
|
|
57
|
+
get status() {
|
|
58
|
+
return this.state.status;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Check if currently in a specific status
|
|
62
|
+
*/
|
|
63
|
+
is(status) {
|
|
64
|
+
return this.state.status === status;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Check if in any of the given statuses
|
|
68
|
+
*/
|
|
69
|
+
isAnyOf(...statuses) {
|
|
70
|
+
return statuses.includes(this.state.status);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Check if a transition is valid
|
|
74
|
+
*/
|
|
75
|
+
canTransition(to) {
|
|
76
|
+
return VALID_TRANSITIONS[this.state.status]?.includes(to) ?? false;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Transition to a new state
|
|
80
|
+
*/
|
|
81
|
+
transition(to, reason) {
|
|
82
|
+
const from = this.state;
|
|
83
|
+
// Validate transition
|
|
84
|
+
if (!this.canTransition(to.status)) {
|
|
85
|
+
this.config.onInvalidTransition?.(from.status, to.status);
|
|
86
|
+
throw new errors_1.WalletError({
|
|
87
|
+
code: errors_1.ErrorCode.UNKNOWN_ERROR,
|
|
88
|
+
message: `Invalid state transition from ${from.status} to ${to.status}`,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
// Exit callbacks for old state
|
|
92
|
+
const exitListeners = this.listeners.exit.get(from.status);
|
|
93
|
+
if (exitListeners) {
|
|
94
|
+
for (const listener of exitListeners) {
|
|
95
|
+
try {
|
|
96
|
+
listener(from);
|
|
97
|
+
}
|
|
98
|
+
catch (e) {
|
|
99
|
+
console.error("Error in exit listener:", e);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Update state
|
|
104
|
+
this.state = to;
|
|
105
|
+
// Record history
|
|
106
|
+
this.recordHistory(from, to, reason);
|
|
107
|
+
// Enter callbacks for new state
|
|
108
|
+
const enterListeners = this.listeners.enter.get(to.status);
|
|
109
|
+
if (enterListeners) {
|
|
110
|
+
for (const listener of enterListeners) {
|
|
111
|
+
try {
|
|
112
|
+
listener(to);
|
|
113
|
+
}
|
|
114
|
+
catch (e) {
|
|
115
|
+
console.error("Error in enter listener:", e);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// Transition callbacks
|
|
120
|
+
for (const listener of this.listeners.transition) {
|
|
121
|
+
try {
|
|
122
|
+
listener(from, to);
|
|
123
|
+
}
|
|
124
|
+
catch (e) {
|
|
125
|
+
console.error("Error in transition listener:", e);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// Config callback
|
|
129
|
+
this.config.onStateChange?.(from, to);
|
|
130
|
+
// Persist state
|
|
131
|
+
if (this.config.persistState) {
|
|
132
|
+
this.persistState();
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Convenience methods for common transitions
|
|
137
|
+
*/
|
|
138
|
+
toDetecting(walletId) {
|
|
139
|
+
this.transition({ status: "detecting", walletId, startedAt: Date.now() });
|
|
140
|
+
}
|
|
141
|
+
toConnecting(walletId) {
|
|
142
|
+
this.transition({ status: "connecting", walletId, startedAt: Date.now() });
|
|
143
|
+
}
|
|
144
|
+
toAuthenticating(walletId) {
|
|
145
|
+
this.transition({ status: "authenticating", walletId, startedAt: Date.now() });
|
|
146
|
+
}
|
|
147
|
+
toConnected(walletId, accounts) {
|
|
148
|
+
this.transition({ status: "connected", walletId, accounts, connectedAt: Date.now() });
|
|
149
|
+
}
|
|
150
|
+
toSigning(walletId, operation) {
|
|
151
|
+
this.transition({ status: "signing", walletId, operation, startedAt: Date.now() });
|
|
152
|
+
}
|
|
153
|
+
toReconnecting(walletId, attempt = 1) {
|
|
154
|
+
this.transition({ status: "reconnecting", walletId, attempt, startedAt: Date.now() });
|
|
155
|
+
}
|
|
156
|
+
toDisconnecting(walletId) {
|
|
157
|
+
this.transition({ status: "disconnecting", walletId, startedAt: Date.now() });
|
|
158
|
+
}
|
|
159
|
+
toError(error, walletId) {
|
|
160
|
+
this.transition({ status: "error", walletId, error, occurredAt: Date.now() });
|
|
161
|
+
}
|
|
162
|
+
toIdle() {
|
|
163
|
+
this.transition({ status: "idle" });
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Reset to idle state (bypasses transition validation)
|
|
167
|
+
*/
|
|
168
|
+
reset() {
|
|
169
|
+
const from = this.state;
|
|
170
|
+
this.state = { status: "idle" };
|
|
171
|
+
this.recordHistory(from, this.state, "reset");
|
|
172
|
+
if (this.config.persistState) {
|
|
173
|
+
this.clearPersistedState();
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Record state transition in history
|
|
178
|
+
*/
|
|
179
|
+
recordHistory(from, to, reason) {
|
|
180
|
+
this.history.push({
|
|
181
|
+
from,
|
|
182
|
+
to,
|
|
183
|
+
timestamp: Date.now(),
|
|
184
|
+
reason,
|
|
185
|
+
});
|
|
186
|
+
// Trim history if needed
|
|
187
|
+
if (this.history.length > this.config.maxHistorySize) {
|
|
188
|
+
this.history = this.history.slice(-this.config.maxHistorySize);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Get state history
|
|
193
|
+
*/
|
|
194
|
+
getHistory() {
|
|
195
|
+
return [...this.history];
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Get last N history entries
|
|
199
|
+
*/
|
|
200
|
+
getRecentHistory(count = 10) {
|
|
201
|
+
return this.history.slice(-count);
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Clear history
|
|
205
|
+
*/
|
|
206
|
+
clearHistory() {
|
|
207
|
+
this.history = [];
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Register callback for entering a state
|
|
211
|
+
*/
|
|
212
|
+
onEnter(status, callback) {
|
|
213
|
+
if (!this.listeners.enter.has(status)) {
|
|
214
|
+
this.listeners.enter.set(status, new Set());
|
|
215
|
+
}
|
|
216
|
+
this.listeners.enter.get(status).add(callback);
|
|
217
|
+
return () => {
|
|
218
|
+
this.listeners.enter.get(status)?.delete(callback);
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Register callback for exiting a state
|
|
223
|
+
*/
|
|
224
|
+
onExit(status, callback) {
|
|
225
|
+
if (!this.listeners.exit.has(status)) {
|
|
226
|
+
this.listeners.exit.set(status, new Set());
|
|
227
|
+
}
|
|
228
|
+
this.listeners.exit.get(status).add(callback);
|
|
229
|
+
return () => {
|
|
230
|
+
this.listeners.exit.get(status)?.delete(callback);
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Register callback for any transition
|
|
235
|
+
*/
|
|
236
|
+
onTransition(callback) {
|
|
237
|
+
this.listeners.transition.add(callback);
|
|
238
|
+
return () => {
|
|
239
|
+
this.listeners.transition.delete(callback);
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Get connected wallet ID if in connected state
|
|
244
|
+
*/
|
|
245
|
+
getConnectedWalletId() {
|
|
246
|
+
if (this.state.status === "connected") {
|
|
247
|
+
return this.state.walletId;
|
|
248
|
+
}
|
|
249
|
+
return null;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Get connected accounts if in connected state
|
|
253
|
+
*/
|
|
254
|
+
getConnectedAccounts() {
|
|
255
|
+
if (this.state.status === "connected") {
|
|
256
|
+
return this.state.accounts;
|
|
257
|
+
}
|
|
258
|
+
return [];
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Get error if in error state
|
|
262
|
+
*/
|
|
263
|
+
getError() {
|
|
264
|
+
if (this.state.status === "error") {
|
|
265
|
+
return this.state.error;
|
|
266
|
+
}
|
|
267
|
+
return null;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Get time spent in current state
|
|
271
|
+
*/
|
|
272
|
+
getTimeInCurrentState() {
|
|
273
|
+
const stateWithTime = this.state;
|
|
274
|
+
const startTime = stateWithTime.startedAt ?? stateWithTime.connectedAt ?? stateWithTime.occurredAt;
|
|
275
|
+
if (!startTime)
|
|
276
|
+
return 0;
|
|
277
|
+
return Date.now() - startTime;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Check if current state has timed out
|
|
281
|
+
*/
|
|
282
|
+
hasTimedOut(timeoutMs) {
|
|
283
|
+
return this.getTimeInCurrentState() > timeoutMs;
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Persist state to storage
|
|
287
|
+
*/
|
|
288
|
+
persistState() {
|
|
289
|
+
if (typeof localStorage === "undefined")
|
|
290
|
+
return;
|
|
291
|
+
try {
|
|
292
|
+
const data = {
|
|
293
|
+
state: this.state,
|
|
294
|
+
timestamp: Date.now(),
|
|
295
|
+
};
|
|
296
|
+
localStorage.setItem(this.config.storageKey, JSON.stringify(data));
|
|
297
|
+
}
|
|
298
|
+
catch (e) {
|
|
299
|
+
console.warn("Failed to persist state:", e);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Restore state from storage
|
|
304
|
+
*/
|
|
305
|
+
restoreState() {
|
|
306
|
+
if (!this.config.persistState || typeof localStorage === "undefined")
|
|
307
|
+
return;
|
|
308
|
+
try {
|
|
309
|
+
const raw = localStorage.getItem(this.config.storageKey);
|
|
310
|
+
if (!raw)
|
|
311
|
+
return;
|
|
312
|
+
const data = JSON.parse(raw);
|
|
313
|
+
// Check expiration
|
|
314
|
+
if (Date.now() - data.timestamp > this.config.stateExpiration) {
|
|
315
|
+
this.clearPersistedState();
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
// Only restore "connected" state (others are transient)
|
|
319
|
+
if (data.state.status === "connected") {
|
|
320
|
+
this.state = data.state;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
catch (e) {
|
|
324
|
+
console.warn("Failed to restore state:", e);
|
|
325
|
+
this.clearPersistedState();
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Clear persisted state
|
|
330
|
+
*/
|
|
331
|
+
clearPersistedState() {
|
|
332
|
+
if (typeof localStorage === "undefined")
|
|
333
|
+
return;
|
|
334
|
+
try {
|
|
335
|
+
localStorage.removeItem(this.config.storageKey);
|
|
336
|
+
}
|
|
337
|
+
catch (e) {
|
|
338
|
+
console.warn("Failed to clear persisted state:", e);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Create a snapshot of current state
|
|
343
|
+
*/
|
|
344
|
+
snapshot() {
|
|
345
|
+
return {
|
|
346
|
+
state: { ...this.state },
|
|
347
|
+
history: this.getHistory(),
|
|
348
|
+
timestamp: Date.now(),
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Check if currently processing (not idle or connected)
|
|
353
|
+
*/
|
|
354
|
+
isProcessing() {
|
|
355
|
+
return !["idle", "connected"].includes(this.state.status);
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Check if in a stable state (idle or connected)
|
|
359
|
+
*/
|
|
360
|
+
isStable() {
|
|
361
|
+
return ["idle", "connected"].includes(this.state.status);
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Wait for state to become stable
|
|
365
|
+
*/
|
|
366
|
+
async waitForStable(timeoutMs = 30000) {
|
|
367
|
+
if (this.isStable()) {
|
|
368
|
+
return this.state;
|
|
369
|
+
}
|
|
370
|
+
return new Promise((resolve, reject) => {
|
|
371
|
+
const timeoutId = setTimeout(() => {
|
|
372
|
+
unsubscribe();
|
|
373
|
+
reject(new errors_1.WalletError({
|
|
374
|
+
code: errors_1.ErrorCode.CONNECTION_TIMEOUT,
|
|
375
|
+
message: "Timed out waiting for stable state",
|
|
376
|
+
}));
|
|
377
|
+
}, timeoutMs);
|
|
378
|
+
const unsubscribe = this.onTransition((_, to) => {
|
|
379
|
+
if (["idle", "connected", "error"].includes(to.status)) {
|
|
380
|
+
clearTimeout(timeoutId);
|
|
381
|
+
unsubscribe();
|
|
382
|
+
resolve(to);
|
|
383
|
+
}
|
|
384
|
+
});
|
|
385
|
+
});
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Cleanup
|
|
389
|
+
*/
|
|
390
|
+
destroy() {
|
|
391
|
+
this.listeners.enter.clear();
|
|
392
|
+
this.listeners.exit.clear();
|
|
393
|
+
this.listeners.transition.clear();
|
|
394
|
+
this.history = [];
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
exports.ConnectionStateMachine = ConnectionStateMachine;
|
|
398
|
+
/**
|
|
399
|
+
* Create a simple state machine instance
|
|
400
|
+
*/
|
|
401
|
+
function createStateMachine(config) {
|
|
402
|
+
return new ConnectionStateMachine(config);
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Get human-readable status description
|
|
406
|
+
*/
|
|
407
|
+
function getStatusDescription(status) {
|
|
408
|
+
switch (status) {
|
|
409
|
+
case "idle":
|
|
410
|
+
return "Not connected";
|
|
411
|
+
case "detecting":
|
|
412
|
+
return "Detecting wallet";
|
|
413
|
+
case "connecting":
|
|
414
|
+
return "Connecting to wallet";
|
|
415
|
+
case "authenticating":
|
|
416
|
+
return "Waiting for approval";
|
|
417
|
+
case "connected":
|
|
418
|
+
return "Connected";
|
|
419
|
+
case "signing":
|
|
420
|
+
return "Signing transaction";
|
|
421
|
+
case "reconnecting":
|
|
422
|
+
return "Reconnecting";
|
|
423
|
+
case "disconnecting":
|
|
424
|
+
return "Disconnecting";
|
|
425
|
+
case "error":
|
|
426
|
+
return "Error occurred";
|
|
427
|
+
default:
|
|
428
|
+
return "Unknown";
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/connection/state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error codes for wallet connection errors
|
|
3
|
+
*/
|
|
4
|
+
export declare enum ErrorCode {
|
|
5
|
+
WALLET_NOT_FOUND = "WALLET_NOT_FOUND",
|
|
6
|
+
EXTENSION_NOT_INSTALLED = "EXTENSION_NOT_INSTALLED",
|
|
7
|
+
EXTENSION_LOCKED = "EXTENSION_LOCKED",
|
|
8
|
+
USER_REJECTED = "USER_REJECTED",
|
|
9
|
+
CONNECTION_TIMEOUT = "CONNECTION_TIMEOUT",
|
|
10
|
+
NETWORK_MISMATCH = "NETWORK_MISMATCH",
|
|
11
|
+
NETWORK_ERROR = "NETWORK_ERROR",
|
|
12
|
+
RPC_ERROR = "RPC_ERROR",
|
|
13
|
+
SESSION_EXPIRED = "SESSION_EXPIRED",
|
|
14
|
+
SESSION_INVALID = "SESSION_INVALID",
|
|
15
|
+
NO_ACTIVE_SESSION = "NO_ACTIVE_SESSION",
|
|
16
|
+
TRANSACTION_FAILED = "TRANSACTION_FAILED",
|
|
17
|
+
INSUFFICIENT_FUNDS = "INSUFFICIENT_FUNDS",
|
|
18
|
+
INVALID_TRANSACTION = "INVALID_TRANSACTION",
|
|
19
|
+
GAS_EXCEEDED = "GAS_EXCEEDED",
|
|
20
|
+
SANDBOX_BLOCKED = "SANDBOX_BLOCKED",
|
|
21
|
+
SANDBOX_TIMEOUT = "SANDBOX_TIMEOUT",
|
|
22
|
+
EXECUTOR_LOAD_FAILED = "EXECUTOR_LOAD_FAILED",
|
|
23
|
+
SIGN_MESSAGE_FAILED = "SIGN_MESSAGE_FAILED",
|
|
24
|
+
SIGN_TRANSACTION_FAILED = "SIGN_TRANSACTION_FAILED",
|
|
25
|
+
NO_ACCOUNTS = "NO_ACCOUNTS",
|
|
26
|
+
ACCOUNT_NOT_FOUND = "ACCOUNT_NOT_FOUND",
|
|
27
|
+
MANIFEST_LOAD_FAILED = "MANIFEST_LOAD_FAILED",
|
|
28
|
+
INVALID_MANIFEST = "INVALID_MANIFEST",
|
|
29
|
+
UNKNOWN_ERROR = "UNKNOWN_ERROR"
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Recovery actions that can be suggested to users
|
|
33
|
+
*/
|
|
34
|
+
export type RecoveryAction = "install" | "unlock" | "retry" | "switch_network" | "reconnect" | "clear_session" | "select_different_wallet" | "check_balance" | "contact_support" | "open_app" | "refresh";
|
|
35
|
+
/**
|
|
36
|
+
* Recovery option with action and metadata
|
|
37
|
+
*/
|
|
38
|
+
export interface RecoveryOption {
|
|
39
|
+
action: RecoveryAction;
|
|
40
|
+
label: string;
|
|
41
|
+
description?: string;
|
|
42
|
+
url?: string;
|
|
43
|
+
handler?: () => Promise<void>;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Base error class for all wallet connection errors
|
|
47
|
+
*/
|
|
48
|
+
export declare class WalletError extends Error {
|
|
49
|
+
readonly code: ErrorCode;
|
|
50
|
+
readonly walletId?: string;
|
|
51
|
+
readonly userMessage: string;
|
|
52
|
+
readonly recoveryOptions: RecoveryOption[];
|
|
53
|
+
readonly originalError?: Error;
|
|
54
|
+
readonly timestamp: number;
|
|
55
|
+
constructor(options: {
|
|
56
|
+
code: ErrorCode;
|
|
57
|
+
message: string;
|
|
58
|
+
userMessage?: string;
|
|
59
|
+
walletId?: string;
|
|
60
|
+
recoveryOptions?: RecoveryOption[];
|
|
61
|
+
originalError?: Error;
|
|
62
|
+
});
|
|
63
|
+
private getDefaultUserMessage;
|
|
64
|
+
private getDefaultRecoveryOptions;
|
|
65
|
+
/**
|
|
66
|
+
* Check if the error is recoverable
|
|
67
|
+
*/
|
|
68
|
+
get isRecoverable(): boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Check if the error was caused by user action
|
|
71
|
+
*/
|
|
72
|
+
get isUserAction(): boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Serialize error for logging/analytics
|
|
75
|
+
*/
|
|
76
|
+
toJSON(): Record<string, unknown>;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Specific error classes for common scenarios
|
|
80
|
+
*/
|
|
81
|
+
export declare class WalletNotFoundError extends WalletError {
|
|
82
|
+
constructor(walletId: string, installUrl?: string);
|
|
83
|
+
}
|
|
84
|
+
export declare class UserRejectedError extends WalletError {
|
|
85
|
+
constructor(walletId?: string, action?: string);
|
|
86
|
+
}
|
|
87
|
+
export declare class ConnectionTimeoutError extends WalletError {
|
|
88
|
+
constructor(walletId?: string, timeoutMs?: number);
|
|
89
|
+
}
|
|
90
|
+
export declare class NetworkMismatchError extends WalletError {
|
|
91
|
+
readonly expectedNetwork: string;
|
|
92
|
+
readonly actualNetwork?: string;
|
|
93
|
+
constructor(expectedNetwork: string, actualNetwork?: string, walletId?: string);
|
|
94
|
+
}
|
|
95
|
+
export declare class TransactionError extends WalletError {
|
|
96
|
+
readonly transactionHash?: string;
|
|
97
|
+
constructor(options: {
|
|
98
|
+
code?: ErrorCode;
|
|
99
|
+
message: string;
|
|
100
|
+
walletId?: string;
|
|
101
|
+
transactionHash?: string;
|
|
102
|
+
originalError?: Error;
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
export declare class SessionError extends WalletError {
|
|
106
|
+
constructor(code: ErrorCode.SESSION_EXPIRED | ErrorCode.SESSION_INVALID | ErrorCode.NO_ACTIVE_SESSION, walletId?: string);
|
|
107
|
+
}
|
|
108
|
+
export declare class SandboxError extends WalletError {
|
|
109
|
+
constructor(code: ErrorCode.SANDBOX_BLOCKED | ErrorCode.SANDBOX_TIMEOUT | ErrorCode.EXECUTOR_LOAD_FAILED, walletId?: string, originalError?: Error);
|
|
110
|
+
}
|
|
111
|
+
export declare class SigningError extends WalletError {
|
|
112
|
+
readonly action: "message" | "transaction";
|
|
113
|
+
constructor(options: {
|
|
114
|
+
action: "message" | "transaction";
|
|
115
|
+
message: string;
|
|
116
|
+
walletId?: string;
|
|
117
|
+
originalError?: Error;
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
export declare class RpcError extends WalletError {
|
|
121
|
+
readonly endpoint?: string;
|
|
122
|
+
readonly statusCode?: number;
|
|
123
|
+
constructor(options: {
|
|
124
|
+
message: string;
|
|
125
|
+
endpoint?: string;
|
|
126
|
+
statusCode?: number;
|
|
127
|
+
originalError?: Error;
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
export declare class ManifestError extends WalletError {
|
|
131
|
+
readonly manifestUrl?: string;
|
|
132
|
+
constructor(options: {
|
|
133
|
+
code: ErrorCode.MANIFEST_LOAD_FAILED | ErrorCode.INVALID_MANIFEST;
|
|
134
|
+
message: string;
|
|
135
|
+
manifestUrl?: string;
|
|
136
|
+
originalError?: Error;
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Type guard to check if an error is a WalletError
|
|
141
|
+
*/
|
|
142
|
+
export declare function isWalletError(error: unknown): error is WalletError;
|
|
143
|
+
/**
|
|
144
|
+
* Type guard to check if error has a specific code
|
|
145
|
+
*/
|
|
146
|
+
export declare function hasErrorCode<C extends ErrorCode>(error: unknown, code: C): error is WalletError & {
|
|
147
|
+
code: C;
|
|
148
|
+
};
|
|
149
|
+
/**
|
|
150
|
+
* Serialized error format for storage/transmission
|
|
151
|
+
*/
|
|
152
|
+
export interface SerializedWalletError {
|
|
153
|
+
name: string;
|
|
154
|
+
code: ErrorCode;
|
|
155
|
+
message: string;
|
|
156
|
+
userMessage: string;
|
|
157
|
+
walletId?: string;
|
|
158
|
+
recoveryOptions: RecoveryAction[];
|
|
159
|
+
timestamp: number;
|
|
160
|
+
originalMessage?: string;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Deserialize a WalletError from JSON
|
|
164
|
+
*/
|
|
165
|
+
export declare function deserializeError(data: SerializedWalletError): WalletError;
|
|
166
|
+
/**
|
|
167
|
+
* Helper to wrap unknown errors with improved pattern detection
|
|
168
|
+
*/
|
|
169
|
+
export declare function wrapError(error: unknown, walletId?: string): WalletError;
|
|
170
|
+
/**
|
|
171
|
+
* Get a user-friendly message for any error
|
|
172
|
+
*/
|
|
173
|
+
export declare function getUserFriendlyMessage(error: unknown): string;
|
|
174
|
+
/**
|
|
175
|
+
* Get recovery options for any error
|
|
176
|
+
*/
|
|
177
|
+
export declare function getRecoveryOptions(error: unknown): RecoveryOption[];
|