diff --git a/package-lock.json b/package-lock.json index c5983ba..010ad7e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -825,9 +825,9 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", - "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==" + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" }, "yamljs": { "version": "0.3.0", diff --git a/package.json b/package.json index 6119b47..badfa5a 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "swagger-ui-express": "^4.1.6", "ts-node": "^9.1.1", "typescript": "^4.2.4", - "ws": "^7.4.5", + "ws": "^7.4.6", "yamljs": "^0.3.0" }, "devDependencies": { diff --git a/src/handlers/blobs.ts b/src/handlers/blobs.ts index 11f8304..493444b 100644 --- a/src/handlers/blobs.ts +++ b/src/handlers/blobs.ts @@ -62,12 +62,12 @@ export const storeBlob = async (file: IFile, filePath: string) => { }); }; -export const sendBlob = async (blobPath: string, recipient: string, recipientURL: string) => { +export const sendBlob = async (blobPath: string, recipient: string, recipientURL: string, requestID: string | undefined) => { if (sending) { - blobQueue.push({ blobPath, recipient, recipientURL }); + blobQueue.push({ blobPath, recipient, recipientURL, requestID }); } else { sending = true; - blobQueue.push({ blobPath, recipient, recipientURL }); + blobQueue.push({ blobPath, recipient, recipientURL, requestID }); while (blobQueue.length > 0) { await deliverBlob(blobQueue.shift()!); } @@ -75,7 +75,7 @@ export const sendBlob = async (blobPath: string, recipient: string, recipientURL } }; -export const deliverBlob = async ({ blobPath, recipient, recipientURL }: BlobTask) => { +export const deliverBlob = async ({ blobPath, recipient, recipientURL, requestID }: BlobTask) => { const resolvedFilePath = path.join(utils.constants.DATA_DIRECTORY, utils.constants.BLOBS_SUBDIRECTORY, blobPath); if (!(await utils.fileExists(resolvedFilePath))) { throw new RequestError('Blob not found', 404); @@ -96,14 +96,16 @@ export const deliverBlob = async ({ blobPath, recipient, recipientURL }: BlobTas eventEmitter.emit('event', { type: 'blob-delivered', path: blobPath, - recipient + recipient, + requestID } as IBlobDeliveredEvent); log.trace(`Blob delivered`); } catch (err) { eventEmitter.emit('event', { type: 'blob-failed', path: blobPath, - recipient + recipient, + requestID } as IBlobFailedEvent); log.error(`Failed to deliver blob ${err}`); } diff --git a/src/handlers/messages.ts b/src/handlers/messages.ts index 0fe0e91..79ae6fb 100644 --- a/src/handlers/messages.ts +++ b/src/handlers/messages.ts @@ -28,12 +28,12 @@ let messageQueue: MessageTask[] = []; let sending = false; export const eventEmitter = new EventEmitter(); -export const sendMessage = async (message: string, recipient: string, recipientURL: string) => { +export const sendMessage = async (message: string, recipient: string, recipientURL: string, requestID: string | undefined) => { if (sending) { - messageQueue.push({ message, recipient, recipientURL }); + messageQueue.push({ message, recipient, recipientURL, requestID }); } else { sending = true; - messageQueue.push({ message, recipient, recipientURL }); + messageQueue.push({ message, recipient, recipientURL, requestID }); while (messageQueue.length > 0) { await deliverMessage(messageQueue.shift()!); } @@ -41,7 +41,7 @@ export const sendMessage = async (message: string, recipient: string, recipientU } }; -export const deliverMessage = async ({ message, recipient, recipientURL }: MessageTask) => { +export const deliverMessage = async ({ message, recipient, recipientURL, requestID }: MessageTask) => { const httpsAgent = new https.Agent({ cert, key, ca }); const formData = new FormData(); formData.append('message', message); @@ -57,14 +57,16 @@ export const deliverMessage = async ({ message, recipient, recipientURL }: Messa eventEmitter.emit('event', { type: 'message-delivered', message, - recipient + recipient, + requestID } as IMessageDeliveredEvent); log.trace(`Message delivered`); } catch(err) { eventEmitter.emit('event', { type: 'message-failed', message, - recipient + recipient, + requestID } as IMessageFailedEvent); log.error(`Failed to deliver message ${err}`); } diff --git a/src/lib/interfaces.ts b/src/lib/interfaces.ts index ce94d3c..f879b59 100644 --- a/src/lib/interfaces.ts +++ b/src/lib/interfaces.ts @@ -54,6 +54,7 @@ export interface IMessageFailedEvent { type: 'message-failed' recipient: string message: string + requestID?: string } export interface IBlobReceivedEvent { @@ -90,12 +91,14 @@ export interface ICommitEvent { } export type MessageTask = { + requestID?: string message: string recipient: string recipientURL: string } export type BlobTask = { + requestID?: string blobPath: string recipient: string recipientURL: string diff --git a/src/routers/api.ts b/src/routers/api.ts index 8d36108..d279afa 100644 --- a/src/routers/api.ts +++ b/src/routers/api.ts @@ -119,7 +119,11 @@ router.post('/messages', async (req, res, next) => { if (recipientURL === undefined) { throw new RequestError(`Unknown recipient`, 400); } - messagesHandler.sendMessage(req.body.message, req.body.recipient, recipientURL); + let requestID: string | undefined = undefined; + if(typeof req.body.requestID === 'string') { + requestID = req.body.requestID; + } + messagesHandler.sendMessage(req.body.message, req.body.recipient, recipientURL, requestID); res.send({ status: 'submitted' }); } catch (err) { next(err); @@ -169,7 +173,11 @@ router.post('/transfers', async (req, res, next) => { if (recipientURL === undefined) { throw new RequestError(`Unknown recipient`, 400); } - blobsHandler.sendBlob(req.body.path, req.body.recipient, recipientURL); + let requestID: string | undefined = undefined; + if(typeof req.body.requestID === 'string') { + requestID = req.body.requestID; + } + blobsHandler.sendBlob(req.body.path, req.body.recipient, recipientURL, requestID); res.send({ status: 'submitted' }); } catch (err) { next(err);