import { OutgoingMessage, SpecialPropertyMessage } from '../messages'; import { ClientTransactionManager } from './ClientTransactionManager'; import { ClientTransaction } from './ClientTransaction'; import { setContextData } from './utils/createClientActionProxy'; import { giveMeYourCookieHttpRequest } from './utils/giveMeYourCookieHttpRequest'; import type { Client } from './Client'; export class MessageProcessor { public lastError: any = null; private readonly transactions = new ClientTransactionManager('rt'); private globalErrorHandler?: (error: any) => void; constructor(private client: Client) { } public onMessage(message: OutgoingMessage) { if (message.type === 'special') { this.onSpecialMessage(message); } else if (message.type === 'set:cookie') { giveMeYourCookieHttpRequest(this.client.getUrl(), message); } else if (message.transactionId) { this.endTransaction(message); } else if (message.type === 'fail') { this.lastError = message.result; this.client.emit('error', this.lastError); } } public onSpecialMessage(message: SpecialPropertyMessage) { const instance: any = this.client.instances.get(message.actionName, message.instanceId!) || {}; const specialProperty = instance[message.propertyName]; if (message.context) { instance[setContextData](message.context); } specialProperty?.onMessage(message); } public createTransaction(): ClientTransaction { return this.transactions.create(); } public endTransaction(message: OutgoingMessage): boolean { return this.transactions.end(message); } }