@@ -2,7 +2,7 @@ import moment from 'moment/moment';
22import { v4 as uuidv4 } from 'uuid' ;
33import { consola } from 'consola' ;
44import { clientInfos } from './userUtils' ;
5- import { EDXL_ENVELOPE , DIRECTIONS } from '@/constants' ;
5+ import { EDXL_ENVELOPE , DIRECTIONS , RC_DE } from '@/constants' ;
66import { useMainStore } from '~/store' ;
77import { useAuthStore } from '~/store/auth' ;
88
@@ -126,18 +126,46 @@ export function setCaseId(message, caseId, localCaseId) {
126126 }
127127}
128128
129- export function buildAck ( { distributionID, senderID, refused = false } ) {
129+ export function buildAck ( {
130+ distributionID,
131+ senderID,
132+ refused = false ,
133+ errorDistributionID = null ,
134+ } ) {
130135 return buildMessage (
131- { reference : { distributionID, ...( refused && { refused } ) } } ,
136+ {
137+ reference : {
138+ distributionID,
139+ ...( refused && { refused } ) ,
140+ ...( errorDistributionID && {
141+ errorDistributionID,
142+ } ) ,
143+ } ,
144+ } ,
132145 { distributionKind : 'Ack' , recipientId : senderID }
133146 ) ;
134147}
135148
149+ export function buildError ( { distributionID, senderID, sourceMessage } ) {
150+ return buildMessage (
151+ {
152+ error : {
153+ errorCode : { statusCode : 501 , statusString : 'UNROUTABLE_MESSAGE' } ,
154+ errorCause : 'This message was rejected by the recipient.' ,
155+ sourceMessage,
156+ referencedDistributionID : distributionID ,
157+ } ,
158+ } ,
159+ { distributionKind : 'Error' , recipientId : senderID , includeRCDE : false }
160+ ) ;
161+ }
162+
136163export function buildMessage (
137164 innerMessage ,
138- { distributionKind, recipientId } = {
165+ { distributionKind, recipientId, includeRCDE = true } = {
139166 distributionKind : 'Report' ,
140167 recipientId : null ,
168+ includeRCDE : true ,
141169 }
142170) {
143171 // InnerMessage should only have one key, as we do not support multiple use cases in the same message.
@@ -154,34 +182,43 @@ export function buildMessage(
154182 } else {
155183 message . descriptor . keyword [ 0 ] . value = useCase ;
156184 }
185+
157186 const formattedInnerMessage = formatIdsInMessage ( innerMessage ) ;
158- message . content [ 0 ] . jsonContent . embeddedJsonContent . message = {
159- ...message . content [ 0 ] . jsonContent . embeddedJsonContent . message ,
160- ...formattedInnerMessage ,
161- } ;
162- const name = clientInfos ( ) . name ;
163187 const targetId = recipientId ?? authStore . user . targetId ;
164188 const sentAt = moment ( ) . format ( ) ;
165189 message . distributionID = `${ authStore . user . clientId } _${ uuidv4 ( ) } ` ;
166190 message . distributionKind = distributionKind ;
167191 message . senderID = authStore . user . clientId ;
168192 message . dateTimeSent = sentAt ;
169193 message . descriptor . explicitAddress . explicitAddressValue = targetId ;
170- message . content [ 0 ] . jsonContent . embeddedJsonContent . message . messageId =
171- message . distributionID ;
172- message . content [ 0 ] . jsonContent . embeddedJsonContent . message . kind =
173- message . distributionKind ;
174- message . content [ 0 ] . jsonContent . embeddedJsonContent . message . sender = {
175- name,
176- URI : `hubex:${ authStore . user . clientId } ` ,
177- } ;
178- message . content [ 0 ] . jsonContent . embeddedJsonContent . message . sentAt = sentAt ;
179- message . content [ 0 ] . jsonContent . embeddedJsonContent . message . recipient = [
180- {
181- name : clientInfos ( targetId ) . name ,
182- URI : `hubex:${ targetId } ` ,
183- } ,
184- ] ;
194+
195+ if ( includeRCDE ) {
196+ const name = clientInfos ( ) . name ;
197+ message . content [ 0 ] . jsonContent . embeddedJsonContent . message = {
198+ ...message . content [ 0 ] . jsonContent . embeddedJsonContent . message ,
199+ ...RC_DE ,
200+ ...formattedInnerMessage ,
201+ messageId : message . distributionID ,
202+ kind : message . distributionKind ,
203+ sender : {
204+ name,
205+ URI : `hubex:${ authStore . user . clientId } ` ,
206+ } ,
207+ sentAt,
208+ recipient : [
209+ {
210+ name : clientInfos ( targetId ) . name ,
211+ URI : `hubex:${ targetId } ` ,
212+ } ,
213+ ] ,
214+ } ;
215+ } else {
216+ message . content [ 0 ] . jsonContent . embeddedJsonContent . message = {
217+ ...message . content [ 0 ] . jsonContent . embeddedJsonContent . message ,
218+ ...formattedInnerMessage ,
219+ } ;
220+ }
221+
185222 return trimEmptyValues ( message ) ;
186223}
187224
0 commit comments