import type { CallAnswerMessage } from '../../messages/CallAnswerMessage'; import type { CallMessage } from '../../messages/CallMessage'; import type { ClientActionBox } from '../ClientActionBox'; import type { InstanceEventEmitter } from './InstanceEvents'; export async function callRequest( ab: ClientActionBox, instanceId: string, method: string, args: Array, context: any, events?: InstanceEventEmitter, ): Promise { const { client } = ab; const transaction = client.createTransaction(); const transactionId = transaction.id; if (events) { events.emit('call:method', ab.name, method, args, transactionId, instanceId); } const message = { type: 'call', transactionId, actionName: ab.name, instanceId, context, call: { method, args, }, } as CallMessage; await client.adapter.beforeSend(message); await client.adapter.send(message); return transaction.promise as Promise; }