about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--__tests__/lib/errors.test.ts14
-rw-r--r--src/lib/strings/errors.ts18
-rw-r--r--src/logger/index.ts10
-rw-r--r--src/view/com/util/UserAvatar.tsx3
4 files changed, 30 insertions, 15 deletions
diff --git a/__tests__/lib/errors.test.ts b/__tests__/lib/errors.test.ts
index 39e8d189e..e72139684 100644
--- a/__tests__/lib/errors.test.ts
+++ b/__tests__/lib/errors.test.ts
@@ -9,11 +9,11 @@ describe('isNetworkError', () => {
   ]
   const outputs = [true, false, false, true]
 
-  it('correctly distinguishes network errors', () => {
-    for (let i = 0; i < inputs.length; i++) {
-      const input = inputs[i]
-      const result = isNetworkError(input)
-      expect(result).toEqual(outputs[i])
-    }
-  })
+  for (let i = 0; i < inputs.length; i++) {
+    const input = inputs[i]
+    const output = outputs[i]
+    it(`correctly distinguishes network errors for ${input}`, () => {
+      expect(isNetworkError(input)).toEqual(output)
+    })
+  }
 })
diff --git a/src/lib/strings/errors.ts b/src/lib/strings/errors.ts
index 899d8ebce..7d00c5e7f 100644
--- a/src/lib/strings/errors.ts
+++ b/src/lib/strings/errors.ts
@@ -20,11 +20,19 @@ export function cleanError(str: any): string {
   return str
 }
 
+const NETWORK_ERRORS = [
+  'Abort',
+  'Network request failed',
+  'Failed to fetch',
+  'Load failed',
+]
+
 export function isNetworkError(e: unknown) {
   const str = String(e)
-  return (
-    str.includes('Abort') ||
-    str.includes('Network request failed') ||
-    str.includes('Failed to fetch')
-  )
+  for (const err of NETWORK_ERRORS) {
+    if (str.includes(err)) {
+      return true
+    }
+  }
+  return false
 }
diff --git a/src/logger/index.ts b/src/logger/index.ts
index d6d8d9fc1..98635c6a9 100644
--- a/src/logger/index.ts
+++ b/src/logger/index.ts
@@ -1,10 +1,11 @@
 import format from 'date-fns/format'
 import {nanoid} from 'nanoid/non-secure'
 
-import {Sentry} from '#/logger/sentry'
-import * as env from '#/env'
 import {DebugContext} from '#/logger/debugContext'
 import {add} from '#/logger/logDump'
+import {Sentry} from '#/logger/sentry'
+import {isNetworkError} from 'lib/strings/errors'
+import * as env from '#/env'
 
 export enum LogLevel {
   Debug = 'debug',
@@ -160,6 +161,11 @@ export const sentryTransport: Transport = (
       timestamp: timestamp / 1000, // Sentry expects seconds
     })
 
+    // We don't want to send any network errors to sentry
+    if (isNetworkError(message)) {
+      return
+    }
+
     /**
      * Send all higher levels with `captureMessage`, with appropriate severity
      * level
diff --git a/src/view/com/util/UserAvatar.tsx b/src/view/com/util/UserAvatar.tsx
index 76d9d1503..2b4376b69 100644
--- a/src/view/com/util/UserAvatar.tsx
+++ b/src/view/com/util/UserAvatar.tsx
@@ -327,7 +327,8 @@ let EditableUserAvatar = ({
 
       onSelectNewAvatar(croppedImage)
     } catch (e: any) {
-      if (!String(e).includes('Canceled')) {
+      // Don't log errors for cancelling selection to sentry on ios or android
+      if (!String(e).toLowerCase().includes('cancel')) {
         logger.error('Failed to crop banner', {error: e})
       }
     }