about summary refs log tree commit diff
diff options
context:
space:
mode:
authordan <dan.abramov@gmail.com>2024-03-21 17:01:55 +0000
committerGitHub <noreply@github.com>2024-03-21 17:01:55 +0000
commit55fb81867be16d9eade44727e34a17c68f7b506b (patch)
tree74a6a04760713b5d5276e2cea4d69a19eca3dddf
parent7503d83eaa5ac35b06c7223ff6395f9dadc63c0f (diff)
downloadvoidsky-55fb81867be16d9eade44727e34a17c68f7b506b.tar.zst
[Statsig] Protect against early logEvent call crashing (#3315)
* [Statsig] Check if initialized

* Never interrupt the caller
-rw-r--r--src/lib/statsig/statsig.tsx20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/lib/statsig/statsig.tsx b/src/lib/statsig/statsig.tsx
index 9bccedc6e..a9d69fda7 100644
--- a/src/lib/statsig/statsig.tsx
+++ b/src/lib/statsig/statsig.tsx
@@ -46,11 +46,21 @@ export function logEvent<E extends keyof LogEvents>(
   eventName: E & string,
   rawMetadata: LogEvents[E] & FlatJSONRecord,
 ) {
-  const fullMetadata = {
-    ...rawMetadata,
-  } as Record<string, string> // Statsig typings are unnecessarily strict here.
-  fullMetadata.routeName = getCurrentRouteName() ?? '(Uninitialized)'
-  Statsig.logEvent(eventName, null, fullMetadata)
+  try {
+    const fullMetadata = {
+      ...rawMetadata,
+    } as Record<string, string> // Statsig typings are unnecessarily strict here.
+    fullMetadata.routeName = getCurrentRouteName() ?? '(Uninitialized)'
+    if (Statsig.initializeCalled()) {
+      Statsig.logEvent(eventName, null, fullMetadata)
+    }
+  } catch (e) {
+    // A log should never interrupt the calling code, whatever happens.
+    // Rethrow on a clean stack.
+    setTimeout(() => {
+      throw e
+    })
+  }
 }
 
 export function useGate(gateName: string) {