diff --git a/packages/desktop/app/application.ts b/packages/desktop/app/application.ts index de6f387df..c268cd537 100644 --- a/packages/desktop/app/application.ts +++ b/packages/desktop/app/application.ts @@ -28,6 +28,7 @@ export function initializeApplication(args: { app: Electron.App; ipcMain: Electr if (isDev()) { /** Expose the app's state as a global variable. Useful for debugging */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any ;(global as any).appState = state setTimeout(() => { @@ -124,7 +125,6 @@ async function finishApplicationInitialization({ app, shell, state }: { app: App }) if (state.isRunningVersionForFirstTime()) { - console.log('Clearing window cache') await windowState.window.webContents.session.clearCache() } diff --git a/packages/desktop/app/javascripts/Main/HomeServer/HomeServerManager.ts b/packages/desktop/app/javascripts/Main/HomeServer/HomeServerManager.ts index baa047213..cf640e717 100644 --- a/packages/desktop/app/javascripts/Main/HomeServer/HomeServerManager.ts +++ b/packages/desktop/app/javascripts/Main/HomeServer/HomeServerManager.ts @@ -4,7 +4,7 @@ import { HomeServerManagerInterface, HomeServerEnvironmentConfiguration, } from '@web/Application/Device/DesktopSnjsExports' -import { HomeServer, HomeServerInterface } from '@standardnotes/home-server' +import { HomeServerInterface } from '@standardnotes/home-server' import { WebContents } from 'electron' import { MessageToWebApp } from '../../Shared/IpcMessages' @@ -127,7 +127,7 @@ export class HomeServerManager implements HomeServerManagerInterface { } async startHomeServer(): Promise { - this.doNotInstantiateHomeServerOnWindowsUntilItIsSupported() + await this.lazyLoadHomeServerOnApplicablePlatforms() if (!this.homeServer) { return @@ -265,9 +265,17 @@ export class HomeServerManager implements HomeServerManagerInterface { return configuration } - private doNotInstantiateHomeServerOnWindowsUntilItIsSupported(): void { - if (!isWindows() && !this.homeServer) { - this.homeServer = new HomeServer() + private async lazyLoadHomeServerOnApplicablePlatforms(): Promise { + if (isWindows()) { + return } + + if (this.homeServer) { + return + } + + const { HomeServer } = await import('@standardnotes/home-server') + + this.homeServer = new HomeServer() } } diff --git a/packages/desktop/app/javascripts/Main/Window.ts b/packages/desktop/app/javascripts/Main/Window.ts index eb76679d3..79b532234 100644 --- a/packages/desktop/app/javascripts/Main/Window.ts +++ b/packages/desktop/app/javascripts/Main/Window.ts @@ -61,6 +61,7 @@ export async function createWindowState({ const services = await createWindowServices(window, appState, appLocale) require('@electron/remote/main').enable(window.webContents) + // eslint-disable-next-line @typescript-eslint/no-explicit-any ;(global as any).RemoteBridge = new RemoteBridge( window, Keychain, diff --git a/packages/desktop/app/javascripts/Renderer/Preload.ts b/packages/desktop/app/javascripts/Renderer/Preload.ts index 285436d33..ebb4ca96b 100644 --- a/packages/desktop/app/javascripts/Renderer/Preload.ts +++ b/packages/desktop/app/javascripts/Renderer/Preload.ts @@ -22,6 +22,8 @@ process.once('loaded', function () { setHomeServerStartedHandler: (handler: MainEventHandler) => ipcRenderer.on(MessageToWebApp.HomeServerStarted, handler), + + setConsoleLogHandler: (handler: MainEventHandler) => ipcRenderer.on(MessageToWebApp.ConsoleLog, handler), } contextBridge.exposeInMainWorld('electronMainEvents', mainEvents) diff --git a/packages/desktop/app/javascripts/Renderer/Renderer.ts b/packages/desktop/app/javascripts/Renderer/Renderer.ts index a0b37f6bd..50a18b1ea 100644 --- a/packages/desktop/app/javascripts/Renderer/Renderer.ts +++ b/packages/desktop/app/javascripts/Renderer/Renderer.ts @@ -150,8 +150,13 @@ window.electronMainEvents.setWindowFocusedHandler(() => { window.webClient.windowGainedFocus() }) -window.electronMainEvents.setInstallComponentCompleteHandler((_: IpcRendererEvent, data: any) => { - void window.webClient.onComponentInstallationComplete(data.component, undefined) +window.electronMainEvents.setConsoleLogHandler((_: IpcRendererEvent, message: unknown) => { + window.webClient.consoleLog(message as string) +}) + +window.electronMainEvents.setInstallComponentCompleteHandler((_: IpcRendererEvent, data: unknown) => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + void window.webClient.onComponentInstallationComplete((data as any).component, undefined) }) window.electronMainEvents.setWatchedDirectoriesChangeHandler((_: IpcRendererEvent, changes: unknown) => { diff --git a/packages/desktop/app/javascripts/Shared/ElectronMainEvents.ts b/packages/desktop/app/javascripts/Shared/ElectronMainEvents.ts index ef27b6452..412843a71 100644 --- a/packages/desktop/app/javascripts/Shared/ElectronMainEvents.ts +++ b/packages/desktop/app/javascripts/Shared/ElectronMainEvents.ts @@ -9,4 +9,5 @@ export interface ElectronMainEvents { setInstallComponentCompleteHandler(handler: MainEventHandler): void setWatchedDirectoriesChangeHandler(handler: MainEventHandler): void setHomeServerStartedHandler(handler: MainEventHandler): void + setConsoleLogHandler(handler: MainEventHandler): void } diff --git a/packages/desktop/app/javascripts/Shared/IpcMessages.ts b/packages/desktop/app/javascripts/Shared/IpcMessages.ts index 8ae722c19..966906d8f 100644 --- a/packages/desktop/app/javascripts/Shared/IpcMessages.ts +++ b/packages/desktop/app/javascripts/Shared/IpcMessages.ts @@ -5,6 +5,7 @@ export enum MessageToWebApp { InstallComponentComplete = 'install-component-complete', WatchedDirectoriesChanges = 'watched-directories-changes', HomeServerStarted = 'home-server-started', + ConsoleLog = 'console-log', } export enum MessageToMainProcess { diff --git a/packages/desktop/tsconfig.json b/packages/desktop/tsconfig.json index 651578325..628932280 100644 --- a/packages/desktop/tsconfig.json +++ b/packages/desktop/tsconfig.json @@ -2,6 +2,7 @@ "compilerOptions": { "target": "ES2019", "moduleResolution": "node", + "module": "es2020", "types": ["node"], "allowJs": true, "noEmit": false, diff --git a/packages/services/src/Domain/Device/DesktopWebCommunication.ts b/packages/services/src/Domain/Device/DesktopWebCommunication.ts index 97348b8c0..bca03e07c 100644 --- a/packages/services/src/Domain/Device/DesktopWebCommunication.ts +++ b/packages/services/src/Domain/Device/DesktopWebCommunication.ts @@ -18,6 +18,8 @@ export interface DesktopClientRequiresWebMethods { windowLostFocus(): void + consoleLog(message: string): void + onComponentInstallationComplete(componentData: DecryptedTransferPayload, error: unknown): Promise handleWatchedDirectoriesChanges(changes: DesktopWatchedDirectoriesChanges): Promise diff --git a/packages/services/src/Domain/InternalFeatures/InternalFeature.ts b/packages/services/src/Domain/InternalFeatures/InternalFeature.ts index 1dfa14b22..817c91961 100644 --- a/packages/services/src/Domain/InternalFeatures/InternalFeature.ts +++ b/packages/services/src/Domain/InternalFeatures/InternalFeature.ts @@ -1,3 +1,4 @@ export enum InternalFeature { Vaults = 'vaults', + HomeServer = 'home-server', } diff --git a/packages/web/CHANGELOG.md b/packages/web/CHANGELOG.md index 292336e66..6637b58c6 100644 --- a/packages/web/CHANGELOG.md +++ b/packages/web/CHANGELOG.md @@ -5,9 +5,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline # [3.165.0](https://github.com/standardnotes/app/compare/@standardnotes/web@3.164.3...@standardnotes/web@3.165.0) (2023-07-04) -### Features - -* New one-click Home Server, now in Labs. Launch your own self-hosted server instance with just 1 click from the Preferences window. ([#2345](https://github.com/standardnotes/app/issues/2345)) ([0552878](https://github.com/standardnotes/app/commit/05528782a4e9684dbd86fd12b77eb86727d6c414)) +**Note:** Version bump only for package @standardnotes/web ## [3.164.3](https://github.com/standardnotes/app/compare/@standardnotes/web@3.164.2...@standardnotes/web@3.164.3) (2023-07-04) diff --git a/packages/web/CHANGELOG.md.json b/packages/web/CHANGELOG.md.json index 4e727844e..465aaef22 100644 --- a/packages/web/CHANGELOG.md.json +++ b/packages/web/CHANGELOG.md.json @@ -1,19 +1,5 @@ { "versions": [ - { - "version": "3.165.0", - "title": "[3.165.0](https://github.com/standardnotes/app/compare/@standardnotes/web@3.164.3...@standardnotes/web@3.165.0) (2023-07-04)", - "date": null, - "body": "### Features\n\n* New one-click Home Server, now in Labs. Launch your own self-hosted server instance with just 1 click from the Preferences window. ([#2345](https://github.com/standardnotes/app/issues/2345)) ([0552878](https://github.com/standardnotes/app/commit/05528782a4e9684dbd86fd12b77eb86727d6c414))", - "parsed": { - "_": [ - "New one-click Home Server, now in Labs. Launch your own self-hosted server instance with just 1 click from the Preferences window. (#2345) (0552878)" - ], - "Features": [ - "New one-click Home Server, now in Labs. Launch your own self-hosted server instance with just 1 click from the Preferences window. (#2345) (0552878)" - ] - } - }, { "version": "3.164.3", "title": "[3.164.3](https://github.com/standardnotes/app/compare/@standardnotes/web@3.164.2...@standardnotes/web@3.164.3) (2023-07-04)", diff --git a/packages/web/src/javascripts/Application/DevMode.ts b/packages/web/src/javascripts/Application/DevMode.ts index 8b1e2f0a6..f7b3a1370 100644 --- a/packages/web/src/javascripts/Application/DevMode.ts +++ b/packages/web/src/javascripts/Application/DevMode.ts @@ -4,6 +4,7 @@ import { WebApplicationInterface } from '@standardnotes/ui-services' export class DevMode { constructor(private application: WebApplicationInterface) { InternalFeatureService.get().enableFeature(InternalFeature.Vaults) + InternalFeatureService.get().enableFeature(InternalFeature.HomeServer) } /** Valid only when running a mock event publisher on port 3124 */ diff --git a/packages/web/src/javascripts/Application/Device/DesktopManager.ts b/packages/web/src/javascripts/Application/Device/DesktopManager.ts index 66e92e471..1fd92848f 100644 --- a/packages/web/src/javascripts/Application/Device/DesktopManager.ts +++ b/packages/web/src/javascripts/Application/Device/DesktopManager.ts @@ -176,6 +176,11 @@ export class DesktopManager } } + consoleLog(message: string): void { + // eslint-disable-next-line no-console + console.log(message) + } + async onComponentInstallationComplete(componentData: DecryptedTransferPayload) { const component = this.application.items.findItem(componentData.uuid) if (!component) { diff --git a/packages/web/src/javascripts/Components/Preferences/PreferencesMenu.ts b/packages/web/src/javascripts/Components/Preferences/PreferencesMenu.ts index 67cfa14fe..d1c474ab4 100644 --- a/packages/web/src/javascripts/Components/Preferences/PreferencesMenu.ts +++ b/packages/web/src/javascripts/Components/Preferences/PreferencesMenu.ts @@ -5,7 +5,7 @@ import { PackageProvider } from './Panes/General/Advanced/Packages/Provider/Pack import { securityPrefsHasBubble } from './Panes/Security/securityPrefsHasBubble' import { PreferenceId } from '@standardnotes/ui-services' import { isDesktopApplication } from '@/Utils' -import { featureTrunkVaultsEnabled } from '@/FeatureTrunk' +import { featureTrunkHomeServerEnabled, featureTrunkVaultsEnabled } from '@/FeatureTrunk' interface PreferencesMenuItem { readonly id: PreferenceId @@ -47,9 +47,7 @@ const READY_PREFERENCES_MENU_ITEMS: PreferencesMenuItem[] = [ { id: 'help-feedback', label: 'Help & feedback', icon: 'help', order: 11 }, ] -const DESKTOP_PREFERENCES_MENU_ITEMS: PreferencesMenuItem[] = [ - { id: 'home-server', label: 'Home Server', icon: 'server', order: 5 }, -] +const DESKTOP_PREFERENCES_MENU_ITEMS: PreferencesMenuItem[] = [] export class PreferencesMenu { private _selectedPane: PreferenceId = 'account' @@ -62,6 +60,10 @@ export class PreferencesMenu { READY_PREFERENCES_MENU_ITEMS.splice(3, 0, { id: 'vaults', label: 'Vaults', icon: 'safe-square', order: 5 }) } + if (featureTrunkHomeServerEnabled()) { + DESKTOP_PREFERENCES_MENU_ITEMS.push({ id: 'home-server', label: 'Home Server', icon: 'server', order: 5 }) + } + let menuItems = this._enableUnfinishedFeatures ? PREFERENCES_MENU_ITEMS : READY_PREFERENCES_MENU_ITEMS if (isDesktopApplication()) { diff --git a/packages/web/src/javascripts/FeatureTrunk.ts b/packages/web/src/javascripts/FeatureTrunk.ts index b8e6128c1..515d29b86 100644 --- a/packages/web/src/javascripts/FeatureTrunk.ts +++ b/packages/web/src/javascripts/FeatureTrunk.ts @@ -11,3 +11,7 @@ export function featureTrunkEnabled(trunk: FeatureTrunkName): boolean { export function featureTrunkVaultsEnabled(): boolean { return InternalFeatureService.get().isFeatureEnabled(InternalFeature.Vaults) } + +export function featureTrunkHomeServerEnabled(): boolean { + return InternalFeatureService.get().isFeatureEnabled(InternalFeature.HomeServer) +}