{"_id":"sqs-consumer-v3","_rev":"1-f7e073dccd0f9d3dc3b0d03697e82aef","name":"sqs-consumer-v3","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"sqs-consumer-v3","version":"1.0.0","description":"Build SQS-based Node applications without the boilerplate","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"npm run clean && tsc","watch":"tsc --watch","clean":"rm -fr dist/*","prepublish":"npm run build","pretest":"npm run build","test":"mocha --recursive --full-trace --exit","lint":"eslint . --ext .ts","lint:fix":"eslint . --fix","coverage":"nyc mocha && nyc report --reporter=html && nyc report --reporter=json-summary","lcov":"nyc mocha && nyc report --reporter=lcov","posttest":"npm run lint"},"repository":{"type":"git","url":"git+https://github.com/BBC/sqs-consumer.git"},"bugs":{"url":"https://github.com/BBC/sqs-consumer/issues"},"homepage":"https://github.com/BBC/sqs-consumer","keywords":["sqs","queue","consumer"],"license":"Apache-2.0","devDependencies":{"@aws-sdk/client-sqs":"^3.5.0","@aws-sdk/smithy-client":"^3.5.0","@types/chai":"^4.2.11","@types/debug":"^4.1.5","@types/mocha":"^7.0.2","@types/node":"^14.0.13","@types/sinon":"^9.0.4","@types/typescript":"^2.0.0","chai":"^4.2.0","codeclimate-test-reporter":"^0.5.1","eslint":"^7.2.0","eslint-config-iplayer-ts":"^2.0.0","mocha":"^8.0.1","nyc":"^15.1.0","p-event":"^4.2.0","sinon":"^9.0.2","ts-node":"^8.10.2","tslint-config-airbnb":"^5.11.2","tslint-microsoft-contrib":"^6.2.0","typescript":"^3.9.5"},"dependencies":{"debug":"^4.1.1"},"peerDependencies":{"@aws-sdk/client-sqs":"^3.5.0"},"nyc":{"include":["src/**/*.ts"],"extension":[".ts"],"require":["ts-node/register"],"sourceMap":true,"instrument":true},"eslintConfig":{"extends":"iplayer-ts","parserOptions":{"ecmaVersion":2017,"sourceType":"module"}},"mocha":{"spec":"test/**/**/*.ts","require":"ts-node/register"},"gitHead":"c54157a25da8ccd14ee06c69d3de7b7e1c69d109","_id":"sqs-consumer-v3@1.0.0","_nodeVersion":"12.16.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-LaH4WQSxJw+TvI8TzLpCWQn5mJZaI31WrIHWVp6fPlpOiCUCymQrFNRUSqPQ/WUl9btFUXPmYfIk+w72YOprNA==","shasum":"4ad3b46e5a9fe3922070298458226b4666d5ffbb","tarball":"https://registry.npmjs.org/sqs-consumer-v3/-/sqs-consumer-v3-1.0.0.tgz","fileCount":25,"unpackedSize":70512,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiFLtlACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr6dg//e7gLthLMaeXl9zxN1RDl28C4f360R7b8Ow7MkRbKwpuzjjLV\r\nzRuQolvNt5QAqWhBZpuvDK5Qn3yrIdRkTGH6TthbowJiCtE5uReyfoLTa25d\r\nsSSHhwMvHWCEGivbiZ0tHhJHNdciIfCB3Z9FxjAacJBnPdZAMA+hXdV07MWr\r\ncKeS24pQ3yZU151EHOy0gYmMnYczExXRMx82gkvVQV0L7fthpMq+xZ59UQVN\r\nODrRtBndE8benbIfHBi6z/pN9MqvN28uLUrEvtybmG5Rns5ORCY5PC2ykdO4\r\nSUssZw154zENfOp/FcEpYgubA20pYNXnCgYktdeBVlBPSPSYNHpgwthTq0Uq\r\nijUQNV/5xpW5FxNgqIRN2rqB1dA9hADQ9Y7eHXYM0DGJBDYIr8G1AthZJVhg\r\nc7yqV7uHaeRjtlztURDQTEAMLIwyQXO2SJ9rwd9yoCPSp6Dhc2Sekkp/CxV2\r\nANvo5l28UEfwBoN7gdqlY/hkfMvE0WFEJOernftAv7oKudONlen74NvgzMEO\r\n9lBcgqbzcvNPuEfvPZLgh9O7jsmDQ6NXkkFJaXb/QQveRd+AjvdoKHAA0w3F\r\nhpEo/MlVWHUfaYizGPBtdR6Na9UGuVASYrVptG4t5Fbkr4MmKOy20LsCrpZ/\r\nlEke0wZc06dtIZmo3eG0IrkGhpwbfdp3+Ow=\r\n=Ve17\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDwlj71OLnWkI6xj1IRxXoWb/0CMI1YyIh6uJ0Rc1g8gAiEA7CcGiKS3Xk4tLplz6VMzIAjr4z6Sqe9auC36Y/lKINA="}]},"_npmUser":{"name":"mohitsenapaty","email":"mohitsenapaty@gmail.com"},"directories":{},"maintainers":[{"name":"mohitsenapaty","email":"mohitsenapaty@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sqs-consumer-v3_1.0.0_1645525860847_0.32398679531944885"},"_hasShrinkwrap":false}},"time":{"created":"2022-02-22T10:31:00.794Z","1.0.0":"2022-02-22T10:31:01.042Z","modified":"2022-05-18T12:51:42.186Z"},"maintainers":[{"name":"mohitsenapaty","email":"mohitsenapaty@gmail.com"}],"description":"Build SQS-based Node applications without the boilerplate","homepage":"https://github.com/BBC/sqs-consumer","keywords":["sqs","queue","consumer"],"repository":{"type":"git","url":"git+https://github.com/BBC/sqs-consumer.git"},"bugs":{"url":"https://github.com/BBC/sqs-consumer/issues"},"license":"Apache-2.0","readme":"# sqs-consumer\n\n[![NPM downloads](https://img.shields.io/npm/dm/sqs-consumer.svg?style=flat)](https://npmjs.org/package/sqs-consumer)\n[![Build Status](https://travis-ci.org/bbc/sqs-consumer.svg)](https://travis-ci.org/bbc/sqs-consumer) \n[![Code Climate](https://codeclimate.com/github/BBC/sqs-consumer/badges/gpa.svg)](https://codeclimate.com/github/BBC/sqs-consumer) \n[![Test Coverage](https://codeclimate.com/github/BBC/sqs-consumer/badges/coverage.svg)](https://codeclimate.com/github/BBC/sqs-consumer)\n\nBuild SQS-based applications without the boilerplate. Just define an async function that handles the SQS message processing.\n\n## Installation\n\n```bash\nnpm add sqs-consumer\n```\n\nNote: This library assumes you are using [AWS SDK v3](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-sqs/index.html). If you are using v2, please install v5.5.0:\n\n```bash\nnpm add sqs-consumer@5.5.0\n```\n\n## Usage\n\n```js\nimport { Consumer } from 'sqs-consumer';\n\nconst app = Consumer.create({\n  queueUrl: 'https://sqs.eu-west-1.amazonaws.com/account-id/queue-name',\n  handleMessage: async (message) => {\n    // do some work with `message`\n  }\n});\n\napp.on('error', (err) => {\n  console.error(err.message);\n});\n\napp.on('processing_error', (err) => {\n  console.error(err.message);\n});\n\napp.start();\n```\n\n* The queue is polled continuously for messages using [long polling](http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-long-polling.html).\n* Messages are deleted from the queue once the handler function has completed successfully.\n* Throwing an error (or returning a rejected promise) from the handler function will cause the message to be left on the queue. An [SQS redrive policy](http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSDeadLetterQueue.html) can be used to move messages that cannot be processed to a dead letter queue.\n* By default messages are processed one at a time – a new message won't be received until the first one has been processed. To process messages in parallel, use the `batchSize` option [detailed below](#options).\n* If you need to add specific configuration options to the SQS client, you may pass an instantiated client to the Consumer constructor:\n```js\nimport { Consumer } from 'sqs-consumer';\nimport { SQSClient } from '@aws-sdk/client-sqs';\n\nconst app = Consumer.create({\n  queueUrl: 'https://sqs.eu-west-1.amazonaws.com/account-id/queue-name',\n  handleMessage: async (message) => {\n    // do some work with `message`\n  },\n  sqs: new SQSClient({\n    region: 'my-region',\n    requestHandler: MyCustomHttpHandler\n  })\n});\n\napp.on('error', (err) => {\n  console.error(err.message);\n});\n\napp.on('processing_error', (err) => {\n  console.error(err.message);\n});\n\napp.start();\n```\n\n### Credentials\n\nBy default the consumer will look for AWS credentials in the places [specified by the AWS SDK](http://docs.aws.amazon.com/AWSJavaScriptSDK/guide/node-configuring.html#Setting_AWS_Credentials). The simplest option is to export your credentials as environment variables:\n\n```bash\nexport AWS_SECRET_ACCESS_KEY=...\nexport AWS_ACCESS_KEY_ID=...\n```\n\nIf you need to specify your credentials manually, you can use a pre-configured instance of the [SQS Client](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-sqs/classes/sqsclient.html) client and chose from [a valid credentials provider](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/)\n\n\n```js\nimport { Consumer } from 'sqs-consumer';\nimport { SQSClient } from '@aws-sdk/client-sqs';\nimport { fromIni } from '@aws-sdk/credential-provider-ini';\n\nconst credentials = fromIni({\n  profile: 'my-profile'\n});\n\nconst region = 'my-region';\n\nconst app = Consumer.create({\n  queueUrl: 'https://sqs.eu-west-1.amazonaws.com/account-id/queue-name',\n  handleMessage: async (message) => {\n    // ...\n  },\n  sqs: new SQSClient({ region, credentials })\n});\n\napp.on('error', (err) => {\n  console.error(err.message);\n});\n\napp.on('processing_error', (err) => {\n  console.error(err.message);\n});\n\napp.on('timeout_error', (err) => {\n console.error(err.message);\n});\n\napp.start();\n```\n\n## API\n\n### `Consumer.create(options)`\n\nCreates a new SQS consumer.\n\n#### Options\n\n* `queueUrl` - _String_ - The SQS queue URL\n* `region` - _String_ - The AWS region (default `eu-west-1`)\n* `handleMessage` - _Function_ - An `async` function (or function that returns a `Promise`) to be called whenever a message is received. Receives an SQS message object as it's first argument.\n* `handleMessageBatch` - _Function_ - An `async` function (or function that returns a `Promise`) to be called whenever a batch of messages is received. Similar to `handleMessage` but will receive the list of messages, not each message individually. **If both are set, `handleMessageBatch` overrides `handleMessage`**.\n* `handleMessageTimeout` - _Number_ - Time in ms to wait for `handleMessage` to process a message before timing out. Emits `timeout_error` on timeout. By default, if `handleMessage` times out, the unprocessed message returns to the end of the queue.\n* `attributeNames` - _Array_ - List of queue attributes to retrieve (i.e. `['All', 'ApproximateFirstReceiveTimestamp', 'ApproximateReceiveCount']`).\n* `messageAttributeNames` - _Array_ - List of message attributes to retrieve (i.e. `['name', 'address']`).\n* `batchSize` - _Number_ - The number of messages to request from SQS when polling (default `1`). This cannot be higher than the AWS limit of 10.\n* `visibilityTimeout` - _Number_ - The duration (in seconds) that the received messages are hidden from subsequent retrieve requests after being retrieved by a ReceiveMessage request.\n* `heartbeatInterval` - _Number_ - The interval (in seconds) between requests to extend the message visibility timeout. On each heartbeat the visibility is extended by adding `visibilityTimeout` to the number of seconds since the start of the handler function. This value must less than `visibilityTimeout`.\n* `terminateVisibilityTimeout` - _Boolean_ - If true, sets the message visibility timeout to 0 after a `processing_error` (defaults to `false`).\n* `waitTimeSeconds` - _Number_ - The duration (in seconds) for which the call will wait for a message to arrive in the queue before returning.\n* `authenticationErrorTimeout` - _Number_ - The duration (in milliseconds) to wait before retrying after an authentication error (defaults to `10000`).\n* `pollingWaitTimeMs` - _Number_ - The duration (in milliseconds) to wait before repolling the queue (defaults to `0`).\n* `sqs` - _Object_ - An optional [SQS Client](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-sqs/classes/sqsclient.html) object to use if you need to configure the client manually\n\n### `consumer.start()`\n\nStart polling the queue for messages.\n\n### `consumer.stop()`\n\nStop polling the queue for messages.\n\n### `consumer.isRunning`  \n\nReturns the current polling state of the consumer: `true` if it is actively polling, `false` if it is not.\n\n### Events\n\nEach consumer is an [`EventEmitter`](http://nodejs.org/api/events.html) and emits the following events:\n\n|Event|Params|Description|\n|-----|------|-----------|\n|`error`|`err`, `[message]`|Fired when an error occurs interacting with the queue. If the error correlates to a message, that error is included in Params|\n|`processing_error`|`err`, `message`|Fired when an error occurs processing the message.|\n|`timeout_error`|`err`, `message`|Fired when `handleMessageTimeout` is supplied as an option and if `handleMessage` times out.|\n|`message_received`|`message`|Fired when a message is received.|\n|`message_processed`|`message`|Fired when a message is successfully processed and removed from the queue.|\n|`response_processed`|None|Fired after one batch of items (up to `batchSize`) has been successfully processed.|\n|`stopped`|None|Fired when the consumer finally stops its work.|\n|`empty`|None|Fired when the queue is empty (All messages have been consumed).|\n\n### AWS IAM Permissions\n\nConsumer will receive and delete messages from the SQS queue. Ensure `sqs:ReceiveMessage` and `sqs:DeleteMessage` access is granted on the queue being consumed.\n\n\n### Contributing \nSee contributing [guidelines](https://github.com/bbc/sqs-consumer/blob/master/.github/CONTRIBUTING.md).\n","readmeFilename":"README.md"}