{"_id":"@articulate/squiss-jobs","_rev":"217-11602d1582abec170508229e6d1ff548","name":"@articulate/squiss-jobs","description":"SQS-backed job queue","dist-tags":{"latest":"0.2.0"},"versions":{"0.0.1":{"name":"@articulate/squiss-jobs","version":"0.0.1","description":"SQS-backed job queue","repository":{"type":"git","url":"git+https://github.com/articulate/squiss-jobs.git"},"author":{"name":"articulate"},"license":"UNLICENSED","bugs":{"url":"https://github.com/articulate/squiss-jobs/issues"},"homepage":"https://github.com/articulate/squiss-jobs#readme","bin":{"squiss-jobs":"./bin/squiss-jobs.sh"},"main":"index.js","scripts":{},"dependencies":{"idgen":"^2.0.2","ramda":"^0.22.1","sqs-consumer":"^3.3.0","sqs-producer":"^1.3.4"},"gitHead":"422cfc52e9771f8747ae585b1b1a70a50fc84eab","_id":"@articulate/squiss-jobs@0.0.1","_shasum":"7cbcfafbe51b2d39664ee5b56fed361da38c69ce","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.1","_npmUser":{"name":"flintinatux","email":"mccormack.scott@gmail.com"},"dist":{"shasum":"7cbcfafbe51b2d39664ee5b56fed361da38c69ce","tarball":"https://registry.npmjs.org/@articulate/squiss-jobs/-/squiss-jobs-0.0.1.tgz","integrity":"sha512-vsJsbHcpGzzJIti4c0Kj1xoYGqjiOVNo9+Dqywf3khYM2v9yJjj8JBd5kBFITJJE4kjMWZ10nRi0Qq2DFNUoKA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD0yNzzCySSAp1pMwSLbGnjJjDM3SnZHmAUIm5OomLMMAIgY3wCiskYqUSeTfwQcwvIWMnFr9KRkVeGhwMmDjI5xhQ="}]},"maintainers":[{"name":"flintinatux","email":"mccormack.scott@gmail.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/squiss-jobs-0.0.1.tgz_1474255486204_0.7799908467568457"},"directories":{}},"0.0.2":{"name":"@articulate/squiss-jobs","version":"0.0.2","description":"SQS-backed job queue","repository":{"type":"git","url":"git+https://github.com/articulate/squiss-jobs.git"},"author":{"name":"articulate"},"license":"UNLICENSED","bugs":{"url":"https://github.com/articulate/squiss-jobs/issues"},"homepage":"https://github.com/articulate/squiss-jobs#readme","bin":{"squiss-jobs":"./squiss-jobs.sh"},"main":"index.js","scripts":{},"dependencies":{"idgen":"^2.0.2","ramda":"^0.22.1","sqs-consumer":"^3.3.0","sqs-producer":"^1.3.4"},"gitHead":"7e78a9249629334464d65c70df41de4f8b09a442","_id":"@articulate/squiss-jobs@0.0.2","_shasum":"742e2cd1ea934f22c9fd702452109feae42e454d","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.1","_npmUser":{"name":"flintinatux","email":"mccormack.scott@gmail.com"},"dist":{"shasum":"742e2cd1ea934f22c9fd702452109feae42e454d","tarball":"https://registry.npmjs.org/@articulate/squiss-jobs/-/squiss-jobs-0.0.2.tgz","integrity":"sha512-XmQaJugYy/qOt871WUNDTHyd42MKLYdB+7IaLjYh4P2KshaSrx2WwKme70F3s0YDssI/PU2QFrLMLHsanN8nzw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCwOSOTYOpDr5oFcc3Za5RPxG7eqx0YwzIvnG+Um7nbjQIgAOg0BUnS8FJroEAnjeNFIJ+mlDSSnz1iBFTIqITuefk="}]},"maintainers":[{"name":"flintinatux","email":"mccormack.scott@gmail.com"},{"name":"fromonesrc","email":"aochonicki+npmjs@articulate.com"},{"name":"jrpz","email":"jperez@articulate.com"},{"name":"kdstew","email":"kstewart@articulate.com"},{"name":"pklingem","email":"patrick.klingemann@gmail.com"},{"name":"spencerfdavis","email":"spencerfdavis@gmail.com"},{"name":"tecnobrat","email":"brian@tecnobrat.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/squiss-jobs-0.0.2.tgz_1474259100166_0.8590454452205449"},"directories":{}},"0.0.3":{"name":"@articulate/squiss-jobs","version":"0.0.3","description":"SQS-backed job queue","repository":{"type":"git","url":"git+https://github.com/articulate/squiss-jobs.git"},"author":{"name":"articulate"},"license":"UNLICENSED","bugs":{"url":"https://github.com/articulate/squiss-jobs/issues"},"homepage":"https://github.com/articulate/squiss-jobs#readme","bin":{"squiss-jobs":"./squiss-jobs.sh"},"main":"index.js","scripts":{},"dependencies":{"idgen":"^2.0.2","ramda":"^0.22.1","sqs-consumer":"^3.3.0","sqs-producer":"^1.3.4"},"gitHead":"a117e673a56063055718471ea8e0f9b23a47496c","_id":"@articulate/squiss-jobs@0.0.3","_shasum":"dc1a79317b38380a10576a5667365d7e26b3593a","_from":".","_npmVersion":"3.10.7","_nodeVersion":"6.3.0","_npmUser":{"name":"flintinatux","email":"mccormack.scott@gmail.com"},"dist":{"shasum":"dc1a79317b38380a10576a5667365d7e26b3593a","tarball":"https://registry.npmjs.org/@articulate/squiss-jobs/-/squiss-jobs-0.0.3.tgz","integrity":"sha512-ymJSm6BPbCW2WqFAl0EEbmF1r730a4CQFOBrOr3RLIvins8bSdic5IQb/J2BQBxbXtux18VM4dyliKv08srTZw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDaAsgbg62fPNOn/PXDPWrnCD8ZwGcE68yRDjjKz27kTgIhAPLVsl0koXBJtvs4iMuEKNla7v1JummkRyvTX0a7YlxJ"}]},"maintainers":[{"name":"flintinatux","email":"mccormack.scott@gmail.com"},{"name":"fromonesrc","email":"aochonicki+npmjs@articulate.com"},{"name":"jrpz","email":"jperez@articulate.com"},{"name":"kdstew","email":"kstewart@articulate.com"},{"name":"pklingem","email":"patrick.klingemann@gmail.com"},{"name":"spencerfdavis","email":"spencerfdavis@gmail.com"},{"name":"tecnobrat","email":"brian@tecnobrat.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/squiss-jobs-0.0.3.tgz_1474300100733_0.22949780523777008"},"directories":{}},"0.1.0":{"name":"@articulate/squiss-jobs","version":"0.1.0","description":"SQS-backed job queue","repository":{"type":"git","url":"git+https://github.com/articulate/squiss-jobs.git"},"author":{"name":"articulate"},"license":"UNLICENSED","bugs":{"url":"https://github.com/articulate/squiss-jobs/issues"},"homepage":"https://github.com/articulate/squiss-jobs#readme","bin":{"squiss-jobs":"./squiss-jobs.sh"},"main":"index.js","scripts":{},"dependencies":{"idgen":"^2.0.2","ramda":"^0.22.1","sqs-consumer":"^3.3.0","sqs-producer":"^1.3.4"},"gitHead":"57f6cdf17a0d8de2059ab8fc4004f885ee1941ec","_id":"@articulate/squiss-jobs@0.1.0","_shasum":"fd9f42bde8b4272963c7717392d0feeb398b4f31","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.1.0","_npmUser":{"name":"pklingem","email":"patrick.klingemann@gmail.com"},"dist":{"shasum":"fd9f42bde8b4272963c7717392d0feeb398b4f31","tarball":"https://registry.npmjs.org/@articulate/squiss-jobs/-/squiss-jobs-0.1.0.tgz","integrity":"sha512-/SXLjEzai1tPlinycCpIGJlweLgI7f6Lo9TPuiW6nhW/4B7KhSJsMsCmnQzykG4YJFossYkQOPbh78hOEuezpw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCCAGaTbkuAQFgYNp8UNw40ZnADTpwoK2odtRhewLl9WwIhAIqKzrteyu2It8OAozXA10JCmIXiksRJkeVHTn65LFuC"}]},"maintainers":[{"name":"flintinatux","email":"mccormack.scott@gmail.com"},{"name":"fromonesrc","email":"aochonicki+npmjs@articulate.com"},{"name":"jrpz","email":"jperez@articulate.com"},{"name":"kdstew","email":"kstewart@articulate.com"},{"name":"pklingem","email":"patrick.klingemann@gmail.com"},{"name":"spencerfdavis","email":"spencerfdavis@gmail.com"},{"name":"tecnobrat","email":"brian@tecnobrat.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/squiss-jobs-0.1.0.tgz_1483971753656_0.9100353792309761"},"directories":{}},"0.1.1":{"name":"@articulate/squiss-jobs","version":"0.1.1","description":"SQS-backed job queue","repository":{"type":"git","url":"git+https://github.com/articulate/squiss-jobs.git"},"author":{"name":"articulate"},"license":"UNLICENSED","bugs":{"url":"https://github.com/articulate/squiss-jobs/issues"},"homepage":"https://github.com/articulate/squiss-jobs#readme","bin":{"squiss-jobs":"./squiss-jobs.sh"},"main":"index.js","scripts":{},"dependencies":{"idgen":"^2.0.2","ramda":"^0.22.1","sqs-consumer":"^3.3.0","sqs-producer":"^1.3.4"},"gitHead":"4c25f4e94c98899c97ae94143d8e4510bce2ff2f","_id":"@articulate/squiss-jobs@0.1.1","_shasum":"123aa9c0a88c6a58ca26d4d65f6d18866a22d5af","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.1","_npmUser":{"name":"pklingem","email":"patrick.klingemann@gmail.com"},"dist":{"shasum":"123aa9c0a88c6a58ca26d4d65f6d18866a22d5af","tarball":"https://registry.npmjs.org/@articulate/squiss-jobs/-/squiss-jobs-0.1.1.tgz","integrity":"sha512-ZaAT1v89UD5NTxK9NSMC/PTw2vnNLv0tcgiq/CiBQOPseWCeTrEElDolOk1RLo4PFSDh2ptYAEHHUPSXT8u6dw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIATTr7cBkSexJUiHkQxy/QpcDLVVe8alR8vlcQhnJ+Z2AiEAmcVIxd0A40F4W19b/rAxPRks2w0iFHG5yQBg760Aj/I="}]},"maintainers":[{"name":"flintinatux","email":"mccormack.scott@gmail.com"},{"name":"fromonesrc","email":"aochonicki+npmjs@articulate.com"},{"name":"jrpz","email":"jperez@articulate.com"},{"name":"kdstew","email":"kstewart@articulate.com"},{"name":"pklingem","email":"patrick.klingemann@gmail.com"},{"name":"spencerfdavis","email":"spencerfdavis@gmail.com"},{"name":"tecnobrat","email":"brian@tecnobrat.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/squiss-jobs-0.1.1.tgz_1485528516946_0.05037770513445139"},"directories":{}},"0.2.0":{"name":"@articulate/squiss-jobs","version":"0.2.0","description":"SQS-backed job queue","repository":{"type":"git","url":"git+https://github.com/articulate/squiss-jobs.git"},"author":{"name":"articulate"},"license":"UNLICENSED","bugs":{"url":"https://github.com/articulate/squiss-jobs/issues"},"homepage":"https://github.com/articulate/squiss-jobs#readme","bin":{"squiss-jobs":"./squiss-jobs.sh"},"main":"index.js","scripts":{},"dependencies":{"idgen":"^2.0.2","ramda":"^0.22.1","sqs-consumer":"^3.3.0","sqs-producer":"^1.3.4"},"gitHead":"661755444ce6f9bd5af4c820a0bb0528a5ec6f6f","_id":"@articulate/squiss-jobs@0.2.0","_shasum":"4a5e4a743501eb12e1f2b808abc173892aef3812","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.1","_npmUser":{"name":"pklingem","email":"patrick.klingemann@gmail.com"},"dist":{"shasum":"4a5e4a743501eb12e1f2b808abc173892aef3812","tarball":"https://registry.npmjs.org/@articulate/squiss-jobs/-/squiss-jobs-0.2.0.tgz","integrity":"sha512-py+D38JU0oJYiGKz+bNRq5eWW9h/bZ1M2sitefzYGwW0/9qe4zzviIRgMnzuGEU5V295AcjqezJwqROwEteGTg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD75zxNiHqZ4dm9laz1YlW9HRvugPSqf186sucBvkb9dwIgV7HBtLbF+oxdEKVaqk4ied28XjifIjtrWBixBtbrnJA="}]},"maintainers":[{"name":"flintinatux","email":"mccormack.scott@gmail.com"},{"name":"fromonesrc","email":"aochonicki+npmjs@articulate.com"},{"name":"jrpz","email":"jperez@articulate.com"},{"name":"kdstew","email":"kstewart@articulate.com"},{"name":"pklingem","email":"patrick.klingemann@gmail.com"},{"name":"spencerfdavis","email":"spencerfdavis@gmail.com"},{"name":"tecnobrat","email":"brian@tecnobrat.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/squiss-jobs-0.2.0.tgz_1486678463132_0.6052802540361881"},"directories":{}}},"readme":"# squiss-jobs [![npm version](https://img.shields.io/npm/v/@articulate/squiss-jobs.svg)](https://www.npmjs.com/package/@articulate/squiss-jobs)\n\nSQS-backed job queue.\n\n- [Module API](#module-api)\n- [Instance API](#instance-api)\n- [CLI](#cli)\n\n## Module API\n\n- [squiss.create](#squisscreate)\n- [squiss.domainify](#squissdomainify)\n\n## squiss.create\n\n```haskell\n:: Object -> Object\n```\n\n#### Parameters\n\n- Object `{ queueUrl, region, ... }` <br/>\n  Options object.  `queueUrl` is your SQS job queue.  `region` defaults to `eu-west-1`.  Other options are listed [here](https://www.npmjs.com/package/sqs-consumer#options).\n\n#### Returns\n\n- Object `queue` <br/>\n  A queue instance.  See [Instance API](#instance-api).\n\nCreates a job queue instance.  Note that `squiss-jobs` supplies its own `handleMessage` function to `sqs-consumer`, so any that you provide will be overridden.  Also, I recommend creating this once with your config and exporting it as a singleton.\n\n```js\nconst squiss = require('@articulate/squiss-jobs')\n\nconst queue = squiss.create({\n  queueUrl: process.env.JOBS_URI,\n  region:   process.env.AWS_REGION\n})\n\nmodule.exports = queue\n```\n\n## squiss.domainify\n\n```haskell\n:: ((*, Function) -> *) -> (*, Function) -> *\n```\n\n#### Parameters\n\n- Function `handler(payload, done)` <br/>\n  The job handler to wrap in a [domain](http://devdocs.io/node/domain#domain_class_domain).\n\n#### Returns\n\n- Function `wrappedHandler(payload, done)` <br/>\n  The wrapped job handler.\n\nAvoids uncaught exceptions in async jobs by wrapping the job handler in a [domain](http://devdocs.io/node/domain#domain_class_domain).  The expected handler signature is the same as expected by [queue.handle]().\n\n```js\nconst squiss = require('@articulate/squiss-jobs')\nconst queue  = require('../lib/queue')\n\nconst foo = (payload, done) => {\n  console.log(payload)\n  done()\n}\n\nqueue.handle('foo', squiss.domainify(foo))\n```\n\n## Instance API\n\n- [queue.handle](#queuehandle)\n- [queue.handleMany](#queuehandlemany)\n- [queue.on](#queueon)\n- [queue.send](#queuesend)\n- [queue.start](#queuestart)\n- [queue.stop](#queuestop)\n\n## queue.handle\n\n```haskell\n:: (String, (*, Function) -> *) -> Object\n```\n\n#### Parameters\n\n- String `type` <br/>\n  The job type.\n- Function `handler(payload, done)` <br/>\n  The handler for that job type.\n\n#### Returns\n\n- Object `queue` <br/>\n  The queue instance.\n\nRegisters a job handler for a specific job type.  If you register another handler for the same type, it will overwrite the first.\n\nPlease note the expected handler signature.  The `payload` will have already been deserialized with `JSON.parse`.  To mark the job as complete, simply call `done()`.  Call `done(err)` with an `Error` to fail the job and leave it on the queue.\n\n```js\nconst squiss = require('@articulate/squiss-jobs')\nconst queue  = require('../lib/queue')\n\nconst foo = (payload, done) => {\n  console.log(payload)\n  done()\n}\n\nqueue.handle('foo', squiss.domainify(foo))\n```\n\nYou may also call `queue.handle` multiple times to register several job types.\n\n```js\nconst jobs = require('require-dir')()\n\nfor (var type in jobs) {\n  queue.handle(type, squiss.domainify(jobs[type]))\n}\n```\n\n## queue.handleMany\n\n```haskell\n:: (Object) -> Object\n```\n\n#### Parameters\n\n- Object `jobs` <br/>\n  A map of job types to handlers\n\n#### Returns\n\n- Object `queue` <br/>\n  The queue instance.\n\nSimilar to [queue.handle](#queuehandle), but registers multiple jobs in one shot.\n\n```js\nconst squiss = require('@articulate/squiss-jobs')\nconst queue  = require('../lib/queue')\n\nconst foo = (payload, done) => {\n  console.log(payload)\n  done()\n}\n\nqueue.handleMany('foo', { foo: squiss.domainify(foo) }))\n```\n\nYou may also call `queue.handleMany` multiple times to register several sets of jobs.\n\n## queue.on\n\n```haskell\n:: (String, Function) -> Object\n```\n\n#### Parameters\n\n- String `type` <br/>\n  The event type.\n- Function `listener` <br/>\n  The event listener.\n\n#### Returns\n\n- Object `queue` <br/>\n  The queue instance.\n\nRegisters event listeners.  This is exactly the [eventemitter.on](http://devdocs.io/node/events#events_emitter_on_eventname_listener) function.  Events of interest are listed in the [sqs-consumer documentation](https://www.npmjs.com/package/sqs-consumer#events).\n\n```js\nconst squiss = require('./squiss')\n\nconst queue = squiss.create({ /* your config */ })\n\nqueue.on('error', console.error)\nqueue.on('processing_error', console.error)\n```\n\n## queue.send\n\n```haskell\n:: (String, *) -> Promise\n```\n\n#### Parameters\n\n- String `type` <br/>\n  The job type.\n- Any `payload` <br/>\n  The job payload.\n\n#### Returns\n\n- Promise <br/>\n  Resolves with the message sent through `sqs-producer`.\n\nSends a job into the SQS queue.  The `payload` will be serialized with `JSON.stringify`, and a random `id` will be added to the message before sending into the queue.  You can recover from enqueueing errors by calling `.catch()` on the returned promise.\n\n```js\nconst queue = require('../lib/queue')\n\nqueue.send('foo', { bar: 'baz' }).catch(console.error)\n```\n\n## queue.start\n\n```haskell\n:: () -> Object\n```\n\n#### Parameters\n\nNone.\n\n#### Returns\n\n- Object `queue` <br/>\n  The queue instance.\n\nStarts pulling jobs off the queuing and processing them one-at-a-time.\n\n```js\nconst squiss = require('@articulate/squiss-jobs')\nconst queue  = require('../lib/queue')\n\nconst jobs = require('require-dir')()\n\nfor (var type in jobs) {\n  queue.handle(type, squiss.domainify(jobs[type]))\n}\n\nqueue.start()\n```\n\n## queue.stop\n\n```haskell\n:: () -> Object\n```\n\n#### Parameters\n\nNone.\n\n#### Returns\n\n- Object `queue` <br/>\n  The queue instance.\n\nStops processing jobs.  Because every `start` needs a `stop`.  You can always start again with `queue.start()`.\n\n## CLI\n\n`squiss-jobs` ships with an executable script of the same name to help you create a personal dev job queue in SQS.  The queue name will be `${project-dirname}-jobs-${aws-username}`, and will have a `RedrivePolicy` pushing to a [deadletter queue](http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSDeadLetterQueue.html) after 3 job failures.\n\nTo run the script, you can either install globally with `npm i -g squiss-jobs`, or install normally and include it in your `npm` scripts in the `package.json`.  After creating your queues, it will output the job queue URL for you to include in your ENV.\n\n```sh\nscotts-air:squiss-jobs scott$ squiss-jobs\n\nCopy the following into your .env file:\nJOBS_URI=https://queue.amazonaws.com/689543204258/squiss-jobs-jobs-smccormack\n```\n\n**Note:** The CLI only supports Mac OSX, and requires `brew`.  It will `brew install` both `jq` and `awscli` if not present, and then allow you to configure your AWS creds before continuing.\n","maintainers":[{"email":"platform@articulate.com","name":"botzo"}],"time":{"modified":"2024-04-24T15:53:33.353Z","created":"2016-09-19T03:24:48.110Z","0.0.1":"2016-09-19T03:24:48.110Z","0.0.2":"2016-09-19T04:25:01.941Z","0.0.3":"2016-09-19T15:48:22.833Z","0.1.0":"2017-01-09T14:22:34.339Z","0.1.1":"2017-01-27T14:48:38.745Z","0.2.0":"2017-02-09T22:14:25.203Z"},"homepage":"https://github.com/articulate/squiss-jobs#readme","repository":{"type":"git","url":"git+https://github.com/articulate/squiss-jobs.git"},"author":{"name":"articulate"},"bugs":{"url":"https://github.com/articulate/squiss-jobs/issues"},"license":"UNLICENSED","readmeFilename":"README.md"}