ecbc6c01d6b2a148fc465797c519cbfcb58f26990a516f55b49cede7f65bf8f9.json raw
1 {"ast":null,"code":"import _asyncToGenerator from \"/home/mleku/src/orly.dev/next/signer/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\";\nimport { inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { BrowserSyncFlow, ConfirmComponent, DateHelper, LoggerService, NavComponent, NavItemComponent, StartupService, StorageService } from '@common';\nimport { getNewStorageServiceConfig } from '../../../common/data/get-new-storage-service-config';\nimport { Buffer } from 'buffer';\nimport browser from 'webextension-polyfill';\nimport * as i0 from \"@angular/core\";\nfunction SettingsComponent_Conditional_5_Template(rf, ctx) {\n if (rf & 1) {\n const _r2 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 19);\n i0.ɵɵlistener(\"click\", function SettingsComponent_Conditional_5_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r2);\n const ctx_r2 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r2.onTestPrompt());\n });\n i0.ɵɵelementStart(1, \"span\", 4);\n i0.ɵɵtext(2, \"\\u2728\");\n i0.ɵɵelementEnd()();\n }\n}\nexport let SettingsComponent = /*#__PURE__*/(() => {\n class SettingsComponent extends NavComponent {\n #router = inject(Router);\n syncFlow;\n devMode = false;\n #storage = inject(StorageService);\n #startup = inject(StartupService);\n #logger = inject(LoggerService);\n ngOnInit() {\n const vault = JSON.stringify(this.#storage.getBrowserSyncHandler().browserSyncData);\n console.log(vault.length / 1024 + ' KB');\n switch (this.#storage.getSignerMetaHandler().signerMetaData?.syncFlow) {\n case BrowserSyncFlow.NO_SYNC:\n this.syncFlow = 'Off';\n break;\n case BrowserSyncFlow.BROWSER_SYNC:\n this.syncFlow = 'Mozilla Firefox';\n break;\n default:\n break;\n }\n // Load dev mode setting\n this.devMode = this.#storage.getSignerMetaHandler().signerMetaData?.devMode ?? false;\n }\n onToggleDevMode(event) {\n var _this = this;\n return _asyncToGenerator(function* () {\n const checked = event.target.checked;\n _this.devMode = checked;\n yield _this.#storage.getSignerMetaHandler().setDevMode(checked);\n })();\n }\n onTestPrompt() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n // Open a test permission prompt window\n const testEvent = {\n kind: 1,\n content: 'This is a test note for permission prompt preview.',\n tags: [],\n created_at: Math.floor(Date.now() / 1000)\n };\n const base64Event = Buffer.from(JSON.stringify(testEvent, null, 2)).toString('base64');\n const currentIdentity = _this2.#storage.getBrowserSessionHandler().browserSessionData?.identities.find(i => i.id === _this2.#storage.getBrowserSessionHandler().browserSessionData?.selectedIdentityId);\n const nick = currentIdentity?.nick ?? 'Test Identity';\n const width = 375;\n const height = 600;\n const left = Math.round((screen.width - width) / 2);\n const top = Math.round((screen.height - height) / 2);\n browser.windows.create({\n type: 'popup',\n url: `prompt.html?method=signEvent&host=example.com&id=test-${Date.now()}&nick=${encodeURIComponent(nick)}&event=${base64Event}`,\n width,\n height,\n left,\n top\n });\n })();\n }\n onResetExtension() {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n try {\n _this3.#logger.logVaultReset();\n yield _this3.#storage.resetExtension();\n _this3.#startup.startOver(getNewStorageServiceConfig());\n } catch (error) {\n console.log(error);\n // TODO\n }\n })();\n }\n onClickExportVault() {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n const jsonVault = _this4.#storage.exportVault();\n const dateTimeString = DateHelper.dateToISOLikeButLocal(new Date());\n const fileName = `Smesh Signer Firefox - Vault Export - ${dateTimeString}.json`;\n _this4.#downloadJson(jsonVault, fileName);\n _this4.#logger.logVaultExport(fileName);\n })();\n }\n #downloadJson(jsonString, fileName) {\n const dataStr = 'data:text/json;charset=utf-8,' + encodeURIComponent(jsonString);\n const downloadAnchorNode = document.createElement('a');\n downloadAnchorNode.setAttribute('href', dataStr);\n downloadAnchorNode.setAttribute('download', fileName);\n document.body.appendChild(downloadAnchorNode);\n downloadAnchorNode.click();\n downloadAnchorNode.remove();\n }\n onClickLock() {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n _this5.#logger.logVaultLock();\n yield _this5.#storage.lockVault();\n _this5.#router.navigateByUrl('/vault-login');\n })();\n }\n static ɵfac = /*@__PURE__*/(() => {\n let ɵSettingsComponent_BaseFactory;\n return function SettingsComponent_Factory(__ngFactoryType__) {\n return (ɵSettingsComponent_BaseFactory || (ɵSettingsComponent_BaseFactory = i0.ɵɵgetInheritedFactory(SettingsComponent)))(__ngFactoryType__ || SettingsComponent);\n };\n })();\n static ɵcmp = /*@__PURE__*/i0.ɵɵdefineComponent({\n type: SettingsComponent,\n selectors: [[\"app-settings\"]],\n features: [i0.ɵɵInheritDefinitionFeature],\n decls: 31,\n vars: 3,\n consts: [[\"confirm\", \"\"], [1, \"sam-text-header\"], [1, \"header-buttons\"], [\"title\", \"Lock\", 1, \"header-btn\", 3, \"click\"], [1, \"emoji\"], [\"title\", \"Test Permission Prompt\", 1, \"header-btn\"], [1, \"vault-buttons\"], [1, \"btn\", \"btn-primary\", 3, \"click\"], [\"text\", \"\\uD83D\\uDCBE Backups\", 3, \"click\"], [\"text\", \"\\uD83E\\uDEB5 Logs\", 3, \"click\"], [\"text\", \"\\uD83D\\uDCA1 Info\", 3, \"click\"], [1, \"dev-mode-row\"], [1, \"toggle-label\"], [\"type\", \"checkbox\", 3, \"change\", \"checked\"], [1, \"sam-flex-grow\"], [1, \"sync-info\"], [1, \"sync-label\"], [1, \"sync-note\"], [1, \"btn\", \"btn-danger\", 3, \"click\"], [\"title\", \"Test Permission Prompt\", 1, \"header-btn\", 3, \"click\"]],\n template: function SettingsComponent_Template(rf, ctx) {\n if (rf & 1) {\n const _r1 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"div\", 1)(1, \"div\", 2)(2, \"button\", 3);\n i0.ɵɵlistener(\"click\", function SettingsComponent_Template_button_click_2_listener() {\n i0.ɵɵrestoreView(_r1);\n return i0.ɵɵresetView(ctx.onClickLock());\n });\n i0.ɵɵelementStart(3, \"span\", 4);\n i0.ɵɵtext(4, \"\\uD83D\\uDD12\");\n i0.ɵɵelementEnd()();\n i0.ɵɵtemplate(5, SettingsComponent_Conditional_5_Template, 3, 0, \"button\", 5);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(6, \"span\");\n i0.ɵɵtext(7, \" Settings \");\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(8, \"div\", 6)(9, \"button\", 7);\n i0.ɵɵlistener(\"click\", function SettingsComponent_Template_button_click_9_listener() {\n i0.ɵɵrestoreView(_r1);\n return i0.ɵɵresetView(ctx.onClickExportVault());\n });\n i0.ɵɵtext(10, \" Export Vault \");\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(11, \"button\", 7);\n i0.ɵɵlistener(\"click\", function SettingsComponent_Template_button_click_11_listener() {\n i0.ɵɵrestoreView(_r1);\n return i0.ɵɵresetView(ctx.navigate(\"/vault-import\"));\n });\n i0.ɵɵtext(12, \" Import Vault \");\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(13, \"lib-nav-item\", 8);\n i0.ɵɵlistener(\"click\", function SettingsComponent_Template_lib_nav_item_click_13_listener() {\n i0.ɵɵrestoreView(_r1);\n return i0.ɵɵresetView(ctx.navigate(\"/home/backups\"));\n });\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(14, \"lib-nav-item\", 9);\n i0.ɵɵlistener(\"click\", function SettingsComponent_Template_lib_nav_item_click_14_listener() {\n i0.ɵɵrestoreView(_r1);\n return i0.ɵɵresetView(ctx.navigate(\"/home/logs\"));\n });\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(15, \"lib-nav-item\", 10);\n i0.ɵɵlistener(\"click\", function SettingsComponent_Template_lib_nav_item_click_15_listener() {\n i0.ɵɵrestoreView(_r1);\n return i0.ɵɵresetView(ctx.navigate(\"/home/info\"));\n });\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(16, \"div\", 11)(17, \"label\", 12)(18, \"input\", 13);\n i0.ɵɵlistener(\"change\", function SettingsComponent_Template_input_change_18_listener($event) {\n i0.ɵɵrestoreView(_r1);\n return i0.ɵɵresetView(ctx.onToggleDevMode($event));\n });\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(19, \"span\");\n i0.ɵɵtext(20, \"Dev Mode\");\n i0.ɵɵelementEnd()()();\n i0.ɵɵelement(21, \"div\", 14);\n i0.ɵɵelementStart(22, \"div\", 15)(23, \"span\", 16);\n i0.ɵɵtext(24);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(25, \"p\", 17);\n i0.ɵɵtext(26, \" To change sync mode, export your vault, reset the extension, and re-import with the desired sync setting. \");\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(27, \"button\", 18);\n i0.ɵɵlistener(\"click\", function SettingsComponent_Template_button_click_27_listener() {\n i0.ɵɵrestoreView(_r1);\n const confirm_r4 = i0.ɵɵreference(30);\n return i0.ɵɵresetView(confirm_r4.show(\"Do you really want to reset your extension? Every data will be lost.\", ctx.onResetExtension.bind(ctx)));\n });\n i0.ɵɵtext(28, \" Reset Extension\\n\");\n i0.ɵɵelementEnd();\n i0.ɵɵelement(29, \"lib-confirm\", null, 0);\n }\n if (rf & 2) {\n i0.ɵɵadvance(5);\n i0.ɵɵconditional(ctx.devMode ? 5 : -1);\n i0.ɵɵadvance(13);\n i0.ɵɵproperty(\"checked\", ctx.devMode);\n i0.ɵɵadvance(6);\n i0.ɵɵtextInterpolate1(\"SYNC: \", ctx.syncFlow, \"\");\n }\n },\n dependencies: [ConfirmComponent, NavItemComponent],\n styles: [\"[_nghost-%COMP%] {\\n height: 100%;\\n display: flex;\\n flex-direction: column;\\n row-gap: var(--size);\\n overflow-y: auto;\\n}\\n[_nghost-%COMP%] > *[_ngcontent-%COMP%]:not(.sam-text-header) {\\n margin-left: var(--size);\\n margin-right: var(--size);\\n}\\n[_nghost-%COMP%] .file-input[_ngcontent-%COMP%] {\\n position: absolute;\\n visibility: hidden;\\n}\\n\\n.vault-buttons[_ngcontent-%COMP%] {\\n display: flex;\\n gap: var(--size);\\n}\\n.vault-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\\n flex: 1;\\n}\\n\\n.dev-mode-row[_ngcontent-%COMP%] {\\n display: flex;\\n align-items: center;\\n gap: var(--size);\\n}\\n.dev-mode-row[_ngcontent-%COMP%] .toggle-label[_ngcontent-%COMP%] {\\n display: flex;\\n align-items: center;\\n gap: var(--size-h);\\n cursor: pointer;\\n font-size: 0.9rem;\\n}\\n.dev-mode-row[_ngcontent-%COMP%] .toggle-label[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%] {\\n width: 16px;\\n height: 16px;\\n cursor: pointer;\\n}\\n\\n.sync-info[_ngcontent-%COMP%] .sync-label[_ngcontent-%COMP%] {\\n display: block;\\n font-weight: 500;\\n}\\n.sync-info[_ngcontent-%COMP%] .sync-note[_ngcontent-%COMP%] {\\n margin: var(--size-h) 0 0 0;\\n font-size: 0.85rem;\\n color: var(--muted-foreground);\\n line-height: 1.4;\\n}\"]\n });\n }\n return SettingsComponent;\n})();","map":null,"metadata":{},"sourceType":"module","externalDependencies":[]}