aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.eslintrc.cjs12
-rw-r--r--config/tsconfig.base.json8
-rw-r--r--packages/main/src/i18n/I18nStore.ts2
-rw-r--r--packages/main/src/i18n/RepositoryBasedI18nBackend.ts4
-rw-r--r--packages/main/src/i18n/i18nLog.ts2
-rw-r--r--packages/main/src/i18n/impl/LocaltizationFiles.ts8
-rw-r--r--packages/main/src/i18n/loadLocalization.ts12
-rw-r--r--packages/main/src/index.ts10
-rw-r--r--packages/main/src/infrastructure/config/ConfigRepository.ts2
-rw-r--r--packages/main/src/infrastructure/config/impl/ConfigFile.ts10
-rw-r--r--packages/main/src/infrastructure/electron/RendererBridge.ts4
-rw-r--r--packages/main/src/infrastructure/electron/__tests__/RendererBridge.test.ts4
-rw-r--r--packages/main/src/infrastructure/electron/__tests__/UserAgents.test.ts2
-rw-r--r--packages/main/src/infrastructure/electron/impl/ElectronMainWindow.ts18
-rw-r--r--packages/main/src/infrastructure/electron/impl/ElectronPartition.ts6
-rw-r--r--packages/main/src/infrastructure/electron/impl/ElectronServiceView.ts12
-rw-r--r--packages/main/src/infrastructure/electron/impl/ElectronViewFactory.ts23
-rw-r--r--packages/main/src/infrastructure/electron/impl/__tests__/electron.integ.test.ts2
-rw-r--r--packages/main/src/infrastructure/electron/impl/__tests__/hardenSession.test.ts4
-rw-r--r--packages/main/src/infrastructure/electron/impl/__tests__/lockWebContentsToFile.test.ts4
-rw-r--r--packages/main/src/infrastructure/electron/impl/electronShell.ts2
-rw-r--r--packages/main/src/infrastructure/electron/impl/hardenSession.ts4
-rw-r--r--packages/main/src/infrastructure/electron/impl/lockWebContentsToFile.ts6
-rw-r--r--packages/main/src/infrastructure/electron/impl/setApplicationMenu.ts2
-rw-r--r--packages/main/src/infrastructure/electron/types.ts6
-rw-r--r--packages/main/src/infrastructure/resources/impl/__tests__/getDistResources.test.ts4
-rw-r--r--packages/main/src/infrastructure/resources/impl/getDistResources.ts2
-rw-r--r--packages/main/src/initReactions.ts28
-rw-r--r--packages/main/src/reactions/__tests__/synchronizeConfig.test.ts8
-rw-r--r--packages/main/src/reactions/__tests__/synchronizeNativeTheme.test.ts6
-rw-r--r--packages/main/src/reactions/loadServices.ts8
-rw-r--r--packages/main/src/reactions/synchronizeConfig.ts10
-rw-r--r--packages/main/src/reactions/synchronizeNativeTheme.ts6
-rw-r--r--packages/main/src/stores/GlobalSettings.ts4
-rw-r--r--packages/main/src/stores/MainStore.ts18
-rw-r--r--packages/main/src/stores/Profile.ts2
-rw-r--r--packages/main/src/stores/Service.ts10
-rw-r--r--packages/main/src/stores/ServiceSettings.ts2
-rw-r--r--packages/main/src/stores/SharedStore.ts12
-rw-r--r--packages/main/src/stores/__tests__/SharedStore.test.ts8
-rw-r--r--packages/main/src/stores/config/Config.ts6
-rw-r--r--packages/main/src/stores/config/loadConfig.ts14
-rw-r--r--packages/preload/src/contextBridge/__tests__/createSophieRenderer.test.ts2
-rw-r--r--packages/preload/src/contextBridge/createSophieRenderer.ts8
-rw-r--r--packages/preload/src/index.ts2
-rw-r--r--packages/preload/tsconfig.json2
-rw-r--r--packages/renderer/src/components/App.tsx8
-rw-r--r--packages/renderer/src/components/BrowserViewPlaceholder.tsx2
-rw-r--r--packages/renderer/src/components/ServicePanel.tsx14
-rw-r--r--packages/renderer/src/components/ThemeProvider.tsx2
-rw-r--r--packages/renderer/src/components/WindowTitle.tsx2
-rw-r--r--packages/renderer/src/components/banner/InsecureConnectionBanner.tsx4
-rw-r--r--packages/renderer/src/components/banner/NewWindowBanner.tsx4
-rw-r--r--packages/renderer/src/components/banner/NotificationBanner.tsx2
-rw-r--r--packages/renderer/src/components/errorPage/CertificateDetails.tsx6
-rw-r--r--packages/renderer/src/components/errorPage/ErrorPage.tsx4
-rw-r--r--packages/renderer/src/components/locationBar/ExtraButtons.tsx2
-rw-r--r--packages/renderer/src/components/locationBar/GoButton.tsx2
-rw-r--r--packages/renderer/src/components/locationBar/LocationBar.tsx10
-rw-r--r--packages/renderer/src/components/locationBar/LocationTextField.tsx10
-rw-r--r--packages/renderer/src/components/locationBar/NavigationButtons.tsx4
-rw-r--r--packages/renderer/src/components/locationBar/SecurityLabel.tsx4
-rw-r--r--packages/renderer/src/components/locationBar/UrlOverlay.tsx2
-rw-r--r--packages/renderer/src/components/sidebar/ServiceIcon.tsx2
-rw-r--r--packages/renderer/src/components/sidebar/ServiceSwitcher.tsx8
-rw-r--r--packages/renderer/src/components/sidebar/Sidebar.tsx8
-rw-r--r--packages/renderer/src/components/sidebar/ToggleDarkModeButton.tsx2
-rw-r--r--packages/renderer/src/components/sidebar/ToggleLocationBarButton.tsx6
-rw-r--r--packages/renderer/src/i18n/RtlCacheProvider.tsx2
-rw-r--r--packages/renderer/src/i18n/loadRendererLoalization.ts6
-rw-r--r--packages/renderer/src/index.tsx18
-rw-r--r--packages/renderer/src/stores/GlobalSettings.ts4
-rw-r--r--packages/renderer/src/stores/RendererStore.ts10
-rw-r--r--packages/renderer/src/stores/Service.ts4
-rw-r--r--packages/renderer/src/stores/ServiceSettings.ts2
-rw-r--r--packages/renderer/src/stores/SharedStore.ts6
-rw-r--r--packages/renderer/tsconfig.json4
-rw-r--r--packages/service-inject/tsconfig.json2
-rw-r--r--packages/service-preload/tsconfig.json2
-rw-r--r--packages/service-shared/package.json7
-rw-r--r--packages/service-shared/src/index.ts4
-rw-r--r--packages/shared/package.json7
-rw-r--r--packages/shared/src/contextBridge/SophieRenderer.ts6
-rw-r--r--packages/shared/src/index.ts44
-rw-r--r--packages/shared/src/schemas/Action.ts4
-rw-r--r--packages/shared/src/schemas/ServiceAction.ts2
-rw-r--r--packages/shared/src/stores/GlobalSettingsBase.ts4
-rw-r--r--packages/shared/src/stores/Profile.ts4
-rw-r--r--packages/shared/src/stores/ServiceBase.ts8
-rw-r--r--packages/shared/src/stores/ServiceSettingsBase.ts2
-rw-r--r--packages/shared/src/stores/ServiceState.ts2
-rw-r--r--packages/shared/src/stores/SharedStoreBase.ts8
-rw-r--r--packages/test-utils/src/index.ts2
93 files changed, 309 insertions, 294 deletions
diff --git a/.eslintrc.cjs b/.eslintrc.cjs
index 3d944e4..e76ff6f 100644
--- a/.eslintrc.cjs
+++ b/.eslintrc.cjs
@@ -44,8 +44,9 @@ module.exports = {
44 }, 44 },
45 }, 45 },
46 rules: { 46 rules: {
47 // TODO Flip this to `ignorePackages` once we are on `nodenext` resolution. 47 // `import/exteions` is buggy with ts files:
48 'import/extensions': ['error', 'never'], 48 // https://github.com/import-js/eslint-plugin-import/issues/2111
49 'import/extensions': 'off',
49 'import/no-unresolved': 'error', 50 'import/no-unresolved': 'error',
50 'import/order': [ 51 'import/order': [
51 'error', 52 'error',
@@ -107,13 +108,6 @@ module.exports = {
107 }, 108 },
108 }, 109 },
109 { 110 {
110 files: ['**/*.js'],
111 rules: {
112 // ESM requires extensions for imports.
113 'import/extensions': ['error', 'ignorePackages'],
114 },
115 },
116 {
117 files: ['**/*.cjs'], 111 files: ['**/*.cjs'],
118 parserOptions: { 112 parserOptions: {
119 sourceType: 'script', 113 sourceType: 'script',
diff --git a/config/tsconfig.base.json b/config/tsconfig.base.json
index ff7594e..64522ce 100644
--- a/config/tsconfig.base.json
+++ b/config/tsconfig.base.json
@@ -1,8 +1,8 @@
1{ 1{
2 "compilerOptions": { 2 "compilerOptions": {
3 "module": "esnext", 3 "module": "Node16",
4 "target": "esnext", 4 "target": "es2022",
5 "moduleResolution": "node", 5 "moduleResolution": "Node16",
6 "esModuleInterop": true, 6 "esModuleInterop": true,
7 "allowSyntheticDefaultImports": true, 7 "allowSyntheticDefaultImports": true,
8 "strict": true, 8 "strict": true,
@@ -12,6 +12,6 @@
12 "isolatedModules": true, 12 "isolatedModules": true,
13 "skipLibCheck": true, 13 "skipLibCheck": true,
14 "checkJs": true, 14 "checkJs": true,
15 "lib": ["esnext"] 15 "lib": ["es2021"]
16 } 16 }
17} 17}
diff --git a/packages/main/src/i18n/I18nStore.ts b/packages/main/src/i18n/I18nStore.ts
index 8ea4430..4c77322 100644
--- a/packages/main/src/i18n/I18nStore.ts
+++ b/packages/main/src/i18n/I18nStore.ts
@@ -21,7 +21,7 @@
21import type { i18n, ResourceKey, TFunction } from 'i18next'; 21import type { i18n, ResourceKey, TFunction } from 'i18next';
22import { IAtom, createAtom } from 'mobx'; 22import { IAtom, createAtom } from 'mobx';
23 23
24import getLogger from '../utils/getLogger'; 24import getLogger from '../utils/getLogger.js';
25 25
26const log = getLogger('I18nStore'); 26const log = getLogger('I18nStore');
27 27
diff --git a/packages/main/src/i18n/RepositoryBasedI18nBackend.ts b/packages/main/src/i18n/RepositoryBasedI18nBackend.ts
index 23f70d7..5b667d5 100644
--- a/packages/main/src/i18n/RepositoryBasedI18nBackend.ts
+++ b/packages/main/src/i18n/RepositoryBasedI18nBackend.ts
@@ -26,9 +26,9 @@ import type {
26} from 'i18next'; 26} from 'i18next';
27import { debounce } from 'lodash-es'; 27import { debounce } from 'lodash-es';
28 28
29import getLogger from '../utils/getLogger'; 29import getLogger from '../utils/getLogger.js';
30 30
31import type LocatlizationRepository from './LocalizationRepository'; 31import type LocatlizationRepository from './LocalizationRepository.js';
32 32
33const MISSING_ENTRIES_DEBOUNCE_TIME_MS = 1000; 33const MISSING_ENTRIES_DEBOUNCE_TIME_MS = 1000;
34 34
diff --git a/packages/main/src/i18n/i18nLog.ts b/packages/main/src/i18n/i18nLog.ts
index 308a1cc..94f6473 100644
--- a/packages/main/src/i18n/i18nLog.ts
+++ b/packages/main/src/i18n/i18nLog.ts
@@ -20,7 +20,7 @@
20 20
21import type { LoggerModule } from 'i18next'; 21import type { LoggerModule } from 'i18next';
22 22
23import getLogger from '../utils/getLogger'; 23import getLogger from '../utils/getLogger.js';
24 24
25const log = getLogger('i18nLog'); 25const log = getLogger('i18nLog');
26 26
diff --git a/packages/main/src/i18n/impl/LocaltizationFiles.ts b/packages/main/src/i18n/impl/LocaltizationFiles.ts
index 9cd854e..74e3ae3 100644
--- a/packages/main/src/i18n/impl/LocaltizationFiles.ts
+++ b/packages/main/src/i18n/impl/LocaltizationFiles.ts
@@ -22,10 +22,10 @@ import { readFile, writeFile } from 'node:fs/promises';
22 22
23import type { ResourceKey } from 'i18next'; 23import type { ResourceKey } from 'i18next';
24 24
25import type Resources from '../../infrastructure/resources/Resources'; 25import type Resources from '../../infrastructure/resources/Resources.js';
26import getLogger from '../../utils/getLogger'; 26import getLogger from '../../utils/getLogger.js';
27import isErrno from '../../utils/isErrno'; 27import isErrno from '../../utils/isErrno.js';
28import type LocatlizationRepository from '../LocalizationRepository'; 28import type LocatlizationRepository from '../LocalizationRepository.js';
29 29
30const log = getLogger('LocalizationFiles'); 30const log = getLogger('LocalizationFiles');
31 31
diff --git a/packages/main/src/i18n/loadLocalization.ts b/packages/main/src/i18n/loadLocalization.ts
index e62b3e3..19da9e2 100644
--- a/packages/main/src/i18n/loadLocalization.ts
+++ b/packages/main/src/i18n/loadLocalization.ts
@@ -23,13 +23,13 @@ import i18next, { i18n } from 'i18next';
23import { reaction } from 'mobx'; 23import { reaction } from 'mobx';
24import { addDisposer } from 'mobx-state-tree'; 24import { addDisposer } from 'mobx-state-tree';
25 25
26import type MainStore from '../stores/MainStore'; 26import type MainStore from '../stores/MainStore.js';
27import getLogger from '../utils/getLogger'; 27import getLogger from '../utils/getLogger.js';
28 28
29import I18nStore from './I18nStore'; 29import I18nStore from './I18nStore.js';
30import type LocatlizationRepository from './LocalizationRepository'; 30import type LocatlizationRepository from './LocalizationRepository.js';
31import RepositoryBasedI18nBackend from './RepositoryBasedI18nBackend'; 31import RepositoryBasedI18nBackend from './RepositoryBasedI18nBackend.js';
32import i18nLog from './i18nLog'; 32import i18nLog from './i18nLog.js';
33 33
34const log = getLogger('loadLocationzation'); 34const log = getLogger('loadLocationzation');
35 35
diff --git a/packages/main/src/index.ts b/packages/main/src/index.ts
index 3494f25..3496212 100644
--- a/packages/main/src/index.ts
+++ b/packages/main/src/index.ts
@@ -23,11 +23,11 @@ import os from 'node:os';
23 23
24import { app } from 'electron'; 24import { app } from 'electron';
25 25
26import { enableStacktraceSourceMaps } from './infrastructure/electron/impl/devTools'; 26import { enableStacktraceSourceMaps } from './infrastructure/electron/impl/devTools.js';
27import electronShell from './infrastructure/electron/impl/electronShell'; 27import electronShell from './infrastructure/electron/impl/electronShell.js';
28import initReactions from './initReactions'; 28import initReactions from './initReactions.js';
29import MainStore from './stores/MainStore'; 29import MainStore from './stores/MainStore.js';
30import getLogger from './utils/getLogger'; 30import getLogger from './utils/getLogger.js';
31 31
32const isDevelopment = import.meta.env.MODE === 'development'; 32const isDevelopment = import.meta.env.MODE === 'development';
33 33
diff --git a/packages/main/src/infrastructure/config/ConfigRepository.ts b/packages/main/src/infrastructure/config/ConfigRepository.ts
index 67bffb0..7d5e12b 100644
--- a/packages/main/src/infrastructure/config/ConfigRepository.ts
+++ b/packages/main/src/infrastructure/config/ConfigRepository.ts
@@ -18,7 +18,7 @@
18 * SPDX-License-Identifier: AGPL-3.0-only 18 * SPDX-License-Identifier: AGPL-3.0-only
19 */ 19 */
20 20
21import type Disposer from '../../utils/Disposer'; 21import type Disposer from '../../utils/Disposer.js';
22 22
23export type ReadConfigResult = 23export type ReadConfigResult =
24 | { found: true; contents: string } 24 | { found: true; contents: string }
diff --git a/packages/main/src/infrastructure/config/impl/ConfigFile.ts b/packages/main/src/infrastructure/config/impl/ConfigFile.ts
index 6203c89..684a827 100644
--- a/packages/main/src/infrastructure/config/impl/ConfigFile.ts
+++ b/packages/main/src/infrastructure/config/impl/ConfigFile.ts
@@ -24,11 +24,11 @@ import path from 'node:path';
24 24
25import { throttle } from 'lodash-es'; 25import { throttle } from 'lodash-es';
26 26
27import type Disposer from '../../../utils/Disposer'; 27import type Disposer from '../../../utils/Disposer.js';
28import getLogger from '../../../utils/getLogger'; 28import getLogger from '../../../utils/getLogger.js';
29import isErrno from '../../../utils/isErrno'; 29import isErrno from '../../../utils/isErrno.js';
30import type ConfigRepository from '../ConfigRepository'; 30import type ConfigRepository from '../ConfigRepository.js';
31import type { ReadConfigResult } from '../ConfigRepository'; 31import type { ReadConfigResult } from '../ConfigRepository.js';
32 32
33const log = getLogger('ConfigFile'); 33const log = getLogger('ConfigFile');
34 34
diff --git a/packages/main/src/infrastructure/electron/RendererBridge.ts b/packages/main/src/infrastructure/electron/RendererBridge.ts
index 097580a..921f09a 100644
--- a/packages/main/src/infrastructure/electron/RendererBridge.ts
+++ b/packages/main/src/infrastructure/electron/RendererBridge.ts
@@ -26,8 +26,8 @@ import {
26 onPatch, 26 onPatch,
27} from 'mobx-state-tree'; 27} from 'mobx-state-tree';
28 28
29import type MainStore from '../../stores/MainStore'; 29import type MainStore from '../../stores/MainStore.js';
30import Disposer from '../../utils/Disposer'; 30import Disposer from '../../utils/Disposer.js';
31 31
32export type PatchListener = (patch: IJsonPatch[]) => void; 32export type PatchListener = (patch: IJsonPatch[]) => void;
33 33
diff --git a/packages/main/src/infrastructure/electron/__tests__/RendererBridge.test.ts b/packages/main/src/infrastructure/electron/__tests__/RendererBridge.test.ts
index b7c8a76..e29429d 100644
--- a/packages/main/src/infrastructure/electron/__tests__/RendererBridge.test.ts
+++ b/packages/main/src/infrastructure/electron/__tests__/RendererBridge.test.ts
@@ -30,8 +30,8 @@ import {
30 unprotect, 30 unprotect,
31} from 'mobx-state-tree'; 31} from 'mobx-state-tree';
32 32
33import MainStore from '../../../stores/MainStore'; 33import MainStore from '../../../stores/MainStore.js';
34import RendererBridge, { type PatchListener } from '../RendererBridge'; 34import RendererBridge, { type PatchListener } from '../RendererBridge.js';
35 35
36const TestStore = MainStore.actions((theSelf) => ({ 36const TestStore = MainStore.actions((theSelf) => ({
37 /** 37 /**
diff --git a/packages/main/src/infrastructure/electron/__tests__/UserAgents.test.ts b/packages/main/src/infrastructure/electron/__tests__/UserAgents.test.ts
index d963704..0c6dd1c 100644
--- a/packages/main/src/infrastructure/electron/__tests__/UserAgents.test.ts
+++ b/packages/main/src/infrastructure/electron/__tests__/UserAgents.test.ts
@@ -18,7 +18,7 @@
18 * SPDX-License-Identifier: AGPL-3.0-only 18 * SPDX-License-Identifier: AGPL-3.0-only
19 */ 19 */
20 20
21import UserAgents from '../UserAgents'; 21import UserAgents from '../UserAgents.js';
22 22
23let userAgents: UserAgents; 23let userAgents: UserAgents;
24 24
diff --git a/packages/main/src/infrastructure/electron/impl/ElectronMainWindow.ts b/packages/main/src/infrastructure/electron/impl/ElectronMainWindow.ts
index 20a1f70..c4b3823 100644
--- a/packages/main/src/infrastructure/electron/impl/ElectronMainWindow.ts
+++ b/packages/main/src/infrastructure/electron/impl/ElectronMainWindow.ts
@@ -27,15 +27,15 @@ import {
27import { BrowserWindow, ipcMain, IpcMainEvent } from 'electron'; 27import { BrowserWindow, ipcMain, IpcMainEvent } from 'electron';
28import type { IJsonPatch } from 'mobx-state-tree'; 28import type { IJsonPatch } from 'mobx-state-tree';
29 29
30import type MainStore from '../../../stores/MainStore'; 30import type MainStore from '../../../stores/MainStore.js';
31import getLogger from '../../../utils/getLogger'; 31import getLogger from '../../../utils/getLogger.js';
32import RendererBridge from '../RendererBridge'; 32import RendererBridge from '../RendererBridge.js';
33import type { MainWindow, ServiceView } from '../types'; 33import type { MainWindow, ServiceView } from '../types.js';
34 34
35import ElectronServiceView from './ElectronServiceView'; 35import ElectronServiceView from './ElectronServiceView.js';
36import type ElectronViewFactory from './ElectronViewFactory'; 36import type ElectronViewFactory from './ElectronViewFactory.js';
37import { openDevToolsWhenReady } from './devTools'; 37import { openDevToolsWhenReady } from './devTools.js';
38import lockWebContentsToFile from './lockWebContentsToFile'; 38import lockWebContentsToFile from './lockWebContentsToFile.js';
39 39
40const log = getLogger('ElectronMainWindow'); 40const log = getLogger('ElectronMainWindow');
41 41
diff --git a/packages/main/src/infrastructure/electron/impl/ElectronPartition.ts b/packages/main/src/infrastructure/electron/impl/ElectronPartition.ts
index e60ce21..d1220c5 100644
--- a/packages/main/src/infrastructure/electron/impl/ElectronPartition.ts
+++ b/packages/main/src/infrastructure/electron/impl/ElectronPartition.ts
@@ -20,10 +20,10 @@
20 20
21import { Session, session } from 'electron'; 21import { Session, session } from 'electron';
22 22
23import type Profile from '../../../stores/Profile'; 23import type Profile from '../../../stores/Profile.js';
24import type { Partition } from '../types'; 24import type { Partition } from '../types.js';
25 25
26import type ElectronViewFactory from './ElectronViewFactory'; 26import type ElectronViewFactory from './ElectronViewFactory.js';
27 27
28export default class ElectronPartition implements Partition { 28export default class ElectronPartition implements Partition {
29 readonly id: string; 29 readonly id: string;
diff --git a/packages/main/src/infrastructure/electron/impl/ElectronServiceView.ts b/packages/main/src/infrastructure/electron/impl/ElectronServiceView.ts
index a9298bd..91247c8 100644
--- a/packages/main/src/infrastructure/electron/impl/ElectronServiceView.ts
+++ b/packages/main/src/infrastructure/electron/impl/ElectronServiceView.ts
@@ -20,13 +20,13 @@
20 20
21import { BrowserView } from 'electron'; 21import { BrowserView } from 'electron';
22 22
23import type Service from '../../../stores/Service'; 23import type Service from '../../../stores/Service.js';
24import getLogger from '../../../utils/getLogger'; 24import getLogger from '../../../utils/getLogger.js';
25import type Resources from '../../resources/Resources'; 25import type Resources from '../../resources/Resources.js';
26import type { ServiceView } from '../types'; 26import type { ServiceView } from '../types.js';
27 27
28import ElectronPartition from './ElectronPartition'; 28import ElectronPartition from './ElectronPartition.js';
29import type ElectronViewFactory from './ElectronViewFactory'; 29import type ElectronViewFactory from './ElectronViewFactory.js';
30 30
31const log = getLogger('ElectronServiceView'); 31const log = getLogger('ElectronServiceView');
32 32
diff --git a/packages/main/src/infrastructure/electron/impl/ElectronViewFactory.ts b/packages/main/src/infrastructure/electron/impl/ElectronViewFactory.ts
index c72860d..df3de85 100644
--- a/packages/main/src/infrastructure/electron/impl/ElectronViewFactory.ts
+++ b/packages/main/src/infrastructure/electron/impl/ElectronViewFactory.ts
@@ -18,16 +18,21 @@
18 * SPDX-License-Identifier: AGPL-3.0-only 18 * SPDX-License-Identifier: AGPL-3.0-only
19 */ 19 */
20 20
21import type MainStore from '../../../stores/MainStore'; 21import type MainStore from '../../../stores/MainStore.js';
22import type Profile from '../../../stores/Profile'; 22import type Profile from '../../../stores/Profile.js';
23import type Service from '../../../stores/Service'; 23import type Service from '../../../stores/Service.js';
24import type Resources from '../../resources/Resources'; 24import type Resources from '../../resources/Resources.js';
25import type UserAgents from '../UserAgents'; 25import type UserAgents from '../UserAgents.js';
26import type { MainWindow, Partition, ServiceView, ViewFactory } from '../types'; 26import type {
27 MainWindow,
28 Partition,
29 ServiceView,
30 ViewFactory,
31} from '../types.js';
27 32
28import ElectronMainWindow from './ElectronMainWindow'; 33import ElectronMainWindow from './ElectronMainWindow.js';
29import ElectronPartition from './ElectronPartition'; 34import ElectronPartition from './ElectronPartition.js';
30import ElectronServiceView from './ElectronServiceView'; 35import ElectronServiceView from './ElectronServiceView.js';
31 36
32export default class ElectronViewFactory implements ViewFactory { 37export default class ElectronViewFactory implements ViewFactory {
33 private readonly webContentsIdToServiceView = new Map< 38 private readonly webContentsIdToServiceView = new Map<
diff --git a/packages/main/src/infrastructure/electron/impl/__tests__/electron.integ.test.ts b/packages/main/src/infrastructure/electron/impl/__tests__/electron.integ.test.ts
index 67cf689..75b12ac 100644
--- a/packages/main/src/infrastructure/electron/impl/__tests__/electron.integ.test.ts
+++ b/packages/main/src/infrastructure/electron/impl/__tests__/electron.integ.test.ts
@@ -1,6 +1,6 @@
1import { BrowserWindow } from 'electron'; 1import { BrowserWindow } from 'electron';
2 2
3import '../ElectronMainWindow'; 3import '../ElectronMainWindow.js';
4 4
5test('create a BrowserWindow', async () => { 5test('create a BrowserWindow', async () => {
6 const w = new BrowserWindow(); 6 const w = new BrowserWindow();
diff --git a/packages/main/src/infrastructure/electron/impl/__tests__/hardenSession.test.ts b/packages/main/src/infrastructure/electron/impl/__tests__/hardenSession.test.ts
index 7b70d10..bbbd675 100644
--- a/packages/main/src/infrastructure/electron/impl/__tests__/hardenSession.test.ts
+++ b/packages/main/src/infrastructure/electron/impl/__tests__/hardenSession.test.ts
@@ -30,8 +30,8 @@ import type {
30 WebContents, 30 WebContents,
31} from 'electron'; 31} from 'electron';
32 32
33import type Resources from '../../../resources/Resources'; 33import type Resources from '../../../resources/Resources.js';
34import hardenSession from '../hardenSession'; 34import hardenSession from '../hardenSession.js';
35 35
36const permissions = [ 36const permissions = [
37 'clipboard-read', 37 'clipboard-read',
diff --git a/packages/main/src/infrastructure/electron/impl/__tests__/lockWebContentsToFile.test.ts b/packages/main/src/infrastructure/electron/impl/__tests__/lockWebContentsToFile.test.ts
index 47525d3..6332db7 100644
--- a/packages/main/src/infrastructure/electron/impl/__tests__/lockWebContentsToFile.test.ts
+++ b/packages/main/src/infrastructure/electron/impl/__tests__/lockWebContentsToFile.test.ts
@@ -25,8 +25,8 @@ import { fake } from '@sophie/test-utils';
25import type { Event, HandlerDetails, WebContents } from 'electron'; 25import type { Event, HandlerDetails, WebContents } from 'electron';
26import { mocked } from 'jest-mock'; 26import { mocked } from 'jest-mock';
27 27
28import type Resources from '../../../resources/Resources'; 28import type Resources from '../../../resources/Resources.js';
29import lockWebContentsToFile from '../lockWebContentsToFile'; 29import lockWebContentsToFile from '../lockWebContentsToFile.js';
30 30
31type WillNavigateHandler = (event: Event, url: string) => void; 31type WillNavigateHandler = (event: Event, url: string) => void;
32 32
diff --git a/packages/main/src/infrastructure/electron/impl/electronShell.ts b/packages/main/src/infrastructure/electron/impl/electronShell.ts
index f7f7001..da246c0 100644
--- a/packages/main/src/infrastructure/electron/impl/electronShell.ts
+++ b/packages/main/src/infrastructure/electron/impl/electronShell.ts
@@ -23,7 +23,7 @@ import { writeFile } from 'node:fs/promises';
23import { app, dialog, shell } from 'electron'; 23import { app, dialog, shell } from 'electron';
24import { getLogger } from 'loglevel'; 24import { getLogger } from 'loglevel';
25 25
26import type MainEnv from '../../../stores/MainEnv'; 26import type MainEnv from '../../../stores/MainEnv.js';
27 27
28const log = getLogger('ElectronShell'); 28const log = getLogger('ElectronShell');
29 29
diff --git a/packages/main/src/infrastructure/electron/impl/hardenSession.ts b/packages/main/src/infrastructure/electron/impl/hardenSession.ts
index fc358a1..0574146 100644
--- a/packages/main/src/infrastructure/electron/impl/hardenSession.ts
+++ b/packages/main/src/infrastructure/electron/impl/hardenSession.ts
@@ -22,8 +22,8 @@ import { URL } from 'node:url';
22 22
23import type { Session } from 'electron'; 23import type { Session } from 'electron';
24 24
25import getLogger from '../../../utils/getLogger'; 25import getLogger from '../../../utils/getLogger.js';
26import type Resources from '../../resources/Resources'; 26import type Resources from '../../resources/Resources.js';
27 27
28/** 28/**
29 * URL prefixes Sophie is allowed load in dev mode. 29 * URL prefixes Sophie is allowed load in dev mode.
diff --git a/packages/main/src/infrastructure/electron/impl/lockWebContentsToFile.ts b/packages/main/src/infrastructure/electron/impl/lockWebContentsToFile.ts
index da40a56..338c845 100644
--- a/packages/main/src/infrastructure/electron/impl/lockWebContentsToFile.ts
+++ b/packages/main/src/infrastructure/electron/impl/lockWebContentsToFile.ts
@@ -20,9 +20,9 @@
20 20
21import type { WebContents } from 'electron'; 21import type { WebContents } from 'electron';
22 22
23import getLogger from '../../../utils/getLogger'; 23import getLogger from '../../../utils/getLogger.js';
24import isErrno from '../../../utils/isErrno'; 24import isErrno from '../../../utils/isErrno.js';
25import type Resources from '../../resources/Resources'; 25import type Resources from '../../resources/Resources.js';
26 26
27const log = getLogger('lockWebContentsToFile'); 27const log = getLogger('lockWebContentsToFile');
28 28
diff --git a/packages/main/src/infrastructure/electron/impl/setApplicationMenu.ts b/packages/main/src/infrastructure/electron/impl/setApplicationMenu.ts
index 32b2d4d..7e45401 100644
--- a/packages/main/src/infrastructure/electron/impl/setApplicationMenu.ts
+++ b/packages/main/src/infrastructure/electron/impl/setApplicationMenu.ts
@@ -22,7 +22,7 @@ import { Menu, MenuItemConstructorOptions } from 'electron';
22import { autorun } from 'mobx'; 22import { autorun } from 'mobx';
23import { addDisposer } from 'mobx-state-tree'; 23import { addDisposer } from 'mobx-state-tree';
24 24
25import type MainStore from '../../../stores/MainStore'; 25import type MainStore from '../../../stores/MainStore.js';
26 26
27export default function setApplicationMenu( 27export default function setApplicationMenu(
28 store: MainStore, 28 store: MainStore,
diff --git a/packages/main/src/infrastructure/electron/types.ts b/packages/main/src/infrastructure/electron/types.ts
index 92ca9ad..608a342 100644
--- a/packages/main/src/infrastructure/electron/types.ts
+++ b/packages/main/src/infrastructure/electron/types.ts
@@ -18,9 +18,9 @@
18 * SPDX-License-Identifier: AGPL-3.0-only 18 * SPDX-License-Identifier: AGPL-3.0-only
19 */ 19 */
20 20
21import type MainStore from '../../stores/MainStore'; 21import type MainStore from '../../stores/MainStore.js';
22import type Profile from '../../stores/Profile'; 22import type Profile from '../../stores/Profile.js';
23import type Service from '../../stores/Service'; 23import type Service from '../../stores/Service.js';
24 24
25export interface ViewFactory { 25export interface ViewFactory {
26 createMainWindow(store: MainStore): Promise<MainWindow>; 26 createMainWindow(store: MainStore): Promise<MainWindow>;
diff --git a/packages/main/src/infrastructure/resources/impl/__tests__/getDistResources.test.ts b/packages/main/src/infrastructure/resources/impl/__tests__/getDistResources.test.ts
index 649536b..c7c6e22 100644
--- a/packages/main/src/infrastructure/resources/impl/__tests__/getDistResources.test.ts
+++ b/packages/main/src/infrastructure/resources/impl/__tests__/getDistResources.test.ts
@@ -20,8 +20,8 @@
20 20
21import os from 'node:os'; 21import os from 'node:os';
22 22
23import Resources from '../../Resources'; 23import Resources from '../../Resources.js';
24import getDistResources from '../getDistResources'; 24import getDistResources from '../getDistResources.js';
25 25
26const defaultDevServerURL = 'http://localhost:3000/'; 26const defaultDevServerURL = 'http://localhost:3000/';
27 27
diff --git a/packages/main/src/infrastructure/resources/impl/getDistResources.ts b/packages/main/src/infrastructure/resources/impl/getDistResources.ts
index 3c1ffb3..3b7827c 100644
--- a/packages/main/src/infrastructure/resources/impl/getDistResources.ts
+++ b/packages/main/src/infrastructure/resources/impl/getDistResources.ts
@@ -21,7 +21,7 @@
21import path from 'node:path'; 21import path from 'node:path';
22import { pathToFileURL, URL } from 'node:url'; 22import { pathToFileURL, URL } from 'node:url';
23 23
24import Resources from '../Resources'; 24import Resources from '../Resources.js';
25 25
26export default function getDistResources( 26export default function getDistResources(
27 devMode: boolean, 27 devMode: boolean,
diff --git a/packages/main/src/initReactions.ts b/packages/main/src/initReactions.ts
index 05bc205..cbc0265 100644
--- a/packages/main/src/initReactions.ts
+++ b/packages/main/src/initReactions.ts
@@ -20,20 +20,20 @@
20 20
21import { app, session } from 'electron'; 21import { app, session } from 'electron';
22 22
23import LocalizationFiles from './i18n/impl/LocaltizationFiles'; 23import LocalizationFiles from './i18n/impl/LocaltizationFiles.js';
24import loadLocalization from './i18n/loadLocalization'; 24import loadLocalization from './i18n/loadLocalization.js';
25import ConfigFile from './infrastructure/config/impl/ConfigFile'; 25import ConfigFile from './infrastructure/config/impl/ConfigFile.js';
26import UserAgents from './infrastructure/electron/UserAgents'; 26import UserAgents from './infrastructure/electron/UserAgents.js';
27import ElectronViewFactory from './infrastructure/electron/impl/ElectronViewFactory'; 27import ElectronViewFactory from './infrastructure/electron/impl/ElectronViewFactory.js';
28import { installDevToolsExtensions } from './infrastructure/electron/impl/devTools'; 28import { installDevToolsExtensions } from './infrastructure/electron/impl/devTools.js';
29import hardenSession from './infrastructure/electron/impl/hardenSession'; 29import hardenSession from './infrastructure/electron/impl/hardenSession.js';
30import setApplicationMenu from './infrastructure/electron/impl/setApplicationMenu'; 30import setApplicationMenu from './infrastructure/electron/impl/setApplicationMenu.js';
31import getDistResources from './infrastructure/resources/impl/getDistResources'; 31import getDistResources from './infrastructure/resources/impl/getDistResources.js';
32import loadServices from './reactions/loadServices'; 32import loadServices from './reactions/loadServices.js';
33import synchronizeConfig from './reactions/synchronizeConfig'; 33import synchronizeConfig from './reactions/synchronizeConfig.js';
34import synchronizeNativeTheme from './reactions/synchronizeNativeTheme'; 34import synchronizeNativeTheme from './reactions/synchronizeNativeTheme.js';
35import type MainStore from './stores/MainStore'; 35import type MainStore from './stores/MainStore.js';
36import type Disposer from './utils/Disposer'; 36import type Disposer from './utils/Disposer.js';
37 37
38export default async function initReactions( 38export default async function initReactions(
39 store: MainStore, 39 store: MainStore,
diff --git a/packages/main/src/reactions/__tests__/synchronizeConfig.test.ts b/packages/main/src/reactions/__tests__/synchronizeConfig.test.ts
index f0e88c1..d4d8abf 100644
--- a/packages/main/src/reactions/__tests__/synchronizeConfig.test.ts
+++ b/packages/main/src/reactions/__tests__/synchronizeConfig.test.ts
@@ -21,10 +21,10 @@
21import { jest } from '@jest/globals'; 21import { jest } from '@jest/globals';
22import { mocked } from 'jest-mock'; 22import { mocked } from 'jest-mock';
23 23
24import type ConfigRepository from '../../infrastructure/config/ConfigRepository'; 24import type ConfigRepository from '../../infrastructure/config/ConfigRepository.js';
25import SharedStore from '../../stores/SharedStore'; 25import SharedStore from '../../stores/SharedStore.js';
26import type Disposer from '../../utils/Disposer'; 26import type Disposer from '../../utils/Disposer.js';
27import synchronizeConfig, { serializeConfig } from '../synchronizeConfig'; 27import synchronizeConfig, { serializeConfig } from '../synchronizeConfig.js';
28 28
29let store: SharedStore; 29let store: SharedStore;
30const repository: ConfigRepository = { 30const repository: ConfigRepository = {
diff --git a/packages/main/src/reactions/__tests__/synchronizeNativeTheme.test.ts b/packages/main/src/reactions/__tests__/synchronizeNativeTheme.test.ts
index 05f14fb..c89f989 100644
--- a/packages/main/src/reactions/__tests__/synchronizeNativeTheme.test.ts
+++ b/packages/main/src/reactions/__tests__/synchronizeNativeTheme.test.ts
@@ -21,8 +21,8 @@
21import { jest } from '@jest/globals'; 21import { jest } from '@jest/globals';
22import { mocked } from 'jest-mock'; 22import { mocked } from 'jest-mock';
23 23
24import SharedStore from '../../stores/SharedStore'; 24import SharedStore from '../../stores/SharedStore.js';
25import type Disposer from '../../utils/Disposer'; 25import type Disposer from '../../utils/Disposer.js';
26 26
27let shouldUseDarkColors = false; 27let shouldUseDarkColors = false;
28 28
@@ -39,7 +39,7 @@ jest.unstable_mockModule('electron', () => ({
39 39
40const { nativeTheme } = await import('electron'); 40const { nativeTheme } = await import('electron');
41const { default: synchronizeNativeTheme } = await import( 41const { default: synchronizeNativeTheme } = await import(
42 '../synchronizeNativeTheme' 42 '../synchronizeNativeTheme.js'
43); 43);
44 44
45let store: SharedStore; 45let store: SharedStore;
diff --git a/packages/main/src/reactions/loadServices.ts b/packages/main/src/reactions/loadServices.ts
index 50fd2cb..1325a36 100644
--- a/packages/main/src/reactions/loadServices.ts
+++ b/packages/main/src/reactions/loadServices.ts
@@ -26,10 +26,10 @@ import type {
26 Partition, 26 Partition,
27 ServiceView, 27 ServiceView,
28 ViewFactory, 28 ViewFactory,
29} from '../infrastructure/electron/types'; 29} from '../infrastructure/electron/types.js';
30import type MainStore from '../stores/MainStore'; 30import type MainStore from '../stores/MainStore.js';
31import type Service from '../stores/Service'; 31import type Service from '../stores/Service.js';
32import getLogger from '../utils/getLogger'; 32import getLogger from '../utils/getLogger.js';
33 33
34const log = getLogger('loadServices'); 34const log = getLogger('loadServices');
35 35
diff --git a/packages/main/src/reactions/synchronizeConfig.ts b/packages/main/src/reactions/synchronizeConfig.ts
index 5fe924a..f3c8b4a 100644
--- a/packages/main/src/reactions/synchronizeConfig.ts
+++ b/packages/main/src/reactions/synchronizeConfig.ts
@@ -21,11 +21,11 @@
21import { debounce } from 'lodash-es'; 21import { debounce } from 'lodash-es';
22import { reaction } from 'mobx'; 22import { reaction } from 'mobx';
23 23
24import type ConfigRepository from '../infrastructure/config/ConfigRepository'; 24import type ConfigRepository from '../infrastructure/config/ConfigRepository.js';
25import type SharedStore from '../stores/SharedStore'; 25import type SharedStore from '../stores/SharedStore.js';
26import type Config from '../stores/config/Config'; 26import type Config from '../stores/config/Config.js';
27import type Disposer from '../utils/Disposer'; 27import type Disposer from '../utils/Disposer.js';
28import getLogger from '../utils/getLogger'; 28import getLogger from '../utils/getLogger.js';
29 29
30const DEFAULT_CONFIG_DEBOUNCE_TIME_MS = 1000; 30const DEFAULT_CONFIG_DEBOUNCE_TIME_MS = 1000;
31 31
diff --git a/packages/main/src/reactions/synchronizeNativeTheme.ts b/packages/main/src/reactions/synchronizeNativeTheme.ts
index 384d54d..10d5f69 100644
--- a/packages/main/src/reactions/synchronizeNativeTheme.ts
+++ b/packages/main/src/reactions/synchronizeNativeTheme.ts
@@ -21,9 +21,9 @@
21import { nativeTheme } from 'electron'; 21import { nativeTheme } from 'electron';
22import { autorun } from 'mobx'; 22import { autorun } from 'mobx';
23 23
24import type SharedStore from '../stores/SharedStore'; 24import type SharedStore from '../stores/SharedStore.js';
25import type Disposer from '../utils/Disposer'; 25import type Disposer from '../utils/Disposer.js';
26import getLogger from '../utils/getLogger'; 26import getLogger from '../utils/getLogger.js';
27 27
28const log = getLogger('synchronizeNativeTheme'); 28const log = getLogger('synchronizeNativeTheme');
29 29
diff --git a/packages/main/src/stores/GlobalSettings.ts b/packages/main/src/stores/GlobalSettings.ts
index 84248ea..9ebc1b1 100644
--- a/packages/main/src/stores/GlobalSettings.ts
+++ b/packages/main/src/stores/GlobalSettings.ts
@@ -21,9 +21,9 @@
21import { defineGlobalSettingsModel, ThemeSource } from '@sophie/shared'; 21import { defineGlobalSettingsModel, ThemeSource } from '@sophie/shared';
22import { Instance, resolveIdentifier } from 'mobx-state-tree'; 22import { Instance, resolveIdentifier } from 'mobx-state-tree';
23 23
24import getLogger from '../utils/getLogger'; 24import getLogger from '../utils/getLogger.js';
25 25
26import Service from './Service'; 26import Service from './Service.js';
27 27
28const log = getLogger('sharedStore'); 28const log = getLogger('sharedStore');
29 29
diff --git a/packages/main/src/stores/MainStore.ts b/packages/main/src/stores/MainStore.ts
index b3e2830..1abd20c 100644
--- a/packages/main/src/stores/MainStore.ts
+++ b/packages/main/src/stores/MainStore.ts
@@ -22,16 +22,16 @@ import type { Action } from '@sophie/shared';
22import type { ResourceKey } from 'i18next'; 22import type { ResourceKey } from 'i18next';
23import { flow, Instance, types } from 'mobx-state-tree'; 23import { flow, Instance, types } from 'mobx-state-tree';
24 24
25import type I18nStore from '../i18n/I18nStore'; 25import type I18nStore from '../i18n/I18nStore.js';
26import type { UseTranslationResult } from '../i18n/I18nStore'; 26import type { UseTranslationResult } from '../i18n/I18nStore.js';
27import type { MainWindow } from '../infrastructure/electron/types'; 27import type { MainWindow } from '../infrastructure/electron/types.js';
28import getLogger from '../utils/getLogger'; 28import getLogger from '../utils/getLogger.js';
29 29
30import GlobalSettings from './GlobalSettings'; 30import GlobalSettings from './GlobalSettings.js';
31import { getEnv } from './MainEnv'; 31import { getEnv } from './MainEnv.js';
32import Profile from './Profile'; 32import Profile from './Profile.js';
33import Service from './Service'; 33import Service from './Service.js';
34import SharedStore from './SharedStore'; 34import SharedStore from './SharedStore.js';
35 35
36const log = getLogger('MainStore'); 36const log = getLogger('MainStore');
37 37
diff --git a/packages/main/src/stores/Profile.ts b/packages/main/src/stores/Profile.ts
index 405a5d4..b4343a0 100644
--- a/packages/main/src/stores/Profile.ts
+++ b/packages/main/src/stores/Profile.ts
@@ -21,7 +21,7 @@
21import { Certificate, Profile as ProfileBase } from '@sophie/shared'; 21import { Certificate, Profile as ProfileBase } from '@sophie/shared';
22import { clone, getSnapshot, Instance } from 'mobx-state-tree'; 22import { clone, getSnapshot, Instance } from 'mobx-state-tree';
23 23
24import type ProfileConfig from './config/ProfileConfig'; 24import type ProfileConfig from './config/ProfileConfig.js';
25 25
26const Profile = ProfileBase.views((self) => ({ 26const Profile = ProfileBase.views((self) => ({
27 get config(): ProfileConfig { 27 get config(): ProfileConfig {
diff --git a/packages/main/src/stores/Service.ts b/packages/main/src/stores/Service.ts
index 9256f65..3b7d0b2 100644
--- a/packages/main/src/stores/Service.ts
+++ b/packages/main/src/stores/Service.ts
@@ -29,12 +29,12 @@ import {
29} from '@sophie/shared'; 29} from '@sophie/shared';
30import { type Instance, getSnapshot, cast, flow } from 'mobx-state-tree'; 30import { type Instance, getSnapshot, cast, flow } from 'mobx-state-tree';
31 31
32import type { ServiceView } from '../infrastructure/electron/types'; 32import type { ServiceView } from '../infrastructure/electron/types.js';
33import getLogger from '../utils/getLogger'; 33import getLogger from '../utils/getLogger.js';
34 34
35import { getEnv } from './MainEnv'; 35import { getEnv } from './MainEnv.js';
36import ServiceSettings from './ServiceSettings'; 36import ServiceSettings from './ServiceSettings.js';
37import type ServiceConfig from './config/ServiceConfig'; 37import type ServiceConfig from './config/ServiceConfig.js';
38 38
39const log = getLogger('Service'); 39const log = getLogger('Service');
40 40
diff --git a/packages/main/src/stores/ServiceSettings.ts b/packages/main/src/stores/ServiceSettings.ts
index 5d37347..d5c2843 100644
--- a/packages/main/src/stores/ServiceSettings.ts
+++ b/packages/main/src/stores/ServiceSettings.ts
@@ -21,7 +21,7 @@
21import { defineServiceSettingsModel } from '@sophie/shared'; 21import { defineServiceSettingsModel } from '@sophie/shared';
22import { Instance } from 'mobx-state-tree'; 22import { Instance } from 'mobx-state-tree';
23 23
24import Profile from './Profile'; 24import Profile from './Profile.js';
25 25
26const ServiceSettings = defineServiceSettingsModel(Profile); 26const ServiceSettings = defineServiceSettingsModel(Profile);
27 27
diff --git a/packages/main/src/stores/SharedStore.ts b/packages/main/src/stores/SharedStore.ts
index f93c3d4..e1c2d3c 100644
--- a/packages/main/src/stores/SharedStore.ts
+++ b/packages/main/src/stores/SharedStore.ts
@@ -21,13 +21,13 @@
21import { defineSharedStoreModel, WritingDirection } from '@sophie/shared'; 21import { defineSharedStoreModel, WritingDirection } from '@sophie/shared';
22import { getSnapshot, Instance } from 'mobx-state-tree'; 22import { getSnapshot, Instance } from 'mobx-state-tree';
23 23
24import getLogger from '../utils/getLogger'; 24import getLogger from '../utils/getLogger.js';
25 25
26import GlobalSettings from './GlobalSettings'; 26import GlobalSettings from './GlobalSettings.js';
27import Profile from './Profile'; 27import Profile from './Profile.js';
28import Service from './Service'; 28import Service from './Service.js';
29import type Config from './config/Config'; 29import type Config from './config/Config.js';
30import loadConfig from './config/loadConfig'; 30import loadConfig from './config/loadConfig.js';
31 31
32const log = getLogger('SharedStore'); 32const log = getLogger('SharedStore');
33 33
diff --git a/packages/main/src/stores/__tests__/SharedStore.test.ts b/packages/main/src/stores/__tests__/SharedStore.test.ts
index 0ed63e3..78396da 100644
--- a/packages/main/src/stores/__tests__/SharedStore.test.ts
+++ b/packages/main/src/stores/__tests__/SharedStore.test.ts
@@ -18,10 +18,10 @@
18 * SPDX-License-Identifier: AGPL-3.0-only 18 * SPDX-License-Identifier: AGPL-3.0-only
19 */ 19 */
20 20
21import SharedStore from '../SharedStore'; 21import SharedStore from '../SharedStore.js';
22import type Config from '../config/Config'; 22import type Config from '../config/Config.js';
23import type ProfileConfig from '../config/ProfileConfig'; 23import type ProfileConfig from '../config/ProfileConfig.js';
24import type ServiceConfig from '../config/ServiceConfig'; 24import type ServiceConfig from '../config/ServiceConfig.js';
25 25
26const profileProps: ProfileConfig = { 26const profileProps: ProfileConfig = {
27 name: 'Test profile', 27 name: 'Test profile',
diff --git a/packages/main/src/stores/config/Config.ts b/packages/main/src/stores/config/Config.ts
index c38e3c5..adb10a6 100644
--- a/packages/main/src/stores/config/Config.ts
+++ b/packages/main/src/stores/config/Config.ts
@@ -18,10 +18,10 @@
18 * SPDX-License-Identifier: AGPL-3.0-only 18 * SPDX-License-Identifier: AGPL-3.0-only
19 */ 19 */
20 20
21import type { GlobalSettingsSnapshotIn } from '../GlobalSettings'; 21import type { GlobalSettingsSnapshotIn } from '../GlobalSettings.js';
22 22
23import type ProfileConfig from './ProfileConfig'; 23import type ProfileConfig from './ProfileConfig.js';
24import type ServiceConfig from './ServiceConfig'; 24import type ServiceConfig from './ServiceConfig.js';
25 25
26export default interface Config extends GlobalSettingsSnapshotIn { 26export default interface Config extends GlobalSettingsSnapshotIn {
27 profiles?: ProfileConfig[] | undefined; 27 profiles?: ProfileConfig[] | undefined;
diff --git a/packages/main/src/stores/config/loadConfig.ts b/packages/main/src/stores/config/loadConfig.ts
index 2463084..8a1adcb 100644
--- a/packages/main/src/stores/config/loadConfig.ts
+++ b/packages/main/src/stores/config/loadConfig.ts
@@ -30,14 +30,14 @@ import {
30import { nanoid } from 'nanoid'; 30import { nanoid } from 'nanoid';
31import slug from 'slug'; 31import slug from 'slug';
32 32
33import GlobalSettings from '../GlobalSettings'; 33import GlobalSettings from '../GlobalSettings.js';
34import type Profile from '../Profile'; 34import type Profile from '../Profile.js';
35import type Service from '../Service'; 35import type Service from '../Service.js';
36import type { ServiceSettingsSnapshotIn } from '../ServiceSettings'; 36import type { ServiceSettingsSnapshotIn } from '../ServiceSettings.js';
37 37
38import type Config from './Config'; 38import type Config from './Config.js';
39import type ProfileConfig from './ProfileConfig'; 39import type ProfileConfig from './ProfileConfig.js';
40import type ServiceConfig from './ServiceConfig'; 40import type ServiceConfig from './ServiceConfig.js';
41 41
42function generateId(name?: string | undefined): string { 42function generateId(name?: string | undefined): string {
43 const nameSlug = typeof name === 'undefined' ? '' : slug(name); 43 const nameSlug = typeof name === 'undefined' ? '' : slug(name);
diff --git a/packages/preload/src/contextBridge/__tests__/createSophieRenderer.test.ts b/packages/preload/src/contextBridge/__tests__/createSophieRenderer.test.ts
index 21620ed..b6af137 100644
--- a/packages/preload/src/contextBridge/__tests__/createSophieRenderer.test.ts
+++ b/packages/preload/src/contextBridge/__tests__/createSophieRenderer.test.ts
@@ -41,7 +41,7 @@ jest.unstable_mockModule('electron', () => ({
41const { ipcRenderer } = await import('electron'); 41const { ipcRenderer } = await import('electron');
42 42
43const { default: createSophieRenderer } = await import( 43const { default: createSophieRenderer } = await import(
44 '../createSophieRenderer' 44 '../createSophieRenderer.js'
45); 45);
46 46
47const event: Electron.IpcRendererEvent = 47const event: Electron.IpcRendererEvent =
diff --git a/packages/preload/src/contextBridge/createSophieRenderer.ts b/packages/preload/src/contextBridge/createSophieRenderer.ts
index 3de9d9e..a05efd0 100644
--- a/packages/preload/src/contextBridge/createSophieRenderer.ts
+++ b/packages/preload/src/contextBridge/createSophieRenderer.ts
@@ -20,8 +20,12 @@
20 20
21import { SophieRenderer } from '@sophie/shared'; 21import { SophieRenderer } from '@sophie/shared';
22 22
23import SharedStoreConnector, { dispatchAction } from './SharedStoreConnector'; 23import SharedStoreConnector, {
24import TranslationsConnector, { getTranslation } from './TranslationsConnector'; 24 dispatchAction,
25} from './SharedStoreConnector.js';
26import TranslationsConnector, {
27 getTranslation,
28} from './TranslationsConnector.js';
25 29
26export default function createSophieRenderer(devMode: boolean): SophieRenderer { 30export default function createSophieRenderer(devMode: boolean): SophieRenderer {
27 const sharedStoreConnector = new SharedStoreConnector(devMode); 31 const sharedStoreConnector = new SharedStoreConnector(devMode);
diff --git a/packages/preload/src/index.ts b/packages/preload/src/index.ts
index f13220c..3ad6fee 100644
--- a/packages/preload/src/index.ts
+++ b/packages/preload/src/index.ts
@@ -20,7 +20,7 @@
20 20
21import { contextBridge } from 'electron'; 21import { contextBridge } from 'electron';
22 22
23import createSophieRenderer from './contextBridge/createSophieRenderer'; 23import createSophieRenderer from './contextBridge/createSophieRenderer.js';
24 24
25const isDevelopment = import.meta.env.MODE === 'development'; 25const isDevelopment = import.meta.env.MODE === 'development';
26 26
diff --git a/packages/preload/tsconfig.json b/packages/preload/tsconfig.json
index 18c72b4..80ff957 100644
--- a/packages/preload/tsconfig.json
+++ b/packages/preload/tsconfig.json
@@ -2,7 +2,7 @@
2 "extends": "../../config/tsconfig.base.json", 2 "extends": "../../config/tsconfig.base.json",
3 "compilerOptions": { 3 "compilerOptions": {
4 "noEmit": true, 4 "noEmit": true,
5 "lib": ["dom", "dom.iterable", "esnext"], 5 "lib": ["dom", "dom.iterable", "es2021"],
6 "types": ["@types/jest"] 6 "types": ["@types/jest"]
7 }, 7 },
8 "references": [ 8 "references": [
diff --git a/packages/renderer/src/components/App.tsx b/packages/renderer/src/components/App.tsx
index 86e2a55..193afe6 100644
--- a/packages/renderer/src/components/App.tsx
+++ b/packages/renderer/src/components/App.tsx
@@ -23,11 +23,11 @@ import { styled } from '@mui/material/styles';
23import { observer } from 'mobx-react-lite'; 23import { observer } from 'mobx-react-lite';
24import React, { useCallback } from 'react'; 24import React, { useCallback } from 'react';
25 25
26import type RendererStore from '../stores/RendererStore'; 26import type RendererStore from '../stores/RendererStore.js';
27 27
28import ServicePanel from './ServicePanel'; 28import ServicePanel from './ServicePanel.js';
29import WindowTitle from './WindowTitle'; 29import WindowTitle from './WindowTitle.js';
30import Sidebar from './sidebar/Sidebar'; 30import Sidebar from './sidebar/Sidebar.js';
31 31
32const AppRoot = styled(Box)({ 32const AppRoot = styled(Box)({
33 display: 'flex', 33 display: 'flex',
diff --git a/packages/renderer/src/components/BrowserViewPlaceholder.tsx b/packages/renderer/src/components/BrowserViewPlaceholder.tsx
index 2bfc9b0..b309c4d 100644
--- a/packages/renderer/src/components/BrowserViewPlaceholder.tsx
+++ b/packages/renderer/src/components/BrowserViewPlaceholder.tsx
@@ -22,7 +22,7 @@ import Box from '@mui/material/Box';
22import throttle from 'lodash-es/throttle'; 22import throttle from 'lodash-es/throttle';
23import React, { ReactNode, useCallback, useRef } from 'react'; 23import React, { ReactNode, useCallback, useRef } from 'react';
24 24
25import Service from '../stores/Service'; 25import Service from '../stores/Service.js';
26 26
27function BrowserViewPlaceholder({ 27function BrowserViewPlaceholder({
28 service, 28 service,
diff --git a/packages/renderer/src/components/ServicePanel.tsx b/packages/renderer/src/components/ServicePanel.tsx
index 2c79d99..507bc15 100644
--- a/packages/renderer/src/components/ServicePanel.tsx
+++ b/packages/renderer/src/components/ServicePanel.tsx
@@ -23,14 +23,14 @@ import { styled } from '@mui/material/styles';
23import { observer } from 'mobx-react-lite'; 23import { observer } from 'mobx-react-lite';
24import React from 'react'; 24import React from 'react';
25 25
26import type RendererStore from '../stores/RendererStore'; 26import type RendererStore from '../stores/RendererStore.js';
27import Service from '../stores/Service'; 27import Service from '../stores/Service.js';
28 28
29import BrowserViewPlaceholder from './BrowserViewPlaceholder'; 29import BrowserViewPlaceholder from './BrowserViewPlaceholder.js';
30import InsecureConnectionBanner from './banner/InsecureConnectionBanner'; 30import InsecureConnectionBanner from './banner/InsecureConnectionBanner.js';
31import NewWindowBanner from './banner/NewWindowBanner'; 31import NewWindowBanner from './banner/NewWindowBanner.js';
32import ErrorPage from './errorPage/ErrorPage'; 32import ErrorPage from './errorPage/ErrorPage.js';
33import LocationBar from './locationBar/LocationBar'; 33import LocationBar from './locationBar/LocationBar.js';
34 34
35const ServicePanelRoot = styled(Box, { 35const ServicePanelRoot = styled(Box, {
36 shouldForwardProp: (prop) => prop !== 'hidden', 36 shouldForwardProp: (prop) => prop !== 'hidden',
diff --git a/packages/renderer/src/components/ThemeProvider.tsx b/packages/renderer/src/components/ThemeProvider.tsx
index aa14039..50cc1c9 100644
--- a/packages/renderer/src/components/ThemeProvider.tsx
+++ b/packages/renderer/src/components/ThemeProvider.tsx
@@ -25,7 +25,7 @@ import {
25import { observer } from 'mobx-react-lite'; 25import { observer } from 'mobx-react-lite';
26import React, { type ReactNode } from 'react'; 26import React, { type ReactNode } from 'react';
27 27
28import type RendererStore from '../stores/RendererStore'; 28import type RendererStore from '../stores/RendererStore.js';
29 29
30function ThemeProvider({ 30function ThemeProvider({
31 children, 31 children,
diff --git a/packages/renderer/src/components/WindowTitle.tsx b/packages/renderer/src/components/WindowTitle.tsx
index 95e0fe6..fca8b4f 100644
--- a/packages/renderer/src/components/WindowTitle.tsx
+++ b/packages/renderer/src/components/WindowTitle.tsx
@@ -22,7 +22,7 @@ import { observer } from 'mobx-react-lite';
22import { useEffect } from 'react'; 22import { useEffect } from 'react';
23import { useTranslation } from 'react-i18next'; 23import { useTranslation } from 'react-i18next';
24 24
25import type Service from '../stores/Service'; 25import type Service from '../stores/Service.js';
26 26
27function WindowTitle({ 27function WindowTitle({
28 selectedService, 28 selectedService,
diff --git a/packages/renderer/src/components/banner/InsecureConnectionBanner.tsx b/packages/renderer/src/components/banner/InsecureConnectionBanner.tsx
index 0b70db6..6165153 100644
--- a/packages/renderer/src/components/banner/InsecureConnectionBanner.tsx
+++ b/packages/renderer/src/components/banner/InsecureConnectionBanner.tsx
@@ -27,9 +27,9 @@ import { observer } from 'mobx-react-lite';
27import React from 'react'; 27import React from 'react';
28import { useTranslation } from 'react-i18next'; 28import { useTranslation } from 'react-i18next';
29 29
30import type Service from '../../stores/Service'; 30import type Service from '../../stores/Service.js';
31 31
32import NotificationBanner from './NotificationBanner'; 32import NotificationBanner from './NotificationBanner.js';
33 33
34function InsecureConnectionBanner({ 34function InsecureConnectionBanner({
35 service, 35 service,
diff --git a/packages/renderer/src/components/banner/NewWindowBanner.tsx b/packages/renderer/src/components/banner/NewWindowBanner.tsx
index ad9d07d..b9b0e4a 100644
--- a/packages/renderer/src/components/banner/NewWindowBanner.tsx
+++ b/packages/renderer/src/components/banner/NewWindowBanner.tsx
@@ -29,9 +29,9 @@ import { observer } from 'mobx-react-lite';
29import React from 'react'; 29import React from 'react';
30import { Trans, useTranslation } from 'react-i18next'; 30import { Trans, useTranslation } from 'react-i18next';
31 31
32import type Service from '../../stores/Service'; 32import type Service from '../../stores/Service.js';
33 33
34import NotificationBanner from './NotificationBanner'; 34import NotificationBanner from './NotificationBanner.js';
35 35
36function NewWindowBanner({ 36function NewWindowBanner({
37 service, 37 service,
diff --git a/packages/renderer/src/components/banner/NotificationBanner.tsx b/packages/renderer/src/components/banner/NotificationBanner.tsx
index 818f498..70fe693 100644
--- a/packages/renderer/src/components/banner/NotificationBanner.tsx
+++ b/packages/renderer/src/components/banner/NotificationBanner.tsx
@@ -18,9 +18,9 @@
18 * SPDX-License-Identifier: AGPL-3.0-only 18 * SPDX-License-Identifier: AGPL-3.0-only
19 */ 19 */
20 20
21import { Typography } from '@mui/material';
22import Alert, { AlertColor } from '@mui/material/Alert'; 21import Alert, { AlertColor } from '@mui/material/Alert';
23import Box from '@mui/material/Box'; 22import Box from '@mui/material/Box';
23import Typography from '@mui/material/Typography';
24import { styled } from '@mui/material/styles'; 24import { styled } from '@mui/material/styles';
25import React, { ReactNode } from 'react'; 25import React, { ReactNode } from 'react';
26import { useTranslation } from 'react-i18next'; 26import { useTranslation } from 'react-i18next';
diff --git a/packages/renderer/src/components/errorPage/CertificateDetails.tsx b/packages/renderer/src/components/errorPage/CertificateDetails.tsx
index 51e7920..04d483e 100644
--- a/packages/renderer/src/components/errorPage/CertificateDetails.tsx
+++ b/packages/renderer/src/components/errorPage/CertificateDetails.tsx
@@ -32,10 +32,10 @@ import { observer } from 'mobx-react-lite';
32import React, { useState } from 'react'; 32import React, { useState } from 'react';
33import { useTranslation } from 'react-i18next'; 33import { useTranslation } from 'react-i18next';
34 34
35import type Service from '../../stores/Service'; 35import type Service from '../../stores/Service.js';
36 36
37import SingleCertificateDetails from './SingleCertificateDetails'; 37import SingleCertificateDetails from './SingleCertificateDetails.js';
38import TrustCertificateDialog from './TrustCertificateDialog'; 38import TrustCertificateDialog from './TrustCertificateDialog.js';
39 39
40const SUMMARY_ID = 'Sophie-CertificateDetails-header'; 40const SUMMARY_ID = 'Sophie-CertificateDetails-header';
41const DETAILS_ID = 'Sophie-CertificateDetails-content'; 41const DETAILS_ID = 'Sophie-CertificateDetails-content';
diff --git a/packages/renderer/src/components/errorPage/ErrorPage.tsx b/packages/renderer/src/components/errorPage/ErrorPage.tsx
index 10f54cd..dc01ddf 100644
--- a/packages/renderer/src/components/errorPage/ErrorPage.tsx
+++ b/packages/renderer/src/components/errorPage/ErrorPage.tsx
@@ -29,9 +29,9 @@ import { observer } from 'mobx-react-lite';
29import React from 'react'; 29import React from 'react';
30import { useTranslation } from 'react-i18next'; 30import { useTranslation } from 'react-i18next';
31 31
32import type Service from '../../stores/Service'; 32import type Service from '../../stores/Service.js';
33 33
34import CertificateDetails from './CertificateDetails'; 34import CertificateDetails from './CertificateDetails.js';
35 35
36interface ErrorDetails { 36interface ErrorDetails {
37 icon: JSX.Element; 37 icon: JSX.Element;
diff --git a/packages/renderer/src/components/locationBar/ExtraButtons.tsx b/packages/renderer/src/components/locationBar/ExtraButtons.tsx
index 4d4c3c4..bea115d 100644
--- a/packages/renderer/src/components/locationBar/ExtraButtons.tsx
+++ b/packages/renderer/src/components/locationBar/ExtraButtons.tsx
@@ -25,7 +25,7 @@ import { observer } from 'mobx-react-lite';
25import React from 'react'; 25import React from 'react';
26import { useTranslation } from 'react-i18next'; 26import { useTranslation } from 'react-i18next';
27 27
28import type Service from '../../stores/Service'; 28import type Service from '../../stores/Service.js';
29 29
30function ExtraButtons({ service }: { service: Service }): JSX.Element { 30function ExtraButtons({ service }: { service: Service }): JSX.Element {
31 const { t } = useTranslation(undefined, { 31 const { t } = useTranslation(undefined, {
diff --git a/packages/renderer/src/components/locationBar/GoButton.tsx b/packages/renderer/src/components/locationBar/GoButton.tsx
index 471f25e..571124a 100644
--- a/packages/renderer/src/components/locationBar/GoButton.tsx
+++ b/packages/renderer/src/components/locationBar/GoButton.tsx
@@ -22,7 +22,7 @@ import IconGo from '@mui/icons-material/Send';
22import IconButton from '@mui/material/IconButton'; 22import IconButton from '@mui/material/IconButton';
23import React, { MouseEventHandler } from 'react'; 23import React, { MouseEventHandler } from 'react';
24 24
25import LocationInputAdornment from './LocationInputAdornment'; 25import LocationInputAdornment from './LocationInputAdornment.js';
26 26
27export default function GoButton({ 27export default function GoButton({
28 onClick, 28 onClick,
diff --git a/packages/renderer/src/components/locationBar/LocationBar.tsx b/packages/renderer/src/components/locationBar/LocationBar.tsx
index 11981e9..fd7dcbb 100644
--- a/packages/renderer/src/components/locationBar/LocationBar.tsx
+++ b/packages/renderer/src/components/locationBar/LocationBar.tsx
@@ -22,12 +22,12 @@ import { styled } from '@mui/material/styles';
22import { observer } from 'mobx-react-lite'; 22import { observer } from 'mobx-react-lite';
23import React from 'react'; 23import React from 'react';
24 24
25import type RendererStore from '../../stores/RendererStore'; 25import type RendererStore from '../../stores/RendererStore.js';
26import type Service from '../../stores/Service'; 26import type Service from '../../stores/Service.js';
27 27
28import ExtraButtons from './ExtraButtons'; 28import ExtraButtons from './ExtraButtons.js';
29import LocationTextField from './LocationTextField'; 29import LocationTextField from './LocationTextField.js';
30import NavigationButtons from './NavigationButtons'; 30import NavigationButtons from './NavigationButtons.js';
31 31
32export function getLocaltionBarID(service: Service): string { 32export function getLocaltionBarID(service: Service): string {
33 return `Sophie-${service.id}-LocationBar`; 33 return `Sophie-${service.id}-LocationBar`;
diff --git a/packages/renderer/src/components/locationBar/LocationTextField.tsx b/packages/renderer/src/components/locationBar/LocationTextField.tsx
index 1d6b561..9b028b3 100644
--- a/packages/renderer/src/components/locationBar/LocationTextField.tsx
+++ b/packages/renderer/src/components/locationBar/LocationTextField.tsx
@@ -24,12 +24,12 @@ import { autorun } from 'mobx';
24import { observer } from 'mobx-react-lite'; 24import { observer } from 'mobx-react-lite';
25import React, { useCallback, useEffect, useState } from 'react'; 25import React, { useCallback, useEffect, useState } from 'react';
26 26
27import Service from '../../stores/Service'; 27import Service from '../../stores/Service.js';
28 28
29import GoButton from './GoButton'; 29import GoButton from './GoButton.js';
30import LocationOverlayInput from './LocationOverlayInput'; 30import LocationOverlayInput from './LocationOverlayInput.js';
31import SecurityLabel from './SecurityLabel'; 31import SecurityLabel from './SecurityLabel.js';
32import UrlOverlay from './UrlOverlay'; 32import UrlOverlay from './UrlOverlay.js';
33 33
34const LocationTextFieldRoot = styled(FilledInput, { 34const LocationTextFieldRoot = styled(FilledInput, {
35 name: 'LocationTextField', 35 name: 'LocationTextField',
diff --git a/packages/renderer/src/components/locationBar/NavigationButtons.tsx b/packages/renderer/src/components/locationBar/NavigationButtons.tsx
index 96e40e7..ab455eb 100644
--- a/packages/renderer/src/components/locationBar/NavigationButtons.tsx
+++ b/packages/renderer/src/components/locationBar/NavigationButtons.tsx
@@ -23,14 +23,14 @@ import IconArrowForward from '@mui/icons-material/ArrowForward';
23import IconStop from '@mui/icons-material/Close'; 23import IconStop from '@mui/icons-material/Close';
24import IconHome from '@mui/icons-material/HomeOutlined'; 24import IconHome from '@mui/icons-material/HomeOutlined';
25import IconRefresh from '@mui/icons-material/Refresh'; 25import IconRefresh from '@mui/icons-material/Refresh';
26import { useTheme } from '@mui/material';
27import Box from '@mui/material/Box'; 26import Box from '@mui/material/Box';
28import IconButton from '@mui/material/IconButton'; 27import IconButton from '@mui/material/IconButton';
28import { useTheme } from '@mui/material/styles';
29import { observer } from 'mobx-react-lite'; 29import { observer } from 'mobx-react-lite';
30import React from 'react'; 30import React from 'react';
31import { useTranslation } from 'react-i18next'; 31import { useTranslation } from 'react-i18next';
32 32
33import type Service from '../../stores/Service'; 33import type Service from '../../stores/Service.js';
34 34
35function NavigationButtons({ service }: { service: Service }): JSX.Element { 35function NavigationButtons({ service }: { service: Service }): JSX.Element {
36 const { t } = useTranslation(undefined, { 36 const { t } = useTranslation(undefined, {
diff --git a/packages/renderer/src/components/locationBar/SecurityLabel.tsx b/packages/renderer/src/components/locationBar/SecurityLabel.tsx
index ac51cff..7521fa6 100644
--- a/packages/renderer/src/components/locationBar/SecurityLabel.tsx
+++ b/packages/renderer/src/components/locationBar/SecurityLabel.tsx
@@ -27,8 +27,8 @@ import { SecurityLabelKind } from '@sophie/shared';
27import React from 'react'; 27import React from 'react';
28import { useTranslation } from 'react-i18next'; 28import { useTranslation } from 'react-i18next';
29 29
30import LocationInputAdornment from './LocationInputAdornment'; 30import LocationInputAdornment from './LocationInputAdornment.js';
31import getAlertColor from './getAlertColor'; 31import getAlertColor from './getAlertColor.js';
32 32
33const SecurityLabelRoot = styled(LocationInputAdornment, { 33const SecurityLabelRoot = styled(LocationInputAdornment, {
34 name: 'SecurityLabel', 34 name: 'SecurityLabel',
diff --git a/packages/renderer/src/components/locationBar/UrlOverlay.tsx b/packages/renderer/src/components/locationBar/UrlOverlay.tsx
index a71fa4e..eaa86d2 100644
--- a/packages/renderer/src/components/locationBar/UrlOverlay.tsx
+++ b/packages/renderer/src/components/locationBar/UrlOverlay.tsx
@@ -21,7 +21,7 @@
21import { styled } from '@mui/material/styles'; 21import { styled } from '@mui/material/styles';
22import React from 'react'; 22import React from 'react';
23 23
24import getAlertColor from './getAlertColor'; 24import getAlertColor from './getAlertColor.js';
25 25
26export type SplitResult = 26export type SplitResult =
27 | { 27 | {
diff --git a/packages/renderer/src/components/sidebar/ServiceIcon.tsx b/packages/renderer/src/components/sidebar/ServiceIcon.tsx
index 7a6d58a..f3f025a 100644
--- a/packages/renderer/src/components/sidebar/ServiceIcon.tsx
+++ b/packages/renderer/src/components/sidebar/ServiceIcon.tsx
@@ -24,7 +24,7 @@ import { styled } from '@mui/material/styles';
24import { observer } from 'mobx-react-lite'; 24import { observer } from 'mobx-react-lite';
25import React, { useEffect, useState } from 'react'; 25import React, { useEffect, useState } from 'react';
26 26
27import type Service from '../../stores/Service'; 27import type Service from '../../stores/Service.js';
28 28
29const ServiceIconRoot = styled('div', { 29const ServiceIconRoot = styled('div', {
30 name: 'ServiceIcon', 30 name: 'ServiceIcon',
diff --git a/packages/renderer/src/components/sidebar/ServiceSwitcher.tsx b/packages/renderer/src/components/sidebar/ServiceSwitcher.tsx
index 7aa9124..56487df 100644
--- a/packages/renderer/src/components/sidebar/ServiceSwitcher.tsx
+++ b/packages/renderer/src/components/sidebar/ServiceSwitcher.tsx
@@ -26,11 +26,11 @@ import { observer } from 'mobx-react-lite';
26import React from 'react'; 26import React from 'react';
27import { useTranslation } from 'react-i18next'; 27import { useTranslation } from 'react-i18next';
28 28
29import type RendererStore from '../../stores/RendererStore'; 29import type RendererStore from '../../stores/RendererStore.js';
30import type Service from '../../stores/Service'; 30import type Service from '../../stores/Service.js';
31import { getServicePanelID } from '../ServicePanel'; 31import { getServicePanelID } from '../ServicePanel.js';
32 32
33import ServiceIcon from './ServiceIcon'; 33import ServiceIcon from './ServiceIcon.js';
34 34
35const ServiceSwitcherRoot = styled(Tabs, { 35const ServiceSwitcherRoot = styled(Tabs, {
36 name: 'ServiceSwitcher', 36 name: 'ServiceSwitcher',
diff --git a/packages/renderer/src/components/sidebar/Sidebar.tsx b/packages/renderer/src/components/sidebar/Sidebar.tsx
index 6c802ac..7308900 100644
--- a/packages/renderer/src/components/sidebar/Sidebar.tsx
+++ b/packages/renderer/src/components/sidebar/Sidebar.tsx
@@ -22,11 +22,11 @@ import Box from '@mui/material/Box';
22import { styled } from '@mui/material/styles'; 22import { styled } from '@mui/material/styles';
23import React from 'react'; 23import React from 'react';
24 24
25import RendererStore from '../../stores/RendererStore'; 25import RendererStore from '../../stores/RendererStore.js';
26 26
27import ServiceSwitcher from './ServiceSwitcher'; 27import ServiceSwitcher from './ServiceSwitcher.js';
28import ToggleDarkModeButton from './ToggleDarkModeButton'; 28import ToggleDarkModeButton from './ToggleDarkModeButton.js';
29import ToggleLocationBarButton from './ToggleLocationBarButton'; 29import ToggleLocationBarButton from './ToggleLocationBarButton.js';
30 30
31const SidebarRoot = styled(Box)(({ theme }) => ({ 31const SidebarRoot = styled(Box)(({ theme }) => ({
32 flex: 0, 32 flex: 0,
diff --git a/packages/renderer/src/components/sidebar/ToggleDarkModeButton.tsx b/packages/renderer/src/components/sidebar/ToggleDarkModeButton.tsx
index a922389..5e15d4b 100644
--- a/packages/renderer/src/components/sidebar/ToggleDarkModeButton.tsx
+++ b/packages/renderer/src/components/sidebar/ToggleDarkModeButton.tsx
@@ -25,7 +25,7 @@ import { observer } from 'mobx-react-lite';
25import React from 'react'; 25import React from 'react';
26import { useTranslation } from 'react-i18next'; 26import { useTranslation } from 'react-i18next';
27 27
28import type RendererStore from '../../stores/RendererStore'; 28import type RendererStore from '../../stores/RendererStore.js';
29 29
30function ToggleDarkModeButton({ 30function ToggleDarkModeButton({
31 store: { shared }, 31 store: { shared },
diff --git a/packages/renderer/src/components/sidebar/ToggleLocationBarButton.tsx b/packages/renderer/src/components/sidebar/ToggleLocationBarButton.tsx
index b6644a3..64b4ca9 100644
--- a/packages/renderer/src/components/sidebar/ToggleLocationBarButton.tsx
+++ b/packages/renderer/src/components/sidebar/ToggleLocationBarButton.tsx
@@ -20,15 +20,15 @@
20 20
21import IconChevronLeft from '@mui/icons-material/KeyboardDoubleArrowLeft'; 21import IconChevronLeft from '@mui/icons-material/KeyboardDoubleArrowLeft';
22import IconChevronRight from '@mui/icons-material/KeyboardDoubleArrowRight'; 22import IconChevronRight from '@mui/icons-material/KeyboardDoubleArrowRight';
23import { useTheme } from '@mui/material';
24import CircularProgress from '@mui/material/CircularProgress'; 23import CircularProgress from '@mui/material/CircularProgress';
25import IconButton from '@mui/material/IconButton'; 24import IconButton from '@mui/material/IconButton';
25import { useTheme } from '@mui/material/styles';
26import { observer } from 'mobx-react-lite'; 26import { observer } from 'mobx-react-lite';
27import React from 'react'; 27import React from 'react';
28import { useTranslation } from 'react-i18next'; 28import { useTranslation } from 'react-i18next';
29 29
30import type RendererStore from '../../stores/RendererStore'; 30import type RendererStore from '../../stores/RendererStore.js';
31import { getLocaltionBarID } from '../locationBar/LocationBar'; 31import { getLocaltionBarID } from '../locationBar/LocationBar.js';
32 32
33function ToggleLocationBarIcon({ 33function ToggleLocationBarIcon({
34 loading, 34 loading,
diff --git a/packages/renderer/src/i18n/RtlCacheProvider.tsx b/packages/renderer/src/i18n/RtlCacheProvider.tsx
index 1303314..8b6fcf2 100644
--- a/packages/renderer/src/i18n/RtlCacheProvider.tsx
+++ b/packages/renderer/src/i18n/RtlCacheProvider.tsx
@@ -23,7 +23,7 @@ import { CacheProvider } from '@emotion/react';
23import { observer } from 'mobx-react-lite'; 23import { observer } from 'mobx-react-lite';
24import React, { type ReactNode } from 'react'; 24import React, { type ReactNode } from 'react';
25 25
26import type RendererStore from '../stores/RendererStore'; 26import type RendererStore from '../stores/RendererStore.js';
27 27
28function RtlCacheProvider({ 28function RtlCacheProvider({
29 children, 29 children,
diff --git a/packages/renderer/src/i18n/loadRendererLoalization.ts b/packages/renderer/src/i18n/loadRendererLoalization.ts
index 4d7b84a..d3ad252 100644
--- a/packages/renderer/src/i18n/loadRendererLoalization.ts
+++ b/packages/renderer/src/i18n/loadRendererLoalization.ts
@@ -24,10 +24,10 @@ import { reaction } from 'mobx';
24import { addDisposer } from 'mobx-state-tree'; 24import { addDisposer } from 'mobx-state-tree';
25import { initReactI18next } from 'react-i18next'; 25import { initReactI18next } from 'react-i18next';
26 26
27import RendererStore from '../stores/RendererStore'; 27import RendererStore from '../stores/RendererStore.js';
28import { getLogger } from '../utils/log'; 28import { getLogger } from '../utils/log.js';
29 29
30import RendererIpcI18nBackend from './RendererIpcI18nBackend'; 30import RendererIpcI18nBackend from './RendererIpcI18nBackend.js';
31 31
32const log = getLogger('loadRendererLocalization'); 32const log = getLogger('loadRendererLocalization');
33 33
diff --git a/packages/renderer/src/index.tsx b/packages/renderer/src/index.tsx
index 980e4dd..32fcee6 100644
--- a/packages/renderer/src/index.tsx
+++ b/packages/renderer/src/index.tsx
@@ -25,14 +25,14 @@ import React, { Suspense, lazy } from 'react';
25import { createRoot } from 'react-dom/client'; 25import { createRoot } from 'react-dom/client';
26 26
27import './style.css'; 27import './style.css';
28import Loading from './components/Loading'; 28import Loading from './components/Loading.js';
29import ThemeProvider from './components/ThemeProvider'; 29import ThemeProvider from './components/ThemeProvider.js';
30import { exposeToReduxDevtools, hotReload } from './devTools'; 30import { exposeToReduxDevtools, hotReload } from './devTools.js';
31import RtlCacheProvider from './i18n/RtlCacheProvider'; 31import RtlCacheProvider from './i18n/RtlCacheProvider.js';
32import createRtlCache from './i18n/createRtlCache'; 32import createRtlCache from './i18n/createRtlCache.js';
33import loadRendererLocalization from './i18n/loadRendererLoalization'; 33import loadRendererLocalization from './i18n/loadRendererLoalization.js';
34import { createAndConnectRendererStore } from './stores/RendererStore'; 34import { createAndConnectRendererStore } from './stores/RendererStore.js';
35import { getLogger } from './utils/log'; 35import { getLogger } from './utils/log.js';
36 36
37const isDevelopment = import.meta.env.MODE === 'development'; 37const isDevelopment = import.meta.env.MODE === 'development';
38 38
@@ -65,7 +65,7 @@ addDisposer(store, disposeSetHtmlLang);
65 65
66const rtlCache = createRtlCache(); 66const rtlCache = createRtlCache();
67 67
68const App = lazy(() => import('./components/App')); 68const App = lazy(() => import('./components/App.js'));
69 69
70function Root(): JSX.Element { 70function Root(): JSX.Element {
71 return ( 71 return (
diff --git a/packages/renderer/src/stores/GlobalSettings.ts b/packages/renderer/src/stores/GlobalSettings.ts
index 52971d4..11c2ebd 100644
--- a/packages/renderer/src/stores/GlobalSettings.ts
+++ b/packages/renderer/src/stores/GlobalSettings.ts
@@ -21,8 +21,8 @@
21import { defineGlobalSettingsModel, ThemeSource } from '@sophie/shared'; 21import { defineGlobalSettingsModel, ThemeSource } from '@sophie/shared';
22import { Instance } from 'mobx-state-tree'; 22import { Instance } from 'mobx-state-tree';
23 23
24import { getEnv } from './RendererEnv'; 24import { getEnv } from './RendererEnv.js';
25import Service from './Service'; 25import Service from './Service.js';
26 26
27const GlobalSettings = defineGlobalSettingsModel(Service).actions((self) => ({ 27const GlobalSettings = defineGlobalSettingsModel(Service).actions((self) => ({
28 setSelectedServiceId(serviceId: string): void { 28 setSelectedServiceId(serviceId: string): void {
diff --git a/packages/renderer/src/stores/RendererStore.ts b/packages/renderer/src/stores/RendererStore.ts
index a3983ca..c4110bd 100644
--- a/packages/renderer/src/stores/RendererStore.ts
+++ b/packages/renderer/src/stores/RendererStore.ts
@@ -21,12 +21,12 @@
21import type { SophieRenderer } from '@sophie/shared'; 21import type { SophieRenderer } from '@sophie/shared';
22import { applySnapshot, applyPatch, Instance, types } from 'mobx-state-tree'; 22import { applySnapshot, applyPatch, Instance, types } from 'mobx-state-tree';
23 23
24import { getLogger } from '../utils/log'; 24import { getLogger } from '../utils/log.js';
25 25
26import type GlobalSettings from './GlobalSettings'; 26import type GlobalSettings from './GlobalSettings.js';
27import type RendererEnv from './RendererEnv'; 27import type RendererEnv from './RendererEnv.js';
28import type Service from './Service'; 28import type Service from './Service.js';
29import SharedStore from './SharedStore'; 29import SharedStore from './SharedStore.js';
30 30
31const log = getLogger('RendererStore'); 31const log = getLogger('RendererStore');
32 32
diff --git a/packages/renderer/src/stores/Service.ts b/packages/renderer/src/stores/Service.ts
index c8d513f..ff01964 100644
--- a/packages/renderer/src/stores/Service.ts
+++ b/packages/renderer/src/stores/Service.ts
@@ -25,8 +25,8 @@ import {
25} from '@sophie/shared'; 25} from '@sophie/shared';
26import { Instance } from 'mobx-state-tree'; 26import { Instance } from 'mobx-state-tree';
27 27
28import { getEnv } from './RendererEnv'; 28import { getEnv } from './RendererEnv.js';
29import ServiceSettings from './ServiceSettings'; 29import ServiceSettings from './ServiceSettings.js';
30 30
31const Service = defineServiceModel(ServiceSettings) 31const Service = defineServiceModel(ServiceSettings)
32 .views((self) => ({ 32 .views((self) => ({
diff --git a/packages/renderer/src/stores/ServiceSettings.ts b/packages/renderer/src/stores/ServiceSettings.ts
index 5d37347..d5c2843 100644
--- a/packages/renderer/src/stores/ServiceSettings.ts
+++ b/packages/renderer/src/stores/ServiceSettings.ts
@@ -21,7 +21,7 @@
21import { defineServiceSettingsModel } from '@sophie/shared'; 21import { defineServiceSettingsModel } from '@sophie/shared';
22import { Instance } from 'mobx-state-tree'; 22import { Instance } from 'mobx-state-tree';
23 23
24import Profile from './Profile'; 24import Profile from './Profile.js';
25 25
26const ServiceSettings = defineServiceSettingsModel(Profile); 26const ServiceSettings = defineServiceSettingsModel(Profile);
27 27
diff --git a/packages/renderer/src/stores/SharedStore.ts b/packages/renderer/src/stores/SharedStore.ts
index 062479d..0b04a86 100644
--- a/packages/renderer/src/stores/SharedStore.ts
+++ b/packages/renderer/src/stores/SharedStore.ts
@@ -21,9 +21,9 @@
21import { defineSharedStoreModel } from '@sophie/shared'; 21import { defineSharedStoreModel } from '@sophie/shared';
22import { Instance } from 'mobx-state-tree'; 22import { Instance } from 'mobx-state-tree';
23 23
24import GlobalSettings from './GlobalSettings'; 24import GlobalSettings from './GlobalSettings.js';
25import Profile from './Profile'; 25import Profile from './Profile.js';
26import Service from './Service'; 26import Service from './Service.js';
27 27
28const SharedStore = defineSharedStoreModel( 28const SharedStore = defineSharedStoreModel(
29 GlobalSettings, 29 GlobalSettings,
diff --git a/packages/renderer/tsconfig.json b/packages/renderer/tsconfig.json
index 4fe3896..3b576a8 100644
--- a/packages/renderer/tsconfig.json
+++ b/packages/renderer/tsconfig.json
@@ -2,8 +2,10 @@
2 "extends": "../../config/tsconfig.base.json", 2 "extends": "../../config/tsconfig.base.json",
3 "compilerOptions": { 3 "compilerOptions": {
4 "noEmit": true, 4 "noEmit": true,
5 "module": "es2022",
6 "moduleResolution": "node",
5 "jsx": "react", 7 "jsx": "react",
6 "lib": ["dom", "dom.iterable", "esnext"], 8 "lib": ["dom", "dom.iterable", "es2021"],
7 "types": ["@types/jest", "vite/client"] 9 "types": ["@types/jest", "vite/client"]
8 }, 10 },
9 "references": [ 11 "references": [
diff --git a/packages/service-inject/tsconfig.json b/packages/service-inject/tsconfig.json
index 33ce1de..126bce4 100644
--- a/packages/service-inject/tsconfig.json
+++ b/packages/service-inject/tsconfig.json
@@ -2,7 +2,7 @@
2 "extends": "../../config/tsconfig.base.json", 2 "extends": "../../config/tsconfig.base.json",
3 "compilerOptions": { 3 "compilerOptions": {
4 "noEmit": true, 4 "noEmit": true,
5 "lib": ["dom", "dom.iterable", "esnext"] 5 "lib": ["dom", "dom.iterable", "es2021"]
6 }, 6 },
7 "references": [ 7 "references": [
8 { 8 {
diff --git a/packages/service-preload/tsconfig.json b/packages/service-preload/tsconfig.json
index d7fb8cb..a3ba1bc 100644
--- a/packages/service-preload/tsconfig.json
+++ b/packages/service-preload/tsconfig.json
@@ -2,7 +2,7 @@
2 "extends": "../../config/tsconfig.base.json", 2 "extends": "../../config/tsconfig.base.json",
3 "compilerOptions": { 3 "compilerOptions": {
4 "noEmit": true, 4 "noEmit": true,
5 "lib": ["dom", "dom.iterable", "esnext"] 5 "lib": ["dom", "dom.iterable", "es2021"]
6 }, 6 },
7 "references": [ 7 "references": [
8 { 8 {
diff --git a/packages/service-shared/package.json b/packages/service-shared/package.json
index 57a2297..3940cf5 100644
--- a/packages/service-shared/package.json
+++ b/packages/service-shared/package.json
@@ -4,7 +4,12 @@
4 "private": true, 4 "private": true,
5 "sideEffects": false, 5 "sideEffects": false,
6 "type": "module", 6 "type": "module",
7 "exports": "./dist/index.mjs", 7 "exports": {
8 ".": {
9 "import": "./dist/index.mjs",
10 "types": "./dist/index.d.ts"
11 }
12 },
8 "types": "dist/index.d.ts", 13 "types": "dist/index.d.ts",
9 "scripts": { 14 "scripts": {
10 "typecheck:workspace": "yarn g:typecheck", 15 "typecheck:workspace": "yarn g:typecheck",
diff --git a/packages/service-shared/src/index.ts b/packages/service-shared/src/index.ts
index 5165fe5..c415e45 100644
--- a/packages/service-shared/src/index.ts
+++ b/packages/service-shared/src/index.ts
@@ -18,6 +18,6 @@
18 * SPDX-License-Identifier: AGPL-3.0-only 18 * SPDX-License-Identifier: AGPL-3.0-only
19 */ 19 */
20 20
21export { MainToServiceIpcMessage, ServiceToMainIpcMessage } from './ipc'; 21export { MainToServiceIpcMessage, ServiceToMainIpcMessage } from './ipc.js';
22 22
23export { UnreadCount } from './schemas'; 23export { UnreadCount } from './schemas.js';
diff --git a/packages/shared/package.json b/packages/shared/package.json
index 2498797..6078902 100644
--- a/packages/shared/package.json
+++ b/packages/shared/package.json
@@ -4,7 +4,12 @@
4 "private": true, 4 "private": true,
5 "sideEffects": false, 5 "sideEffects": false,
6 "type": "module", 6 "type": "module",
7 "exports": "./dist/index.mjs", 7 "exports": {
8 ".": {
9 "import": "./dist/index.mjs",
10 "types": "./dist/index.d.ts"
11 }
12 },
8 "types": "dist/index.d.ts", 13 "types": "dist/index.d.ts",
9 "scripts": { 14 "scripts": {
10 "typecheck:workspace": "yarn g:typecheck", 15 "typecheck:workspace": "yarn g:typecheck",
diff --git a/packages/shared/src/contextBridge/SophieRenderer.ts b/packages/shared/src/contextBridge/SophieRenderer.ts
index 732f941..7b934e5 100644
--- a/packages/shared/src/contextBridge/SophieRenderer.ts
+++ b/packages/shared/src/contextBridge/SophieRenderer.ts
@@ -20,9 +20,9 @@
20 20
21import type { ResourceKey } from 'i18next'; 21import type { ResourceKey } from 'i18next';
22 22
23import { Action } from '../schemas/Action'; 23import { Action } from '../schemas/Action.js';
24import { Translation } from '../schemas/Translation'; 24import { Translation } from '../schemas/Translation.js';
25import { SharedStoreListener } from '../stores/SharedStoreBase'; 25import { SharedStoreListener } from '../stores/SharedStoreBase.js';
26 26
27export default interface SophieRenderer { 27export default interface SophieRenderer {
28 onSharedStoreChange(this: void, listener: SharedStoreListener): Promise<void>; 28 onSharedStoreChange(this: void, listener: SharedStoreListener): Promise<void>;
diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts
index b1d05f8..2e06234 100644
--- a/packages/shared/src/index.ts
+++ b/packages/shared/src/index.ts
@@ -18,71 +18,71 @@
18 * SPDX-License-Identifier: AGPL-3.0-only 18 * SPDX-License-Identifier: AGPL-3.0-only
19 */ 19 */
20 20
21export type { default as SophieRenderer } from './contextBridge/SophieRenderer'; 21export type { default as SophieRenderer } from './contextBridge/SophieRenderer.js';
22 22
23export { MainToRendererIpcMessage, RendererToMainIpcMessage } from './ipc'; 23export { MainToRendererIpcMessage, RendererToMainIpcMessage } from './ipc.js';
24 24
25export { Action } from './schemas/Action'; 25export { Action } from './schemas/Action.js';
26 26
27export { BrowserViewBounds } from './schemas/BrowserViewBounds'; 27export { BrowserViewBounds } from './schemas/BrowserViewBounds.js';
28 28
29export { ServiceAction } from './schemas/ServiceAction'; 29export { ServiceAction } from './schemas/ServiceAction.js';
30 30
31export { ThemeSource } from './schemas/ThemeSource'; 31export { ThemeSource } from './schemas/ThemeSource.js';
32 32
33export { Translation } from './schemas/Translation'; 33export { Translation } from './schemas/Translation.js';
34 34
35export type { 35export type {
36 CertificatePrincipal, 36 CertificatePrincipal,
37 CertificateSnapshotIn, 37 CertificateSnapshotIn,
38} from './stores/Certificate'; 38} from './stores/Certificate.js';
39export { default as Certificate } from './stores/Certificate'; 39export { default as Certificate } from './stores/Certificate.js';
40 40
41export type { 41export type {
42 GlobalSettingsSnapshotIn, 42 GlobalSettingsSnapshotIn,
43 GlobalSettingsSnapshotOut, 43 GlobalSettingsSnapshotOut,
44} from './stores/GlobalSettingsBase'; 44} from './stores/GlobalSettingsBase.js';
45export { 45export {
46 default as GlobalSettingsBase, 46 default as GlobalSettingsBase,
47 defineGlobalSettingsModel, 47 defineGlobalSettingsModel,
48 SYSTEM_LOCALE, 48 SYSTEM_LOCALE,
49} from './stores/GlobalSettingsBase'; 49} from './stores/GlobalSettingsBase.js';
50 50
51export { default as Profile } from './stores/Profile'; 51export { default as Profile } from './stores/Profile.js';
52 52
53export type { 53export type {
54 ProfileSettingsSnapshotIn, 54 ProfileSettingsSnapshotIn,
55 ProfileSettingsSnapshotOut, 55 ProfileSettingsSnapshotOut,
56} from './stores/ProfileSettings'; 56} from './stores/ProfileSettings.js';
57export { default as ProfileSettings } from './stores/ProfileSettings'; 57export { default as ProfileSettings } from './stores/ProfileSettings.js';
58 58
59export { 59export {
60 default as ServiceBase, 60 default as ServiceBase,
61 defineServiceModel, 61 defineServiceModel,
62 SecurityLabelKind, 62 SecurityLabelKind,
63} from './stores/ServiceBase'; 63} from './stores/ServiceBase.js';
64 64
65export type { 65export type {
66 ServiceSettingsSnapshotIn, 66 ServiceSettingsSnapshotIn,
67 ServiceSettingsSnapshotOut, 67 ServiceSettingsSnapshotOut,
68} from './stores/ServiceSettingsBase'; 68} from './stores/ServiceSettingsBase.js';
69export { 69export {
70 default as ServiceSettingsBase, 70 default as ServiceSettingsBase,
71 defineServiceSettingsModel, 71 defineServiceSettingsModel,
72} from './stores/ServiceSettingsBase'; 72} from './stores/ServiceSettingsBase.js';
73 73
74export type { ServiceStateSnapshotIn } from './stores/ServiceState'; 74export type { ServiceStateSnapshotIn } from './stores/ServiceState.js';
75export { default as ServiceState } from './stores/ServiceState'; 75export { default as ServiceState } from './stores/ServiceState.js';
76 76
77export type { 77export type {
78 SharedStoreListener, 78 SharedStoreListener,
79 SharedStoreSnapshotIn, 79 SharedStoreSnapshotIn,
80 SharedStoreSnapshotOut, 80 SharedStoreSnapshotOut,
81} from './stores/SharedStoreBase'; 81} from './stores/SharedStoreBase.js';
82export { 82export {
83 default as SharedStoreBase, 83 default as SharedStoreBase,
84 defineSharedStoreModel, 84 defineSharedStoreModel,
85 FALLBACK_LOCALE, 85 FALLBACK_LOCALE,
86} from './stores/SharedStoreBase'; 86} from './stores/SharedStoreBase.js';
87 87
88export { default as WritingDirection } from './stores/WritingDirection'; 88export { default as WritingDirection } from './stores/WritingDirection.js';
diff --git a/packages/shared/src/schemas/Action.ts b/packages/shared/src/schemas/Action.ts
index 7ece27a..11d63aa 100644
--- a/packages/shared/src/schemas/Action.ts
+++ b/packages/shared/src/schemas/Action.ts
@@ -20,8 +20,8 @@
20 20
21import { z } from 'zod'; 21import { z } from 'zod';
22 22
23import { ServiceAction } from './ServiceAction'; 23import { ServiceAction } from './ServiceAction.js';
24import { ThemeSource } from './ThemeSource'; 24import { ThemeSource } from './ThemeSource.js';
25 25
26export const Action = /* @__PURE__ */ (() => 26export const Action = /* @__PURE__ */ (() =>
27 z.union([ 27 z.union([
diff --git a/packages/shared/src/schemas/ServiceAction.ts b/packages/shared/src/schemas/ServiceAction.ts
index 9486aaf..744c7cf 100644
--- a/packages/shared/src/schemas/ServiceAction.ts
+++ b/packages/shared/src/schemas/ServiceAction.ts
@@ -20,7 +20,7 @@
20 20
21import { z } from 'zod'; 21import { z } from 'zod';
22 22
23import { BrowserViewBounds } from './BrowserViewBounds'; 23import { BrowserViewBounds } from './BrowserViewBounds.js';
24 24
25export const ServiceAction = /* @__PURE__ */ (() => 25export const ServiceAction = /* @__PURE__ */ (() =>
26 z.union([ 26 z.union([
diff --git a/packages/shared/src/stores/GlobalSettingsBase.ts b/packages/shared/src/stores/GlobalSettingsBase.ts
index c74c822..9d677c4 100644
--- a/packages/shared/src/stores/GlobalSettingsBase.ts
+++ b/packages/shared/src/stores/GlobalSettingsBase.ts
@@ -26,9 +26,9 @@ import {
26 IAnyModelType, 26 IAnyModelType,
27} from 'mobx-state-tree'; 27} from 'mobx-state-tree';
28 28
29import { ThemeSource } from '../schemas/ThemeSource'; 29import { ThemeSource } from '../schemas/ThemeSource.js';
30 30
31import ServiceBase from './ServiceBase'; 31import ServiceBase from './ServiceBase.js';
32 32
33export const SYSTEM_LOCALE = 'system'; 33export const SYSTEM_LOCALE = 'system';
34 34
diff --git a/packages/shared/src/stores/Profile.ts b/packages/shared/src/stores/Profile.ts
index 611ca6f..076c639 100644
--- a/packages/shared/src/stores/Profile.ts
+++ b/packages/shared/src/stores/Profile.ts
@@ -20,8 +20,8 @@
20 20
21import { Instance, types } from 'mobx-state-tree'; 21import { Instance, types } from 'mobx-state-tree';
22 22
23import Certificate, { CertificateSnapshotIn } from './Certificate'; 23import Certificate, { CertificateSnapshotIn } from './Certificate.js';
24import ProfileSettings from './ProfileSettings'; 24import ProfileSettings from './ProfileSettings.js';
25 25
26const Profile = /* @__PURE__ */ (() => 26const Profile = /* @__PURE__ */ (() =>
27 types 27 types
diff --git a/packages/shared/src/stores/ServiceBase.ts b/packages/shared/src/stores/ServiceBase.ts
index 0e4be97..7bd1d68 100644
--- a/packages/shared/src/stores/ServiceBase.ts
+++ b/packages/shared/src/stores/ServiceBase.ts
@@ -20,10 +20,10 @@
20 20
21import { IAnyModelType, Instance, types } from 'mobx-state-tree'; 21import { IAnyModelType, Instance, types } from 'mobx-state-tree';
22 22
23import type { CertificateSnapshotIn } from './Certificate'; 23import type { CertificateSnapshotIn } from './Certificate.js';
24import type Profile from './Profile'; 24import type Profile from './Profile.js';
25import ServiceSettingsBase from './ServiceSettingsBase'; 25import ServiceSettingsBase from './ServiceSettingsBase.js';
26import ServiceState from './ServiceState'; 26import ServiceState from './ServiceState.js';
27 27
28export enum SecurityLabelKind { 28export enum SecurityLabelKind {
29 Empty = 'empty', 29 Empty = 'empty',
diff --git a/packages/shared/src/stores/ServiceSettingsBase.ts b/packages/shared/src/stores/ServiceSettingsBase.ts
index 45eb15d..b9df516 100644
--- a/packages/shared/src/stores/ServiceSettingsBase.ts
+++ b/packages/shared/src/stores/ServiceSettingsBase.ts
@@ -26,7 +26,7 @@ import {
26 IAnyModelType, 26 IAnyModelType,
27} from 'mobx-state-tree'; 27} from 'mobx-state-tree';
28 28
29import ProfileBase from './Profile'; 29import ProfileBase from './Profile.js';
30 30
31export function defineServiceSettingsModel<TP extends IAnyModelType>( 31export function defineServiceSettingsModel<TP extends IAnyModelType>(
32 profile: TP, 32 profile: TP,
diff --git a/packages/shared/src/stores/ServiceState.ts b/packages/shared/src/stores/ServiceState.ts
index ad49321..d311a70 100644
--- a/packages/shared/src/stores/ServiceState.ts
+++ b/packages/shared/src/stores/ServiceState.ts
@@ -20,7 +20,7 @@
20 20
21import { Instance, SnapshotIn, types } from 'mobx-state-tree'; 21import { Instance, SnapshotIn, types } from 'mobx-state-tree';
22 22
23import Certificate from './Certificate'; 23import Certificate from './Certificate.js';
24 24
25const ServiceState = /* @__PURE__ */ (() => 25const ServiceState = /* @__PURE__ */ (() =>
26 types.optional( 26 types.optional(
diff --git a/packages/shared/src/stores/SharedStoreBase.ts b/packages/shared/src/stores/SharedStoreBase.ts
index 949ef6a..4526c95 100644
--- a/packages/shared/src/stores/SharedStoreBase.ts
+++ b/packages/shared/src/stores/SharedStoreBase.ts
@@ -27,10 +27,10 @@ import {
27 IAnyModelType, 27 IAnyModelType,
28} from 'mobx-state-tree'; 28} from 'mobx-state-tree';
29 29
30import GlobalSettingsBase from './GlobalSettingsBase'; 30import GlobalSettingsBase from './GlobalSettingsBase.js';
31import ProfileBase from './Profile'; 31import ProfileBase from './Profile.js';
32import ServiceBase from './ServiceBase'; 32import ServiceBase from './ServiceBase.js';
33import WritingDirection from './WritingDirection'; 33import WritingDirection from './WritingDirection.js';
34 34
35export const FALLBACK_LOCALE = 'en'; 35export const FALLBACK_LOCALE = 'en';
36 36
diff --git a/packages/test-utils/src/index.ts b/packages/test-utils/src/index.ts
index c4db5b0..52ac98d 100644
--- a/packages/test-utils/src/index.ts
+++ b/packages/test-utils/src/index.ts
@@ -22,4 +22,4 @@
22 eslint-disable-next-line import/prefer-default-export -- 22 eslint-disable-next-line import/prefer-default-export --
23 Keep API consistent for more helpers in the future. 23 Keep API consistent for more helpers in the future.
24*/ 24*/
25export { default as fake } from './fake'; 25export { default as fake } from './fake.js';