diff --git a/src/state/messages/events/agent.ts b/src/state/messages/events/agent.ts index 0e2921588c..9efee87838 100644 --- a/src/state/messages/events/agent.ts +++ b/src/state/messages/events/agent.ts @@ -76,6 +76,7 @@ export class MessagesEventBus { case MessagesEventBusStatus.Initializing: { return { status: MessagesEventBusStatus.Initializing, + rev: undefined, error: undefined, setPollInterval: this.setPollInterval, trail: this.trail, @@ -84,6 +85,7 @@ export class MessagesEventBus { case MessagesEventBusStatus.Ready: { return { status: this.status, + rev: this.latestRev!, error: undefined, setPollInterval: this.setPollInterval, trail: this.trail, @@ -92,6 +94,7 @@ export class MessagesEventBus { case MessagesEventBusStatus.Suspended: { return { status: this.status, + rev: this.latestRev, error: undefined, setPollInterval: this.setPollInterval, trail: this.trail, @@ -100,6 +103,7 @@ export class MessagesEventBus { case MessagesEventBusStatus.Error: { return { status: MessagesEventBusStatus.Error, + rev: this.latestRev, error: this.error || { code: MessagesEventBusErrorCode.Unknown, retry: () => { @@ -113,6 +117,7 @@ export class MessagesEventBus { default: { return { status: MessagesEventBusStatus.Uninitialized, + rev: undefined, error: undefined, setPollInterval: this.setPollInterval, trail: this.trail, @@ -406,7 +411,11 @@ export class MessagesEventBus { } if (needsEmit) { - this.emitter.emit('events', batch) + try { + this.emitter.emit('events', batch) + } catch (e) { + logger.error(e) + } } } } diff --git a/src/state/messages/events/index.tsx b/src/state/messages/events/index.tsx index 34a6c881d5..65c76b0597 100644 --- a/src/state/messages/events/index.tsx +++ b/src/state/messages/events/index.tsx @@ -2,10 +2,12 @@ import React from 'react' import {AppState} from 'react-native' import {BskyAgent} from '@atproto-labs/api' +import {isWeb} from '#/platform/detection' import {MessagesEventBus} from '#/state/messages/events/agent' import {MessagesEventBusState} from '#/state/messages/events/types' import {useAgent} from '#/state/session' import {useDmServiceUrlStorage} from '#/screens/Messages/Temp/useDmServiceUrlStorage' +import {IS_DEV} from '#/env' const MessagesEventBusContext = React.createContext(null) @@ -36,6 +38,11 @@ export function MessagesEventBusProvider({ ) const service = React.useSyncExternalStore(bus.subscribe, bus.getSnapshot) + if (isWeb && IS_DEV) { + // @ts-ignore + window.messagesEventBus = service + } + React.useEffect(() => { const handleAppStateChange = (nextAppState: string) => { if (nextAppState === 'active') { diff --git a/src/state/messages/events/types.ts b/src/state/messages/events/types.ts index 7c2d85cead..846f8c89d8 100644 --- a/src/state/messages/events/types.ts +++ b/src/state/messages/events/types.ts @@ -54,6 +54,7 @@ export type MessagesEventBusDispatch = export type MessagesEventBusState = | { status: MessagesEventBusStatus.Uninitialized + rev: undefined error: undefined setPollInterval: (interval: number) => void trail: ( @@ -62,6 +63,7 @@ export type MessagesEventBusState = } | { status: MessagesEventBusStatus.Initializing + rev: undefined error: undefined setPollInterval: (interval: number) => void trail: ( @@ -70,6 +72,7 @@ export type MessagesEventBusState = } | { status: MessagesEventBusStatus.Ready + rev: string error: undefined setPollInterval: (interval: number) => void trail: ( @@ -78,6 +81,7 @@ export type MessagesEventBusState = } | { status: MessagesEventBusStatus.Suspended + rev: string | undefined error: undefined setPollInterval: (interval: number) => void trail: ( @@ -86,6 +90,7 @@ export type MessagesEventBusState = } | { status: MessagesEventBusStatus.Error + rev: string | undefined error: MessagesEventBusError setPollInterval: (interval: number) => void trail: (