From 9db8b54cf6341e74cce913b44bd751b86b9ed8dd Mon Sep 17 00:00:00 2001 From: Andres Vallecilla Date: Fri, 7 Feb 2025 12:27:18 -0500 Subject: [PATCH 1/3] fix: update message thread on events --- packages/main/src/events/MessageEvents.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/main/src/events/MessageEvents.ts b/packages/main/src/events/MessageEvents.ts index b6629f6..c1ac58e 100644 --- a/packages/main/src/events/MessageEvents.ts +++ b/packages/main/src/events/MessageEvents.ts @@ -330,7 +330,6 @@ export const messageEvents = async (agent: ServiceAgent, config: ServerConfig) = config.logger.debug(`CredentialStateChangedEvent received. Record id: ${JSON.stringify(payload.credentialRecord.id)}, state: ${JSON.stringify(payload.credentialRecord.state)}`) const record = payload.credentialRecord - const flowRecord = await agent.genericRecords.findById(record.threadId) if (record.state === CredentialState.ProposalReceived) { const credentialProposalMessage = await agent.credentials.findProposalMessage(record.id) @@ -355,7 +354,7 @@ export const messageEvents = async (agent: ServiceAgent, config: ServerConfig) = const message = new CredentialReceptionMessage({ connectionId: record.connectionId!, id: record.id, - threadId: (flowRecord?.getTag('messageId') as string) ?? record.threadId, + threadId: record.threadId, state: record.errorMessage === 'issuance-abandoned: e.msg.refused' ? CredentialState.Declined @@ -529,8 +528,10 @@ const sendMessageReceivedEvent = async ( timestamp: Date, config: ServerConfig, ) => { - const recordId = await agent.genericRecords.findById(message.id) - if (recordId?.getTag('messageId') as string) message.id = recordId?.getTag('messageId') as string + if (message.threadId) { + const recordId = await agent.genericRecords.findById(message.threadId) + message.threadId = (recordId?.getTag('messageId') as string) ?? message.threadId + } const body = new MessageReceived({ timestamp, message: message, From 4a0f0d5c8ce77ebd943f0b17694c48eb4fb42ada Mon Sep 17 00:00:00 2001 From: Andres Vallecilla Date: Wed, 12 Feb 2025 17:43:41 -0500 Subject: [PATCH 2/3] fix: remove fetch-depth --- .github/workflows/ci.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 82b8e5b..3d66b43 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,8 +15,6 @@ jobs: steps: - name: Checkout service-agent uses: actions/checkout@v4 - with: - fetch-depth: 0 - name: Setup node v20 uses: actions/setup-node@v4 From 2837906b528106fbbb801f33a98d87d5e0dd3616 Mon Sep 17 00:00:00 2001 From: Andres Vallecilla Date: Thu, 13 Feb 2025 15:35:00 -0500 Subject: [PATCH 3/3] fix: update message thread on events --- .../src/controllers/message/MessageService.ts | 2 +- packages/main/src/events/MessageEvents.ts | 30 ++++++++++++------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/packages/main/src/controllers/message/MessageService.ts b/packages/main/src/controllers/message/MessageService.ts index f76d929..c16eb1e 100644 --- a/packages/main/src/controllers/message/MessageService.ts +++ b/packages/main/src/controllers/message/MessageService.ts @@ -396,7 +396,7 @@ export class MessageService { content: {}, tags: { messageId: message.id, connectionId: message.connectionId }, }) - this.logger.debug!(`messageId: ${messageId}`) + this.logger.debug!(`messageId saved: ${messageId}`) return { id: messageId ?? utils.uuid() } // TODO: persistant mapping between AFJ records and Service Agent flows. Support external message id setting } catch (error) { this.logger.error(`Error: ${error.stack}`) diff --git a/packages/main/src/events/MessageEvents.ts b/packages/main/src/events/MessageEvents.ts index c1ac58e..e0699d0 100644 --- a/packages/main/src/events/MessageEvents.ts +++ b/packages/main/src/events/MessageEvents.ts @@ -94,6 +94,7 @@ export const messageEvents = async (agent: ServiceAgent, config: ServerConfig) = timestamp: new Date(), // It can take also 'sentTime' to be related to the origin }) + if (msg.threadId) msg.threadId = await getRecordId(agent, msg.threadId) await sendMessageReceivedEvent(agent, msg, msg.timestamp, config) } @@ -148,7 +149,7 @@ export const messageEvents = async (agent: ServiceAgent, config: ServerConfig) = if (message.type === CallOfferMessage.type.messageTypeUri) { const callOffer = message as CallOfferMessage const msg = new CallOfferRequestMessage({ - id: message.id, + id: await getRecordId(agent, message.id), connectionId: connection.id, offerExpirationTime: callOffer.offerExpirationTime ?? undefined, offerStartTime: callOffer.offerStartTime ?? undefined, @@ -164,7 +165,7 @@ export const messageEvents = async (agent: ServiceAgent, config: ServerConfig) = if (message.type === CallEndMessage.type.messageTypeUri) { const thread = (message as CallEndMessage).thread const msg = new CallEndRequestMessage({ - id: message.id, + id: await getRecordId(agent, message.id), connectionId: connection.id, threadId: thread?.threadId, timestamp: new Date(), @@ -176,7 +177,7 @@ export const messageEvents = async (agent: ServiceAgent, config: ServerConfig) = if (message.type === CallAcceptMessage.type.messageTypeUri) { const parameters = (message as CallAcceptMessage).parameters const msg = new CallAcceptRequestMessage({ - id: message.id, + id: await getRecordId(agent, message.id), connectionId: connection.id, parameters: parameters, threadId: message.thread?.threadId, @@ -189,7 +190,7 @@ export const messageEvents = async (agent: ServiceAgent, config: ServerConfig) = if (message.type === CallRejectMessage.type.messageTypeUri) { const thread = (message as CallEndMessage).thread const msg = new CallRejectRequestMessage({ - id: message.id, + id: await getRecordId(agent, message.id), connectionId: connection.id, threadId: thread?.threadId, timestamp: new Date(), @@ -221,7 +222,7 @@ export const messageEvents = async (agent: ServiceAgent, config: ServerConfig) = ], connectionId: record.connectionId!, id: message.id, - threadId: record.threadId, + threadId: await getRecordId(agent, record.threadId), timestamp: record.updatedAt, }) @@ -312,7 +313,7 @@ export const messageEvents = async (agent: ServiceAgent, config: ServerConfig) = ], connectionId: record.connectionId!, id: message.id, - threadId: record.threadId, + threadId: await getRecordId(agent, record.threadId), timestamp: record.updatedAt, }) @@ -347,6 +348,7 @@ export const messageEvents = async (agent: ServiceAgent, config: ServerConfig) = timestamp: record.createdAt, }) + if (message.threadId) message.threadId = await getRecordId(agent, message.threadId) await sendMessageReceivedEvent(agent, message, message.timestamp, config) } else if ( [CredentialState.Declined, CredentialState.Done, CredentialState.Abandoned].includes(record.state) @@ -354,7 +356,7 @@ export const messageEvents = async (agent: ServiceAgent, config: ServerConfig) = const message = new CredentialReceptionMessage({ connectionId: record.connectionId!, id: record.id, - threadId: record.threadId, + threadId: await getRecordId(agent, record.threadId), state: record.errorMessage === 'issuance-abandoned: e.msg.refused' ? CredentialState.Declined @@ -399,6 +401,7 @@ export const messageEvents = async (agent: ServiceAgent, config: ServerConfig) = })), }) + if (message.threadId) message.threadId = await getRecordId(agent, message.threadId) await sendMessageReceivedEvent(agent, message, message.timestamp, config) } } @@ -467,6 +470,7 @@ export const messageEvents = async (agent: ServiceAgent, config: ServerConfig) = mrzData, }) + msg.id = await getRecordId(agent, msg.id) await sendMessageReceivedEvent(agent, msg, msg.timestamp, config) }) @@ -480,6 +484,7 @@ export const messageEvents = async (agent: ServiceAgent, config: ServerConfig) = dataGroups, }) + msg.id = await getRecordId(agent, msg.id) await sendMessageReceivedEvent(agent, msg, msg.timestamp, config) }) @@ -504,6 +509,7 @@ export const messageEvents = async (agent: ServiceAgent, config: ServerConfig) = threadId, state: stateMap[description.code as MrtdProblemReportReason], }) + msg.id = await getRecordId(agent, msg.id) await sendMessageReceivedEvent(agent, msg, msg.timestamp, config) } else if ( [MrtdProblemReportReason.MrzRefused, MrtdProblemReportReason.MrzTimeout].includes( @@ -515,6 +521,7 @@ export const messageEvents = async (agent: ServiceAgent, config: ServerConfig) = threadId, state: stateMap[description.code as MrtdProblemReportReason], }) + msg.id = await getRecordId(agent, msg.id) await sendMessageReceivedEvent(agent, msg, msg.timestamp, config) } }) @@ -528,10 +535,6 @@ const sendMessageReceivedEvent = async ( timestamp: Date, config: ServerConfig, ) => { - if (message.threadId) { - const recordId = await agent.genericRecords.findById(message.threadId) - message.threadId = (recordId?.getTag('messageId') as string) ?? message.threadId - } const body = new MessageReceived({ timestamp, message: message, @@ -559,3 +562,8 @@ const sendMessageStateUpdatedEvent = async (options: { }) await sendWebhookEvent(config.webhookUrl + '/message-state-updated', body, config.logger) } + +const getRecordId = async (agent: ServiceAgent, id: string): Promise => { + const record = await agent.genericRecords.findById(id) + return (record?.getTag('messageId') as string) ?? id +}