diff --git a/package.json b/package.json index ffa5ca9..839ccd5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "arnavmq", - "version": "0.12.0", + "version": "0.12.1", "description": "ArnavMQ is a RabbitMQ wrapper", "keywords": [ "rabbitmq", @@ -29,7 +29,6 @@ "homepage": "https://github.com/bringg/node-arnavmq#readme", "dependencies": { "amqplib": "^0.10.3", - "p-defer": "^3.0.0", "serialize-error": "^8.0.1", "uuid": "^9.0.0" }, diff --git a/src/index.js b/src/index.js index c27ab1f..409a9f2 100644 --- a/src/index.js +++ b/src/index.js @@ -1,4 +1,3 @@ -const uuid = require('uuid'); const utils = require('./modules/utils'); const connection = require('./modules/connection'); const { ARNAVMQ_TRANSPORT_LOGGER_DEPRECATED } = require('./modules/warnings'); @@ -29,7 +28,7 @@ module.exports = (config) => { consumerSuffix: '', // generate a hostname so we can track this connection on the broker (rabbitmq management plugin) - hostname: process.env.HOSTNAME || process.env.USER || uuid.v4(), + hostname: process.env.HOSTNAME || process.env.USER || utils.uuidV4(), // Deprecated. Use 'logger' instead. The transport to use to debug. If provided, arnavmq will show some logs transport: utils.emptyLogger, diff --git a/src/modules/producer.js b/src/modules/producer.js index e75dd25..1c0beaf 100644 --- a/src/modules/producer.js +++ b/src/modules/producer.js @@ -1,5 +1,3 @@ -const uuid = require('uuid'); -const pDefer = require('p-defer'); const utils = require('./utils'); const parsers = require('./message-parsers'); const { ARNAVMQ_MSG_TIMEOUT_DEPRECATED } = require('./warnings'); @@ -169,7 +167,7 @@ class Producer { if (options.rpc) { return this.createRpcQueue(queue).then(() => { // generates a correlationId (random uuid) so we know which callback to execute on received response - const corrId = uuid.v4(); + const corrId = utils.uuidV4(); options.correlationId = corrId; // reply to us if you receive this message! options.replyTo = this.amqpRPCQueues[queue].queue; @@ -191,8 +189,13 @@ class Producer { this.publishOrSendToQueue(queue, msg, options); // defered promise that will resolve when response is received - const responsePromise = pDefer(); - this.amqpRPCQueues[queue][corrId] = responsePromise; + + const prCallbacks = {}; + const promise = new Promise((resolve, reject) => { + prCallbacks.resolve = resolve; + prCallbacks.reject = reject; + }); + this.amqpRPCQueues[queue][corrId] = prCallbacks; // Using given timeout or default one const timeout = options.expiration || 0; @@ -200,7 +203,7 @@ class Producer { this.prepareTimeoutRpc(queue, corrId, timeout); } - return responsePromise.promise; + return promise; }); } diff --git a/src/modules/utils.js b/src/modules/utils.js index 7a679bd..f2c7ddb 100644 --- a/src/modules/utils.js +++ b/src/modules/utils.js @@ -8,6 +8,17 @@ const emptyLogger = { log: empty }; +let uuidV4; +const crypto = require('crypto'); + +if (typeof crypto.randomUUID === 'function') { + uuidV4 = () => crypto.randomUUID(); +} else { + // eslint-disable-next-line global-require + const uuid = require('uuid'); + uuidV4 = uuid.v4; +} + module.exports = { /** * Default transport to prevent any printing in the terminal @@ -44,5 +55,7 @@ module.exports = { emitWarn.warned[code] = true; process.emitWarning(message, { code, detail }); } - } + }, + + uuidV4 };