/** * Simplified Event System V2 * * This provides a simpler, more type-safe way to define and use events. * Instead of factory functions like makeConnectionStateEvent(id), * you can now use: Events.connectionState(id) */ import { Base64MessageDTO } from '../backend/src/Model/Base64Message' import { DataSourceState, MqttOptions } from '../backend/src/DataSource' import { UpdateInfo } from 'builder-util-runtime' import { RpcEvent } from './EventSystem/Rpc' export type EventV2 = { topic: string } // Simple event definitions (no parameters) export const Events = { // Connection management addMqttConnection: { topic: 'connection/add/mqtt' } as EventV2, removeConnection: { topic: 'connection/remove' } as EventV2, updateAvailable: { topic: 'app/update/available' } as EventV2, // Parameterized events (for connection-specific events) connectionState: (connectionId: string) => ({ topic: `conn/state/${connectionId}` }) as EventV2, connectionMessage: (connectionId: string) => ({ topic: `conn/${connectionId}` }) as EventV2, publish: (connectionId: string) => ({ topic: `conn/publish/${connectionId}` }) as EventV2, } // RPC Events - type-safe request/response patterns export const RpcEvents = { getAppVersion: { topic: 'getAppVersion' } as RpcEvent, writeToFile: { topic: 'writeFile' } as RpcEvent<{ filePath: string; data: string; encoding?: string }, void>, readFromFile: { topic: 'readFromFile' } as RpcEvent<{ filePath: string; encoding?: string }, Buffer>, openDialog: { topic: 'openDialog' } as RpcEvent, saveDialog: { topic: 'saveDialog' } as RpcEvent, uploadCertificate: { topic: 'uploadCertificate' } as RpcEvent, } // Type definitions export interface AddMqttConnectionV2 { id: string options: MqttOptions } export interface MqttMessageV2 { topic: string payload: Base64MessageDTO | null qos: 0 | 1 | 2 retain: boolean messageId: number | undefined } export interface CertificateUploadRequest { filename: string data: string // base64 encoded } export interface CertificateUploadResponse { name: string data: string // base64 encoded } // Dialog types (browser-compatible versions) import type { OpenDialogOptions, OpenDialogReturnValue, SaveDialogOptions, SaveDialogReturnValue } from './DialogTypes' export type OpenDialogOptionsV2 = OpenDialogOptions export type OpenDialogReturnValueV2 = OpenDialogReturnValue export type SaveDialogOptionsV2 = SaveDialogOptions export type SaveDialogReturnValueV2 = SaveDialogReturnValue