diff --git a/apps/extension/src/content-scripts/message-event.ts b/apps/extension/src/content-scripts/message-event.ts index 677bc35e..010c8522 100644 --- a/apps/extension/src/content-scripts/message-event.ts +++ b/apps/extension/src/content-scripts/message-event.ts @@ -6,36 +6,31 @@ import { PraxConnection } from '../message/prax'; export type PraxMessage = { [PRAX]: T }; export type PraxMessageEvent = MessageEvent>; +export const unwrapPraxMessageEvent = (ev: PraxMessageEvent): T => + // @ts-expect-error - ts can't understand the injected string + ev.data[PRAX] as T; + export const isPraxMessageEvent = (ev: MessageEvent): ev is PraxMessageEvent => typeof ev.data === 'object' && ev.data !== null && PRAX in ev.data; export const isPraxPortMessageEvent = ( ev: MessageEvent, ): ev is PraxMessageEvent => - // @ts-expect-error - ts can't understand the injected string - isPraxMessageEvent(ev) && ev.data[PRAX] instanceof MessagePort; + isPraxMessageEvent(ev) && unwrapPraxMessageEvent(ev) instanceof MessagePort; export const isPraxRequestMessageEvent = ( ev: MessageEvent, ): ev is PraxMessageEvent => - // @ts-expect-error - ts can't understand the injected string - isPraxMessageEvent(ev) && ev.data[PRAX] === PraxConnection.Request; + isPraxMessageEvent(ev) && unwrapPraxMessageEvent(ev) === PraxConnection.Request; export const isPraxEndMessageEvent = ( ev: MessageEvent, ): ev is PraxMessageEvent => - // @ts-expect-error - ts can't understand the injected string - isPraxMessageEvent(ev) && ev.data[PRAX] === PraxConnection.Disconnect; + isPraxMessageEvent(ev) && unwrapPraxMessageEvent(ev) === PraxConnection.Disconnect; export const isPraxFailureMessageEvent = ( ev: MessageEvent, -): ev is PraxMessageEvent => { - if (!isPraxMessageEvent(ev)) return false; - // @ts-expect-error - ts can't understand the injected string - const status = ev.data[PRAX] as unknown; - return typeof status === 'string' && status in PenumbraRequestFailure; -}; - -export const unwrapPraxMessageEvent = (ev: PraxMessageEvent): T => - // @ts-expect-error - ts can't understand the injected string - ev.data[PRAX] as T; +): ev is PraxMessageEvent => + isPraxMessageEvent(ev) && + typeof unwrapPraxMessageEvent(ev) === 'string' && + unwrapPraxMessageEvent(ev) in PenumbraRequestFailure;