From 537c0bf4b6096431a319559ef3ec3a4fd35d52aa Mon Sep 17 00:00:00 2001
From: Jed Fox <git@jedfox.com>
Date: Fri, 3 Feb 2023 15:51:23 -0500
Subject: [PATCH] Add a warning when SharedArrayBuffer is not available (#600)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* Update index.js

* Switch to hard error when SharedArrayBuffer is unavailable

* Remove “Server misconfiguration alert!”
---
 packages/desktop-client/src/browser-server.js      |  8 ++++++++
 .../desktop-client/src/components/FatalError.js    | 14 ++++++++++++++
 2 files changed, 22 insertions(+)

diff --git a/packages/desktop-client/src/browser-server.js b/packages/desktop-client/src/browser-server.js
index eb19fc558..98159b3dd 100644
--- a/packages/desktop-client/src/browser-server.js
+++ b/packages/desktop-client/src/browser-server.js
@@ -10,6 +10,14 @@ self.addEventListener('message', e => {
       let version = msg.version;
       let hash = msg.hash;
 
+      if (!self.SharedArrayBuffer) {
+        self.postMessage({
+          type: 'app-init-failure',
+          SharedArrayBufferMissing: true
+        });
+        return;
+      }
+
       // eslint-disable-next-line
       importScripts(`${process.env.PUBLIC_URL}/kcab/kcab.worker.${hash}.js`);
 
diff --git a/packages/desktop-client/src/components/FatalError.js b/packages/desktop-client/src/components/FatalError.js
index 2b038ffb1..025d9a7f5 100644
--- a/packages/desktop-client/src/components/FatalError.js
+++ b/packages/desktop-client/src/components/FatalError.js
@@ -27,6 +27,20 @@ class FatalError extends React.Component {
           private browsing.
         </Text>
       );
+    } else if (error.SharedArrayBufferMissing) {
+      // SharedArrayBuffer isn't available
+      msg = (
+        <Text>
+          Actual requires access to <code>SharedArrayBuffer</code> in order to
+          function properly. If you’re seeing this error, either your browser
+          does not support <code>SharedArrayBuffer</code>, or your server is not
+          sending the appropriate headers, or you are not using HTTPS. See{' '}
+          <a href="https://actualbudget.github.io/docs/Troubleshooting/SharedArrayBuffer">
+            our troubleshooting documentation
+          </a>{' '}
+          for more information.
+        </Text>
+      );
     } else {
       // This indicates the backend failed to initialize. Show the
       // user something at least so they aren't looking at a blank
-- 
GitLab