@mysten-incubation/dev-wallet 0.0.1 → 0.2.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/CHANGELOG.md +25 -0
- package/LICENSE +189 -0
- package/dist/_virtual/{_@oxc-project_runtime@0.107.0 → _@oxc-project_runtime@0.127.0}/helpers/decorate.mjs +2 -3
- package/dist/adapters/base-adapter.mjs +6 -7
- package/dist/adapters/base-adapter.mjs.map +1 -1
- package/dist/adapters/browser.d.mts +4 -1
- package/dist/adapters/browser.mjs +4 -2
- package/dist/adapters/build-managed-account.mjs +8 -10
- package/dist/adapters/build-managed-account.mjs.map +1 -1
- package/dist/adapters/devstack-adapter.d.mts +111 -0
- package/dist/adapters/devstack-adapter.d.mts.map +1 -0
- package/dist/adapters/devstack-adapter.mjs +224 -0
- package/dist/adapters/devstack-adapter.mjs.map +1 -0
- package/dist/adapters/devstack-paths.d.mts +12 -0
- package/dist/adapters/devstack-paths.d.mts.map +1 -0
- package/dist/adapters/devstack-paths.mjs +12 -0
- package/dist/adapters/devstack-paths.mjs.map +1 -0
- package/dist/adapters/fork-relay.d.mts +109 -0
- package/dist/adapters/fork-relay.d.mts.map +1 -0
- package/dist/adapters/fork-relay.mjs +208 -0
- package/dist/adapters/fork-relay.mjs.map +1 -0
- package/dist/adapters/idb-store.mjs +12 -16
- package/dist/adapters/idb-store.mjs.map +1 -1
- package/dist/adapters/in-memory-adapter.mjs +4 -10
- package/dist/adapters/in-memory-adapter.mjs.map +1 -1
- package/dist/adapters/passkey-adapter.mjs +4 -12
- package/dist/adapters/passkey-adapter.mjs.map +1 -1
- package/dist/adapters/remote-cli-adapter.mjs +37 -72
- package/dist/adapters/remote-cli-adapter.mjs.map +1 -1
- package/dist/adapters/webcrypto-adapter.mjs +2 -4
- package/dist/adapters/webcrypto-adapter.mjs.map +1 -1
- package/dist/bin/cli.mjs +9 -22
- package/dist/bin/cli.mjs.map +1 -1
- package/dist/client/dev-wallet-client.mjs +13 -28
- package/dist/client/dev-wallet-client.mjs.map +1 -1
- package/dist/client/index.mjs +1 -2
- package/dist/client/request-handler.mjs +36 -42
- package/dist/client/request-handler.mjs.map +1 -1
- package/dist/index.mjs +1 -2
- package/dist/react/components.d.mts +9 -9
- package/dist/react/components.d.mts.map +1 -1
- package/dist/react/components.mjs +2 -5
- package/dist/react/components.mjs.map +1 -1
- package/dist/react/context.d.mts +3 -3
- package/dist/react/context.d.mts.map +1 -1
- package/dist/react/context.mjs +3 -8
- package/dist/react/context.mjs.map +1 -1
- package/dist/react/index.mjs +1 -2
- package/dist/react/useDevWallet.d.mts +3 -0
- package/dist/react/useDevWallet.d.mts.map +1 -1
- package/dist/react/useDevWallet.mjs +9 -14
- package/dist/react/useDevWallet.mjs.map +1 -1
- package/dist/server/cli-signing-middleware.mjs +7 -20
- package/dist/server/cli-signing-middleware.mjs.map +1 -1
- package/dist/server/index.mjs +1 -2
- package/dist/standalone/assets/{in-memory-adapter-CBF4h2KD.js → in-memory-adapter-qRkNfj9O.js} +1 -1
- package/dist/standalone/assets/main-DDltQnzR.js +3954 -0
- package/dist/standalone/assets/{webcrypto-adapter-DysAubFb.js → webcrypto-adapter-FejcrL9x.js} +1 -1
- package/dist/standalone/index.html +11 -12
- package/dist/ui/copy-controller.mjs +3 -3
- package/dist/ui/copy-controller.mjs.map +1 -1
- package/dist/ui/dev-wallet-account-selector.d.mts +3 -4
- package/dist/ui/dev-wallet-account-selector.d.mts.map +1 -1
- package/dist/ui/dev-wallet-account-selector.mjs +48 -25
- package/dist/ui/dev-wallet-account-selector.mjs.map +1 -1
- package/dist/ui/dev-wallet-accounts.d.mts +9 -4
- package/dist/ui/dev-wallet-accounts.d.mts.map +1 -1
- package/dist/ui/dev-wallet-accounts.mjs +62 -140
- package/dist/ui/dev-wallet-accounts.mjs.map +1 -1
- package/dist/ui/dev-wallet-balances.d.mts +10 -3
- package/dist/ui/dev-wallet-balances.d.mts.map +1 -1
- package/dist/ui/dev-wallet-balances.mjs +241 -43
- package/dist/ui/dev-wallet-balances.mjs.map +1 -1
- package/dist/ui/dev-wallet-connect.d.mts +3 -3
- package/dist/ui/dev-wallet-connect.d.mts.map +1 -1
- package/dist/ui/dev-wallet-connect.mjs +24 -16
- package/dist/ui/dev-wallet-connect.mjs.map +1 -1
- package/dist/ui/dev-wallet-dropdown.d.mts +3 -3
- package/dist/ui/dev-wallet-dropdown.d.mts.map +1 -1
- package/dist/ui/dev-wallet-dropdown.mjs +37 -47
- package/dist/ui/dev-wallet-dropdown.mjs.map +1 -1
- package/dist/ui/dev-wallet-fork-panel.d.mts +43 -0
- package/dist/ui/dev-wallet-fork-panel.d.mts.map +1 -0
- package/dist/ui/dev-wallet-fork-panel.mjs +500 -0
- package/dist/ui/dev-wallet-fork-panel.mjs.map +1 -0
- package/dist/ui/dev-wallet-network-badge.d.mts +3 -4
- package/dist/ui/dev-wallet-network-badge.d.mts.map +1 -1
- package/dist/ui/dev-wallet-network-badge.mjs +52 -21
- package/dist/ui/dev-wallet-network-badge.mjs.map +1 -1
- package/dist/ui/dev-wallet-new-account.d.mts +3 -4
- package/dist/ui/dev-wallet-new-account.d.mts.map +1 -1
- package/dist/ui/dev-wallet-new-account.mjs +31 -105
- package/dist/ui/dev-wallet-new-account.mjs.map +1 -1
- package/dist/ui/dev-wallet-objects.d.mts +3 -3
- package/dist/ui/dev-wallet-objects.d.mts.map +1 -1
- package/dist/ui/dev-wallet-objects.mjs +76 -39
- package/dist/ui/dev-wallet-objects.mjs.map +1 -1
- package/dist/ui/dev-wallet-panel.d.mts +24 -4
- package/dist/ui/dev-wallet-panel.d.mts.map +1 -1
- package/dist/ui/dev-wallet-panel.mjs +247 -64
- package/dist/ui/dev-wallet-panel.mjs.map +1 -1
- package/dist/ui/dev-wallet-popup.d.mts +3 -5
- package/dist/ui/dev-wallet-popup.d.mts.map +1 -1
- package/dist/ui/dev-wallet-popup.mjs +19 -15
- package/dist/ui/dev-wallet-popup.mjs.map +1 -1
- package/dist/ui/dev-wallet-settings.d.mts +3 -4
- package/dist/ui/dev-wallet-settings.d.mts.map +1 -1
- package/dist/ui/dev-wallet-settings.mjs +149 -97
- package/dist/ui/dev-wallet-settings.mjs.map +1 -1
- package/dist/ui/dev-wallet-signing-modal.d.mts +11 -4
- package/dist/ui/dev-wallet-signing-modal.d.mts.map +1 -1
- package/dist/ui/dev-wallet-signing-modal.mjs +46 -18
- package/dist/ui/dev-wallet-signing-modal.mjs.map +1 -1
- package/dist/ui/dev-wallet-signing.d.mts +9 -3
- package/dist/ui/dev-wallet-signing.d.mts.map +1 -1
- package/dist/ui/dev-wallet-signing.mjs +119 -130
- package/dist/ui/dev-wallet-signing.mjs.map +1 -1
- package/dist/ui/dev-wallet-standalone.d.mts +8 -3
- package/dist/ui/dev-wallet-standalone.d.mts.map +1 -1
- package/dist/ui/dev-wallet-standalone.mjs +303 -38
- package/dist/ui/dev-wallet-standalone.mjs.map +1 -1
- package/dist/ui/dev-wallet-tab-bar.d.mts +13 -5
- package/dist/ui/dev-wallet-tab-bar.d.mts.map +1 -1
- package/dist/ui/dev-wallet-tab-bar.mjs +143 -82
- package/dist/ui/dev-wallet-tab-bar.mjs.map +1 -1
- package/dist/ui/index.d.mts +3 -2
- package/dist/ui/index.mjs +2 -2
- package/dist/ui/mount.d.mts +14 -1
- package/dist/ui/mount.d.mts.map +1 -1
- package/dist/ui/mount.mjs +5 -2
- package/dist/ui/mount.mjs.map +1 -1
- package/dist/ui/styles.mjs +428 -66
- package/dist/ui/styles.mjs.map +1 -1
- package/dist/ui/transaction-analyzer.mjs +19 -30
- package/dist/ui/transaction-analyzer.mjs.map +1 -1
- package/dist/ui/utils.d.mts +59 -0
- package/dist/ui/utils.d.mts.map +1 -0
- package/dist/ui/utils.mjs +42 -15
- package/dist/ui/utils.mjs.map +1 -1
- package/dist/ui/wallet-controller.mjs +89 -20
- package/dist/ui/wallet-controller.mjs.map +1 -1
- package/dist/wallet/constants.d.mts +9 -0
- package/dist/wallet/constants.d.mts.map +1 -0
- package/dist/wallet/constants.mjs +1 -1
- package/dist/wallet/dev-wallet.mjs +42 -99
- package/dist/wallet/dev-wallet.mjs.map +1 -1
- package/dist/wallet/initializer.d.mts +3 -0
- package/dist/wallet/initializer.d.mts.map +1 -1
- package/dist/wallet/initializer.mjs +9 -14
- package/dist/wallet/initializer.mjs.map +1 -1
- package/dist/wallet/signing.mjs +8 -21
- package/dist/wallet/signing.mjs.map +1 -1
- package/package.json +8 -6
- package/src/adapters/browser.ts +21 -0
- package/src/adapters/devstack-adapter.ts +342 -0
- package/src/adapters/devstack-paths.ts +16 -0
- package/src/adapters/fork-relay.ts +321 -0
- package/src/app/index.html +10 -11
- package/src/react/useDevWallet.ts +5 -1
- package/src/ui/dev-wallet-account-selector.ts +44 -17
- package/src/ui/dev-wallet-accounts.ts +87 -124
- package/src/ui/dev-wallet-balances.ts +248 -27
- package/src/ui/dev-wallet-connect.ts +19 -8
- package/src/ui/dev-wallet-dropdown.ts +7 -5
- package/src/ui/dev-wallet-fork-panel.ts +591 -0
- package/src/ui/dev-wallet-network-badge.ts +49 -10
- package/src/ui/dev-wallet-new-account.ts +21 -62
- package/src/ui/dev-wallet-objects.ts +59 -19
- package/src/ui/dev-wallet-panel.ts +261 -42
- package/src/ui/dev-wallet-popup.ts +12 -6
- package/src/ui/dev-wallet-settings.ts +159 -94
- package/src/ui/dev-wallet-signing-modal.ts +47 -7
- package/src/ui/dev-wallet-signing.ts +124 -97
- package/src/ui/dev-wallet-standalone.ts +310 -22
- package/src/ui/dev-wallet-tab-bar.ts +132 -70
- package/src/ui/index.ts +3 -0
- package/src/ui/mount.ts +23 -1
- package/src/ui/styles.ts +434 -58
- package/src/ui/utils.ts +66 -0
- package/src/ui/wallet-controller.ts +103 -5
- package/src/wallet/initializer.ts +7 -1
- package/dist/standalone/assets/main-VE4olb-Q.js +0 -2841
|
@@ -1,53 +1,61 @@
|
|
|
1
1
|
import { sharedStyles } from "./styles.mjs";
|
|
2
2
|
import { emitEvent } from "./utils.mjs";
|
|
3
|
-
import { __decorate } from "../_virtual/_@oxc-project_runtime@0.
|
|
3
|
+
import { __decorate } from "../_virtual/_@oxc-project_runtime@0.127.0/helpers/decorate.mjs";
|
|
4
4
|
import "./dev-wallet-signing.mjs";
|
|
5
5
|
import { LitElement, css, html, nothing } from "lit";
|
|
6
6
|
import { customElement, property } from "lit/decorators.js";
|
|
7
|
-
|
|
8
7
|
//#region src/ui/dev-wallet-signing-modal.ts
|
|
9
|
-
let DevWalletSigningModal = class DevWalletSigningModal
|
|
8
|
+
let DevWalletSigningModal = class DevWalletSigningModal extends LitElement {
|
|
10
9
|
constructor(..._args) {
|
|
11
10
|
super(..._args);
|
|
12
11
|
this.request = null;
|
|
13
12
|
this.client = null;
|
|
13
|
+
this.coins = null;
|
|
14
14
|
this.walletName = "Dev Wallet";
|
|
15
|
+
this.impersonation = false;
|
|
16
|
+
this.#handleDialogCancel = (e) => {
|
|
17
|
+
e.preventDefault();
|
|
18
|
+
emitEvent(this, "reject");
|
|
19
|
+
};
|
|
15
20
|
}
|
|
16
21
|
static {
|
|
17
22
|
this.styles = [sharedStyles, css`
|
|
18
23
|
:host {
|
|
19
24
|
display: block;
|
|
25
|
+
pointer-events: auto;
|
|
20
26
|
}
|
|
21
27
|
|
|
22
28
|
dialog {
|
|
23
|
-
width:
|
|
29
|
+
width: 440px;
|
|
24
30
|
max-width: calc(100vw - 32px);
|
|
25
|
-
max-height: min(
|
|
31
|
+
max-height: min(680px, 86vh);
|
|
26
32
|
border-radius: var(--dev-wallet-radius-xl);
|
|
27
|
-
background: var(--dev-wallet-
|
|
28
|
-
border: 1px solid var(--dev-wallet-border);
|
|
33
|
+
background: var(--dev-wallet-surface);
|
|
34
|
+
border: 1px solid var(--dev-wallet-border-2);
|
|
29
35
|
box-shadow: var(--dev-wallet-shadow-lg);
|
|
30
36
|
overflow: hidden;
|
|
31
37
|
display: flex;
|
|
32
38
|
flex-direction: column;
|
|
33
39
|
padding: 0;
|
|
34
40
|
color: inherit;
|
|
41
|
+
pointer-events: auto;
|
|
35
42
|
}
|
|
36
43
|
|
|
37
44
|
dialog::backdrop {
|
|
38
|
-
background:
|
|
45
|
+
background: rgba(2, 6, 14, 0.55);
|
|
39
46
|
}
|
|
40
47
|
|
|
41
48
|
.modal-header {
|
|
42
49
|
display: flex;
|
|
43
50
|
justify-content: space-between;
|
|
44
51
|
align-items: center;
|
|
45
|
-
padding: 14px
|
|
52
|
+
padding: 12px 14px;
|
|
46
53
|
border-bottom: 1px solid var(--dev-wallet-border);
|
|
54
|
+
background: var(--dev-wallet-bg-1);
|
|
47
55
|
}
|
|
48
56
|
|
|
49
57
|
.modal-title {
|
|
50
|
-
font-size:
|
|
58
|
+
font-size: 13px;
|
|
51
59
|
font-weight: var(--dev-wallet-font-weight-semibold);
|
|
52
60
|
color: var(--dev-wallet-foreground);
|
|
53
61
|
}
|
|
@@ -58,17 +66,29 @@ let DevWalletSigningModal = class DevWalletSigningModal$1 extends LitElement {
|
|
|
58
66
|
display: flex;
|
|
59
67
|
flex-direction: column;
|
|
60
68
|
}
|
|
69
|
+
|
|
70
|
+
/* Phase 4 P4.19 — footnote rendered when the active account
|
|
71
|
+
is in fork-mode impersonation. Visually distinct so users
|
|
72
|
+
don't conflate this with a real signature flow. */
|
|
73
|
+
.fork-footnote {
|
|
74
|
+
padding: 8px 16px;
|
|
75
|
+
background: rgba(234, 179, 8, 0.12);
|
|
76
|
+
border-top: 1px solid rgba(234, 179, 8, 0.35);
|
|
77
|
+
font-size: 11px;
|
|
78
|
+
color: var(--dev-wallet-muted-foreground);
|
|
79
|
+
line-height: 1.4;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.fork-footnote strong {
|
|
83
|
+
color: #92400e;
|
|
84
|
+
font-weight: var(--dev-wallet-font-weight-semibold);
|
|
85
|
+
}
|
|
61
86
|
`];
|
|
62
87
|
}
|
|
63
|
-
#handleDialogCancel
|
|
64
|
-
e.preventDefault();
|
|
65
|
-
emitEvent(this, "reject");
|
|
66
|
-
};
|
|
88
|
+
#handleDialogCancel;
|
|
67
89
|
firstUpdated() {
|
|
68
90
|
const dialog = this.shadowRoot?.querySelector("dialog");
|
|
69
|
-
if (dialog && !dialog.open)
|
|
70
|
-
dialog.showModal();
|
|
71
|
-
}
|
|
91
|
+
if (dialog && !dialog.open) dialog.showModal();
|
|
72
92
|
dialog?.addEventListener("cancel", this.#handleDialogCancel);
|
|
73
93
|
}
|
|
74
94
|
disconnectedCallback() {
|
|
@@ -89,10 +109,16 @@ let DevWalletSigningModal = class DevWalletSigningModal$1 extends LitElement {
|
|
|
89
109
|
exportparts="approve-button: signing-approve-button, reject-button: signing-reject-button, request-type: signing-request-type, empty-state: signing-empty-state, error-message: signing-error-message, footer: signing-footer"
|
|
90
110
|
.request=${this.request}
|
|
91
111
|
.client=${this.client}
|
|
112
|
+
.coins=${this.coins}
|
|
92
113
|
@approve=${this.#handleApprove}
|
|
93
114
|
@reject=${this.#handleReject}
|
|
94
115
|
></dev-wallet-signing>
|
|
95
116
|
</div>
|
|
117
|
+
${this.impersonation ? html`<div class="fork-footnote" part="fork-footnote">
|
|
118
|
+
<strong>Fork-only:</strong> this account is in <em>impersonation</em> mode. The fork
|
|
119
|
+
accepts the transaction with an empty signature (no real private key signs it), so it
|
|
120
|
+
would be rejected by mainnet / testnet / devnet validators.
|
|
121
|
+
</div>` : nothing}
|
|
96
122
|
</dialog>
|
|
97
123
|
`;
|
|
98
124
|
}
|
|
@@ -107,9 +133,11 @@ let DevWalletSigningModal = class DevWalletSigningModal$1 extends LitElement {
|
|
|
107
133
|
};
|
|
108
134
|
__decorate([property({ attribute: false })], DevWalletSigningModal.prototype, "request", void 0);
|
|
109
135
|
__decorate([property({ attribute: false })], DevWalletSigningModal.prototype, "client", void 0);
|
|
136
|
+
__decorate([property({ attribute: false })], DevWalletSigningModal.prototype, "coins", void 0);
|
|
110
137
|
__decorate([property({ type: String })], DevWalletSigningModal.prototype, "walletName", void 0);
|
|
138
|
+
__decorate([property({ type: Boolean })], DevWalletSigningModal.prototype, "impersonation", void 0);
|
|
111
139
|
DevWalletSigningModal = __decorate([customElement("dev-wallet-signing-modal")], DevWalletSigningModal);
|
|
112
|
-
|
|
113
140
|
//#endregion
|
|
114
141
|
export { DevWalletSigningModal };
|
|
142
|
+
|
|
115
143
|
//# sourceMappingURL=dev-wallet-signing-modal.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev-wallet-signing-modal.mjs","names":["
|
|
1
|
+
{"version":3,"file":"dev-wallet-signing-modal.mjs","names":["#handleDialogCancel","#handleApprove","#handleReject"],"sources":["../../src/ui/dev-wallet-signing-modal.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ClientWithCoreApi } from '@mysten/sui/client';\nimport { css, html, LitElement, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport type { PendingSigningRequest } from '../wallet/dev-wallet.js';\nimport { sharedStyles } from './styles.js';\nimport type { CoinRecord } from './utils.js';\nimport { emitEvent } from './utils.js';\nimport './dev-wallet-signing.js';\n\n/**\n * A centered modal overlay for signing requests.\n *\n * Renders a backdrop and centered dialog containing the\n * `<dev-wallet-signing>` component. Dispatches `approve` and\n * `reject` events to the parent.\n */\n@customElement('dev-wallet-signing-modal')\nexport class DevWalletSigningModal extends LitElement {\n\tstatic override styles = [\n\t\tsharedStyles,\n\t\tcss`\n\t\t\t:host {\n\t\t\t\tdisplay: block;\n\t\t\t\tpointer-events: auto;\n\t\t\t}\n\n\t\t\tdialog {\n\t\t\t\twidth: 440px;\n\t\t\t\tmax-width: calc(100vw - 32px);\n\t\t\t\tmax-height: min(680px, 86vh);\n\t\t\t\tborder-radius: var(--dev-wallet-radius-xl);\n\t\t\t\tbackground: var(--dev-wallet-surface);\n\t\t\t\tborder: 1px solid var(--dev-wallet-border-2);\n\t\t\t\tbox-shadow: var(--dev-wallet-shadow-lg);\n\t\t\t\toverflow: hidden;\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: column;\n\t\t\t\tpadding: 0;\n\t\t\t\tcolor: inherit;\n\t\t\t\tpointer-events: auto;\n\t\t\t}\n\n\t\t\tdialog::backdrop {\n\t\t\t\tbackground: rgba(2, 6, 14, 0.55);\n\t\t\t}\n\n\t\t\t.modal-header {\n\t\t\t\tdisplay: flex;\n\t\t\t\tjustify-content: space-between;\n\t\t\t\talign-items: center;\n\t\t\t\tpadding: 12px 14px;\n\t\t\t\tborder-bottom: 1px solid var(--dev-wallet-border);\n\t\t\t\tbackground: var(--dev-wallet-bg-1);\n\t\t\t}\n\n\t\t\t.modal-title {\n\t\t\t\tfont-size: 13px;\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-semibold);\n\t\t\t\tcolor: var(--dev-wallet-foreground);\n\t\t\t}\n\n\t\t\t.modal-body {\n\t\t\t\tflex: 1;\n\t\t\t\toverflow: hidden;\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: column;\n\t\t\t}\n\n\t\t\t/* Phase 4 P4.19 — footnote rendered when the active account\n\t\t\t is in fork-mode impersonation. Visually distinct so users\n\t\t\t don't conflate this with a real signature flow. */\n\t\t\t.fork-footnote {\n\t\t\t\tpadding: 8px 16px;\n\t\t\t\tbackground: rgba(234, 179, 8, 0.12);\n\t\t\t\tborder-top: 1px solid rgba(234, 179, 8, 0.35);\n\t\t\t\tfont-size: 11px;\n\t\t\t\tcolor: var(--dev-wallet-muted-foreground);\n\t\t\t\tline-height: 1.4;\n\t\t\t}\n\n\t\t\t.fork-footnote strong {\n\t\t\t\tcolor: #92400e;\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-semibold);\n\t\t\t}\n\t\t`,\n\t];\n\n\t@property({ attribute: false })\n\trequest: PendingSigningRequest | null = null;\n\n\t@property({ attribute: false })\n\tclient: ClientWithCoreApi | null = null;\n\n\t/** Pre-seeded coin metadata forwarded to `<dev-wallet-signing>`. See\n\t * the matching property on `DevWalletSigning` for details. */\n\t@property({ attribute: false })\n\tcoins: CoinRecord | null = null;\n\n\t@property({ type: String })\n\twalletName = 'Dev Wallet';\n\n\t/** Phase 4 P4.19 — when the active account's `source === 'impersonate'`,\n\t * the parent flips this on and the modal renders a footnote\n\t * explaining no real signature will be produced. */\n\t@property({ type: Boolean })\n\timpersonation = false;\n\n\t#handleDialogCancel = (e: Event) => {\n\t\te.preventDefault();\n\t\temitEvent(this, 'reject');\n\t};\n\n\toverride firstUpdated() {\n\t\tconst dialog = this.shadowRoot?.querySelector('dialog');\n\t\tif (dialog && !dialog.open) {\n\t\t\tdialog.showModal();\n\t\t}\n\t\tdialog?.addEventListener('cancel', this.#handleDialogCancel);\n\t}\n\n\toverride disconnectedCallback() {\n\t\tsuper.disconnectedCallback();\n\t\tconst dialog = this.shadowRoot?.querySelector('dialog');\n\t\tdialog?.removeEventListener('cancel', this.#handleDialogCancel);\n\t\tif (dialog?.open) dialog.close();\n\t}\n\n\toverride render() {\n\t\tif (!this.request) return nothing;\n\n\t\treturn html`\n\t\t\t<dialog part=\"dialog\">\n\t\t\t\t<div class=\"modal-header\">\n\t\t\t\t\t<span class=\"modal-title\">${this.walletName}</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"modal-body\">\n\t\t\t\t\t<dev-wallet-signing\n\t\t\t\t\t\texportparts=\"approve-button: signing-approve-button, reject-button: signing-reject-button, request-type: signing-request-type, empty-state: signing-empty-state, error-message: signing-error-message, footer: signing-footer\"\n\t\t\t\t\t\t.request=${this.request}\n\t\t\t\t\t\t.client=${this.client}\n\t\t\t\t\t\t.coins=${this.coins}\n\t\t\t\t\t\t@approve=${this.#handleApprove}\n\t\t\t\t\t\t@reject=${this.#handleReject}\n\t\t\t\t\t></dev-wallet-signing>\n\t\t\t\t</div>\n\t\t\t\t${this.impersonation\n\t\t\t\t\t? html`<div class=\"fork-footnote\" part=\"fork-footnote\">\n\t\t\t\t\t\t\t<strong>Fork-only:</strong> this account is in <em>impersonation</em> mode. The fork\n\t\t\t\t\t\t\taccepts the transaction with an empty signature (no real private key signs it), so it\n\t\t\t\t\t\t\twould be rejected by mainnet / testnet / devnet validators.\n\t\t\t\t\t\t</div>`\n\t\t\t\t\t: nothing}\n\t\t\t</dialog>\n\t\t`;\n\t}\n\n\t#handleApprove(e: Event) {\n\t\t// Stop the composed signing event from also reaching the parent\n\t\te.stopPropagation();\n\t\temitEvent(this, 'approve');\n\t}\n\n\t#handleReject(e: Event) {\n\t\te.stopPropagation();\n\t\temitEvent(this, 'reject');\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'dev-wallet-signing-modal': DevWalletSigningModal;\n\t}\n}\n"],"mappings":";;;;;;;AAqBO,IAAA,wBAAA,MAAM,8BAA8B,WAAW;;;iBAuEb;gBAGL;eAKR;oBAGd;uBAMG;8BAEO,MAAa;AACnC,KAAE,gBAAgB;AAClB,aAAU,MAAM,SAAS;;;;gBA3FD,CACxB,cACA,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAiEH;;CAsBD;CAKA,eAAwB;EACvB,MAAM,SAAS,KAAK,YAAY,cAAc,SAAS;AACvD,MAAI,UAAU,CAAC,OAAO,KACrB,QAAO,WAAW;AAEnB,UAAQ,iBAAiB,UAAU,MAAA,mBAAyB;;CAG7D,uBAAgC;AAC/B,QAAM,sBAAsB;EAC5B,MAAM,SAAS,KAAK,YAAY,cAAc,SAAS;AACvD,UAAQ,oBAAoB,UAAU,MAAA,mBAAyB;AAC/D,MAAI,QAAQ,KAAM,QAAO,OAAO;;CAGjC,SAAkB;AACjB,MAAI,CAAC,KAAK,QAAS,QAAO;AAE1B,SAAO,IAAI;;;iCAGoB,KAAK,WAAW;;;;;iBAKhC,KAAK,QAAQ;gBACd,KAAK,OAAO;eACb,KAAK,MAAM;iBACT,MAAA,cAAoB;gBACrB,MAAA,aAAmB;;;MAG7B,KAAK,gBACJ,IAAI;;;;gBAKJ,QAAQ;;;;CAKd,eAAe,GAAU;AAExB,IAAE,iBAAiB;AACnB,YAAU,MAAM,UAAU;;CAG3B,cAAc,GAAU;AACvB,IAAE,iBAAiB;AACnB,YAAU,MAAM,SAAS;;;YA7EzB,SAAS,EAAE,WAAW,OAAO,CAAC,CAAA,EAAA,sBAAA,WAAA,WAAA,KAAA,EAAA;YAG9B,SAAS,EAAE,WAAW,OAAO,CAAC,CAAA,EAAA,sBAAA,WAAA,UAAA,KAAA,EAAA;YAK9B,SAAS,EAAE,WAAW,OAAO,CAAC,CAAA,EAAA,sBAAA,WAAA,SAAA,KAAA,EAAA;YAG9B,SAAS,EAAE,MAAM,QAAQ,CAAC,CAAA,EAAA,sBAAA,WAAA,cAAA,KAAA,EAAA;YAM1B,SAAS,EAAE,MAAM,SAAS,CAAC,CAAA,EAAA,sBAAA,WAAA,iBAAA,KAAA,EAAA;oCAxF5B,cAAc,2BAA2B,CAAA,EAAA,sBAAA"}
|
|
@@ -1,19 +1,25 @@
|
|
|
1
1
|
import { PendingSigningRequest } from "../wallet/dev-wallet.mjs";
|
|
2
|
-
import
|
|
2
|
+
import { CoinRecord } from "./utils.mjs";
|
|
3
|
+
import * as _$lit from "lit";
|
|
3
4
|
import { LitElement } from "lit";
|
|
4
5
|
import { ClientWithCoreApi } from "@mysten/sui/client";
|
|
5
6
|
|
|
6
7
|
//#region src/ui/dev-wallet-signing.d.ts
|
|
7
8
|
declare class DevWalletSigning extends LitElement {
|
|
8
9
|
#private;
|
|
9
|
-
static styles: (
|
|
10
|
+
static styles: (_$lit.CSSResult | _$lit.CSSResult[])[];
|
|
10
11
|
request: PendingSigningRequest | null;
|
|
11
12
|
client: ClientWithCoreApi | null;
|
|
13
|
+
/** Optional pre-seeded coin metadata — pass the generated `coins`
|
|
14
|
+
* constant from devstack codegen to skip per-coin `getCoinMetadata`
|
|
15
|
+
* RPC fetches when rendering coin-flow estimates. Unknown coin types
|
|
16
|
+
* fall through to an RPC fetch as before. */
|
|
17
|
+
coins: CoinRecord | null;
|
|
12
18
|
private _analysis;
|
|
13
19
|
private _analysisError;
|
|
14
20
|
private _analyzing;
|
|
15
21
|
willUpdate(changedProperties: Map<string, unknown>): void;
|
|
16
|
-
render():
|
|
22
|
+
render(): _$lit.TemplateResult<1>;
|
|
17
23
|
}
|
|
18
24
|
declare global {
|
|
19
25
|
interface HTMLElementTagNameMap {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev-wallet-signing.d.mts","names":[],"sources":["../../src/ui/dev-wallet-signing.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"dev-wallet-signing.d.mts","names":[],"sources":["../../src/ui/dev-wallet-signing.ts"],"mappings":";;;;;;;cAsCa,gBAAA,SAAyB,UAAA;EAAA;SACrB,MAAA,GADa,KAAA,CACP,SAAA,GAAA,KAAA,CAAA,SAAA;EA+OtB,OAAA,EAAS,qBAAA;EAGT,MAAA,EAAQ,iBAAA;;;;;EAOR,KAAA,EAAO,UAAA;EAAA,QAGC,SAAA;EAAA,QAGA,cAAA;EAAA,QAGA,UAAA;EASC,UAAA,CAAW,iBAAA,EAAmB,GAAA;EAsE9B,MAAA,CAAA,GAtEiC,KAAA,CAsE3B,cAAA;AAAA;AAAA,QA8QR,MAAA;EAAA,UACG,qBAAA;IACT,oBAAA,EAAsB,gBAAA;EAAA;AAAA"}
|
|
@@ -1,34 +1,45 @@
|
|
|
1
|
-
import { actionButtonStyles, sharedStyles } from "./styles.mjs";
|
|
2
|
-
import { emitEvent, formatAddress, formatCoinBalance, getCoinSymbol } from "./utils.mjs";
|
|
1
|
+
import { actionButtonStyles, copyableTextStyles, listContainerStyles, monoTruncateStyles, sharedStyles, subLabelStyles } from "./styles.mjs";
|
|
2
|
+
import { emitEvent, formatAddress, formatCoinBalance, getCoinSymbol, indexCoinsByType, lookupCoinByType } from "./utils.mjs";
|
|
3
3
|
import { CopyController } from "./copy-controller.mjs";
|
|
4
|
-
import { __decorate } from "../_virtual/_@oxc-project_runtime@0.
|
|
4
|
+
import { __decorate } from "../_virtual/_@oxc-project_runtime@0.127.0/helpers/decorate.mjs";
|
|
5
5
|
import { analyzeTransaction } from "./transaction-analyzer.mjs";
|
|
6
6
|
import { LitElement, css, html, nothing } from "lit";
|
|
7
7
|
import { customElement, property, state } from "lit/decorators.js";
|
|
8
8
|
import { bcs } from "@mysten/sui/bcs";
|
|
9
|
-
|
|
10
9
|
//#region src/ui/dev-wallet-signing.ts
|
|
11
10
|
const REQUEST_TYPE_LABELS = {
|
|
12
11
|
"sign-personal-message": "Sign Message",
|
|
13
12
|
"sign-transaction": "Sign Transaction",
|
|
14
13
|
"sign-and-execute-transaction": "Sign & Execute Transaction"
|
|
15
14
|
};
|
|
16
|
-
let DevWalletSigning = class DevWalletSigning
|
|
15
|
+
let DevWalletSigning = class DevWalletSigning extends LitElement {
|
|
17
16
|
constructor(..._args) {
|
|
18
17
|
super(..._args);
|
|
19
18
|
this.request = null;
|
|
20
19
|
this.client = null;
|
|
20
|
+
this.coins = null;
|
|
21
21
|
this._analysis = null;
|
|
22
22
|
this._analysisError = null;
|
|
23
23
|
this._analyzing = false;
|
|
24
|
+
this.#copy = new CopyController(this);
|
|
25
|
+
this.#analysisGeneration = 0;
|
|
26
|
+
this.#coinDecimalsCache = /* @__PURE__ */ new Map();
|
|
27
|
+
this.#coinSymbolCache = /* @__PURE__ */ new Map();
|
|
28
|
+
this.#coinIndex = /* @__PURE__ */ new Map();
|
|
29
|
+
this.#lastCoinsRef = null;
|
|
24
30
|
}
|
|
25
31
|
static {
|
|
26
32
|
this.styles = [
|
|
27
33
|
sharedStyles,
|
|
28
34
|
actionButtonStyles,
|
|
35
|
+
copyableTextStyles,
|
|
36
|
+
listContainerStyles,
|
|
37
|
+
monoTruncateStyles,
|
|
38
|
+
subLabelStyles,
|
|
29
39
|
css`
|
|
30
40
|
:host {
|
|
31
41
|
display: flex;
|
|
42
|
+
flex: 1;
|
|
32
43
|
flex-direction: column;
|
|
33
44
|
overflow: hidden;
|
|
34
45
|
min-height: 0;
|
|
@@ -38,18 +49,20 @@ let DevWalletSigning = class DevWalletSigning$1 extends LitElement {
|
|
|
38
49
|
flex: 1;
|
|
39
50
|
overflow-y: auto;
|
|
40
51
|
padding: 16px;
|
|
52
|
+
background: var(--dev-wallet-bg-0);
|
|
41
53
|
}
|
|
42
54
|
|
|
43
55
|
.signing-footer {
|
|
44
56
|
padding: 12px 16px;
|
|
45
57
|
border-top: 1px solid var(--dev-wallet-border);
|
|
58
|
+
background: var(--dev-wallet-surface);
|
|
46
59
|
}
|
|
47
60
|
|
|
48
61
|
.signing-header {
|
|
49
62
|
display: flex;
|
|
50
63
|
align-items: center;
|
|
51
64
|
gap: 8px;
|
|
52
|
-
margin-bottom:
|
|
65
|
+
margin-bottom: 10px;
|
|
53
66
|
}
|
|
54
67
|
|
|
55
68
|
.signing-badge {
|
|
@@ -72,22 +85,31 @@ let DevWalletSigning = class DevWalletSigning$1 extends LitElement {
|
|
|
72
85
|
}
|
|
73
86
|
|
|
74
87
|
.signing-title {
|
|
75
|
-
font-size:
|
|
88
|
+
font-size: 12px;
|
|
76
89
|
font-weight: var(--dev-wallet-font-weight-semibold);
|
|
77
90
|
color: var(--dev-wallet-foreground);
|
|
78
91
|
}
|
|
79
92
|
|
|
80
93
|
.request-type {
|
|
81
|
-
|
|
94
|
+
display: inline-flex;
|
|
95
|
+
align-items: center;
|
|
96
|
+
height: 22px;
|
|
97
|
+
padding: 0 8px;
|
|
98
|
+
border-radius: 999px;
|
|
99
|
+
border: 1px solid var(--dev-wallet-border-strong);
|
|
100
|
+
background: var(--dev-wallet-accent-fade);
|
|
101
|
+
font-family: var(--dev-wallet-font-mono);
|
|
102
|
+
font-size: 10.5px;
|
|
82
103
|
color: var(--dev-wallet-primary);
|
|
83
104
|
font-weight: var(--dev-wallet-font-weight-medium);
|
|
84
|
-
margin-bottom:
|
|
105
|
+
margin-bottom: 10px;
|
|
85
106
|
}
|
|
86
107
|
|
|
87
108
|
.request-detail {
|
|
88
109
|
display: flex;
|
|
89
110
|
justify-content: space-between;
|
|
90
|
-
|
|
111
|
+
gap: 12px;
|
|
112
|
+
padding: 8px 0;
|
|
91
113
|
font-size: 12px;
|
|
92
114
|
border-bottom: 1px solid var(--dev-wallet-border);
|
|
93
115
|
}
|
|
@@ -110,18 +132,7 @@ let DevWalletSigning = class DevWalletSigning$1 extends LitElement {
|
|
|
110
132
|
}
|
|
111
133
|
|
|
112
134
|
.detail-value.copyable-addr {
|
|
113
|
-
cursor: pointer;
|
|
114
|
-
border-radius: var(--dev-wallet-radius-2xs);
|
|
115
135
|
padding: 1px 3px;
|
|
116
|
-
transition: background 0.15s;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
.detail-value.copyable-addr:hover {
|
|
120
|
-
background: color-mix(in oklab, var(--dev-wallet-primary) 15%, transparent);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
.detail-value.copied {
|
|
124
|
-
color: var(--dev-wallet-positive);
|
|
125
136
|
}
|
|
126
137
|
|
|
127
138
|
.detail-secondary {
|
|
@@ -131,30 +142,24 @@ let DevWalletSigning = class DevWalletSigning$1 extends LitElement {
|
|
|
131
142
|
|
|
132
143
|
.request-data {
|
|
133
144
|
margin: 12px 0;
|
|
134
|
-
padding:
|
|
135
|
-
border-radius: var(--dev-wallet-radius
|
|
136
|
-
|
|
145
|
+
padding: 10px 12px;
|
|
146
|
+
border-radius: var(--dev-wallet-radius);
|
|
147
|
+
border: 1px solid var(--dev-wallet-border);
|
|
148
|
+
background: var(--dev-wallet-bg-0);
|
|
137
149
|
font-family: var(--dev-wallet-font-mono);
|
|
138
|
-
font-size:
|
|
139
|
-
color: var(--dev-wallet-
|
|
140
|
-
max-height:
|
|
150
|
+
font-size: 11.5px;
|
|
151
|
+
color: var(--dev-wallet-foreground);
|
|
152
|
+
max-height: 120px;
|
|
141
153
|
overflow-y: auto;
|
|
142
154
|
word-break: break-all;
|
|
155
|
+
line-height: 1.55;
|
|
143
156
|
}
|
|
144
157
|
|
|
145
158
|
.section-label {
|
|
146
|
-
font-size: 11px;
|
|
147
|
-
font-weight: var(--dev-wallet-font-weight-semibold);
|
|
148
|
-
color: var(--dev-wallet-muted-foreground);
|
|
149
|
-
text-transform: uppercase;
|
|
150
|
-
letter-spacing: 0.5px;
|
|
151
159
|
margin: 12px 0 6px;
|
|
152
160
|
}
|
|
153
161
|
|
|
154
162
|
.coin-flows {
|
|
155
|
-
display: flex;
|
|
156
|
-
flex-direction: column;
|
|
157
|
-
gap: 4px;
|
|
158
163
|
margin-bottom: 4px;
|
|
159
164
|
}
|
|
160
165
|
|
|
@@ -162,9 +167,10 @@ let DevWalletSigning = class DevWalletSigning$1 extends LitElement {
|
|
|
162
167
|
display: flex;
|
|
163
168
|
justify-content: space-between;
|
|
164
169
|
align-items: center;
|
|
165
|
-
padding: 8px;
|
|
166
|
-
border-radius: var(--dev-wallet-radius
|
|
167
|
-
|
|
170
|
+
padding: 8px 10px;
|
|
171
|
+
border-radius: var(--dev-wallet-radius);
|
|
172
|
+
border: 1px solid var(--dev-wallet-border);
|
|
173
|
+
background: var(--dev-wallet-surface);
|
|
168
174
|
font-size: 12px;
|
|
169
175
|
}
|
|
170
176
|
|
|
@@ -178,16 +184,11 @@ let DevWalletSigning = class DevWalletSigning$1 extends LitElement {
|
|
|
178
184
|
color: var(--dev-wallet-destructive);
|
|
179
185
|
}
|
|
180
186
|
|
|
181
|
-
.commands-list {
|
|
182
|
-
display: flex;
|
|
183
|
-
flex-direction: column;
|
|
184
|
-
gap: 4px;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
187
|
.command-item {
|
|
188
|
-
padding:
|
|
189
|
-
border-radius: var(--dev-wallet-radius-
|
|
190
|
-
|
|
188
|
+
padding: 10px;
|
|
189
|
+
border-radius: var(--dev-wallet-radius-lg);
|
|
190
|
+
border: 1px solid var(--dev-wallet-border);
|
|
191
|
+
background: var(--dev-wallet-surface);
|
|
191
192
|
font-size: 12px;
|
|
192
193
|
}
|
|
193
194
|
|
|
@@ -198,12 +199,7 @@ let DevWalletSigning = class DevWalletSigning$1 extends LitElement {
|
|
|
198
199
|
}
|
|
199
200
|
|
|
200
201
|
.command-detail {
|
|
201
|
-
color: var(--dev-wallet-muted-foreground);
|
|
202
|
-
font-family: var(--dev-wallet-font-mono);
|
|
203
202
|
font-size: 11px;
|
|
204
|
-
overflow: hidden;
|
|
205
|
-
text-overflow: ellipsis;
|
|
206
|
-
white-space: nowrap;
|
|
207
203
|
}
|
|
208
204
|
|
|
209
205
|
.command-args {
|
|
@@ -214,12 +210,7 @@ let DevWalletSigning = class DevWalletSigning$1 extends LitElement {
|
|
|
214
210
|
|
|
215
211
|
.command-arg {
|
|
216
212
|
font-size: 11px;
|
|
217
|
-
color: var(--dev-wallet-muted-foreground);
|
|
218
|
-
font-family: var(--dev-wallet-font-mono);
|
|
219
213
|
padding: 1px 0;
|
|
220
|
-
overflow: hidden;
|
|
221
|
-
text-overflow: ellipsis;
|
|
222
|
-
white-space: nowrap;
|
|
223
214
|
}
|
|
224
215
|
|
|
225
216
|
.arg-access {
|
|
@@ -253,10 +244,6 @@ let DevWalletSigning = class DevWalletSigning$1 extends LitElement {
|
|
|
253
244
|
word-break: break-word;
|
|
254
245
|
}
|
|
255
246
|
|
|
256
|
-
.section-label-error {
|
|
257
|
-
color: var(--dev-wallet-destructive);
|
|
258
|
-
}
|
|
259
|
-
|
|
260
247
|
.error-title {
|
|
261
248
|
font-weight: var(--dev-wallet-font-weight-semibold);
|
|
262
249
|
margin-bottom: 4px;
|
|
@@ -280,17 +267,22 @@ let DevWalletSigning = class DevWalletSigning$1 extends LitElement {
|
|
|
280
267
|
`
|
|
281
268
|
];
|
|
282
269
|
}
|
|
283
|
-
#copy
|
|
284
|
-
#analysisGeneration
|
|
285
|
-
#coinDecimalsCache
|
|
270
|
+
#copy;
|
|
271
|
+
#analysisGeneration;
|
|
272
|
+
#coinDecimalsCache;
|
|
273
|
+
#coinSymbolCache;
|
|
274
|
+
#coinIndex;
|
|
275
|
+
#lastCoinsRef;
|
|
286
276
|
willUpdate(changedProperties) {
|
|
277
|
+
if (changedProperties.has("coins") && this.coins !== this.#lastCoinsRef) {
|
|
278
|
+
this.#coinIndex = indexCoinsByType(this.coins);
|
|
279
|
+
this.#lastCoinsRef = this.coins;
|
|
280
|
+
}
|
|
287
281
|
if (changedProperties.has("request")) {
|
|
288
282
|
this._analysis = null;
|
|
289
283
|
this._analysisError = null;
|
|
290
284
|
this._analyzing = false;
|
|
291
|
-
if (this.request && this.request.type !== "sign-personal-message")
|
|
292
|
-
this.#analyzeTransaction();
|
|
293
|
-
}
|
|
285
|
+
if (this.request && this.request.type !== "sign-personal-message") this.#analyzeTransaction();
|
|
294
286
|
}
|
|
295
287
|
}
|
|
296
288
|
async #analyzeTransaction() {
|
|
@@ -301,29 +293,40 @@ let DevWalletSigning = class DevWalletSigning$1 extends LitElement {
|
|
|
301
293
|
if (generation !== this.#analysisGeneration) return;
|
|
302
294
|
if (result.kind === "rich") {
|
|
303
295
|
this._analysis = result.analysis;
|
|
304
|
-
if (
|
|
296
|
+
if (result.analysis.coinFlows?.length) {
|
|
305
297
|
const coinTypes = [...new Set(result.analysis.coinFlows.map((f) => f.coinType))];
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
298
|
+
const unresolved = [];
|
|
299
|
+
for (const ct of coinTypes) {
|
|
300
|
+
if (this.#coinDecimalsCache.has(ct)) continue;
|
|
301
|
+
const seed = lookupCoinByType(this.#coinIndex, ct);
|
|
302
|
+
if (seed !== void 0) {
|
|
303
|
+
this.#coinDecimalsCache.set(ct, seed.decimals);
|
|
304
|
+
if (seed.symbol !== void 0) this.#coinSymbolCache.set(ct, seed.symbol);
|
|
305
|
+
continue;
|
|
306
|
+
}
|
|
307
|
+
unresolved.push(ct);
|
|
308
|
+
}
|
|
309
|
+
if (this.client && unresolved.length > 0) {
|
|
310
|
+
await Promise.all(unresolved.map(async (ct) => {
|
|
311
|
+
try {
|
|
312
|
+
const { coinMetadata } = await this.client.core.getCoinMetadata({ coinType: ct });
|
|
313
|
+
if (coinMetadata) {
|
|
314
|
+
this.#coinDecimalsCache.set(ct, coinMetadata.decimals);
|
|
315
|
+
if (coinMetadata.symbol) this.#coinSymbolCache.set(ct, coinMetadata.symbol);
|
|
316
|
+
}
|
|
317
|
+
} catch {}
|
|
318
|
+
}));
|
|
319
|
+
if (generation !== this.#analysisGeneration) return;
|
|
320
|
+
}
|
|
315
321
|
this.requestUpdate();
|
|
316
322
|
}
|
|
317
|
-
} else
|
|
318
|
-
this._analysisError = result.message;
|
|
319
|
-
}
|
|
323
|
+
} else this._analysisError = result.message;
|
|
320
324
|
this._analyzing = false;
|
|
321
325
|
}
|
|
322
326
|
render() {
|
|
323
|
-
if (!this.request)
|
|
324
|
-
return html`<div class="no-request" part="empty-state">No pending requests</div>`;
|
|
325
|
-
}
|
|
327
|
+
if (!this.request) return html`<div class="no-request" part="empty-state">No pending requests</div>`;
|
|
326
328
|
const typeLabel = REQUEST_TYPE_LABELS[this.request.type];
|
|
329
|
+
const account = this.request.account;
|
|
327
330
|
const isTransaction = this.request.type !== "sign-personal-message";
|
|
328
331
|
const canApprove = isTransaction ? this._analysis !== null && !this._analysisError && !this._analyzing : true;
|
|
329
332
|
return html`
|
|
@@ -333,30 +336,28 @@ let DevWalletSigning = class DevWalletSigning$1 extends LitElement {
|
|
|
333
336
|
<span class="signing-title">Approval Required</span>
|
|
334
337
|
</div>
|
|
335
338
|
|
|
336
|
-
<div class="request-type" part="request-type">${typeLabel}</div>
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
339
|
+
<div class="request-type" part="request-type">${typeLabel ?? "Signing Request"}</div>
|
|
340
|
+
|
|
341
|
+
${account ? html`<div class="request-detail">
|
|
342
|
+
<span class="detail-label">Account</span>
|
|
343
|
+
<span
|
|
344
|
+
class="detail-value copyable-addr ${this.#copy.isCopied(account.address) ? "copied" : ""}"
|
|
345
|
+
title="Click to copy"
|
|
346
|
+
role="button"
|
|
347
|
+
tabindex="0"
|
|
348
|
+
aria-label="Copy account address"
|
|
349
|
+
@click=${() => this.#copy.copy(account.address)}
|
|
350
|
+
@keydown=${(e) => {
|
|
348
351
|
if (e.key === "Enter" || e.key === " ") {
|
|
349
352
|
e.preventDefault();
|
|
350
|
-
this.#copy.copy(
|
|
353
|
+
this.#copy.copy(account.address);
|
|
351
354
|
}
|
|
352
355
|
}}
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
</span>
|
|
359
|
-
</div>
|
|
356
|
+
>
|
|
357
|
+
${this.#copy.isCopied(account.address) ? "Copied!" : account.label ? html`${account.label}
|
|
358
|
+
<span class="detail-secondary">${formatAddress(account.address)}</span>` : formatAddress(account.address)}
|
|
359
|
+
</span>
|
|
360
|
+
</div>` : nothing}
|
|
360
361
|
${isTransaction ? html`<div class="request-detail">
|
|
361
362
|
<span class="detail-label">Chain</span>
|
|
362
363
|
<span class="detail-value">${this.request.chain}</span>
|
|
@@ -374,11 +375,8 @@ let DevWalletSigning = class DevWalletSigning$1 extends LitElement {
|
|
|
374
375
|
`;
|
|
375
376
|
}
|
|
376
377
|
#renderTransactionPreview() {
|
|
377
|
-
if (this._analyzing)
|
|
378
|
-
|
|
379
|
-
}
|
|
380
|
-
if (this._analysisError) {
|
|
381
|
-
return html`
|
|
378
|
+
if (this._analyzing) return html`<div class="section-label">Analyzing transaction...</div>`;
|
|
379
|
+
if (this._analysisError) return html`
|
|
382
380
|
<div class="section-label section-label-error">Analysis Failed</div>
|
|
383
381
|
<div class="error-state" part="error-message">
|
|
384
382
|
<div class="error-title">Unable to analyze this transaction</div>
|
|
@@ -389,12 +387,9 @@ let DevWalletSigning = class DevWalletSigning$1 extends LitElement {
|
|
|
389
387
|
</div>
|
|
390
388
|
</div>
|
|
391
389
|
`;
|
|
392
|
-
|
|
393
|
-
if (this._analysis) {
|
|
394
|
-
return html`
|
|
390
|
+
if (this._analysis) return html`
|
|
395
391
|
${this.#renderCoinFlows()} ${this.#renderAnalyzedCommands(this._analysis.commands)}
|
|
396
392
|
`;
|
|
397
|
-
}
|
|
398
393
|
const dataPreview = this.#getDataPreview();
|
|
399
394
|
return dataPreview ? html`<div class="request-data">${dataPreview}</div>` : nothing;
|
|
400
395
|
}
|
|
@@ -406,11 +401,10 @@ let DevWalletSigning = class DevWalletSigning$1 extends LitElement {
|
|
|
406
401
|
<div class="coin-flows">
|
|
407
402
|
${flows.map((flow) => {
|
|
408
403
|
const decimals = this.#coinDecimalsCache.get(flow.coinType) ?? 0;
|
|
409
|
-
const formatted = formatCoinBalance(flow.amount, decimals);
|
|
410
404
|
return html`
|
|
411
405
|
<div class="coin-flow-item">
|
|
412
|
-
<span class="coin-flow-type">${getCoinSymbol(flow.coinType)}</span>
|
|
413
|
-
<span class="coin-flow-amount"> -${
|
|
406
|
+
<span class="coin-flow-type">${this.#coinSymbolCache.get(flow.coinType) ?? getCoinSymbol(flow.coinType)}</span>
|
|
407
|
+
<span class="coin-flow-amount"> -${formatCoinBalance(flow.amount, decimals)} </span>
|
|
414
408
|
</div>
|
|
415
409
|
`;
|
|
416
410
|
})}
|
|
@@ -501,28 +495,22 @@ let DevWalletSigning = class DevWalletSigning$1 extends LitElement {
|
|
|
501
495
|
}
|
|
502
496
|
}
|
|
503
497
|
#decodePureAddress(arg) {
|
|
504
|
-
if (arg.$kind === "Pure") {
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
} catch {}
|
|
508
|
-
}
|
|
498
|
+
if (arg.$kind === "Pure") try {
|
|
499
|
+
return bcs.Address.fromBase64(arg.bytes);
|
|
500
|
+
} catch {}
|
|
509
501
|
return "?";
|
|
510
502
|
}
|
|
511
503
|
#getDataPreview() {
|
|
512
504
|
if (!this.request) return null;
|
|
513
505
|
if (this.request.type === "sign-personal-message") {
|
|
514
506
|
const data = this.request.data;
|
|
515
|
-
if (data instanceof Uint8Array) {
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
}
|
|
519
|
-
return `[${data.length} bytes]`;
|
|
520
|
-
}
|
|
507
|
+
if (data instanceof Uint8Array) try {
|
|
508
|
+
return new TextDecoder().decode(data);
|
|
509
|
+
} catch {
|
|
510
|
+
return `[${data.length} bytes]`;
|
|
521
511
|
}
|
|
522
512
|
}
|
|
523
|
-
if (typeof this.request.data === "string")
|
|
524
|
-
return this.request.data.length > 200 ? this.request.data.slice(0, 200) + "..." : this.request.data;
|
|
525
|
-
}
|
|
513
|
+
if (typeof this.request.data === "string") return this.request.data.length > 200 ? this.request.data.slice(0, 200) + "..." : this.request.data;
|
|
526
514
|
return null;
|
|
527
515
|
}
|
|
528
516
|
#approve() {
|
|
@@ -534,11 +522,12 @@ let DevWalletSigning = class DevWalletSigning$1 extends LitElement {
|
|
|
534
522
|
};
|
|
535
523
|
__decorate([property({ attribute: false })], DevWalletSigning.prototype, "request", void 0);
|
|
536
524
|
__decorate([property({ attribute: false })], DevWalletSigning.prototype, "client", void 0);
|
|
525
|
+
__decorate([property({ attribute: false })], DevWalletSigning.prototype, "coins", void 0);
|
|
537
526
|
__decorate([state()], DevWalletSigning.prototype, "_analysis", void 0);
|
|
538
527
|
__decorate([state()], DevWalletSigning.prototype, "_analysisError", void 0);
|
|
539
528
|
__decorate([state()], DevWalletSigning.prototype, "_analyzing", void 0);
|
|
540
529
|
DevWalletSigning = __decorate([customElement("dev-wallet-signing")], DevWalletSigning);
|
|
541
|
-
|
|
542
530
|
//#endregion
|
|
543
531
|
export { DevWalletSigning };
|
|
532
|
+
|
|
544
533
|
//# sourceMappingURL=dev-wallet-signing.mjs.map
|