diff --git a/packages/connect/src/device/workflow/trezorPushNotification.ts b/packages/connect/src/device/workflow/trezorPushNotification.ts index e7e26faf01..a521cfe6e9 100644 --- a/packages/connect/src/device/workflow/trezorPushNotification.ts +++ b/packages/connect/src/device/workflow/trezorPushNotification.ts @@ -1,9 +1,4 @@ -import { - type DecodedTrezorPushNotification, - TrezorPushNotificationMode, - TrezorPushNotificationType, - tpn, -} from '@trezor/protocol'; +import { TrezorPushNotificationMode, TrezorPushNotificationType, tpn } from '@trezor/protocol'; import { resolveAfter } from '@trezor/utils'; import { DEVICE } from '../../events/device'; @@ -48,7 +43,12 @@ const setupDeviceMode = async ( }; export const trezorPushNotificationHandler = async ({ device, message }: TpnWorkflowContext) => { - const decoded: DecodedTrezorPushNotification = tpn.decode(message); + const decodedResult = tpn.decode(message); + + if (!decodedResult.success) return; + + const decoded = decodedResult.payload; + device.lifecycle.emit(DEVICE.TREZOR_PUSH_NOTIFICATION, decoded); const { type, mode } = decoded; diff --git a/packages/protocol/src/protocol-tpn/decode.ts b/packages/protocol/src/protocol-tpn/decode.ts index b3218c30c4..1fe8da1f55 100644 --- a/packages/protocol/src/protocol-tpn/decode.ts +++ b/packages/protocol/src/protocol-tpn/decode.ts @@ -30,23 +30,20 @@ export interface DecodedTrezorPushNotification { mode: TrezorPushNotificationMode; } -export const decode = (message: number[]): DecodedTrezorPushNotification => { +export const decode = (message: number[]) => { const [version, type, mode] = message; if (!version || version !== TPN_VERSION) { - throw new Error(PROTOCOL_MISSMATCH_VERSION); + return { success: false, error: PROTOCOL_MISSMATCH_VERSION } as const; } if ( - message.length !== MESSAGE_LENGTH || + message.length < MESSAGE_LENGTH || !Object.values(Version).includes(version) || !Object.values(TrezorPushNotificationType).includes(type) || !Object.values(TrezorPushNotificationMode).includes(mode) ) { - throw new Error(PROTOCOL_MALFORMED); + return { success: false, error: PROTOCOL_MALFORMED } as const; } - return { - type, - mode, - }; + return { success: true, payload: { type, mode } } as const; };