Bluesky app fork with some witchin' additions 💫

Couple of Sentry cleanups (#8532)

* Temp ignore a couple logs

* Add debug for unknown notifications

* Nvm let's do this in Sentry

* Downgrade two DMs network related issues

* Check for network errors before sending in Convo

* Do the same for event bus

* Fix mistake

authored by

Eric Bailey and committed by
GitHub
aeafb14f 4c75b568

+75 -49
+13 -1
src/lib/hooks/useNotificationHandler.ts
··· 322 322 const payload = e.notification.request.trigger 323 323 .payload as NotificationPayload 324 324 325 - if (!payload) return 325 + if (!payload) { 326 + logger.error('useNotificationsHandler: received no payload', { 327 + identifier: e.notification.request.identifier, 328 + }) 329 + return 330 + } 331 + if (!payload.reason) { 332 + logger.error('useNotificationsHandler: received unknown payload', { 333 + payload, 334 + identifier: e.notification.request.identifier, 335 + }) 336 + return 337 + } 326 338 327 339 logger.debug( 328 340 'User pressed a notification, opening notifications tab',
+44 -30
src/state/messages/convo/agent.ts
··· 10 10 import {nanoid} from 'nanoid/non-secure' 11 11 12 12 import {networkRetry} from '#/lib/async/retry' 13 + import {isNetworkError} from '#/lib/strings/errors' 13 14 import {Logger} from '#/logger' 14 15 import {isNative} from '#/platform/detection' 15 16 import { ··· 130 131 131 132 getSnapshot(): ConvoState { 132 133 if (!this.snapshot) this.snapshot = this.generateSnapshot() 133 - // logger.debug('Convo: snapshotted', {}) 134 + // logger.debug('snapshotted', {}) 134 135 return this.snapshot 135 136 } 136 137 ··· 392 393 break 393 394 } 394 395 395 - logger.debug(`Convo: dispatch '${action.event}'`, { 396 + logger.debug(`dispatch '${action.event}'`, { 396 397 id: this.id, 397 398 prev: prevStatus, 398 399 next: this.status, ··· 467 468 * Some validation prior to `Ready` status 468 469 */ 469 470 if (!this.convo) { 470 - throw new Error('Convo: could not find convo') 471 + throw new Error('could not find convo') 471 472 } 472 473 if (!this.sender) { 473 - throw new Error('Convo: could not find sender in convo') 474 + throw new Error('could not find sender in convo') 474 475 } 475 476 if (!this.recipients) { 476 - throw new Error('Convo: could not find recipients in convo') 477 + throw new Error('could not find recipients in convo') 477 478 } 478 479 479 480 const userIsDisabled = Boolean(this.sender.chatDisabled) ··· 484 485 this.dispatch({event: ConvoDispatchEvent.Ready}) 485 486 } 486 487 } catch (e: any) { 487 - logger.error(e, {message: 'Convo: setup failed'}) 488 + if (!isNetworkError(e)) { 489 + logger.error('setup failed', { 490 + safeMessage: e.message, 491 + }) 492 + } 488 493 489 494 this.dispatch({ 490 495 event: ConvoDispatchEvent.Error, ··· 589 594 this.sender = sender || this.sender 590 595 this.recipients = recipients || this.recipients 591 596 } catch (e: any) { 592 - logger.error(e, {message: `Convo: failed to refresh convo`}) 597 + if (!isNetworkError(e)) { 598 + logger.error(`failed to refresh convo`, { 599 + safeMessage: e.message, 600 + }) 601 + } 593 602 } 594 603 } 595 604 ··· 599 608 } 600 609 | undefined 601 610 async fetchMessageHistory() { 602 - logger.debug('Convo: fetch message history', {}) 611 + logger.debug('fetch message history', {}) 603 612 604 613 /* 605 614 * If oldestRev is null, we've fetched all history. ··· 653 662 } 654 663 } 655 664 } catch (e: any) { 656 - logger.error('Convo: failed to fetch message history') 665 + if (!isNetworkError(e)) { 666 + logger.error('failed to fetch message history', { 667 + safeMessage: e.message, 668 + }) 669 + } 657 670 658 671 this.fetchMessageHistoryError = { 659 672 retry: () => { ··· 802 815 // Ignore empty messages for now since they have no other purpose atm 803 816 if (!message.text.trim() && !message.embed) return 804 817 805 - logger.debug('Convo: send message', {}) 818 + logger.debug('send message', {}) 806 819 807 820 const tempId = nanoid() 808 821 ··· 836 849 837 850 async processPendingMessages() { 838 851 logger.debug( 839 - `Convo: processing messages (${this.pendingMessages.size} remaining)`, 852 + `processing messages (${this.pendingMessages.size} remaining)`, 840 853 {}, 841 854 ) 842 855 ··· 881 894 // continue queue processing 882 895 await this.processPendingMessages() 883 896 } catch (e: any) { 884 - logger.error(e, {message: `Convo: failed to send message`}) 885 897 this.handleSendMessageFailure(e) 886 898 this.isProcessingPendingMessages = false 887 899 } ··· 914 926 case 'recipient has disabled incoming messages': 915 927 break 916 928 default: 917 - logger.warn( 918 - `Convo handleSendMessageFailure could not handle error`, 919 - { 929 + if (!isNetworkError(e)) { 930 + logger.warn(`handleSendMessageFailure could not handle error`, { 920 931 status: e.status, 921 932 message: e.message, 922 - }, 923 - ) 933 + }) 934 + } 924 935 break 925 936 } 926 937 } 927 938 } else { 928 939 this.pendingMessageFailure = 'unrecoverable' 929 - logger.error(e, { 930 - message: `Convo handleSendMessageFailure received unknown error`, 931 - }) 940 + 941 + if (!isNetworkError(e)) { 942 + logger.error(`handleSendMessageFailure received unknown error`, { 943 + safeMessage: e.message, 944 + }) 945 + } 932 946 } 933 947 934 948 this.commit() ··· 944 958 this.commit() 945 959 946 960 logger.debug( 947 - `Convo: batch retrying ${this.pendingMessages.size} pending messages`, 961 + `batch retrying ${this.pendingMessages.size} pending messages`, 948 962 {}, 949 963 ) 950 964 ··· 977 991 978 992 this.commit() 979 993 980 - logger.debug( 981 - `Convo: sent ${this.pendingMessages.size} pending messages`, 982 - {}, 983 - ) 994 + logger.debug(`sent ${this.pendingMessages.size} pending messages`, {}) 984 995 } catch (e: any) { 985 - logger.error(e, {message: `Convo: failed to batch retry messages`}) 986 996 this.handleSendMessageFailure(e) 987 997 } 988 998 } 989 999 990 1000 async deleteMessage(messageId: string) { 991 - logger.debug('Convo: delete message', {}) 1001 + logger.debug('delete message', {}) 992 1002 993 1003 this.deletedMessages.add(messageId) 994 1004 this.commit() ··· 1004 1014 ) 1005 1015 }) 1006 1016 } catch (e: any) { 1007 - logger.error(e, {message: `Convo: failed to delete message`}) 1017 + if (!isNetworkError(e)) { 1018 + logger.error(`failed to delete message`, { 1019 + safeMessage: e.message, 1020 + }) 1021 + } 1008 1022 this.deletedMessages.delete(messageId) 1009 1023 this.commit() 1010 1024 throw e ··· 1232 1246 } 1233 1247 1234 1248 try { 1235 - logger.info(`Adding reaction ${emoji} to message ${messageId}`) 1249 + logger.debug(`Adding reaction ${emoji} to message ${messageId}`) 1236 1250 const {data} = await this.agent.chat.bsky.convo.addReaction( 1237 1251 {messageId, value: emoji, convoId: this.convoId}, 1238 1252 {encoding: 'application/json', headers: DM_SERVICE_HEADERS}, ··· 1297 1311 } 1298 1312 1299 1313 try { 1300 - logger.info(`Removing reaction ${emoji} from message ${messageId}`) 1314 + logger.debug(`Removing reaction ${emoji} from message ${messageId}`) 1301 1315 await this.agent.chat.bsky.convo.removeReaction( 1302 1316 {messageId, value: emoji, convoId: this.convoId}, 1303 1317 {encoding: 'application/json', headers: DM_SERVICE_HEADERS},
+18 -18
src/state/messages/events/agent.ts
··· 3 3 import {nanoid} from 'nanoid/non-secure' 4 4 5 5 import {networkRetry} from '#/lib/async/retry' 6 + import {isNetworkError} from '#/lib/strings/errors' 6 7 import {Logger} from '#/logger' 7 8 import { 8 9 BACKGROUND_POLL_INTERVAL, ··· 18 19 } from '#/state/messages/events/types' 19 20 import {DM_SERVICE_HEADERS} from '#/state/queries/messages/const' 20 21 21 - const LOGGER_CONTEXT = 'MessagesEventBus' 22 22 const logger = Logger.create(Logger.Context.DMsAgent) 23 23 24 24 export class MessagesEventBus { ··· 91 91 } 92 92 93 93 background() { 94 - logger.debug(`${LOGGER_CONTEXT}: background`, {}) 94 + logger.debug(`background`, {}) 95 95 this.dispatch({event: MessagesEventBusDispatchEvent.Background}) 96 96 } 97 97 98 98 suspend() { 99 - logger.debug(`${LOGGER_CONTEXT}: suspend`, {}) 99 + logger.debug(`suspend`, {}) 100 100 this.dispatch({event: MessagesEventBusDispatchEvent.Suspend}) 101 101 } 102 102 103 103 resume() { 104 - logger.debug(`${LOGGER_CONTEXT}: resume`, {}) 104 + logger.debug(`resume`, {}) 105 105 this.dispatch({event: MessagesEventBusDispatchEvent.Resume}) 106 106 } 107 107 ··· 228 228 break 229 229 } 230 230 231 - logger.debug(`${LOGGER_CONTEXT}: dispatch '${action.event}'`, { 231 + logger.debug(`dispatch '${action.event}'`, { 232 232 id: this.id, 233 233 prev: prevStatus, 234 234 next: this.status, ··· 236 236 } 237 237 238 238 private async init() { 239 - logger.debug(`${LOGGER_CONTEXT}: init`, {}) 239 + logger.debug(`init`, {}) 240 240 241 241 try { 242 242 const response = await networkRetry(2, () => { ··· 260 260 261 261 this.dispatch({event: MessagesEventBusDispatchEvent.Ready}) 262 262 } catch (e: any) { 263 - logger.error(e, { 264 - message: `${LOGGER_CONTEXT}: init failed`, 265 - }) 263 + if (!isNetworkError(e)) { 264 + logger.error(`init failed`, { 265 + safeMessage: e.message, 266 + }) 267 + } 266 268 267 269 this.dispatch({ 268 270 event: MessagesEventBusDispatchEvent.Error, ··· 324 326 this.isPolling = true 325 327 326 328 // logger.debug( 327 - // `${LOGGER_CONTEXT}: poll`, 329 + // `poll`, 328 330 // { 329 331 // requestedPollIntervals: Array.from( 330 332 // this.requestedPollIntervals.values(), ··· 370 372 } 371 373 372 374 if (needsEmit) { 373 - try { 374 - this.emitter.emit('event', {type: 'logs', logs: batch}) 375 - } catch (e: any) { 376 - logger.error(e, { 377 - message: `${LOGGER_CONTEXT}: process latest events`, 378 - }) 379 - } 375 + this.emitter.emit('event', {type: 'logs', logs: batch}) 380 376 } 381 377 } catch (e: any) { 382 - logger.error(e, {message: `${LOGGER_CONTEXT}: poll events failed`}) 378 + if (!isNetworkError(e)) { 379 + logger.error(`poll events failed`, { 380 + safeMessage: e.message, 381 + }) 382 + } 383 383 384 384 this.dispatch({ 385 385 event: MessagesEventBusDispatchEvent.Error,