@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,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 {};
|