@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.
Files changed (179) hide show
  1. package/README.md +546 -0
  2. package/build/InjectedWallet.d.ts +22 -0
  3. package/build/InjectedWallet.js +58 -0
  4. package/build/InjectedWallet.js.map +1 -0
  5. package/build/NearConnector.d.ts +151 -0
  6. package/build/NearConnector.js +536 -0
  7. package/build/NearConnector.js.map +1 -0
  8. package/build/ParentFrameWallet.d.ts +22 -0
  9. package/build/ParentFrameWallet.js +66 -0
  10. package/build/ParentFrameWallet.js.map +1 -0
  11. package/build/SandboxedWallet/code.d.ts +7 -0
  12. package/build/SandboxedWallet/code.js +324 -0
  13. package/build/SandboxedWallet/code.js.map +1 -0
  14. package/build/SandboxedWallet/executor.d.ts +23 -0
  15. package/build/SandboxedWallet/executor.js +338 -0
  16. package/build/SandboxedWallet/executor.js.map +1 -0
  17. package/build/SandboxedWallet/iframe.d.ts +18 -0
  18. package/build/SandboxedWallet/iframe.js +78 -0
  19. package/build/SandboxedWallet/iframe.js.map +1 -0
  20. package/build/SandboxedWallet/index.d.ts +24 -0
  21. package/build/SandboxedWallet/index.js +54 -0
  22. package/build/SandboxedWallet/index.js.map +1 -0
  23. package/build/actions/index.d.ts +3 -0
  24. package/build/actions/index.js +105 -0
  25. package/build/actions/index.js.map +1 -0
  26. package/build/actions/types.d.ts +76 -0
  27. package/build/actions/types.js +3 -0
  28. package/build/actions/types.js.map +1 -0
  29. package/build/connection/health.d.ts +213 -0
  30. package/build/connection/health.js +391 -0
  31. package/build/connection/health.js.map +1 -0
  32. package/build/connection/index.d.ts +4 -0
  33. package/build/connection/index.js +48 -0
  34. package/build/connection/index.js.map +1 -0
  35. package/build/connection/reconnect.d.ts +261 -0
  36. package/build/connection/reconnect.js +454 -0
  37. package/build/connection/reconnect.js.map +1 -0
  38. package/build/connection/retry.d.ts +187 -0
  39. package/build/connection/retry.js +427 -0
  40. package/build/connection/retry.js.map +1 -0
  41. package/build/connection/state.d.ts +222 -0
  42. package/build/connection/state.js +431 -0
  43. package/build/connection/state.js.map +1 -0
  44. package/build/errors.d.ts +177 -0
  45. package/build/errors.js +546 -0
  46. package/build/errors.js.map +1 -0
  47. package/build/hardware/errors.d.ts +36 -0
  48. package/build/hardware/errors.js +127 -0
  49. package/build/hardware/errors.js.map +1 -0
  50. package/build/hardware/index.d.ts +7 -0
  51. package/build/hardware/index.js +39 -0
  52. package/build/hardware/index.js.map +1 -0
  53. package/build/hardware/near-app.d.ts +95 -0
  54. package/build/hardware/near-app.js +291 -0
  55. package/build/hardware/near-app.js.map +1 -0
  56. package/build/hardware/transport.d.ts +94 -0
  57. package/build/hardware/transport.js +267 -0
  58. package/build/hardware/transport.js.map +1 -0
  59. package/build/hardware/types.d.ts +98 -0
  60. package/build/hardware/types.js +72 -0
  61. package/build/hardware/types.js.map +1 -0
  62. package/build/helpers/analytics.d.ts +191 -0
  63. package/build/helpers/analytics.js +304 -0
  64. package/build/helpers/analytics.js.map +1 -0
  65. package/build/helpers/base58.d.ts +6 -0
  66. package/build/helpers/base58.js +47 -0
  67. package/build/helpers/base58.js.map +1 -0
  68. package/build/helpers/events.d.ts +42 -0
  69. package/build/helpers/events.js +68 -0
  70. package/build/helpers/events.js.map +1 -0
  71. package/build/helpers/html.d.ts +8 -0
  72. package/build/helpers/html.js +30 -0
  73. package/build/helpers/html.js.map +1 -0
  74. package/build/helpers/indexdb.d.ts +14 -0
  75. package/build/helpers/indexdb.js +166 -0
  76. package/build/helpers/indexdb.js.map +1 -0
  77. package/build/helpers/manifest.d.ts +147 -0
  78. package/build/helpers/manifest.js +329 -0
  79. package/build/helpers/manifest.js.map +1 -0
  80. package/build/helpers/queue.d.ts +11 -0
  81. package/build/helpers/queue.js +48 -0
  82. package/build/helpers/queue.js.map +1 -0
  83. package/build/helpers/session.d.ts +119 -0
  84. package/build/helpers/session.js +289 -0
  85. package/build/helpers/session.js.map +1 -0
  86. package/build/helpers/simulation.d.ts +128 -0
  87. package/build/helpers/simulation.js +441 -0
  88. package/build/helpers/simulation.js.map +1 -0
  89. package/build/helpers/storage.d.ts +58 -0
  90. package/build/helpers/storage.js +190 -0
  91. package/build/helpers/storage.js.map +1 -0
  92. package/build/helpers/trust.d.ts +157 -0
  93. package/build/helpers/trust.js +340 -0
  94. package/build/helpers/trust.js.map +1 -0
  95. package/build/helpers/url.d.ts +1 -0
  96. package/build/helpers/url.js +13 -0
  97. package/build/helpers/url.js.map +1 -0
  98. package/build/helpers/uuid.d.ts +1 -0
  99. package/build/helpers/uuid.js +14 -0
  100. package/build/helpers/uuid.js.map +1 -0
  101. package/build/index.d.ts +21 -0
  102. package/build/index.js +167 -0
  103. package/build/index.js.map +1 -0
  104. package/build/popups/IframeWalletPopup.d.ts +16 -0
  105. package/build/popups/IframeWalletPopup.js +38 -0
  106. package/build/popups/IframeWalletPopup.js.map +1 -0
  107. package/build/popups/NearWalletsPopup.d.ts +25 -0
  108. package/build/popups/NearWalletsPopup.js +153 -0
  109. package/build/popups/NearWalletsPopup.js.map +1 -0
  110. package/build/popups/Popup.d.ts +22 -0
  111. package/build/popups/Popup.js +94 -0
  112. package/build/popups/Popup.js.map +1 -0
  113. package/build/popups/styles.d.ts +1 -0
  114. package/build/popups/styles.js +257 -0
  115. package/build/popups/styles.js.map +1 -0
  116. package/build/security/audit-log.d.ts +123 -0
  117. package/build/security/audit-log.js +268 -0
  118. package/build/security/audit-log.js.map +1 -0
  119. package/build/security/csp.d.ts +68 -0
  120. package/build/security/csp.js +328 -0
  121. package/build/security/csp.js.map +1 -0
  122. package/build/security/index.d.ts +10 -0
  123. package/build/security/index.js +42 -0
  124. package/build/security/index.js.map +1 -0
  125. package/build/security/origin-guard.d.ts +90 -0
  126. package/build/security/origin-guard.js +244 -0
  127. package/build/security/origin-guard.js.map +1 -0
  128. package/build/security/rate-limiter.d.ts +84 -0
  129. package/build/security/rate-limiter.js +212 -0
  130. package/build/security/rate-limiter.js.map +1 -0
  131. package/build/security/secure-storage.d.ts +77 -0
  132. package/build/security/secure-storage.js +242 -0
  133. package/build/security/secure-storage.js.map +1 -0
  134. package/build/security/transaction-guard.d.ts +71 -0
  135. package/build/security/transaction-guard.js +239 -0
  136. package/build/security/transaction-guard.js.map +1 -0
  137. package/build/types.d.ts +508 -0
  138. package/build/types.js +3 -0
  139. package/build/types.js.map +1 -0
  140. package/build/ui/AccountSwitcherModal.d.ts +53 -0
  141. package/build/ui/AccountSwitcherModal.js +239 -0
  142. package/build/ui/AccountSwitcherModal.js.map +1 -0
  143. package/build/ui/Modal.d.ts +84 -0
  144. package/build/ui/Modal.js +278 -0
  145. package/build/ui/Modal.js.map +1 -0
  146. package/build/ui/TransactionModal.d.ts +84 -0
  147. package/build/ui/TransactionModal.js +406 -0
  148. package/build/ui/TransactionModal.js.map +1 -0
  149. package/build/ui/WalletSelectorModal.d.ts +97 -0
  150. package/build/ui/WalletSelectorModal.js +481 -0
  151. package/build/ui/WalletSelectorModal.js.map +1 -0
  152. package/build/ui/icons.d.ts +19 -0
  153. package/build/ui/icons.js +65 -0
  154. package/build/ui/icons.js.map +1 -0
  155. package/build/ui/index.d.ts +10 -0
  156. package/build/ui/index.js +31 -0
  157. package/build/ui/index.js.map +1 -0
  158. package/build/ui/styles.d.ts +5 -0
  159. package/build/ui/styles.js +973 -0
  160. package/build/ui/styles.js.map +1 -0
  161. package/build/ui/theme.d.ts +133 -0
  162. package/build/ui/theme.js +204 -0
  163. package/build/ui/theme.js.map +1 -0
  164. package/build/wallets/external/index.d.ts +4 -0
  165. package/build/wallets/external/index.js +9 -0
  166. package/build/wallets/external/index.js.map +1 -0
  167. package/build/wallets/external/manager.d.ts +152 -0
  168. package/build/wallets/external/manager.js +586 -0
  169. package/build/wallets/external/manager.js.map +1 -0
  170. package/build/wallets/privileged/index.d.ts +5 -0
  171. package/build/wallets/privileged/index.js +12 -0
  172. package/build/wallets/privileged/index.js.map +1 -0
  173. package/build/wallets/privileged/ledger.d.ts +132 -0
  174. package/build/wallets/privileged/ledger.js +563 -0
  175. package/build/wallets/privileged/ledger.js.map +1 -0
  176. package/build/wallets/privileged/manager.d.ts +54 -0
  177. package/build/wallets/privileged/manager.js +174 -0
  178. package/build/wallets/privileged/manager.js.map +1 -0
  179. package/package.json +33 -0
