diff --git a/web/database/database-module-provider.js b/web/database/database-module-provider.js
--- a/web/database/database-module-provider.js
+++ b/web/database/database-module-provider.js
@@ -5,7 +5,7 @@
 
 import {
   DATABASE_WORKER_PATH,
-  DATABASE_MODULE_FILE_PATH,
+  WORKERS_MODULES_DIR_PATH,
   SQLITE_ENCRYPTION_KEY,
 } from './utils/constants.js';
 import { isDesktopSafari, isSQLiteSupported } from './utils/db-utils.js';
@@ -86,7 +86,7 @@
         invariant(this.workerProxy, 'Worker proxy should exist');
         await this.workerProxy.scheduleOnWorker({
           type: workerRequestMessageTypes.INIT,
-          databaseModuleFilePath: `${origin}${baseURL}${DATABASE_MODULE_FILE_PATH}`,
+          databaseModuleFilePath: `${origin}${baseURL}${WORKERS_MODULES_DIR_PATH}`,
           encryptionKey,
           commQueryExecutorFilename,
         });
diff --git a/web/database/utils/constants.js b/web/database/utils/constants.js
--- a/web/database/utils/constants.js
+++ b/web/database/utils/constants.js
@@ -8,10 +8,12 @@
 export const CURRENT_USER_ID_KEY = 'current_user_id';
 
 export const DATABASE_WORKER_PATH = 'worker/database';
-export const DATABASE_MODULE_FILE_PATH = '/compiled/webworkers';
+export const WORKERS_MODULES_DIR_PATH = '/compiled/webworkers';
 
 export const DEFAULT_COMM_QUERY_EXECUTOR_FILENAME = 'comm_query_executor.wasm';
 
+export const DEFAULT_OLM_FILENAME = 'olm.wasm';
+
 export const COMM_SQLITE_DATABASE_PATH = 'comm.sqlite';
 
 export const NOTIFICATIONS_OLM_DATA_CONTENT = 'notificationsOlmDataContent';
diff --git a/web/push-notif/notif-crypto-utils.js b/web/push-notif/notif-crypto-utils.js
new file mode 100644
--- /dev/null
+++ b/web/push-notif/notif-crypto-utils.js
@@ -0,0 +1,8 @@
+// @flow
+
+export type WebNotifsServiceUtilsData = {
+  +olmWasmPath: string,
+  +staffCanSee: boolean,
+};
+
+export const WEB_NOTIFS_SERVICE_UTILS_KEY = 'webNotifsServiceUtils';
diff --git a/web/push-notif/push-notifs-handler.js b/web/push-notif/push-notifs-handler.js
--- a/web/push-notif/push-notifs-handler.js
+++ b/web/push-notif/push-notifs-handler.js
@@ -17,10 +17,17 @@
 } from 'lib/utils/push-alerts.js';
 import { ashoatKeyserverID } from 'lib/utils/validation-utils.js';
 
+import {
+  WORKERS_MODULES_DIR_PATH,
+  DEFAULT_OLM_FILENAME,
+} from '../database/utils/constants.js';
 import electron from '../electron.js';
 import PushNotifModal from '../modals/push-notif-modal.react.js';
 import { updateNavInfoActionType } from '../redux/action-types.js';
 import { useSelector } from '../redux/redux-utils.js';
+import { useStaffCanSee } from '../utils/staff-utils.js';
+
+declare var baseURL: string;
 
 function useCreateDesktopPushSubscription() {
   const dispatchActionPromise = useDispatchActionPromise();
@@ -64,6 +71,7 @@
 
   const dispatchActionPromise = useDispatchActionPromise();
   const callSetDeviceToken = useSetDeviceTokenFanout();
+  const staffCanSee = useStaffCanSee();
 
   return React.useCallback(async () => {
     if (!publicKey) {
@@ -75,6 +83,11 @@
       return;
     }
 
+    const origin = window.location.origin;
+    const olmWasmDirPath = `${origin}${baseURL}${WORKERS_MODULES_DIR_PATH}`;
+    const olmWasmPath = `${olmWasmDirPath}/${DEFAULT_OLM_FILENAME}`;
+    workerRegistration.active?.postMessage({ olmWasmPath, staffCanSee });
+
     const subscription = await workerRegistration.pushManager.subscribe({
       userVisibleOnly: true,
       applicationServerKey: publicKey,
@@ -84,7 +97,7 @@
       setDeviceTokenActionTypes,
       callSetDeviceToken(JSON.stringify(subscription)),
     );
-  }, [callSetDeviceToken, dispatchActionPromise, publicKey]);
+  }, [callSetDeviceToken, dispatchActionPromise, publicKey, staffCanSee]);
 }
 
 function PushNotificationsHandler(): React.Node {
diff --git a/web/push-notif/service-worker.js b/web/push-notif/service-worker.js
--- a/web/push-notif/service-worker.js
+++ b/web/push-notif/service-worker.js
@@ -1,9 +1,17 @@
 // @flow
 
+import localforage from 'localforage';
+
 import type { PlainTextWebNotification } from 'lib/types/notif-types.js';
 import { convertNonPendingIDToNewSchema } from 'lib/utils/migration-utils.js';
 import { ashoatKeyserverID } from 'lib/utils/validation-utils.js';
 
+import {
+  WEB_NOTIFS_SERVICE_UTILS_KEY,
+  type WebNotifsServiceUtilsData,
+} from './notif-crypto-utils.js';
+import { localforageConfig } from '../database/utils/constants.js';
+
 declare class PushMessageData {
   json(): Object;
 }
@@ -11,6 +19,10 @@
   +data: PushMessageData;
 }
 
+declare class CommAppMessage extends ExtendableEvent {
+  +data: { +olmWasmPath?: string, +staffCanSee?: boolean };
+}
+
 declare var clients: Clients;
 declare function skipWaiting(): Promise<void>;
 
@@ -22,6 +34,26 @@
   event.waitUntil(clients.claim());
 });
 
+self.addEventListener('message', (event: CommAppMessage) => {
+  localforage.config(localforageConfig);
+  event.waitUntil(
+    (async () => {
+      if (!event.data.olmWasmPath || event.data.staffCanSee === undefined) {
+        return;
+      }
+      const webNotifsServiceUtils: WebNotifsServiceUtilsData = {
+        olmWasmPath: event.data.olmWasmPath,
+        staffCanSee: event.data.staffCanSee,
+      };
+
+      await localforage.setItem(
+        WEB_NOTIFS_SERVICE_UTILS_KEY,
+        webNotifsServiceUtils,
+      );
+    })(),
+  );
+});
+
 self.addEventListener('push', (event: PushEvent) => {
   const data: PlainTextWebNotification = event.data.json();
 
diff --git a/web/webpack.config.cjs b/web/webpack.config.cjs
--- a/web/webpack.config.cjs
+++ b/web/webpack.config.cjs
@@ -145,6 +145,14 @@
       },
     ],
   }),
+  new CopyPlugin({
+    patterns: [
+      {
+        from: 'node_modules/@commapp/olm/olm.wasm',
+        to: path.join(__dirname, 'dist', 'webworkers'),
+      },
+    ],
+  }),
 ];
 
 const prodWebWorkersPlugins = [
@@ -161,6 +169,19 @@
       },
     ],
   }),
+  new CopyPlugin({
+    patterns: [
+      {
+        from: 'node_modules/@commapp/olm/olm.wasm',
+        to: path.join(
+          __dirname,
+          'dist',
+          'webworkers',
+          'olm.[contenthash:12].wasm',
+        ),
+      },
+    ],
+  }),
   new WebpackManifestPlugin({
     publicPath: '',
   }),