From a8279254a83672c254cd3101de29338118988365 Mon Sep 17 00:00:00 2001 From: Timo Glastra Date: Fri, 17 Feb 2023 19:37:14 +0100 Subject: [PATCH] fix: threadId improvements Signed-off-by: Timo Glastra --- .../src/services/ActionMenuService.ts | 8 ++++---- packages/core/src/agent/Dispatcher.ts | 19 ++++++++++++++++--- packages/core/src/agent/MessageReceiver.ts | 2 +- .../messages/DidExchangeRequestMessage.ts | 1 - .../connections/services/ConnectionService.ts | 4 ++-- .../connections/services/TrustPingService.ts | 2 +- .../protocol/v1/V1CredentialProtocol.ts | 2 +- .../oob/messages/HandshakeReuseMessage.ts | 1 - packages/core/src/types.ts | 3 +++ .../src/services/QuestionAnswerService.ts | 4 ++-- .../dummy/services/DummyService.ts | 4 ++-- 11 files changed, 32 insertions(+), 18 deletions(-) diff --git a/packages/action-menu/src/services/ActionMenuService.ts b/packages/action-menu/src/services/ActionMenuService.ts index 8282bc60bf..42da57e3ad 100644 --- a/packages/action-menu/src/services/ActionMenuService.ts +++ b/packages/action-menu/src/services/ActionMenuService.ts @@ -63,7 +63,7 @@ export class ActionMenuService { connectionId: options.connection.id, role: ActionMenuRole.Requester, state: ActionMenuState.AwaitingRootMenu, - threadId: menuRequestMessage.id, + threadId: menuRequestMessage.threadId, }) await this.actionMenuRepository.save(agentContext, actionMenuRecord) @@ -102,7 +102,7 @@ export class ActionMenuService { connectionId: connection.id, role: ActionMenuRole.Responder, state: ActionMenuState.PreparingRootMenu, - threadId: menuRequestMessage.id, + threadId: menuRequestMessage.threadId, }) await this.actionMenuRepository.save(agentContext, actionMenuRecord) @@ -157,7 +157,7 @@ export class ActionMenuService { role: ActionMenuRole.Responder, state: ActionMenuState.AwaitingSelection, menu: options.menu, - threadId: menuMessage.id, + threadId: menuMessage.threadId, }) await this.actionMenuRepository.save(agentContext, actionMenuRecord) @@ -203,7 +203,7 @@ export class ActionMenuService { connectionId: connection.id, role: ActionMenuRole.Requester, state: ActionMenuState.PreparingSelection, - threadId: menuMessage.id, + threadId: menuMessage.threadId, menu: new ActionMenu({ title: menuMessage.title, description: menuMessage.description, diff --git a/packages/core/src/agent/Dispatcher.ts b/packages/core/src/agent/Dispatcher.ts index ee04bc0e3c..50ff6da42e 100644 --- a/packages/core/src/agent/Dispatcher.ts +++ b/packages/core/src/agent/Dispatcher.ts @@ -7,6 +7,7 @@ import { InjectionSymbols } from '../constants' import { AriesFrameworkError } from '../error/AriesFrameworkError' import { Logger } from '../logger' import { injectable, inject } from '../plugins' +import { parseMessageType } from '../utils/messageType' import { ProblemReportMessage } from './../modules/problem-reports/messages/ProblemReportMessage' import { EventEmitter } from './EventEmitter' @@ -57,9 +58,21 @@ class Dispatcher { const problemReportMessage = error.problemReport if (problemReportMessage instanceof ProblemReportMessage && messageContext.connection) { - problemReportMessage.setThread({ - threadId: message.threadId, - }) + const { protocolUri: problemReportProtocolUri } = parseMessageType(problemReportMessage.type) + const { protocolUri: inboundProtocolUri } = parseMessageType(messageContext.message.type) + + // If the inbound protocol uri is the same as the problem report protocol uri, we can see the interaction as the same thread + // However if it is no the same we should see it as a new thread, where the inbound message `@id` is the parentThreadId + if (inboundProtocolUri === problemReportProtocolUri) { + problemReportMessage.setThread({ + threadId: message.threadId, + }) + } else { + problemReportMessage.setThread({ + parentThreadId: message.id, + }) + } + outboundMessage = new OutboundMessageContext(problemReportMessage, { agentContext, connection: messageContext.connection, diff --git a/packages/core/src/agent/MessageReceiver.ts b/packages/core/src/agent/MessageReceiver.ts index 55d1368fc0..6dfd073c3f 100644 --- a/packages/core/src/agent/MessageReceiver.ts +++ b/packages/core/src/agent/MessageReceiver.ts @@ -278,7 +278,7 @@ export class MessageReceiver { }, }) problemReportMessage.setThread({ - threadId: plaintextMessage['@id'], + parentThreadId: plaintextMessage['@id'], }) const outboundMessageContext = new OutboundMessageContext(problemReportMessage, { agentContext, connection }) if (outboundMessageContext) { diff --git a/packages/core/src/modules/connections/messages/DidExchangeRequestMessage.ts b/packages/core/src/modules/connections/messages/DidExchangeRequestMessage.ts index 4687bc0da4..c22729a272 100644 --- a/packages/core/src/modules/connections/messages/DidExchangeRequestMessage.ts +++ b/packages/core/src/modules/connections/messages/DidExchangeRequestMessage.ts @@ -35,7 +35,6 @@ export class DidExchangeRequestMessage extends AgentMessage { this.did = options.did this.setThread({ - threadId: this.id, parentThreadId: options.parentThreadId, }) } diff --git a/packages/core/src/modules/connections/services/ConnectionService.ts b/packages/core/src/modules/connections/services/ConnectionService.ts index 26e971e393..539fabac8c 100644 --- a/packages/core/src/modules/connections/services/ConnectionService.ts +++ b/packages/core/src/modules/connections/services/ConnectionService.ts @@ -120,7 +120,7 @@ export class ConnectionService { }) connectionRequest.setThread({ - threadId: connectionRequest.id, + threadId: connectionRequest.threadId, parentThreadId: outOfBandInvitation.id, }) @@ -136,7 +136,7 @@ export class ConnectionService { outOfBandId: outOfBandRecord.id, invitationDid, imageUrl: outOfBandInvitation.imageUrl, - threadId: connectionRequest.id, + threadId: connectionRequest.threadId, }) await this.updateState(agentContext, connectionRecord, DidExchangeState.RequestSent) diff --git a/packages/core/src/modules/connections/services/TrustPingService.ts b/packages/core/src/modules/connections/services/TrustPingService.ts index 5d4b10eb20..5236a2c83d 100644 --- a/packages/core/src/modules/connections/services/TrustPingService.ts +++ b/packages/core/src/modules/connections/services/TrustPingService.ts @@ -28,7 +28,7 @@ export class TrustPingService { if (message.responseRequested) { const response = new TrustPingResponseMessage({ - threadId: message.id, + threadId: message.threadId, }) return new OutboundMessageContext(response, { agentContext, connection }) diff --git a/packages/core/src/modules/credentials/protocol/v1/V1CredentialProtocol.ts b/packages/core/src/modules/credentials/protocol/v1/V1CredentialProtocol.ts index 6ee07a7588..1c0320070f 100644 --- a/packages/core/src/modules/credentials/protocol/v1/V1CredentialProtocol.ts +++ b/packages/core/src/modules/credentials/protocol/v1/V1CredentialProtocol.ts @@ -547,7 +547,7 @@ export class V1CredentialProtocol // No credential record exists with thread id credentialRecord = new CredentialExchangeRecord({ connectionId: connection?.id, - threadId: offerMessage.id, + threadId: offerMessage.threadId, state: CredentialState.OfferReceived, protocolVersion: 'v1', }) diff --git a/packages/core/src/modules/oob/messages/HandshakeReuseMessage.ts b/packages/core/src/modules/oob/messages/HandshakeReuseMessage.ts index 363e4bf0fe..c70e8b2832 100644 --- a/packages/core/src/modules/oob/messages/HandshakeReuseMessage.ts +++ b/packages/core/src/modules/oob/messages/HandshakeReuseMessage.ts @@ -13,7 +13,6 @@ export class HandshakeReuseMessage extends AgentMessage { if (options) { this.id = options.id ?? this.generateId() this.setThread({ - threadId: this.id, parentThreadId: options.parentThreadId, }) } diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index b454c7963e..23fe599c84 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -162,6 +162,9 @@ export type ProtocolVersion = `${number}.${number}` export interface PlaintextMessage { '@type': string '@id': string + '~thread'?: { + thid?: string + } [key: string]: unknown } diff --git a/packages/question-answer/src/services/QuestionAnswerService.ts b/packages/question-answer/src/services/QuestionAnswerService.ts index c471ca3cca..5223ab520f 100644 --- a/packages/question-answer/src/services/QuestionAnswerService.ts +++ b/packages/question-answer/src/services/QuestionAnswerService.ts @@ -53,7 +53,7 @@ export class QuestionAnswerService { const questionAnswerRecord = await this.createRecord({ questionText: questionMessage.questionText, questionDetail: questionMessage.questionDetail, - threadId: questionMessage.id, + threadId: questionMessage.threadId, connectionId: connectionId, role: QuestionAnswerRole.Questioner, signatureRequired: false, @@ -97,7 +97,7 @@ export class QuestionAnswerService { questionText: questionMessage.questionText, questionDetail: questionMessage.questionDetail, connectionId: connection?.id, - threadId: questionMessage.id, + threadId: questionMessage.threadId, role: QuestionAnswerRole.Responder, signatureRequired: false, state: QuestionAnswerState.QuestionReceived, diff --git a/samples/extension-module/dummy/services/DummyService.ts b/samples/extension-module/dummy/services/DummyService.ts index 0aa7a56747..580565296c 100644 --- a/samples/extension-module/dummy/services/DummyService.ts +++ b/samples/extension-module/dummy/services/DummyService.ts @@ -41,7 +41,7 @@ export class DummyService { // Create record const record = new DummyRecord({ connectionId: connectionRecord.id, - threadId: message.id, + threadId: message.threadId, state: DummyState.Init, }) @@ -79,7 +79,7 @@ export class DummyService { // Create record const record = new DummyRecord({ connectionId: connectionRecord.id, - threadId: messageContext.message.id, + threadId: messageContext.message.threadId, state: DummyState.RequestReceived, })