@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,84 @@
1
+ import { Modal, ModalOptions } from "./Modal";
2
+ import { Transaction } from "../types";
3
+ /**
4
+ * Transaction action display info
5
+ */
6
+ interface ActionDisplay {
7
+ type: string;
8
+ title: string;
9
+ description: string;
10
+ details?: Record<string, string>;
11
+ }
12
+ /**
13
+ * Transaction modal view states
14
+ */
15
+ type TransactionView = "review" | "signing" | "success" | "error";
16
+ /**
17
+ * Transaction modal options
18
+ */
19
+ export interface TransactionModalOptions extends ModalOptions {
20
+ transaction: Transaction;
21
+ walletName: string;
22
+ walletIcon?: string;
23
+ receiverId: string;
24
+ onConfirm: () => void;
25
+ onReject: () => void;
26
+ estimatedGas?: string;
27
+ estimatedDeposit?: string;
28
+ }
29
+ /**
30
+ * Transaction modal state
31
+ */
32
+ interface TransactionState {
33
+ view: TransactionView;
34
+ error: {
35
+ title: string;
36
+ message: string;
37
+ } | null;
38
+ txHash?: string;
39
+ }
40
+ /**
41
+ * Transaction confirmation modal
42
+ */
43
+ export declare class TransactionModal extends Modal {
44
+ protected readonly txOptions: Required<TransactionModalOptions>;
45
+ protected state: TransactionState;
46
+ protected actions: ActionDisplay[];
47
+ constructor(options: TransactionModalOptions);
48
+ /**
49
+ * Parse transaction actions for display
50
+ */
51
+ private parseActions;
52
+ /**
53
+ * Format yoctoNEAR to NEAR
54
+ */
55
+ private formatNear;
56
+ /**
57
+ * Format gas units to TGas
58
+ */
59
+ private formatGas;
60
+ protected render(): string;
61
+ private renderHeader;
62
+ private renderBody;
63
+ private renderReview;
64
+ private renderAction;
65
+ private renderSigning;
66
+ private renderSuccess;
67
+ private renderError;
68
+ private renderFooter;
69
+ protected setupHandlers(): void;
70
+ private handleAction;
71
+ /**
72
+ * Show signing state
73
+ */
74
+ showSigning(): void;
75
+ /**
76
+ * Show success state
77
+ */
78
+ showSuccess(txHash?: string): void;
79
+ /**
80
+ * Show error state
81
+ */
82
+ showError(title: string, message: string): void;
83
+ }
84
+ export {};
@@ -0,0 +1,406 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TransactionModal = void 0;
4
+ const Modal_1 = require("./Modal");
5
+ const icons_1 = require("./icons");
6
+ /**
7
+ * Transaction confirmation modal
8
+ */
9
+ class TransactionModal extends Modal_1.Modal {
10
+ txOptions;
11
+ state;
12
+ actions;
13
+ constructor(options) {
14
+ super({
15
+ ...options,
16
+ ariaLabel: "Transaction confirmation",
17
+ });
18
+ this.txOptions = {
19
+ ...this.options,
20
+ transaction: options.transaction,
21
+ walletName: options.walletName,
22
+ walletIcon: options.walletIcon ?? "",
23
+ receiverId: options.receiverId,
24
+ onConfirm: options.onConfirm,
25
+ onReject: options.onReject,
26
+ estimatedGas: options.estimatedGas ?? "~0.001 NEAR",
27
+ estimatedDeposit: options.estimatedDeposit ?? "0 NEAR",
28
+ };
29
+ this.state = {
30
+ view: "review",
31
+ error: null,
32
+ };
33
+ this.actions = this.parseActions(options.transaction);
34
+ }
35
+ /**
36
+ * Parse transaction actions for display
37
+ */
38
+ parseActions(tx) {
39
+ if (!tx.actions)
40
+ return [];
41
+ const results = [];
42
+ for (const action of tx.actions) {
43
+ // Handle both string and object action formats
44
+ if (typeof action === "string") {
45
+ results.push({
46
+ type: action,
47
+ title: action,
48
+ description: "Transaction action",
49
+ });
50
+ continue;
51
+ }
52
+ const actionType = Object.keys(action)[0];
53
+ const actionData = action[actionType];
54
+ switch (actionType) {
55
+ case "FunctionCall":
56
+ case "functionCall": {
57
+ const fc = actionData;
58
+ const details = {};
59
+ if (fc.deposit && fc.deposit !== "0")
60
+ details["Deposit"] = this.formatNear(fc.deposit);
61
+ if (fc.gas)
62
+ details["Gas"] = this.formatGas(fc.gas);
63
+ results.push({
64
+ type: "Function Call",
65
+ title: fc.methodName ?? "Function Call",
66
+ description: `Call method on ${this.txOptions.receiverId}`,
67
+ details: Object.keys(details).length > 0 ? details : undefined,
68
+ });
69
+ break;
70
+ }
71
+ case "Transfer":
72
+ case "transfer": {
73
+ const t = actionData;
74
+ results.push({
75
+ type: "Transfer",
76
+ title: "Transfer NEAR",
77
+ description: `Send to ${this.txOptions.receiverId}`,
78
+ details: {
79
+ Amount: this.formatNear(t.deposit ?? "0"),
80
+ },
81
+ });
82
+ break;
83
+ }
84
+ case "AddKey":
85
+ case "addKey":
86
+ results.push({
87
+ type: "Add Key",
88
+ title: "Add Access Key",
89
+ description: "Add a new access key to your account",
90
+ });
91
+ break;
92
+ case "DeleteKey":
93
+ case "deleteKey":
94
+ results.push({
95
+ type: "Delete Key",
96
+ title: "Delete Access Key",
97
+ description: "Remove an access key from your account",
98
+ });
99
+ break;
100
+ case "CreateAccount":
101
+ case "createAccount":
102
+ results.push({
103
+ type: "Create Account",
104
+ title: "Create Account",
105
+ description: `Create new account: ${this.txOptions.receiverId}`,
106
+ });
107
+ break;
108
+ case "DeleteAccount":
109
+ case "deleteAccount":
110
+ results.push({
111
+ type: "Delete Account",
112
+ title: "⚠️ Delete Account",
113
+ description: "Permanently delete this account",
114
+ });
115
+ break;
116
+ case "DeployContract":
117
+ case "deployContract":
118
+ results.push({
119
+ type: "Deploy Contract",
120
+ title: "Deploy Contract",
121
+ description: `Deploy contract to ${this.txOptions.receiverId}`,
122
+ });
123
+ break;
124
+ case "Stake":
125
+ case "stake": {
126
+ const s = actionData;
127
+ results.push({
128
+ type: "Stake",
129
+ title: "Stake NEAR",
130
+ description: "Stake tokens with a validator",
131
+ details: {
132
+ Amount: this.formatNear(s.stake ?? "0"),
133
+ },
134
+ });
135
+ break;
136
+ }
137
+ default:
138
+ results.push({
139
+ type: actionType,
140
+ title: actionType,
141
+ description: "Transaction action",
142
+ });
143
+ }
144
+ }
145
+ return results;
146
+ }
147
+ /**
148
+ * Format yoctoNEAR to NEAR
149
+ */
150
+ formatNear(yocto) {
151
+ try {
152
+ const value = BigInt(yocto);
153
+ const near = Number(value) / 1e24;
154
+ if (near < 0.001 && near > 0) {
155
+ return "< 0.001 NEAR";
156
+ }
157
+ return `${near.toFixed(4)} NEAR`;
158
+ }
159
+ catch {
160
+ return yocto;
161
+ }
162
+ }
163
+ /**
164
+ * Format gas units to TGas
165
+ */
166
+ formatGas(gas) {
167
+ try {
168
+ const value = BigInt(gas);
169
+ const tgas = Number(value) / 1e12;
170
+ return `${tgas.toFixed(0)} TGas`;
171
+ }
172
+ catch {
173
+ return gas;
174
+ }
175
+ }
176
+ render() {
177
+ return `
178
+ <div class="nc-modal-overlay">
179
+ <div class="nc-modal">
180
+ ${this.renderHeader()}
181
+ ${this.renderBody()}
182
+ ${this.renderFooter()}
183
+ </div>
184
+ </div>
185
+ `;
186
+ }
187
+ renderHeader() {
188
+ const { view } = this.state;
189
+ let title = "Review Transaction";
190
+ if (view === "signing")
191
+ title = "Signing...";
192
+ if (view === "success")
193
+ title = "Transaction Sent";
194
+ if (view === "error")
195
+ title = "Transaction Failed";
196
+ return `
197
+ <div class="nc-header">
198
+ <h2 class="nc-header-title">${title}</h2>
199
+ <button class="nc-header-btn nc-header-btn--close" aria-label="Close">${icons_1.icons.close}</button>
200
+ </div>
201
+ `;
202
+ }
203
+ renderBody() {
204
+ switch (this.state.view) {
205
+ case "review":
206
+ return this.renderReview();
207
+ case "signing":
208
+ return this.renderSigning();
209
+ case "success":
210
+ return this.renderSuccess();
211
+ case "error":
212
+ return this.renderError();
213
+ default:
214
+ return this.renderReview();
215
+ }
216
+ }
217
+ renderReview() {
218
+ const { walletName, walletIcon, receiverId, estimatedGas, estimatedDeposit } = this.txOptions;
219
+ return `
220
+ <div class="nc-body">
221
+ <div class="nc-tx-wallet">
222
+ ${walletIcon ? `<img class="nc-tx-wallet-icon" src="${walletIcon}" alt="" />` : ""}
223
+ <span class="nc-tx-wallet-name">${walletName}</span>
224
+ </div>
225
+
226
+ <div class="nc-tx-target">
227
+ <span class="nc-tx-target-label">To</span>
228
+ <span class="nc-tx-target-value">${receiverId}</span>
229
+ </div>
230
+
231
+ <div class="nc-tx-actions">
232
+ ${this.actions.map((action) => this.renderAction(action)).join("")}
233
+ </div>
234
+
235
+ <div class="nc-tx-summary">
236
+ <div class="nc-tx-summary-row">
237
+ <span class="nc-tx-summary-label">Estimated Gas</span>
238
+ <span class="nc-tx-summary-value">${estimatedGas}</span>
239
+ </div>
240
+ ${estimatedDeposit !== "0 NEAR"
241
+ ? `
242
+ <div class="nc-tx-summary-row">
243
+ <span class="nc-tx-summary-label">Total Deposit</span>
244
+ <span class="nc-tx-summary-value nc-tx-summary-value--highlight">${estimatedDeposit}</span>
245
+ </div>
246
+ `
247
+ : ""}
248
+ </div>
249
+ </div>
250
+ `;
251
+ }
252
+ renderAction(action) {
253
+ const detailsHtml = action.details
254
+ ? Object.entries(action.details)
255
+ .map(([key, value]) => `
256
+ <div class="nc-tx-action-detail">
257
+ <span class="nc-tx-action-detail-key">${key}</span>
258
+ <span class="nc-tx-action-detail-value">${value}</span>
259
+ </div>
260
+ `)
261
+ .join("")
262
+ : "";
263
+ return `
264
+ <div class="nc-tx-action">
265
+ <div class="nc-tx-action-header">
266
+ <span class="nc-tx-action-type">${action.type}</span>
267
+ <span class="nc-tx-action-title">${action.title}</span>
268
+ </div>
269
+ <p class="nc-tx-action-desc">${action.description}</p>
270
+ ${detailsHtml ? `<div class="nc-tx-action-details">${detailsHtml}</div>` : ""}
271
+ </div>
272
+ `;
273
+ }
274
+ renderSigning() {
275
+ const { walletName, walletIcon } = this.txOptions;
276
+ return `
277
+ <div class="nc-body">
278
+ <div class="nc-connecting">
279
+ ${walletIcon ? `<img class="nc-connecting-icon" src="${walletIcon}" alt="${walletName}" />` : '<div class="nc-spinner"></div>'}
280
+ <p class="nc-connecting-title">Confirm in ${walletName}</p>
281
+ <p class="nc-connecting-message">
282
+ Please review and approve the transaction in your wallet
283
+ </p>
284
+ </div>
285
+ </div>
286
+ `;
287
+ }
288
+ renderSuccess() {
289
+ const { txHash } = this.state;
290
+ const explorerUrl = `https://nearblocks.io/txns/${txHash}`;
291
+ return `
292
+ <div class="nc-body">
293
+ <div class="nc-tx-result nc-tx-result--success">
294
+ <div class="nc-tx-result-icon">${icons_1.icons.success}</div>
295
+ <p class="nc-tx-result-title">Transaction Sent</p>
296
+ <p class="nc-tx-result-message">Your transaction has been submitted to the network</p>
297
+ ${txHash
298
+ ? `
299
+ <a
300
+ class="nc-btn nc-btn--secondary"
301
+ href="${explorerUrl}"
302
+ target="_blank"
303
+ rel="noopener noreferrer"
304
+ >
305
+ View on Explorer ${icons_1.icons.external}
306
+ </a>
307
+ `
308
+ : ""}
309
+ </div>
310
+ </div>
311
+ `;
312
+ }
313
+ renderError() {
314
+ const { error } = this.state;
315
+ if (!error)
316
+ return "";
317
+ return `
318
+ <div class="nc-body">
319
+ <div class="nc-error">
320
+ <div class="nc-error-icon">${icons_1.icons.error}</div>
321
+ <p class="nc-error-title">${error.title}</p>
322
+ <p class="nc-error-message">${error.message}</p>
323
+ <div class="nc-error-actions">
324
+ <button class="nc-btn nc-btn--secondary" data-action="retry">
325
+ Try Again
326
+ </button>
327
+ <button class="nc-btn nc-btn--primary" data-action="close">
328
+ Close
329
+ </button>
330
+ </div>
331
+ </div>
332
+ </div>
333
+ `;
334
+ }
335
+ renderFooter() {
336
+ const { view } = this.state;
337
+ if (view !== "review")
338
+ return "";
339
+ return `
340
+ <div class="nc-footer" style="justify-content: stretch; gap: var(--nc-spacing-sm);">
341
+ <button class="nc-btn nc-btn--secondary" data-action="reject" style="flex: 1;">
342
+ Reject
343
+ </button>
344
+ <button class="nc-btn nc-btn--primary" data-action="confirm" style="flex: 1;">
345
+ Confirm
346
+ </button>
347
+ </div>
348
+ `;
349
+ }
350
+ setupHandlers() {
351
+ super.setupHandlers();
352
+ // Action buttons
353
+ this.root.querySelectorAll("[data-action]").forEach((btn) => {
354
+ this.addListener(btn, "click", () => {
355
+ const action = btn.getAttribute("data-action");
356
+ this.handleAction(action);
357
+ });
358
+ });
359
+ }
360
+ handleAction(action) {
361
+ switch (action) {
362
+ case "confirm":
363
+ this.state.view = "signing";
364
+ this.update();
365
+ this.txOptions.onConfirm();
366
+ break;
367
+ case "reject":
368
+ this.txOptions.onReject();
369
+ this.close();
370
+ break;
371
+ case "retry":
372
+ this.state.view = "review";
373
+ this.state.error = null;
374
+ this.update();
375
+ break;
376
+ case "close":
377
+ this.close();
378
+ break;
379
+ }
380
+ }
381
+ /**
382
+ * Show signing state
383
+ */
384
+ showSigning() {
385
+ this.state.view = "signing";
386
+ this.update();
387
+ }
388
+ /**
389
+ * Show success state
390
+ */
391
+ showSuccess(txHash) {
392
+ this.state.view = "success";
393
+ this.state.txHash = txHash;
394
+ this.update();
395
+ }
396
+ /**
397
+ * Show error state
398
+ */
399
+ showError(title, message) {
400
+ this.state.view = "error";
401
+ this.state.error = { title, message };
402
+ this.update();
403
+ }
404
+ }
405
+ exports.TransactionModal = TransactionModal;
406
+ //# sourceMappingURL=TransactionModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransactionModal.js","sourceRoot":"","sources":["../../src/ui/TransactionModal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ import { Modal, ModalOptions } from "./Modal";
2
+ import { WalletManifest } from "../types";
3
+ /**
4
+ * Wallet categories for grouping
5
+ */
6
+ export type WalletCategory = "recent" | "browser" | "mobile" | "hardware" | "other";
7
+ /**
8
+ * Extended wallet info with UI metadata
9
+ */
10
+ export interface WalletUIInfo extends WalletManifest {
11
+ category?: WalletCategory;
12
+ isInstalled?: boolean;
13
+ isRecent?: boolean;
14
+ }
15
+ /**
16
+ * View states for the modal
17
+ */
18
+ type ModalView = "list" | "connecting" | "error" | "help" | "settings";
19
+ /**
20
+ * Wallet selector modal options
21
+ */
22
+ export interface WalletSelectorOptions extends ModalOptions {
23
+ wallets: WalletManifest[];
24
+ recentWalletIds?: string[];
25
+ showSearch?: boolean;
26
+ showHelp?: boolean;
27
+ groupByCategory?: boolean;
28
+ onSelect: (walletId: string) => void;
29
+ onAddDebugWallet?: (manifest: string) => Promise<WalletManifest>;
30
+ onRemoveDebugWallet?: (walletId: string) => Promise<void>;
31
+ }
32
+ /**
33
+ * Modal state
34
+ */
35
+ interface ModalState {
36
+ view: ModalView;
37
+ wallets: WalletUIInfo[];
38
+ filteredWallets: WalletUIInfo[];
39
+ searchQuery: string;
40
+ selectedWallet: WalletUIInfo | null;
41
+ error: {
42
+ title: string;
43
+ message: string;
44
+ } | null;
45
+ }
46
+ /**
47
+ * Wallet selector modal component
48
+ */
49
+ export declare class WalletSelectorModal extends Modal {
50
+ protected readonly selectorOptions: Required<WalletSelectorOptions>;
51
+ protected state: ModalState;
52
+ constructor(options: WalletSelectorOptions);
53
+ /**
54
+ * Process wallets with categories and metadata
55
+ */
56
+ private processWallets;
57
+ /**
58
+ * Categorize wallet by type
59
+ */
60
+ private categorizeWallet;
61
+ /**
62
+ * Filter wallets by search query
63
+ */
64
+ private filterWallets;
65
+ /**
66
+ * Group wallets by category
67
+ */
68
+ private groupWallets;
69
+ /**
70
+ * Get category display name
71
+ */
72
+ private getCategoryName;
73
+ protected render(): string;
74
+ private renderHeader;
75
+ private renderBody;
76
+ private renderWalletList;
77
+ private renderWalletItem;
78
+ private getWalletHost;
79
+ private renderConnecting;
80
+ private renderError;
81
+ private renderHelp;
82
+ private renderSettings;
83
+ private renderFooter;
84
+ protected setupHandlers(): void;
85
+ private selectWallet;
86
+ private handleAction;
87
+ private addDebugWallet;
88
+ /**
89
+ * Show error state
90
+ */
91
+ showError(title: string, message: string): void;
92
+ /**
93
+ * Show connecting state for a wallet
94
+ */
95
+ showConnecting(walletId: string): void;
96
+ }
97
+ export {};