@mysten-incubation/dev-wallet 0.0.1 → 0.3.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 +139 -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 +11 -0
- package/dist/adapters/devstack-paths.d.mts.map +1 -0
- package/dist/adapters/devstack-paths.mjs +11 -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 +15 -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
|
@@ -9,10 +9,25 @@ import { customElement, property, state } from 'lit/decorators.js';
|
|
|
9
9
|
|
|
10
10
|
import type { PendingSigningRequest } from '../wallet/dev-wallet.js';
|
|
11
11
|
import { CopyController } from './copy-controller.js';
|
|
12
|
-
import {
|
|
12
|
+
import {
|
|
13
|
+
actionButtonStyles,
|
|
14
|
+
copyableTextStyles,
|
|
15
|
+
listContainerStyles,
|
|
16
|
+
monoTruncateStyles,
|
|
17
|
+
sharedStyles,
|
|
18
|
+
subLabelStyles,
|
|
19
|
+
} from './styles.js';
|
|
13
20
|
import type { TransactionAnalysis } from './transaction-analyzer.js';
|
|
14
21
|
import { analyzeTransaction } from './transaction-analyzer.js';
|
|
15
|
-
import {
|
|
22
|
+
import type { CoinManifestEntry, CoinRecord } from './utils.js';
|
|
23
|
+
import {
|
|
24
|
+
emitEvent,
|
|
25
|
+
formatAddress,
|
|
26
|
+
formatCoinBalance,
|
|
27
|
+
getCoinSymbol,
|
|
28
|
+
indexCoinsByType,
|
|
29
|
+
lookupCoinByType,
|
|
30
|
+
} from './utils.js';
|
|
16
31
|
|
|
17
32
|
const REQUEST_TYPE_LABELS: Record<PendingSigningRequest['type'], string> = {
|
|
18
33
|
'sign-personal-message': 'Sign Message',
|
|
@@ -25,9 +40,14 @@ export class DevWalletSigning extends LitElement {
|
|
|
25
40
|
static override styles = [
|
|
26
41
|
sharedStyles,
|
|
27
42
|
actionButtonStyles,
|
|
43
|
+
copyableTextStyles,
|
|
44
|
+
listContainerStyles,
|
|
45
|
+
monoTruncateStyles,
|
|
46
|
+
subLabelStyles,
|
|
28
47
|
css`
|
|
29
48
|
:host {
|
|
30
49
|
display: flex;
|
|
50
|
+
flex: 1;
|
|
31
51
|
flex-direction: column;
|
|
32
52
|
overflow: hidden;
|
|
33
53
|
min-height: 0;
|
|
@@ -37,18 +57,20 @@ export class DevWalletSigning extends LitElement {
|
|
|
37
57
|
flex: 1;
|
|
38
58
|
overflow-y: auto;
|
|
39
59
|
padding: 16px;
|
|
60
|
+
background: var(--dev-wallet-bg-0);
|
|
40
61
|
}
|
|
41
62
|
|
|
42
63
|
.signing-footer {
|
|
43
64
|
padding: 12px 16px;
|
|
44
65
|
border-top: 1px solid var(--dev-wallet-border);
|
|
66
|
+
background: var(--dev-wallet-surface);
|
|
45
67
|
}
|
|
46
68
|
|
|
47
69
|
.signing-header {
|
|
48
70
|
display: flex;
|
|
49
71
|
align-items: center;
|
|
50
72
|
gap: 8px;
|
|
51
|
-
margin-bottom:
|
|
73
|
+
margin-bottom: 10px;
|
|
52
74
|
}
|
|
53
75
|
|
|
54
76
|
.signing-badge {
|
|
@@ -71,22 +93,31 @@ export class DevWalletSigning extends LitElement {
|
|
|
71
93
|
}
|
|
72
94
|
|
|
73
95
|
.signing-title {
|
|
74
|
-
font-size:
|
|
96
|
+
font-size: 12px;
|
|
75
97
|
font-weight: var(--dev-wallet-font-weight-semibold);
|
|
76
98
|
color: var(--dev-wallet-foreground);
|
|
77
99
|
}
|
|
78
100
|
|
|
79
101
|
.request-type {
|
|
80
|
-
|
|
102
|
+
display: inline-flex;
|
|
103
|
+
align-items: center;
|
|
104
|
+
height: 22px;
|
|
105
|
+
padding: 0 8px;
|
|
106
|
+
border-radius: 999px;
|
|
107
|
+
border: 1px solid var(--dev-wallet-border-strong);
|
|
108
|
+
background: var(--dev-wallet-accent-fade);
|
|
109
|
+
font-family: var(--dev-wallet-font-mono);
|
|
110
|
+
font-size: 10.5px;
|
|
81
111
|
color: var(--dev-wallet-primary);
|
|
82
112
|
font-weight: var(--dev-wallet-font-weight-medium);
|
|
83
|
-
margin-bottom:
|
|
113
|
+
margin-bottom: 10px;
|
|
84
114
|
}
|
|
85
115
|
|
|
86
116
|
.request-detail {
|
|
87
117
|
display: flex;
|
|
88
118
|
justify-content: space-between;
|
|
89
|
-
|
|
119
|
+
gap: 12px;
|
|
120
|
+
padding: 8px 0;
|
|
90
121
|
font-size: 12px;
|
|
91
122
|
border-bottom: 1px solid var(--dev-wallet-border);
|
|
92
123
|
}
|
|
@@ -109,18 +140,7 @@ export class DevWalletSigning extends LitElement {
|
|
|
109
140
|
}
|
|
110
141
|
|
|
111
142
|
.detail-value.copyable-addr {
|
|
112
|
-
cursor: pointer;
|
|
113
|
-
border-radius: var(--dev-wallet-radius-2xs);
|
|
114
143
|
padding: 1px 3px;
|
|
115
|
-
transition: background 0.15s;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
.detail-value.copyable-addr:hover {
|
|
119
|
-
background: color-mix(in oklab, var(--dev-wallet-primary) 15%, transparent);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
.detail-value.copied {
|
|
123
|
-
color: var(--dev-wallet-positive);
|
|
124
144
|
}
|
|
125
145
|
|
|
126
146
|
.detail-secondary {
|
|
@@ -130,30 +150,24 @@ export class DevWalletSigning extends LitElement {
|
|
|
130
150
|
|
|
131
151
|
.request-data {
|
|
132
152
|
margin: 12px 0;
|
|
133
|
-
padding:
|
|
134
|
-
border-radius: var(--dev-wallet-radius
|
|
135
|
-
|
|
153
|
+
padding: 10px 12px;
|
|
154
|
+
border-radius: var(--dev-wallet-radius);
|
|
155
|
+
border: 1px solid var(--dev-wallet-border);
|
|
156
|
+
background: var(--dev-wallet-bg-0);
|
|
136
157
|
font-family: var(--dev-wallet-font-mono);
|
|
137
|
-
font-size:
|
|
138
|
-
color: var(--dev-wallet-
|
|
139
|
-
max-height:
|
|
158
|
+
font-size: 11.5px;
|
|
159
|
+
color: var(--dev-wallet-foreground);
|
|
160
|
+
max-height: 120px;
|
|
140
161
|
overflow-y: auto;
|
|
141
162
|
word-break: break-all;
|
|
163
|
+
line-height: 1.55;
|
|
142
164
|
}
|
|
143
165
|
|
|
144
166
|
.section-label {
|
|
145
|
-
font-size: 11px;
|
|
146
|
-
font-weight: var(--dev-wallet-font-weight-semibold);
|
|
147
|
-
color: var(--dev-wallet-muted-foreground);
|
|
148
|
-
text-transform: uppercase;
|
|
149
|
-
letter-spacing: 0.5px;
|
|
150
167
|
margin: 12px 0 6px;
|
|
151
168
|
}
|
|
152
169
|
|
|
153
170
|
.coin-flows {
|
|
154
|
-
display: flex;
|
|
155
|
-
flex-direction: column;
|
|
156
|
-
gap: 4px;
|
|
157
171
|
margin-bottom: 4px;
|
|
158
172
|
}
|
|
159
173
|
|
|
@@ -161,9 +175,10 @@ export class DevWalletSigning extends LitElement {
|
|
|
161
175
|
display: flex;
|
|
162
176
|
justify-content: space-between;
|
|
163
177
|
align-items: center;
|
|
164
|
-
padding: 8px;
|
|
165
|
-
border-radius: var(--dev-wallet-radius
|
|
166
|
-
|
|
178
|
+
padding: 8px 10px;
|
|
179
|
+
border-radius: var(--dev-wallet-radius);
|
|
180
|
+
border: 1px solid var(--dev-wallet-border);
|
|
181
|
+
background: var(--dev-wallet-surface);
|
|
167
182
|
font-size: 12px;
|
|
168
183
|
}
|
|
169
184
|
|
|
@@ -177,16 +192,11 @@ export class DevWalletSigning extends LitElement {
|
|
|
177
192
|
color: var(--dev-wallet-destructive);
|
|
178
193
|
}
|
|
179
194
|
|
|
180
|
-
.commands-list {
|
|
181
|
-
display: flex;
|
|
182
|
-
flex-direction: column;
|
|
183
|
-
gap: 4px;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
195
|
.command-item {
|
|
187
|
-
padding:
|
|
188
|
-
border-radius: var(--dev-wallet-radius-
|
|
189
|
-
|
|
196
|
+
padding: 10px;
|
|
197
|
+
border-radius: var(--dev-wallet-radius-lg);
|
|
198
|
+
border: 1px solid var(--dev-wallet-border);
|
|
199
|
+
background: var(--dev-wallet-surface);
|
|
190
200
|
font-size: 12px;
|
|
191
201
|
}
|
|
192
202
|
|
|
@@ -197,12 +207,7 @@ export class DevWalletSigning extends LitElement {
|
|
|
197
207
|
}
|
|
198
208
|
|
|
199
209
|
.command-detail {
|
|
200
|
-
color: var(--dev-wallet-muted-foreground);
|
|
201
|
-
font-family: var(--dev-wallet-font-mono);
|
|
202
210
|
font-size: 11px;
|
|
203
|
-
overflow: hidden;
|
|
204
|
-
text-overflow: ellipsis;
|
|
205
|
-
white-space: nowrap;
|
|
206
211
|
}
|
|
207
212
|
|
|
208
213
|
.command-args {
|
|
@@ -213,12 +218,7 @@ export class DevWalletSigning extends LitElement {
|
|
|
213
218
|
|
|
214
219
|
.command-arg {
|
|
215
220
|
font-size: 11px;
|
|
216
|
-
color: var(--dev-wallet-muted-foreground);
|
|
217
|
-
font-family: var(--dev-wallet-font-mono);
|
|
218
221
|
padding: 1px 0;
|
|
219
|
-
overflow: hidden;
|
|
220
|
-
text-overflow: ellipsis;
|
|
221
|
-
white-space: nowrap;
|
|
222
222
|
}
|
|
223
223
|
|
|
224
224
|
.arg-access {
|
|
@@ -252,10 +252,6 @@ export class DevWalletSigning extends LitElement {
|
|
|
252
252
|
word-break: break-word;
|
|
253
253
|
}
|
|
254
254
|
|
|
255
|
-
.section-label-error {
|
|
256
|
-
color: var(--dev-wallet-destructive);
|
|
257
|
-
}
|
|
258
|
-
|
|
259
255
|
.error-title {
|
|
260
256
|
font-weight: var(--dev-wallet-font-weight-semibold);
|
|
261
257
|
margin-bottom: 4px;
|
|
@@ -285,6 +281,13 @@ export class DevWalletSigning extends LitElement {
|
|
|
285
281
|
@property({ attribute: false })
|
|
286
282
|
client: ClientWithCoreApi | null = null;
|
|
287
283
|
|
|
284
|
+
/** Optional pre-seeded coin metadata — pass the generated `coins`
|
|
285
|
+
* constant from devstack codegen to skip per-coin `getCoinMetadata`
|
|
286
|
+
* RPC fetches when rendering coin-flow estimates. Unknown coin types
|
|
287
|
+
* fall through to an RPC fetch as before. */
|
|
288
|
+
@property({ attribute: false })
|
|
289
|
+
coins: CoinRecord | null = null;
|
|
290
|
+
|
|
288
291
|
@state()
|
|
289
292
|
private _analysis: TransactionAnalysis | null = null;
|
|
290
293
|
|
|
@@ -297,8 +300,15 @@ export class DevWalletSigning extends LitElement {
|
|
|
297
300
|
#copy = new CopyController(this);
|
|
298
301
|
#analysisGeneration = 0;
|
|
299
302
|
#coinDecimalsCache = new Map<string, number>();
|
|
303
|
+
#coinSymbolCache = new Map<string, string>();
|
|
304
|
+
#coinIndex: ReadonlyMap<string, CoinManifestEntry> = new Map();
|
|
305
|
+
#lastCoinsRef: CoinRecord | null = null;
|
|
300
306
|
|
|
301
307
|
override willUpdate(changedProperties: Map<string, unknown>) {
|
|
308
|
+
if (changedProperties.has('coins') && this.coins !== this.#lastCoinsRef) {
|
|
309
|
+
this.#coinIndex = indexCoinsByType(this.coins);
|
|
310
|
+
this.#lastCoinsRef = this.coins;
|
|
311
|
+
}
|
|
302
312
|
if (changedProperties.has('request')) {
|
|
303
313
|
this._analysis = null;
|
|
304
314
|
this._analysisError = null;
|
|
@@ -320,26 +330,41 @@ export class DevWalletSigning extends LitElement {
|
|
|
320
330
|
|
|
321
331
|
if (result.kind === 'rich') {
|
|
322
332
|
this._analysis = result.analysis;
|
|
323
|
-
//
|
|
324
|
-
|
|
333
|
+
// Seed coin metadata for all coin types in flows. The generated
|
|
334
|
+
// `coins` record (when provided) short-circuits the per-coin
|
|
335
|
+
// `getCoinMetadata` RPC; only unknown coin types fall through to
|
|
336
|
+
// the network.
|
|
337
|
+
if (result.analysis.coinFlows?.length) {
|
|
325
338
|
const coinTypes = [...new Set(result.analysis.coinFlows.map((f) => f.coinType))];
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
339
|
+
const unresolved: string[] = [];
|
|
340
|
+
for (const ct of coinTypes) {
|
|
341
|
+
if (this.#coinDecimalsCache.has(ct)) continue;
|
|
342
|
+
const seed = lookupCoinByType(this.#coinIndex, ct);
|
|
343
|
+
if (seed !== undefined) {
|
|
344
|
+
this.#coinDecimalsCache.set(ct, seed.decimals);
|
|
345
|
+
if (seed.symbol !== undefined) this.#coinSymbolCache.set(ct, seed.symbol);
|
|
346
|
+
continue;
|
|
347
|
+
}
|
|
348
|
+
unresolved.push(ct);
|
|
349
|
+
}
|
|
350
|
+
if (this.client && unresolved.length > 0) {
|
|
351
|
+
await Promise.all(
|
|
352
|
+
unresolved.map(async (ct) => {
|
|
330
353
|
try {
|
|
331
354
|
const { coinMetadata } = await this.client!.core.getCoinMetadata({
|
|
332
355
|
coinType: ct,
|
|
333
356
|
});
|
|
334
357
|
if (coinMetadata) {
|
|
335
358
|
this.#coinDecimalsCache.set(ct, coinMetadata.decimals);
|
|
359
|
+
if (coinMetadata.symbol) this.#coinSymbolCache.set(ct, coinMetadata.symbol);
|
|
336
360
|
}
|
|
337
361
|
} catch {
|
|
338
362
|
// leave uncached — will use 0 as fallback
|
|
339
363
|
}
|
|
340
364
|
}),
|
|
341
|
-
|
|
342
|
-
|
|
365
|
+
);
|
|
366
|
+
if (generation !== this.#analysisGeneration) return;
|
|
367
|
+
}
|
|
343
368
|
this.requestUpdate();
|
|
344
369
|
}
|
|
345
370
|
} else {
|
|
@@ -355,6 +380,7 @@ export class DevWalletSigning extends LitElement {
|
|
|
355
380
|
}
|
|
356
381
|
|
|
357
382
|
const typeLabel = REQUEST_TYPE_LABELS[this.request.type];
|
|
383
|
+
const account = this.request.account as PendingSigningRequest['account'] | undefined;
|
|
358
384
|
|
|
359
385
|
// For transactions: only allow approval after successful analysis
|
|
360
386
|
// For personal messages: always allow (no analysis needed)
|
|
@@ -370,36 +396,36 @@ export class DevWalletSigning extends LitElement {
|
|
|
370
396
|
<span class="signing-title">Approval Required</span>
|
|
371
397
|
</div>
|
|
372
398
|
|
|
373
|
-
<div class="request-type" part="request-type">${typeLabel}</div>
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
399
|
+
<div class="request-type" part="request-type">${typeLabel ?? 'Signing Request'}</div>
|
|
400
|
+
|
|
401
|
+
${account
|
|
402
|
+
? html`<div class="request-detail">
|
|
403
|
+
<span class="detail-label">Account</span>
|
|
404
|
+
<span
|
|
405
|
+
class="detail-value copyable-addr ${this.#copy.isCopied(account.address)
|
|
406
|
+
? 'copied'
|
|
407
|
+
: ''}"
|
|
408
|
+
title="Click to copy"
|
|
409
|
+
role="button"
|
|
410
|
+
tabindex="0"
|
|
411
|
+
aria-label="Copy account address"
|
|
412
|
+
@click=${() => this.#copy.copy(account.address)}
|
|
413
|
+
@keydown=${(e: KeyboardEvent) => {
|
|
414
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
415
|
+
e.preventDefault();
|
|
416
|
+
this.#copy.copy(account.address);
|
|
417
|
+
}
|
|
418
|
+
}}
|
|
419
|
+
>
|
|
420
|
+
${this.#copy.isCopied(account.address)
|
|
421
|
+
? 'Copied!'
|
|
422
|
+
: account.label
|
|
423
|
+
? html`${account.label}
|
|
424
|
+
<span class="detail-secondary">${formatAddress(account.address)}</span>`
|
|
425
|
+
: formatAddress(account.address)}
|
|
426
|
+
</span>
|
|
427
|
+
</div>`
|
|
428
|
+
: nothing}
|
|
403
429
|
${isTransaction
|
|
404
430
|
? html`<div class="request-detail">
|
|
405
431
|
<span class="detail-label">Chain</span>
|
|
@@ -459,10 +485,11 @@ export class DevWalletSigning extends LitElement {
|
|
|
459
485
|
<div class="coin-flows">
|
|
460
486
|
${flows.map((flow) => {
|
|
461
487
|
const decimals = this.#coinDecimalsCache.get(flow.coinType) ?? 0;
|
|
488
|
+
const symbol = this.#coinSymbolCache.get(flow.coinType) ?? getCoinSymbol(flow.coinType);
|
|
462
489
|
const formatted = formatCoinBalance(flow.amount, decimals);
|
|
463
490
|
return html`
|
|
464
491
|
<div class="coin-flow-item">
|
|
465
|
-
<span class="coin-flow-type">${
|
|
492
|
+
<span class="coin-flow-type">${symbol}</span>
|
|
466
493
|
<span class="coin-flow-amount"> -${formatted} </span>
|
|
467
494
|
</div>
|
|
468
495
|
`;
|