diff --git a/web/database/worker/db-worker.js b/web/database/worker/db-worker.js index d20b31fbf..972cf39c6 100644 --- a/web/database/worker/db-worker.js +++ b/web/database/worker/db-worker.js @@ -1,30 +1,56 @@ // @flow import localforage from 'localforage'; -import { type SharedWorkerMessageEvent } from '../../types/worker-types.js'; +import { + type SharedWorkerMessageEvent, + type WorkerRequestMessage, + type WorkerResponseMessage, + workerRequestMessageTypes, + workerResponseMessageTypes, +} from '../../types/worker-types.js'; const localforageConfig: PartialConfig = { driver: localforage.INDEXEDDB, name: 'comm', storeName: 'commStorage', description: 'Comm encrypted database storage', version: '1.0', }; localforage.config(localforageConfig); +function processAppRequest( + message: WorkerRequestMessage, +): ?WorkerResponseMessage { + if (message.type === workerRequestMessageTypes.PING) { + return { + type: workerResponseMessageTypes.PONG, + text: 'PONG', + }; + } + + throw new Error('Request type not supported'); +} + function connectHandler(event: SharedWorkerMessageEvent) { if (!event.ports.length) { return; } const port: MessagePort = event.ports[0]; console.log('Web database worker alive!'); port.onmessage = async function (messageEvent: MessageEvent) { - console.log('message from main thread: ', messageEvent.data); + const message: WorkerRequestMessage = (messageEvent.data: any); - port.postMessage({ message: 'response from worker' }); + try { + const result = processAppRequest(message); + port.postMessage(result); + } catch (e) { + port.postMessage({ + error: e, + }); + } }; } self.addEventListener('connect', connectHandler); diff --git a/web/types/worker-types.js b/web/types/worker-types.js index 56695fb0d..e04a8df29 100644 --- a/web/types/worker-types.js +++ b/web/types/worker-types.js @@ -1,6 +1,36 @@ // @flow +// The types of messages sent from app to worker +export const workerRequestMessageTypes = Object.freeze({ + PING: 0, +}); + +export type PingWorkerRequestMessage = { + +type: 0, + +text: string, +}; + +export type WorkerRequestMessage = PingWorkerRequestMessage; + +// The types of messages sent from worker to app +export const workerResponseMessageTypes = Object.freeze({ + PONG: 0, +}); + +export type ErrorWorkerResponseMessage = { + +error: Error, +}; +export type PongWorkerResponseMessage = { + +type: 0, + +text: string, +}; + +export type WorkerResponseMessage = + | PongWorkerResponseMessage + | ErrorWorkerResponseMessage; + +// SharedWorker types export type SharedWorkerMessageEvent = MessageEvent & { +ports: $ReadOnlyArray, ... };