export interface HeaderDef { type: string; value: string; } export interface Headers { [name: string]: HeaderDef; } export interface Properties { host: string; port: string; duisTls: boolean; smkiPort: string; smkiTls: boolean; responseEndpoint: string; localKeyStore?: string; loggerType: string; logger?: string; duisHeaders: Headers; smkiHeaders: Headers; } import type { RequestId, SimplifiedDuisInputRequest, SimplifiedDuisOutputResponse } from '@smartdcc/duis-parser'; import { EventEmitter } from 'node:events'; import { BoxedKeyStore, Headers as KeyStoreHeaders } from '@smartdcc/dccboxed-keystore'; import type { Node, NodeMessage } from 'node-red'; import type { FileHandle } from 'node:fs/promises'; export interface MessageStore { store(reqid: RequestId | undefined, msg: NodeMessage): void; retrieve(reqid: RequestId | undefined): NodeMessage | undefined; } interface DuisEmitter extends EventEmitter { on(eventName: 'duis', listener: (message: SimplifiedDuisOutputResponse, msg: NodeMessage | undefined) => void): this; on(eventName: 'error', listener: (e: Error) => void): this; } export type DspEndpoint = 'Non-Device Service' | 'Send Command Service' | 'Transform Service'; export interface ConfigNode extends Node { config: Properties; events: DuisEmitter; keyStore?: BoxedKeyStore; messageStore: MessageStore; request: (status: (status: string) => void | Promise, endpoint: DspEndpoint, duis: SimplifiedDuisInputRequest) => Promise; logger: (msg: string) => void | Promise; logfile?: FileHandle; publish: (nodeId: string, body: WSMessageBody) => void; duisHeaders: KeyStoreHeaders; smkiHeaders: KeyStoreHeaders; } export interface WSMessageNotification { kind: 'notification'; message: string; type?: 'compact' | 'success' | 'warning' | 'error'; timeout?: number; } export type WSMessageBody = WSMessageNotification; export type WSMessageDTO = { id: string; sourceNode: string; } & WSMessageBody; export {};