@natlibfi/melinda-rest-api-commons 2.0.0-alpha.16 → 2.0.0-alpha.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/amqp.js +1 -3
- package/dist/amqp.js.map +1 -1
- package/package.json +1 -1
package/dist/amqp.js
CHANGED
|
@@ -338,8 +338,6 @@ async function _default(AMQP_URL) {
|
|
|
338
338
|
headers,
|
|
339
339
|
data
|
|
340
340
|
}) {
|
|
341
|
-
logger.silly(`Send message for ${correlationId} to queue: ${queue}`);
|
|
342
|
-
|
|
343
341
|
try {
|
|
344
342
|
logger.silly(`Queue ${queue}`);
|
|
345
343
|
logger.silly(`CorrelationId ${correlationId}`);
|
|
@@ -355,7 +353,7 @@ async function _default(AMQP_URL) {
|
|
|
355
353
|
persistent: true,
|
|
356
354
|
headers
|
|
357
355
|
});
|
|
358
|
-
logger.
|
|
356
|
+
logger.silly(`Send message for ${correlationId} to queue: ${queue}`);
|
|
359
357
|
} catch (error) {
|
|
360
358
|
(0, _utils.logError)(error);
|
|
361
359
|
}
|
package/dist/amqp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/amqp.js"],"names":["AMQP_URL","connection","amqplib","connect","channel","createChannel","logger","checkQueue","consumeChunk","consumeRawChunk","consumeOne","consumeRaw","ackMessages","nackMessages","sendToQueue","removeQueue","messagesToRecords","queue","style","purge","toRecord","silly","channelInfo","assertQueue","durable","purgeQueue","verbose","messageCount","test","consumeByCorrelationId","ApiError","httpStatus","UNPROCESSABLE_ENTITY","error","queMessages","getData","headers","getHeaderInfo","JSON","stringify","filterIn","filterOut","messages","filter","message","properties","cataloger","nack","records","debug","length","correlationId","get","forEach","ack","data","Buffer","from","persistent","deleteQueue","map","content","parse","toString","MarcRecord","messagesToGet","CHUNK_SIZE","pump","count","results","identifiers","identifier","deliveryTag","fields","includes","concat"],"mappings":"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","sourcesContent":["/* eslint-disable max-statements */\n/* eslint-disable max-lines */\n/**\n*\n* @licstart The following is the entire license notice for the JavaScript code in this file.\n*\n* Shared modules for microservices of Melinda rest api batch import system\n*\n* Copyright (C) 2020 University Of Helsinki (The National Library Of Finland)\n*\n* This file is part of melinda-rest-api-commons\n*\n* melinda-rest-api-commons program is free software: you can redistribute it and/or modify\n* it under the terms of the GNU Affero General Public License as\n* published by the Free Software Foundation, either version 3 of the\n* License, or (at your option) any later version.\n*\n* melinda-rest-api-commons is distributed in the hope that it will be useful,\n* but WITHOUT ANY WARRANTY; without even the implied warranty of\n* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n* GNU Affero General Public License for more details.\n*\n* You should have received a copy of the GNU Affero General Public License\n* along with this program. If not, see <http://www.gnu.org/licenses/>.\n*\n* @licend The above is the entire license notice\n* for the JavaScript code in this file.\n*\n*/\n\nimport amqplib from 'amqplib';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport {Error as ApiError} from '@natlibfi/melinda-commons';\nimport {createLogger} from '@natlibfi/melinda-backend-commons';\nimport {CHUNK_SIZE} from './constants';\nimport {logError} from './utils';\nimport httpStatus from 'http-status';\n\nexport default async function (AMQP_URL) {\n const connection = await amqplib.connect(AMQP_URL);\n const channel = await connection.createChannel();\n const logger = createLogger();\n\n return {checkQueue, consumeChunk, consumeRawChunk, consumeOne, consumeRaw, ackMessages, nackMessages, sendToQueue, removeQueue, messagesToRecords};\n\n async function checkQueue(queue, style = 'basic', purge = false, toRecord = true) {\n logger.silly(`checkQueue: ${queue}, Style: ${style}: Purge: ${purge}, toRecord: ${toRecord}`);\n try {\n const channelInfo = await channel.assertQueue(queue, {durable: true});\n if (purge) {\n await purgeQueue(purge);\n logger.verbose(`Queue ${queue} has purged ${channelInfo.messageCount} messages`);\n return checkQueue(queue, style);\n }\n\n if (channelInfo.messageCount < 1) {\n logger.silly(`checkQueue: ${channelInfo.messageCount} - ${queue} is empty`);\n return false;\n }\n logger.silly(`Queue ${queue} has ${channelInfo.messageCount} messages`);\n\n if (style === 'messages') {\n return channelInfo.messageCount;\n }\n\n // Note: returns a message + a record\n if (style === 'one') {\n return consumeOne(queue);\n }\n\n // Note: returns just a message\n if (style === 'raw') {\n return consumeRaw(queue);\n }\n\n // Note: returns a chunk of messages + records\n if (style === 'rawChunk') {\n return consumeRawChunk(queue);\n }\n\n // Note: returns a chunk of messages or a chunk of messages + records (depending on toRecord)\n if ((/^.{8}-.{4}-.{4}-.{4}-.{12}$/u).test(style)) {\n logger.silly(`checkQueue: regexp match ${style}`);\n return consumeByCorrelationId(queue, style, toRecord);\n }\n\n // Note: returns a chunk of messages + records\n if (style === 'basic') {\n return consumeChunk(queue);\n }\n\n // Defaults:\n throw new ApiError(httpStatus.UNPROCESSABLE_ENTITY);\n } catch (error) {\n logError(error);\n }\n\n function purgeQueue(purge) {\n if (purge) {\n return channel.purgeQueue(queue);\n }\n }\n }\n\n async function consumeChunk(queue) {\n logger.silly(`Prepared to consumeChunk from queue: ${queue}`);\n try {\n await channel.assertQueue(queue, {durable: true});\n\n // getData: next chunk (100) messages\n const queMessages = await getData(queue);\n\n const headers = getHeaderInfo(queMessages[0]);\n logger.silly(`Filtering messages by cataloger in ${JSON.stringify(headers)}`);\n\n let filterIn = 0; // eslint-disable-line functional/no-let\n let filterOut = 0; // eslint-disable-line functional/no-let\n\n // Check that cataloger match! headers\n const messages = queMessages.filter(message => {\n if (message.properties.headers.cataloger === headers.cataloger) {\n filterIn++; // eslint-disable-line no-plusplus\n return true;\n }\n\n // Nack unwanted ones\n channel.nack(message, false, true);\n filterOut++; // eslint-disable-line no-plusplus\n return false;\n });\n\n logger.silly(`Filtering by cataloger result: valid: ${filterIn} non-valid: ${filterOut}`);\n const records = await messagesToRecords(messages);\n\n // eslint-disable-next-line functional/no-conditional-statement\n if (messages) {\n logger.debug(`consumeChunk (${messages.length} from queue ${queue})`);\n }\n\n return {headers, records, messages};\n } catch (error) {\n logError(error);\n }\n }\n\n async function consumeByCorrelationId(queue, correlationId, toRecord = true) {\n logger.silly(`Prepared to consumeByCorrelationId from queue: ${queue}`);\n try {\n await channel.assertQueue(queue, {durable: true});\n // get next chunk (100) messages\n const queMessages = await getData(queue);\n\n logger.silly(`Filtering messages by ${correlationId}`);\n\n let filterIn = 0; // eslint-disable-line functional/no-let\n let filterOut = 0; // eslint-disable-line functional/no-let\n\n // Check that correlationId matches query\n const messages = queMessages.filter(message => {\n if (message.properties.correlationId === correlationId) {\n filterIn++; // eslint-disable-line no-plusplus\n return true;\n }\n\n // Nack unwanted ones\n channel.nack(message, false, true);\n filterOut++; // eslint-disable-line no-plusplus\n return false;\n });\n logger.debug(`Filtering by correlationId result: valid: ${filterIn} non-valid: ${filterOut}`);\n\n const headers = getHeaderInfo(messages[0]);\n\n // eslint-disable-next-line functional/no-conditional-statement\n if (messages) {\n logger.verbose(`consumeByCorrelationId (${messages.length}) from queue: ${queue}`);\n }\n\n if (toRecord) {\n const records = await messagesToRecords(messages);\n\n return {headers, records, messages};\n }\n return {headers, messages};\n } catch (error) {\n logError(error);\n }\n }\n\n async function consumeRawChunk(queue) {\n logger.silly(`Prepared to consumeRawChunk from queue: ${queue}`);\n try {\n await channel.assertQueue(queue, {durable: true});\n // Get next chunk (100) messages\n const queMessages = await getData(queue);\n\n const headers = getHeaderInfo(queMessages[0]);\n logger.silly(`Filtering messages by cataloger in ${JSON.stringify(headers)}`);\n\n let filterIn = 0; // eslint-disable-line functional/no-let\n let filterOut = 0; // eslint-disable-line functional/no-let\n\n // Check that cataloger match! headers\n const messages = queMessages.filter(message => {\n if (message.properties.headers.cataloger === headers.cataloger) {\n filterIn++; // eslint-disable-line no-plusplus\n\n return true;\n }\n\n // Nack unwanted ones\n channel.nack(message, false, true);\n filterOut++; // eslint-disable-line no-plusplus\n\n return false;\n });\n logger.debug(`Filtering by cataloger result: valid: ${filterIn} non-valid: ${filterOut}`);\n\n // eslint-disable-next-line functional/no-conditional-statement\n if (messages) {\n logger.verbose(`consumeRawChunk (${messages.length}) from queue: ${queue}`);\n }\n\n // return raw (do not convert messages to records)\n return {headers, messages};\n } catch (error) {\n logError(error);\n }\n }\n\n async function consumeOne(queue) {\n logger.silly(`Prepared to consumeOne from queue: ${queue}`);\n try {\n await channel.assertQueue(queue, {durable: true});\n\n // Returns false if 0 items in queue\n const message = await channel.get(queue);\n if (message) {\n const headers = getHeaderInfo(message);\n const records = messagesToRecords([message]);\n logger.verbose(`consumeOne from queue: ${queue}`);\n return {headers, records, messages: [message]};\n }\n\n return false;\n } catch (error) {\n logError(error);\n }\n }\n\n async function consumeRaw(queue) {\n logger.silly(`Prepared to consumeRaw from queue: ${queue}`);\n try {\n await channel.assertQueue(queue, {durable: true});\n // Returns false if 0 items in queue\n return await channel.get(queue);\n } catch (error) {\n logError(error);\n }\n }\n\n function ackMessages(messages) {\n messages.forEach(message => {\n logger.silly(`Ack message ${message.properties.correlationId}`);\n channel.ack(message);\n });\n }\n\n function nackMessages(messages) {\n messages.forEach(message => {\n logger.silly(`Nack message ${message.properties.correlationId}`);\n channel.nack(message);\n });\n }\n\n async function sendToQueue({queue, correlationId, headers, data}) {\n logger.silly(`Send message for ${correlationId} to queue: ${queue}`);\n try {\n logger.silly(`Queue ${queue}`);\n logger.silly(`CorrelationId ${correlationId}`);\n logger.silly(`Data ${JSON.stringify(data)}`);\n logger.silly(`Headers ${JSON.stringify(headers)}`);\n\n await channel.assertQueue(queue, {durable: true});\n\n channel.sendToQueue(\n queue,\n Buffer.from(JSON.stringify({data})),\n {\n correlationId,\n persistent: true,\n headers\n }\n );\n logger.debug(`Send message for ${correlationId} to queue: ${queue}`);\n } catch (error) {\n logError(error);\n }\n }\n\n async function removeQueue(queue) {\n logger.verbose(`Removing queue ${queue}.`);\n await channel.deleteQueue(queue);\n }\n\n // ----------------\n // Helper functions\n // ----------------\n\n function messagesToRecords(messages) {\n logger.debug(`Parsing messages (${messages.length}) to records`);\n\n return messages.map(message => {\n const content = JSON.parse(message.content.toString());\n return new MarcRecord(content.data);\n });\n }\n\n async function getData(queue) {\n logger.debug(`Getting queue data from ${queue}`);\n try {\n const {messageCount} = await channel.checkQueue(queue);\n logger.silly(`There is ${messageCount} messages in queue ${queue}`);\n const messagesToGet = messageCount >= CHUNK_SIZE ? CHUNK_SIZE : messageCount;\n logger.silly(`Getting ${messagesToGet} messages from queue ${queue}`);\n\n const messages = await pump(messagesToGet);\n\n logger.debug(`Returning ${messages.length} unique messages`);\n\n return messages;\n } catch (error) {\n logError(error);\n }\n\n async function pump(count, results = [], identifiers = []) {\n if (count === 0) {\n return results;\n }\n\n const message = await channel.get(queue);\n const identifier = {\n correlationId: message.properties.correlationId,\n deliveryTag: message.fields.deliveryTag\n };\n // Filter not unique messages\n if (identifiers.includes(identifier)) {\n return pump(count - 1, results, identifiers);\n }\n\n return pump(count - 1, results.concat(message), identifiers.concat(identifier));\n }\n }\n\n function getHeaderInfo(data) {\n return data.properties.headers;\n }\n}\n"],"file":"amqp.js"}
|
|
1
|
+
{"version":3,"sources":["../src/amqp.js"],"names":["AMQP_URL","connection","amqplib","connect","channel","createChannel","logger","checkQueue","consumeChunk","consumeRawChunk","consumeOne","consumeRaw","ackMessages","nackMessages","sendToQueue","removeQueue","messagesToRecords","queue","style","purge","toRecord","silly","channelInfo","assertQueue","durable","purgeQueue","verbose","messageCount","test","consumeByCorrelationId","ApiError","httpStatus","UNPROCESSABLE_ENTITY","error","queMessages","getData","headers","getHeaderInfo","JSON","stringify","filterIn","filterOut","messages","filter","message","properties","cataloger","nack","records","debug","length","correlationId","get","forEach","ack","data","Buffer","from","persistent","deleteQueue","map","content","parse","toString","MarcRecord","messagesToGet","CHUNK_SIZE","pump","count","results","identifiers","identifier","deliveryTag","fields","includes","concat"],"mappings":"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","sourcesContent":["/* eslint-disable max-statements */\n/* eslint-disable max-lines */\n/**\n*\n* @licstart The following is the entire license notice for the JavaScript code in this file.\n*\n* Shared modules for microservices of Melinda rest api batch import system\n*\n* Copyright (C) 2020 University Of Helsinki (The National Library Of Finland)\n*\n* This file is part of melinda-rest-api-commons\n*\n* melinda-rest-api-commons program is free software: you can redistribute it and/or modify\n* it under the terms of the GNU Affero General Public License as\n* published by the Free Software Foundation, either version 3 of the\n* License, or (at your option) any later version.\n*\n* melinda-rest-api-commons is distributed in the hope that it will be useful,\n* but WITHOUT ANY WARRANTY; without even the implied warranty of\n* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n* GNU Affero General Public License for more details.\n*\n* You should have received a copy of the GNU Affero General Public License\n* along with this program. If not, see <http://www.gnu.org/licenses/>.\n*\n* @licend The above is the entire license notice\n* for the JavaScript code in this file.\n*\n*/\n\nimport amqplib from 'amqplib';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport {Error as ApiError} from '@natlibfi/melinda-commons';\nimport {createLogger} from '@natlibfi/melinda-backend-commons';\nimport {CHUNK_SIZE} from './constants';\nimport {logError} from './utils';\nimport httpStatus from 'http-status';\n\nexport default async function (AMQP_URL) {\n const connection = await amqplib.connect(AMQP_URL);\n const channel = await connection.createChannel();\n const logger = createLogger();\n\n return {checkQueue, consumeChunk, consumeRawChunk, consumeOne, consumeRaw, ackMessages, nackMessages, sendToQueue, removeQueue, messagesToRecords};\n\n async function checkQueue(queue, style = 'basic', purge = false, toRecord = true) {\n logger.silly(`checkQueue: ${queue}, Style: ${style}: Purge: ${purge}, toRecord: ${toRecord}`);\n try {\n const channelInfo = await channel.assertQueue(queue, {durable: true});\n if (purge) {\n await purgeQueue(purge);\n logger.verbose(`Queue ${queue} has purged ${channelInfo.messageCount} messages`);\n return checkQueue(queue, style);\n }\n\n if (channelInfo.messageCount < 1) {\n logger.silly(`checkQueue: ${channelInfo.messageCount} - ${queue} is empty`);\n return false;\n }\n logger.silly(`Queue ${queue} has ${channelInfo.messageCount} messages`);\n\n if (style === 'messages') {\n return channelInfo.messageCount;\n }\n\n // Note: returns a message + a record\n if (style === 'one') {\n return consumeOne(queue);\n }\n\n // Note: returns just a message\n if (style === 'raw') {\n return consumeRaw(queue);\n }\n\n // Note: returns a chunk of messages + records\n if (style === 'rawChunk') {\n return consumeRawChunk(queue);\n }\n\n // Note: returns a chunk of messages or a chunk of messages + records (depending on toRecord)\n if ((/^.{8}-.{4}-.{4}-.{4}-.{12}$/u).test(style)) {\n logger.silly(`checkQueue: regexp match ${style}`);\n return consumeByCorrelationId(queue, style, toRecord);\n }\n\n // Note: returns a chunk of messages + records\n if (style === 'basic') {\n return consumeChunk(queue);\n }\n\n // Defaults:\n throw new ApiError(httpStatus.UNPROCESSABLE_ENTITY);\n } catch (error) {\n logError(error);\n }\n\n function purgeQueue(purge) {\n if (purge) {\n return channel.purgeQueue(queue);\n }\n }\n }\n\n async function consumeChunk(queue) {\n logger.silly(`Prepared to consumeChunk from queue: ${queue}`);\n try {\n await channel.assertQueue(queue, {durable: true});\n\n // getData: next chunk (100) messages\n const queMessages = await getData(queue);\n\n const headers = getHeaderInfo(queMessages[0]);\n logger.silly(`Filtering messages by cataloger in ${JSON.stringify(headers)}`);\n\n let filterIn = 0; // eslint-disable-line functional/no-let\n let filterOut = 0; // eslint-disable-line functional/no-let\n\n // Check that cataloger match! headers\n const messages = queMessages.filter(message => {\n if (message.properties.headers.cataloger === headers.cataloger) {\n filterIn++; // eslint-disable-line no-plusplus\n return true;\n }\n\n // Nack unwanted ones\n channel.nack(message, false, true);\n filterOut++; // eslint-disable-line no-plusplus\n return false;\n });\n\n logger.silly(`Filtering by cataloger result: valid: ${filterIn} non-valid: ${filterOut}`);\n const records = await messagesToRecords(messages);\n\n // eslint-disable-next-line functional/no-conditional-statement\n if (messages) {\n logger.debug(`consumeChunk (${messages.length} from queue ${queue})`);\n }\n\n return {headers, records, messages};\n } catch (error) {\n logError(error);\n }\n }\n\n async function consumeByCorrelationId(queue, correlationId, toRecord = true) {\n logger.silly(`Prepared to consumeByCorrelationId from queue: ${queue}`);\n try {\n await channel.assertQueue(queue, {durable: true});\n // get next chunk (100) messages\n const queMessages = await getData(queue);\n\n logger.silly(`Filtering messages by ${correlationId}`);\n\n let filterIn = 0; // eslint-disable-line functional/no-let\n let filterOut = 0; // eslint-disable-line functional/no-let\n\n // Check that correlationId matches query\n const messages = queMessages.filter(message => {\n if (message.properties.correlationId === correlationId) {\n filterIn++; // eslint-disable-line no-plusplus\n return true;\n }\n\n // Nack unwanted ones\n channel.nack(message, false, true);\n filterOut++; // eslint-disable-line no-plusplus\n return false;\n });\n logger.debug(`Filtering by correlationId result: valid: ${filterIn} non-valid: ${filterOut}`);\n\n const headers = getHeaderInfo(messages[0]);\n\n // eslint-disable-next-line functional/no-conditional-statement\n if (messages) {\n logger.verbose(`consumeByCorrelationId (${messages.length}) from queue: ${queue}`);\n }\n\n if (toRecord) {\n const records = await messagesToRecords(messages);\n\n return {headers, records, messages};\n }\n return {headers, messages};\n } catch (error) {\n logError(error);\n }\n }\n\n async function consumeRawChunk(queue) {\n logger.silly(`Prepared to consumeRawChunk from queue: ${queue}`);\n try {\n await channel.assertQueue(queue, {durable: true});\n // Get next chunk (100) messages\n const queMessages = await getData(queue);\n\n const headers = getHeaderInfo(queMessages[0]);\n logger.silly(`Filtering messages by cataloger in ${JSON.stringify(headers)}`);\n\n let filterIn = 0; // eslint-disable-line functional/no-let\n let filterOut = 0; // eslint-disable-line functional/no-let\n\n // Check that cataloger match! headers\n const messages = queMessages.filter(message => {\n if (message.properties.headers.cataloger === headers.cataloger) {\n filterIn++; // eslint-disable-line no-plusplus\n\n return true;\n }\n\n // Nack unwanted ones\n channel.nack(message, false, true);\n filterOut++; // eslint-disable-line no-plusplus\n\n return false;\n });\n logger.debug(`Filtering by cataloger result: valid: ${filterIn} non-valid: ${filterOut}`);\n\n // eslint-disable-next-line functional/no-conditional-statement\n if (messages) {\n logger.verbose(`consumeRawChunk (${messages.length}) from queue: ${queue}`);\n }\n\n // return raw (do not convert messages to records)\n return {headers, messages};\n } catch (error) {\n logError(error);\n }\n }\n\n async function consumeOne(queue) {\n logger.silly(`Prepared to consumeOne from queue: ${queue}`);\n try {\n await channel.assertQueue(queue, {durable: true});\n\n // Returns false if 0 items in queue\n const message = await channel.get(queue);\n if (message) {\n const headers = getHeaderInfo(message);\n const records = messagesToRecords([message]);\n logger.verbose(`consumeOne from queue: ${queue}`);\n return {headers, records, messages: [message]};\n }\n\n return false;\n } catch (error) {\n logError(error);\n }\n }\n\n async function consumeRaw(queue) {\n logger.silly(`Prepared to consumeRaw from queue: ${queue}`);\n try {\n await channel.assertQueue(queue, {durable: true});\n // Returns false if 0 items in queue\n return await channel.get(queue);\n } catch (error) {\n logError(error);\n }\n }\n\n function ackMessages(messages) {\n messages.forEach(message => {\n logger.silly(`Ack message ${message.properties.correlationId}`);\n channel.ack(message);\n });\n }\n\n function nackMessages(messages) {\n messages.forEach(message => {\n logger.silly(`Nack message ${message.properties.correlationId}`);\n channel.nack(message);\n });\n }\n\n async function sendToQueue({queue, correlationId, headers, data}) {\n try {\n logger.silly(`Queue ${queue}`);\n logger.silly(`CorrelationId ${correlationId}`);\n logger.silly(`Data ${JSON.stringify(data)}`);\n logger.silly(`Headers ${JSON.stringify(headers)}`);\n\n await channel.assertQueue(queue, {durable: true});\n\n channel.sendToQueue(\n queue,\n Buffer.from(JSON.stringify({data})),\n {\n correlationId,\n persistent: true,\n headers\n }\n );\n logger.silly(`Send message for ${correlationId} to queue: ${queue}`);\n } catch (error) {\n logError(error);\n }\n }\n\n async function removeQueue(queue) {\n logger.verbose(`Removing queue ${queue}.`);\n await channel.deleteQueue(queue);\n }\n\n // ----------------\n // Helper functions\n // ----------------\n\n function messagesToRecords(messages) {\n logger.debug(`Parsing messages (${messages.length}) to records`);\n\n return messages.map(message => {\n const content = JSON.parse(message.content.toString());\n return new MarcRecord(content.data);\n });\n }\n\n async function getData(queue) {\n logger.debug(`Getting queue data from ${queue}`);\n try {\n const {messageCount} = await channel.checkQueue(queue);\n logger.silly(`There is ${messageCount} messages in queue ${queue}`);\n const messagesToGet = messageCount >= CHUNK_SIZE ? CHUNK_SIZE : messageCount;\n logger.silly(`Getting ${messagesToGet} messages from queue ${queue}`);\n\n const messages = await pump(messagesToGet);\n\n logger.debug(`Returning ${messages.length} unique messages`);\n\n return messages;\n } catch (error) {\n logError(error);\n }\n\n async function pump(count, results = [], identifiers = []) {\n if (count === 0) {\n return results;\n }\n\n const message = await channel.get(queue);\n const identifier = {\n correlationId: message.properties.correlationId,\n deliveryTag: message.fields.deliveryTag\n };\n // Filter not unique messages\n if (identifiers.includes(identifier)) {\n return pump(count - 1, results, identifiers);\n }\n\n return pump(count - 1, results.concat(message), identifiers.concat(identifier));\n }\n }\n\n function getHeaderInfo(data) {\n return data.properties.headers;\n }\n}\n"],"file":"amqp.js"}
|