@lukso/up-connector 0.4.0-dev.a8c9315
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/LICENSE +201 -0
- package/README.md +280 -0
- package/dist/account-modal.cjs +9 -0
- package/dist/account-modal.cjs.map +1 -0
- package/dist/account-modal.d.cts +16 -0
- package/dist/account-modal.d.ts +16 -0
- package/dist/account-modal.js +9 -0
- package/dist/account-modal.js.map +1 -0
- package/dist/auto-setup.cjs +17 -0
- package/dist/auto-setup.cjs.map +1 -0
- package/dist/auto-setup.d.cts +123 -0
- package/dist/auto-setup.d.ts +123 -0
- package/dist/auto-setup.js +17 -0
- package/dist/auto-setup.js.map +1 -0
- package/dist/avatar-CmUCtW_w.d.cts +205 -0
- package/dist/avatar-CmUCtW_w.d.ts +205 -0
- package/dist/avatar.cjs +12 -0
- package/dist/avatar.cjs.map +1 -0
- package/dist/avatar.d.cts +1 -0
- package/dist/avatar.d.ts +1 -0
- package/dist/avatar.js +12 -0
- package/dist/avatar.js.map +1 -0
- package/dist/backup-modal.cjs +9 -0
- package/dist/backup-modal.cjs.map +1 -0
- package/dist/backup-modal.d.cts +41 -0
- package/dist/backup-modal.d.ts +41 -0
- package/dist/backup-modal.js +9 -0
- package/dist/backup-modal.js.map +1 -0
- package/dist/chunk-3SGSPHOZ.js +595 -0
- package/dist/chunk-3SGSPHOZ.js.map +1 -0
- package/dist/chunk-6AYZOIFY.js +181 -0
- package/dist/chunk-6AYZOIFY.js.map +1 -0
- package/dist/chunk-6N35TCFT.js +852 -0
- package/dist/chunk-6N35TCFT.js.map +1 -0
- package/dist/chunk-7ETKG6KR.cjs +387 -0
- package/dist/chunk-7ETKG6KR.cjs.map +1 -0
- package/dist/chunk-EUXUH3YW.js +15 -0
- package/dist/chunk-EUXUH3YW.js.map +1 -0
- package/dist/chunk-GFVUWAG4.cjs +158 -0
- package/dist/chunk-GFVUWAG4.cjs.map +1 -0
- package/dist/chunk-IAKQFHFD.cjs +595 -0
- package/dist/chunk-IAKQFHFD.cjs.map +1 -0
- package/dist/chunk-MH7MP7XK.cjs +181 -0
- package/dist/chunk-MH7MP7XK.cjs.map +1 -0
- package/dist/chunk-NWCNJSG3.js +387 -0
- package/dist/chunk-NWCNJSG3.js.map +1 -0
- package/dist/chunk-NXU2DQAV.js +1128 -0
- package/dist/chunk-NXU2DQAV.js.map +1 -0
- package/dist/chunk-ORJK2YGG.cjs +852 -0
- package/dist/chunk-ORJK2YGG.cjs.map +1 -0
- package/dist/chunk-RFA6SEIS.cjs +1128 -0
- package/dist/chunk-RFA6SEIS.cjs.map +1 -0
- package/dist/chunk-XGIT7YUY.js +31 -0
- package/dist/chunk-XGIT7YUY.js.map +1 -0
- package/dist/chunk-XOKG3KIL.cjs +31 -0
- package/dist/chunk-XOKG3KIL.cjs.map +1 -0
- package/dist/chunk-YIWSPI4I.js +158 -0
- package/dist/chunk-YIWSPI4I.js.map +1 -0
- package/dist/chunk-ZBDE64SD.cjs +15 -0
- package/dist/chunk-ZBDE64SD.cjs.map +1 -0
- package/dist/connect-modal/index.cjs +20 -0
- package/dist/connect-modal/index.cjs.map +1 -0
- package/dist/connect-modal/index.d.cts +9 -0
- package/dist/connect-modal/index.d.ts +9 -0
- package/dist/connect-modal/index.js +20 -0
- package/dist/connect-modal/index.js.map +1 -0
- package/dist/index-D2orHGFi.d.cts +8 -0
- package/dist/index-D2orHGFi.d.ts +8 -0
- package/dist/index.cjs +793 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +189 -0
- package/dist/index.d.ts +189 -0
- package/dist/index.js +793 -0
- package/dist/index.js.map +1 -0
- package/dist/restore-modal.cjs +9 -0
- package/dist/restore-modal.cjs.map +1 -0
- package/dist/restore-modal.d.cts +68 -0
- package/dist/restore-modal.d.ts +68 -0
- package/dist/restore-modal.js +9 -0
- package/dist/restore-modal.js.map +1 -0
- package/dist/wagmi-CVuDs_0h.d.cts +386 -0
- package/dist/wagmi-CVuDs_0h.d.ts +386 -0
- package/package.json +158 -0
- package/src/account-modal.ts +142 -0
- package/src/auto-setup.ts +362 -0
- package/src/avatar.ts +1135 -0
- package/src/backup-modal.ts +439 -0
- package/src/connect-modal/components/connection-view.ts +398 -0
- package/src/connect-modal/components/eoa-connection-view.ts +408 -0
- package/src/connect-modal/components/qr-code-view.ts +71 -0
- package/src/connect-modal/connect-modal.base.ts +18 -0
- package/src/connect-modal/connect-modal.config.ts +27 -0
- package/src/connect-modal/connect-modal.templates.ts +21 -0
- package/src/connect-modal/connect-modal.ts +270 -0
- package/src/connect-modal/connect-modal.types.ts +104 -0
- package/src/connect-modal/images/up-cube-glass.png +0 -0
- package/src/connect-modal/index.ts +23 -0
- package/src/connect-modal/services/wagmi.ts +266 -0
- package/src/connect-modal/styles/styles.css +1 -0
- package/src/connect-modal/utils/walletConnectDeepLinkUrl.ts +43 -0
- package/src/connector.ts +544 -0
- package/src/index.ts +62 -0
- package/src/popup-instance.ts +537 -0
- package/src/restore-modal.ts +702 -0
- package/src/styles/index.ts +28 -0
- package/src/styles/styles.css +1 -0
- package/src/types/css-raw.d.ts +4 -0
- package/src/types/images.d.ts +4 -0
- package/src/types.ts +168 -0
|
@@ -0,0 +1,595 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
|
+
|
|
3
|
+
var _chunkXOKG3KILcjs = require('./chunk-XOKG3KIL.cjs');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
var _chunkZBDE64SDcjs = require('./chunk-ZBDE64SD.cjs');
|
|
7
|
+
|
|
8
|
+
// src/restore-modal.ts
|
|
9
|
+
var _passkeyauth = require('@lukso/passkey-auth');
|
|
10
|
+
var _lit = require('lit');
|
|
11
|
+
var _decoratorsjs = require('lit/decorators.js');
|
|
12
|
+
require('@lukso/web-components/dist/components/lukso-modal');
|
|
13
|
+
require('@lukso/web-components/dist/components/lukso-button');
|
|
14
|
+
require('@lukso/web-components/dist/components/lukso-input');
|
|
15
|
+
var RestoreModal = class extends _chunkXOKG3KILcjs.CoreLitElement {
|
|
16
|
+
constructor() {
|
|
17
|
+
super(...arguments);
|
|
18
|
+
this.isOpen = false;
|
|
19
|
+
this.theme = "auto";
|
|
20
|
+
this.keyGenerator = null;
|
|
21
|
+
this.currentStep = 1 /* UPLOAD */;
|
|
22
|
+
this.selectedFile = null;
|
|
23
|
+
this.backupData = null;
|
|
24
|
+
this.fileError = null;
|
|
25
|
+
this.isDragging = false;
|
|
26
|
+
this.password = "";
|
|
27
|
+
this.passwordErrors = [];
|
|
28
|
+
this.isRestoring = false;
|
|
29
|
+
this.walletData = null;
|
|
30
|
+
this.validationWarnings = [];
|
|
31
|
+
this.validationInfo = [];
|
|
32
|
+
this.controllers = [];
|
|
33
|
+
this.restoredAddresses = [];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Public method for parent to set preview result
|
|
37
|
+
* Called after parent handles the 'preview' event
|
|
38
|
+
*/
|
|
39
|
+
setPreviewResult(options) {
|
|
40
|
+
this.controllers = options.controllers;
|
|
41
|
+
this.validationWarnings = options.warnings || [];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Public method for parent to set validation result
|
|
45
|
+
* Called after parent handles the 'validate' event
|
|
46
|
+
*/
|
|
47
|
+
setValidationResult(walletData, options) {
|
|
48
|
+
this.isRestoring = false;
|
|
49
|
+
if (_optionalChain([options, 'optionalAccess', _ => _.error])) {
|
|
50
|
+
this.passwordErrors = [options.error];
|
|
51
|
+
this.validationWarnings = [];
|
|
52
|
+
this.validationInfo = [];
|
|
53
|
+
} else if (walletData) {
|
|
54
|
+
this.walletData = walletData;
|
|
55
|
+
this.validationWarnings = _optionalChain([options, 'optionalAccess', _2 => _2.warnings]) || [];
|
|
56
|
+
this.validationInfo = _optionalChain([options, 'optionalAccess', _3 => _3.info]) || [];
|
|
57
|
+
this.currentStep = 4 /* SUCCESS */;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
render() {
|
|
61
|
+
return _lit.html`
|
|
62
|
+
<lukso-modal
|
|
63
|
+
?is-open=${this.isOpen}
|
|
64
|
+
size="medium"
|
|
65
|
+
@on-backdrop-click=${this.close}
|
|
66
|
+
>
|
|
67
|
+
<div class="p-6">
|
|
68
|
+
<!-- Header -->
|
|
69
|
+
<h2 class="m-0 mb-6 text-neutral-20 dark:text-white heading-inter-21-semi-bold">
|
|
70
|
+
${this.getStepTitle()}
|
|
71
|
+
</h2>
|
|
72
|
+
|
|
73
|
+
<!-- Step content -->
|
|
74
|
+
${this.renderStep()}
|
|
75
|
+
</div>
|
|
76
|
+
</lukso-modal>
|
|
77
|
+
`;
|
|
78
|
+
}
|
|
79
|
+
renderStep() {
|
|
80
|
+
switch (this.currentStep) {
|
|
81
|
+
case 1 /* UPLOAD */:
|
|
82
|
+
return this.renderUploadStep();
|
|
83
|
+
case 2 /* PASSWORD */:
|
|
84
|
+
return this.renderPasswordStep();
|
|
85
|
+
case 3 /* PREVIEW */:
|
|
86
|
+
return this.renderPreviewStep();
|
|
87
|
+
case 4 /* SUCCESS */:
|
|
88
|
+
return this.renderSuccessStep();
|
|
89
|
+
default:
|
|
90
|
+
return _lit.nothing;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
renderUploadStep() {
|
|
94
|
+
return _lit.html`
|
|
95
|
+
<p class="mb-6 text-neutral-40 dark:text-neutral-50 paragraph-inter-16-regular">
|
|
96
|
+
Select your backup file to restore your wallet data. Your backup file stays on your device and is never uploaded.
|
|
97
|
+
</p>
|
|
98
|
+
|
|
99
|
+
<div
|
|
100
|
+
class="border-2 border-dashed rounded-xl p-10 text-center bg-neutral-95 dark:bg-neutral-80 transition-all cursor-pointer my-6 ${this.isDragging ? "border-blue-60 bg-blue-95 dark:bg-blue-95/10" : this.fileError ? "border-red-55 bg-red-95" : "border-neutral-90 dark:border-neutral-70"}"
|
|
101
|
+
@drop=${this.handleDrop}
|
|
102
|
+
@dragover=${this.handleDragOver}
|
|
103
|
+
@dragleave=${this.handleDragLeave}
|
|
104
|
+
@click=${this.triggerFileInput}
|
|
105
|
+
>
|
|
106
|
+
<div class="flex flex-col items-center gap-3">
|
|
107
|
+
<p class="m-0 text-neutral-10 dark:text-white heading-inter-16-semi-bold">
|
|
108
|
+
Drag and drop your backup file here
|
|
109
|
+
</p>
|
|
110
|
+
<p class="m-0 text-neutral-40 paragraph-inter-14-regular">or</p>
|
|
111
|
+
<lukso-button
|
|
112
|
+
variant="primary"
|
|
113
|
+
@click=${(e) => {
|
|
114
|
+
e.stopPropagation();
|
|
115
|
+
this.triggerFileInput();
|
|
116
|
+
}}
|
|
117
|
+
>
|
|
118
|
+
Choose File
|
|
119
|
+
</lukso-button>
|
|
120
|
+
${this.selectedFile ? _lit.html`
|
|
121
|
+
<p class="mt-2 mb-0 text-green-54 paragraph-inter-14-semi-bold">
|
|
122
|
+
${this.selectedFile.name}
|
|
123
|
+
</p>
|
|
124
|
+
` : _lit.nothing}
|
|
125
|
+
${this.fileError ? _lit.html`
|
|
126
|
+
<p class="mt-2 mb-0 text-red-55 paragraph-inter-14-semi-bold">
|
|
127
|
+
${this.fileError}
|
|
128
|
+
</p>
|
|
129
|
+
` : _lit.nothing}
|
|
130
|
+
</div>
|
|
131
|
+
</div>
|
|
132
|
+
|
|
133
|
+
<input
|
|
134
|
+
type="file"
|
|
135
|
+
class="hidden"
|
|
136
|
+
accept=".json"
|
|
137
|
+
@change=${this.handleFileSelect}
|
|
138
|
+
/>
|
|
139
|
+
|
|
140
|
+
<div class="flex justify-end mt-6">
|
|
141
|
+
<lukso-button variant="text" @click=${this.close}>
|
|
142
|
+
Cancel
|
|
143
|
+
</lukso-button>
|
|
144
|
+
</div>
|
|
145
|
+
`;
|
|
146
|
+
}
|
|
147
|
+
renderPasswordStep() {
|
|
148
|
+
const canProceed = this.password && this.password.length > 0;
|
|
149
|
+
return _lit.html`
|
|
150
|
+
<p class="mb-5 text-neutral-40 dark:text-neutral-50 paragraph-inter-14-regular">
|
|
151
|
+
This backup is encrypted. Enter the password to decrypt it.
|
|
152
|
+
</p>
|
|
153
|
+
|
|
154
|
+
<div>
|
|
155
|
+
<lukso-input
|
|
156
|
+
type="password"
|
|
157
|
+
label="Password"
|
|
158
|
+
placeholder="Enter decryption password"
|
|
159
|
+
.value=${this.password}
|
|
160
|
+
@on-input=${(e) => this.password = e.detail.value}
|
|
161
|
+
@keyup=${(e) => e.key === "Enter" && canProceed && this.previewRestore()}
|
|
162
|
+
is-full-width
|
|
163
|
+
autofocus
|
|
164
|
+
></lukso-input>
|
|
165
|
+
${this.passwordErrors.map(
|
|
166
|
+
(error) => _lit.html`
|
|
167
|
+
<div class="mt-1 text-red-55 paragraph-inter-13-regular">${error}</div>
|
|
168
|
+
`
|
|
169
|
+
)}
|
|
170
|
+
</div>
|
|
171
|
+
|
|
172
|
+
<div class="flex justify-between gap-3 mt-6">
|
|
173
|
+
<div class="flex gap-3">
|
|
174
|
+
<lukso-button variant="text" @click=${this.close}>
|
|
175
|
+
Cancel
|
|
176
|
+
</lukso-button>
|
|
177
|
+
<lukso-button variant="secondary" @click=${this.goBack}>
|
|
178
|
+
Back
|
|
179
|
+
</lukso-button>
|
|
180
|
+
</div>
|
|
181
|
+
<lukso-button
|
|
182
|
+
variant="primary"
|
|
183
|
+
?disabled=${!canProceed || this.isRestoring}
|
|
184
|
+
?is-loading=${this.isRestoring}
|
|
185
|
+
@click=${this.previewRestore}
|
|
186
|
+
>
|
|
187
|
+
Continue
|
|
188
|
+
</lukso-button>
|
|
189
|
+
</div>
|
|
190
|
+
`;
|
|
191
|
+
}
|
|
192
|
+
renderPreviewStep() {
|
|
193
|
+
return _lit.html`
|
|
194
|
+
<p class="mb-6 text-neutral-40 dark:text-neutral-50 paragraph-inter-16-regular">
|
|
195
|
+
${this.controllers.length > 0 ? `Found ${this.controllers.length} controller${this.controllers.length === 1 ? "" : "s"} in backup.` : "No controllers found in backup."}
|
|
196
|
+
</p>
|
|
197
|
+
|
|
198
|
+
${this.controllers.length > 0 ? _lit.html`
|
|
199
|
+
<div class="mb-6">
|
|
200
|
+
<div class="mb-3 text-neutral-20 dark:text-neutral-90 paragraph-inter-14-semi-bold">
|
|
201
|
+
Controllers:
|
|
202
|
+
</div>
|
|
203
|
+
${this.controllers.map(
|
|
204
|
+
(controller) => _lit.html`
|
|
205
|
+
<div class="bg-neutral-95 dark:bg-neutral-80 border border-neutral-90 dark:border-neutral-70 rounded-lg px-3 py-2.5 mb-2">
|
|
206
|
+
<div class="flex items-center justify-between">
|
|
207
|
+
<div class="text-neutral-40 paragraph-inter-13-regular font-mono">
|
|
208
|
+
${this.truncateAddress(controller.address)}
|
|
209
|
+
</div>
|
|
210
|
+
<div
|
|
211
|
+
class="px-2 py-0.5 rounded text-xs font-semibold ${controller.status === "new" ? "bg-green-95 dark:bg-green-95/10 text-green-55 border border-green-55/30" : "bg-neutral-90 dark:bg-neutral-70 text-neutral-50 border border-neutral-80 dark:border-neutral-60"}"
|
|
212
|
+
>
|
|
213
|
+
${controller.status === "new" ? "NEW" : "EXISTS"}
|
|
214
|
+
</div>
|
|
215
|
+
</div>
|
|
216
|
+
<div class="text-neutral-60 paragraph-inter-12-regular mt-1">
|
|
217
|
+
${controller.address}
|
|
218
|
+
</div>
|
|
219
|
+
</div>
|
|
220
|
+
`
|
|
221
|
+
)}
|
|
222
|
+
</div>
|
|
223
|
+
` : _lit.nothing}
|
|
224
|
+
|
|
225
|
+
${this.validationWarnings.length > 0 ? _lit.html`
|
|
226
|
+
<div class="mb-4">
|
|
227
|
+
${this.validationWarnings.map(
|
|
228
|
+
(warning) => _lit.html`
|
|
229
|
+
<div class="bg-yellow-95 dark:bg-yellow-95/10 border border-yellow-55 dark:border-yellow-55/50 rounded-lg px-3 py-2.5 mb-2 flex items-start gap-2">
|
|
230
|
+
<span class="text-yellow-55 dark:text-yellow-55 text-lg leading-none">⚠️</span>
|
|
231
|
+
<span class="text-yellow-55 dark:text-yellow-55 paragraph-inter-13-regular flex-1">${warning}</span>
|
|
232
|
+
</div>
|
|
233
|
+
`
|
|
234
|
+
)}
|
|
235
|
+
</div>
|
|
236
|
+
` : _lit.nothing}
|
|
237
|
+
|
|
238
|
+
<div class="flex justify-between gap-3 mt-6">
|
|
239
|
+
<div class="flex gap-3">
|
|
240
|
+
<lukso-button variant="text" @click=${this.close}>
|
|
241
|
+
Cancel
|
|
242
|
+
</lukso-button>
|
|
243
|
+
<lukso-button variant="secondary" @click=${this.goBackFromPreview}>
|
|
244
|
+
Back
|
|
245
|
+
</lukso-button>
|
|
246
|
+
</div>
|
|
247
|
+
<lukso-button
|
|
248
|
+
variant="primary"
|
|
249
|
+
@click=${this.confirmRestore}
|
|
250
|
+
>
|
|
251
|
+
Confirm Restore
|
|
252
|
+
</lukso-button>
|
|
253
|
+
</div>
|
|
254
|
+
`;
|
|
255
|
+
}
|
|
256
|
+
renderSuccessStep() {
|
|
257
|
+
return _lit.html`
|
|
258
|
+
<!-- Success header with icon -->
|
|
259
|
+
<div class="text-center mb-6">
|
|
260
|
+
<div class="w-16 h-16 mx-auto mb-4 bg-green-95 dark:bg-green-95/20 rounded-full flex items-center justify-center">
|
|
261
|
+
<span class="text-2xl text-green-55">✅</span>
|
|
262
|
+
</div>
|
|
263
|
+
<h3 class="text-neutral-20 dark:text-white heading-inter-18-semi-bold mb-2">
|
|
264
|
+
Wallet Restored Successfully!
|
|
265
|
+
</h3>
|
|
266
|
+
<p class="text-neutral-40 dark:text-neutral-50 paragraph-inter-14-regular">
|
|
267
|
+
${this.restoredAddresses.length > 0 ? `Imported ${this.restoredAddresses.length} address${this.restoredAddresses.length > 1 ? "es" : ""} to your wallet.` : "Your wallet has been restored successfully."}
|
|
268
|
+
</p>
|
|
269
|
+
</div>
|
|
270
|
+
|
|
271
|
+
<!-- Restored addresses -->
|
|
272
|
+
${this.restoredAddresses.length > 0 ? _lit.html`
|
|
273
|
+
<div class="mb-6">
|
|
274
|
+
<div class="mb-3 text-neutral-20 dark:text-neutral-90 paragraph-inter-14-semi-bold">
|
|
275
|
+
Restored Addresses:
|
|
276
|
+
</div>
|
|
277
|
+
${this.restoredAddresses.map(
|
|
278
|
+
(address) => _lit.html`
|
|
279
|
+
<div class="bg-green-95 dark:bg-green-95/10 border border-green-60 dark:border-green-60/50 rounded-lg px-3 py-2.5 mb-2 flex items-center gap-2">
|
|
280
|
+
<span class="text-green-60 dark:text-green-45 text-sm">✓</span>
|
|
281
|
+
<span class="text-neutral-20 dark:text-white paragraph-inter-13-regular font-mono flex-1">${this.truncateAddress(address)}</span>
|
|
282
|
+
</div>
|
|
283
|
+
`
|
|
284
|
+
)}
|
|
285
|
+
</div>
|
|
286
|
+
` : ""}
|
|
287
|
+
|
|
288
|
+
<!-- Action buttons for success -->
|
|
289
|
+
<div class="flex justify-center mt-6">
|
|
290
|
+
<lukso-button variant="primary" @click=${this.close}>
|
|
291
|
+
OK
|
|
292
|
+
</lukso-button>
|
|
293
|
+
</div>
|
|
294
|
+
`;
|
|
295
|
+
}
|
|
296
|
+
getStepTitle() {
|
|
297
|
+
switch (this.currentStep) {
|
|
298
|
+
case 1 /* UPLOAD */:
|
|
299
|
+
return "Restore Wallet";
|
|
300
|
+
case 2 /* PASSWORD */:
|
|
301
|
+
return "Enter Password";
|
|
302
|
+
case 3 /* PREVIEW */:
|
|
303
|
+
return "Review Changes";
|
|
304
|
+
case 4 /* SUCCESS */:
|
|
305
|
+
return "Restore Complete";
|
|
306
|
+
default:
|
|
307
|
+
return "Restore Wallet";
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
triggerFileInput() {
|
|
311
|
+
const input = _optionalChain([this, 'access', _4 => _4.shadowRoot, 'optionalAccess', _5 => _5.querySelector, 'call', _6 => _6(
|
|
312
|
+
'input[type="file"]'
|
|
313
|
+
)]);
|
|
314
|
+
if (input) {
|
|
315
|
+
input.click();
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
async handleFileSelect(e) {
|
|
319
|
+
const input = e.target;
|
|
320
|
+
const file = _optionalChain([input, 'access', _7 => _7.files, 'optionalAccess', _8 => _8[0]]);
|
|
321
|
+
if (file) {
|
|
322
|
+
await this.handleFile(file);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
handleDragOver(e) {
|
|
326
|
+
e.preventDefault();
|
|
327
|
+
this.isDragging = true;
|
|
328
|
+
}
|
|
329
|
+
handleDragLeave() {
|
|
330
|
+
this.isDragging = false;
|
|
331
|
+
}
|
|
332
|
+
async handleDrop(e) {
|
|
333
|
+
e.preventDefault();
|
|
334
|
+
this.isDragging = false;
|
|
335
|
+
const file = _optionalChain([e, 'access', _9 => _9.dataTransfer, 'optionalAccess', _10 => _10.files, 'optionalAccess', _11 => _11[0]]);
|
|
336
|
+
if (file) {
|
|
337
|
+
await this.handleFile(file);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
async handleFile(file) {
|
|
341
|
+
this.fileError = null;
|
|
342
|
+
if (!file.name.endsWith(".json")) {
|
|
343
|
+
this.fileError = "Please select a valid JSON backup file";
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
try {
|
|
347
|
+
const backup = await _passkeyauth.readBackupFile.call(void 0, file);
|
|
348
|
+
this.selectedFile = file;
|
|
349
|
+
this.backupData = backup;
|
|
350
|
+
const isEncrypted = backup.encryptedSecrets ? true : _optionalChain([backup, 'access', _12 => _12.secrets, 'optionalAccess', _13 => _13.encrypted]);
|
|
351
|
+
if (isEncrypted) {
|
|
352
|
+
this.currentStep = 2 /* PASSWORD */;
|
|
353
|
+
} else {
|
|
354
|
+
await this.previewRestore();
|
|
355
|
+
}
|
|
356
|
+
} catch (error) {
|
|
357
|
+
this.fileError = error instanceof Error ? error.message : "Failed to read backup file";
|
|
358
|
+
console.error("Failed to read backup file:", error);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
async previewRestore() {
|
|
362
|
+
if (!this.backupData) return;
|
|
363
|
+
this.isRestoring = true;
|
|
364
|
+
this.passwordErrors = [];
|
|
365
|
+
try {
|
|
366
|
+
let decryptedBackup = this.backupData;
|
|
367
|
+
if (this.backupData.encryptedSecrets || _optionalChain([this, 'access', _14 => _14.backupData, 'access', _15 => _15.secrets, 'optionalAccess', _16 => _16.encrypted])) {
|
|
368
|
+
if (!this.keyGenerator) {
|
|
369
|
+
throw new Error("KeyGenerator not available");
|
|
370
|
+
}
|
|
371
|
+
const verifiedBackup = await this.keyGenerator.verifyBackup(
|
|
372
|
+
this.backupData,
|
|
373
|
+
this.password
|
|
374
|
+
);
|
|
375
|
+
decryptedBackup = verifiedBackup;
|
|
376
|
+
} else {
|
|
377
|
+
decryptedBackup = this.backupData;
|
|
378
|
+
}
|
|
379
|
+
const backupControllers = /* @__PURE__ */ new Set();
|
|
380
|
+
const secretsData = _optionalChain([decryptedBackup, 'access', _17 => _17.secrets, 'optionalAccess', _18 => _18.data]) || [];
|
|
381
|
+
for (const secret of secretsData) {
|
|
382
|
+
if (secret.address) {
|
|
383
|
+
backupControllers.add(secret.address.toLowerCase());
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
for (const account of decryptedBackup.accounts || []) {
|
|
387
|
+
if (account.networks) {
|
|
388
|
+
for (const network of account.networks) {
|
|
389
|
+
for (const controller of network.controllers || []) {
|
|
390
|
+
if (controller.address) {
|
|
391
|
+
backupControllers.add(controller.address.toLowerCase());
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
const lsp23Deployments = decryptedBackup.LSP23CrossChainDeployment || [];
|
|
398
|
+
for (const deployment of lsp23Deployments) {
|
|
399
|
+
for (const controller of deployment.initialControllers || []) {
|
|
400
|
+
if (controller.address) {
|
|
401
|
+
backupControllers.add(controller.address.toLowerCase());
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
console.log(
|
|
406
|
+
"\u{1F50D} [RestoreModal] Found controller addresses:",
|
|
407
|
+
Array.from(backupControllers)
|
|
408
|
+
);
|
|
409
|
+
for (const secret of secretsData) {
|
|
410
|
+
if (secret.address) {
|
|
411
|
+
backupControllers.add(secret.address.toLowerCase());
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
this.controllers = Array.from(backupControllers).map((address) => ({
|
|
415
|
+
address,
|
|
416
|
+
status: "new"
|
|
417
|
+
}));
|
|
418
|
+
this.currentStep = 3 /* PREVIEW */;
|
|
419
|
+
} catch (error) {
|
|
420
|
+
console.error("Failed to preview restore:", error);
|
|
421
|
+
const errorMessage = error instanceof Error ? error.message : "Failed to preview restore";
|
|
422
|
+
if (errorMessage.toLowerCase().includes("password")) {
|
|
423
|
+
this.passwordErrors = ["Incorrect password. Please try again."];
|
|
424
|
+
} else {
|
|
425
|
+
this.fileError = errorMessage;
|
|
426
|
+
this.currentStep = 1 /* UPLOAD */;
|
|
427
|
+
this.selectedFile = null;
|
|
428
|
+
this.backupData = null;
|
|
429
|
+
const input = _optionalChain([this, 'access', _19 => _19.shadowRoot, 'optionalAccess', _20 => _20.querySelector, 'call', _21 => _21(
|
|
430
|
+
'input[type="file"]'
|
|
431
|
+
)]);
|
|
432
|
+
if (input) {
|
|
433
|
+
input.value = "";
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
} finally {
|
|
437
|
+
this.isRestoring = false;
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
async confirmRestore() {
|
|
441
|
+
if (!this.backupData || !this.keyGenerator) {
|
|
442
|
+
console.error(
|
|
443
|
+
"\u274C [RestoreModal] Missing backup data or keyGenerator for restore"
|
|
444
|
+
);
|
|
445
|
+
this.dispatchEvent(
|
|
446
|
+
new CustomEvent("error", {
|
|
447
|
+
detail: { error: "Missing backup data or keyGenerator" },
|
|
448
|
+
bubbles: true,
|
|
449
|
+
composed: true
|
|
450
|
+
})
|
|
451
|
+
);
|
|
452
|
+
return;
|
|
453
|
+
}
|
|
454
|
+
try {
|
|
455
|
+
this.isRestoring = true;
|
|
456
|
+
console.log("\u{1F504} [RestoreModal] Starting secure restoration process...");
|
|
457
|
+
const result = await this.keyGenerator.restoreFromBackup(
|
|
458
|
+
this.backupData,
|
|
459
|
+
this.password
|
|
460
|
+
);
|
|
461
|
+
if (result.success) {
|
|
462
|
+
console.log("\u2705 [RestoreModal] Restore successful:", result.addresses);
|
|
463
|
+
this.restoredAddresses = result.addresses;
|
|
464
|
+
this.dispatchEvent(
|
|
465
|
+
new CustomEvent("success", {
|
|
466
|
+
detail: { addresses: result.addresses },
|
|
467
|
+
bubbles: true,
|
|
468
|
+
composed: true
|
|
469
|
+
})
|
|
470
|
+
);
|
|
471
|
+
this.currentStep = 4 /* SUCCESS */;
|
|
472
|
+
} else {
|
|
473
|
+
console.error("\u274C [RestoreModal] Restore failed");
|
|
474
|
+
this.dispatchEvent(
|
|
475
|
+
new CustomEvent("error", {
|
|
476
|
+
detail: {
|
|
477
|
+
error: "Restore failed. Please check the backup file and password."
|
|
478
|
+
},
|
|
479
|
+
bubbles: true,
|
|
480
|
+
composed: true
|
|
481
|
+
})
|
|
482
|
+
);
|
|
483
|
+
}
|
|
484
|
+
} catch (error) {
|
|
485
|
+
console.error("\u274C [RestoreModal] Restore error:", error);
|
|
486
|
+
const errorMessage = error instanceof Error ? error.message : "Unknown error";
|
|
487
|
+
this.dispatchEvent(
|
|
488
|
+
new CustomEvent("error", {
|
|
489
|
+
detail: { error: errorMessage },
|
|
490
|
+
bubbles: true,
|
|
491
|
+
composed: true
|
|
492
|
+
})
|
|
493
|
+
);
|
|
494
|
+
} finally {
|
|
495
|
+
this.isRestoring = false;
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
goBack() {
|
|
499
|
+
if (this.currentStep === 2 /* PASSWORD */) {
|
|
500
|
+
this.currentStep = 1 /* UPLOAD */;
|
|
501
|
+
this.password = "";
|
|
502
|
+
this.passwordErrors = [];
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
goBackFromPreview() {
|
|
506
|
+
const isEncrypted = _optionalChain([this, 'access', _22 => _22.backupData, 'optionalAccess', _23 => _23.encryptedSecrets]) ? true : _optionalChain([this, 'access', _24 => _24.backupData, 'optionalAccess', _25 => _25.secrets, 'optionalAccess', _26 => _26.encrypted]);
|
|
507
|
+
if (isEncrypted) {
|
|
508
|
+
this.currentStep = 2 /* PASSWORD */;
|
|
509
|
+
} else {
|
|
510
|
+
this.currentStep = 1 /* UPLOAD */;
|
|
511
|
+
}
|
|
512
|
+
this.controllers = [];
|
|
513
|
+
this.validationWarnings = [];
|
|
514
|
+
}
|
|
515
|
+
close() {
|
|
516
|
+
this.isOpen = false;
|
|
517
|
+
this.dispatchEvent(
|
|
518
|
+
new CustomEvent("close", { bubbles: true, composed: true })
|
|
519
|
+
);
|
|
520
|
+
setTimeout(() => {
|
|
521
|
+
this.currentStep = 1 /* UPLOAD */;
|
|
522
|
+
this.selectedFile = null;
|
|
523
|
+
this.backupData = null;
|
|
524
|
+
this.fileError = null;
|
|
525
|
+
this.isDragging = false;
|
|
526
|
+
this.password = "";
|
|
527
|
+
this.passwordErrors = [];
|
|
528
|
+
this.isRestoring = false;
|
|
529
|
+
this.walletData = null;
|
|
530
|
+
this.restoredAddresses = [];
|
|
531
|
+
this.controllers = [];
|
|
532
|
+
this.validationWarnings = [];
|
|
533
|
+
}, 300);
|
|
534
|
+
}
|
|
535
|
+
truncateAddress(address) {
|
|
536
|
+
if (!address || address.length < 10) return address;
|
|
537
|
+
return `${address.slice(0, 6)}...${address.slice(-4)}`;
|
|
538
|
+
}
|
|
539
|
+
};
|
|
540
|
+
_chunkZBDE64SDcjs.__decorateClass.call(void 0, [
|
|
541
|
+
_decoratorsjs.property.call(void 0, { type: Boolean, reflect: true })
|
|
542
|
+
], RestoreModal.prototype, "isOpen", 2);
|
|
543
|
+
_chunkZBDE64SDcjs.__decorateClass.call(void 0, [
|
|
544
|
+
_decoratorsjs.property.call(void 0, { type: String })
|
|
545
|
+
], RestoreModal.prototype, "theme", 2);
|
|
546
|
+
_chunkZBDE64SDcjs.__decorateClass.call(void 0, [
|
|
547
|
+
_decoratorsjs.property.call(void 0, { type: Object })
|
|
548
|
+
], RestoreModal.prototype, "keyGenerator", 2);
|
|
549
|
+
_chunkZBDE64SDcjs.__decorateClass.call(void 0, [
|
|
550
|
+
_decoratorsjs.state.call(void 0, )
|
|
551
|
+
], RestoreModal.prototype, "currentStep", 2);
|
|
552
|
+
_chunkZBDE64SDcjs.__decorateClass.call(void 0, [
|
|
553
|
+
_decoratorsjs.state.call(void 0, )
|
|
554
|
+
], RestoreModal.prototype, "selectedFile", 2);
|
|
555
|
+
_chunkZBDE64SDcjs.__decorateClass.call(void 0, [
|
|
556
|
+
_decoratorsjs.state.call(void 0, )
|
|
557
|
+
], RestoreModal.prototype, "backupData", 2);
|
|
558
|
+
_chunkZBDE64SDcjs.__decorateClass.call(void 0, [
|
|
559
|
+
_decoratorsjs.state.call(void 0, )
|
|
560
|
+
], RestoreModal.prototype, "fileError", 2);
|
|
561
|
+
_chunkZBDE64SDcjs.__decorateClass.call(void 0, [
|
|
562
|
+
_decoratorsjs.state.call(void 0, )
|
|
563
|
+
], RestoreModal.prototype, "isDragging", 2);
|
|
564
|
+
_chunkZBDE64SDcjs.__decorateClass.call(void 0, [
|
|
565
|
+
_decoratorsjs.state.call(void 0, )
|
|
566
|
+
], RestoreModal.prototype, "password", 2);
|
|
567
|
+
_chunkZBDE64SDcjs.__decorateClass.call(void 0, [
|
|
568
|
+
_decoratorsjs.state.call(void 0, )
|
|
569
|
+
], RestoreModal.prototype, "passwordErrors", 2);
|
|
570
|
+
_chunkZBDE64SDcjs.__decorateClass.call(void 0, [
|
|
571
|
+
_decoratorsjs.state.call(void 0, )
|
|
572
|
+
], RestoreModal.prototype, "isRestoring", 2);
|
|
573
|
+
_chunkZBDE64SDcjs.__decorateClass.call(void 0, [
|
|
574
|
+
_decoratorsjs.state.call(void 0, )
|
|
575
|
+
], RestoreModal.prototype, "walletData", 2);
|
|
576
|
+
_chunkZBDE64SDcjs.__decorateClass.call(void 0, [
|
|
577
|
+
_decoratorsjs.state.call(void 0, )
|
|
578
|
+
], RestoreModal.prototype, "validationWarnings", 2);
|
|
579
|
+
_chunkZBDE64SDcjs.__decorateClass.call(void 0, [
|
|
580
|
+
_decoratorsjs.state.call(void 0, )
|
|
581
|
+
], RestoreModal.prototype, "validationInfo", 2);
|
|
582
|
+
_chunkZBDE64SDcjs.__decorateClass.call(void 0, [
|
|
583
|
+
_decoratorsjs.state.call(void 0, )
|
|
584
|
+
], RestoreModal.prototype, "controllers", 2);
|
|
585
|
+
_chunkZBDE64SDcjs.__decorateClass.call(void 0, [
|
|
586
|
+
_decoratorsjs.state.call(void 0, )
|
|
587
|
+
], RestoreModal.prototype, "restoredAddresses", 2);
|
|
588
|
+
RestoreModal = exports.RestoreModal = _chunkZBDE64SDcjs.__decorateClass.call(void 0, [
|
|
589
|
+
_decoratorsjs.customElement.call(void 0, "restore-modal")
|
|
590
|
+
], RestoreModal);
|
|
591
|
+
|
|
592
|
+
|
|
593
|
+
|
|
594
|
+
exports.RestoreModal = RestoreModal;
|
|
595
|
+
//# sourceMappingURL=chunk-IAKQFHFD.cjs.map
|