@lukso/up-connector 0.9.0 → 0.10.0-dev.ce42189
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/dist/account-modal.cjs +2 -2
- package/dist/account-modal.js +1 -1
- package/dist/backup-modal.cjs +2 -2
- package/dist/backup-modal.js +1 -1
- package/dist/{chunk-D7RI2CWB.js → chunk-JWH7V5IC.js} +2 -2
- package/dist/chunk-JWH7V5IC.js.map +1 -0
- package/dist/{chunk-PHRCQCEN.cjs → chunk-NWCDXQPG.cjs} +3 -3
- package/dist/chunk-NWCDXQPG.cjs.map +1 -0
- package/dist/{chunk-XKSB6TPG.js → chunk-P4YKM2GB.js} +2 -2
- package/dist/chunk-P4YKM2GB.js.map +1 -0
- package/dist/{chunk-XCX7QWLC.cjs → chunk-UHBHVPXI.cjs} +3 -3
- package/dist/chunk-UHBHVPXI.cjs.map +1 -0
- package/dist/{chunk-43E6AVSP.js → chunk-XEMCMM64.js} +2 -2
- package/dist/chunk-XEMCMM64.js.map +1 -0
- package/dist/{chunk-UJDGQG6P.cjs → chunk-YOFQI4WS.cjs} +3 -3
- package/dist/chunk-YOFQI4WS.cjs.map +1 -0
- package/dist/index.cjs +4 -4
- package/dist/index.js +3 -3
- package/dist/restore-modal.cjs +2 -2
- package/dist/restore-modal.js +1 -1
- package/package.json +7 -7
- package/src/account-modal.ts +1 -1
- package/src/backup-modal.ts +1 -1
- package/src/restore-modal.ts +1 -1
- package/dist/chunk-43E6AVSP.js.map +0 -1
- package/dist/chunk-D7RI2CWB.js.map +0 -1
- package/dist/chunk-PHRCQCEN.cjs.map +0 -1
- package/dist/chunk-UJDGQG6P.cjs.map +0 -1
- package/dist/chunk-XCX7QWLC.cjs.map +0 -1
- package/dist/chunk-XKSB6TPG.js.map +0 -1
package/dist/account-modal.cjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkYOFQI4WScjs = require('./chunk-YOFQI4WS.cjs');
|
|
4
4
|
require('./chunk-3AIZSSEE.cjs');
|
|
5
5
|
require('./chunk-ZBDE64SD.cjs');
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
exports.AccountModal =
|
|
8
|
+
exports.AccountModal = _chunkYOFQI4WScjs.AccountModal;
|
|
9
9
|
//# sourceMappingURL=account-modal.cjs.map
|
package/dist/account-modal.js
CHANGED
package/dist/backup-modal.cjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkUHBHVPXIcjs = require('./chunk-UHBHVPXI.cjs');
|
|
4
4
|
require('./chunk-3AIZSSEE.cjs');
|
|
5
5
|
require('./chunk-ZBDE64SD.cjs');
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
exports.BackupModal =
|
|
8
|
+
exports.BackupModal = _chunkUHBHVPXIcjs.BackupModal;
|
|
9
9
|
//# sourceMappingURL=backup-modal.cjs.map
|
package/dist/backup-modal.js
CHANGED
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
} from "./chunk-EUXUH3YW.js";
|
|
7
7
|
|
|
8
8
|
// src/account-modal.ts
|
|
9
|
-
import { safeCustomElement } from "@lukso/
|
|
9
|
+
import { safeCustomElement } from "@lukso/core/utils";
|
|
10
10
|
import { html } from "lit";
|
|
11
11
|
import { property } from "lit/decorators.js";
|
|
12
12
|
import "@lukso/web-components/dist/components/lukso-modal";
|
|
@@ -156,4 +156,4 @@ AccountModal = __decorateClass([
|
|
|
156
156
|
export {
|
|
157
157
|
AccountModal
|
|
158
158
|
};
|
|
159
|
-
//# sourceMappingURL=chunk-
|
|
159
|
+
//# sourceMappingURL=chunk-JWH7V5IC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/account-modal.ts"],"sourcesContent":["/**\n * Account Modal - Lit Component\n *\n * Framework-agnostic account management modal showing connected wallet details.\n * Uses lukso-modal from @lukso/web-components for consistent UI.\n */\n\nimport { safeCustomElement } from '@lukso/core/utils'\nimport { html } from 'lit'\nimport { property } from 'lit/decorators.js'\nimport { CoreLitElement } from './styles'\n\n// Import lukso web components\nimport '@lukso/web-components/dist/components/lukso-modal'\nimport '@lukso/web-components/dist/components/lukso-button'\n\n@safeCustomElement('account-modal')\nexport class AccountModal extends CoreLitElement {\n // Public properties\n @property({ type: Boolean, reflect: true }) open = false\n @property({ type: String }) theme: 'light' | 'dark' | 'auto' = 'auto'\n @property({ type: String }) address = ''\n @property({ type: Number }) chainId?: number\n @property({ type: String }) connectorName = ''\n\n private close() {\n this.open = false\n this.dispatchEvent(new CustomEvent('close'))\n }\n\n private handleDisconnect() {\n this.dispatchEvent(new CustomEvent('disconnect'))\n this.close()\n }\n\n private getChainName(): string {\n switch (this.chainId) {\n case 42:\n return 'LUKSO Mainnet'\n case 4201:\n return 'LUKSO Testnet'\n default:\n return this.chainId ? `Chain ${this.chainId}` : 'Unknown Network'\n }\n }\n\n render() {\n return html`\n <lukso-modal\n ?is-open=${this.open}\n size=\"small\"\n @on-backdrop-click=${this.close}\n >\n <div class=\"p-6\">\n <!-- Header with close button -->\n <div class=\"flex justify-between items-center mb-6\">\n <h2 class=\"text-xl font-semibold\">Connected Account</h2>\n <button\n @click=${this.close}\n class=\"text-neutral-50 hover:text-neutral-20 transition-colors\"\n aria-label=\"Close\"\n >\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n </div>\n\n <!-- Connection Status -->\n <div class=\"flex items-center gap-2 mb-5\">\n <div\n class=\"w-2 h-2 rounded-full\"\n style=\"background: #10b981;\"\n ></div>\n <span class=\"text-sm font-semibold\" style=\"color: #10b981;\">\n Connected\n </span>\n </div>\n\n <!-- Address -->\n <div\n class=\"mb-4 p-3 rounded-lg bg-neutral-98 border border-neutral-90\"\n >\n <div\n class=\"text-xs font-semibold text-neutral-50 mb-1.5 uppercase\"\n >\n Address\n </div>\n <div\n class=\"text-xs font-mono text-neutral-20 break-all leading-relaxed\"\n >\n ${this.address}\n </div>\n </div>\n\n <!-- Network & Connector Info -->\n <div class=\"grid grid-cols-2 gap-3 mb-5\">\n <div class=\"p-3 rounded-lg bg-neutral-98 border border-neutral-90\">\n <div\n class=\"text-xs font-semibold text-neutral-50 mb-1.5 uppercase\"\n >\n Network\n </div>\n <div class=\"text-sm font-semibold text-neutral-20\">\n ${this.getChainName()}\n </div>\n </div>\n\n <div class=\"p-3 rounded-lg bg-neutral-98 border border-neutral-90\">\n <div\n class=\"text-xs font-semibold text-neutral-50 mb-1.5 uppercase\"\n >\n Connector\n </div>\n <div class=\"text-sm font-semibold text-neutral-20\">\n ${this.connectorName || 'Unknown'}\n </div>\n </div>\n </div>\n\n <!-- Disconnect Button -->\n <lukso-button\n variant=\"danger\"\n is-full-width\n @click=${this.handleDisconnect}\n >\n Disconnect\n </lukso-button>\n </div>\n </lukso-modal>\n `\n }\n}\n"],"mappings":";;;;;;;;AAOA,SAAS,yBAAyB;AAClC,SAAS,YAAY;AACrB,SAAS,gBAAgB;AAIzB,OAAO;AACP,OAAO;AAGA,IAAM,eAAN,cAA2B,eAAe;AAAA,EAA1C;AAAA;AAEuC,gBAAO;AACvB,iBAAmC;AACnC,mBAAU;AAEV,yBAAgB;AAAA;AAAA,EAEpC,QAAQ;AACd,SAAK,OAAO;AACZ,SAAK,cAAc,IAAI,YAAY,OAAO,CAAC;AAAA,EAC7C;AAAA,EAEQ,mBAAmB;AACzB,SAAK,cAAc,IAAI,YAAY,YAAY,CAAC;AAChD,SAAK,MAAM;AAAA,EACb;AAAA,EAEQ,eAAuB;AAC7B,YAAQ,KAAK,SAAS;AAAA,MACpB,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT;AACE,eAAO,KAAK,UAAU,SAAS,KAAK,OAAO,KAAK;AAAA,IACpD;AAAA,EACF;AAAA,EAEA,SAAS;AACP,WAAO;AAAA;AAAA,mBAEQ,KAAK,IAAI;AAAA;AAAA,6BAEC,KAAK,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAOhB,KAAK,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBA2CjB,KAAK,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAaV,KAAK,aAAa,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAWnB,KAAK,iBAAiB,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAS5B,KAAK,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOxC;AACF;AA3H8C;AAAA,EAA3C,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GAF/B,aAEiC;AAChB;AAAA,EAA3B,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAHf,aAGiB;AACA;AAAA,EAA3B,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAJf,aAIiB;AACA;AAAA,EAA3B,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GALf,aAKiB;AACA;AAAA,EAA3B,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GANf,aAMiB;AANjB,eAAN;AAAA,EADN,kBAAkB,eAAe;AAAA,GACrB;","names":[]}
|
|
@@ -6,8 +6,8 @@ var _chunk3AIZSSEEcjs = require('./chunk-3AIZSSEE.cjs');
|
|
|
6
6
|
var _chunkZBDE64SDcjs = require('./chunk-ZBDE64SD.cjs');
|
|
7
7
|
|
|
8
8
|
// src/restore-modal.ts
|
|
9
|
+
var _utils = require('@lukso/core/utils');
|
|
9
10
|
var _passkeyauth = require('@lukso/passkey-auth');
|
|
10
|
-
var _shared = require('@lukso/transaction-view-core/shared');
|
|
11
11
|
var _lit = require('lit');
|
|
12
12
|
var _decoratorsjs = require('lit/decorators.js');
|
|
13
13
|
require('@lukso/web-components/dist/components/lukso-modal');
|
|
@@ -583,10 +583,10 @@ _chunkZBDE64SDcjs.__decorateClass.call(void 0, [
|
|
|
583
583
|
_decoratorsjs.state.call(void 0, )
|
|
584
584
|
], RestoreModal.prototype, "restoredAddresses", 2);
|
|
585
585
|
RestoreModal = exports.RestoreModal = _chunkZBDE64SDcjs.__decorateClass.call(void 0, [
|
|
586
|
-
|
|
586
|
+
_utils.safeCustomElement.call(void 0, "restore-modal")
|
|
587
587
|
], RestoreModal);
|
|
588
588
|
|
|
589
589
|
|
|
590
590
|
|
|
591
591
|
exports.RestoreModal = RestoreModal;
|
|
592
|
-
//# sourceMappingURL=chunk-
|
|
592
|
+
//# sourceMappingURL=chunk-NWCDXQPG.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/service-auth-simple/service-auth-simple/packages/up-connector/dist/chunk-NWCDXQPG.cjs","../src/restore-modal.ts"],"names":[],"mappings":"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","file":"/home/runner/work/service-auth-simple/service-auth-simple/packages/up-connector/dist/chunk-NWCDXQPG.cjs","sourcesContent":[null,"/**\n * Restore Modal - Lit Component\n *\n * Framework-agnostic restore modal for wallet data import.\n * Uses lukso-modal from @lukso/web-components for consistent UI.\n */\n\nimport { safeCustomElement } from '@lukso/core/utils'\nimport type {\n BackupFile,\n PasskeyAuthProvider,\n WalletData,\n} from '@lukso/passkey-auth'\nimport { readBackupFile } from '@lukso/passkey-auth'\nimport { html, nothing } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport { CoreLitElement } from './styles'\n\n// Import lukso web components\nimport '@lukso/web-components/dist/components/lukso-modal'\nimport '@lukso/web-components/dist/components/lukso-button'\nimport '@lukso/web-components/dist/components/lukso-input'\n\nenum Step {\n UPLOAD = 1,\n PASSWORD = 2,\n PREVIEW = 3,\n SUCCESS = 4,\n}\n\n@safeCustomElement('restore-modal')\nexport class RestoreModal extends CoreLitElement {\n // Public properties\n @property({ type: Boolean, reflect: true }) isOpen = false\n @property({ type: String }) theme: 'light' | 'dark' | 'auto' = 'auto'\n @property({ type: Object }) keyGenerator: PasskeyAuthProvider | null = null\n\n // Private state\n @state() private currentStep: Step = Step.UPLOAD\n @state() private selectedFile: File | null = null\n @state() private backupData: BackupFile | null = null\n @state() private fileError: string | null = null\n @state() private isDragging = false\n @state() private password = ''\n @state() private passwordErrors: string[] = []\n @state() private isRestoring = false\n @state() private validationWarnings: string[] = []\n @state() private controllers: Array<{\n address: string\n status: 'new' | 'existing'\n }> = []\n @state() private restoredAddresses: string[] = []\n validationInfo: string[] = []\n walletData: WalletData | null = null\n\n /**\n * Public method for parent to set preview result\n * Called after parent handles the 'preview' event\n */\n public setPreviewResult(options: {\n controllers: Array<{ address: string; status: 'new' | 'existing' }>\n warnings?: string[]\n }) {\n this.controllers = options.controllers\n this.validationWarnings = options.warnings || []\n }\n\n /**\n * Public method for parent to set validation result\n * Called after parent handles the 'validate' event\n */\n public setValidationResult(\n walletData: WalletData | null,\n options?: {\n error?: string\n warnings?: string[]\n info?: string[]\n }\n ) {\n this.isRestoring = false\n\n if (options?.error) {\n this.passwordErrors = [options.error]\n this.validationWarnings = []\n this.validationInfo = []\n } else if (walletData) {\n this.walletData = walletData\n this.validationWarnings = options?.warnings || []\n this.validationInfo = options?.info || []\n this.currentStep = Step.SUCCESS\n }\n }\n\n render() {\n return html`\n <lukso-modal\n ?is-open=${this.isOpen}\n size=\"medium\"\n @on-backdrop-click=${this.close}\n >\n <div class=\"p-6\">\n <!-- Header -->\n <h2 class=\"m-0 mb-6 text-neutral-20 dark:text-white heading-inter-21-semi-bold\">\n ${this.getStepTitle()}\n </h2>\n\n <!-- Step content -->\n ${this.renderStep()}\n </div>\n </lukso-modal>\n `\n }\n\n private renderStep() {\n switch (this.currentStep) {\n case Step.UPLOAD:\n return this.renderUploadStep()\n case Step.PASSWORD:\n return this.renderPasswordStep()\n case Step.PREVIEW:\n return this.renderPreviewStep()\n case Step.SUCCESS:\n return this.renderSuccessStep()\n default:\n return nothing\n }\n }\n\n private renderUploadStep() {\n return html`\n <p class=\"mb-6 text-neutral-40 dark:text-neutral-50 paragraph-inter-16-regular\">\n Select your backup file to restore your wallet data. Your backup file stays on your device and is never uploaded.\n </p>\n\n <div\n class=\"border-2 border-dashed rounded-xl p-10 text-center bg-neutral-95 dark:bg-neutral-80 transition-all cursor-pointer my-6 ${\n this.isDragging\n ? 'border-blue-60 bg-blue-95 dark:bg-blue-95/10'\n : this.fileError\n ? 'border-red-55 bg-red-95'\n : 'border-neutral-90 dark:border-neutral-70'\n }\"\n @drop=${this.handleDrop}\n @dragover=${this.handleDragOver}\n @dragleave=${this.handleDragLeave}\n @click=${this.triggerFileInput}\n >\n <div class=\"flex flex-col items-center gap-3\">\n <p class=\"m-0 text-neutral-10 dark:text-white heading-inter-16-semi-bold\">\n Drag and drop your backup file here\n </p>\n <p class=\"m-0 text-neutral-40 paragraph-inter-14-regular\">or</p>\n <lukso-button\n variant=\"primary\"\n @click=${(e: Event) => {\n e.stopPropagation()\n this.triggerFileInput()\n }}\n >\n Choose File\n </lukso-button>\n ${\n this.selectedFile\n ? html`\n <p class=\"mt-2 mb-0 text-green-54 paragraph-inter-14-semi-bold\">\n ${this.selectedFile.name}\n </p>\n `\n : nothing\n }\n ${\n this.fileError\n ? html`\n <p class=\"mt-2 mb-0 text-red-55 paragraph-inter-14-semi-bold\">\n ${this.fileError}\n </p>\n `\n : nothing\n }\n </div>\n </div>\n\n <input\n type=\"file\"\n class=\"hidden\"\n accept=\".json\"\n @change=${this.handleFileSelect}\n />\n\n <div class=\"flex justify-end mt-6\">\n <lukso-button variant=\"text\" @click=${this.close}>\n Cancel\n </lukso-button>\n </div>\n `\n }\n\n private renderPasswordStep() {\n const canProceed = this.password && this.password.length > 0\n\n return html`\n <p class=\"mb-5 text-neutral-40 dark:text-neutral-50 paragraph-inter-14-regular\">\n This backup is encrypted. Enter the password to decrypt it.\n </p>\n\n <div>\n <lukso-input\n type=\"password\"\n label=\"Password\"\n placeholder=\"Enter decryption password\"\n .value=${this.password}\n @on-input=${(e: CustomEvent) => {\n this.password = e.detail.value\n }}\n @keyup=${(e: KeyboardEvent) => e.key === 'Enter' && canProceed && this.previewRestore()}\n is-full-width\n autofocus\n ></lukso-input>\n ${this.passwordErrors.map(\n (error) => html`\n <div class=\"mt-1 text-red-55 paragraph-inter-13-regular\">${error}</div>\n `\n )}\n </div>\n\n <div class=\"flex justify-between gap-3 mt-6\">\n <div class=\"flex gap-3\">\n <lukso-button variant=\"text\" @click=${this.close}>\n Cancel\n </lukso-button>\n <lukso-button variant=\"secondary\" @click=${this.goBack}>\n Back\n </lukso-button>\n </div>\n <lukso-button\n variant=\"primary\"\n ?disabled=${!canProceed || this.isRestoring}\n ?is-loading=${this.isRestoring}\n @click=${this.previewRestore}\n >\n Continue\n </lukso-button>\n </div>\n `\n }\n\n private renderPreviewStep() {\n return html`\n <p class=\"mb-6 text-neutral-40 dark:text-neutral-50 paragraph-inter-16-regular\">\n ${\n this.controllers.length > 0\n ? `Found ${this.controllers.length} controller${this.controllers.length === 1 ? '' : 's'} in backup.`\n : 'No controllers found in backup.'\n }\n </p>\n\n ${\n this.controllers.length > 0\n ? html`\n <div class=\"mb-6\">\n <div class=\"mb-3 text-neutral-20 dark:text-neutral-90 paragraph-inter-14-semi-bold\">\n Controllers:\n </div>\n ${this.controllers.map(\n (controller) => html`\n <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\">\n <div class=\"flex items-center justify-between\">\n <div class=\"text-neutral-40 paragraph-inter-13-regular font-mono\">\n ${this.truncateAddress(controller.address)}\n </div>\n <div\n class=\"px-2 py-0.5 rounded text-xs font-semibold ${\n controller.status === 'new'\n ? 'bg-green-95 dark:bg-green-95/10 text-green-55 border border-green-55/30'\n : 'bg-neutral-90 dark:bg-neutral-70 text-neutral-50 border border-neutral-80 dark:border-neutral-60'\n }\"\n >\n ${controller.status === 'new' ? 'NEW' : 'EXISTS'}\n </div>\n </div>\n <div class=\"text-neutral-60 paragraph-inter-12-regular mt-1\">\n ${controller.address}\n </div>\n </div>\n `\n )}\n </div>\n `\n : nothing\n }\n\n ${\n this.validationWarnings.length > 0\n ? html`\n <div class=\"mb-4\">\n ${this.validationWarnings.map(\n (warning) => html`\n <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\">\n <span class=\"text-yellow-55 dark:text-yellow-55 text-lg leading-none\">⚠️</span>\n <span class=\"text-yellow-55 dark:text-yellow-55 paragraph-inter-13-regular flex-1\">${warning}</span>\n </div>\n `\n )}\n </div>\n `\n : nothing\n }\n\n <div class=\"flex justify-between gap-3 mt-6\">\n <div class=\"flex gap-3\">\n <lukso-button variant=\"text\" @click=${this.close}>\n Cancel\n </lukso-button>\n <lukso-button variant=\"secondary\" @click=${this.goBackFromPreview}>\n Back\n </lukso-button>\n </div>\n <lukso-button\n variant=\"primary\"\n @click=${this.confirmRestore}\n >\n Confirm Restore\n </lukso-button>\n </div>\n `\n }\n\n private renderSuccessStep() {\n return html`\n <!-- Success header with icon -->\n <div class=\"text-center mb-6\">\n <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\">\n <span class=\"text-2xl text-green-55\">✅</span>\n </div>\n <h3 class=\"text-neutral-20 dark:text-white heading-inter-18-semi-bold mb-2\">\n Wallet Restored Successfully!\n </h3>\n <p class=\"text-neutral-40 dark:text-neutral-50 paragraph-inter-14-regular\">\n ${\n this.restoredAddresses.length > 0\n ? `Imported ${this.restoredAddresses.length} address${this.restoredAddresses.length > 1 ? 'es' : ''} to your wallet.`\n : 'Your wallet has been restored successfully.'\n }\n </p>\n </div>\n \n <!-- Restored addresses -->\n ${\n this.restoredAddresses.length > 0\n ? html`\n <div class=\"mb-6\">\n <div class=\"mb-3 text-neutral-20 dark:text-neutral-90 paragraph-inter-14-semi-bold\">\n Restored Addresses:\n </div>\n ${this.restoredAddresses.map(\n (address: string) => html`\n <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\">\n <span class=\"text-green-60 dark:text-green-45 text-sm\">✓</span>\n <span class=\"text-neutral-20 dark:text-white paragraph-inter-13-regular font-mono flex-1\">${this.truncateAddress(address)}</span>\n </div>\n `\n )}\n </div>\n `\n : ''\n }\n\n <!-- Action buttons for success -->\n <div class=\"flex justify-center mt-6\">\n <lukso-button variant=\"primary\" @click=${this.close}>\n OK\n </lukso-button>\n </div>\n `\n }\n\n private getStepTitle(): string {\n switch (this.currentStep) {\n case Step.UPLOAD:\n return 'Restore Wallet'\n case Step.PASSWORD:\n return 'Enter Password'\n case Step.PREVIEW:\n return 'Review Changes'\n case Step.SUCCESS:\n return 'Restore Complete'\n default:\n return 'Restore Wallet'\n }\n }\n\n private triggerFileInput() {\n const input = this.shadowRoot?.querySelector(\n 'input[type=\"file\"]'\n ) as HTMLInputElement\n if (input) {\n input.click()\n }\n }\n\n private async handleFileSelect(e: Event) {\n const input = e.target as HTMLInputElement\n const file = input.files?.[0]\n if (file) {\n await this.handleFile(file)\n }\n }\n\n private handleDragOver(e: DragEvent) {\n e.preventDefault()\n this.isDragging = true\n }\n\n private handleDragLeave() {\n this.isDragging = false\n }\n\n private async handleDrop(e: DragEvent) {\n e.preventDefault()\n this.isDragging = false\n\n const file = e.dataTransfer?.files?.[0]\n if (file) {\n await this.handleFile(file)\n }\n }\n\n private async handleFile(file: File) {\n this.fileError = null\n\n if (!file.name.endsWith('.json')) {\n this.fileError = 'Please select a valid JSON backup file'\n return\n }\n\n try {\n // Use passkey-auth readBackupFile function\n const backup = await readBackupFile(file)\n\n this.selectedFile = file\n this.backupData = backup\n\n // Check if encrypted (handle both current and legacy formats)\n const isEncrypted = backup.encryptedSecrets // Legacy: always encrypted if encryptedSecrets exists\n ? true\n : backup.secrets?.encrypted // Current: check encrypted flag\n\n if (isEncrypted) {\n this.currentStep = Step.PASSWORD\n } else {\n // Unencrypted backup - preview directly\n await this.previewRestore()\n }\n } catch (error) {\n this.fileError =\n error instanceof Error ? error.message : 'Failed to read backup file'\n console.error('Failed to read backup file:', error)\n }\n }\n\n private async previewRestore() {\n if (!this.backupData) return\n\n this.isRestoring = true\n this.passwordErrors = []\n\n try {\n // First, we need to decrypt the backup if it's encrypted\n let decryptedBackup = this.backupData\n\n if (\n this.backupData.encryptedSecrets ||\n this.backupData.secrets?.encrypted\n ) {\n // PREVIEW ONLY: Use verify to check password and get preview data (don't actually import yet)\n if (!this.keyGenerator) {\n throw new Error('KeyGenerator not available')\n }\n\n // Use verifyBackup for preview - this validates password and returns public data only\n const verifiedBackup = await this.keyGenerator.verifyBackup(\n this.backupData,\n this.password\n )\n\n // Use the verified backup data (which has filtered public data)\n decryptedBackup = verifiedBackup\n } else {\n // Unencrypted - use data directly for preview (no import needed)\n decryptedBackup = this.backupData\n }\n\n // Extract all controller addresses from the backup\n const backupControllers = new Set<string>()\n\n // Get addresses from the secrets (the actual private keys we're restoring)\n const secretsData = (decryptedBackup.secrets?.data as any[]) || []\n for (const secret of secretsData) {\n if (secret.address) {\n backupControllers.add(secret.address.toLowerCase())\n }\n }\n\n // Also get controllers from account metadata (V2 format with networks)\n for (const account of decryptedBackup.accounts || []) {\n // V2 format: accounts have networks array with controllers\n if (account.networks) {\n for (const network of account.networks) {\n for (const controller of network.controllers || []) {\n if (controller.address) {\n backupControllers.add(controller.address.toLowerCase())\n }\n }\n }\n }\n }\n\n // Also get controllers from LSP23CrossChainDeployment if present\n const lsp23Deployments =\n (decryptedBackup as any).LSP23CrossChainDeployment || []\n for (const deployment of lsp23Deployments) {\n for (const controller of deployment.initialControllers || []) {\n if (controller.address) {\n backupControllers.add(controller.address.toLowerCase())\n }\n }\n }\n\n console.log(\n '🔍 [RestoreModal] Found controller addresses:',\n Array.from(backupControllers)\n )\n\n // Extract addresses from the decrypted backup for preview\n for (const secret of secretsData) {\n if (secret.address) {\n backupControllers.add(secret.address.toLowerCase())\n }\n }\n\n // For now, mark all addresses as 'new' - could enhance this later\n this.controllers = Array.from(backupControllers).map((address) => ({\n address,\n status: 'new' as const,\n }))\n\n this.currentStep = Step.PREVIEW\n } catch (error) {\n console.error('Failed to preview restore:', error)\n const errorMessage =\n error instanceof Error ? error.message : 'Failed to preview restore'\n\n // Check for password-specific errors\n if (errorMessage.toLowerCase().includes('password')) {\n this.passwordErrors = ['Incorrect password. Please try again.']\n } else {\n // For non-password errors, set as file error to show in upload step\n this.fileError = errorMessage\n this.currentStep = Step.UPLOAD\n // Clear the file selection so user can try again\n this.selectedFile = null\n this.backupData = null\n // Clear the file input\n const input = this.shadowRoot?.querySelector(\n 'input[type=\"file\"]'\n ) as HTMLInputElement\n if (input) {\n input.value = ''\n }\n }\n } finally {\n this.isRestoring = false\n }\n }\n\n private async confirmRestore() {\n if (!this.backupData || !this.keyGenerator) {\n console.error(\n '❌ [RestoreModal] Missing backup data or keyGenerator for restore'\n )\n this.dispatchEvent(\n new CustomEvent('error', {\n detail: { error: 'Missing backup data or keyGenerator' },\n bubbles: true,\n composed: true,\n })\n )\n return\n }\n\n try {\n this.isRestoring = true\n console.log('🔄 [RestoreModal] Starting secure restoration process...')\n\n // ✅ SECURE: Use keyGenerator.restoreFromBackup internally\n const result = await this.keyGenerator.restoreFromBackup(\n this.backupData,\n this.password\n )\n\n if (result.success) {\n console.log('✅ [RestoreModal] Restore successful:', result.addresses)\n\n // Store restored addresses for display on success screen\n this.restoredAddresses = result.addresses\n\n // Emit success event (only public addresses, no sensitive data)\n this.dispatchEvent(\n new CustomEvent('success', {\n detail: { addresses: result.addresses },\n bubbles: true,\n composed: true,\n })\n )\n\n // Move to success step\n this.currentStep = Step.SUCCESS\n } else {\n console.error('❌ [RestoreModal] Restore failed')\n this.dispatchEvent(\n new CustomEvent('error', {\n detail: {\n error:\n 'Restore failed. Please check the backup file and password.',\n },\n bubbles: true,\n composed: true,\n })\n )\n }\n } catch (error) {\n console.error('❌ [RestoreModal] Restore error:', error)\n const errorMessage =\n error instanceof Error ? error.message : 'Unknown error'\n\n this.dispatchEvent(\n new CustomEvent('error', {\n detail: { error: errorMessage },\n bubbles: true,\n composed: true,\n })\n )\n } finally {\n this.isRestoring = false\n }\n }\n\n private goBack() {\n if (this.currentStep === Step.PASSWORD) {\n this.currentStep = Step.UPLOAD\n this.password = ''\n this.passwordErrors = []\n }\n }\n\n private goBackFromPreview() {\n // Go back to password step (or upload if unencrypted)\n const isEncrypted = this.backupData?.encryptedSecrets\n ? true\n : this.backupData?.secrets?.encrypted\n\n if (isEncrypted) {\n this.currentStep = Step.PASSWORD\n } else {\n this.currentStep = Step.UPLOAD\n }\n // Clear preview data\n this.controllers = []\n this.validationWarnings = []\n }\n\n private close() {\n this.isOpen = false\n this.dispatchEvent(\n new CustomEvent('close', { bubbles: true, composed: true })\n )\n\n // Reset state after animation\n setTimeout(() => {\n this.currentStep = Step.UPLOAD\n this.selectedFile = null\n this.backupData = null\n this.fileError = null\n this.isDragging = false\n this.password = ''\n this.passwordErrors = []\n this.isRestoring = false\n this.walletData = null\n this.restoredAddresses = []\n this.controllers = []\n this.validationWarnings = []\n }, 300)\n }\n\n private truncateAddress(address: string): string {\n if (!address || address.length < 10) return address\n return `${address.slice(0, 6)}...${address.slice(-4)}`\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'restore-modal': RestoreModal\n }\n}\n"]}
|
|
@@ -6,8 +6,8 @@ import {
|
|
|
6
6
|
} from "./chunk-EUXUH3YW.js";
|
|
7
7
|
|
|
8
8
|
// src/restore-modal.ts
|
|
9
|
+
import { safeCustomElement } from "@lukso/core/utils";
|
|
9
10
|
import { readBackupFile } from "@lukso/passkey-auth";
|
|
10
|
-
import { safeCustomElement } from "@lukso/transaction-view-core/shared";
|
|
11
11
|
import { html, nothing } from "lit";
|
|
12
12
|
import { property, state } from "lit/decorators.js";
|
|
13
13
|
import "@lukso/web-components/dist/components/lukso-modal";
|
|
@@ -589,4 +589,4 @@ RestoreModal = __decorateClass([
|
|
|
589
589
|
export {
|
|
590
590
|
RestoreModal
|
|
591
591
|
};
|
|
592
|
-
//# sourceMappingURL=chunk-
|
|
592
|
+
//# sourceMappingURL=chunk-P4YKM2GB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/restore-modal.ts"],"sourcesContent":["/**\n * Restore Modal - Lit Component\n *\n * Framework-agnostic restore modal for wallet data import.\n * Uses lukso-modal from @lukso/web-components for consistent UI.\n */\n\nimport { safeCustomElement } from '@lukso/core/utils'\nimport type {\n BackupFile,\n PasskeyAuthProvider,\n WalletData,\n} from '@lukso/passkey-auth'\nimport { readBackupFile } from '@lukso/passkey-auth'\nimport { html, nothing } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport { CoreLitElement } from './styles'\n\n// Import lukso web components\nimport '@lukso/web-components/dist/components/lukso-modal'\nimport '@lukso/web-components/dist/components/lukso-button'\nimport '@lukso/web-components/dist/components/lukso-input'\n\nenum Step {\n UPLOAD = 1,\n PASSWORD = 2,\n PREVIEW = 3,\n SUCCESS = 4,\n}\n\n@safeCustomElement('restore-modal')\nexport class RestoreModal extends CoreLitElement {\n // Public properties\n @property({ type: Boolean, reflect: true }) isOpen = false\n @property({ type: String }) theme: 'light' | 'dark' | 'auto' = 'auto'\n @property({ type: Object }) keyGenerator: PasskeyAuthProvider | null = null\n\n // Private state\n @state() private currentStep: Step = Step.UPLOAD\n @state() private selectedFile: File | null = null\n @state() private backupData: BackupFile | null = null\n @state() private fileError: string | null = null\n @state() private isDragging = false\n @state() private password = ''\n @state() private passwordErrors: string[] = []\n @state() private isRestoring = false\n @state() private validationWarnings: string[] = []\n @state() private controllers: Array<{\n address: string\n status: 'new' | 'existing'\n }> = []\n @state() private restoredAddresses: string[] = []\n validationInfo: string[] = []\n walletData: WalletData | null = null\n\n /**\n * Public method for parent to set preview result\n * Called after parent handles the 'preview' event\n */\n public setPreviewResult(options: {\n controllers: Array<{ address: string; status: 'new' | 'existing' }>\n warnings?: string[]\n }) {\n this.controllers = options.controllers\n this.validationWarnings = options.warnings || []\n }\n\n /**\n * Public method for parent to set validation result\n * Called after parent handles the 'validate' event\n */\n public setValidationResult(\n walletData: WalletData | null,\n options?: {\n error?: string\n warnings?: string[]\n info?: string[]\n }\n ) {\n this.isRestoring = false\n\n if (options?.error) {\n this.passwordErrors = [options.error]\n this.validationWarnings = []\n this.validationInfo = []\n } else if (walletData) {\n this.walletData = walletData\n this.validationWarnings = options?.warnings || []\n this.validationInfo = options?.info || []\n this.currentStep = Step.SUCCESS\n }\n }\n\n render() {\n return html`\n <lukso-modal\n ?is-open=${this.isOpen}\n size=\"medium\"\n @on-backdrop-click=${this.close}\n >\n <div class=\"p-6\">\n <!-- Header -->\n <h2 class=\"m-0 mb-6 text-neutral-20 dark:text-white heading-inter-21-semi-bold\">\n ${this.getStepTitle()}\n </h2>\n\n <!-- Step content -->\n ${this.renderStep()}\n </div>\n </lukso-modal>\n `\n }\n\n private renderStep() {\n switch (this.currentStep) {\n case Step.UPLOAD:\n return this.renderUploadStep()\n case Step.PASSWORD:\n return this.renderPasswordStep()\n case Step.PREVIEW:\n return this.renderPreviewStep()\n case Step.SUCCESS:\n return this.renderSuccessStep()\n default:\n return nothing\n }\n }\n\n private renderUploadStep() {\n return html`\n <p class=\"mb-6 text-neutral-40 dark:text-neutral-50 paragraph-inter-16-regular\">\n Select your backup file to restore your wallet data. Your backup file stays on your device and is never uploaded.\n </p>\n\n <div\n class=\"border-2 border-dashed rounded-xl p-10 text-center bg-neutral-95 dark:bg-neutral-80 transition-all cursor-pointer my-6 ${\n this.isDragging\n ? 'border-blue-60 bg-blue-95 dark:bg-blue-95/10'\n : this.fileError\n ? 'border-red-55 bg-red-95'\n : 'border-neutral-90 dark:border-neutral-70'\n }\"\n @drop=${this.handleDrop}\n @dragover=${this.handleDragOver}\n @dragleave=${this.handleDragLeave}\n @click=${this.triggerFileInput}\n >\n <div class=\"flex flex-col items-center gap-3\">\n <p class=\"m-0 text-neutral-10 dark:text-white heading-inter-16-semi-bold\">\n Drag and drop your backup file here\n </p>\n <p class=\"m-0 text-neutral-40 paragraph-inter-14-regular\">or</p>\n <lukso-button\n variant=\"primary\"\n @click=${(e: Event) => {\n e.stopPropagation()\n this.triggerFileInput()\n }}\n >\n Choose File\n </lukso-button>\n ${\n this.selectedFile\n ? html`\n <p class=\"mt-2 mb-0 text-green-54 paragraph-inter-14-semi-bold\">\n ${this.selectedFile.name}\n </p>\n `\n : nothing\n }\n ${\n this.fileError\n ? html`\n <p class=\"mt-2 mb-0 text-red-55 paragraph-inter-14-semi-bold\">\n ${this.fileError}\n </p>\n `\n : nothing\n }\n </div>\n </div>\n\n <input\n type=\"file\"\n class=\"hidden\"\n accept=\".json\"\n @change=${this.handleFileSelect}\n />\n\n <div class=\"flex justify-end mt-6\">\n <lukso-button variant=\"text\" @click=${this.close}>\n Cancel\n </lukso-button>\n </div>\n `\n }\n\n private renderPasswordStep() {\n const canProceed = this.password && this.password.length > 0\n\n return html`\n <p class=\"mb-5 text-neutral-40 dark:text-neutral-50 paragraph-inter-14-regular\">\n This backup is encrypted. Enter the password to decrypt it.\n </p>\n\n <div>\n <lukso-input\n type=\"password\"\n label=\"Password\"\n placeholder=\"Enter decryption password\"\n .value=${this.password}\n @on-input=${(e: CustomEvent) => {\n this.password = e.detail.value\n }}\n @keyup=${(e: KeyboardEvent) => e.key === 'Enter' && canProceed && this.previewRestore()}\n is-full-width\n autofocus\n ></lukso-input>\n ${this.passwordErrors.map(\n (error) => html`\n <div class=\"mt-1 text-red-55 paragraph-inter-13-regular\">${error}</div>\n `\n )}\n </div>\n\n <div class=\"flex justify-between gap-3 mt-6\">\n <div class=\"flex gap-3\">\n <lukso-button variant=\"text\" @click=${this.close}>\n Cancel\n </lukso-button>\n <lukso-button variant=\"secondary\" @click=${this.goBack}>\n Back\n </lukso-button>\n </div>\n <lukso-button\n variant=\"primary\"\n ?disabled=${!canProceed || this.isRestoring}\n ?is-loading=${this.isRestoring}\n @click=${this.previewRestore}\n >\n Continue\n </lukso-button>\n </div>\n `\n }\n\n private renderPreviewStep() {\n return html`\n <p class=\"mb-6 text-neutral-40 dark:text-neutral-50 paragraph-inter-16-regular\">\n ${\n this.controllers.length > 0\n ? `Found ${this.controllers.length} controller${this.controllers.length === 1 ? '' : 's'} in backup.`\n : 'No controllers found in backup.'\n }\n </p>\n\n ${\n this.controllers.length > 0\n ? html`\n <div class=\"mb-6\">\n <div class=\"mb-3 text-neutral-20 dark:text-neutral-90 paragraph-inter-14-semi-bold\">\n Controllers:\n </div>\n ${this.controllers.map(\n (controller) => html`\n <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\">\n <div class=\"flex items-center justify-between\">\n <div class=\"text-neutral-40 paragraph-inter-13-regular font-mono\">\n ${this.truncateAddress(controller.address)}\n </div>\n <div\n class=\"px-2 py-0.5 rounded text-xs font-semibold ${\n controller.status === 'new'\n ? 'bg-green-95 dark:bg-green-95/10 text-green-55 border border-green-55/30'\n : 'bg-neutral-90 dark:bg-neutral-70 text-neutral-50 border border-neutral-80 dark:border-neutral-60'\n }\"\n >\n ${controller.status === 'new' ? 'NEW' : 'EXISTS'}\n </div>\n </div>\n <div class=\"text-neutral-60 paragraph-inter-12-regular mt-1\">\n ${controller.address}\n </div>\n </div>\n `\n )}\n </div>\n `\n : nothing\n }\n\n ${\n this.validationWarnings.length > 0\n ? html`\n <div class=\"mb-4\">\n ${this.validationWarnings.map(\n (warning) => html`\n <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\">\n <span class=\"text-yellow-55 dark:text-yellow-55 text-lg leading-none\">⚠️</span>\n <span class=\"text-yellow-55 dark:text-yellow-55 paragraph-inter-13-regular flex-1\">${warning}</span>\n </div>\n `\n )}\n </div>\n `\n : nothing\n }\n\n <div class=\"flex justify-between gap-3 mt-6\">\n <div class=\"flex gap-3\">\n <lukso-button variant=\"text\" @click=${this.close}>\n Cancel\n </lukso-button>\n <lukso-button variant=\"secondary\" @click=${this.goBackFromPreview}>\n Back\n </lukso-button>\n </div>\n <lukso-button\n variant=\"primary\"\n @click=${this.confirmRestore}\n >\n Confirm Restore\n </lukso-button>\n </div>\n `\n }\n\n private renderSuccessStep() {\n return html`\n <!-- Success header with icon -->\n <div class=\"text-center mb-6\">\n <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\">\n <span class=\"text-2xl text-green-55\">✅</span>\n </div>\n <h3 class=\"text-neutral-20 dark:text-white heading-inter-18-semi-bold mb-2\">\n Wallet Restored Successfully!\n </h3>\n <p class=\"text-neutral-40 dark:text-neutral-50 paragraph-inter-14-regular\">\n ${\n this.restoredAddresses.length > 0\n ? `Imported ${this.restoredAddresses.length} address${this.restoredAddresses.length > 1 ? 'es' : ''} to your wallet.`\n : 'Your wallet has been restored successfully.'\n }\n </p>\n </div>\n \n <!-- Restored addresses -->\n ${\n this.restoredAddresses.length > 0\n ? html`\n <div class=\"mb-6\">\n <div class=\"mb-3 text-neutral-20 dark:text-neutral-90 paragraph-inter-14-semi-bold\">\n Restored Addresses:\n </div>\n ${this.restoredAddresses.map(\n (address: string) => html`\n <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\">\n <span class=\"text-green-60 dark:text-green-45 text-sm\">✓</span>\n <span class=\"text-neutral-20 dark:text-white paragraph-inter-13-regular font-mono flex-1\">${this.truncateAddress(address)}</span>\n </div>\n `\n )}\n </div>\n `\n : ''\n }\n\n <!-- Action buttons for success -->\n <div class=\"flex justify-center mt-6\">\n <lukso-button variant=\"primary\" @click=${this.close}>\n OK\n </lukso-button>\n </div>\n `\n }\n\n private getStepTitle(): string {\n switch (this.currentStep) {\n case Step.UPLOAD:\n return 'Restore Wallet'\n case Step.PASSWORD:\n return 'Enter Password'\n case Step.PREVIEW:\n return 'Review Changes'\n case Step.SUCCESS:\n return 'Restore Complete'\n default:\n return 'Restore Wallet'\n }\n }\n\n private triggerFileInput() {\n const input = this.shadowRoot?.querySelector(\n 'input[type=\"file\"]'\n ) as HTMLInputElement\n if (input) {\n input.click()\n }\n }\n\n private async handleFileSelect(e: Event) {\n const input = e.target as HTMLInputElement\n const file = input.files?.[0]\n if (file) {\n await this.handleFile(file)\n }\n }\n\n private handleDragOver(e: DragEvent) {\n e.preventDefault()\n this.isDragging = true\n }\n\n private handleDragLeave() {\n this.isDragging = false\n }\n\n private async handleDrop(e: DragEvent) {\n e.preventDefault()\n this.isDragging = false\n\n const file = e.dataTransfer?.files?.[0]\n if (file) {\n await this.handleFile(file)\n }\n }\n\n private async handleFile(file: File) {\n this.fileError = null\n\n if (!file.name.endsWith('.json')) {\n this.fileError = 'Please select a valid JSON backup file'\n return\n }\n\n try {\n // Use passkey-auth readBackupFile function\n const backup = await readBackupFile(file)\n\n this.selectedFile = file\n this.backupData = backup\n\n // Check if encrypted (handle both current and legacy formats)\n const isEncrypted = backup.encryptedSecrets // Legacy: always encrypted if encryptedSecrets exists\n ? true\n : backup.secrets?.encrypted // Current: check encrypted flag\n\n if (isEncrypted) {\n this.currentStep = Step.PASSWORD\n } else {\n // Unencrypted backup - preview directly\n await this.previewRestore()\n }\n } catch (error) {\n this.fileError =\n error instanceof Error ? error.message : 'Failed to read backup file'\n console.error('Failed to read backup file:', error)\n }\n }\n\n private async previewRestore() {\n if (!this.backupData) return\n\n this.isRestoring = true\n this.passwordErrors = []\n\n try {\n // First, we need to decrypt the backup if it's encrypted\n let decryptedBackup = this.backupData\n\n if (\n this.backupData.encryptedSecrets ||\n this.backupData.secrets?.encrypted\n ) {\n // PREVIEW ONLY: Use verify to check password and get preview data (don't actually import yet)\n if (!this.keyGenerator) {\n throw new Error('KeyGenerator not available')\n }\n\n // Use verifyBackup for preview - this validates password and returns public data only\n const verifiedBackup = await this.keyGenerator.verifyBackup(\n this.backupData,\n this.password\n )\n\n // Use the verified backup data (which has filtered public data)\n decryptedBackup = verifiedBackup\n } else {\n // Unencrypted - use data directly for preview (no import needed)\n decryptedBackup = this.backupData\n }\n\n // Extract all controller addresses from the backup\n const backupControllers = new Set<string>()\n\n // Get addresses from the secrets (the actual private keys we're restoring)\n const secretsData = (decryptedBackup.secrets?.data as any[]) || []\n for (const secret of secretsData) {\n if (secret.address) {\n backupControllers.add(secret.address.toLowerCase())\n }\n }\n\n // Also get controllers from account metadata (V2 format with networks)\n for (const account of decryptedBackup.accounts || []) {\n // V2 format: accounts have networks array with controllers\n if (account.networks) {\n for (const network of account.networks) {\n for (const controller of network.controllers || []) {\n if (controller.address) {\n backupControllers.add(controller.address.toLowerCase())\n }\n }\n }\n }\n }\n\n // Also get controllers from LSP23CrossChainDeployment if present\n const lsp23Deployments =\n (decryptedBackup as any).LSP23CrossChainDeployment || []\n for (const deployment of lsp23Deployments) {\n for (const controller of deployment.initialControllers || []) {\n if (controller.address) {\n backupControllers.add(controller.address.toLowerCase())\n }\n }\n }\n\n console.log(\n '🔍 [RestoreModal] Found controller addresses:',\n Array.from(backupControllers)\n )\n\n // Extract addresses from the decrypted backup for preview\n for (const secret of secretsData) {\n if (secret.address) {\n backupControllers.add(secret.address.toLowerCase())\n }\n }\n\n // For now, mark all addresses as 'new' - could enhance this later\n this.controllers = Array.from(backupControllers).map((address) => ({\n address,\n status: 'new' as const,\n }))\n\n this.currentStep = Step.PREVIEW\n } catch (error) {\n console.error('Failed to preview restore:', error)\n const errorMessage =\n error instanceof Error ? error.message : 'Failed to preview restore'\n\n // Check for password-specific errors\n if (errorMessage.toLowerCase().includes('password')) {\n this.passwordErrors = ['Incorrect password. Please try again.']\n } else {\n // For non-password errors, set as file error to show in upload step\n this.fileError = errorMessage\n this.currentStep = Step.UPLOAD\n // Clear the file selection so user can try again\n this.selectedFile = null\n this.backupData = null\n // Clear the file input\n const input = this.shadowRoot?.querySelector(\n 'input[type=\"file\"]'\n ) as HTMLInputElement\n if (input) {\n input.value = ''\n }\n }\n } finally {\n this.isRestoring = false\n }\n }\n\n private async confirmRestore() {\n if (!this.backupData || !this.keyGenerator) {\n console.error(\n '❌ [RestoreModal] Missing backup data or keyGenerator for restore'\n )\n this.dispatchEvent(\n new CustomEvent('error', {\n detail: { error: 'Missing backup data or keyGenerator' },\n bubbles: true,\n composed: true,\n })\n )\n return\n }\n\n try {\n this.isRestoring = true\n console.log('🔄 [RestoreModal] Starting secure restoration process...')\n\n // ✅ SECURE: Use keyGenerator.restoreFromBackup internally\n const result = await this.keyGenerator.restoreFromBackup(\n this.backupData,\n this.password\n )\n\n if (result.success) {\n console.log('✅ [RestoreModal] Restore successful:', result.addresses)\n\n // Store restored addresses for display on success screen\n this.restoredAddresses = result.addresses\n\n // Emit success event (only public addresses, no sensitive data)\n this.dispatchEvent(\n new CustomEvent('success', {\n detail: { addresses: result.addresses },\n bubbles: true,\n composed: true,\n })\n )\n\n // Move to success step\n this.currentStep = Step.SUCCESS\n } else {\n console.error('❌ [RestoreModal] Restore failed')\n this.dispatchEvent(\n new CustomEvent('error', {\n detail: {\n error:\n 'Restore failed. Please check the backup file and password.',\n },\n bubbles: true,\n composed: true,\n })\n )\n }\n } catch (error) {\n console.error('❌ [RestoreModal] Restore error:', error)\n const errorMessage =\n error instanceof Error ? error.message : 'Unknown error'\n\n this.dispatchEvent(\n new CustomEvent('error', {\n detail: { error: errorMessage },\n bubbles: true,\n composed: true,\n })\n )\n } finally {\n this.isRestoring = false\n }\n }\n\n private goBack() {\n if (this.currentStep === Step.PASSWORD) {\n this.currentStep = Step.UPLOAD\n this.password = ''\n this.passwordErrors = []\n }\n }\n\n private goBackFromPreview() {\n // Go back to password step (or upload if unencrypted)\n const isEncrypted = this.backupData?.encryptedSecrets\n ? true\n : this.backupData?.secrets?.encrypted\n\n if (isEncrypted) {\n this.currentStep = Step.PASSWORD\n } else {\n this.currentStep = Step.UPLOAD\n }\n // Clear preview data\n this.controllers = []\n this.validationWarnings = []\n }\n\n private close() {\n this.isOpen = false\n this.dispatchEvent(\n new CustomEvent('close', { bubbles: true, composed: true })\n )\n\n // Reset state after animation\n setTimeout(() => {\n this.currentStep = Step.UPLOAD\n this.selectedFile = null\n this.backupData = null\n this.fileError = null\n this.isDragging = false\n this.password = ''\n this.passwordErrors = []\n this.isRestoring = false\n this.walletData = null\n this.restoredAddresses = []\n this.controllers = []\n this.validationWarnings = []\n }, 300)\n }\n\n private truncateAddress(address: string): string {\n if (!address || address.length < 10) return address\n return `${address.slice(0, 6)}...${address.slice(-4)}`\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'restore-modal': RestoreModal\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -6,8 +6,8 @@ var _chunk3AIZSSEEcjs = require('./chunk-3AIZSSEE.cjs');
|
|
|
6
6
|
var _chunkZBDE64SDcjs = require('./chunk-ZBDE64SD.cjs');
|
|
7
7
|
|
|
8
8
|
// src/backup-modal.ts
|
|
9
|
+
var _utils = require('@lukso/core/utils');
|
|
9
10
|
var _passkeyauth = require('@lukso/passkey-auth');
|
|
10
|
-
var _shared = require('@lukso/transaction-view-core/shared');
|
|
11
11
|
var _lit = require('lit');
|
|
12
12
|
var _decoratorsjs = require('lit/decorators.js');
|
|
13
13
|
var _zxcvbn = require('zxcvbn'); var _zxcvbn2 = _interopRequireDefault(_zxcvbn);
|
|
@@ -383,10 +383,10 @@ _chunkZBDE64SDcjs.__decorateClass.call(void 0, [
|
|
|
383
383
|
_decoratorsjs.state.call(void 0, )
|
|
384
384
|
], BackupModal.prototype, "generatedBackup", 2);
|
|
385
385
|
BackupModal = exports.BackupModal = _chunkZBDE64SDcjs.__decorateClass.call(void 0, [
|
|
386
|
-
|
|
386
|
+
_utils.safeCustomElement.call(void 0, "backup-modal")
|
|
387
387
|
], BackupModal);
|
|
388
388
|
|
|
389
389
|
|
|
390
390
|
|
|
391
391
|
exports.BackupModal = BackupModal;
|
|
392
|
-
//# sourceMappingURL=chunk-
|
|
392
|
+
//# sourceMappingURL=chunk-UHBHVPXI.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/service-auth-simple/service-auth-simple/packages/up-connector/dist/chunk-UHBHVPXI.cjs","../src/backup-modal.ts"],"names":[],"mappings":"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","file":"/home/runner/work/service-auth-simple/service-auth-simple/packages/up-connector/dist/chunk-UHBHVPXI.cjs","sourcesContent":[null,"/**\n * Backup Modal - Lit Component\n *\n * Framework-agnostic backup modal for wallet data export.\n * Uses lukso-modal from @lukso/web-components for consistent UI.\n */\n\nimport { safeCustomElement } from '@lukso/core/utils'\nimport type { BackupFile } from '@lukso/passkey-auth'\nimport { downloadBackup } from '@lukso/passkey-auth'\nimport { html, nothing } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport zxcvbn from 'zxcvbn'\nimport { CoreLitElement } from './styles'\n\n// Import lukso web components\nimport '@lukso/web-components/dist/components/lukso-modal'\nimport '@lukso/web-components/dist/components/lukso-button'\nimport '@lukso/web-components/dist/components/lukso-input'\n\nenum Step {\n CHOICE = 1,\n PASSWORD = 2,\n DOWNLOAD = 3,\n}\n\ninterface PasswordStrength {\n level: string\n label: string\n color: string\n bgColor: string\n width: number\n feedback: string\n crackTime: string | number\n}\n\n@safeCustomElement('backup-modal')\nexport class BackupModal extends CoreLitElement {\n // Public properties\n @property({ type: Boolean, reflect: true }) open = false\n @property({ type: String }) theme: 'light' | 'dark' | 'auto' = 'auto'\n\n // Private state - wizard flow\n @state() private currentStep: Step = Step.CHOICE\n @state() private useEncryption = true\n @state() private password = ''\n @state() private passwordConfirm = ''\n @state() private passwordErrors: string[] = []\n @state() private isCreatingBackup = false\n @state() private generatedBackup: BackupFile | null = null\n\n /**\n * Public method for parent to set backup result\n * Called after parent handles the 'create' event\n */\n public setBackupResult(\n backupFile: BackupFile | null,\n options?: {\n error?: string\n }\n ) {\n this.isCreatingBackup = false\n\n if (options?.error) {\n this.passwordErrors = [options.error]\n this.generatedBackup = null\n } else if (backupFile) {\n this.generatedBackup = backupFile\n this.currentStep = Step.DOWNLOAD\n }\n }\n\n render() {\n return html`\n <lukso-modal\n ?is-open=${this.open}\n size=\"medium\"\n @on-backdrop-click=${this.close}\n >\n <div class=\"p-6\">\n <!-- Header -->\n <h2 class=\"m-0 mb-6 text-neutral-20 dark:text-white heading-inter-21-semi-bold\">\n ${this.getStepTitle()}\n </h2>\n\n <!-- Step content -->\n ${this.renderStep()}\n </div>\n </lukso-modal>\n `\n }\n\n private renderStep() {\n switch (this.currentStep) {\n case Step.CHOICE:\n return this.renderChoiceStep()\n case Step.PASSWORD:\n return this.renderPasswordStep()\n case Step.DOWNLOAD:\n return this.renderDownloadStep()\n default:\n return nothing\n }\n }\n\n private renderChoiceStep() {\n return html`\n <div class=\"flex flex-col gap-3 mb-6\">\n <!-- Encrypted option (recommended) -->\n <div\n class=\"border-2 border-neutral-90 dark:border-neutral-70 rounded-lg p-4 cursor-pointer transition-all hover:border-neutral-60 dark:hover:border-neutral-60\"\n @click=${() => this.selectBackupType(true)}\n >\n <div class=\"flex items-center gap-3 mb-2\">\n <span class=\"text-neutral-10 dark:text-white heading-inter-16-semi-bold flex-1\">\n Encrypt backup file\n </span>\n <span class=\"text-xs text-neutral-50 dark:text-neutral-60 uppercase tracking-wide\">\n Recommended\n </span>\n </div>\n <p class=\"m-0 text-neutral-40 dark:text-neutral-50 paragraph-inter-14-regular\">\n Uses password-based encryption to protect the secrets in this file.\n </p>\n </div>\n\n <!-- Unencrypted option -->\n <div\n class=\"border-2 border-neutral-90 dark:border-neutral-70 rounded-lg p-4 cursor-pointer transition-all hover:border-neutral-60 dark:hover:border-neutral-60\"\n @click=${() => this.selectBackupType(false)}\n >\n <div class=\"flex items-center gap-3 mb-2\">\n <span class=\"text-neutral-10 dark:text-white heading-inter-16-semi-bold flex-1\">\n Plain text backup\n </span>\n <span class=\"text-xs text-neutral-50 dark:text-neutral-60 uppercase tracking-wide\">\n For development only\n </span>\n </div>\n <p class=\"m-0 text-neutral-40 dark:text-neutral-50 paragraph-inter-14-regular\">\n Secrets will be stored in plain text.\n </p>\n </div>\n </div>\n\n <div class=\"flex justify-between gap-3\">\n <lukso-button variant=\"text\" @click=${this.close}>\n Cancel\n </lukso-button>\n </div>\n `\n }\n\n private renderPasswordStep() {\n const passwordStrength = this.password\n ? this.calculatePasswordStrength()\n : null\n const passwordsMatch =\n this.password &&\n this.passwordConfirm &&\n this.password === this.passwordConfirm\n const canProceed = this.password && this.passwordConfirm && passwordsMatch\n\n return html`\n <p class=\"mb-6 text-neutral-40 dark:text-neutral-50 paragraph-inter-16-regular\">\n Choose a strong password to encrypt your backup. You'll need this password to restore your wallet.\n </p>\n\n <div class=\"space-y-4\">\n <lukso-input\n type=\"password\"\n label=\"Password\"\n placeholder=\"Enter a strong password\"\n .value=${this.password}\n @on-input=${(e: CustomEvent) => {\n this.password = e.detail.value\n }}\n is-full-width\n autofocus\n ></lukso-input>\n\n ${this.passwordErrors.map(\n (error) => html`\n <div class=\"mt-1 text-red-55 paragraph-inter-13-regular\">${error}</div>\n `\n )}\n\n ${\n passwordStrength\n ? html`\n <div class=\"mt-3\">\n <div class=\"flex items-center justify-between mb-1\">\n <span class=\"paragraph-inter-13-regular text-neutral-40\">Password strength:</span>\n <span class=\"paragraph-inter-13-semi-bold ${passwordStrength.color}\">${passwordStrength.label}</span>\n </div>\n <div class=\"h-1.5 bg-neutral-90 dark:bg-neutral-70 rounded-full overflow-hidden\">\n <div\n class=\"h-full ${passwordStrength.bgColor} transition-all duration-300\"\n style=\"width: ${passwordStrength.width}%\"\n ></div>\n </div>\n <p class=\"mt-1 mb-0 text-neutral-40 paragraph-inter-12-regular\">\n Time to crack: ${passwordStrength.crackTime}\n </p>\n ${\n passwordStrength.feedback\n ? html`\n <p class=\"mt-2 mb-0 text-neutral-40 paragraph-inter-12-regular\">${passwordStrength.feedback}</p>\n `\n : nothing\n }\n </div>\n `\n : nothing\n }\n\n <lukso-input\n type=\"password\"\n label=\"Confirm Password\"\n placeholder=\"Re-enter your password\"\n .value=${this.passwordConfirm}\n @on-input=${(e: CustomEvent) => {\n this.passwordConfirm = e.detail.value\n }}\n is-full-width\n ></lukso-input>\n\n ${\n this.passwordConfirm\n ? html`\n <div class=\"flex items-center justify-between mt-2\">\n <span class=\"paragraph-inter-13-regular text-neutral-40\">Passwords match:</span>\n <span class=\"paragraph-inter-13-semi-bold ${passwordsMatch ? 'text-green-54' : 'text-red-55'}\">\n ${passwordsMatch ? 'Yes' : 'No'}\n </span>\n </div>\n `\n : nothing\n }\n </div>\n\n <div class=\"flex justify-between gap-3 mt-6\">\n <div class=\"flex gap-3\">\n <lukso-button variant=\"text\" @click=${this.close}>\n Cancel\n </lukso-button>\n <lukso-button variant=\"secondary\" @click=${this.goBack}>\n Back\n </lukso-button>\n </div>\n <lukso-button\n variant=\"primary\"\n ?disabled=${!canProceed || this.isCreatingBackup}\n ?is-loading=${this.isCreatingBackup}\n @click=${this.createBackup}\n >\n Create Backup\n </lukso-button>\n </div>\n `\n }\n\n private renderDownloadStep() {\n return html`\n <p class=\"mb-6 text-neutral-40 dark:text-neutral-50 paragraph-inter-16-regular\">\n Your backup has been created${this.useEncryption ? ' and encrypted' : ''}. Download it and keep it in a safe place.\n </p>\n\n ${\n !this.useEncryption\n ? html`\n <p class=\"mb-6 text-neutral-40 dark:text-neutral-50 paragraph-inter-14-regular\">\n This unencrypted backup is intended for development purposes. Use it when creating dapps that need access to the profile for testing.\n </p>\n `\n : nothing\n }\n\n <div class=\"flex justify-end gap-3\">\n <lukso-button variant=\"primary\" @click=${this.handleDownload}>\n Download Backup\n </lukso-button>\n </div>\n `\n }\n\n private getStepTitle(): string {\n switch (this.currentStep) {\n case Step.CHOICE:\n return 'Backup Wallet'\n case Step.PASSWORD:\n return 'Set Password'\n case Step.DOWNLOAD:\n return 'Download Backup'\n default:\n return 'Backup Wallet'\n }\n }\n\n private selectBackupType(encrypted: boolean) {\n this.useEncryption = encrypted\n if (encrypted) {\n this.currentStep = Step.PASSWORD\n } else {\n // Unencrypted backup - create immediately\n this.createBackup()\n }\n }\n\n private async createBackup() {\n this.isCreatingBackup = true\n this.passwordErrors = []\n\n // Emit create event with password (if encrypted)\n // Parent should handle backup creation\n const createEvent = new CustomEvent('create', {\n detail: {\n password: this.useEncryption ? this.password : undefined,\n encrypted: this.useEncryption,\n },\n bubbles: true,\n composed: true,\n cancelable: true,\n })\n\n this.dispatchEvent(createEvent)\n\n // If parent didn't prevent default, show error\n if (!createEvent.defaultPrevented) {\n this.passwordErrors = [\n 'No backup handler configured. Please handle the \"create\" event.',\n ]\n this.isCreatingBackup = false\n }\n // Otherwise, parent will call setBackupResult()\n }\n\n private handleDownload() {\n if (this.generatedBackup) {\n downloadBackup(this.generatedBackup)\n\n // Dispatch download event\n this.dispatchEvent(\n new CustomEvent('download', {\n detail: this.generatedBackup,\n bubbles: true,\n composed: true,\n })\n )\n\n // Close modal after download\n setTimeout(() => {\n this.close()\n }, 100)\n }\n }\n\n private goBack() {\n if (this.currentStep === Step.PASSWORD) {\n this.currentStep = Step.CHOICE\n this.password = ''\n this.passwordConfirm = ''\n this.passwordErrors = []\n }\n }\n\n private close() {\n this.open = false\n this.dispatchEvent(\n new CustomEvent('close', { bubbles: true, composed: true })\n )\n\n // Reset state after animation\n setTimeout(() => {\n this.currentStep = Step.CHOICE\n this.useEncryption = true\n this.password = ''\n this.passwordConfirm = ''\n this.passwordErrors = []\n this.isCreatingBackup = false\n this.generatedBackup = null\n }, 300)\n }\n\n private calculatePasswordStrength(): PasswordStrength {\n const result = zxcvbn(this.password)\n\n const strengthMap = [\n {\n level: 'very-weak',\n label: 'Very Weak',\n color: 'text-red-55',\n bgColor: 'bg-red-55',\n width: 20,\n },\n {\n level: 'weak',\n label: 'Weak',\n color: 'text-red-65',\n bgColor: 'bg-red-65',\n width: 40,\n },\n {\n level: 'fair',\n label: 'Fair',\n color: 'text-yellow-55',\n bgColor: 'bg-yellow-55',\n width: 60,\n },\n {\n level: 'good',\n label: 'Good',\n color: 'text-green-54',\n bgColor: 'bg-green-54',\n width: 80,\n },\n {\n level: 'strong',\n label: 'Strong',\n color: 'text-green-45',\n bgColor: 'bg-green-45',\n width: 100,\n },\n ]\n\n const strength = strengthMap[result.score]\n const feedback =\n result.feedback.suggestions.join(' ') || result.feedback.warning || ''\n const crackTime =\n result.crack_times_display.offline_slow_hashing_1e4_per_second\n\n return {\n ...strength,\n feedback,\n crackTime,\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'backup-modal': BackupModal\n }\n}\n"]}
|
|
@@ -6,8 +6,8 @@ import {
|
|
|
6
6
|
} from "./chunk-EUXUH3YW.js";
|
|
7
7
|
|
|
8
8
|
// src/backup-modal.ts
|
|
9
|
+
import { safeCustomElement } from "@lukso/core/utils";
|
|
9
10
|
import { downloadBackup } from "@lukso/passkey-auth";
|
|
10
|
-
import { safeCustomElement } from "@lukso/transaction-view-core/shared";
|
|
11
11
|
import { html, nothing } from "lit";
|
|
12
12
|
import { property, state } from "lit/decorators.js";
|
|
13
13
|
import zxcvbn from "zxcvbn";
|
|
@@ -389,4 +389,4 @@ BackupModal = __decorateClass([
|
|
|
389
389
|
export {
|
|
390
390
|
BackupModal
|
|
391
391
|
};
|
|
392
|
-
//# sourceMappingURL=chunk-
|
|
392
|
+
//# sourceMappingURL=chunk-XEMCMM64.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/backup-modal.ts"],"sourcesContent":["/**\n * Backup Modal - Lit Component\n *\n * Framework-agnostic backup modal for wallet data export.\n * Uses lukso-modal from @lukso/web-components for consistent UI.\n */\n\nimport { safeCustomElement } from '@lukso/core/utils'\nimport type { BackupFile } from '@lukso/passkey-auth'\nimport { downloadBackup } from '@lukso/passkey-auth'\nimport { html, nothing } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport zxcvbn from 'zxcvbn'\nimport { CoreLitElement } from './styles'\n\n// Import lukso web components\nimport '@lukso/web-components/dist/components/lukso-modal'\nimport '@lukso/web-components/dist/components/lukso-button'\nimport '@lukso/web-components/dist/components/lukso-input'\n\nenum Step {\n CHOICE = 1,\n PASSWORD = 2,\n DOWNLOAD = 3,\n}\n\ninterface PasswordStrength {\n level: string\n label: string\n color: string\n bgColor: string\n width: number\n feedback: string\n crackTime: string | number\n}\n\n@safeCustomElement('backup-modal')\nexport class BackupModal extends CoreLitElement {\n // Public properties\n @property({ type: Boolean, reflect: true }) open = false\n @property({ type: String }) theme: 'light' | 'dark' | 'auto' = 'auto'\n\n // Private state - wizard flow\n @state() private currentStep: Step = Step.CHOICE\n @state() private useEncryption = true\n @state() private password = ''\n @state() private passwordConfirm = ''\n @state() private passwordErrors: string[] = []\n @state() private isCreatingBackup = false\n @state() private generatedBackup: BackupFile | null = null\n\n /**\n * Public method for parent to set backup result\n * Called after parent handles the 'create' event\n */\n public setBackupResult(\n backupFile: BackupFile | null,\n options?: {\n error?: string\n }\n ) {\n this.isCreatingBackup = false\n\n if (options?.error) {\n this.passwordErrors = [options.error]\n this.generatedBackup = null\n } else if (backupFile) {\n this.generatedBackup = backupFile\n this.currentStep = Step.DOWNLOAD\n }\n }\n\n render() {\n return html`\n <lukso-modal\n ?is-open=${this.open}\n size=\"medium\"\n @on-backdrop-click=${this.close}\n >\n <div class=\"p-6\">\n <!-- Header -->\n <h2 class=\"m-0 mb-6 text-neutral-20 dark:text-white heading-inter-21-semi-bold\">\n ${this.getStepTitle()}\n </h2>\n\n <!-- Step content -->\n ${this.renderStep()}\n </div>\n </lukso-modal>\n `\n }\n\n private renderStep() {\n switch (this.currentStep) {\n case Step.CHOICE:\n return this.renderChoiceStep()\n case Step.PASSWORD:\n return this.renderPasswordStep()\n case Step.DOWNLOAD:\n return this.renderDownloadStep()\n default:\n return nothing\n }\n }\n\n private renderChoiceStep() {\n return html`\n <div class=\"flex flex-col gap-3 mb-6\">\n <!-- Encrypted option (recommended) -->\n <div\n class=\"border-2 border-neutral-90 dark:border-neutral-70 rounded-lg p-4 cursor-pointer transition-all hover:border-neutral-60 dark:hover:border-neutral-60\"\n @click=${() => this.selectBackupType(true)}\n >\n <div class=\"flex items-center gap-3 mb-2\">\n <span class=\"text-neutral-10 dark:text-white heading-inter-16-semi-bold flex-1\">\n Encrypt backup file\n </span>\n <span class=\"text-xs text-neutral-50 dark:text-neutral-60 uppercase tracking-wide\">\n Recommended\n </span>\n </div>\n <p class=\"m-0 text-neutral-40 dark:text-neutral-50 paragraph-inter-14-regular\">\n Uses password-based encryption to protect the secrets in this file.\n </p>\n </div>\n\n <!-- Unencrypted option -->\n <div\n class=\"border-2 border-neutral-90 dark:border-neutral-70 rounded-lg p-4 cursor-pointer transition-all hover:border-neutral-60 dark:hover:border-neutral-60\"\n @click=${() => this.selectBackupType(false)}\n >\n <div class=\"flex items-center gap-3 mb-2\">\n <span class=\"text-neutral-10 dark:text-white heading-inter-16-semi-bold flex-1\">\n Plain text backup\n </span>\n <span class=\"text-xs text-neutral-50 dark:text-neutral-60 uppercase tracking-wide\">\n For development only\n </span>\n </div>\n <p class=\"m-0 text-neutral-40 dark:text-neutral-50 paragraph-inter-14-regular\">\n Secrets will be stored in plain text.\n </p>\n </div>\n </div>\n\n <div class=\"flex justify-between gap-3\">\n <lukso-button variant=\"text\" @click=${this.close}>\n Cancel\n </lukso-button>\n </div>\n `\n }\n\n private renderPasswordStep() {\n const passwordStrength = this.password\n ? this.calculatePasswordStrength()\n : null\n const passwordsMatch =\n this.password &&\n this.passwordConfirm &&\n this.password === this.passwordConfirm\n const canProceed = this.password && this.passwordConfirm && passwordsMatch\n\n return html`\n <p class=\"mb-6 text-neutral-40 dark:text-neutral-50 paragraph-inter-16-regular\">\n Choose a strong password to encrypt your backup. You'll need this password to restore your wallet.\n </p>\n\n <div class=\"space-y-4\">\n <lukso-input\n type=\"password\"\n label=\"Password\"\n placeholder=\"Enter a strong password\"\n .value=${this.password}\n @on-input=${(e: CustomEvent) => {\n this.password = e.detail.value\n }}\n is-full-width\n autofocus\n ></lukso-input>\n\n ${this.passwordErrors.map(\n (error) => html`\n <div class=\"mt-1 text-red-55 paragraph-inter-13-regular\">${error}</div>\n `\n )}\n\n ${\n passwordStrength\n ? html`\n <div class=\"mt-3\">\n <div class=\"flex items-center justify-between mb-1\">\n <span class=\"paragraph-inter-13-regular text-neutral-40\">Password strength:</span>\n <span class=\"paragraph-inter-13-semi-bold ${passwordStrength.color}\">${passwordStrength.label}</span>\n </div>\n <div class=\"h-1.5 bg-neutral-90 dark:bg-neutral-70 rounded-full overflow-hidden\">\n <div\n class=\"h-full ${passwordStrength.bgColor} transition-all duration-300\"\n style=\"width: ${passwordStrength.width}%\"\n ></div>\n </div>\n <p class=\"mt-1 mb-0 text-neutral-40 paragraph-inter-12-regular\">\n Time to crack: ${passwordStrength.crackTime}\n </p>\n ${\n passwordStrength.feedback\n ? html`\n <p class=\"mt-2 mb-0 text-neutral-40 paragraph-inter-12-regular\">${passwordStrength.feedback}</p>\n `\n : nothing\n }\n </div>\n `\n : nothing\n }\n\n <lukso-input\n type=\"password\"\n label=\"Confirm Password\"\n placeholder=\"Re-enter your password\"\n .value=${this.passwordConfirm}\n @on-input=${(e: CustomEvent) => {\n this.passwordConfirm = e.detail.value\n }}\n is-full-width\n ></lukso-input>\n\n ${\n this.passwordConfirm\n ? html`\n <div class=\"flex items-center justify-between mt-2\">\n <span class=\"paragraph-inter-13-regular text-neutral-40\">Passwords match:</span>\n <span class=\"paragraph-inter-13-semi-bold ${passwordsMatch ? 'text-green-54' : 'text-red-55'}\">\n ${passwordsMatch ? 'Yes' : 'No'}\n </span>\n </div>\n `\n : nothing\n }\n </div>\n\n <div class=\"flex justify-between gap-3 mt-6\">\n <div class=\"flex gap-3\">\n <lukso-button variant=\"text\" @click=${this.close}>\n Cancel\n </lukso-button>\n <lukso-button variant=\"secondary\" @click=${this.goBack}>\n Back\n </lukso-button>\n </div>\n <lukso-button\n variant=\"primary\"\n ?disabled=${!canProceed || this.isCreatingBackup}\n ?is-loading=${this.isCreatingBackup}\n @click=${this.createBackup}\n >\n Create Backup\n </lukso-button>\n </div>\n `\n }\n\n private renderDownloadStep() {\n return html`\n <p class=\"mb-6 text-neutral-40 dark:text-neutral-50 paragraph-inter-16-regular\">\n Your backup has been created${this.useEncryption ? ' and encrypted' : ''}. Download it and keep it in a safe place.\n </p>\n\n ${\n !this.useEncryption\n ? html`\n <p class=\"mb-6 text-neutral-40 dark:text-neutral-50 paragraph-inter-14-regular\">\n This unencrypted backup is intended for development purposes. Use it when creating dapps that need access to the profile for testing.\n </p>\n `\n : nothing\n }\n\n <div class=\"flex justify-end gap-3\">\n <lukso-button variant=\"primary\" @click=${this.handleDownload}>\n Download Backup\n </lukso-button>\n </div>\n `\n }\n\n private getStepTitle(): string {\n switch (this.currentStep) {\n case Step.CHOICE:\n return 'Backup Wallet'\n case Step.PASSWORD:\n return 'Set Password'\n case Step.DOWNLOAD:\n return 'Download Backup'\n default:\n return 'Backup Wallet'\n }\n }\n\n private selectBackupType(encrypted: boolean) {\n this.useEncryption = encrypted\n if (encrypted) {\n this.currentStep = Step.PASSWORD\n } else {\n // Unencrypted backup - create immediately\n this.createBackup()\n }\n }\n\n private async createBackup() {\n this.isCreatingBackup = true\n this.passwordErrors = []\n\n // Emit create event with password (if encrypted)\n // Parent should handle backup creation\n const createEvent = new CustomEvent('create', {\n detail: {\n password: this.useEncryption ? this.password : undefined,\n encrypted: this.useEncryption,\n },\n bubbles: true,\n composed: true,\n cancelable: true,\n })\n\n this.dispatchEvent(createEvent)\n\n // If parent didn't prevent default, show error\n if (!createEvent.defaultPrevented) {\n this.passwordErrors = [\n 'No backup handler configured. Please handle the \"create\" event.',\n ]\n this.isCreatingBackup = false\n }\n // Otherwise, parent will call setBackupResult()\n }\n\n private handleDownload() {\n if (this.generatedBackup) {\n downloadBackup(this.generatedBackup)\n\n // Dispatch download event\n this.dispatchEvent(\n new CustomEvent('download', {\n detail: this.generatedBackup,\n bubbles: true,\n composed: true,\n })\n )\n\n // Close modal after download\n setTimeout(() => {\n this.close()\n }, 100)\n }\n }\n\n private goBack() {\n if (this.currentStep === Step.PASSWORD) {\n this.currentStep = Step.CHOICE\n this.password = ''\n this.passwordConfirm = ''\n this.passwordErrors = []\n }\n }\n\n private close() {\n this.open = false\n this.dispatchEvent(\n new CustomEvent('close', { bubbles: true, composed: true })\n )\n\n // Reset state after animation\n setTimeout(() => {\n this.currentStep = Step.CHOICE\n this.useEncryption = true\n this.password = ''\n this.passwordConfirm = ''\n this.passwordErrors = []\n this.isCreatingBackup = false\n this.generatedBackup = null\n }, 300)\n }\n\n private calculatePasswordStrength(): PasswordStrength {\n const result = zxcvbn(this.password)\n\n const strengthMap = [\n {\n level: 'very-weak',\n label: 'Very Weak',\n color: 'text-red-55',\n bgColor: 'bg-red-55',\n width: 20,\n },\n {\n level: 'weak',\n label: 'Weak',\n color: 'text-red-65',\n bgColor: 'bg-red-65',\n width: 40,\n },\n {\n level: 'fair',\n label: 'Fair',\n color: 'text-yellow-55',\n bgColor: 'bg-yellow-55',\n width: 60,\n },\n {\n level: 'good',\n label: 'Good',\n color: 'text-green-54',\n bgColor: 'bg-green-54',\n width: 80,\n },\n {\n level: 'strong',\n label: 'Strong',\n color: 'text-green-45',\n bgColor: 'bg-green-45',\n width: 100,\n },\n ]\n\n const strength = strengthMap[result.score]\n const feedback =\n result.feedback.suggestions.join(' ') || result.feedback.warning || ''\n const crackTime =\n result.crack_times_display.offline_slow_hashing_1e4_per_second\n\n return {\n ...strength,\n feedback,\n crackTime,\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'backup-modal': BackupModal\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -6,7 +6,7 @@ var _chunk3AIZSSEEcjs = require('./chunk-3AIZSSEE.cjs');
|
|
|
6
6
|
var _chunkZBDE64SDcjs = require('./chunk-ZBDE64SD.cjs');
|
|
7
7
|
|
|
8
8
|
// src/account-modal.ts
|
|
9
|
-
var
|
|
9
|
+
var _utils = require('@lukso/core/utils');
|
|
10
10
|
var _lit = require('lit');
|
|
11
11
|
var _decoratorsjs = require('lit/decorators.js');
|
|
12
12
|
require('@lukso/web-components/dist/components/lukso-modal');
|
|
@@ -150,10 +150,10 @@ _chunkZBDE64SDcjs.__decorateClass.call(void 0, [
|
|
|
150
150
|
_decoratorsjs.property.call(void 0, { type: String })
|
|
151
151
|
], AccountModal.prototype, "connectorName", 2);
|
|
152
152
|
AccountModal = exports.AccountModal = _chunkZBDE64SDcjs.__decorateClass.call(void 0, [
|
|
153
|
-
|
|
153
|
+
_utils.safeCustomElement.call(void 0, "account-modal")
|
|
154
154
|
], AccountModal);
|
|
155
155
|
|
|
156
156
|
|
|
157
157
|
|
|
158
158
|
exports.AccountModal = AccountModal;
|
|
159
|
-
//# sourceMappingURL=chunk-
|
|
159
|
+
//# sourceMappingURL=chunk-YOFQI4WS.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/service-auth-simple/service-auth-simple/packages/up-connector/dist/chunk-YOFQI4WS.cjs","../src/account-modal.ts"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACAA,0CAAkC;AAClC,0BAAqB;AACrB,iDAAyB;AAIzB,6DAAO;AACP,8DAAO;AAGA,IAAM,aAAA,EAAN,MAAA,QAA2B,iCAAe;AAAA,EAA1C,WAAA,CAAA,EAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA;AAEuC,IAAA,IAAA,CAAA,KAAA,EAAO,KAAA;AACvB,IAAA,IAAA,CAAA,MAAA,EAAmC,MAAA;AACnC,IAAA,IAAA,CAAA,QAAA,EAAU,EAAA;AAEV,IAAA,IAAA,CAAA,cAAA,EAAgB,EAAA;AAAA,EAAA;AAAA,EAEpC,KAAA,CAAA,EAAQ;AACd,IAAA,IAAA,CAAK,KAAA,EAAO,KAAA;AACZ,IAAA,IAAA,CAAK,aAAA,CAAc,IAAI,WAAA,CAAY,OAAO,CAAC,CAAA;AAAA,EAC7C;AAAA,EAEQ,gBAAA,CAAA,EAAmB;AACzB,IAAA,IAAA,CAAK,aAAA,CAAc,IAAI,WAAA,CAAY,YAAY,CAAC,CAAA;AAChD,IAAA,IAAA,CAAK,KAAA,CAAM,CAAA;AAAA,EACb;AAAA,EAEQ,YAAA,CAAA,EAAuB;AAC7B,IAAA,OAAA,CAAQ,IAAA,CAAK,OAAA,EAAS;AAAA,MACpB,KAAK,EAAA;AACH,QAAA,OAAO,eAAA;AAAA,MACT,KAAK,IAAA;AACH,QAAA,OAAO,eAAA;AAAA,MACT,OAAA;AACE,QAAA,OAAO,IAAA,CAAK,QAAA,EAAU,CAAA,MAAA,EAAS,IAAA,CAAK,OAAO,CAAA,EAAA;AAC/C,IAAA;AACF,EAAA;AAES,EAAA;AACA,IAAA;AAAA;AAEiB,iBAAA;AAAA;AAEW,2BAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAON,qBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2CL,cAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaS,gBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWY,gBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASP,mBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA;AAOxC,EAAA;AACF;AA3H8C;AAAF,EAAA;AAAE;AAChB;AAAF,EAAA;AAAE;AACA;AAAF,EAAA;AAAE;AACA;AAAF,EAAA;AAAE;AACA;AAAF,EAAA;AAAE;AANvB;AAD2B,EAAA;AACrB;ADyIuC;AACA;AACA;AACA","file":"/home/runner/work/service-auth-simple/service-auth-simple/packages/up-connector/dist/chunk-YOFQI4WS.cjs","sourcesContent":[null,"/**\n * Account Modal - Lit Component\n *\n * Framework-agnostic account management modal showing connected wallet details.\n * Uses lukso-modal from @lukso/web-components for consistent UI.\n */\n\nimport { safeCustomElement } from '@lukso/core/utils'\nimport { html } from 'lit'\nimport { property } from 'lit/decorators.js'\nimport { CoreLitElement } from './styles'\n\n// Import lukso web components\nimport '@lukso/web-components/dist/components/lukso-modal'\nimport '@lukso/web-components/dist/components/lukso-button'\n\n@safeCustomElement('account-modal')\nexport class AccountModal extends CoreLitElement {\n // Public properties\n @property({ type: Boolean, reflect: true }) open = false\n @property({ type: String }) theme: 'light' | 'dark' | 'auto' = 'auto'\n @property({ type: String }) address = ''\n @property({ type: Number }) chainId?: number\n @property({ type: String }) connectorName = ''\n\n private close() {\n this.open = false\n this.dispatchEvent(new CustomEvent('close'))\n }\n\n private handleDisconnect() {\n this.dispatchEvent(new CustomEvent('disconnect'))\n this.close()\n }\n\n private getChainName(): string {\n switch (this.chainId) {\n case 42:\n return 'LUKSO Mainnet'\n case 4201:\n return 'LUKSO Testnet'\n default:\n return this.chainId ? `Chain ${this.chainId}` : 'Unknown Network'\n }\n }\n\n render() {\n return html`\n <lukso-modal\n ?is-open=${this.open}\n size=\"small\"\n @on-backdrop-click=${this.close}\n >\n <div class=\"p-6\">\n <!-- Header with close button -->\n <div class=\"flex justify-between items-center mb-6\">\n <h2 class=\"text-xl font-semibold\">Connected Account</h2>\n <button\n @click=${this.close}\n class=\"text-neutral-50 hover:text-neutral-20 transition-colors\"\n aria-label=\"Close\"\n >\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n </div>\n\n <!-- Connection Status -->\n <div class=\"flex items-center gap-2 mb-5\">\n <div\n class=\"w-2 h-2 rounded-full\"\n style=\"background: #10b981;\"\n ></div>\n <span class=\"text-sm font-semibold\" style=\"color: #10b981;\">\n Connected\n </span>\n </div>\n\n <!-- Address -->\n <div\n class=\"mb-4 p-3 rounded-lg bg-neutral-98 border border-neutral-90\"\n >\n <div\n class=\"text-xs font-semibold text-neutral-50 mb-1.5 uppercase\"\n >\n Address\n </div>\n <div\n class=\"text-xs font-mono text-neutral-20 break-all leading-relaxed\"\n >\n ${this.address}\n </div>\n </div>\n\n <!-- Network & Connector Info -->\n <div class=\"grid grid-cols-2 gap-3 mb-5\">\n <div class=\"p-3 rounded-lg bg-neutral-98 border border-neutral-90\">\n <div\n class=\"text-xs font-semibold text-neutral-50 mb-1.5 uppercase\"\n >\n Network\n </div>\n <div class=\"text-sm font-semibold text-neutral-20\">\n ${this.getChainName()}\n </div>\n </div>\n\n <div class=\"p-3 rounded-lg bg-neutral-98 border border-neutral-90\">\n <div\n class=\"text-xs font-semibold text-neutral-50 mb-1.5 uppercase\"\n >\n Connector\n </div>\n <div class=\"text-sm font-semibold text-neutral-20\">\n ${this.connectorName || 'Unknown'}\n </div>\n </div>\n </div>\n\n <!-- Disconnect Button -->\n <lukso-button\n variant=\"danger\"\n is-full-width\n @click=${this.handleDisconnect}\n >\n Disconnect\n </lukso-button>\n </div>\n </lukso-modal>\n `\n }\n}\n"]}
|
package/dist/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
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
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkYOFQI4WScjs = require('./chunk-YOFQI4WS.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
@@ -15,10 +15,10 @@ var _chunkWZFVXKMXcjs = require('./chunk-WZFVXKMX.cjs');
|
|
|
15
15
|
var _chunk7LQ5EB2Xcjs = require('./chunk-7LQ5EB2X.cjs');
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
var
|
|
18
|
+
var _chunkUHBHVPXIcjs = require('./chunk-UHBHVPXI.cjs');
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
var
|
|
21
|
+
var _chunkNWCDXQPGcjs = require('./chunk-NWCDXQPG.cjs');
|
|
22
22
|
require('./chunk-3AIZSSEE.cjs');
|
|
23
23
|
require('./chunk-ZBDE64SD.cjs');
|
|
24
24
|
|
|
@@ -808,5 +808,5 @@ var WindowPopupInstance = class extends BasePopupInstance {
|
|
|
808
808
|
|
|
809
809
|
|
|
810
810
|
|
|
811
|
-
exports.AccountModal =
|
|
811
|
+
exports.AccountModal = _chunkYOFQI4WScjs.AccountModal; exports.BackupModal = _chunkUHBHVPXIcjs.BackupModal; exports.ConnectModal = _connectmodal.ConnectModal; exports.DraggableAvatar = _chunk7LQ5EB2Xcjs.DraggableAvatar; exports.EMBEDDED_WALLET_ID = _chunkWZFVXKMXcjs.EMBEDDED_WALLET_ID; exports.EMBEDDED_WALLET_URL_DEV = _chunkWZFVXKMXcjs.EMBEDDED_WALLET_URL_DEV; exports.EMBEDDED_WALLET_URL_PROD = _chunkWZFVXKMXcjs.EMBEDDED_WALLET_URL_PROD; exports.LuksoConnector = _chunkWZFVXKMXcjs.LuksoConnector; exports.ModalPopupInstance = ModalPopupInstance; exports.RestoreModal = _chunkNWCDXQPGcjs.RestoreModal; exports.UPConnector = UPConnector; exports.UP_EXTENSION_ID = _chunkWZFVXKMXcjs.UP_EXTENSION_ID; exports.WindowPopupInstance = WindowPopupInstance; exports.createAvatar = _chunk7LQ5EB2Xcjs.createAvatar; exports.createConnector = createConnector; exports.default = createConnector; exports.disconnect = _connectmodal.disconnect; exports.fromWagmiConnector = _upmodal.fromWagmiConnector; exports.fromWagmiConnectors = _upmodal.fromWagmiConnectors; exports.getConnection = _connectmodal.getConnection; exports.getWagmiSetup = _connectmodal.getWagmiSetup; exports.setupConnectModal = _connectmodal.setupConnectModal; exports.setupLuksoConnector = _chunkWZFVXKMXcjs.setupLuksoConnector; exports.wagmi = _connectmodal.wagmi; exports.watchConnection = _connectmodal.watchConnection;
|
|
812
812
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AccountModal
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-JWH7V5IC.js";
|
|
4
4
|
import {
|
|
5
5
|
EMBEDDED_WALLET_ID,
|
|
6
6
|
EMBEDDED_WALLET_URL_DEV,
|
|
@@ -15,10 +15,10 @@ import {
|
|
|
15
15
|
} from "./chunk-GKAVIDXP.js";
|
|
16
16
|
import {
|
|
17
17
|
BackupModal
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-XEMCMM64.js";
|
|
19
19
|
import {
|
|
20
20
|
RestoreModal
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-P4YKM2GB.js";
|
|
22
22
|
import "./chunk-XEZEZ62E.js";
|
|
23
23
|
import "./chunk-EUXUH3YW.js";
|
|
24
24
|
|
package/dist/restore-modal.cjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkNWCDXQPGcjs = require('./chunk-NWCDXQPG.cjs');
|
|
4
4
|
require('./chunk-3AIZSSEE.cjs');
|
|
5
5
|
require('./chunk-ZBDE64SD.cjs');
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
exports.RestoreModal =
|
|
8
|
+
exports.RestoreModal = _chunkNWCDXQPGcjs.RestoreModal;
|
|
9
9
|
//# sourceMappingURL=restore-modal.cjs.map
|
package/dist/restore-modal.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lukso/up-connector",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0-dev.ce42189",
|
|
4
4
|
"description": "Universal Profile connector with draggable avatar and connection modal",
|
|
5
5
|
"main": "./dist/index.cjs",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -75,16 +75,16 @@
|
|
|
75
75
|
"dependencies": {
|
|
76
76
|
"@lit/task": "^1.0.3",
|
|
77
77
|
"@lukso/up-provider": "0.3.7",
|
|
78
|
-
"@lukso/web-components": "^1.
|
|
78
|
+
"@lukso/web-components": "^1.181.0",
|
|
79
79
|
"debug": "^4.4.3",
|
|
80
80
|
"lit": "3.3.2",
|
|
81
81
|
"ws": "^8.19.0",
|
|
82
82
|
"zxcvbn": "^4.4.2",
|
|
83
|
-
"@lukso/core": "1.
|
|
84
|
-
"@lukso/passkey-auth": "1.2.8",
|
|
85
|
-
"@lukso/transaction-view-core": "0.
|
|
86
|
-
"@lukso/
|
|
87
|
-
"@lukso/
|
|
83
|
+
"@lukso/core": "1.4.0-dev.ce42189",
|
|
84
|
+
"@lukso/passkey-auth": "1.2.8-dev.ce42189",
|
|
85
|
+
"@lukso/transaction-view-core": "0.7.0-dev.ce42189",
|
|
86
|
+
"@lukso/up-modal": "0.10.0-dev.ce42189",
|
|
87
|
+
"@lukso/transaction-view-headless": "0.4.9-dev.ce42189"
|
|
88
88
|
},
|
|
89
89
|
"peerDependencies": {
|
|
90
90
|
"@wagmi/connectors": "^7.0.0",
|
package/src/account-modal.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Uses lukso-modal from @lukso/web-components for consistent UI.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import { safeCustomElement } from '@lukso/
|
|
8
|
+
import { safeCustomElement } from '@lukso/core/utils'
|
|
9
9
|
import { html } from 'lit'
|
|
10
10
|
import { property } from 'lit/decorators.js'
|
|
11
11
|
import { CoreLitElement } from './styles'
|
package/src/backup-modal.ts
CHANGED
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
* Uses lukso-modal from @lukso/web-components for consistent UI.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
+
import { safeCustomElement } from '@lukso/core/utils'
|
|
8
9
|
import type { BackupFile } from '@lukso/passkey-auth'
|
|
9
10
|
import { downloadBackup } from '@lukso/passkey-auth'
|
|
10
|
-
import { safeCustomElement } from '@lukso/transaction-view-core/shared'
|
|
11
11
|
import { html, nothing } from 'lit'
|
|
12
12
|
import { property, state } from 'lit/decorators.js'
|
|
13
13
|
import zxcvbn from 'zxcvbn'
|
package/src/restore-modal.ts
CHANGED
|
@@ -5,13 +5,13 @@
|
|
|
5
5
|
* Uses lukso-modal from @lukso/web-components for consistent UI.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
+
import { safeCustomElement } from '@lukso/core/utils'
|
|
8
9
|
import type {
|
|
9
10
|
BackupFile,
|
|
10
11
|
PasskeyAuthProvider,
|
|
11
12
|
WalletData,
|
|
12
13
|
} from '@lukso/passkey-auth'
|
|
13
14
|
import { readBackupFile } from '@lukso/passkey-auth'
|
|
14
|
-
import { safeCustomElement } from '@lukso/transaction-view-core/shared'
|
|
15
15
|
import { html, nothing } from 'lit'
|
|
16
16
|
import { property, state } from 'lit/decorators.js'
|
|
17
17
|
import { CoreLitElement } from './styles'
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/backup-modal.ts"],"sourcesContent":["/**\n * Backup Modal - Lit Component\n *\n * Framework-agnostic backup modal for wallet data export.\n * Uses lukso-modal from @lukso/web-components for consistent UI.\n */\n\nimport type { BackupFile } from '@lukso/passkey-auth'\nimport { downloadBackup } from '@lukso/passkey-auth'\nimport { safeCustomElement } from '@lukso/transaction-view-core/shared'\nimport { html, nothing } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport zxcvbn from 'zxcvbn'\nimport { CoreLitElement } from './styles'\n\n// Import lukso web components\nimport '@lukso/web-components/dist/components/lukso-modal'\nimport '@lukso/web-components/dist/components/lukso-button'\nimport '@lukso/web-components/dist/components/lukso-input'\n\nenum Step {\n CHOICE = 1,\n PASSWORD = 2,\n DOWNLOAD = 3,\n}\n\ninterface PasswordStrength {\n level: string\n label: string\n color: string\n bgColor: string\n width: number\n feedback: string\n crackTime: string | number\n}\n\n@safeCustomElement('backup-modal')\nexport class BackupModal extends CoreLitElement {\n // Public properties\n @property({ type: Boolean, reflect: true }) open = false\n @property({ type: String }) theme: 'light' | 'dark' | 'auto' = 'auto'\n\n // Private state - wizard flow\n @state() private currentStep: Step = Step.CHOICE\n @state() private useEncryption = true\n @state() private password = ''\n @state() private passwordConfirm = ''\n @state() private passwordErrors: string[] = []\n @state() private isCreatingBackup = false\n @state() private generatedBackup: BackupFile | null = null\n\n /**\n * Public method for parent to set backup result\n * Called after parent handles the 'create' event\n */\n public setBackupResult(\n backupFile: BackupFile | null,\n options?: {\n error?: string\n }\n ) {\n this.isCreatingBackup = false\n\n if (options?.error) {\n this.passwordErrors = [options.error]\n this.generatedBackup = null\n } else if (backupFile) {\n this.generatedBackup = backupFile\n this.currentStep = Step.DOWNLOAD\n }\n }\n\n render() {\n return html`\n <lukso-modal\n ?is-open=${this.open}\n size=\"medium\"\n @on-backdrop-click=${this.close}\n >\n <div class=\"p-6\">\n <!-- Header -->\n <h2 class=\"m-0 mb-6 text-neutral-20 dark:text-white heading-inter-21-semi-bold\">\n ${this.getStepTitle()}\n </h2>\n\n <!-- Step content -->\n ${this.renderStep()}\n </div>\n </lukso-modal>\n `\n }\n\n private renderStep() {\n switch (this.currentStep) {\n case Step.CHOICE:\n return this.renderChoiceStep()\n case Step.PASSWORD:\n return this.renderPasswordStep()\n case Step.DOWNLOAD:\n return this.renderDownloadStep()\n default:\n return nothing\n }\n }\n\n private renderChoiceStep() {\n return html`\n <div class=\"flex flex-col gap-3 mb-6\">\n <!-- Encrypted option (recommended) -->\n <div\n class=\"border-2 border-neutral-90 dark:border-neutral-70 rounded-lg p-4 cursor-pointer transition-all hover:border-neutral-60 dark:hover:border-neutral-60\"\n @click=${() => this.selectBackupType(true)}\n >\n <div class=\"flex items-center gap-3 mb-2\">\n <span class=\"text-neutral-10 dark:text-white heading-inter-16-semi-bold flex-1\">\n Encrypt backup file\n </span>\n <span class=\"text-xs text-neutral-50 dark:text-neutral-60 uppercase tracking-wide\">\n Recommended\n </span>\n </div>\n <p class=\"m-0 text-neutral-40 dark:text-neutral-50 paragraph-inter-14-regular\">\n Uses password-based encryption to protect the secrets in this file.\n </p>\n </div>\n\n <!-- Unencrypted option -->\n <div\n class=\"border-2 border-neutral-90 dark:border-neutral-70 rounded-lg p-4 cursor-pointer transition-all hover:border-neutral-60 dark:hover:border-neutral-60\"\n @click=${() => this.selectBackupType(false)}\n >\n <div class=\"flex items-center gap-3 mb-2\">\n <span class=\"text-neutral-10 dark:text-white heading-inter-16-semi-bold flex-1\">\n Plain text backup\n </span>\n <span class=\"text-xs text-neutral-50 dark:text-neutral-60 uppercase tracking-wide\">\n For development only\n </span>\n </div>\n <p class=\"m-0 text-neutral-40 dark:text-neutral-50 paragraph-inter-14-regular\">\n Secrets will be stored in plain text.\n </p>\n </div>\n </div>\n\n <div class=\"flex justify-between gap-3\">\n <lukso-button variant=\"text\" @click=${this.close}>\n Cancel\n </lukso-button>\n </div>\n `\n }\n\n private renderPasswordStep() {\n const passwordStrength = this.password\n ? this.calculatePasswordStrength()\n : null\n const passwordsMatch =\n this.password &&\n this.passwordConfirm &&\n this.password === this.passwordConfirm\n const canProceed = this.password && this.passwordConfirm && passwordsMatch\n\n return html`\n <p class=\"mb-6 text-neutral-40 dark:text-neutral-50 paragraph-inter-16-regular\">\n Choose a strong password to encrypt your backup. You'll need this password to restore your wallet.\n </p>\n\n <div class=\"space-y-4\">\n <lukso-input\n type=\"password\"\n label=\"Password\"\n placeholder=\"Enter a strong password\"\n .value=${this.password}\n @on-input=${(e: CustomEvent) => {\n this.password = e.detail.value\n }}\n is-full-width\n autofocus\n ></lukso-input>\n\n ${this.passwordErrors.map(\n (error) => html`\n <div class=\"mt-1 text-red-55 paragraph-inter-13-regular\">${error}</div>\n `\n )}\n\n ${\n passwordStrength\n ? html`\n <div class=\"mt-3\">\n <div class=\"flex items-center justify-between mb-1\">\n <span class=\"paragraph-inter-13-regular text-neutral-40\">Password strength:</span>\n <span class=\"paragraph-inter-13-semi-bold ${passwordStrength.color}\">${passwordStrength.label}</span>\n </div>\n <div class=\"h-1.5 bg-neutral-90 dark:bg-neutral-70 rounded-full overflow-hidden\">\n <div\n class=\"h-full ${passwordStrength.bgColor} transition-all duration-300\"\n style=\"width: ${passwordStrength.width}%\"\n ></div>\n </div>\n <p class=\"mt-1 mb-0 text-neutral-40 paragraph-inter-12-regular\">\n Time to crack: ${passwordStrength.crackTime}\n </p>\n ${\n passwordStrength.feedback\n ? html`\n <p class=\"mt-2 mb-0 text-neutral-40 paragraph-inter-12-regular\">${passwordStrength.feedback}</p>\n `\n : nothing\n }\n </div>\n `\n : nothing\n }\n\n <lukso-input\n type=\"password\"\n label=\"Confirm Password\"\n placeholder=\"Re-enter your password\"\n .value=${this.passwordConfirm}\n @on-input=${(e: CustomEvent) => {\n this.passwordConfirm = e.detail.value\n }}\n is-full-width\n ></lukso-input>\n\n ${\n this.passwordConfirm\n ? html`\n <div class=\"flex items-center justify-between mt-2\">\n <span class=\"paragraph-inter-13-regular text-neutral-40\">Passwords match:</span>\n <span class=\"paragraph-inter-13-semi-bold ${passwordsMatch ? 'text-green-54' : 'text-red-55'}\">\n ${passwordsMatch ? 'Yes' : 'No'}\n </span>\n </div>\n `\n : nothing\n }\n </div>\n\n <div class=\"flex justify-between gap-3 mt-6\">\n <div class=\"flex gap-3\">\n <lukso-button variant=\"text\" @click=${this.close}>\n Cancel\n </lukso-button>\n <lukso-button variant=\"secondary\" @click=${this.goBack}>\n Back\n </lukso-button>\n </div>\n <lukso-button\n variant=\"primary\"\n ?disabled=${!canProceed || this.isCreatingBackup}\n ?is-loading=${this.isCreatingBackup}\n @click=${this.createBackup}\n >\n Create Backup\n </lukso-button>\n </div>\n `\n }\n\n private renderDownloadStep() {\n return html`\n <p class=\"mb-6 text-neutral-40 dark:text-neutral-50 paragraph-inter-16-regular\">\n Your backup has been created${this.useEncryption ? ' and encrypted' : ''}. Download it and keep it in a safe place.\n </p>\n\n ${\n !this.useEncryption\n ? html`\n <p class=\"mb-6 text-neutral-40 dark:text-neutral-50 paragraph-inter-14-regular\">\n This unencrypted backup is intended for development purposes. Use it when creating dapps that need access to the profile for testing.\n </p>\n `\n : nothing\n }\n\n <div class=\"flex justify-end gap-3\">\n <lukso-button variant=\"primary\" @click=${this.handleDownload}>\n Download Backup\n </lukso-button>\n </div>\n `\n }\n\n private getStepTitle(): string {\n switch (this.currentStep) {\n case Step.CHOICE:\n return 'Backup Wallet'\n case Step.PASSWORD:\n return 'Set Password'\n case Step.DOWNLOAD:\n return 'Download Backup'\n default:\n return 'Backup Wallet'\n }\n }\n\n private selectBackupType(encrypted: boolean) {\n this.useEncryption = encrypted\n if (encrypted) {\n this.currentStep = Step.PASSWORD\n } else {\n // Unencrypted backup - create immediately\n this.createBackup()\n }\n }\n\n private async createBackup() {\n this.isCreatingBackup = true\n this.passwordErrors = []\n\n // Emit create event with password (if encrypted)\n // Parent should handle backup creation\n const createEvent = new CustomEvent('create', {\n detail: {\n password: this.useEncryption ? this.password : undefined,\n encrypted: this.useEncryption,\n },\n bubbles: true,\n composed: true,\n cancelable: true,\n })\n\n this.dispatchEvent(createEvent)\n\n // If parent didn't prevent default, show error\n if (!createEvent.defaultPrevented) {\n this.passwordErrors = [\n 'No backup handler configured. Please handle the \"create\" event.',\n ]\n this.isCreatingBackup = false\n }\n // Otherwise, parent will call setBackupResult()\n }\n\n private handleDownload() {\n if (this.generatedBackup) {\n downloadBackup(this.generatedBackup)\n\n // Dispatch download event\n this.dispatchEvent(\n new CustomEvent('download', {\n detail: this.generatedBackup,\n bubbles: true,\n composed: true,\n })\n )\n\n // Close modal after download\n setTimeout(() => {\n this.close()\n }, 100)\n }\n }\n\n private goBack() {\n if (this.currentStep === Step.PASSWORD) {\n this.currentStep = Step.CHOICE\n this.password = ''\n this.passwordConfirm = ''\n this.passwordErrors = []\n }\n }\n\n private close() {\n this.open = false\n this.dispatchEvent(\n new CustomEvent('close', { bubbles: true, composed: true })\n )\n\n // Reset state after animation\n setTimeout(() => {\n this.currentStep = Step.CHOICE\n this.useEncryption = true\n this.password = ''\n this.passwordConfirm = ''\n this.passwordErrors = []\n this.isCreatingBackup = false\n this.generatedBackup = null\n }, 300)\n }\n\n private calculatePasswordStrength(): PasswordStrength {\n const result = zxcvbn(this.password)\n\n const strengthMap = [\n {\n level: 'very-weak',\n label: 'Very Weak',\n color: 'text-red-55',\n bgColor: 'bg-red-55',\n width: 20,\n },\n {\n level: 'weak',\n label: 'Weak',\n color: 'text-red-65',\n bgColor: 'bg-red-65',\n width: 40,\n },\n {\n level: 'fair',\n label: 'Fair',\n color: 'text-yellow-55',\n bgColor: 'bg-yellow-55',\n width: 60,\n },\n {\n level: 'good',\n label: 'Good',\n color: 'text-green-54',\n bgColor: 'bg-green-54',\n width: 80,\n },\n {\n level: 'strong',\n label: 'Strong',\n color: 'text-green-45',\n bgColor: 'bg-green-45',\n width: 100,\n },\n ]\n\n const strength = strengthMap[result.score]\n const feedback =\n result.feedback.suggestions.join(' ') || result.feedback.warning || ''\n const crackTime =\n result.crack_times_display.offline_slow_hashing_1e4_per_second\n\n return {\n ...strength,\n feedback,\n crackTime,\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'backup-modal': BackupModal\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/account-modal.ts"],"sourcesContent":["/**\n * Account Modal - Lit Component\n *\n * Framework-agnostic account management modal showing connected wallet details.\n * Uses lukso-modal from @lukso/web-components for consistent UI.\n */\n\nimport { safeCustomElement } from '@lukso/transaction-view-core/shared'\nimport { html } from 'lit'\nimport { property } from 'lit/decorators.js'\nimport { CoreLitElement } from './styles'\n\n// Import lukso web components\nimport '@lukso/web-components/dist/components/lukso-modal'\nimport '@lukso/web-components/dist/components/lukso-button'\n\n@safeCustomElement('account-modal')\nexport class AccountModal extends CoreLitElement {\n // Public properties\n @property({ type: Boolean, reflect: true }) open = false\n @property({ type: String }) theme: 'light' | 'dark' | 'auto' = 'auto'\n @property({ type: String }) address = ''\n @property({ type: Number }) chainId?: number\n @property({ type: String }) connectorName = ''\n\n private close() {\n this.open = false\n this.dispatchEvent(new CustomEvent('close'))\n }\n\n private handleDisconnect() {\n this.dispatchEvent(new CustomEvent('disconnect'))\n this.close()\n }\n\n private getChainName(): string {\n switch (this.chainId) {\n case 42:\n return 'LUKSO Mainnet'\n case 4201:\n return 'LUKSO Testnet'\n default:\n return this.chainId ? `Chain ${this.chainId}` : 'Unknown Network'\n }\n }\n\n render() {\n return html`\n <lukso-modal\n ?is-open=${this.open}\n size=\"small\"\n @on-backdrop-click=${this.close}\n >\n <div class=\"p-6\">\n <!-- Header with close button -->\n <div class=\"flex justify-between items-center mb-6\">\n <h2 class=\"text-xl font-semibold\">Connected Account</h2>\n <button\n @click=${this.close}\n class=\"text-neutral-50 hover:text-neutral-20 transition-colors\"\n aria-label=\"Close\"\n >\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n </div>\n\n <!-- Connection Status -->\n <div class=\"flex items-center gap-2 mb-5\">\n <div\n class=\"w-2 h-2 rounded-full\"\n style=\"background: #10b981;\"\n ></div>\n <span class=\"text-sm font-semibold\" style=\"color: #10b981;\">\n Connected\n </span>\n </div>\n\n <!-- Address -->\n <div\n class=\"mb-4 p-3 rounded-lg bg-neutral-98 border border-neutral-90\"\n >\n <div\n class=\"text-xs font-semibold text-neutral-50 mb-1.5 uppercase\"\n >\n Address\n </div>\n <div\n class=\"text-xs font-mono text-neutral-20 break-all leading-relaxed\"\n >\n ${this.address}\n </div>\n </div>\n\n <!-- Network & Connector Info -->\n <div class=\"grid grid-cols-2 gap-3 mb-5\">\n <div class=\"p-3 rounded-lg bg-neutral-98 border border-neutral-90\">\n <div\n class=\"text-xs font-semibold text-neutral-50 mb-1.5 uppercase\"\n >\n Network\n </div>\n <div class=\"text-sm font-semibold text-neutral-20\">\n ${this.getChainName()}\n </div>\n </div>\n\n <div class=\"p-3 rounded-lg bg-neutral-98 border border-neutral-90\">\n <div\n class=\"text-xs font-semibold text-neutral-50 mb-1.5 uppercase\"\n >\n Connector\n </div>\n <div class=\"text-sm font-semibold text-neutral-20\">\n ${this.connectorName || 'Unknown'}\n </div>\n </div>\n </div>\n\n <!-- Disconnect Button -->\n <lukso-button\n variant=\"danger\"\n is-full-width\n @click=${this.handleDisconnect}\n >\n Disconnect\n </lukso-button>\n </div>\n </lukso-modal>\n `\n }\n}\n"],"mappings":";;;;;;;;AAOA,SAAS,yBAAyB;AAClC,SAAS,YAAY;AACrB,SAAS,gBAAgB;AAIzB,OAAO;AACP,OAAO;AAGA,IAAM,eAAN,cAA2B,eAAe;AAAA,EAA1C;AAAA;AAEuC,gBAAO;AACvB,iBAAmC;AACnC,mBAAU;AAEV,yBAAgB;AAAA;AAAA,EAEpC,QAAQ;AACd,SAAK,OAAO;AACZ,SAAK,cAAc,IAAI,YAAY,OAAO,CAAC;AAAA,EAC7C;AAAA,EAEQ,mBAAmB;AACzB,SAAK,cAAc,IAAI,YAAY,YAAY,CAAC;AAChD,SAAK,MAAM;AAAA,EACb;AAAA,EAEQ,eAAuB;AAC7B,YAAQ,KAAK,SAAS;AAAA,MACpB,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT;AACE,eAAO,KAAK,UAAU,SAAS,KAAK,OAAO,KAAK;AAAA,IACpD;AAAA,EACF;AAAA,EAEA,SAAS;AACP,WAAO;AAAA;AAAA,mBAEQ,KAAK,IAAI;AAAA;AAAA,6BAEC,KAAK,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAOhB,KAAK,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBA2CjB,KAAK,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAaV,KAAK,aAAa,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAWnB,KAAK,iBAAiB,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAS5B,KAAK,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOxC;AACF;AA3H8C;AAAA,EAA3C,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GAF/B,aAEiC;AAChB;AAAA,EAA3B,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAHf,aAGiB;AACA;AAAA,EAA3B,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAJf,aAIiB;AACA;AAAA,EAA3B,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GALf,aAKiB;AACA;AAAA,EAA3B,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GANf,aAMiB;AANjB,eAAN;AAAA,EADN,kBAAkB,eAAe;AAAA,GACrB;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/service-auth-simple/service-auth-simple/packages/up-connector/dist/chunk-PHRCQCEN.cjs","../src/restore-modal.ts"],"names":[],"mappings":"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","file":"/home/runner/work/service-auth-simple/service-auth-simple/packages/up-connector/dist/chunk-PHRCQCEN.cjs","sourcesContent":[null,"/**\n * Restore Modal - Lit Component\n *\n * Framework-agnostic restore modal for wallet data import.\n * Uses lukso-modal from @lukso/web-components for consistent UI.\n */\n\nimport type {\n BackupFile,\n PasskeyAuthProvider,\n WalletData,\n} from '@lukso/passkey-auth'\nimport { readBackupFile } from '@lukso/passkey-auth'\nimport { safeCustomElement } from '@lukso/transaction-view-core/shared'\nimport { html, nothing } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport { CoreLitElement } from './styles'\n\n// Import lukso web components\nimport '@lukso/web-components/dist/components/lukso-modal'\nimport '@lukso/web-components/dist/components/lukso-button'\nimport '@lukso/web-components/dist/components/lukso-input'\n\nenum Step {\n UPLOAD = 1,\n PASSWORD = 2,\n PREVIEW = 3,\n SUCCESS = 4,\n}\n\n@safeCustomElement('restore-modal')\nexport class RestoreModal extends CoreLitElement {\n // Public properties\n @property({ type: Boolean, reflect: true }) isOpen = false\n @property({ type: String }) theme: 'light' | 'dark' | 'auto' = 'auto'\n @property({ type: Object }) keyGenerator: PasskeyAuthProvider | null = null\n\n // Private state\n @state() private currentStep: Step = Step.UPLOAD\n @state() private selectedFile: File | null = null\n @state() private backupData: BackupFile | null = null\n @state() private fileError: string | null = null\n @state() private isDragging = false\n @state() private password = ''\n @state() private passwordErrors: string[] = []\n @state() private isRestoring = false\n @state() private validationWarnings: string[] = []\n @state() private controllers: Array<{\n address: string\n status: 'new' | 'existing'\n }> = []\n @state() private restoredAddresses: string[] = []\n validationInfo: string[] = []\n walletData: WalletData | null = null\n\n /**\n * Public method for parent to set preview result\n * Called after parent handles the 'preview' event\n */\n public setPreviewResult(options: {\n controllers: Array<{ address: string; status: 'new' | 'existing' }>\n warnings?: string[]\n }) {\n this.controllers = options.controllers\n this.validationWarnings = options.warnings || []\n }\n\n /**\n * Public method for parent to set validation result\n * Called after parent handles the 'validate' event\n */\n public setValidationResult(\n walletData: WalletData | null,\n options?: {\n error?: string\n warnings?: string[]\n info?: string[]\n }\n ) {\n this.isRestoring = false\n\n if (options?.error) {\n this.passwordErrors = [options.error]\n this.validationWarnings = []\n this.validationInfo = []\n } else if (walletData) {\n this.walletData = walletData\n this.validationWarnings = options?.warnings || []\n this.validationInfo = options?.info || []\n this.currentStep = Step.SUCCESS\n }\n }\n\n render() {\n return html`\n <lukso-modal\n ?is-open=${this.isOpen}\n size=\"medium\"\n @on-backdrop-click=${this.close}\n >\n <div class=\"p-6\">\n <!-- Header -->\n <h2 class=\"m-0 mb-6 text-neutral-20 dark:text-white heading-inter-21-semi-bold\">\n ${this.getStepTitle()}\n </h2>\n\n <!-- Step content -->\n ${this.renderStep()}\n </div>\n </lukso-modal>\n `\n }\n\n private renderStep() {\n switch (this.currentStep) {\n case Step.UPLOAD:\n return this.renderUploadStep()\n case Step.PASSWORD:\n return this.renderPasswordStep()\n case Step.PREVIEW:\n return this.renderPreviewStep()\n case Step.SUCCESS:\n return this.renderSuccessStep()\n default:\n return nothing\n }\n }\n\n private renderUploadStep() {\n return html`\n <p class=\"mb-6 text-neutral-40 dark:text-neutral-50 paragraph-inter-16-regular\">\n Select your backup file to restore your wallet data. Your backup file stays on your device and is never uploaded.\n </p>\n\n <div\n class=\"border-2 border-dashed rounded-xl p-10 text-center bg-neutral-95 dark:bg-neutral-80 transition-all cursor-pointer my-6 ${\n this.isDragging\n ? 'border-blue-60 bg-blue-95 dark:bg-blue-95/10'\n : this.fileError\n ? 'border-red-55 bg-red-95'\n : 'border-neutral-90 dark:border-neutral-70'\n }\"\n @drop=${this.handleDrop}\n @dragover=${this.handleDragOver}\n @dragleave=${this.handleDragLeave}\n @click=${this.triggerFileInput}\n >\n <div class=\"flex flex-col items-center gap-3\">\n <p class=\"m-0 text-neutral-10 dark:text-white heading-inter-16-semi-bold\">\n Drag and drop your backup file here\n </p>\n <p class=\"m-0 text-neutral-40 paragraph-inter-14-regular\">or</p>\n <lukso-button\n variant=\"primary\"\n @click=${(e: Event) => {\n e.stopPropagation()\n this.triggerFileInput()\n }}\n >\n Choose File\n </lukso-button>\n ${\n this.selectedFile\n ? html`\n <p class=\"mt-2 mb-0 text-green-54 paragraph-inter-14-semi-bold\">\n ${this.selectedFile.name}\n </p>\n `\n : nothing\n }\n ${\n this.fileError\n ? html`\n <p class=\"mt-2 mb-0 text-red-55 paragraph-inter-14-semi-bold\">\n ${this.fileError}\n </p>\n `\n : nothing\n }\n </div>\n </div>\n\n <input\n type=\"file\"\n class=\"hidden\"\n accept=\".json\"\n @change=${this.handleFileSelect}\n />\n\n <div class=\"flex justify-end mt-6\">\n <lukso-button variant=\"text\" @click=${this.close}>\n Cancel\n </lukso-button>\n </div>\n `\n }\n\n private renderPasswordStep() {\n const canProceed = this.password && this.password.length > 0\n\n return html`\n <p class=\"mb-5 text-neutral-40 dark:text-neutral-50 paragraph-inter-14-regular\">\n This backup is encrypted. Enter the password to decrypt it.\n </p>\n\n <div>\n <lukso-input\n type=\"password\"\n label=\"Password\"\n placeholder=\"Enter decryption password\"\n .value=${this.password}\n @on-input=${(e: CustomEvent) => {\n this.password = e.detail.value\n }}\n @keyup=${(e: KeyboardEvent) => e.key === 'Enter' && canProceed && this.previewRestore()}\n is-full-width\n autofocus\n ></lukso-input>\n ${this.passwordErrors.map(\n (error) => html`\n <div class=\"mt-1 text-red-55 paragraph-inter-13-regular\">${error}</div>\n `\n )}\n </div>\n\n <div class=\"flex justify-between gap-3 mt-6\">\n <div class=\"flex gap-3\">\n <lukso-button variant=\"text\" @click=${this.close}>\n Cancel\n </lukso-button>\n <lukso-button variant=\"secondary\" @click=${this.goBack}>\n Back\n </lukso-button>\n </div>\n <lukso-button\n variant=\"primary\"\n ?disabled=${!canProceed || this.isRestoring}\n ?is-loading=${this.isRestoring}\n @click=${this.previewRestore}\n >\n Continue\n </lukso-button>\n </div>\n `\n }\n\n private renderPreviewStep() {\n return html`\n <p class=\"mb-6 text-neutral-40 dark:text-neutral-50 paragraph-inter-16-regular\">\n ${\n this.controllers.length > 0\n ? `Found ${this.controllers.length} controller${this.controllers.length === 1 ? '' : 's'} in backup.`\n : 'No controllers found in backup.'\n }\n </p>\n\n ${\n this.controllers.length > 0\n ? html`\n <div class=\"mb-6\">\n <div class=\"mb-3 text-neutral-20 dark:text-neutral-90 paragraph-inter-14-semi-bold\">\n Controllers:\n </div>\n ${this.controllers.map(\n (controller) => html`\n <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\">\n <div class=\"flex items-center justify-between\">\n <div class=\"text-neutral-40 paragraph-inter-13-regular font-mono\">\n ${this.truncateAddress(controller.address)}\n </div>\n <div\n class=\"px-2 py-0.5 rounded text-xs font-semibold ${\n controller.status === 'new'\n ? 'bg-green-95 dark:bg-green-95/10 text-green-55 border border-green-55/30'\n : 'bg-neutral-90 dark:bg-neutral-70 text-neutral-50 border border-neutral-80 dark:border-neutral-60'\n }\"\n >\n ${controller.status === 'new' ? 'NEW' : 'EXISTS'}\n </div>\n </div>\n <div class=\"text-neutral-60 paragraph-inter-12-regular mt-1\">\n ${controller.address}\n </div>\n </div>\n `\n )}\n </div>\n `\n : nothing\n }\n\n ${\n this.validationWarnings.length > 0\n ? html`\n <div class=\"mb-4\">\n ${this.validationWarnings.map(\n (warning) => html`\n <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\">\n <span class=\"text-yellow-55 dark:text-yellow-55 text-lg leading-none\">⚠️</span>\n <span class=\"text-yellow-55 dark:text-yellow-55 paragraph-inter-13-regular flex-1\">${warning}</span>\n </div>\n `\n )}\n </div>\n `\n : nothing\n }\n\n <div class=\"flex justify-between gap-3 mt-6\">\n <div class=\"flex gap-3\">\n <lukso-button variant=\"text\" @click=${this.close}>\n Cancel\n </lukso-button>\n <lukso-button variant=\"secondary\" @click=${this.goBackFromPreview}>\n Back\n </lukso-button>\n </div>\n <lukso-button\n variant=\"primary\"\n @click=${this.confirmRestore}\n >\n Confirm Restore\n </lukso-button>\n </div>\n `\n }\n\n private renderSuccessStep() {\n return html`\n <!-- Success header with icon -->\n <div class=\"text-center mb-6\">\n <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\">\n <span class=\"text-2xl text-green-55\">✅</span>\n </div>\n <h3 class=\"text-neutral-20 dark:text-white heading-inter-18-semi-bold mb-2\">\n Wallet Restored Successfully!\n </h3>\n <p class=\"text-neutral-40 dark:text-neutral-50 paragraph-inter-14-regular\">\n ${\n this.restoredAddresses.length > 0\n ? `Imported ${this.restoredAddresses.length} address${this.restoredAddresses.length > 1 ? 'es' : ''} to your wallet.`\n : 'Your wallet has been restored successfully.'\n }\n </p>\n </div>\n \n <!-- Restored addresses -->\n ${\n this.restoredAddresses.length > 0\n ? html`\n <div class=\"mb-6\">\n <div class=\"mb-3 text-neutral-20 dark:text-neutral-90 paragraph-inter-14-semi-bold\">\n Restored Addresses:\n </div>\n ${this.restoredAddresses.map(\n (address: string) => html`\n <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\">\n <span class=\"text-green-60 dark:text-green-45 text-sm\">✓</span>\n <span class=\"text-neutral-20 dark:text-white paragraph-inter-13-regular font-mono flex-1\">${this.truncateAddress(address)}</span>\n </div>\n `\n )}\n </div>\n `\n : ''\n }\n\n <!-- Action buttons for success -->\n <div class=\"flex justify-center mt-6\">\n <lukso-button variant=\"primary\" @click=${this.close}>\n OK\n </lukso-button>\n </div>\n `\n }\n\n private getStepTitle(): string {\n switch (this.currentStep) {\n case Step.UPLOAD:\n return 'Restore Wallet'\n case Step.PASSWORD:\n return 'Enter Password'\n case Step.PREVIEW:\n return 'Review Changes'\n case Step.SUCCESS:\n return 'Restore Complete'\n default:\n return 'Restore Wallet'\n }\n }\n\n private triggerFileInput() {\n const input = this.shadowRoot?.querySelector(\n 'input[type=\"file\"]'\n ) as HTMLInputElement\n if (input) {\n input.click()\n }\n }\n\n private async handleFileSelect(e: Event) {\n const input = e.target as HTMLInputElement\n const file = input.files?.[0]\n if (file) {\n await this.handleFile(file)\n }\n }\n\n private handleDragOver(e: DragEvent) {\n e.preventDefault()\n this.isDragging = true\n }\n\n private handleDragLeave() {\n this.isDragging = false\n }\n\n private async handleDrop(e: DragEvent) {\n e.preventDefault()\n this.isDragging = false\n\n const file = e.dataTransfer?.files?.[0]\n if (file) {\n await this.handleFile(file)\n }\n }\n\n private async handleFile(file: File) {\n this.fileError = null\n\n if (!file.name.endsWith('.json')) {\n this.fileError = 'Please select a valid JSON backup file'\n return\n }\n\n try {\n // Use passkey-auth readBackupFile function\n const backup = await readBackupFile(file)\n\n this.selectedFile = file\n this.backupData = backup\n\n // Check if encrypted (handle both current and legacy formats)\n const isEncrypted = backup.encryptedSecrets // Legacy: always encrypted if encryptedSecrets exists\n ? true\n : backup.secrets?.encrypted // Current: check encrypted flag\n\n if (isEncrypted) {\n this.currentStep = Step.PASSWORD\n } else {\n // Unencrypted backup - preview directly\n await this.previewRestore()\n }\n } catch (error) {\n this.fileError =\n error instanceof Error ? error.message : 'Failed to read backup file'\n console.error('Failed to read backup file:', error)\n }\n }\n\n private async previewRestore() {\n if (!this.backupData) return\n\n this.isRestoring = true\n this.passwordErrors = []\n\n try {\n // First, we need to decrypt the backup if it's encrypted\n let decryptedBackup = this.backupData\n\n if (\n this.backupData.encryptedSecrets ||\n this.backupData.secrets?.encrypted\n ) {\n // PREVIEW ONLY: Use verify to check password and get preview data (don't actually import yet)\n if (!this.keyGenerator) {\n throw new Error('KeyGenerator not available')\n }\n\n // Use verifyBackup for preview - this validates password and returns public data only\n const verifiedBackup = await this.keyGenerator.verifyBackup(\n this.backupData,\n this.password\n )\n\n // Use the verified backup data (which has filtered public data)\n decryptedBackup = verifiedBackup\n } else {\n // Unencrypted - use data directly for preview (no import needed)\n decryptedBackup = this.backupData\n }\n\n // Extract all controller addresses from the backup\n const backupControllers = new Set<string>()\n\n // Get addresses from the secrets (the actual private keys we're restoring)\n const secretsData = (decryptedBackup.secrets?.data as any[]) || []\n for (const secret of secretsData) {\n if (secret.address) {\n backupControllers.add(secret.address.toLowerCase())\n }\n }\n\n // Also get controllers from account metadata (V2 format with networks)\n for (const account of decryptedBackup.accounts || []) {\n // V2 format: accounts have networks array with controllers\n if (account.networks) {\n for (const network of account.networks) {\n for (const controller of network.controllers || []) {\n if (controller.address) {\n backupControllers.add(controller.address.toLowerCase())\n }\n }\n }\n }\n }\n\n // Also get controllers from LSP23CrossChainDeployment if present\n const lsp23Deployments =\n (decryptedBackup as any).LSP23CrossChainDeployment || []\n for (const deployment of lsp23Deployments) {\n for (const controller of deployment.initialControllers || []) {\n if (controller.address) {\n backupControllers.add(controller.address.toLowerCase())\n }\n }\n }\n\n console.log(\n '🔍 [RestoreModal] Found controller addresses:',\n Array.from(backupControllers)\n )\n\n // Extract addresses from the decrypted backup for preview\n for (const secret of secretsData) {\n if (secret.address) {\n backupControllers.add(secret.address.toLowerCase())\n }\n }\n\n // For now, mark all addresses as 'new' - could enhance this later\n this.controllers = Array.from(backupControllers).map((address) => ({\n address,\n status: 'new' as const,\n }))\n\n this.currentStep = Step.PREVIEW\n } catch (error) {\n console.error('Failed to preview restore:', error)\n const errorMessage =\n error instanceof Error ? error.message : 'Failed to preview restore'\n\n // Check for password-specific errors\n if (errorMessage.toLowerCase().includes('password')) {\n this.passwordErrors = ['Incorrect password. Please try again.']\n } else {\n // For non-password errors, set as file error to show in upload step\n this.fileError = errorMessage\n this.currentStep = Step.UPLOAD\n // Clear the file selection so user can try again\n this.selectedFile = null\n this.backupData = null\n // Clear the file input\n const input = this.shadowRoot?.querySelector(\n 'input[type=\"file\"]'\n ) as HTMLInputElement\n if (input) {\n input.value = ''\n }\n }\n } finally {\n this.isRestoring = false\n }\n }\n\n private async confirmRestore() {\n if (!this.backupData || !this.keyGenerator) {\n console.error(\n '❌ [RestoreModal] Missing backup data or keyGenerator for restore'\n )\n this.dispatchEvent(\n new CustomEvent('error', {\n detail: { error: 'Missing backup data or keyGenerator' },\n bubbles: true,\n composed: true,\n })\n )\n return\n }\n\n try {\n this.isRestoring = true\n console.log('🔄 [RestoreModal] Starting secure restoration process...')\n\n // ✅ SECURE: Use keyGenerator.restoreFromBackup internally\n const result = await this.keyGenerator.restoreFromBackup(\n this.backupData,\n this.password\n )\n\n if (result.success) {\n console.log('✅ [RestoreModal] Restore successful:', result.addresses)\n\n // Store restored addresses for display on success screen\n this.restoredAddresses = result.addresses\n\n // Emit success event (only public addresses, no sensitive data)\n this.dispatchEvent(\n new CustomEvent('success', {\n detail: { addresses: result.addresses },\n bubbles: true,\n composed: true,\n })\n )\n\n // Move to success step\n this.currentStep = Step.SUCCESS\n } else {\n console.error('❌ [RestoreModal] Restore failed')\n this.dispatchEvent(\n new CustomEvent('error', {\n detail: {\n error:\n 'Restore failed. Please check the backup file and password.',\n },\n bubbles: true,\n composed: true,\n })\n )\n }\n } catch (error) {\n console.error('❌ [RestoreModal] Restore error:', error)\n const errorMessage =\n error instanceof Error ? error.message : 'Unknown error'\n\n this.dispatchEvent(\n new CustomEvent('error', {\n detail: { error: errorMessage },\n bubbles: true,\n composed: true,\n })\n )\n } finally {\n this.isRestoring = false\n }\n }\n\n private goBack() {\n if (this.currentStep === Step.PASSWORD) {\n this.currentStep = Step.UPLOAD\n this.password = ''\n this.passwordErrors = []\n }\n }\n\n private goBackFromPreview() {\n // Go back to password step (or upload if unencrypted)\n const isEncrypted = this.backupData?.encryptedSecrets\n ? true\n : this.backupData?.secrets?.encrypted\n\n if (isEncrypted) {\n this.currentStep = Step.PASSWORD\n } else {\n this.currentStep = Step.UPLOAD\n }\n // Clear preview data\n this.controllers = []\n this.validationWarnings = []\n }\n\n private close() {\n this.isOpen = false\n this.dispatchEvent(\n new CustomEvent('close', { bubbles: true, composed: true })\n )\n\n // Reset state after animation\n setTimeout(() => {\n this.currentStep = Step.UPLOAD\n this.selectedFile = null\n this.backupData = null\n this.fileError = null\n this.isDragging = false\n this.password = ''\n this.passwordErrors = []\n this.isRestoring = false\n this.walletData = null\n this.restoredAddresses = []\n this.controllers = []\n this.validationWarnings = []\n }, 300)\n }\n\n private truncateAddress(address: string): string {\n if (!address || address.length < 10) return address\n return `${address.slice(0, 6)}...${address.slice(-4)}`\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'restore-modal': RestoreModal\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/service-auth-simple/service-auth-simple/packages/up-connector/dist/chunk-UJDGQG6P.cjs","../src/account-modal.ts"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACAA,6DAAkC;AAClC,0BAAqB;AACrB,iDAAyB;AAIzB,6DAAO;AACP,8DAAO;AAGA,IAAM,aAAA,EAAN,MAAA,QAA2B,iCAAe;AAAA,EAA1C,WAAA,CAAA,EAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA;AAEuC,IAAA,IAAA,CAAA,KAAA,EAAO,KAAA;AACvB,IAAA,IAAA,CAAA,MAAA,EAAmC,MAAA;AACnC,IAAA,IAAA,CAAA,QAAA,EAAU,EAAA;AAEV,IAAA,IAAA,CAAA,cAAA,EAAgB,EAAA;AAAA,EAAA;AAAA,EAEpC,KAAA,CAAA,EAAQ;AACd,IAAA,IAAA,CAAK,KAAA,EAAO,KAAA;AACZ,IAAA,IAAA,CAAK,aAAA,CAAc,IAAI,WAAA,CAAY,OAAO,CAAC,CAAA;AAAA,EAC7C;AAAA,EAEQ,gBAAA,CAAA,EAAmB;AACzB,IAAA,IAAA,CAAK,aAAA,CAAc,IAAI,WAAA,CAAY,YAAY,CAAC,CAAA;AAChD,IAAA,IAAA,CAAK,KAAA,CAAM,CAAA;AAAA,EACb;AAAA,EAEQ,YAAA,CAAA,EAAuB;AAC7B,IAAA,OAAA,CAAQ,IAAA,CAAK,OAAA,EAAS;AAAA,MACpB,KAAK,EAAA;AACH,QAAA,OAAO,eAAA;AAAA,MACT,KAAK,IAAA;AACH,QAAA,OAAO,eAAA;AAAA,MACT,OAAA;AACE,QAAA,OAAO,IAAA,CAAK,QAAA,EAAU,CAAA,MAAA,EAAS,IAAA,CAAK,OAAO,CAAA,EAAA;AAC/C,IAAA;AACF,EAAA;AAES,EAAA;AACA,IAAA;AAAA;AAEiB,iBAAA;AAAA;AAEW,2BAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAON,qBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2CL,cAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaS,gBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWY,gBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASP,mBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA;AAOxC,EAAA;AACF;AA3H8C;AAAF,EAAA;AAAE;AAChB;AAAF,EAAA;AAAE;AACA;AAAF,EAAA;AAAE;AACA;AAAF,EAAA;AAAE;AACA;AAAF,EAAA;AAAE;AANvB;AAD2B,EAAA;AACrB;ADyIuC;AACA;AACA;AACA","file":"/home/runner/work/service-auth-simple/service-auth-simple/packages/up-connector/dist/chunk-UJDGQG6P.cjs","sourcesContent":[null,"/**\n * Account Modal - Lit Component\n *\n * Framework-agnostic account management modal showing connected wallet details.\n * Uses lukso-modal from @lukso/web-components for consistent UI.\n */\n\nimport { safeCustomElement } from '@lukso/transaction-view-core/shared'\nimport { html } from 'lit'\nimport { property } from 'lit/decorators.js'\nimport { CoreLitElement } from './styles'\n\n// Import lukso web components\nimport '@lukso/web-components/dist/components/lukso-modal'\nimport '@lukso/web-components/dist/components/lukso-button'\n\n@safeCustomElement('account-modal')\nexport class AccountModal extends CoreLitElement {\n // Public properties\n @property({ type: Boolean, reflect: true }) open = false\n @property({ type: String }) theme: 'light' | 'dark' | 'auto' = 'auto'\n @property({ type: String }) address = ''\n @property({ type: Number }) chainId?: number\n @property({ type: String }) connectorName = ''\n\n private close() {\n this.open = false\n this.dispatchEvent(new CustomEvent('close'))\n }\n\n private handleDisconnect() {\n this.dispatchEvent(new CustomEvent('disconnect'))\n this.close()\n }\n\n private getChainName(): string {\n switch (this.chainId) {\n case 42:\n return 'LUKSO Mainnet'\n case 4201:\n return 'LUKSO Testnet'\n default:\n return this.chainId ? `Chain ${this.chainId}` : 'Unknown Network'\n }\n }\n\n render() {\n return html`\n <lukso-modal\n ?is-open=${this.open}\n size=\"small\"\n @on-backdrop-click=${this.close}\n >\n <div class=\"p-6\">\n <!-- Header with close button -->\n <div class=\"flex justify-between items-center mb-6\">\n <h2 class=\"text-xl font-semibold\">Connected Account</h2>\n <button\n @click=${this.close}\n class=\"text-neutral-50 hover:text-neutral-20 transition-colors\"\n aria-label=\"Close\"\n >\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n </div>\n\n <!-- Connection Status -->\n <div class=\"flex items-center gap-2 mb-5\">\n <div\n class=\"w-2 h-2 rounded-full\"\n style=\"background: #10b981;\"\n ></div>\n <span class=\"text-sm font-semibold\" style=\"color: #10b981;\">\n Connected\n </span>\n </div>\n\n <!-- Address -->\n <div\n class=\"mb-4 p-3 rounded-lg bg-neutral-98 border border-neutral-90\"\n >\n <div\n class=\"text-xs font-semibold text-neutral-50 mb-1.5 uppercase\"\n >\n Address\n </div>\n <div\n class=\"text-xs font-mono text-neutral-20 break-all leading-relaxed\"\n >\n ${this.address}\n </div>\n </div>\n\n <!-- Network & Connector Info -->\n <div class=\"grid grid-cols-2 gap-3 mb-5\">\n <div class=\"p-3 rounded-lg bg-neutral-98 border border-neutral-90\">\n <div\n class=\"text-xs font-semibold text-neutral-50 mb-1.5 uppercase\"\n >\n Network\n </div>\n <div class=\"text-sm font-semibold text-neutral-20\">\n ${this.getChainName()}\n </div>\n </div>\n\n <div class=\"p-3 rounded-lg bg-neutral-98 border border-neutral-90\">\n <div\n class=\"text-xs font-semibold text-neutral-50 mb-1.5 uppercase\"\n >\n Connector\n </div>\n <div class=\"text-sm font-semibold text-neutral-20\">\n ${this.connectorName || 'Unknown'}\n </div>\n </div>\n </div>\n\n <!-- Disconnect Button -->\n <lukso-button\n variant=\"danger\"\n is-full-width\n @click=${this.handleDisconnect}\n >\n Disconnect\n </lukso-button>\n </div>\n </lukso-modal>\n `\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/service-auth-simple/service-auth-simple/packages/up-connector/dist/chunk-XCX7QWLC.cjs","../src/backup-modal.ts"],"names":[],"mappings":"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","file":"/home/runner/work/service-auth-simple/service-auth-simple/packages/up-connector/dist/chunk-XCX7QWLC.cjs","sourcesContent":[null,"/**\n * Backup Modal - Lit Component\n *\n * Framework-agnostic backup modal for wallet data export.\n * Uses lukso-modal from @lukso/web-components for consistent UI.\n */\n\nimport type { BackupFile } from '@lukso/passkey-auth'\nimport { downloadBackup } from '@lukso/passkey-auth'\nimport { safeCustomElement } from '@lukso/transaction-view-core/shared'\nimport { html, nothing } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport zxcvbn from 'zxcvbn'\nimport { CoreLitElement } from './styles'\n\n// Import lukso web components\nimport '@lukso/web-components/dist/components/lukso-modal'\nimport '@lukso/web-components/dist/components/lukso-button'\nimport '@lukso/web-components/dist/components/lukso-input'\n\nenum Step {\n CHOICE = 1,\n PASSWORD = 2,\n DOWNLOAD = 3,\n}\n\ninterface PasswordStrength {\n level: string\n label: string\n color: string\n bgColor: string\n width: number\n feedback: string\n crackTime: string | number\n}\n\n@safeCustomElement('backup-modal')\nexport class BackupModal extends CoreLitElement {\n // Public properties\n @property({ type: Boolean, reflect: true }) open = false\n @property({ type: String }) theme: 'light' | 'dark' | 'auto' = 'auto'\n\n // Private state - wizard flow\n @state() private currentStep: Step = Step.CHOICE\n @state() private useEncryption = true\n @state() private password = ''\n @state() private passwordConfirm = ''\n @state() private passwordErrors: string[] = []\n @state() private isCreatingBackup = false\n @state() private generatedBackup: BackupFile | null = null\n\n /**\n * Public method for parent to set backup result\n * Called after parent handles the 'create' event\n */\n public setBackupResult(\n backupFile: BackupFile | null,\n options?: {\n error?: string\n }\n ) {\n this.isCreatingBackup = false\n\n if (options?.error) {\n this.passwordErrors = [options.error]\n this.generatedBackup = null\n } else if (backupFile) {\n this.generatedBackup = backupFile\n this.currentStep = Step.DOWNLOAD\n }\n }\n\n render() {\n return html`\n <lukso-modal\n ?is-open=${this.open}\n size=\"medium\"\n @on-backdrop-click=${this.close}\n >\n <div class=\"p-6\">\n <!-- Header -->\n <h2 class=\"m-0 mb-6 text-neutral-20 dark:text-white heading-inter-21-semi-bold\">\n ${this.getStepTitle()}\n </h2>\n\n <!-- Step content -->\n ${this.renderStep()}\n </div>\n </lukso-modal>\n `\n }\n\n private renderStep() {\n switch (this.currentStep) {\n case Step.CHOICE:\n return this.renderChoiceStep()\n case Step.PASSWORD:\n return this.renderPasswordStep()\n case Step.DOWNLOAD:\n return this.renderDownloadStep()\n default:\n return nothing\n }\n }\n\n private renderChoiceStep() {\n return html`\n <div class=\"flex flex-col gap-3 mb-6\">\n <!-- Encrypted option (recommended) -->\n <div\n class=\"border-2 border-neutral-90 dark:border-neutral-70 rounded-lg p-4 cursor-pointer transition-all hover:border-neutral-60 dark:hover:border-neutral-60\"\n @click=${() => this.selectBackupType(true)}\n >\n <div class=\"flex items-center gap-3 mb-2\">\n <span class=\"text-neutral-10 dark:text-white heading-inter-16-semi-bold flex-1\">\n Encrypt backup file\n </span>\n <span class=\"text-xs text-neutral-50 dark:text-neutral-60 uppercase tracking-wide\">\n Recommended\n </span>\n </div>\n <p class=\"m-0 text-neutral-40 dark:text-neutral-50 paragraph-inter-14-regular\">\n Uses password-based encryption to protect the secrets in this file.\n </p>\n </div>\n\n <!-- Unencrypted option -->\n <div\n class=\"border-2 border-neutral-90 dark:border-neutral-70 rounded-lg p-4 cursor-pointer transition-all hover:border-neutral-60 dark:hover:border-neutral-60\"\n @click=${() => this.selectBackupType(false)}\n >\n <div class=\"flex items-center gap-3 mb-2\">\n <span class=\"text-neutral-10 dark:text-white heading-inter-16-semi-bold flex-1\">\n Plain text backup\n </span>\n <span class=\"text-xs text-neutral-50 dark:text-neutral-60 uppercase tracking-wide\">\n For development only\n </span>\n </div>\n <p class=\"m-0 text-neutral-40 dark:text-neutral-50 paragraph-inter-14-regular\">\n Secrets will be stored in plain text.\n </p>\n </div>\n </div>\n\n <div class=\"flex justify-between gap-3\">\n <lukso-button variant=\"text\" @click=${this.close}>\n Cancel\n </lukso-button>\n </div>\n `\n }\n\n private renderPasswordStep() {\n const passwordStrength = this.password\n ? this.calculatePasswordStrength()\n : null\n const passwordsMatch =\n this.password &&\n this.passwordConfirm &&\n this.password === this.passwordConfirm\n const canProceed = this.password && this.passwordConfirm && passwordsMatch\n\n return html`\n <p class=\"mb-6 text-neutral-40 dark:text-neutral-50 paragraph-inter-16-regular\">\n Choose a strong password to encrypt your backup. You'll need this password to restore your wallet.\n </p>\n\n <div class=\"space-y-4\">\n <lukso-input\n type=\"password\"\n label=\"Password\"\n placeholder=\"Enter a strong password\"\n .value=${this.password}\n @on-input=${(e: CustomEvent) => {\n this.password = e.detail.value\n }}\n is-full-width\n autofocus\n ></lukso-input>\n\n ${this.passwordErrors.map(\n (error) => html`\n <div class=\"mt-1 text-red-55 paragraph-inter-13-regular\">${error}</div>\n `\n )}\n\n ${\n passwordStrength\n ? html`\n <div class=\"mt-3\">\n <div class=\"flex items-center justify-between mb-1\">\n <span class=\"paragraph-inter-13-regular text-neutral-40\">Password strength:</span>\n <span class=\"paragraph-inter-13-semi-bold ${passwordStrength.color}\">${passwordStrength.label}</span>\n </div>\n <div class=\"h-1.5 bg-neutral-90 dark:bg-neutral-70 rounded-full overflow-hidden\">\n <div\n class=\"h-full ${passwordStrength.bgColor} transition-all duration-300\"\n style=\"width: ${passwordStrength.width}%\"\n ></div>\n </div>\n <p class=\"mt-1 mb-0 text-neutral-40 paragraph-inter-12-regular\">\n Time to crack: ${passwordStrength.crackTime}\n </p>\n ${\n passwordStrength.feedback\n ? html`\n <p class=\"mt-2 mb-0 text-neutral-40 paragraph-inter-12-regular\">${passwordStrength.feedback}</p>\n `\n : nothing\n }\n </div>\n `\n : nothing\n }\n\n <lukso-input\n type=\"password\"\n label=\"Confirm Password\"\n placeholder=\"Re-enter your password\"\n .value=${this.passwordConfirm}\n @on-input=${(e: CustomEvent) => {\n this.passwordConfirm = e.detail.value\n }}\n is-full-width\n ></lukso-input>\n\n ${\n this.passwordConfirm\n ? html`\n <div class=\"flex items-center justify-between mt-2\">\n <span class=\"paragraph-inter-13-regular text-neutral-40\">Passwords match:</span>\n <span class=\"paragraph-inter-13-semi-bold ${passwordsMatch ? 'text-green-54' : 'text-red-55'}\">\n ${passwordsMatch ? 'Yes' : 'No'}\n </span>\n </div>\n `\n : nothing\n }\n </div>\n\n <div class=\"flex justify-between gap-3 mt-6\">\n <div class=\"flex gap-3\">\n <lukso-button variant=\"text\" @click=${this.close}>\n Cancel\n </lukso-button>\n <lukso-button variant=\"secondary\" @click=${this.goBack}>\n Back\n </lukso-button>\n </div>\n <lukso-button\n variant=\"primary\"\n ?disabled=${!canProceed || this.isCreatingBackup}\n ?is-loading=${this.isCreatingBackup}\n @click=${this.createBackup}\n >\n Create Backup\n </lukso-button>\n </div>\n `\n }\n\n private renderDownloadStep() {\n return html`\n <p class=\"mb-6 text-neutral-40 dark:text-neutral-50 paragraph-inter-16-regular\">\n Your backup has been created${this.useEncryption ? ' and encrypted' : ''}. Download it and keep it in a safe place.\n </p>\n\n ${\n !this.useEncryption\n ? html`\n <p class=\"mb-6 text-neutral-40 dark:text-neutral-50 paragraph-inter-14-regular\">\n This unencrypted backup is intended for development purposes. Use it when creating dapps that need access to the profile for testing.\n </p>\n `\n : nothing\n }\n\n <div class=\"flex justify-end gap-3\">\n <lukso-button variant=\"primary\" @click=${this.handleDownload}>\n Download Backup\n </lukso-button>\n </div>\n `\n }\n\n private getStepTitle(): string {\n switch (this.currentStep) {\n case Step.CHOICE:\n return 'Backup Wallet'\n case Step.PASSWORD:\n return 'Set Password'\n case Step.DOWNLOAD:\n return 'Download Backup'\n default:\n return 'Backup Wallet'\n }\n }\n\n private selectBackupType(encrypted: boolean) {\n this.useEncryption = encrypted\n if (encrypted) {\n this.currentStep = Step.PASSWORD\n } else {\n // Unencrypted backup - create immediately\n this.createBackup()\n }\n }\n\n private async createBackup() {\n this.isCreatingBackup = true\n this.passwordErrors = []\n\n // Emit create event with password (if encrypted)\n // Parent should handle backup creation\n const createEvent = new CustomEvent('create', {\n detail: {\n password: this.useEncryption ? this.password : undefined,\n encrypted: this.useEncryption,\n },\n bubbles: true,\n composed: true,\n cancelable: true,\n })\n\n this.dispatchEvent(createEvent)\n\n // If parent didn't prevent default, show error\n if (!createEvent.defaultPrevented) {\n this.passwordErrors = [\n 'No backup handler configured. Please handle the \"create\" event.',\n ]\n this.isCreatingBackup = false\n }\n // Otherwise, parent will call setBackupResult()\n }\n\n private handleDownload() {\n if (this.generatedBackup) {\n downloadBackup(this.generatedBackup)\n\n // Dispatch download event\n this.dispatchEvent(\n new CustomEvent('download', {\n detail: this.generatedBackup,\n bubbles: true,\n composed: true,\n })\n )\n\n // Close modal after download\n setTimeout(() => {\n this.close()\n }, 100)\n }\n }\n\n private goBack() {\n if (this.currentStep === Step.PASSWORD) {\n this.currentStep = Step.CHOICE\n this.password = ''\n this.passwordConfirm = ''\n this.passwordErrors = []\n }\n }\n\n private close() {\n this.open = false\n this.dispatchEvent(\n new CustomEvent('close', { bubbles: true, composed: true })\n )\n\n // Reset state after animation\n setTimeout(() => {\n this.currentStep = Step.CHOICE\n this.useEncryption = true\n this.password = ''\n this.passwordConfirm = ''\n this.passwordErrors = []\n this.isCreatingBackup = false\n this.generatedBackup = null\n }, 300)\n }\n\n private calculatePasswordStrength(): PasswordStrength {\n const result = zxcvbn(this.password)\n\n const strengthMap = [\n {\n level: 'very-weak',\n label: 'Very Weak',\n color: 'text-red-55',\n bgColor: 'bg-red-55',\n width: 20,\n },\n {\n level: 'weak',\n label: 'Weak',\n color: 'text-red-65',\n bgColor: 'bg-red-65',\n width: 40,\n },\n {\n level: 'fair',\n label: 'Fair',\n color: 'text-yellow-55',\n bgColor: 'bg-yellow-55',\n width: 60,\n },\n {\n level: 'good',\n label: 'Good',\n color: 'text-green-54',\n bgColor: 'bg-green-54',\n width: 80,\n },\n {\n level: 'strong',\n label: 'Strong',\n color: 'text-green-45',\n bgColor: 'bg-green-45',\n width: 100,\n },\n ]\n\n const strength = strengthMap[result.score]\n const feedback =\n result.feedback.suggestions.join(' ') || result.feedback.warning || ''\n const crackTime =\n result.crack_times_display.offline_slow_hashing_1e4_per_second\n\n return {\n ...strength,\n feedback,\n crackTime,\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'backup-modal': BackupModal\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/restore-modal.ts"],"sourcesContent":["/**\n * Restore Modal - Lit Component\n *\n * Framework-agnostic restore modal for wallet data import.\n * Uses lukso-modal from @lukso/web-components for consistent UI.\n */\n\nimport type {\n BackupFile,\n PasskeyAuthProvider,\n WalletData,\n} from '@lukso/passkey-auth'\nimport { readBackupFile } from '@lukso/passkey-auth'\nimport { safeCustomElement } from '@lukso/transaction-view-core/shared'\nimport { html, nothing } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport { CoreLitElement } from './styles'\n\n// Import lukso web components\nimport '@lukso/web-components/dist/components/lukso-modal'\nimport '@lukso/web-components/dist/components/lukso-button'\nimport '@lukso/web-components/dist/components/lukso-input'\n\nenum Step {\n UPLOAD = 1,\n PASSWORD = 2,\n PREVIEW = 3,\n SUCCESS = 4,\n}\n\n@safeCustomElement('restore-modal')\nexport class RestoreModal extends CoreLitElement {\n // Public properties\n @property({ type: Boolean, reflect: true }) isOpen = false\n @property({ type: String }) theme: 'light' | 'dark' | 'auto' = 'auto'\n @property({ type: Object }) keyGenerator: PasskeyAuthProvider | null = null\n\n // Private state\n @state() private currentStep: Step = Step.UPLOAD\n @state() private selectedFile: File | null = null\n @state() private backupData: BackupFile | null = null\n @state() private fileError: string | null = null\n @state() private isDragging = false\n @state() private password = ''\n @state() private passwordErrors: string[] = []\n @state() private isRestoring = false\n @state() private validationWarnings: string[] = []\n @state() private controllers: Array<{\n address: string\n status: 'new' | 'existing'\n }> = []\n @state() private restoredAddresses: string[] = []\n validationInfo: string[] = []\n walletData: WalletData | null = null\n\n /**\n * Public method for parent to set preview result\n * Called after parent handles the 'preview' event\n */\n public setPreviewResult(options: {\n controllers: Array<{ address: string; status: 'new' | 'existing' }>\n warnings?: string[]\n }) {\n this.controllers = options.controllers\n this.validationWarnings = options.warnings || []\n }\n\n /**\n * Public method for parent to set validation result\n * Called after parent handles the 'validate' event\n */\n public setValidationResult(\n walletData: WalletData | null,\n options?: {\n error?: string\n warnings?: string[]\n info?: string[]\n }\n ) {\n this.isRestoring = false\n\n if (options?.error) {\n this.passwordErrors = [options.error]\n this.validationWarnings = []\n this.validationInfo = []\n } else if (walletData) {\n this.walletData = walletData\n this.validationWarnings = options?.warnings || []\n this.validationInfo = options?.info || []\n this.currentStep = Step.SUCCESS\n }\n }\n\n render() {\n return html`\n <lukso-modal\n ?is-open=${this.isOpen}\n size=\"medium\"\n @on-backdrop-click=${this.close}\n >\n <div class=\"p-6\">\n <!-- Header -->\n <h2 class=\"m-0 mb-6 text-neutral-20 dark:text-white heading-inter-21-semi-bold\">\n ${this.getStepTitle()}\n </h2>\n\n <!-- Step content -->\n ${this.renderStep()}\n </div>\n </lukso-modal>\n `\n }\n\n private renderStep() {\n switch (this.currentStep) {\n case Step.UPLOAD:\n return this.renderUploadStep()\n case Step.PASSWORD:\n return this.renderPasswordStep()\n case Step.PREVIEW:\n return this.renderPreviewStep()\n case Step.SUCCESS:\n return this.renderSuccessStep()\n default:\n return nothing\n }\n }\n\n private renderUploadStep() {\n return html`\n <p class=\"mb-6 text-neutral-40 dark:text-neutral-50 paragraph-inter-16-regular\">\n Select your backup file to restore your wallet data. Your backup file stays on your device and is never uploaded.\n </p>\n\n <div\n class=\"border-2 border-dashed rounded-xl p-10 text-center bg-neutral-95 dark:bg-neutral-80 transition-all cursor-pointer my-6 ${\n this.isDragging\n ? 'border-blue-60 bg-blue-95 dark:bg-blue-95/10'\n : this.fileError\n ? 'border-red-55 bg-red-95'\n : 'border-neutral-90 dark:border-neutral-70'\n }\"\n @drop=${this.handleDrop}\n @dragover=${this.handleDragOver}\n @dragleave=${this.handleDragLeave}\n @click=${this.triggerFileInput}\n >\n <div class=\"flex flex-col items-center gap-3\">\n <p class=\"m-0 text-neutral-10 dark:text-white heading-inter-16-semi-bold\">\n Drag and drop your backup file here\n </p>\n <p class=\"m-0 text-neutral-40 paragraph-inter-14-regular\">or</p>\n <lukso-button\n variant=\"primary\"\n @click=${(e: Event) => {\n e.stopPropagation()\n this.triggerFileInput()\n }}\n >\n Choose File\n </lukso-button>\n ${\n this.selectedFile\n ? html`\n <p class=\"mt-2 mb-0 text-green-54 paragraph-inter-14-semi-bold\">\n ${this.selectedFile.name}\n </p>\n `\n : nothing\n }\n ${\n this.fileError\n ? html`\n <p class=\"mt-2 mb-0 text-red-55 paragraph-inter-14-semi-bold\">\n ${this.fileError}\n </p>\n `\n : nothing\n }\n </div>\n </div>\n\n <input\n type=\"file\"\n class=\"hidden\"\n accept=\".json\"\n @change=${this.handleFileSelect}\n />\n\n <div class=\"flex justify-end mt-6\">\n <lukso-button variant=\"text\" @click=${this.close}>\n Cancel\n </lukso-button>\n </div>\n `\n }\n\n private renderPasswordStep() {\n const canProceed = this.password && this.password.length > 0\n\n return html`\n <p class=\"mb-5 text-neutral-40 dark:text-neutral-50 paragraph-inter-14-regular\">\n This backup is encrypted. Enter the password to decrypt it.\n </p>\n\n <div>\n <lukso-input\n type=\"password\"\n label=\"Password\"\n placeholder=\"Enter decryption password\"\n .value=${this.password}\n @on-input=${(e: CustomEvent) => {\n this.password = e.detail.value\n }}\n @keyup=${(e: KeyboardEvent) => e.key === 'Enter' && canProceed && this.previewRestore()}\n is-full-width\n autofocus\n ></lukso-input>\n ${this.passwordErrors.map(\n (error) => html`\n <div class=\"mt-1 text-red-55 paragraph-inter-13-regular\">${error}</div>\n `\n )}\n </div>\n\n <div class=\"flex justify-between gap-3 mt-6\">\n <div class=\"flex gap-3\">\n <lukso-button variant=\"text\" @click=${this.close}>\n Cancel\n </lukso-button>\n <lukso-button variant=\"secondary\" @click=${this.goBack}>\n Back\n </lukso-button>\n </div>\n <lukso-button\n variant=\"primary\"\n ?disabled=${!canProceed || this.isRestoring}\n ?is-loading=${this.isRestoring}\n @click=${this.previewRestore}\n >\n Continue\n </lukso-button>\n </div>\n `\n }\n\n private renderPreviewStep() {\n return html`\n <p class=\"mb-6 text-neutral-40 dark:text-neutral-50 paragraph-inter-16-regular\">\n ${\n this.controllers.length > 0\n ? `Found ${this.controllers.length} controller${this.controllers.length === 1 ? '' : 's'} in backup.`\n : 'No controllers found in backup.'\n }\n </p>\n\n ${\n this.controllers.length > 0\n ? html`\n <div class=\"mb-6\">\n <div class=\"mb-3 text-neutral-20 dark:text-neutral-90 paragraph-inter-14-semi-bold\">\n Controllers:\n </div>\n ${this.controllers.map(\n (controller) => html`\n <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\">\n <div class=\"flex items-center justify-between\">\n <div class=\"text-neutral-40 paragraph-inter-13-regular font-mono\">\n ${this.truncateAddress(controller.address)}\n </div>\n <div\n class=\"px-2 py-0.5 rounded text-xs font-semibold ${\n controller.status === 'new'\n ? 'bg-green-95 dark:bg-green-95/10 text-green-55 border border-green-55/30'\n : 'bg-neutral-90 dark:bg-neutral-70 text-neutral-50 border border-neutral-80 dark:border-neutral-60'\n }\"\n >\n ${controller.status === 'new' ? 'NEW' : 'EXISTS'}\n </div>\n </div>\n <div class=\"text-neutral-60 paragraph-inter-12-regular mt-1\">\n ${controller.address}\n </div>\n </div>\n `\n )}\n </div>\n `\n : nothing\n }\n\n ${\n this.validationWarnings.length > 0\n ? html`\n <div class=\"mb-4\">\n ${this.validationWarnings.map(\n (warning) => html`\n <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\">\n <span class=\"text-yellow-55 dark:text-yellow-55 text-lg leading-none\">⚠️</span>\n <span class=\"text-yellow-55 dark:text-yellow-55 paragraph-inter-13-regular flex-1\">${warning}</span>\n </div>\n `\n )}\n </div>\n `\n : nothing\n }\n\n <div class=\"flex justify-between gap-3 mt-6\">\n <div class=\"flex gap-3\">\n <lukso-button variant=\"text\" @click=${this.close}>\n Cancel\n </lukso-button>\n <lukso-button variant=\"secondary\" @click=${this.goBackFromPreview}>\n Back\n </lukso-button>\n </div>\n <lukso-button\n variant=\"primary\"\n @click=${this.confirmRestore}\n >\n Confirm Restore\n </lukso-button>\n </div>\n `\n }\n\n private renderSuccessStep() {\n return html`\n <!-- Success header with icon -->\n <div class=\"text-center mb-6\">\n <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\">\n <span class=\"text-2xl text-green-55\">✅</span>\n </div>\n <h3 class=\"text-neutral-20 dark:text-white heading-inter-18-semi-bold mb-2\">\n Wallet Restored Successfully!\n </h3>\n <p class=\"text-neutral-40 dark:text-neutral-50 paragraph-inter-14-regular\">\n ${\n this.restoredAddresses.length > 0\n ? `Imported ${this.restoredAddresses.length} address${this.restoredAddresses.length > 1 ? 'es' : ''} to your wallet.`\n : 'Your wallet has been restored successfully.'\n }\n </p>\n </div>\n \n <!-- Restored addresses -->\n ${\n this.restoredAddresses.length > 0\n ? html`\n <div class=\"mb-6\">\n <div class=\"mb-3 text-neutral-20 dark:text-neutral-90 paragraph-inter-14-semi-bold\">\n Restored Addresses:\n </div>\n ${this.restoredAddresses.map(\n (address: string) => html`\n <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\">\n <span class=\"text-green-60 dark:text-green-45 text-sm\">✓</span>\n <span class=\"text-neutral-20 dark:text-white paragraph-inter-13-regular font-mono flex-1\">${this.truncateAddress(address)}</span>\n </div>\n `\n )}\n </div>\n `\n : ''\n }\n\n <!-- Action buttons for success -->\n <div class=\"flex justify-center mt-6\">\n <lukso-button variant=\"primary\" @click=${this.close}>\n OK\n </lukso-button>\n </div>\n `\n }\n\n private getStepTitle(): string {\n switch (this.currentStep) {\n case Step.UPLOAD:\n return 'Restore Wallet'\n case Step.PASSWORD:\n return 'Enter Password'\n case Step.PREVIEW:\n return 'Review Changes'\n case Step.SUCCESS:\n return 'Restore Complete'\n default:\n return 'Restore Wallet'\n }\n }\n\n private triggerFileInput() {\n const input = this.shadowRoot?.querySelector(\n 'input[type=\"file\"]'\n ) as HTMLInputElement\n if (input) {\n input.click()\n }\n }\n\n private async handleFileSelect(e: Event) {\n const input = e.target as HTMLInputElement\n const file = input.files?.[0]\n if (file) {\n await this.handleFile(file)\n }\n }\n\n private handleDragOver(e: DragEvent) {\n e.preventDefault()\n this.isDragging = true\n }\n\n private handleDragLeave() {\n this.isDragging = false\n }\n\n private async handleDrop(e: DragEvent) {\n e.preventDefault()\n this.isDragging = false\n\n const file = e.dataTransfer?.files?.[0]\n if (file) {\n await this.handleFile(file)\n }\n }\n\n private async handleFile(file: File) {\n this.fileError = null\n\n if (!file.name.endsWith('.json')) {\n this.fileError = 'Please select a valid JSON backup file'\n return\n }\n\n try {\n // Use passkey-auth readBackupFile function\n const backup = await readBackupFile(file)\n\n this.selectedFile = file\n this.backupData = backup\n\n // Check if encrypted (handle both current and legacy formats)\n const isEncrypted = backup.encryptedSecrets // Legacy: always encrypted if encryptedSecrets exists\n ? true\n : backup.secrets?.encrypted // Current: check encrypted flag\n\n if (isEncrypted) {\n this.currentStep = Step.PASSWORD\n } else {\n // Unencrypted backup - preview directly\n await this.previewRestore()\n }\n } catch (error) {\n this.fileError =\n error instanceof Error ? error.message : 'Failed to read backup file'\n console.error('Failed to read backup file:', error)\n }\n }\n\n private async previewRestore() {\n if (!this.backupData) return\n\n this.isRestoring = true\n this.passwordErrors = []\n\n try {\n // First, we need to decrypt the backup if it's encrypted\n let decryptedBackup = this.backupData\n\n if (\n this.backupData.encryptedSecrets ||\n this.backupData.secrets?.encrypted\n ) {\n // PREVIEW ONLY: Use verify to check password and get preview data (don't actually import yet)\n if (!this.keyGenerator) {\n throw new Error('KeyGenerator not available')\n }\n\n // Use verifyBackup for preview - this validates password and returns public data only\n const verifiedBackup = await this.keyGenerator.verifyBackup(\n this.backupData,\n this.password\n )\n\n // Use the verified backup data (which has filtered public data)\n decryptedBackup = verifiedBackup\n } else {\n // Unencrypted - use data directly for preview (no import needed)\n decryptedBackup = this.backupData\n }\n\n // Extract all controller addresses from the backup\n const backupControllers = new Set<string>()\n\n // Get addresses from the secrets (the actual private keys we're restoring)\n const secretsData = (decryptedBackup.secrets?.data as any[]) || []\n for (const secret of secretsData) {\n if (secret.address) {\n backupControllers.add(secret.address.toLowerCase())\n }\n }\n\n // Also get controllers from account metadata (V2 format with networks)\n for (const account of decryptedBackup.accounts || []) {\n // V2 format: accounts have networks array with controllers\n if (account.networks) {\n for (const network of account.networks) {\n for (const controller of network.controllers || []) {\n if (controller.address) {\n backupControllers.add(controller.address.toLowerCase())\n }\n }\n }\n }\n }\n\n // Also get controllers from LSP23CrossChainDeployment if present\n const lsp23Deployments =\n (decryptedBackup as any).LSP23CrossChainDeployment || []\n for (const deployment of lsp23Deployments) {\n for (const controller of deployment.initialControllers || []) {\n if (controller.address) {\n backupControllers.add(controller.address.toLowerCase())\n }\n }\n }\n\n console.log(\n '🔍 [RestoreModal] Found controller addresses:',\n Array.from(backupControllers)\n )\n\n // Extract addresses from the decrypted backup for preview\n for (const secret of secretsData) {\n if (secret.address) {\n backupControllers.add(secret.address.toLowerCase())\n }\n }\n\n // For now, mark all addresses as 'new' - could enhance this later\n this.controllers = Array.from(backupControllers).map((address) => ({\n address,\n status: 'new' as const,\n }))\n\n this.currentStep = Step.PREVIEW\n } catch (error) {\n console.error('Failed to preview restore:', error)\n const errorMessage =\n error instanceof Error ? error.message : 'Failed to preview restore'\n\n // Check for password-specific errors\n if (errorMessage.toLowerCase().includes('password')) {\n this.passwordErrors = ['Incorrect password. Please try again.']\n } else {\n // For non-password errors, set as file error to show in upload step\n this.fileError = errorMessage\n this.currentStep = Step.UPLOAD\n // Clear the file selection so user can try again\n this.selectedFile = null\n this.backupData = null\n // Clear the file input\n const input = this.shadowRoot?.querySelector(\n 'input[type=\"file\"]'\n ) as HTMLInputElement\n if (input) {\n input.value = ''\n }\n }\n } finally {\n this.isRestoring = false\n }\n }\n\n private async confirmRestore() {\n if (!this.backupData || !this.keyGenerator) {\n console.error(\n '❌ [RestoreModal] Missing backup data or keyGenerator for restore'\n )\n this.dispatchEvent(\n new CustomEvent('error', {\n detail: { error: 'Missing backup data or keyGenerator' },\n bubbles: true,\n composed: true,\n })\n )\n return\n }\n\n try {\n this.isRestoring = true\n console.log('🔄 [RestoreModal] Starting secure restoration process...')\n\n // ✅ SECURE: Use keyGenerator.restoreFromBackup internally\n const result = await this.keyGenerator.restoreFromBackup(\n this.backupData,\n this.password\n )\n\n if (result.success) {\n console.log('✅ [RestoreModal] Restore successful:', result.addresses)\n\n // Store restored addresses for display on success screen\n this.restoredAddresses = result.addresses\n\n // Emit success event (only public addresses, no sensitive data)\n this.dispatchEvent(\n new CustomEvent('success', {\n detail: { addresses: result.addresses },\n bubbles: true,\n composed: true,\n })\n )\n\n // Move to success step\n this.currentStep = Step.SUCCESS\n } else {\n console.error('❌ [RestoreModal] Restore failed')\n this.dispatchEvent(\n new CustomEvent('error', {\n detail: {\n error:\n 'Restore failed. Please check the backup file and password.',\n },\n bubbles: true,\n composed: true,\n })\n )\n }\n } catch (error) {\n console.error('❌ [RestoreModal] Restore error:', error)\n const errorMessage =\n error instanceof Error ? error.message : 'Unknown error'\n\n this.dispatchEvent(\n new CustomEvent('error', {\n detail: { error: errorMessage },\n bubbles: true,\n composed: true,\n })\n )\n } finally {\n this.isRestoring = false\n }\n }\n\n private goBack() {\n if (this.currentStep === Step.PASSWORD) {\n this.currentStep = Step.UPLOAD\n this.password = ''\n this.passwordErrors = []\n }\n }\n\n private goBackFromPreview() {\n // Go back to password step (or upload if unencrypted)\n const isEncrypted = this.backupData?.encryptedSecrets\n ? true\n : this.backupData?.secrets?.encrypted\n\n if (isEncrypted) {\n this.currentStep = Step.PASSWORD\n } else {\n this.currentStep = Step.UPLOAD\n }\n // Clear preview data\n this.controllers = []\n this.validationWarnings = []\n }\n\n private close() {\n this.isOpen = false\n this.dispatchEvent(\n new CustomEvent('close', { bubbles: true, composed: true })\n )\n\n // Reset state after animation\n setTimeout(() => {\n this.currentStep = Step.UPLOAD\n this.selectedFile = null\n this.backupData = null\n this.fileError = null\n this.isDragging = false\n this.password = ''\n this.passwordErrors = []\n this.isRestoring = false\n this.walletData = null\n this.restoredAddresses = []\n this.controllers = []\n this.validationWarnings = []\n }, 300)\n }\n\n private truncateAddress(address: string): string {\n if (!address || address.length < 10) return address\n return `${address.slice(0, 6)}...${address.slice(-4)}`\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'restore-modal': RestoreModal\n }\n}\n"],"mappings":"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","names":[]}
|