aboutsummaryrefslogtreecommitdiffstats
path: root/packages
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2021-12-24 01:36:20 +0100
committerLibravatar Kristóf Marussy <kristof@marussy.com>2021-12-24 01:36:20 +0100
commitcf3ec7fc396125ed452c553b34ae2737329fc61d (patch)
tree6d2fdbb40b9c9b1d32168d1ccb2372b5602f1968 /packages
parentfeat: Set up partition persistence (diff)
downloadsophie-cf3ec7fc396125ed452c553b34ae2737329fc61d.tar.gz
sophie-cf3ec7fc396125ed452c553b34ae2737329fc61d.tar.zst
sophie-cf3ec7fc396125ed452c553b34ae2737329fc61d.zip
feat: Service to main process communication
Diffstat (limited to 'packages')
-rw-r--r--packages/main/package.json1
-rw-r--r--packages/main/src/index.ts51
-rw-r--r--packages/main/tsconfig.json3
-rw-r--r--packages/preload/src/SophieRendererImpl.ts5
-rw-r--r--packages/renderer/src/devTools.ts13
-rw-r--r--packages/renderer/src/index.tsx6
-rw-r--r--packages/service-preload/package.json22
-rw-r--r--packages/service-preload/src/index.ts29
-rw-r--r--packages/service-preload/tsconfig.json17
-rw-r--r--packages/service-preload/vite.config.js31
-rw-r--r--packages/service-shared/package.json21
-rw-r--r--packages/service-shared/src/index.ts (renamed from packages/shared/src/ipc/RendererToMainIpcMessage.ts)13
-rw-r--r--packages/service-shared/src/ipc.ts (renamed from packages/shared/src/ipc/MainToRendererIpcMessage.ts)5
-rw-r--r--packages/service-shared/src/schemas.ts28
-rw-r--r--packages/service-shared/tsconfig.json12
-rw-r--r--packages/service-shared/vite.config.js34
-rw-r--r--packages/shared/package.json11
-rw-r--r--packages/shared/src/contextBridge/SophieRenderer.ts2
-rw-r--r--packages/shared/src/index.ts6
-rw-r--r--packages/shared/src/ipc.ts31
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';
23import { getSnapshot, onPatch } from 'mobx-state-tree'; 23import { getSnapshot, onPatch } from 'mobx-state-tree';
24import { join } from 'path'; 24import { join } from 'path';
25import { 25import {
26 ServiceToMainIpcMessage,
27 unreadCount,
28} from '@sophie/service-shared';
29import {
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.
56const originalUserAgent = app.userAgentFallback; 60const originalUserAgent = app.userAgentFallback;
61const 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.
58if (!isDevelopment) { 63if (!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
91export function createSophieRenderer(): SophieRenderer { 95export 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 */
63export 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';
29import { App } from './components/App'; 29import { App } from './components/App';
30import { StoreProvider } from './components/StoreProvider'; 30import { StoreProvider } from './components/StoreProvider';
31import { ThemeProvider } from './components/ThemeProvider'; 31import { ThemeProvider } from './components/ThemeProvider';
32import { exposeToReduxDevtools } from './devTools'; 32import { exposeToReduxDevtools, hotReloadServices } from './devTools';
33import { createAndConnectRootStore } from './stores/RootStore'; 33import { createAndConnectRootStore } from './stores/RootStore';
34 34
35const isDevelopment = import.meta.env.MODE === 'development'; 35const isDevelopment = import.meta.env.MODE === 'development';
36 36
37if (isDevelopment) {
38 hotReloadServices();
39}
40
37const store = createAndConnectRootStore(window.sophieRenderer); 41const store = createAndConnectRootStore(window.sophieRenderer);
38 42
39if (isDevelopment) { 43if (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
21import { ipcRenderer } from 'electron';
22import { ServiceToMainIpcMessage } from '@sophie/service-shared';
23
24let i = 1;
25
26setInterval(() => {
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
3import { builtinModules } from 'module';
4
5import { chrome, makeConfig } from '../../config/vite-common';
6
7/** @type string */
8const PACKAGE_ROOT = __dirname;
9
10/**
11 * @type {import('vite').UserConfig}
12 * @see https://vitejs.dev/config/
13 */
14const 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
31export 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
21export enum RendererToMainIpcMessage { 21export { ServiceToMainIpcMessage } from './ipc';
22 SharedStoreSnapshotRequest = 'sophie-shared-store-snapshot-request', 22
23 SetBrowserViewBounds = 'sophie-set-browser-view-bounds', 23export type {
24 SetPaletteMode = 'sophie-set-palette-mode', 24 UnreadCount,
25} 25} from './schemas';
26export {
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
21export enum MainToRendererIpcMessage { 21export 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
21import { z } from 'zod';
22
23export const unreadCount = z.object({
24 direct: z.number().nonnegative().optional(),
25 indirect: z.number().nonnegative().optional(),
26});
27
28export 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
3import { builtinModules } from 'module';
4
5import { chrome, makeConfig, node } from '../../config/vite-common';
6
7/** @type string */
8const PACKAGE_ROOT = __dirname;
9
10/**
11 * @type {import('vite').UserConfig}
12 * @see https://vitejs.dev/config/
13 */
14const 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
34export 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
21export type { SophieRenderer } from './contextBridge/SophieRenderer'; 21export type { SophieRenderer } from './contextBridge/SophieRenderer';
22 22
23export { MainToRendererIpcMessage } from './ipc/MainToRendererIpcMessage'; 23export {
24export { RendererToMainIpcMessage } from './ipc/RendererToMainIpcMessage'; 24 MainToRendererIpcMessage,
25 RendererToMainIpcMessage,
26} from './ipc';
25 27
26export type { 28export 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
21export enum MainToRendererIpcMessage {
22 SharedStoreSnapshot = 'sophie-main-to-renderer:shared-store-snapshot',
23 SharedStorePatch = 'sophie-main-to-renderer:shared-store-patch',
24}
25
26export 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}