import type { InboundMessageContext } from '../../../agent/models/InboundMessageContext' import type { TrustPingReceivedEvent, TrustPingResponseReceivedEvent } from '../TrustPingEvents' import type { TrustPingMessage } from '../messages' import type { ConnectionRecord } from '../repository/ConnectionRecord' import { EventEmitter } from '../../../agent/EventEmitter' import { OutboundMessageContext } from '../../../agent/models' import { injectable } from '../../../plugins' import { TrustPingEventTypes } from '../TrustPingEvents' import { TrustPingResponseMessage } from '../messages' @injectable() export class TrustPingService { private eventEmitter: EventEmitter public constructor(eventEmitter: EventEmitter) { this.eventEmitter = eventEmitter } public processPing({ message, agentContext }: InboundMessageContext, connection: ConnectionRecord) { this.eventEmitter.emit(agentContext, { type: TrustPingEventTypes.TrustPingReceivedEvent, payload: { connectionRecord: connection, message: message, }, }) if (message.responseRequested) { const response = new TrustPingResponseMessage({ threadId: message.threadId, }) return new OutboundMessageContext(response, { agentContext, connection }) } } public processPingResponse(inboundMessage: InboundMessageContext) { const { agentContext, message } = inboundMessage const connection = inboundMessage.assertReadyConnection() this.eventEmitter.emit(agentContext, { type: TrustPingEventTypes.TrustPingResponseReceivedEvent, payload: { connectionRecord: connection, message: message, }, }) } }