diff options
Diffstat (limited to 'packages')
20 files changed, 311 insertions, 30 deletions
diff --git a/packages/main/package.json b/packages/main/package.json index 014c511..a23d791 100644 --- a/packages/main/package.json +++ b/packages/main/package.json | |||
@@ -10,6 +10,7 @@ | |||
10 | "typecheck": "tsc" | 10 | "typecheck": "tsc" |
11 | }, | 11 | }, |
12 | "dependencies": { | 12 | "dependencies": { |
13 | "@sophie/service-shared": "workspace:*", | ||
13 | "@sophie/shared": "workspace:*", | 14 | "@sophie/shared": "workspace:*", |
14 | "electron": "16.0.5", | 15 | "electron": "16.0.5", |
15 | "mobx": "^6.3.10", | 16 | "mobx": "^6.3.10", |
diff --git a/packages/main/src/index.ts b/packages/main/src/index.ts index f56d629..857c15d 100644 --- a/packages/main/src/index.ts +++ b/packages/main/src/index.ts | |||
@@ -23,6 +23,10 @@ import { autorun } from 'mobx'; | |||
23 | import { getSnapshot, onPatch } from 'mobx-state-tree'; | 23 | import { getSnapshot, onPatch } from 'mobx-state-tree'; |
24 | import { join } from 'path'; | 24 | import { join } from 'path'; |
25 | import { | 25 | import { |
26 | ServiceToMainIpcMessage, | ||
27 | unreadCount, | ||
28 | } from '@sophie/service-shared'; | ||
29 | import { | ||
26 | browserViewBounds, | 30 | browserViewBounds, |
27 | MainToRendererIpcMessage, | 31 | MainToRendererIpcMessage, |
28 | paletteMode, | 32 | paletteMode, |
@@ -54,9 +58,9 @@ app.enableSandbox(); | |||
54 | 58 | ||
55 | // Remove sophie and electron from the user-agent string to avoid detection. | 59 | // Remove sophie and electron from the user-agent string to avoid detection. |
56 | const originalUserAgent = app.userAgentFallback; | 60 | const originalUserAgent = app.userAgentFallback; |
61 | const userAgent = originalUserAgent.replaceAll(/ ([Ss]ophie|Electron)\/[0-9.]+/g, ''); | ||
57 | // Removing the electron version breaks redux devtools, so we only do this in production. | 62 | // Removing the electron version breaks redux devtools, so we only do this in production. |
58 | if (!isDevelopment) { | 63 | if (!isDevelopment) { |
59 | const userAgent = originalUserAgent.replaceAll(/ ([Ss]ophie|Electron)\/[0-9.]+/g, ''); | ||
60 | app.userAgentFallback = userAgent; | 64 | app.userAgentFallback = userAgent; |
61 | } | 65 | } |
62 | 66 | ||
@@ -97,6 +101,17 @@ async function createWindow(): Promise<void> { | |||
97 | 101 | ||
98 | webContents.userAgent = originalUserAgent; | 102 | webContents.userAgent = originalUserAgent; |
99 | 103 | ||
104 | const browserView = new BrowserView({ | ||
105 | webPreferences: { | ||
106 | sandbox: true, | ||
107 | partition: 'persist:service', | ||
108 | preload: join(__dirname, '../../service-preload/dist/index.cjs'), | ||
109 | }, | ||
110 | }); | ||
111 | |||
112 | browserView.webContents.userAgent = userAgent; | ||
113 | browserView.setBackgroundColor('#fff'); | ||
114 | |||
100 | webContents.on('ipc-message', (_event, channel, ...args) => { | 115 | webContents.on('ipc-message', (_event, channel, ...args) => { |
101 | try { | 116 | try { |
102 | switch (channel) { | 117 | switch (channel) { |
@@ -109,8 +124,11 @@ async function createWindow(): Promise<void> { | |||
109 | case RendererToMainIpcMessage.SetPaletteMode: | 124 | case RendererToMainIpcMessage.SetPaletteMode: |
110 | store.setPaletteMode(paletteMode.parse(args[0])) | 125 | store.setPaletteMode(paletteMode.parse(args[0])) |
111 | break; | 126 | break; |
127 | case RendererToMainIpcMessage.ReloadAllServices: | ||
128 | browserView.webContents.reload(); | ||
129 | break; | ||
112 | default: | 130 | default: |
113 | console.warn('Unknown IPC message:', channel, args); | 131 | console.error('Unknown IPC message:', channel, args); |
114 | break; | 132 | break; |
115 | } | 133 | } |
116 | } catch (err) { | 134 | } catch (err) { |
@@ -122,26 +140,31 @@ async function createWindow(): Promise<void> { | |||
122 | webContents.send(MainToRendererIpcMessage.SharedStorePatch, patch); | 140 | webContents.send(MainToRendererIpcMessage.SharedStorePatch, patch); |
123 | }); | 141 | }); |
124 | 142 | ||
125 | const pageUrl = (isDevelopment && import.meta.env.VITE_DEV_SERVER_URL !== undefined) | 143 | browserView.webContents.on('ipc-message', (_event, channel, ...args) => { |
126 | ? import.meta.env.VITE_DEV_SERVER_URL | 144 | try { |
127 | : new URL('../renderer/dist/index.html', `file://${__dirname}`).toString(); | 145 | switch (channel) { |
128 | 146 | case ServiceToMainIpcMessage.SetUnreadCount: | |
129 | const browserView = new BrowserView({ | 147 | console.log('Unread count:', unreadCount.parse(args[0])); |
130 | webPreferences: { | 148 | break; |
131 | sandbox: true, | 149 | default: |
132 | partition: 'persist:service', | 150 | console.error('Unknown IPC message:', channel, args); |
133 | }, | 151 | break; |
152 | } | ||
153 | } catch (err) { | ||
154 | console.error('Error while processing IPC message:', channel, args, err); | ||
155 | } | ||
134 | }); | 156 | }); |
135 | 157 | ||
136 | browserView.setBackgroundColor('#fff'); | ||
137 | |||
138 | autorun(() => { | 158 | autorun(() => { |
139 | browserView.setBounds(store.shared.browserViewBounds); | 159 | browserView.setBounds(store.shared.browserViewBounds); |
140 | }); | 160 | }); |
141 | 161 | ||
162 | const pageUrl = (isDevelopment && import.meta.env.VITE_DEV_SERVER_URL !== undefined) | ||
163 | ? import.meta.env.VITE_DEV_SERVER_URL | ||
164 | : new URL('../renderer/dist/index.html', `file://${__dirname}`).toString(); | ||
142 | await mainWindow.loadURL(pageUrl); | 165 | await mainWindow.loadURL(pageUrl); |
143 | 166 | ||
144 | mainWindow.addBrowserView(browserView); | 167 | mainWindow.setBrowserView(browserView); |
145 | 168 | ||
146 | return browserView.webContents.loadURL('https://git.marussy.com/sophie/about'); | 169 | return browserView.webContents.loadURL('https://git.marussy.com/sophie/about'); |
147 | } | 170 | } |
diff --git a/packages/main/tsconfig.json b/packages/main/tsconfig.json index 5afee21..2529709 100644 --- a/packages/main/tsconfig.json +++ b/packages/main/tsconfig.json | |||
@@ -12,6 +12,9 @@ | |||
12 | }, | 12 | }, |
13 | "references": [ | 13 | "references": [ |
14 | { | 14 | { |
15 | "path": "../service-shared" | ||
16 | }, | ||
17 | { | ||
15 | "path": "../shared" | 18 | "path": "../shared" |
16 | } | 19 | } |
17 | ], | 20 | ], |
diff --git a/packages/preload/src/SophieRendererImpl.ts b/packages/preload/src/SophieRendererImpl.ts index 6bffeae..bd0f6cb 100644 --- a/packages/preload/src/SophieRendererImpl.ts +++ b/packages/preload/src/SophieRendererImpl.ts | |||
@@ -86,6 +86,10 @@ export class SophieRendererImpl implements SophieRenderer { | |||
86 | this.#send(RendererToMainIpcMessage.SetPaletteMode, mode); | 86 | this.#send(RendererToMainIpcMessage.SetPaletteMode, mode); |
87 | } | 87 | } |
88 | } | 88 | } |
89 | |||
90 | reloadAllServices(): void { | ||
91 | this.#send(RendererToMainIpcMessage.ReloadAllServices); | ||
92 | } | ||
89 | } | 93 | } |
90 | 94 | ||
91 | export function createSophieRenderer(): SophieRenderer { | 95 | export function createSophieRenderer(): SophieRenderer { |
@@ -103,5 +107,6 @@ export function createSophieRenderer(): SophieRenderer { | |||
103 | setSharedStoreListener: impl.setSharedStoreListener.bind(impl), | 107 | setSharedStoreListener: impl.setSharedStoreListener.bind(impl), |
104 | setBrowserViewBounds: impl.setBrowserViewBounds.bind(impl), | 108 | setBrowserViewBounds: impl.setBrowserViewBounds.bind(impl), |
105 | setPaletteMode: impl.setPaletteMode.bind(impl), | 109 | setPaletteMode: impl.setPaletteMode.bind(impl), |
110 | reloadAllServices: impl.reloadAllServices.bind(impl), | ||
106 | }; | 111 | }; |
107 | } | 112 | } |
diff --git a/packages/renderer/src/devTools.ts b/packages/renderer/src/devTools.ts index ffd99e6..44c87ae 100644 --- a/packages/renderer/src/devTools.ts +++ b/packages/renderer/src/devTools.ts | |||
@@ -55,3 +55,16 @@ export function exposeToReduxDevtools(model: IAnyStateTreeNode): void { | |||
55 | console.error('Could not connect to Redux devtools', err); | 55 | console.error('Could not connect to Redux devtools', err); |
56 | }); | 56 | }); |
57 | } | 57 | } |
58 | |||
59 | /** | ||
60 | * Sends a message to the main process to reload all services when | ||
61 | * `build/watch.js` sends a reload event on bundle write. | ||
62 | */ | ||
63 | export function hotReloadServices(): void { | ||
64 | import.meta.hot?.on( | ||
65 | 'sophie:reload-services', | ||
66 | () => { | ||
67 | window.sophieRenderer.reloadAllServices(); | ||
68 | }, | ||
69 | ); | ||
70 | } | ||
diff --git a/packages/renderer/src/index.tsx b/packages/renderer/src/index.tsx index 90cba2c..0919b93 100644 --- a/packages/renderer/src/index.tsx +++ b/packages/renderer/src/index.tsx | |||
@@ -29,11 +29,15 @@ import { render } from 'react-dom'; | |||
29 | import { App } from './components/App'; | 29 | import { App } from './components/App'; |
30 | import { StoreProvider } from './components/StoreProvider'; | 30 | import { StoreProvider } from './components/StoreProvider'; |
31 | import { ThemeProvider } from './components/ThemeProvider'; | 31 | import { ThemeProvider } from './components/ThemeProvider'; |
32 | import { exposeToReduxDevtools } from './devTools'; | 32 | import { exposeToReduxDevtools, hotReloadServices } from './devTools'; |
33 | import { createAndConnectRootStore } from './stores/RootStore'; | 33 | import { createAndConnectRootStore } from './stores/RootStore'; |
34 | 34 | ||
35 | const isDevelopment = import.meta.env.MODE === 'development'; | 35 | const isDevelopment = import.meta.env.MODE === 'development'; |
36 | 36 | ||
37 | if (isDevelopment) { | ||
38 | hotReloadServices(); | ||
39 | } | ||
40 | |||
37 | const store = createAndConnectRootStore(window.sophieRenderer); | 41 | const store = createAndConnectRootStore(window.sophieRenderer); |
38 | 42 | ||
39 | if (isDevelopment) { | 43 | if (isDevelopment) { |
diff --git a/packages/service-preload/package.json b/packages/service-preload/package.json new file mode 100644 index 0000000..1296cda --- /dev/null +++ b/packages/service-preload/package.json | |||
@@ -0,0 +1,22 @@ | |||
1 | { | ||
2 | "name": "@sophie/service-preload", | ||
3 | "version": "0.1.0", | ||
4 | "private": true, | ||
5 | "sideEffects": false, | ||
6 | "main": "dist/index.cjs", | ||
7 | "types": "dist-types/index.d.ts", | ||
8 | "scripts": { | ||
9 | "clean": "rimraf dist dist-types tsconfig.tsbuildinfo", | ||
10 | "build": "vite build", | ||
11 | "typecheck": "tsc" | ||
12 | }, | ||
13 | "dependencies": { | ||
14 | "@sophie/service-shared": "workspace:*", | ||
15 | "electron": "16.0.5" | ||
16 | }, | ||
17 | "devDependencies": { | ||
18 | "rimraf": "^3.0.2", | ||
19 | "typescript": "^4.5.4", | ||
20 | "vite": "^2.7.6" | ||
21 | } | ||
22 | } | ||
diff --git a/packages/service-preload/src/index.ts b/packages/service-preload/src/index.ts new file mode 100644 index 0000000..4e93a07 --- /dev/null +++ b/packages/service-preload/src/index.ts | |||
@@ -0,0 +1,29 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2021-2022 Kristóf Marussy <kristof@marussy.com> | ||
3 | * | ||
4 | * This file is part of Sophie. | ||
5 | * | ||
6 | * Sophie is free software: you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU Affero General Public License as | ||
8 | * published by the Free Software Foundation, version 3. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU Affero General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU Affero General Public License | ||
16 | * along with this program. If not, see <https://www.gnu.org/licenses/>. | ||
17 | * | ||
18 | * SPDX-License-Identifier: AGPL-3.0-only | ||
19 | */ | ||
20 | |||
21 | import { ipcRenderer } from 'electron'; | ||
22 | import { ServiceToMainIpcMessage } from '@sophie/service-shared'; | ||
23 | |||
24 | let i = 1; | ||
25 | |||
26 | setInterval(() => { | ||
27 | ipcRenderer.send(ServiceToMainIpcMessage.SetUnreadCount, { direct: i }); | ||
28 | i += 1; | ||
29 | }, 1000); | ||
diff --git a/packages/service-preload/tsconfig.json b/packages/service-preload/tsconfig.json new file mode 100644 index 0000000..e5b8ccb --- /dev/null +++ b/packages/service-preload/tsconfig.json | |||
@@ -0,0 +1,17 @@ | |||
1 | { | ||
2 | "extends": "../../tsconfig.json", | ||
3 | "compilerOptions": { | ||
4 | "composite": true, | ||
5 | "declarationDir": "dist-types", | ||
6 | "emitDeclarationOnly": true, | ||
7 | "rootDir": "src" | ||
8 | }, | ||
9 | "references": [ | ||
10 | { | ||
11 | "path": "../service-shared" | ||
12 | } | ||
13 | ], | ||
14 | "include": [ | ||
15 | "src/**/*.ts" | ||
16 | ] | ||
17 | } | ||
diff --git a/packages/service-preload/vite.config.js b/packages/service-preload/vite.config.js new file mode 100644 index 0000000..5af78d9 --- /dev/null +++ b/packages/service-preload/vite.config.js | |||
@@ -0,0 +1,31 @@ | |||
1 | // @ts-check | ||
2 | |||
3 | import { builtinModules } from 'module'; | ||
4 | |||
5 | import { chrome, makeConfig } from '../../config/vite-common'; | ||
6 | |||
7 | /** @type string */ | ||
8 | const PACKAGE_ROOT = __dirname; | ||
9 | |||
10 | /** | ||
11 | * @type {import('vite').UserConfig} | ||
12 | * @see https://vitejs.dev/config/ | ||
13 | */ | ||
14 | const config = makeConfig({ | ||
15 | root: PACKAGE_ROOT, | ||
16 | build: { | ||
17 | target: chrome, | ||
18 | lib: { | ||
19 | entry: 'src/index.ts', | ||
20 | formats: ['cjs'], | ||
21 | }, | ||
22 | rollupOptions: { | ||
23 | external: [ | ||
24 | 'electron', | ||
25 | ...builtinModules, | ||
26 | ], | ||
27 | }, | ||
28 | }, | ||
29 | }); | ||
30 | |||
31 | export default config; | ||
diff --git a/packages/service-shared/package.json b/packages/service-shared/package.json new file mode 100644 index 0000000..88f113e --- /dev/null +++ b/packages/service-shared/package.json | |||
@@ -0,0 +1,21 @@ | |||
1 | { | ||
2 | "name": "@sophie/service-shared", | ||
3 | "version": "0.1.0", | ||
4 | "private": true, | ||
5 | "sideEffects": false, | ||
6 | "main": "dist/index.cjs", | ||
7 | "types": "dist-types/index.d.ts", | ||
8 | "scripts": { | ||
9 | "clean": "rimraf dist dist-types tsconfig.tsbuildinfo", | ||
10 | "build": "vite build", | ||
11 | "typecheck": "tsc" | ||
12 | }, | ||
13 | "dependencies": { | ||
14 | "zod": "^3.11.6" | ||
15 | }, | ||
16 | "devDependencies": { | ||
17 | "rimraf": "^3.0.2", | ||
18 | "typescript": "^4.5.4", | ||
19 | "vite": "^2.7.6" | ||
20 | } | ||
21 | } | ||
diff --git a/packages/shared/src/ipc/RendererToMainIpcMessage.ts b/packages/service-shared/src/index.ts index ba354d1..c517959 100644 --- a/packages/shared/src/ipc/RendererToMainIpcMessage.ts +++ b/packages/service-shared/src/index.ts | |||
@@ -18,8 +18,11 @@ | |||
18 | * SPDX-License-Identifier: AGPL-3.0-only | 18 | * SPDX-License-Identifier: AGPL-3.0-only |
19 | */ | 19 | */ |
20 | 20 | ||
21 | export enum RendererToMainIpcMessage { | 21 | export { ServiceToMainIpcMessage } from './ipc'; |
22 | SharedStoreSnapshotRequest = 'sophie-shared-store-snapshot-request', | 22 | |
23 | SetBrowserViewBounds = 'sophie-set-browser-view-bounds', | 23 | export type { |
24 | SetPaletteMode = 'sophie-set-palette-mode', | 24 | UnreadCount, |
25 | } | 25 | } from './schemas'; |
26 | export { | ||
27 | unreadCount, | ||
28 | } from './schemas'; | ||
diff --git a/packages/shared/src/ipc/MainToRendererIpcMessage.ts b/packages/service-shared/src/ipc.ts index 92da489..ad2ceca 100644 --- a/packages/shared/src/ipc/MainToRendererIpcMessage.ts +++ b/packages/service-shared/src/ipc.ts | |||
@@ -18,7 +18,6 @@ | |||
18 | * SPDX-License-Identifier: AGPL-3.0-only | 18 | * SPDX-License-Identifier: AGPL-3.0-only |
19 | */ | 19 | */ |
20 | 20 | ||
21 | export enum MainToRendererIpcMessage { | 21 | export enum ServiceToMainIpcMessage { |
22 | SharedStoreSnapshot = 'sophie-shared-store-snapshot', | 22 | SetUnreadCount = 'sophie-service-to-main:set-unread-count', |
23 | SharedStorePatch = 'sophie-shared-store-patch', | ||
24 | } | 23 | } |
diff --git a/packages/service-shared/src/schemas.ts b/packages/service-shared/src/schemas.ts new file mode 100644 index 0000000..1513e43 --- /dev/null +++ b/packages/service-shared/src/schemas.ts | |||
@@ -0,0 +1,28 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2021-2022 Kristóf Marussy <kristof@marussy.com> | ||
3 | * | ||
4 | * This file is part of Sophie. | ||
5 | * | ||
6 | * Sophie is free software: you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU Affero General Public License as | ||
8 | * published by the Free Software Foundation, version 3. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU Affero General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU Affero General Public License | ||
16 | * along with this program. If not, see <https://www.gnu.org/licenses/>. | ||
17 | * | ||
18 | * SPDX-License-Identifier: AGPL-3.0-only | ||
19 | */ | ||
20 | |||
21 | import { z } from 'zod'; | ||
22 | |||
23 | export const unreadCount = z.object({ | ||
24 | direct: z.number().nonnegative().optional(), | ||
25 | indirect: z.number().nonnegative().optional(), | ||
26 | }); | ||
27 | |||
28 | export type UnreadCount = z.infer<typeof unreadCount>; | ||
diff --git a/packages/service-shared/tsconfig.json b/packages/service-shared/tsconfig.json new file mode 100644 index 0000000..de75833 --- /dev/null +++ b/packages/service-shared/tsconfig.json | |||
@@ -0,0 +1,12 @@ | |||
1 | { | ||
2 | "extends": "../../tsconfig.json", | ||
3 | "compilerOptions": { | ||
4 | "composite": true, | ||
5 | "declarationDir": "dist-types", | ||
6 | "emitDeclarationOnly": true, | ||
7 | "rootDir": "src" | ||
8 | }, | ||
9 | "include": [ | ||
10 | "src/**/*.ts" | ||
11 | ] | ||
12 | } | ||
diff --git a/packages/service-shared/vite.config.js b/packages/service-shared/vite.config.js new file mode 100644 index 0000000..6f4959f --- /dev/null +++ b/packages/service-shared/vite.config.js | |||
@@ -0,0 +1,34 @@ | |||
1 | // @ts-check | ||
2 | |||
3 | import { builtinModules } from 'module'; | ||
4 | |||
5 | import { chrome, makeConfig, node } from '../../config/vite-common'; | ||
6 | |||
7 | /** @type string */ | ||
8 | const PACKAGE_ROOT = __dirname; | ||
9 | |||
10 | /** | ||
11 | * @type {import('vite').UserConfig} | ||
12 | * @see https://vitejs.dev/config/ | ||
13 | */ | ||
14 | const config = makeConfig({ | ||
15 | root: PACKAGE_ROOT, | ||
16 | build: { | ||
17 | target: [ | ||
18 | chrome, | ||
19 | node, | ||
20 | ], | ||
21 | lib: { | ||
22 | entry: 'src/index.ts', | ||
23 | formats: ['cjs'], | ||
24 | }, | ||
25 | rollupOptions: { | ||
26 | external: [ | ||
27 | 'zod', | ||
28 | ...builtinModules, | ||
29 | ], | ||
30 | }, | ||
31 | }, | ||
32 | }); | ||
33 | |||
34 | export default config; | ||
diff --git a/packages/shared/package.json b/packages/shared/package.json index f5d4f90..96e9b68 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json | |||
@@ -2,6 +2,7 @@ | |||
2 | "name": "@sophie/shared", | 2 | "name": "@sophie/shared", |
3 | "version": "0.1.0", | 3 | "version": "0.1.0", |
4 | "private": true, | 4 | "private": true, |
5 | "sideEffects": false, | ||
5 | "main": "dist/index.cjs", | 6 | "main": "dist/index.cjs", |
6 | "module": "dist/index.es.js", | 7 | "module": "dist/index.es.js", |
7 | "types": "dist-types/index.d.ts", | 8 | "types": "dist-types/index.d.ts", |
@@ -10,14 +11,14 @@ | |||
10 | "build": "vite build", | 11 | "build": "vite build", |
11 | "typecheck": "tsc" | 12 | "typecheck": "tsc" |
12 | }, | 13 | }, |
13 | "devDependencies": { | ||
14 | "rimraf": "^3.0.2", | ||
15 | "typescript": "^4.5.4", | ||
16 | "vite": "^2.7.6" | ||
17 | }, | ||
18 | "dependencies": { | 14 | "dependencies": { |
19 | "mobx": "^6.3.10", | 15 | "mobx": "^6.3.10", |
20 | "mobx-state-tree": "^5.1.0", | 16 | "mobx-state-tree": "^5.1.0", |
21 | "zod": "^3.11.6" | 17 | "zod": "^3.11.6" |
18 | }, | ||
19 | "devDependencies": { | ||
20 | "rimraf": "^3.0.2", | ||
21 | "typescript": "^4.5.4", | ||
22 | "vite": "^2.7.6" | ||
22 | } | 23 | } |
23 | } | 24 | } |
diff --git a/packages/shared/src/contextBridge/SophieRenderer.ts b/packages/shared/src/contextBridge/SophieRenderer.ts index f2e2180..e310829 100644 --- a/packages/shared/src/contextBridge/SophieRenderer.ts +++ b/packages/shared/src/contextBridge/SophieRenderer.ts | |||
@@ -28,4 +28,6 @@ export interface SophieRenderer { | |||
28 | setBrowserViewBounds(bounds: BrowserViewBounds): void; | 28 | setBrowserViewBounds(bounds: BrowserViewBounds): void; |
29 | 29 | ||
30 | setPaletteMode(mode: PaletteMode): void; | 30 | setPaletteMode(mode: PaletteMode): void; |
31 | |||
32 | reloadAllServices(): void; | ||
31 | } | 33 | } |
diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts index 0a1ec40..f054571 100644 --- a/packages/shared/src/index.ts +++ b/packages/shared/src/index.ts | |||
@@ -20,8 +20,10 @@ | |||
20 | 20 | ||
21 | export type { SophieRenderer } from './contextBridge/SophieRenderer'; | 21 | export type { SophieRenderer } from './contextBridge/SophieRenderer'; |
22 | 22 | ||
23 | export { MainToRendererIpcMessage } from './ipc/MainToRendererIpcMessage'; | 23 | export { |
24 | export { RendererToMainIpcMessage } from './ipc/RendererToMainIpcMessage'; | 24 | MainToRendererIpcMessage, |
25 | RendererToMainIpcMessage, | ||
26 | } from './ipc'; | ||
25 | 27 | ||
26 | export type { | 28 | export type { |
27 | BrowserViewBounds, | 29 | BrowserViewBounds, |
diff --git a/packages/shared/src/ipc.ts b/packages/shared/src/ipc.ts new file mode 100644 index 0000000..2e35d7a --- /dev/null +++ b/packages/shared/src/ipc.ts | |||
@@ -0,0 +1,31 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2021-2022 Kristóf Marussy <kristof@marussy.com> | ||
3 | * | ||
4 | * This file is part of Sophie. | ||
5 | * | ||
6 | * Sophie is free software: you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU Affero General Public License as | ||
8 | * published by the Free Software Foundation, version 3. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU Affero General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU Affero General Public License | ||
16 | * along with this program. If not, see <https://www.gnu.org/licenses/>. | ||
17 | * | ||
18 | * SPDX-License-Identifier: AGPL-3.0-only | ||
19 | */ | ||
20 | |||
21 | export enum MainToRendererIpcMessage { | ||
22 | SharedStoreSnapshot = 'sophie-main-to-renderer:shared-store-snapshot', | ||
23 | SharedStorePatch = 'sophie-main-to-renderer:shared-store-patch', | ||
24 | } | ||
25 | |||
26 | export enum RendererToMainIpcMessage { | ||
27 | SharedStoreSnapshotRequest = 'sophie-renderer-to-main:shared-store-snapshot-request', | ||
28 | SetBrowserViewBounds = 'sophie-renderer-to-main:set-browser-view-bounds', | ||
29 | SetPaletteMode = 'sophie-renderer-to-main:set-palette-mode', | ||
30 | ReloadAllServices = 'sophie-renderer-to-main:reload-all-services', | ||
31 | } | ||