import { Translator } from './translator.js' import { ChatBrokerHooks } from '../broker/chat.js' import { Log, Hook, Event } from 'power-helper' import { ValidateCallback, ValidateCallbackOutputs } from '../utils/validate.js' type BrokerHooks = ChatBrokerHooks type BrokerPluginParams< T extends ValidateCallback, R extends ValidateCallback > = { name: string params: T receiveData: R onInstall: (context: { log: Log params: ValidateCallbackOutputs attach: Hook['attach'] attachAfter: Hook['attachAfter'] translator: Translator receive: (callback: (params: { id: string data: ValidateCallbackOutputs }) => void) => void }) => void } export class ChatBrokerPlugin< T extends ValidateCallback, R extends ValidateCallback > { _event = new Event() _params: BrokerPluginParams constructor(params: BrokerPluginParams) { this._params = params } use(params: ValidateCallbackOutputs) { return { instance: this as any, params, send: (data: ValidateCallbackOutputs) => { this._event.emit('receive', data) }, receive: (callback: any) => { this._event.on('receive', callback) }, __receiveData: null as unknown as ValidateCallbackOutputs } } }