@@ -0,0 +1,289 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SessionManager = void 0;
4
+ const storage_1 = require("./storage");
5
+ const DEFAULT_MAX_AGE = 7 * 24 * 60 * 60 * 1000; // 7 days
6
+ const DEFAULT_STORAGE_KEY = "near-connect-session";
7
+ const BROADCAST_CHANNEL_NAME = "near-connect-session-sync";
8
+ class SessionManager {
9
+ storage;
10
+ storageKey;
11
+ maxAge;
12
+ idleTimeout;
13
+ autoReconnect;
14
+ enableMultiTabSync;
15
+ cachedSession = null;
16
+ broadcastChannel = null;
17
+ idleTimer = null;
18
+ activityHandler = null;
19
+ onSessionRestored;
20
+ onSessionExpired;
21
+ onSessionInvalid;
22
+ onSessionCleared;
23
+ onSessionSynced;
24
+ onIdleTimeout;
25
+ constructor(options = {}) {
26
+ this.storage = options.storage ?? new storage_1.LocalStorage();
27
+ this.storageKey = options.storageKey ?? DEFAULT_STORAGE_KEY;
28
+ this.maxAge = options.maxAge ?? DEFAULT_MAX_AGE;
29
+ this.idleTimeout = options.idleTimeout ?? null;
30
+ this.autoReconnect = options.autoReconnect ?? true;
31
+ this.enableMultiTabSync = options.enableMultiTabSync ?? true;
32
+ this.onSessionRestored = options.onSessionRestored;
33
+ this.onSessionExpired = options.onSessionExpired;
34
+ this.onSessionInvalid = options.onSessionInvalid;
35
+ this.onSessionCleared = options.onSessionCleared;
36
+ this.onSessionSynced = options.onSessionSynced;
37
+ this.onIdleTimeout = options.onIdleTimeout;
38
+ this.initMultiTabSync();
39
+ }
40
+ /**
41
+ * Initialize multi-tab synchronization via BroadcastChannel
42
+ */
43
+ initMultiTabSync() {
44
+ if (!this.enableMultiTabSync)
45
+ return;
46
+ if (typeof BroadcastChannel === "undefined")
47
+ return;
48
+ try {
49
+ this.broadcastChannel = new BroadcastChannel(BROADCAST_CHANNEL_NAME);
50
+ this.broadcastChannel.onmessage = (event) => {
51
+ this.handleSyncMessage(event.data);
52
+ };
53
+ }
54
+ catch {
55
+ // BroadcastChannel not supported
56
+ }
57
+ }
58
+ /**
59
+ * Handle incoming sync messages from other tabs
60
+ */
61
+ handleSyncMessage(message) {
62
+ switch (message.type) {
63
+ case "session:updated":
64
+ if (message.session) {
65
+ this.cachedSession = message.session;
66
+ this.onSessionSynced?.(message.session);
67
+ }
68
+ break;
69
+ case "session:cleared":
70
+ case "session:disconnected":
71
+ this.cachedSession = null;
72
+ this.onSessionCleared?.();
73
+ break;
74
+ }
75
+ }
76
+ /**
77
+ * Broadcast session change to other tabs
78
+ */
79
+ broadcast(message) {
80
+ this.broadcastChannel?.postMessage(message);
81
+ }
82
+ /**
83
+ * Start idle timeout tracking
84
+ */
85
+ startIdleTracking() {
86
+ if (!this.idleTimeout || typeof window === "undefined")
87
+ return;
88
+ this.stopIdleTracking();
89
+ const resetTimer = () => {
90
+ if (this.idleTimer)
91
+ clearTimeout(this.idleTimer);
92
+ this.idleTimer = setTimeout(async () => {
93
+ const session = await this.get();
94
+ if (session) {
95
+ this.onIdleTimeout?.(session);
96
+ await this.clear();
97
+ }
98
+ }, this.idleTimeout);
99
+ // Touch session on activity
100
+ this.touch().catch(() => { });
101
+ };
102
+ this.activityHandler = resetTimer;
103
+ const events = ["mousedown", "keydown", "touchstart", "scroll"];
104
+ events.forEach((event) => {
105
+ window.addEventListener(event, resetTimer, { passive: true });
106
+ });
107
+ resetTimer();
108
+ }
109
+ /**
110
+ * Stop idle timeout tracking
111
+ */
112
+ stopIdleTracking() {
113
+ if (this.idleTimer) {
114
+ clearTimeout(this.idleTimer);
115
+ this.idleTimer = null;
116
+ }
117
+ if (this.activityHandler && typeof window !== "undefined") {
118
+ const events = ["mousedown", "keydown", "touchstart", "scroll"];
119
+ events.forEach((event) => {
120
+ window.removeEventListener(event, this.activityHandler);
121
+ });
122
+ this.activityHandler = null;
123
+ }
124
+ }
125
+ /**
126
+ * Cleanup resources
127
+ */
128
+ destroy() {
129
+ this.stopIdleTracking();
130
+ this.broadcastChannel?.close();
131
+ this.broadcastChannel = null;
132
+ }
133
+ /**
134
+ * Save a new session
135
+ */
136
+ async save(session) {
137
+ const now = Date.now();
138
+ const fullSession = {
139
+ ...session,
140
+ connectedAt: now,
141
+ lastActiveAt: now,
142
+ };
143
+ await this.storage.set(this.storageKey, JSON.stringify(fullSession));
144
+ this.cachedSession = fullSession;
145
+ // Broadcast to other tabs
146
+ this.broadcast({ type: "session:updated", session: fullSession, timestamp: now });
147
+ // Start idle tracking if configured
148
+ this.startIdleTracking();
149
+ return fullSession;
150
+ }
151
+ /**
152
+ * Get the current session if valid
153
+ */
154
+ async get() {
155
+ if (this.cachedSession && this.isValid(this.cachedSession)) {
156
+ return this.cachedSession;
157
+ }
158
+ const raw = await this.storage.get(this.storageKey);
159
+ if (!raw)
160
+ return null;
161
+ try {
162
+ const session = JSON.parse(raw);
163
+ const validation = this.validate(session);
164
+ if (!validation.valid) {
165
+ if (validation.reason === "expired") {
166
+ this.onSessionExpired?.(session);
167
+ }
168
+ else if (validation.reason === "invalid") {
169
+ this.onSessionInvalid?.(session);
170
+ }
171
+ await this.clear();
172
+ return null;
173
+ }
174
+ this.cachedSession = session;
175
+ return session;
176
+ }
177
+ catch {
178
+ await this.clear();
179
+ return null;
180
+ }
181
+ }
182
+ /**
183
+ * Validate a session and return detailed result
184
+ */
185
+ validate(session) {
186
+ if (!session.walletId || !session.accounts?.length) {
187
+ return { valid: false, reason: "invalid" };
188
+ }
189
+ const age = Date.now() - session.connectedAt;
190
+ if (age > this.maxAge) {
191
+ return { valid: false, reason: "expired" };
192
+ }
193
+ return { valid: true, session };
194
+ }
195
+ /**
196
+ * Update the last active timestamp
197
+ */
198
+ async touch() {
199
+ const session = await this.get();
200
+ if (!session)
201
+ return;
202
+ session.lastActiveAt = Date.now();
203
+ await this.storage.set(this.storageKey, JSON.stringify(session));
204
+ this.cachedSession = session;
205
+ }
206
+ /**
207
+ * Update session data (e.g., accounts changed)
208
+ */
209
+ async update(updates) {
210
+ const session = await this.get();
211
+ if (!session)
212
+ return null;
213
+ const updatedSession = {
214
+ ...session,
215
+ ...updates,
216
+ lastActiveAt: Date.now(),
217
+ };
218
+ await this.storage.set(this.storageKey, JSON.stringify(updatedSession));
219
+ this.cachedSession = updatedSession;
220
+ return updatedSession;
221
+ }
222
+ /**
223
+ * Clear the session
224
+ */
225
+ async clear() {
226
+ await this.storage.remove(this.storageKey);
227
+ this.cachedSession = null;
228
+ // Stop idle tracking
229
+ this.stopIdleTracking();
230
+ // Broadcast to other tabs
231
+ this.broadcast({ type: "session:cleared", timestamp: Date.now() });
232
+ this.onSessionCleared?.();
233
+ }
234
+ /**
235
+ * Check if a session is still valid (simple boolean check)
236
+ */
237
+ isValid(session) {
238
+ return this.validate(session).valid;
239
+ }
240
+ /**
241
+ * Check if we should auto-reconnect
242
+ */
243
+ shouldAutoReconnect() {
244
+ return this.autoReconnect;
245
+ }
246
+ /**
247
+ * Try to restore a previous session
248
+ * Returns the session if valid and autoReconnect is enabled
249
+ */
250
+ async tryRestore() {
251
+ if (!this.autoReconnect)
252
+ return null;
253
+ const session = await this.get();
254
+ if (session) {
255
+ this.onSessionRestored?.(session);
256
+ // Start idle tracking for restored session
257
+ this.startIdleTracking();
258
+ return session;
259
+ }
260
+ return null;
261
+ }
262
+ /**
263
+ * Get session age in milliseconds
264
+ */
265
+ async getAge() {
266
+ const session = await this.get();
267
+ if (!session)
268
+ return null;
269
+ return Date.now() - session.connectedAt;
270
+ }
271
+ /**
272
+ * Get time since last activity
273
+ */
274
+ async getIdleTime() {
275
+ const session = await this.get();
276
+ if (!session)
277
+ return null;
278
+ return Date.now() - session.lastActiveAt;
279
+ }
280
+ /**
281
+ * Check if session exists (without full validation)
282
+ */
283
+ async exists() {
284
+ const raw = await this.storage.get(this.storageKey);
285
+ return raw !== null;
286
+ }
287
+ }
288
+ exports.SessionManager = SessionManager;
289
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/helpers/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ import { Transaction, Network, Account } from "../types";
2
+ /**
3
+ * Gas estimation result
4
+ */
5
+ export interface GasEstimate {
6
+ /** Estimated gas in gas units */
7
+ gas: string;
8
+ /** Estimated gas in TGas for display */
9
+ tgas: number;
10
+ /** Estimated gas cost in NEAR */
11
+ gasCostNear: string;
12
+ /** Whether the account has enough balance */
13
+ canAfford: boolean;
14
+ /** Breakdown by action */
15
+ breakdown: ActionGasEstimate[];
16
+ }
17
+ /**
18
+ * Per-action gas estimate
19
+ */
20
+ export interface ActionGasEstimate {
21
+ type: string;
22
+ methodName?: string;
23
+ gas: string;
24
+ tgas: number;
25
+ }
26
+ /**
27
+ * Simulation result for a transaction
28
+ */
29
+ export interface SimulationResult {
30
+ /** Whether the simulation succeeded */
31
+ success: boolean;
32
+ /** Gas estimation */
33
+ gasEstimate: GasEstimate;
34
+ /** Total deposit required in yoctoNEAR */
35
+ totalDeposit: string;
36
+ /** Total deposit in NEAR for display */
37
+ totalDepositNear: string;
38
+ /** Storage deposit required */
39
+ storageDeposit?: string;
40
+ /** Logs from the simulation */
41
+ logs: string[];
42
+ /** Return value if any */
43
+ returnValue?: unknown;
44
+ /** Error message if failed */
45
+ error?: string;
46
+ /** Warnings about the transaction */
47
+ warnings: SimulationWarning[];
48
+ }
49
+ /**
50
+ * Warning types for transaction simulation
51
+ */
52
+ export type SimulationWarningType = "high_gas" | "high_deposit" | "low_balance" | "contract_not_found" | "method_not_found" | "access_key_limited" | "storage_staking" | "dangerous_action";
53
+ /**
54
+ * Simulation warning
55
+ */
56
+ export interface SimulationWarning {
57
+ type: SimulationWarningType;
58
+ message: string;
59
+ severity: "info" | "warning" | "error";
60
+ }
61
+ /**
62
+ * RPC provider for simulation
63
+ */
64
+ export interface SimulationRpcProvider {
65
+ query<T>(params: {
66
+ request_type: string;
67
+ finality?: string;
68
+ account_id?: string;
69
+ method_name?: string;
70
+ args_base64?: string;
71
+ }): Promise<T>;
72
+ sendTransaction(signedTx: string): Promise<unknown>;
73
+ }
74
+ /**
75
+ * Transaction simulator
76
+ */
77
+ export declare class TransactionSimulator {
78
+ private network;
79
+ private rpcEndpoint;
80
+ constructor(options?: {
81
+ network?: Network;
82
+ rpcEndpoint?: string;
83
+ });
84
+ /**
85
+ * Simulate a transaction and get gas estimates
86
+ */
87
+ simulate(transaction: Transaction, signerAccount: Account): Promise<SimulationResult>;
88
+ /**
89
+ * Estimate gas for a transaction
90
+ */
91
+ estimateGas(transaction: Transaction, signerAccount: Account): Promise<GasEstimate>;
92
+ /**
93
+ * Estimate gas for a single action
94
+ */
95
+ private estimateActionGas;
96
+ /**
97
+ * Calculate total deposit required
98
+ */
99
+ private calculateTotalDeposit;
100
+ /**
101
+ * Check for dangerous actions
102
+ */
103
+ private checkDangerousActions;
104
+ /**
105
+ * Simulate a function call via RPC view call
106
+ */
107
+ private simulateFunctionCall;
108
+ /**
109
+ * Get account balance
110
+ */
111
+ private getAccountBalance;
112
+ /**
113
+ * Format yoctoNEAR to NEAR
114
+ */
115
+ private formatNear;
116
+ /**
117
+ * Set network
118
+ */
119
+ setNetwork(network: Network): void;
120
+ /**
121
+ * Set custom RPC endpoint
122
+ */
123
+ setRpcEndpoint(endpoint: string): void;
124
+ }
125
+ /**
126
+ * Quick gas estimate without full simulation
127
+ */
128
+ export declare function quickGasEstimate(transaction: Transaction): GasEstimate;