{"_id":"resin-procbots","_rev":"207-1a0566726da942725d18650d8f3eb557","name":"resin-procbots","dist-tags":{"601-resin-semver-f6df56fcaf6d29c20bfd57178eb59829661c5d0b":"3.18.16-601-resin-semver-f6df56fcaf6d29c20bfd57178eb59829661c5d0b","forums-namechange-3e6cee20eb0bf6fda90b34a69da42a7ac00fa167":"3.19.0-forums-namechange-3e6cee20eb0bf6fda90b34a69da42a7ac00fa167","fix-flowdock-hashtag-event-types-487ec56ebcf26adc0e97fdb3dc063d9ebf335568":"3.18.23-fix-flowdock-hashtag-event-types-487ec56ebcf26adc0e97fdb3dc063d9ebf335568","undefined-error-messages-f40d1efd76e3e58b8dc64a36ecd3ace2ba218184":"3.18.23-undefined-error-messages-f40d1efd76e3e58b8dc64a36ecd3ace2ba218184","enable-inbox-channels-32bf56a4a0f77940172948e41087a2aded3eace4":"3.19.2-enable-inbox-channels-32bf56a4a0f77940172948e41087a2aded3eace4","debug-front-thread-create-80fc56a14f6fbab0357e7865b8c5d117af54d032":"3.21.8-debug-front-thread-create-80fc56a14f6fbab0357e7865b8c5d117af54d032","debug-front-thread-create-4f6eef130bfbc55c6fa0e3bfcf33be2a64c93997":"3.21.8-debug-front-thread-create-4f6eef130bfbc55c6fa0e3bfcf33be2a64c93997","stop-syncing-support-meta-64ff0363923c2a3555a1c417bfcdd68fd5accafd":"3.21.10-stop-syncing-support-meta-64ff0363923c2a3555a1c417bfcdd68fd5accafd","change-prod-config-62b25ddd4639c41ca8391ba458903e5af84fe5bc":"3.21.12-change-prod-config-62b25ddd4639c41ca8391ba458903e5af84fe5bc","change-prod-config-429763082d33d75425f68b2491c75126ff59f3a5":"3.21.12-change-prod-config-429763082d33d75425f68b2491c75126ff59f3a5","prod-config-changes-e8bc45059bc60e47191d933cfaf8968cfbdeffd9":"3.21.13-prod-config-changes-e8bc45059bc60e47191d933cfaf8968cfbdeffd9","prod-config-changes-3bab450ca56e5b5ceca2aa7d79856eb670ee3647":"3.21.13-prod-config-changes-3bab450ca56e5b5ceca2aa7d79856eb670ee3647","prod-cfg-addition-7c1a5f15722719953a2a6a593776427ccd047aa4":"3.21.14-prod-cfg-addition-7c1a5f15722719953a2a6a593776427ccd047aa4","feedback-channel-26d4b3d17ee4a1d498d8b1b4194ae5e197d90ba9":"3.21.15-feedback-channel-26d4b3d17ee4a1d498d8b1b4194ae5e197d90ba9","distribution-channel-40c6190155d65262ea77048528e445a3feae8227":"3.21.16-distribution-channel-40c6190155d65262ea77048528e445a3feae8227","stop-paid-support-syncing-4d10aee8b0d4f76afd3cc1b28de989efee51ad22":"3.21.18-stop-paid-support-syncing-4d10aee8b0d4f76afd3cc1b28de989efee51ad22","latest":"3.21.19","improve-error-logging-53342dc2fd607aace5d237fd3fe77edbef38579f":"3.21.20-improve-error-logging-53342dc2fd607aace5d237fd3fe77edbef38579f"},"versions":{"3.18.14-599-contact-request-fix-db7cc61129e3b1adaf3375bd67e9354102e231bb":{"name":"resin-procbots","version":"3.18.14-599-contact-request-fix-db7cc61129e3b1adaf3375bd67e9354102e231bb","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.14-599-contact-request-fix-db7cc61129e3b1adaf3375bd67e9354102e231bb","maintainers":[{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"26ca5e93a43f80888812dde5d85693e35ad86987","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.14-599-contact-request-fix-db7cc61129e3b1adaf3375bd67e9354102e231bb.tgz","fileCount":90,"integrity":"sha512-jEvQtU8UH0IZvUF82LTi7vWCUxrFRlkq9MPWTlwPz/dYkE7BJj4AoLg90DkT+/M6JKkAOS0GSoiwrgyjrVxO9w==","signatures":[{"sig":"MEQCIHbaC4P+JgZPQehQYkZ8W1mXpl2y9VlG3tRGjjwuo03AAiBSL7n44SDxi3R//trEKUxYffo1heynoh8o5oWlZauQvA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":901213,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbn83zCRA9TVsSAnZWagAA1swP/jxUVDKiXtrnD7c7KU0c\nL5sx97mo9MUtmMw99vbyDp/b47+AEVpXDXYAsy5QZ+F6/gl2zb8S5lXq/rBy\nJqF1jPBxew5qiJDGe9LvHbtgZvB6ePbaWTPr83gWo+RdyEEL60DhfQycooDO\nEZmj+jX1zCi31xmNek8LFSQOGk9KE7A8huHl3mPVKzoppmjXzW6RQULLDETk\nyHklidhZHVFY8vKRIMNa4Xv3A4tfpfNFGm6b7GhNblc6IpkHWkUDVo8+WasP\n3fRY7l8O9vCH6dZWRMfe/2ttdOVFjxd90H1a2MEIbeANps//NuUXMIEZxBAG\nX8i/5sOaOd8yoEpMk6P89k9+6kFeflUwHlvfc3dPLF1Bk0KigXJBJ8b1h7ip\nZ2r0Qed+g0YzzaM2kjVsU+t0+bqdlhJXliLWLDR2FL5+4VaIKcI/8dm9hpu+\nW62fZAZ4imRW78bt4gKJ1gljKkx0fpJ9xriWi5NlMeTvnajBJMTRmzDNS5JY\n2MlHq+SsvVdfxH7sbip1AtC2g1cbaaiYtPXgutEHOvI0REqvSSwC3FZyXeTV\nyOzcyeAVELvrlinLghbvSXG9GooZjjQe+otMtfGkF0VDwdqK5S/GgPddYEQz\npD147cuR+PQpxj0TbPOXSQSOeq7LTd7y5I3YaZGhJ6yPSvDzbJSvxpAgg5wc\n8857\r\n=wpOs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"db7cc61129e3b1adaf3375bd67e9354102e231bb","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"resin.io","email":"accounts@resin.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^0.9.2","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.14-599-contact-request-fix-db7cc61129e3b1adaf3375bd67e9354102e231bb_1537199603047_0.4936485455472597","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.15-599-contact-request-fix-8dfba737135f749dd00bc165e88413e50d792b91":{"name":"resin-procbots","version":"3.18.15-599-contact-request-fix-8dfba737135f749dd00bc165e88413e50d792b91","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.15-599-contact-request-fix-8dfba737135f749dd00bc165e88413e50d792b91","maintainers":[{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"29db8ffdf601a2655c27068a26a7cfbc078e663c","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.15-599-contact-request-fix-8dfba737135f749dd00bc165e88413e50d792b91.tgz","fileCount":90,"integrity":"sha512-bMJ4cZ6Q/nDuvAaGpfBGrEdY8FLPJ8BQIukEGlQZRP33z7lwd4BhkyIvKWLshSf2QiLQLtHMRwWo8Z8AQ8CMXg==","signatures":[{"sig":"MEQCIFWvHdUYmGTJ7snPQNTrVTKKVhPQR+krgtoIoknJfTf1AiA1y+Ktprfur1d1nTXnZZPPcwPiRLWgZIQ2GzNQUmmuqA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":901558,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbn9TPCRA9TVsSAnZWagAAZ24P/jhygv86hEeHr7/kck2y\nXhFR69BOhW7BTv2nK4tRXcqfU41W5d+tI+jJXFklG+Qyzhyme/IAelLXJooQ\npAFphLMcewQkIeBvfbbVgel7AqBktUNIh3O2opCzD00dRbQeDc430UkYcYv7\nYpO12jN0DyCjnew0pwgrMWG+/7Jvq5lkoR9BaikI9OeRK71ddJItdyF95/X+\neqiw1lBY5wwofRNuGXiKYGdYgO/t802O8OiLHuH9vqySVus3W6ovF4pv0qQC\nbBPOL3jK2N9kpKv/KvjGAmLQbiqp3cvirNvoER//gYsG+rI3NQXR2EpBWvQk\nj2oZQBxNrMOFtIbf/dODH6CLcCz9XT742fWlOuIp/aOL+X0vIKMbfN+Hch9Y\nWVv6/+eSN3z4jre8ZfVJX+DRi6mAvemRNkQHdsqMkdxknqDsta3bFLHN7+UY\nNX52V94Rsd5FgrXI4bo3FJ2TXK0Rt3/o1LoW9PLboG/k6CQu7nj5r0q8/Iy1\nlz3biL3sK9K9eo2V09gwW61xkeEjcOONBhNnatB1uBCe0XlWrffeWYmXjia9\nRxnlYj1L4i5MZFfXxX0QcvM1MmcRaQV8C/WqpATbQ/rQoBGo/zupbv897V1j\njD7fJzmdi3znW2XA1jTnXqWsHrT+T7iUW+J5u0Ea8Otx/JliwN6eDm4e+ZKe\nBN7u\r\n=qMvU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"8dfba737135f749dd00bc165e88413e50d792b91","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"resin.io","email":"accounts@resin.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^0.9.2","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.15-599-contact-request-fix-8dfba737135f749dd00bc165e88413e50d792b91_1537201358344_0.3944081771475627","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.15":{"name":"resin-procbots","version":"3.18.15","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.15","maintainers":[{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"5b7b7bc0a9623f9045361b6eeef89275b4fcf67b","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.15.tgz","fileCount":90,"integrity":"sha512-SthvnYCGmOXDA+RJyRMUHnGIa84yfJVkcVne2SbMMFKerzd503VAIYI4d5tMcytgR85ZRvnubD6eY5IBPxbGHw==","signatures":[{"sig":"MEUCIFpdj/jdqA3a/X5huvt9X7VJLkflIzWtAnPfyDirdsWlAiEAkdLpgtdxoZbYBRbr1o8VquJ8PqQk3y0NtNTqJf9p+hw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":901493,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbn9VKCRA9TVsSAnZWagAAOKIP/3V/g9hBpT4OwqfLQMA1\ngezLDeVlD3IuA7GZ1pMMaIXuLbSIJSmIhJgyAfa46uYFtzZg1dMEtQkwL3ak\n5seK64c1PNh0bRI4epgkq906RSvZknr4D8+TQjC866h5ylYI/R1kE7ojnojv\n74KsPOLpUT/qEtIw6d57YrqyL6xzT3mux4z6CNIenkSqZZKu8BJgNDHLeseb\nbNPf6tTdXfkp0gEGurF9FUTfjZrdWky2PX8bOcFAhj9BhwcvJ3zcNjyIIKFC\nln+zFe8o92SUM9qCpzmp+Snp6ZoAdhALdFXVU77LTyiNaYRxD1xDRhLWYhBE\nsugT3aDUuoJ4TgH9Jv2zlyh8eeqebmCwf6/pK1mOizYr4EweCH2grazHyr7Z\n6NIbr6mqQC7O8rYta4vu2YsOdB/CeFUtwho1rLQ8jadsyBBF5xuc/XWTQZd7\n0Y8F4gT//VJNsw20jOGADYKRSk24OQJ1e5OOX5/8S4kiJ1fBX+hIuk1WdI+X\ngxFHme8gwlK2q9m/vhNU26CvIwLkcAXnl4WHWtpGoMqsw850D3U/gEGJ96Rx\nd8F7SHXEOdHwNe/YYA93nXqkPZBY2EbYVWv6XyGRkTZ+yKYd5akhgrdp1HUc\ntW4qZrNOAQUrrmDaz8eHRa9H0RK6XXNVQGveAQPBz6jzbQyDhxqnEfpWP5kW\nTvVM\r\n=9A6l\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"534cb42a832682e8e2f67d83041fe626b65ea2fc","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"resin.io","email":"accounts@resin.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^0.9.2","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.15_1537201481644_0.5521844864485734","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.16-601-resin-semver-f6df56fcaf6d29c20bfd57178eb59829661c5d0b":{"name":"resin-procbots","version":"3.18.16-601-resin-semver-f6df56fcaf6d29c20bfd57178eb59829661c5d0b","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.16-601-resin-semver-f6df56fcaf6d29c20bfd57178eb59829661c5d0b","maintainers":[{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"42cc3295ae8362a26a8133d75d36a401b3073a53","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.16-601-resin-semver-f6df56fcaf6d29c20bfd57178eb59829661c5d0b.tgz","fileCount":90,"integrity":"sha512-xtZD1+eRAJ/cAxHXiKmJsRtMcDedyzOe2Pa80BVFcdifmIPaVa+fjXSCoy+P9CPbhNMwgFRL5PHUxb8IQqhIPA==","signatures":[{"sig":"MEYCIQCXO1iMSH1WilIILnacFbwe0gok2zfOHBr7dMigyUAE6AIhALWYbgGyX1+poMGH4sOJ2/TICnu/QSJbbjiyjSma49yb","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":901658,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJboQMuCRA9TVsSAnZWagAAXVIQAKQAqntjxGyPfdTLwWBN\nlce+JqL2GUb1byOBU35DTOcdtrV53az657Jb7UxdZTsRXQVsio6ZH65b9d6r\nrgn1iOPnE04W4o/XWsRyAzE3B6X385XZRibDtN14VC2sIjD5W/aFRH5eQNac\nWwFIDSsnrIYsDjPY3FHb2lIbAL6deBomW2K1di8qIuS4c6Rzdf+OEiBBp66m\nd0U4u2VvDtNyjywXNkSPrjlRktaVJIseBacNn59TLIFChoC/MQiloO9AwOJ/\nqGyAXC4WiC0DS7SfloJsQ2B+KuHVXnCmu7TFjKgu6CPjaw1APlwHhYK+JZ5B\npNvFZpdWT/EUEdS+Ydx82eaXTNBL5TvKz3pUjpcCkx4XvZOP5iLy1LGzVKZT\n6xNA3dLOU9KNHQFmYifCOQz53ZXAlijsK9onFL1RwtHbw2oMZDHBbXFahfR+\nHVEVk8brY/5AvwJ7heltk114BEHRdcGQeDR59Ci90UGHNp+6pp3eX4QEERUj\nuoaR9VoRnmqOmtj1O8yYra9eUcJ+iIRfoNpdSOV1WLDNaAHCHqrYhxtu7s22\nojLLH1FosP7xwijCQwJlOx6CWhadnCVtRxG3zMzUpGXHbsbFlXP1BpFHnLIx\ne3CGGbjwaV1l/E+jVqgdnxadV/vb/bfK3mmvPdvP9QzNWcUAYcF6pFwbIi1L\n5zkF\r\n=4UM5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"f6df56fcaf6d29c20bfd57178eb59829661c5d0b","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"resin.io","email":"accounts@resin.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.3.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.16-601-resin-semver-f6df56fcaf6d29c20bfd57178eb59829661c5d0b_1537278766074_0.08954294051772838","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.16-598-document-chatops-33d9440bdeb6b664c27e6f28301682c0f16fab2a":{"name":"resin-procbots","version":"3.18.16-598-document-chatops-33d9440bdeb6b664c27e6f28301682c0f16fab2a","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.16-598-document-chatops-33d9440bdeb6b664c27e6f28301682c0f16fab2a","maintainers":[{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"5d34eaa3f0973db3c68799b4476da1e50f6a0f52","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.16-598-document-chatops-33d9440bdeb6b664c27e6f28301682c0f16fab2a.tgz","fileCount":90,"integrity":"sha512-uaZaZcDSAAdZHtjsGr+HXhappRheXB1cHOrP552aKQZTQwXu1WoI0aj219Q5xsQ0WUY1m6mnc9O5YDOtW9Gy4Q==","signatures":[{"sig":"MEUCID45i3grC8xRq5gUpKWLsdsQww0Dg5T4yZ8bWpkGcN9GAiEA+EtOwmFRyXV38pvgKrCAhl/3auGO4n8DcR+xTZ1ypqM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":902920,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJboiLbCRA9TVsSAnZWagAAEh0P/0VrSczkr9uWKWZ5+8bY\nUPxwPVpP8qWheLFv8VtwbSBTXd/Px262wH6DUEXM+GlGUFuy5NS8DSrMKO3j\nWNbILIf7VPdso/Uq4vHGGVAkIHuWJs/NKI+waJN/3RaLW/KUA/EI2o5xtKMP\nyDjW/BoDLpg2egzSmEcSyDa0Mg38RNv9IvTpmML3uaN7TwNdMnx4mkIYRueU\nLLAhNHYau9Vds/wNXaIUpEcVs4gpzGPHVaXsXAbi7yIVup0c7+XtPtz+i/Uc\nDQpqsF0iAXHsjfu7Wz9n83F1QoSFCLJ8F+T7ca9gX/ia31cVwqDO7U4fDo8V\nyVERoLLayltJLju36tCEkM51KCygn9Tt/esnpkuJvY3LezFwF1QZXOf6/PRs\nZjX0Q/tS79gXVutWny8VLBpT4Wpj1iSMAReHsq3O5MJuYZrCsZX5043MsTNL\nKRjsqz1v2m9kIXfB0wkrWyRS8zapzxXLlcvYQHz/rf4YXeymuqXOspRFWUe1\nmM55PfgGHJgO8eN+qjkwVimyngsbIjxKLIp5AkzNKMo+SGmOQtZ/BDNa8VCP\n6JuvbMnCwfSgcYCIWCrzql1JMtIycfrzDc43ma0320U5YqzDgGVI4Kxlwr34\nso+mxIs6Vz2QAqMHBC4ZISt1DZjlxD3O1p7v3YJTXc9GdJpNyYRVU47HJea6\nUl9X\r\n=/jvz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"33d9440bdeb6b664c27e6f28301682c0f16fab2a","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"resin.io","email":"accounts@resin.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^0.9.2","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.16-598-document-chatops-33d9440bdeb6b664c27e6f28301682c0f16fab2a_1537352410258_0.3748316692810618","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.16-585-new-line-parsing-8ebef7dbb0441366bfacde41ec0fbecb4adbe255":{"name":"resin-procbots","version":"3.18.16-585-new-line-parsing-8ebef7dbb0441366bfacde41ec0fbecb4adbe255","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.16-585-new-line-parsing-8ebef7dbb0441366bfacde41ec0fbecb4adbe255","maintainers":[{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"558c2309e3f82b7e29d3b4b9bd28f22eaedde573","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.16-585-new-line-parsing-8ebef7dbb0441366bfacde41ec0fbecb4adbe255.tgz","fileCount":90,"integrity":"sha512-SSXVtZMInyajHUmXo0NWvm6+6iv77BQ0IfDURgRAf8Zwl0cRSgGXeMqC6EPZjPyLr5OLY7xdeuoupkR35PFfpw==","signatures":[{"sig":"MEQCIDZc7lu2V5gyJppD+/xgNxl15a8AACRwtP+5Rmnv5SSAAiB37RyE+URm6eK2CqIyd5WzQ/xg2qgoPI3RI0LS2vgmng==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":901751,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbqL4ZCRA9TVsSAnZWagAAQeEP/35Ss+JcU+lLgHsIi4ni\nEoIKJetUqM+NsSMhqOWvkCFbAupu82ojqcabBs5ZK5lPSjn1hp6itnINJANg\nPtyaR/G+iOmK4Y8JcIthICVnactsOkPr72+ufo7Qb1qKxkPSSzGnJd5y7Lc8\nyo/XpQOf2fUUt9iyEcVdmN/ZQdXrnd7rJJFjtN0XCZ/g3j1wRIrGA2ft2+EZ\nGrEfMZgwMgILvjQ+Sbmltqlu1l0tmjYjuUq3FXo6NzYmdJZLvyVkLkxCoPqn\nGsgHAnSGOuKdS7+qDZEYO2TYYdQ8d/kPmu00lteU8oWv6YP7xNBXQ96HQYtQ\nWISd+BQT0gcED0+zSwUCAHKcHk7+wFtLTKuXZmgtKx41d/R+QRS+CHQiQ8zE\nhUdFYg6s2mMRLm1jSDJVCmYKpKWBXm84ZPecpQhzuiLLnwI9q25T3uRLkq0H\nIY7K3L8HIEBfzrwyH2MuNtiE94Au2DzB+ZhmhBUM8aTdCzR0FdMEJqeJIBbM\nn1fSfqUVleG34bm47pr/s7rayYS4//ewlWbEa4urB6M6i30ANtc7bnqzz3Sl\nAssV1KefphUJzc+1+lgdUG98sJ+pi0Zp4QtHTrTm7EtwWUmyxU1/0aTbGH33\nr971qjcvivbRna0XwnDFHwAr3n/iSBvsPsSNwOkWMdAk2ovVlvZgD9wI4kZy\nYts7\r\n=94ts\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"8ebef7dbb0441366bfacde41ec0fbecb4adbe255","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"resin.io","email":"accounts@resin.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^0.9.2","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.16-585-new-line-parsing-8ebef7dbb0441366bfacde41ec0fbecb4adbe255_1537785368394_0.5744770579616945","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.16-606-remove-summary-keywords-4fea61b4032bbd5d63efdd249a048e0ebf3105bb":{"name":"resin-procbots","version":"3.18.16-606-remove-summary-keywords-4fea61b4032bbd5d63efdd249a048e0ebf3105bb","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.16-606-remove-summary-keywords-4fea61b4032bbd5d63efdd249a048e0ebf3105bb","maintainers":[{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"15cb70148f7d64288c5008fa7b0ffb153fdd169e","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.16-606-remove-summary-keywords-4fea61b4032bbd5d63efdd249a048e0ebf3105bb.tgz","fileCount":90,"integrity":"sha512-6B7qdvvU16xiqBAZC+Y2Qqx1kC1R9t/NLdeQrp/IgRCiV+/Twv6xP3oFVbx+0rR1E/e4oR6BeRrKraPsHx0Nog==","signatures":[{"sig":"MEUCIH/eFV+LKge/jQnfJFXC7haj8Syus509I2shSP5Q1Mu1AiEAvW/bH1oIEVZUp+aQ5ycycf8s+1YZsPo2muThPLD5rRI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":901503,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbqjrHCRA9TVsSAnZWagAASd8P/1bYOTcN7nnCWhUsirT7\nQHXKW8whEdiPmbS85uXyDGe6STRQQ9PTGI+COMe59MHnEM0WehS4+0XH+pPb\nrQaNk8sEZOpJp+vWHIeJWN1DUnToMFoFaP8nQmvjI9XgihHoEv0aQ9zIpNvT\nvkAQW0F9Q2UWiVqQjPt/INNswDYixT7T9vMRK831DDq/N9xnIf5nx8v4+0Gu\nS/lu0/vX680WpMn4S/03lnpy83d7gk2bYqfePbgvQ2F72u1xwEVT1ZKQw5iX\nBoSsIQZwiu75XNRT8OFf3ewSXrntNRKlBCxu7D92jlY5RflPem1E/FOERlyI\nenKmZeYYldAYCxOIlsm0TgXv6EKJwK0DLo99i2o/bEv/mELbZYBO7HJVNABC\nQOQcZzo9EVr7ZFjPcIezzVp967ZkEdYrdwx2Xbp+IZ3PyV9VkdLHzqScMNiW\ndJw5YmCNoRXXoHbw70HMSK0q+oXecd1DqBwE2DHHQJ4EL20eGY3acsZXyKGu\n8UrBLRuvP8Jadzsd/AsieaJCVk7BQ8F/xmc47DKvPFDQSot77SvJ2R3OLCvM\n/ykUlLCpLvDOcBP+Y6/hSwWWBKD5ECI9eb6v8VlucNK2k4GQKf+kORjqcr+d\nT/0C0aNaJcCBafd+5LhfD2yXyS0mPwpTqM9F7FnXSbDJyA/+09jVHHROxY9F\nSaMu\r\n=eVOj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"4fea61b4032bbd5d63efdd249a048e0ebf3105bb","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"resin.io","email":"accounts@resin.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^0.9.2","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.16-606-remove-summary-keywords-4fea61b4032bbd5d63efdd249a048e0ebf3105bb_1537882822527_0.6423447050139679","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.16-608-resin-ci-5f85862ae9a9bacb2141ab68ade30ef3e49ebe91":{"name":"resin-procbots","version":"3.18.16-608-resin-ci-5f85862ae9a9bacb2141ab68ade30ef3e49ebe91","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.16-608-resin-ci-5f85862ae9a9bacb2141ab68ade30ef3e49ebe91","maintainers":[{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"6f237579a9fc682ad3aa084df6298c9c103b9896","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.16-608-resin-ci-5f85862ae9a9bacb2141ab68ade30ef3e49ebe91.tgz","fileCount":91,"integrity":"sha512-5ixOquJWhm6Pn0NHT876cYfj7prDzE4uJfGTfU4cvE9EM6JXu0INIKH1H1kVqTMI2aSzPRV10UxW/7Z4jQ4k7Q==","signatures":[{"sig":"MEUCIQCIkjKtv74xxNDNE68kUJ+BBGQeRcbgNYeCt89j5Dj0TQIgavfzdoLFJz/mUt0ndeesugAGKZuSOCuxQnnQRjNUklI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":901723,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbq01iCRA9TVsSAnZWagAAohwP/iY/fFlG18HDiIBP7c2b\n1ED2v4NKItVew9ivq6fv8KyKsmPupOliTQF/VNGqIgxe+m1mmDIChdUk2tJ+\nV/vP87PxpdEyn/zKyVaEyJKqRNIFEHRvb7IkUURlmP5sSkR7DJKCOOmVE0K2\n5OLMM/wYFt2EXSqKGIexv2JcWLpgDWkYpN1LdCogljKv0LK5OZGmsZETRaZ3\n34G1uhGZrf8UzdhrVzXgF3cMrdhyQQ2ulEH3SeYFSYxzPX2BmcCXGeAZ1rKU\nxzdu7upSbRVPdCITp7g5Q+wHpBax54+miaMgQZEs60VFeSyANpsxDQsRli4z\nwHkoq+wdnLbWqAYXKb6yDydrkkTddwevGJ/4wyg9J2UUCmbGwWkwR5Bi3BWs\nkVyqB6DfnVU3hZqVzRGzoxkeJ8e24T03yiAc4o6+Fm9bGwy/0JkbE+TSiSR7\nl/rOvFd32wUl9sR1yX5kcUj84gWev5ZcbayaPUGHkNQSmufR6D5WJSyhh6dd\n5DzR7wX4sR8YT6ZR6bKMRDyn2Z/UjRToHPbUO8BKiBFrKDXfjWg1FePadsS8\nBfk9M9COMRUvmgr6lz19RtZO/YtbROlKYwYUsEGTAgEg50LR5HlrtsBCPW9l\nbaQPrkrlk7hBsCMe4yFTKzh82jq836bZef1Vh6zbbg93GQoqOif/j7Jwdw0Z\nyt1X\r\n=rIBJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"5f85862ae9a9bacb2141ab68ade30ef3e49ebe91","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"resin.io","email":"accounts@resin.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^0.9.2","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.16-608-resin-ci-5f85862ae9a9bacb2141ab68ade30ef3e49ebe91_1537953121713_0.46432991894248254","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.16-608-resin-ci-b778de731b261c21d9e537b83221182658fbda44":{"name":"resin-procbots","version":"3.18.16-608-resin-ci-b778de731b261c21d9e537b83221182658fbda44","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.16-608-resin-ci-b778de731b261c21d9e537b83221182658fbda44","maintainers":[{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"fd48658bb33b7251ee817ed838bd0fa4d9ba7d35","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.16-608-resin-ci-b778de731b261c21d9e537b83221182658fbda44.tgz","fileCount":91,"integrity":"sha512-wrz94vB0Z1n9IF8P7spqnG7fDbSnR4JxgBxaBwJBhLaK4cDlejwJSugEv1N05N9hzDqZSiHy62NM+2Henye71A==","signatures":[{"sig":"MEYCIQDvcfrcbiwfQGp+MM8vyGZ0cpVyVGc172rY7reZOMLMAAIhAJ90uqP5DLWK46Ki0XdKsEZB2mWIShREnuUCnM1xuV3u","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":901704,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbq1JtCRA9TVsSAnZWagAAou8P/jieNIwMw2JWpw3CVDDT\nS0RoDeVGQ2nfM72A1fOZI74jKqLIlDkbokNy3ewQZH8qWpgzpeBdxCsYasKn\nx9oG1MpwJtZlW2Z7K6M7q9y2zzB+4IuvW7xcenJBLMzpAz161F7PyT8XZRQu\n2KjfF8hpaNsNu3eO4L5TwthfLtg7VdnhFYbqNewixXYUHtu/SJFpos6LBt1M\nsOLJeTY8l6k1hijR3+zCbj8pwhUUEZMoOaw15BFwoBUYgOmNG3v+ueeCGzdI\n/OB1mO6082wuAB4RdvA7dCHDMfC5bXu/zV7cFQiuRb8roAWhlEZZOY2t2R/x\nU/KOoYwz5PuwGyzbS/yVGf2k8iTXvbpYLK3H3va2krAzUfEyS2s55M31SLCc\nu/4dp8+JZvtfNjysjijJ0Z6RN8sZfnRFaDqFWWdu2XVkub153yI71dl1p570\ncDUnf4uqF0kf5CGOuiuYwu4a03+DR+KT0P4FMK8pIYuFIzrjulyCNVjN1oC3\n3nTlsmRUUFif2D9q8YXaZmLGdlQVq27wh74a3nnT4qHO+ZRkBvfw79DRPY2Z\nX49Rxf8nu7e6s73OIAXOLWFoX5nDd0uLouV73+1k6Zta2oKkQUibLhAQ8rip\n+VpwGMqoXMzbBo2QhuCO4ru5SBS6NFLDuGiwuLJkFRp2b5q87anasJDsigKe\n+fhY\r\n=A5gO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"b778de731b261c21d9e537b83221182658fbda44","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"resin.io","email":"accounts@resin.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^0.9.2","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.16-608-resin-ci-b778de731b261c21d9e537b83221182658fbda44_1537954412833_0.3717161794827071","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.16":{"name":"resin-procbots","version":"3.18.16","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.16","maintainers":[{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"f646c1905f63163bbc50131c469b9bab51248f06","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.16.tgz","fileCount":91,"integrity":"sha512-dRHGcq1q9Tls6ECTe2wIGCt2a3uy4lVK1A6I+70pf+wbZ7wrk/dNRzJnG7JvCXVwjmnWEFeDtOYK3oStQml27Q==","signatures":[{"sig":"MEUCIFqmdwnb14fo3zq3nuTD2y66L3jIJfTH9iOiQ+L0cQgMAiEAzxAwBi8MdqlSnopX/D/rRia+fiKPgD+sbv9JzROXeuc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":901650,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbq1pVCRA9TVsSAnZWagAAcxkQAJujj525NJymZkmktsLf\n4Tp5Ae7+O4LjzaMs1NWsYQtWNJaAc7bQfz19exJi9Zjfwnbp2sXV2F2G/AE+\nTvMHx2uQSIAcWJQj6LoyKfHl3knEeOJy+LU9PEiqFEadVQqeih9K3iTUOpu9\n9El7o+y3YIx3rAr4eA9kYT0LtwvUSkmLmhgh/QZEfGofPtRhI1KygC/7b1Fk\nXy4+Y/ob8ZPepI2nnzGgUHpKNnA7rPtN48om0P5h1gNGnPDvRbAmmdeNrTXA\nK6u3bZ0JcsYdjoBa4X52pC6FbX7N1xF+8IjERx16TkrvQrcymanN3cUQRlC1\ndA17usf0vK2Mbe7/o2x5WX8lFswwA6Q1PpDw7YkUMO6+JbutpEhg+njpoEdY\nfTToZuTm6JQA3pfk+dAmJMrl42p4MxQm/KRrxNyRciQPIfp1PPgLvR2s6UIa\nrJm5n08YXWw7uJfr+SqrNJVfgYotK1aVm7ppdbVhZ230kiJsT+3DaR51iLnU\nfU6+MF6AlxCtB6EryV3TyhP4TQS+KUhcIcJyF1lExIogBSPU0sANszVEgH3l\nxu/RYDRW+SDwUU4VM4b+/Ci31x0CFa/HqaJRvdNIDf6sjev8acWfuwPEGz3I\nj50e/JVkSyDQgLuWpJx+pxx7zmH1PaV9SHjY5430IxZRjOz5vtwMDY7UHHUx\n+Iap\r\n=6Omx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"15100f816907ba3a454306b29bc12bbd998b0a62","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"resin.io","email":"accounts@resin.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^0.9.2","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.16_1537956436280_0.2837376558908875","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.16-606-remove-summary-keywords-118392dd58eb7320016c0f2433d08c88ff250f80":{"name":"resin-procbots","version":"3.18.16-606-remove-summary-keywords-118392dd58eb7320016c0f2433d08c88ff250f80","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.16-606-remove-summary-keywords-118392dd58eb7320016c0f2433d08c88ff250f80","maintainers":[{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"25e2a97e6718b99f4d748a64fceb3e381cd55b57","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.16-606-remove-summary-keywords-118392dd58eb7320016c0f2433d08c88ff250f80.tgz","fileCount":91,"integrity":"sha512-zrXovnSPJcEzF94+boSFqzIt1DFR0QVqJk9kkovJvjDc/xaEOimjbqia+3hgBleHdQIWPtYQG7kZD4ekUa8ECA==","signatures":[{"sig":"MEYCIQDOzpCyVMW7dLpdJ0M+5qcnhBftz/dynopY0CdqruuylgIhAJ9CjXPod7syzgGVkCxaJ0DPtnCuyzH+1xpkNtU+SRrw","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":901633,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbq1yNCRA9TVsSAnZWagAAXn4P/3+GJXegR4Rh1gqljqMd\nK0c7GjhvfVZvU7YG+GlzCd13uibfH7wpnW6Q5PB4KmSWzNPcGHdhf5OX5iHj\ni7lbeDB8cMBJ6rLamllwnMXygbmEOh/8uBTPgulIf6O2yBPve3HmJUAsiG4d\neQRJsEhbVrMdiOnvx5cAhkpeThUKiBVq3Xg4r4SfyPnI6ROZHpHttWMgjmAf\nVPY3PSJ4lOFm+7tDOj6grFGq4vrl3FmciybJ2Oa5IFAXY5da5p6xZNR7uKmZ\nJDvy+uJwoIzFuLHr6EGa9sKqrKUUw3wOCv8iBZjHdN2P6iYR/yad096j5XIj\nj7ZbwK6j6mOavWGe2a5kDdwqCHrJ1uht+/m/r658yM86aYVq6bgYE3q3dYdV\nSmVjhq8E/ThpcSqE/uwO7JNso5ZUmV75KzWjEBguYNWFU2FG3mN6+CHsltpQ\nYHWcFVHRSkD5cBODGESds0XeJFxMlRDJkjsIDyHtKGG7xFsrJyCaw8YqyVvd\nQ7CIffYw8Feh5V8EVuiU27AoKqaIEX5p4VituPhR67cnHfq6wzns9vFat8JQ\nKECUqnoisnxhDvRe/KfhCp2y3P2lg12yejRt9oYSNZOyUF7lcIdPj1p9c181\nsPiv9RDMjpMDKMI2dJUsdAJU+NpTGUDxwkEnANtnzSUHWgFbVSrDEmdX6I/z\nn9lk\r\n=lNpd\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"118392dd58eb7320016c0f2433d08c88ff250f80","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"resin.io","email":"accounts@resin.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^0.9.2","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.16-606-remove-summary-keywords-118392dd58eb7320016c0f2433d08c88ff250f80_1537957004619_0.8286970152376585","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.17-606-remove-summary-keywords-fe9a85a79334b60d3767be8d56fee8337a25f2df":{"name":"resin-procbots","version":"3.18.17-606-remove-summary-keywords-fe9a85a79334b60d3767be8d56fee8337a25f2df","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.17-606-remove-summary-keywords-fe9a85a79334b60d3767be8d56fee8337a25f2df","maintainers":[{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"25accb7cf4fdf9cb92888872d146ce0a95f404ed","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.17-606-remove-summary-keywords-fe9a85a79334b60d3767be8d56fee8337a25f2df.tgz","fileCount":91,"integrity":"sha512-P4pcYabJY5YLmNOL0v2xUrXZrOmykZ2feWOJ4ri7g4FQhNhVFqLnquQl3M/vNiTlUjRfBbmUi/fguPNUe6fsvA==","signatures":[{"sig":"MEQCICSN+ApKEzDCZpCAo8m12/3R0U9hhJ4J7qSdLtZuF0SbAiAc55d+KePfXSPFe60lHS+Pj3mBy1iYEqPpdeto2TcaRw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":901660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbq17QCRA9TVsSAnZWagAAeNgP/jX0KndKxpaaF4BQwLJ8\nBvLWkmf2zS3pQ1cfDNLHDRQ4RbnZAsaDZzSK5z/NWQVT80BNpS+2yWc3INrb\nITZyrpwmb/I1Fvblg1qOCAA5ttTosx2WfVlGyCH8kgLN3wETqGDFNgiH10eX\nyoKaAnfBhhI7XD7sn4yIvmKM7CmxKOXad/1LFQ2EfKNfVNh/A3g0MaXtipWd\nZUOCRnUzdQ+R5NSlaPlSM/ag9pYuF6VyOc01LDLpxZc7eG+G31/BFMwKvkes\nCB/U63hIMKG1Pj9l2uh9/tegIRVyvSj5FlKEUeSkoaPrqKYO+QNXJ/ughWkV\nMWhFrGlISpkItXN3ESMEK8JHWBKj+8rGiAsMlYtDcAbzDy7eZR5EAfks/n6v\nubkyjGsk+jHvxqKbCsPX3diumpVGFMYxMdvFBZCnTYgRUsXryjRI/TtOmJl1\n2V+k3nl1MZoCKfKB47yf31dyu9zxGnkmFpV/ZlJCtaqQUYifbpTvfeIQWXGi\nlEVUzWiJLMAXBWeqpGazeE7h4SzdPRKhGU5wKXOkbuboopeL72oayCAXCCo2\nyd8z1OFdKZ2G19b0F1fjJ53eGyE9FbHThY+8Xb2be4TgoL08x4/fL10dwOoe\nFDC45cRImwy1DQa9miINYf26JXKm76jrxY31ZGYp/THmRGasdtPoAtSuA1I0\n1ABW\r\n=0wOX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"fe9a85a79334b60d3767be8d56fee8337a25f2df","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"resin.io","email":"accounts@resin.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^0.9.2","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.17-606-remove-summary-keywords-fe9a85a79334b60d3767be8d56fee8337a25f2df_1537957583995_0.8370653550206926","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.17":{"name":"resin-procbots","version":"3.18.17","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.17","maintainers":[{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"ccd4f2742d5cfa27bacb054836e87d70f32f4fa0","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.17.tgz","fileCount":91,"integrity":"sha512-Eqr9v0GlQ6IjmiLYZwu33hthaK3UaMDUxF8/F2jLtciuWc0ORlFP6W3aUK/18rWC3soe+5Cwct8Bk/iwHAPz9A==","signatures":[{"sig":"MEUCIQCevZe9FoaMYDPqFg0Uw1VzjHUcUJoyi1CXLxZjSUHLNAIgYDlr6hl1GJmyLS+BF6Av1ADebg7BpsX/94cvU7htzvI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":901591,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbq2DDCRA9TVsSAnZWagAAbbgP/0Ldt80qrlfJaYoV7fWo\nEGLjPiQjUEv5YwE04cAgIRKwD7812pFmeePv08uIlft3FGAxRrucLrayTsqc\nxd0K7/8nM0sRYkbN87shdZ/UVhgXD9suDmhyejasIdf5poe8GysGEEhcmwLe\nKOjM2CcAq42jdlyqr0nbOrh7A+0yuOgKq5BYRgFtAnGHbH0Fx+weAzYfG4BS\nlgDC98GMSV7wmlOo5Lvc/3YIsL4ibRq0VRhV0iIeAtMNUiGBLmDNQkVQ7Et2\n17BVDrzOBSPjzkTgya8GxiRMAFzuVgT+f/khlbreDSu9ZWRPgFHwzwSDT8dE\ntgXYTLBs3TG2Y+kDn+wDRc9uWKYYYocBQTUgHYxQ7496I4+PS3Y9VDzQYE0b\ntMTY8pFdQr/Xsag5uCb8gscqaSLWJm50LT6GigaBER6BNB2oyJrIDGT7ea9I\nArZan1pZt/uqxAPbdt808mjxJgryl4Ua9OHWbS2KqdkSVHsRumXX2hmNiOBr\nsWjKyOEIpU9zIrh91iMspKiRByzLGFxygRwSZAKi5LGAxCIAClLN5mjVMIw2\n4G5EHgSJhBENvEixR6JDPTZQsnHj31hNtizTomOnkGhXPvy2oqIvaK4RERer\nUdKRJra8VnhIn+lHc2H+UGdXBqWC2dHeVtZA6OOP8OGR9AaNBYsynx2Ge8hY\ngYL5\r\n=vRE+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"3fe07f52f886cd59902c0f0434aad6dcc00828b7","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"resin.io","email":"accounts@resin.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^0.9.2","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.17_1537958083263_0.5024163018908172","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.18-585-new-line-parsing-d134c5647bed5873ed45928f5efcc5a435991662":{"name":"resin-procbots","version":"3.18.18-585-new-line-parsing-d134c5647bed5873ed45928f5efcc5a435991662","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.18-585-new-line-parsing-d134c5647bed5873ed45928f5efcc5a435991662","maintainers":[{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"a7b61b7517836cb852c0b50274be9710ea07d273","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.18-585-new-line-parsing-d134c5647bed5873ed45928f5efcc5a435991662.tgz","fileCount":91,"integrity":"sha512-9tW1nIO7dxRFdhyOhAKNI6CaH5Zh/IOjzz3VJI/SgAulVdsNQxuw6eD6jBioFNRrtEzqZSPezJJwb26L7nu0Mw==","signatures":[{"sig":"MEYCIQCFv2yTV4ShfMqMJWywViB+19AK6v5nmEdL+6Gv0QYWwgIhAJVY/+mV7ksNyYPjO+uYDDKd9qdh+bORMDHL39X/wAdO","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":901913,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbq2J5CRA9TVsSAnZWagAABxUP/1zc/RRzKYO9ly4M3f1l\nKBtmtfLcNhPY2s70s6XXk+BcnuJcBQI2AV/daRIlDcVvMGXp6X7esJcpWNzb\nQ0v/OWIeKP8kVzoKJk/yaSZffTP4WpGRvL/U52ykBBx28MQyl6OJ5aeLTHXC\n2DEX1GUcOEFZTcm4KyNTqnUEO6BYETvItDVvVv4RhRyMAi3X1ynn0JD+m7Wi\nJxUGqzJ5ImQHGIgf7yhLMZKbuLfSCOQUwr6MnQ80uUgp2QftC3/KsNRv2sLq\nq1dmzQEETGHEfvDHoKY5j2faj/NLwieW0ZnCFMqW+GHcrqYDA/r4o5Ckdt3D\nuKp4QVsHmwPN8WRYX4ovPKsnw6PTrQBENMON/O1dGgGE3A9NJ9OI+GuFlmEx\nnhU+HiM0ABpuUr74Mmz0bKa5twvdjd3DHpmtp8/0xy5DpnOMeH8iIDu0t3Ru\n5lNPeW8uwrU9XVE//YRcwM25b5fGr4Me4oMfnRqfKfT9tp8neKfu4GQagIVp\nqXeVMvbyR95iXDLwKCE7CEMjP5Qn+cgUh280kLWyelO+Qf2qvD6MKvNF8aSs\nFFTUXnDxLRZhm9gzHAeIPG6cy1QpyJLFxlDGLQi/QsWoJBIVnCMk3UZCvsTM\noR9LOJEpPcwbrL4KKsFCMgLuR+4FRWWuvpXTNIcAe11fwlhfvj7tbfeYVQYr\nKql5\r\n=QZfz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"d134c5647bed5873ed45928f5efcc5a435991662","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"resin.io","email":"accounts@resin.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^0.9.2","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.18-585-new-line-parsing-d134c5647bed5873ed45928f5efcc5a435991662_1537958520796_0.7877909472309044","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.18-598-document-chatops-576481360d328172a93775a56dcc46a55b5f36d2":{"name":"resin-procbots","version":"3.18.18-598-document-chatops-576481360d328172a93775a56dcc46a55b5f36d2","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.18-598-document-chatops-576481360d328172a93775a56dcc46a55b5f36d2","maintainers":[{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"c7428e80cdc721ec0f703451d2a9769289ae8e4a","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.18-598-document-chatops-576481360d328172a93775a56dcc46a55b5f36d2.tgz","fileCount":91,"integrity":"sha512-j0FwRAFJu7rqvnxtpSMY0shxcBvRg8xehM5b4iTreaKnFC8fIPput8uZIxM8yLM+wtiPqW7XtcVgewlSuBFZGA==","signatures":[{"sig":"MEYCIQCroILK4DSyCII3skyCpVnwMr2TWwmR+EymaKv/1kxTfAIhAOmzHRicEaTvTITbvtzPjEW7EvuQ91CytopwrQTYGSWO","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":903018,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbq2OYCRA9TVsSAnZWagAAqsoP/0nJkWNmSGPEsgh+6GOB\nCeb4e9exT/T5naQ1Hk9c7ZREukA9QR2+bDVn1WQEIGkDRD4A5hhPIM3MOPUN\niRA6msgYykfBZXyCL1Q6KE+8wFlK7hxcSvhaSMqLvYaAFcU5hZZNX1w3KZUZ\n4EmF5xTOnpUiXLmG0NGnZUq0nHwqDOkY2hEdehSW6f3lMFhz5vJ5EwJJJ5Ju\neAqrq6qSrsrCTlydwi1psw5EM6sunfK3ye9qSbZUPWYCGzQu01H8SI3lvfQW\n9+TX67mnJVvzSrtnc9chhH0y5uVY6gynNcKW8sJBZs5jUqhw+ulLwo7cs6Q1\nzuasWKEL+65lW9tJcqImgP6gs5sCLmoBwNccM1hKGnT/hOZiMixDCUHhUU3s\n9ruqQJIiY0o55/I9RCwTwXRzLLZ9idQ2J/prsCyycbjboPXbFEijXfMexi2F\nhR/1VQy8PNHGFBmGzpLlUEsGPioWumYyoYwrb5pteWE8X9TTaH8u/EU/hdZY\nAQWZWeMzNvruC03NxLbZZVlXpWlIRSOyLF8/TD2wi+vNGJtMqvzpyLizo9KL\nDGloRqafINbiZBC+O+ytG7elFxcOiXaiG1iGG/whVnJNd/3A0i/IjHxqSuTz\n4cxP1kv3EkDmO9eSL7mssHYWtJELKkZkZBoDRDe9lVWisWiVXahBUGFOEpqV\nGhAc\r\n=3j79\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"576481360d328172a93775a56dcc46a55b5f36d2","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"resin.io","email":"accounts@resin.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^0.9.2","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.18-598-document-chatops-576481360d328172a93775a56dcc46a55b5f36d2_1537958807211_0.37162232113051785","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.18":{"name":"resin-procbots","version":"3.18.18","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.18","maintainers":[{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"81251f9fd9c15a4b09d716901459528735c99b92","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.18.tgz","fileCount":91,"integrity":"sha512-rh5K09qeTJfxhb3qsPUejLLlivs/hHXi5j3SQBX0OyQumREreVIJaykLqOBCNUX86ejmYF8SlOVHSQQRtjsJ0g==","signatures":[{"sig":"MEQCIHcB8kgOcR0q8a6Utiw8GRy03OgEQwSjldhHiD+YSQnZAiAJTICBuuoUWVncxKPvP8LU3MG+5By6oM5gwyZbTMUq4g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":901851,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbq2R4CRA9TVsSAnZWagAAI4QP/0dtjzamD+R+FnSWf/Bz\n58kdXOu9XCKd0XmUuQmYGuiyIctwJDiHnSQFKeTnMR4CfXiYxihOMaFSORCA\noTE2LU0Rm6au2h5J7YlJqNseTPo/ufwXMQOsYThsCjp049THOitxEVwyPCpi\n6v4gMEzd3ortVB/4ooUPIYBboNsDn5zkNomsAM00wLY6YSn4W2c0zKQQz9H0\nitNS9PPpf/O2DpkNky2w4x4wWPpNZLMg7yYzmvYUbbMEa9YV8/k07EBbl4DG\n4VCF/hSTjS1ZpfS7hY5kVrfvoZqIoGGOUEsROLE7U8WOthNuf7a2vEVBEEJg\nWqEEuHXOwgXdll6KUh3OWqgHe49y87Srtpawe+pIVZZTuScUCPo3Hhbc9TBR\nOFUsE9BRSGWVaA5luuMYCpaCLaCWpjV+Gh667QLHPhW5GKmZlaCMWjEgOH6s\nDB3R5T78RI4BqosJoZHikamDn16hqjnsViHXv9NX8vR7en3kSt9W7CBXj/jU\nguffv2leN6NTIt6frhPo50dOp1JCG+aLL/taPiOZxk3Tsy2AEBG6f9rHjk+I\nslH4QwmGNJE32XTZ6gxeY7Lle4q1qeYVtWMdbIDVP/o7EQyqFmMkqA5RfIlC\nAuAQnrPpCbSolZCUBn+wtwPMDy+6Bpj8C/YTBo1XGUrfvTMXlYEoLhbFHBna\nKqZS\r\n=7aFN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"6f8a8bc22fb23fa8167b0e35a79b9e8ef6030350","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"resin.io","email":"accounts@resin.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^0.9.2","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.18_1537959031694_0.4596889008345648","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.19-598-document-chatops-3cee26d44007e43b7db87ea3253ad1a28fede6f1":{"name":"resin-procbots","version":"3.18.19-598-document-chatops-3cee26d44007e43b7db87ea3253ad1a28fede6f1","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.19-598-document-chatops-3cee26d44007e43b7db87ea3253ad1a28fede6f1","maintainers":[{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"d7d153f4d776d29bbebd06260873464fc6092c16","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.19-598-document-chatops-3cee26d44007e43b7db87ea3253ad1a28fede6f1.tgz","fileCount":91,"integrity":"sha512-sg6uAUpLiUdT7RAcsWSFjayjOUnSnX7Xrj54PmtT+1p5oeTIA9VQhgIPFoj91mbZzw0CIeL8L+ZrHQUOSv8p4Q==","signatures":[{"sig":"MEYCIQDXQejWnauYqfT2d3qlXLg0lLWZtQVO6e6wvXhvLFsA+wIhAJRF6FWhmsrxmi7mqOKpJrylRT6HLUFb7UmMCPw8FNzW","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":903278,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbq2ZBCRA9TVsSAnZWagAAg08P/jT5Jfod14464Ex/froO\n1rYbDLOQseCjoG3iVFYU/pSdgLy/sVcuG4GxUE1AAKQM0b3GH6QBqz6VpHp+\nmBgxa+zUPqOoRcZsAmd8x+D2rmGl9F22hRpCjT1ykQKZaFYHSEW6R2HtCoLs\nTyRsKGj5HdBs9OFkeAoVEFBhyN2QicZnpz/mm70k9TdVFrqdClCQpOiI4sJr\nEes/v+9igCeyp46e/9a9C4/OHsbu4Jm3SKA/m6/BkuzjfMjigfVuanINssZ1\nSur5YZEZcTj293Zejt3wLxbcY1Fjh/ncRsCuGY/y35rmho/oxhw5ct/Enm5A\nAk+RD/VNQ4sbqvglRwH7WQI2mAiF2issVAGJU1UTb0rTGQf28oRjoOnlyNLn\ngklJm/EL3zWdQG+Z8LBer5weV47uV6UVGiViaKQkVrVRCQycAZBUOaAEMbaO\nE2ZNcW68kgCzzZ3Hc1UcmdqXqfK8Tn7tkeBcx3otwglNBxFOcY5V+kqLMUE8\n+7jPfsua4Dck+n4GjpTD3Rn8nthbjFTJkrIChdUhkDFZGjAC4luWs8PcPBBT\noRRFsqz1h5s8NgijqMCfzanZwRHcnCBhXDbB0pFT8wT1TWLn1s2uFa8qNwWC\n/Tfa7NF585YVyGXqcFFQkmpCBkL3ZILkmfUh6UFuh+2Y3Cmnr6+QYJOyETXE\nbJ4I\r\n=lSXS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"3cee26d44007e43b7db87ea3253ad1a28fede6f1","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"resin.io","email":"accounts@resin.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^0.9.2","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.19-598-document-chatops-3cee26d44007e43b7db87ea3253ad1a28fede6f1_1537959488672_0.6959255461994303","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.19":{"name":"resin-procbots","version":"3.18.19","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.19","maintainers":[{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"77bcac4790d812e5918209f5914b4777e0b7c07a","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.19.tgz","fileCount":91,"integrity":"sha512-h2XUvHQ47QOzZ+KdCsN5ZCAUF5RmB7k8MXXRKFCJn6tKwPi2OI1N7mSLqtuvKMbfBXjxjrZnSax4vf7dTI1YPg==","signatures":[{"sig":"MEYCIQD5DzpLWLlGw56ixGwA4PRsREVJhiArSrP/X0supbGdXQIhANmMgcj+0iqPj/3XuT0EQkQklAgzODhnQr/DV/qfL7AY","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":903216,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbq2dyCRA9TVsSAnZWagAA+eQP/3lYKbWBDrFThztGTJYG\nkBeRDGR5GDTHBHsRxHQkeSbu0PocW8tzfLkuXjfAxUhRU1AtNZ8tM9eCu0Bu\nHT3GMVNlPG9VeEqHwuGuyVrmJQsyZ3XIXZyzFrra3mRtrkFkw3s96d4rxjJw\npMOay4rTA2Jrde0wvdJdbWbzjmFhxak/OYpwBEk5S3qwHJKvM6piyNRJktUx\netfO457pI+Dsdm0COg3hMlU6F0JrwGuFS3iSGKUTIB60zBKtvxxK/9IZ/5rQ\nmq5p6IgM08qkmRPHmL868gFYForN7L4RDyG/Q7fYpaHkunoAHH+z2efdq8TV\n2DkngdDm9o5htxueJ5JQ3+pciTDi/fdM9kKTEXZeegOGqnQRhRFRehRsmZJm\nO739FqcrM1qdi1KVzK54+LLEwtuxpTNFB0f8n3dbwqwGNSObeIal8vcJhfJa\nRaI7bWQuEQxlCWUhulc7wHd/wIS0Tfz/TkMy2rG3fTVkokC+Tk7WxXxHmtjf\nQp29SfFVQZWVFaUNvF9gNLtt5hkQv9Lpt6QMJ7Azhu8xKewqvor8VJ4Y7Jc3\na/1GKphBnGwAratUk6JmIm6CQC/p67TcXbz4dp4YjPis0rFQlN6USf8v390a\nlJc1HAhXE7xH9OhpCvoeRQRr/xz6t7OPg+85LAEdTbMHgGzwpQHUJP5KxA8B\n1MJf\r\n=fpEF\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"5dc62d195c39fc35247f4e514e6ff5e88af9b0dd","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"resin.io","email":"accounts@resin.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^0.9.2","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.19_1537959793762_0.9211306332165596","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.20-610-off-board-sqweelygig-7f4702a012c88db81600e41b73beb5913aabaa1a":{"name":"resin-procbots","version":"3.18.20-610-off-board-sqweelygig-7f4702a012c88db81600e41b73beb5913aabaa1a","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.20-610-off-board-sqweelygig-7f4702a012c88db81600e41b73beb5913aabaa1a","maintainers":[{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"2bf19198eced6edb77dd2a5683f6005237c162e5","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.20-610-off-board-sqweelygig-7f4702a012c88db81600e41b73beb5913aabaa1a.tgz","fileCount":91,"integrity":"sha512-/G7Frls82mc7uBo9AJyfrI0aKorANV2rRHXUYHWnfVEKH4kIUKFLsQn6+XWRNwe5zqYbqViYRloxkgTEuTAg2g==","signatures":[{"sig":"MEQCICFTb9ho6EhiM4pbzlj/rtZukxnmhOm5UeaKJrinPJzoAiAxqOrzqzj9SSBWaX0i+8DBGLGYAWgOQPjOXk8+V8zSPA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":903144,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbrLUGCRA9TVsSAnZWagAAcAkP/1/z/zzjvMD+vm45bXlF\nMNjIGxuYuU8Iz8PeayHMtPu8kzGa9zSn72RrGfle1zZdgAO+AysUUAmWCwHF\nT3AbG6GZ0h2+enW5DC4Lp+B6YqoTCvArP0XBWVNNUXKqrva0T32MiBsyiE01\nMhyflKJL24656LaIQVFqpSLHYSszymF2aAkpGoLgI569ZEa17unzESbj1J0R\ngelAuwcGZpDRzqIwEt1eOcHBcr1Hfow/3uVnGAUi9dIOkCUihPFAlzTgx4Aj\nF1/9XL590HMuwmjsWcTq/LQmrvGG4c2MnLPVvt0rtaA1g6Lv3i/9Qp3VodvH\nKD9VrSKIcpH+/a93xj9yeaKdDpHAu8021R1HQT4weBeR4qXqW5E97Z2CyhOd\njGV7he1EAJ1321TNvPt4I0x33jyPgdzgiKtsjZ7PJWgD1tGgly9MDc4s/uEf\n3+q1tVr3+tk/uz78wibt9ypYfqZiTXcd/dY8JPAJKJXvdahoQto6JsXn3Bcl\nTUZBCYJPZD4QgS4RNyDP0823kfBqSo9U6Y+LXF6QX2yE6rCYz5/P990ttlM1\n1zPyC19ex2cpjtVfnFmD3pez+GJ27Moc+9lFiwq6Wq737PoiW82+C7465rYT\nqcrbGHx3vnGJeMnIt/R9We49RRCMdjyG8gUm32VhsAeFOgw802ZUgzlQepMw\n07g/\r\n=n0iJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"7f4702a012c88db81600e41b73beb5913aabaa1a","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"resin.io","email":"accounts@resin.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^0.9.2","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.20-610-off-board-sqweelygig-7f4702a012c88db81600e41b73beb5913aabaa1a_1538045189543_0.8219150566933444","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.20":{"name":"resin-procbots","version":"3.18.20","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.20","maintainers":[{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"c942ce8423608928d1a74dc51a9fc76cf0ceadac","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.20.tgz","fileCount":91,"integrity":"sha512-IioerAsbtGGdCDxtmFbGPI55Jv+rbqe2UCCc0LmOgj9j2FF1lOMWd1Ay7F01fhtTUtEO3oiQNRcvKJAXwTl2sg==","signatures":[{"sig":"MEYCIQDqjOPjWE2aWVj3tavBwcmfeTyU6RFbsPfbmU5ohLBCggIhANhOe2AoGJ2FZWl4NGwCBe1Vt6WiqSVpCByRMzNPnItN","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":903078,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbrMoHCRA9TVsSAnZWagAAaEIP/3OsEBEu9omYSzGCIGOh\nlllHR/ROZ0NFsyoGhz/W3VeKI0KRbd3ouQbEkych7BXPHg4EjxLLpfvkmniC\n33KSS+GOuU6TjJntOjnWtxJVFxpMOTBhxXBqnXk+nWTZ5bnfbkjiGpE2sGa0\n9wts3lGd9jLUh4smfrwyKfASaKfHFG8R52UL9lH82V71Ekq9JkSQ6KTTR3mb\nA4lp4dqV/fjk3cKMf6Ri5999LOSagH7J0/TetOFevfnmj6v9JO5AA7MOEuuL\nNMQEnPXhfksYcq5LOCPnRVjuXqilbSBNnb5DqTxrmNc5yFP23KBiichej460\nl0RfAL16T9uRa2v7hjome22nEa2KIhvWyM3adGrDcxzlAW497hMzz87IRNfQ\nxbGQ6qFyNL/GCXhZZYOj27Wn39KDIf6dGAQWMerqfg0RemroBNF5jyt+pVjw\nqS92LvBj9NWQD21gvAMwH+adqxploAcGoXAZVUS2G/DhN+IDmNWM843WPsTF\napDVotX9X4fZ+odQqQ7Z0NCB1LCGxReyTCWoV3ZvLMKSFjGo+LeC5XDB9r6x\nJ5pyoH7JLEJLwKyHdg6GtK8D5BSWLSOCezUijFoi3o5oOP8cs2tT8KUUga8Z\nnI8QnoCEoFQdMoAK9G2ZLbBkmyoDDP7V6+ziRJqYfe2IFB791N8YtpAf5/fM\n9Qh2\r\n=a+jD\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"50bd2ae040fedc90161fc6e7747ca25a371c5194","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"resin.io","email":"accounts@resin.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^0.9.2","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.20_1538050566062_0.5659463214435649","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.21-pdcastro-resin-semver-1.4.0-f3c456aa0bc06fa4a6ab9e2bf5af0b3ece927d32":{"name":"resin-procbots","version":"3.18.21-pdcastro-resin-semver-1.4.0-f3c456aa0bc06fa4a6ab9e2bf5af0b3ece927d32","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.21-pdcastro-resin-semver-1.4.0-f3c456aa0bc06fa4a6ab9e2bf5af0b3ece927d32","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"65fc80ff1b0fae5ad57034c37a1ffd773667152c","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.21-pdcastro-resin-semver-1.4.0-f3c456aa0bc06fa4a6ab9e2bf5af0b3ece927d32.tgz","fileCount":91,"integrity":"sha512-oO4RSfcqnxiKv8/SmyreHW9lrrZxD1G20tzCPsCchkKmTk1aFheGCNnKzlheDPaYQAFCaz5JGqPNfF5o5HZJkQ==","signatures":[{"sig":"MEQCIDxW78i58BH+ZsFYuGTv5p8nShfSZ0OmdVpLpHk1GGvpAiBg8umKdr9GwvcLVp/UGpDTD3SpIkfW9fRA58/p9bUNuw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":903247,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbz0bWCRA9TVsSAnZWagAAWDsP/3rRj91kKNkBH1vdDJ24\nBXeeWSEqOj1xc1uyDB56y5rBEOLlJDrV2Hg2v79fz9lpeqvPOsVKhq2L0DWy\nFmwdRDH8VoAcUtmZCX7aamlHQIyd6rGRU1utnSbxUzHq/OPx8lXZl1OCDZ13\nyhdbBY/fZrefKmQRA+8sfIhCXHiuFQ9Js1Jya1wEFz1V/oKPG/shh/xk78wX\n84LhH3JyKBparNwImd54zll7mt1ZnywWaNSaVra23ka7rV7plv1VuFFp79s5\nciw5elY5iE4vDS3gTt3lQBFio2W62DndPDDAvplS8gpDdtUEwEq+2fxwkSb4\nWhQjwLLivf+WxDxaJ80BTniaDdlsDDs5pSIUZrXVxe/80NvivQG9I8eZ5rLr\n/YRDC2Cfiz9/oe0yqmAkNsBSozWN8cZFsArimmWS66PME0ws+NzPlnZ6JSQG\nDQLo95P9KDHRJK8CMU32ycIW5L+nMJ7phBVF+FULL/KofkArlXR6EHE3CuUY\neI4wr23ggTEXe28NvhM2vgJGfKpwzY9Q67i3/9Y7MHaeyBoQVrGbodkjO1ix\noALSDP4C77ldUcvl6HVsCC8f7QUlWsLE43fet4o2fz0De9PhMN0pL2eH4QME\nI9fJd823sGw8+JH+SPbur4EvNJGLtenHKGF7xBeCMPORiBE1+BODVL5/96Lm\nwg4P\r\n=K9T5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"f3c456aa0bc06fa4a6ab9e2bf5af0b3ece927d32","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.21-pdcastro-resin-semver-1.4.0-f3c456aa0bc06fa4a6ab9e2bf5af0b3ece927d32_1540310736280_0.9949620057988469","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.19.0-forums-namechange-3e6cee20eb0bf6fda90b34a69da42a7ac00fa167":{"name":"resin-procbots","version":"3.19.0-forums-namechange-3e6cee20eb0bf6fda90b34a69da42a7ac00fa167","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.19.0-forums-namechange-3e6cee20eb0bf6fda90b34a69da42a7ac00fa167","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"8994f79daffabc97ae9e9d00cc8ab1ee03ec7bc7","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.19.0-forums-namechange-3e6cee20eb0bf6fda90b34a69da42a7ac00fa167.tgz","fileCount":91,"integrity":"sha512-y/gZistOO9wZ3A47BR/U+d1Kp52JXy0JtK5Id55n9PvrbkcCl5BLgXc8bNNyNBylxDd1pXhIxtkKPPpXMJZ5iQ==","signatures":[{"sig":"MEUCIQCX9NbUbBbJnXxyyVz217Y9uAYxVU7IrdHp5XxPJikAeAIgG80Jhw2sU9bNpmUFGFV/vuhcIHaA6U+rKvAGOBQEoA0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":903242,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0KGbCRA9TVsSAnZWagAANfgQAIspH5ejRxT5Qq0aqQQj\nlkgyTt5BxG7q+aicV9IkDkNmL1yieTOHHNecJjA9VHoPKrxCN9QZT/CmOKlW\nWsJNqPqnltKLOdXfyZrFB/+M2pFDIZnB8auG+lf+V5hBCVwocMqjhw9UK5CF\nhwYOn+W/si6PfpV2KHKQJaH1DlmVqnVV7loISyQucTSZlRUsCX7AC9gBji3a\nW19kv0/hX3zGSjPd0CdYsbAKS5/iuc/iBl6OwtYnhtB9Xd2k5ZTakDE5YufS\nXrBBzslrCPO54jrIjV+tl+8lwu6ZRmU5IWGRmVq74Rkld1XcY9fZTvy46Nrs\npQA3jIYpTbDQDar02la95PyPFoA94a1kc3zIKz+HDVxPCCHLdygBaimugWtv\ns/qTC4ACkAANVYIIdjufqLeASLr0kIeOv1I0nfdvrO7ZWI8To88DS9fmLZyD\nFEtvxIqVFWnIJAO21qu3vSAGoKJaRceRffJ/ttkpKVDTMJipkT+XY4HSEWZc\nWkgj8KpOWALnSrQE+AtQGTI9mXMrqU6YB48TvocWYBLXEbb7H2OcAIcxA4C0\n6axXtfiLGlvGDOl7ZTXdoWYhDXFEwqkcRmQXN37tD4duhj2SddIkHQMEVyFX\nd17JllNTOWyY3HHcRpLmEsMIX/QhYht2qqbi5dvnNuOPTBrbkPJUT06VXdbp\nBVTg\r\n=m6j/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"3e6cee20eb0bf6fda90b34a69da42a7ac00fa167","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^0.9.2","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.19.0-forums-namechange-3e6cee20eb0bf6fda90b34a69da42a7ac00fa167_1540399514675_0.6263675142842111","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.21-rename-baseUrl-b1696191dc2453a71717c03e56280e5b6cb2b7d9":{"name":"resin-procbots","version":"3.18.21-rename-baseUrl-b1696191dc2453a71717c03e56280e5b6cb2b7d9","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.21-rename-baseUrl-b1696191dc2453a71717c03e56280e5b6cb2b7d9","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"00928907b87a123312b8ca9997c7f88f13db02f0","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.21-rename-baseUrl-b1696191dc2453a71717c03e56280e5b6cb2b7d9.tgz","fileCount":91,"integrity":"sha512-HLuiY/tvEnrPFf5nymwFyR7drarem4yhDYeODtjCjLbnWExV+hk6QZH037Zkesl1TFP0rg4fYDx9PXqacN0zxw==","signatures":[{"sig":"MEQCID8yLeBN/ESwdkEv0KqofI3bX5afpgLLKq/Rp6HfZ6STAiBqA5ADmH2eHyBwP3aO7REXJUs30dWmYMYbzKY6vV7XcQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":903277,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0Kq5CRA9TVsSAnZWagAAkusP/RO5ESN9qZ+tBamTU2ql\nMpj2DYMyOVXDm7YjF1mjGDR4Fun5z7gOSjhx9I66cypenTWhwrz4ljPNQHF5\nu2FluYG+v+kqGtRHp69nwo13mnB9mVGwYAbb5Y8bffvvcgm6myHORMCMHjn8\ntrZVbP26H+bEzfPHNlSxRzuECTj5jn6DGSZaCTYaxq/HVrjw3WMN8z83HEhc\nmSbsOGLojUrO1eZFXsCW48JB7iZJZTQniLYqq0U1rvt8OitMUEb8r4rP3+ye\nqxgS38IHpTu0p0OjlNZ6uQdwG7J08k/niEP0211N4+VBPAq6ypKUHtPtbAZc\nfY3J94J6ucHWRRsyOyFc6KhxIMwJe+/jIjLmYqldJvaioqmlIi9jOkh4xdQa\nGUIFUejKQm8nYtmRWynLo56gpE2RQ++Uz+1hWj+MT3hJ37dHhHNRdJCBM6AW\nleA68r7Ifplgq5ejn5LSQBv8hd/j034N2GoVV/FuvYtODf8YrEh1DJQvLjZo\nAaHJZbitscQ3MiZNMGL3nHq7rcjw+I3zJuCuhB3no9QADOD8m+uvcaOdtdgh\nyIGIkcwGx8vSncxCz/BrFo+Z3clE35YD8aHam2BD+doH6w0Ca3baWcY66d8y\nBpvSEyP+YRvW1zciY/9zddNsSUOtnhFStY3urTZCwJZPHRwRkqyztO2y2EtJ\nK5FM\r\n=xt2G\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"b1696191dc2453a71717c03e56280e5b6cb2b7d9","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^0.9.2","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.21-rename-baseUrl-b1696191dc2453a71717c03e56280e5b6cb2b7d9_1540401848761_0.37626883102772535","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.21-rename-baseUrl-91e4c100e3d8a0c9be23a0e2932c5b083340cadc":{"name":"resin-procbots","version":"3.18.21-rename-baseUrl-91e4c100e3d8a0c9be23a0e2932c5b083340cadc","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.21-rename-baseUrl-91e4c100e3d8a0c9be23a0e2932c5b083340cadc","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"533b039711496b6372676782bcd1ad887063ab39","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.21-rename-baseUrl-91e4c100e3d8a0c9be23a0e2932c5b083340cadc.tgz","fileCount":92,"integrity":"sha512-bZl0+wNpeNASNq2lKISpSnW83Bfet6M6aeqtKLTXOFtNeCitbv3SSrgdM4qaAxrjO+NaLB4l8JsAiUFbLbEU5g==","signatures":[{"sig":"MEUCIBW8SUEE3Ukk1Jb1PJTHfXz6MipCci7yiVxrLZh9Q2fwAiEAidjrsQjPwIa5q1fw6NJVEjGucmMtWo5Z9D2KNFERxhw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":903464,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0K3ZCRA9TVsSAnZWagAAa70P/j4oy7C3UkJsUiSpQJa2\nhULQswrysw0PZyH3wTwzYQwpA10y5G2UznMJVhk2JXMei6v4gpbiFGZi8fo5\ndrj7w8ZAbXAW5EAXNrURrPc9PpIhc9wHSZvGn7+0oqc9wbiVsDmwSvB0YZX9\n0sQiYtd3p7UvnH49wdhwl40t+RTzgID5WiFjJ46nvFs0nNAelwuVaWS+R2yD\ngwxHlrNEORCGaa9Ado7fsiO2qrRS2mT47/Nl6eLncTZmxY2SD6+5xUJzM8Ys\nevMLImgh2wOmLvnCjl8/sJ99pwX3tRk/uK2w/GSKEi6GA9iWTWvesiNdzpZk\nhhR6J/+hWLa6yTOz49F0lCyainNYB87hnWGsjCBfmAx0AYwtt/EB+Vxee5Yn\ngJ52qW4JPgDdvi5uxDLgVolYrk4q7arXwdMvWkSytZuke7Xad6v7xPwBRUR/\nLaHruiJ+PWAwq7V7x3K7JnF8U2fL3SBaDOAQeFE6YMmrygaUN51sOTJcSfsp\nXfDO8dK0lL8jzo8381UmYUCvr3IwfgttbyRKYOUSfZF1nA85h0IUR6d1cnqO\nZGnYxKgogAGt+3JbeL4RTEsaqQjuMD1hYgs5o7drRMhZzLJpepvDiDRtjro9\nph/QLYgiNGTVGN0rYNp/gCz3QWF6NUIARJ1ec33b9kURQJwe+vXS2x0gAXsf\ntg5S\r\n=iIDj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"91e4c100e3d8a0c9be23a0e2932c5b083340cadc","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^0.9.2","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.21-rename-baseUrl-91e4c100e3d8a0c9be23a0e2932c5b083340cadc_1540402648441_0.584862135018313","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.21":{"name":"resin-procbots","version":"3.18.21","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.21","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"6911f23cfa95d154c473f7c0bf1820d07ca272f7","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.21.tgz","fileCount":92,"integrity":"sha512-l8Uhcb+RKyaGeg5MGcLs1Dq3fB5LrUrXsIqj/j62+6i209Sz18544uaXapuZae2G3z1Stgn6a3hNtBbaspifHw==","signatures":[{"sig":"MEUCIQCoRNbt9uAns3f/WI3OZME1Dt+UIAOI2MkVDz5tHrZLBwIgAsBOV5pXiVQ9x0fJabCGNqYpEId25JhwYscbd6tNjPc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":903408,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0K++CRA9TVsSAnZWagAALu0P+gL3lctay3U/SKN1r37S\nbuA5f4hw3ObMDcaRVRP+bXS9p62YF9XLa2GRF022FWguSFk3nCFGPML+fcBG\nIfWqwzVcFTzf25xkj2/UglknTft4d1McmvgpbHtzUucF2eLO1krFPqTn4Dne\nKfpLyHpiqXX0key47AU9iUStj33043CzVYzTp6ZJdgZbBEbH2zrJaHPDD9Im\n3N0sJF40vn2QdCwKzImLPBxPw0Y9ze7rU1bLt+PD5WlMj5n/lHxwT5kIO+hw\nFZcfqreXAFnFm0BO9LOFwNfp70WpX10n/7YVkrsfZmVFhyXGBDU9vOzbKGGr\nCLZUd2J6PRlJngH3HnF8UcCrFzSxSL6wfqVQFFWLGPUzLlgKQ+LzGZp0z91Y\navBPFc21GiQrbZPGBiQ2tNhcFjq8VeAuyeBeVXbvHDE5kUPFUuOLSOSamG7z\nWRcDrV2wEmggXF2RliBeSOUf/Yf7ZC3cRoa8wdSkuAvI+EEI8/oSZuOG6DY7\nfvGitMZ/3zT4wSRZuDgoN6IvW5S3NKO44B/1Ha2KzdTvkXllJRwy7Ci52vQr\n5uep0YJdHcPj4jilTna2jiy62UDq97BhlLqf3Qb9TgB5yu51G0d337D2MoRi\nNRxMI46Dos91/10GJfrLhrmSKPG2aPf0b97MZIJLWRg5k1mRXZ+dUBE0wsti\nh2nN\r\n=Bc+E\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"c8f425a4bb16ee2c307795afc7c6401cfae84c07","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^0.9.2","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.21_1540403133793_0.3279026819118662","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.22-pdcastro-resin-semver-1.4.0-cde7e7395331b00f31b6d54ae56404282b9f1698":{"name":"resin-procbots","version":"3.18.22-pdcastro-resin-semver-1.4.0-cde7e7395331b00f31b6d54ae56404282b9f1698","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.22-pdcastro-resin-semver-1.4.0-cde7e7395331b00f31b6d54ae56404282b9f1698","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"10b43f6e70935513cd452b89a80d92ea0b7354b3","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.22-pdcastro-resin-semver-1.4.0-cde7e7395331b00f31b6d54ae56404282b9f1698.tgz","fileCount":92,"integrity":"sha512-LS0Qz8jNVrDYAONh9rwZkdmIB6LQtDRXFVhzPNP/TKI1TeKsemv1jSu0XPSHV/JQ60BGzUWY8XCgastLPktuOQ==","signatures":[{"sig":"MEYCIQDfqg67UdkXhX/R7CxnukEjA79q1bZviyO+U9Eozypf/gIhAIu17Zt/jBqQETgnN71ENh8gPeJwViiDZJMYiapiG5nq","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":903577,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0N1VCRA9TVsSAnZWagAAdfYP/2W6H2X4LTMyrITqAQrL\nYYje4RqCDS3yDsig9CWoqAHq3pB7M7rdoW9jDPIO7AuxM/R04I2aOFNAsITQ\n7uanSlrNwGT29UY3dz1f78lSqa0eLDorQQtZ32sKUwY4izyEhgP/w/DMN/z7\nAJZwjTQkhwI4E5IkoKyTYzUzP5y9Wn9wrvWBggXEcHNOe5PzClh96NnDMkLv\nLEDjfV6mWr1hqq4PPQeGF51+RCVdM+rpD9abuUYGmZPwjeO+Rq++x+m6gTXv\ncVwPQslkthUAIg2ZeeYjUwW/QguMslvCne8fxX1uD0VkRDI/RAxbGJG159B9\niPQ/FcuY+h3dpE5nGYxabkfsmzvSiGNLZOrELoiknQtzUggCSf34OjiSEj3y\ny1Fr+aITSSfIsO5I0kT6WaZeotuVC9lOLzrDhNBGmwuXyDUwT7Nx9Fh+2OoH\neNK/glmwb6s5Jsi7Xv6lreMDygxzrc5gBkoK4yJsknUJklCltgG3ZYQOqGZr\nwTjO4hMnhkIZAeXRaYD9LkXJM1YwN8md4yMqHN0v8oY0yPWciclIPemqw5wC\ngHnCSlZd56vUQZr3o/ypbL8KIZ5vLmV3EpjNZfsyY9ysL0F6qJAudA4McMmn\nSlC/sCJKGmAvlHFWJUq4EIE0tBSTPwT+JO/AyjcDSRRU+cxhZmjDlV2jk/R8\ngHCN\r\n=5HDu\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"cde7e7395331b00f31b6d54ae56404282b9f1698","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.22-pdcastro-resin-semver-1.4.0-cde7e7395331b00f31b6d54ae56404282b9f1698_1540414804574_0.2238360152226484","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.22":{"name":"resin-procbots","version":"3.18.22","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.22","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"4e4e1b1825006a9d24e83e7b4277c9450d554776","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.22.tgz","fileCount":92,"integrity":"sha512-SUPZoGJApVQfyO7haf7Qe2p+KG/AbmmYeGeRV0lbBzmSdoX400mG2hOBSuNIOfq7hrMt5Q1wVCI8/69svc9pgQ==","signatures":[{"sig":"MEUCIQCHTdp/XmH4jOD7Qd0WwiBR2gYGPrOujiDmJkXwUR9FegIgFQESCXNCFWZIjc9NU133N4P4DGY8ERoE2uRwl03/0XU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":903508,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0N7WCRA9TVsSAnZWagAASO4P/igqMfGHWGD/K0IrFtTL\nK6y2As67MjVx9OKbwidQ8FGlvQnTDMG3vL+k3w0hwl/T5DS8+LCsAFfEdyvQ\niH/IFhDtX+4+x2Neih+Ep9C8q355LbzYtSmJi9P99GUeMOQC5Uobd3VezjcC\nlpU7GaIjBGxMPux7wiXRSIS/7Q+rXgkoYnDHa+sWxRHE/zdKQR0bqtbtYRMt\nj5mHbqjeQLsTlyFjWE0sL5h+liiOKYNDKGf8z5eRSX2fGOtJfPb16lC6Dn8V\njaafCzaH6RAzZKHhzD4QDfDBKujNGJolFC7SAY0yeOnOuyJHBSor5fz08p7P\nPh/gMnZkYfKlHrUpDcFQgQWF7Fl8zEAPHcjYsXOXMXS9HdBlUwSBuhf1Ynlv\nVB+Gf+WVUWPMH/GMG49n9uGibsMHVRFYjx7U6Ppoy9zG1GkztYuZPZBcXHVV\nbX2VU3ippKyNtpJ13oRDeXAULvqKDNiDvw+v8rJ73GnVYIZwTc2v3urR7MDR\n4vEuXb7favBbFzaFdovoIF9qC8mV/IcnbRQtnQx4dO6Ck8VaUO0IKBZuMyrQ\nxHLcRGWEi5wI1YcYbEfLhVFGuyEYsJnkSZmR1LknOiGUi0dHRtPRMZyspAIK\nD5asFVt4+B2YC6nIaWyTPnho0Lm71B+veda4bH1T1q3fEW7t30VEn6S2eSsR\n274c\r\n=P7rA\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"1d891defbdf777271d20ba817adbf4d1d585565f","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.22_1540415189857_0.9480373580738781","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.23-fix-flowdock-hashtag-event-types-487ec56ebcf26adc0e97fdb3dc063d9ebf335568":{"name":"resin-procbots","version":"3.18.23-fix-flowdock-hashtag-event-types-487ec56ebcf26adc0e97fdb3dc063d9ebf335568","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.23-fix-flowdock-hashtag-event-types-487ec56ebcf26adc0e97fdb3dc063d9ebf335568","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"4d832b98b04f930f1fd3a861b5b3ca9ac63d2830","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.23-fix-flowdock-hashtag-event-types-487ec56ebcf26adc0e97fdb3dc063d9ebf335568.tgz","fileCount":92,"integrity":"sha512-5qFJfbn7H8nOOEM5aiyBZv1MZA+0Y7zz5/YxkQrzGqD55hcsSuo9vbgASWPCSkHQD0u9BBJpdRSw+VaSFOw8rA==","signatures":[{"sig":"MEYCIQC1FSjbXGElbf4Tpqzd9qULBH69xeimQ4mBHzAlGjseQgIhANBvBI2EVefyymxf7Z5eaDoESAGBXuO8yv4Wjhie7cYG","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":904006,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb7Zc2CRA9TVsSAnZWagAAy1gQAIejDF0Zdj2VoQEBPnST\nR0b6Mnxewx0Vw1j9kPrf3wG57GpKopOxa5LJVviaPDQJLUPfaWeywYQNZkc7\n7R+0vrBMjusTySFczF63pkBXnsXBKaKpuEtuNELmeyhQEJzrsnUuAWhyDJtp\nvsgphGcVzRAq756lEq+et95t3Mwjnrk377AWkpmtNoB3BpsXljctN8TkUhQ5\nDgPGBxQSH/LFJQz2Xp/7fLbqR7D2OCzKEanwsE6QFifMTZYZXoqGDn/OBpAg\nAMQr9lza7ICK6xTV47i1Ocxs4MWbQxU7yIka0A3GJqbNTqKn3GTIR3LLoYXu\npLKBL3QA01N2so8PZacuATNG5a5g6wf0PVvyxBycQE9d/0HjB6/QjWPmxUi2\nmDxdSdP0ilKFPISfWC9Xi+fgR2FdMZJAvFcgmIU7sl+OgpEH/3yPXW8lAnK+\ntbuhh1yWI8uCL+ttxj/+kaEs+GUKS9DKiup7a2gUMZwxRisbgvvkUnmPluEf\n0PWvL5+C7oZz3VLaAAWd28DK0g8vGVsrluIKzijKefaIeWvwWlHph50nVxFS\n7tgd2pLwGRfVay0JKXJGC7r2KuJxY9f/7fV2tOcFD7PEsZOtltmqvT+HGrgG\npphPU/RnWkf0JbloxjvLxZbk6yk3ToFJMG8t4iIMzWNeawqckHoNn8yBXGVk\n7Nt1\r\n=wJRJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"487ec56ebcf26adc0e97fdb3dc063d9ebf335568","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.23-fix-flowdock-hashtag-event-types-487ec56ebcf26adc0e97fdb3dc063d9ebf335568_1542297397320_0.6318531969919032","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.23-undefined-error-messages-f40d1efd76e3e58b8dc64a36ecd3ace2ba218184":{"name":"resin-procbots","version":"3.18.23-undefined-error-messages-f40d1efd76e3e58b8dc64a36ecd3ace2ba218184","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.23-undefined-error-messages-f40d1efd76e3e58b8dc64a36ecd3ace2ba218184","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"dfd67d58cfb0ce89d902d8347ded2ca0b2c120e7","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.23-undefined-error-messages-f40d1efd76e3e58b8dc64a36ecd3ace2ba218184.tgz","fileCount":92,"integrity":"sha512-f53QpEKviEmJr5bxZ2hRnIOI5G3wB7it+hhFoox8ddnBvaVte/j9TtA9NHKrerOMT7/TLq9pfNm4I3L6mrqqlA==","signatures":[{"sig":"MEYCIQCZTQGljzwFv+KYrKvLQ+uDQKp8pdzovKWzH+Zyq1XwmwIhAJE083eShTa5CMcuNREyRr5deCwsNiTGMWKdjx4VncJa","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":903710,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb7Z0hCRA9TVsSAnZWagAAUowQAJjz3X9XD1SV/mUMZ0T/\ndydt94+sL9cQXTrWMASU+Cu9DX+4Lf83ngoRLDvsr2UkAIBDhs41rF3XKkGF\n9RdntZBbhwxFq7Mf9AOjSJu09aalgJW8P2YFoNJB3r2o8hRFxCD+QJVPhaEt\n2s4KPCaECGX23CNvZ7QAdBaTINgSQgERzIOzFtCudZ9XvsfMo8X63A1/34xn\n8Cqpok0SEA94BjZ/BmxnsYESvF9/lKMH3Z9tC39B16qbUnUEYCw/TFUEvc4Z\nVD0Yr05LDWG0Oj2QR+Q3LbriHQvg1vUlt2Ho7ywn35Xoa51C72sLsq96rrNo\nro9lJ5o/Vl/F33ph6EVF0lCo+KlRhMXj8c4W04MhnAOylrofnMG6D13thPXD\nVzWNi51Hmic8Z/cwTqqbgJ5q97y6y8UshbEY0KJAEAWba7BSaMO04bVAosNU\nba25xATgusMd7Glbn/K6/tiIZQE1z2b8hX/EuJZ9avIhAk6q8Hac+6UVS1s9\nh6gh+iRKpksfgRq4ZwAJQS4tYxYYcniruJtyq5FG0eC+zdxy33ubMf830k48\nCVh+MiNUDr+f6GXVeVVxIbBeweITJSWzsut8NoVJDjZIm4Epkph7ea0PBZfH\nmOSH8Y2xLoErcCRRzaGzIFAQnBdBfRpHRpJT4zuQJViyHglihsVG/Xunw1Rm\nPIDZ\r\n=DsuR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"f40d1efd76e3e58b8dc64a36ecd3ace2ba218184","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.23-undefined-error-messages-f40d1efd76e3e58b8dc64a36ecd3ace2ba218184_1542298911918_0.5128148540749351","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.23-correctly-interpret-error-messages-4a8b3db38f7636f1020430cbe08e5d6a6b8626c9":{"name":"resin-procbots","version":"3.18.23-correctly-interpret-error-messages-4a8b3db38f7636f1020430cbe08e5d6a6b8626c9","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.23-correctly-interpret-error-messages-4a8b3db38f7636f1020430cbe08e5d6a6b8626c9","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"d89e7d09142b1f2f52ebac5d495fa0f604126ada","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.23-correctly-interpret-error-messages-4a8b3db38f7636f1020430cbe08e5d6a6b8626c9.tgz","fileCount":92,"integrity":"sha512-AgcarLnGUW/Hv4ECVu+/bA6cZa3oDpHXKGClv3jC33096pg0fT9vbAjEpXF8QdhxYyEcOQmlxQ4Zw3dfB9z/mQ==","signatures":[{"sig":"MEYCIQCM7QDj3R/CxcuWVKI9bY5vFnjGRg1aI+H37FtBPMgDDwIhAJDgivXKx69FaQ5vhRNbyvcKbus4I10wFEYg9qx3wHe3","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":903698,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb7a7ECRA9TVsSAnZWagAAQM4P/jMiycS9YKWmpswJVOPR\nb2DZfYyezhT6BABFrWI9FhHekijjDjya+o74KNQF8uB7y+Me0WOl/ucZ9D2o\nzXWeoJwnc87z8T4K12ZUVPV5Yl4vPVJykfIE1bY+hcR2+xT4ZjL+FmGRid32\n0FBPeTJUHuJ6LkZ+w3PuqLvYmhMBi3woMN0to5j/Rpl3oEHPRiN+1v2XsRDL\n4EQ8XdDxntna0a1VZDQzch9g5slfBITEp0rzI58IkeYTaEWcO1zEXK1KYKoo\n54cOBipPMQo0qYVhggRbs2sSEHtUn+LFlXLoGIJH8+OUcYlyZdYKPo/U+7PA\n+IyItrKvGQxcO9BPeQM12TVIH8ANDBjP9mIEvgUZV10sh2Fms1cIwXS23L4V\nOCX9VFOLPcdUBkCR5m/OB0kwP4tMt4CjiwMoAeEObe13aiSxaObXAHkZuAST\ntFGRBm4NPeGNua1NNa9JhQoqfxBWPPd71EKrsQs0rkLMs9wgM268+qb90dEu\nvYX8kS755viLfNmraS/B61dQ1cW9wXDBCLS+AXBSTrk6yQDnL3bmqWZ0JuUb\nYyJ5o8zpN+O1BFxNCkna3OFFiQVHj0/VePUpRLNQjIiI+98klzcm6cNUH9Gf\nl0z5IveBbc9avMLuPQhTHOlaksaTfWRDcILabDsC1mJRP3GGaLtqlCOF2I4x\nl6K1\r\n=fWkI\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"4a8b3db38f7636f1020430cbe08e5d6a6b8626c9","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.23-correctly-interpret-error-messages-4a8b3db38f7636f1020430cbe08e5d6a6b8626c9_1542303428011_0.36971094856043174","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.23":{"name":"resin-procbots","version":"3.18.23","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.23","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"f30b3fb87349c4edc00b9b7c8cec68c929236a39","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.23.tgz","fileCount":92,"integrity":"sha512-nE/PIqx5HJ6xagyOF3N8uwRgPKaRcNbPArT64Nb/3f8vvKe2zVeyO5wTWQ/bnEv9Cmb7PHQdwlkdakJlB+DKtA==","signatures":[{"sig":"MEQCIClETVz1kRwA2KTE459JUK9Ixd4AWiSy4DQYbSZMfRAMAiA16CXhXJQC5PVL2VUHczr6TTKEtxh2H3VIu66NpQffEA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":904130,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb8ZDoCRA9TVsSAnZWagAAoWMQAIb2n9D8XExBcPamaaDf\n80ntFVvb/fP7O+ztEk53+alAmnA0VO6pTxFVNt2KAAstN9yJt5/IH34RQbE4\noinZhSKYgNyUKdcqowEtyg/sIwNOsKFMqKGQRbsWz3bmtDLcaRch2DXQuBgd\nON96bTPRPgvmSTVA6tbPnRYO+59touggQd8WRo4cGOaB+tHbl87Ooo47oRM0\nLoKVZxwLLiv96a8weHB9gKT543FsTgCD+M7TVNk4MCwhaHxxDo+Mwxe05Qk+\naBR8pgRmEwI7FDDNR0tptIuovmqcIfrzYTjSkBFy0SWrDowA6Ng4+i8cKYF6\n25rVwkwYt2FTrCpSVRcX0bWUwUWnuiHY+WCVlqbJtB9bmI+diPVMeTLOMUzp\nu7tGa8XRXjGgXx6kHawHUJcZzxSG0y0ZzaH+QXi3hH5u4OKkU2UcquqjPiEf\nmySgGoiTifhX61ozLp1zaLqs5KOcOGxoZE3yxDBvlau++FO5CzT0HW5qvGg4\nF70T7GTgzGt8tfMU5bOZoAZQgSfDDa6GkHTuSoi95+uVIKIaHN4wSBROQVl0\nYjrSH2r/BkWkrrOYLD8bwkcF6ib4Owk0azPMJ91rbGouRyX4oWH7qmweMyST\nW7irSu7zKIimPp+rWwCmwYbZjTHJJauDexBr8ka5KNcqu0SHXFO5CuhV7WEn\nQ7ne\r\n=7gos\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"02a3788fcb57db51c117cce05fd61a2522397fd9","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.23_1542557927622_0.4427605256642029","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.23-bug-fixing-66523bda99a51c645f887be49290d2770638f0ca":{"name":"resin-procbots","version":"3.18.23-bug-fixing-66523bda99a51c645f887be49290d2770638f0ca","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.23-bug-fixing-66523bda99a51c645f887be49290d2770638f0ca","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"3559b9c894cc1f579249a3be717bbd7ff2101b54","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.23-bug-fixing-66523bda99a51c645f887be49290d2770638f0ca.tgz","fileCount":92,"integrity":"sha512-SlVzH5ChlNvU48xXEb3my/IAFT1C27EthOdqBUzjv/R/IvMJ5NCgAEDREvpqdwVxrJWXTNNRfBXTdRMi2euwog==","signatures":[{"sig":"MEYCIQCBUN48MooZq6BHKXhpNNcnzlJMt+rNgoQMgGkRueJ8iwIhALpv43aNlFFvfJY5E+/lUEfOrubFd7yBROyTEyNbg9xX","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":904249,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb8p+lCRA9TVsSAnZWagAAWHEP/3j5bq0shFWtNXsDquEb\nHMvEhUbxYt8bXE6KsmmT6EvYxtfLYludPYwI3qVH8fcWYnBvkH5WiYb9fTpd\nr7oVYyWyE9jpEB2RzRV7gswGw3LpOEDdImf50UxtNH6c8XqJS/i2+LFDyayb\nib6COXZgAtoejNDvaS8WDAH3nCQx7Nbc1bKOl7iTUVLD3mcjG9WDpPzlKasZ\nK/SIINhhDvWNXccL+RnGR7HJpQln4AfYK3GUblePKRglfuSsL4xJKAlj2SSg\nXmpg2trcNgmCRXlpQoV8UJ5DH2xuNk5GwTRgtPIiyRWALbBUmAiKCZf0BIrh\nHkXF87I/38GPGlFdqyVRGedX8hpi+jtqmJfG/sFogDu7Yli+TlPtBUIkX9T3\niLZlh5UyVCyZaoaaJjP8cKXcN4M3A0RQhie8YsH4x/t+gn0j/nZK/EsNZDK2\nlaqOSYq8zcue3yX+0jQpdbAW401f1fwlFUSjfzvksgnF/VIpcirRmVykqtLN\nxJXtI2Bk8ZDZ5zf3YCu2/n5lmSjILoaHGhn0EzTqpgtA2mhai9QuTkt5828+\nO0Ui5isOyiG82imL8hjOLniCUfUmqCUSZX9Y+jkOhzipqbGj67WLpeajJqZ6\nA4RPiVE9LO0bNvMIC57+Dhp3tfsuiZbJQGVOoIH7LgaaB2Io4OJevBwMEKQ0\nZSjp\r\n=QwYh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"66523bda99a51c645f887be49290d2770638f0ca","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.23-bug-fixing-66523bda99a51c645f887be49290d2770638f0ca_1542627237327_0.10877734705734876","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.23-bug-fixing-e5200f2f4abc96b8da421e3e6ec8dbf51f7ca2ea":{"name":"resin-procbots","version":"3.18.23-bug-fixing-e5200f2f4abc96b8da421e3e6ec8dbf51f7ca2ea","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.23-bug-fixing-e5200f2f4abc96b8da421e3e6ec8dbf51f7ca2ea","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"1608cdf2924172faf15fd610afef3a3cab9a83e1","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.23-bug-fixing-e5200f2f4abc96b8da421e3e6ec8dbf51f7ca2ea.tgz","fileCount":92,"integrity":"sha512-d+L9PM3u8XC2/1+6jxyFYAf04/SQvVs7jD/ml2r6etxX7j7zg0rdWniiqeisNc8s4EXuwoVUV8gGkj34uqFTGw==","signatures":[{"sig":"MEYCIQCyPfef88HPe1IIxLEoF6XpEhrlLEExp3VCv8eQnkz54gIhAJ7LSwV4Eqy84huZfZENLJnhoZePs8WQ9mWla06bq0bs","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":904289,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb8qTtCRA9TVsSAnZWagAAYckP/1IqkEYWPlesR1u1Gwuk\n3XeQwQPqGiOE5FHOr308FBLnjSKuKhhNbHvV4OnO3HOTQ6gjVU1OwnZoSNwJ\n80/WVHJYvELelKXdSs5NatmmP348bpUAb5+LM8BrhUZGaRE3x11CFNXzcZSJ\niJZG2UQLJa9zPQ8KbT52Q/cpqicrK89pWhL4T1LpW7YNXzkMeSCcuKVWLhzP\nnPev729yLMMOuwD0aNTvr5h6DrtIOaL+LrrHjEOjTVsdHRmyBONZBVkHwOWb\n3WWm2c2hciyrPYWN0wIvdSr0wWeMKHc7YtB1gCs84o7bbJVqq2QYWQl9oAUS\no7jHVsHI/bPON0GkVMDUZhNznDryB0krJGKXbQnawRJD9Wtv9uwFZmrCoCpT\nALDtzz7vWIXqsim9wSyF3mchsDNhBeNOCPEWFNUvxe2Nh6Y7U3jaM98Kdexo\n87mgPufZg3bNp9M4Glm9EMh28VKcHGEDntZNjf07e/Ig4NzHHYmi/07YQlnc\nNWKNPGByWfTf7uATR4dVN7Px5ccHKaoV7AhFaahD9ALjNbUkw+8oDdMCUxIl\nMUzNVa6LiE23T7ERoaYyqB2vyEV+7gQ5NJzRTEEpDjSxzDCW9jFDo9GAxgAF\nZmq/yndWUwG527j5PKYDD9NJTNI71Hl2o9LZLWtLzMVjU2xvQmbNE/uj8HbZ\n4EeX\r\n=QwgX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"e5200f2f4abc96b8da421e3e6ec8dbf51f7ca2ea","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.23-bug-fixing-e5200f2f4abc96b8da421e3e6ec8dbf51f7ca2ea_1542628588991_0.1646546621495475","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.23-bug-fixing-f82d6707222164952b9fc81593c9492ee21cea4f":{"name":"resin-procbots","version":"3.18.23-bug-fixing-f82d6707222164952b9fc81593c9492ee21cea4f","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.23-bug-fixing-f82d6707222164952b9fc81593c9492ee21cea4f","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"84bce53f295331c24265cf8d906cd43bf6691533","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.23-bug-fixing-f82d6707222164952b9fc81593c9492ee21cea4f.tgz","fileCount":92,"integrity":"sha512-RljWMbiSa1t4SiJMJWaMYHg3Xkd4jk4O9JgpKVJYZUI0O91nY9mXcZnSLgfu1T+gfM9dhXFutj57qEZRIo5p3A==","signatures":[{"sig":"MEQCIDT3ZMuwOzq8uJ6iUAEByA/SfB2Ml8x/3KfO+H588vEAAiAp5EgKg14I0X7Ne1T8A6WCnhhQc1QJMrLrC1qRvCKupA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":904330,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb8quvCRA9TVsSAnZWagAAjEUQAIq3Wpw4AwNhhast18da\nOuEHeCWD16VJ/zYxMcFeAbZi1Zh5rcQQb15rUpP6yScekL2G0R2D44jcHlzD\nLmG0b5wuBSthfLiSjghYROTbbmKZmHducxlAiwCX7k13zmk4SWPJaQxQ0d67\nbdIg4d3LD99ZmCrYRoDTcy+3g0G7/4njYnvxKj89MHR6ZPAiAWxQKmALDG+4\n05HPoF/btPmIRvMQ2tclI/dkl7fcJG8Wprmnk+7zO5tC+NrUikxHtU+vaKtx\nZR45isSkQmqonp3BtEkBZyvpGtR0eXcGdhOltQdhBGRzIIS15ZbrFo6F7Baj\niZuHNarthWA53RNR93+73YhDrGm7z/wBPg+9NLC7UCMgc7XRKeIFVFSeWzX7\nZgvcz2iDK6geHX4ebC6x420QjMYZX0UFm64HQ0E0SIDwEsCZWnwp4kQi+Lh8\nDaR+lA60qG0ba8Jxtv47vhRIEg11VvW9doMsfMwYwfhti64t99c9EmWNmzGO\nWp36E6IqtShqvlfoKnDGbr5/nNIgpzdjesB1aS5M+lYcoEqu9X+5FarL2dUH\noy9PMjrSHC5Q5222xW6sKo11LC8fpEfJLNytMfOIZe7fAdYxq5WnbeVXMn8W\nQLcfzH29lnV6Dfzz2lcAtGl3OYFblqNt5tD2HEv9cVhADuSmRXVuU/bvHfLI\n6OFk\r\n=OCaz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"f82d6707222164952b9fc81593c9492ee21cea4f","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.23-bug-fixing-f82d6707222164952b9fc81593c9492ee21cea4f_1542630318985_0.9347408483956923","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.24-bug-fixing-34e72eaaacc3b9b4f197b40f5f17d42fd1117d98":{"name":"resin-procbots","version":"3.18.24-bug-fixing-34e72eaaacc3b9b4f197b40f5f17d42fd1117d98","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.24-bug-fixing-34e72eaaacc3b9b4f197b40f5f17d42fd1117d98","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"8c285bb5f9560f95c5c62de44bbff51ae46813f3","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.24-bug-fixing-34e72eaaacc3b9b4f197b40f5f17d42fd1117d98.tgz","fileCount":92,"integrity":"sha512-1ZImAn5knQ/Dnk/tNN9gkNLHzAgNqG8kiKVSf4bocPF4e7bLAZmG/81KhF0P5ZWZ5xS6Bm8IzvRgA5VL2T1t6w==","signatures":[{"sig":"MEUCIQCVAI8H4h6J+wTXK8LMh2g3STwUXnKEsMtU7uG8LN+TEgIgBiMvHo6dXEUNulqujEcPRgixZL7Zn7k6KenRynZSLKk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":904201,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb8rhjCRA9TVsSAnZWagAA1bIP/0sAVUnatI8zbcPK17GP\nDVXmtjesLEHjc2yUpnDl+vUWNUq5ow6AAq/8iy2jcET/XgHdci2v7Uh4bl8E\ndged2F1xWnP2qeFlqdrlAb/ApabWBZ9TW4cEdRu2bZqxPyQsiku7yDU19T1b\n5gsmxX0etdWXPUplk0zo8mMhtckVq4//hjl5DMt2H37HH6bbfN/pCzvcMP5/\nUuxYSwiNeXwBnSKDusrMhf6u12vVL8Iixzrs4NF+7IEF0wZck5LFSFmkGOHc\n8UBZupB2yE5sTjtmWAKg5hbC7acR19BP9M04dDZ3yX9QkK06dR/bZmxLO3+c\n0aeC7D1kov5DICnNmWqcUSUlL7TN4DON5x9fJIgbpTFVh6J5LsN3K1dcdct9\ny8/rpiBmF6W1+N1MDqQIKIMnVDXnUeHaq4aMWE9H8N/MSoN73JAfjYBACrrw\nd+5vIN0HokTHqwgyVawIi/WB5KuBSAm++JPr2R0J89OevDqczLzCRChRfA+4\nRMv5ieh7OzIHY6IUZ3mykI1HClLj6/h/beev41pxkbicgwstDADnN2dC0M+n\nuSEEORuYDkMzdzF3mnlLKKOKQj8vfYYKFky5FjRQIQPpFoFPo38k0d/IFm6P\nciUZnPCguVl707Y/WOgztuz4OL7LzPu3ECmnIq94NIkZ2OsbDBv8SRZDWjPH\nFCOC\r\n=Od2F\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"34e72eaaacc3b9b4f197b40f5f17d42fd1117d98","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.24-bug-fixing-34e72eaaacc3b9b4f197b40f5f17d42fd1117d98_1542633570594_0.5967790819630081","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.24":{"name":"resin-procbots","version":"3.18.24","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.24","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"1fbfd8ee534b3b343297d3b21de238837effd78c","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.24.tgz","fileCount":92,"integrity":"sha512-qqprvwBbR7LFayn7Mh5PsRVSJgkYGae9+QrUJWpzHOKZNryZK4kloPDiz760noduHbx89ufE7agwwdDOy0xPSg==","signatures":[{"sig":"MEUCIQDo/1SLLuqdFKzoGI3lXfpz/5JARQ/LlZGky1ynhx3eGAIgM2KBgwQpR22SkKTULNm1ZkNp7Ce02xmWxP2WJijFEa0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":904149,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb8s8hCRA9TVsSAnZWagAAvPAQAJKBN7Ap5821rlrfsKvr\nxsGFteoWH03VkcFdLmpHLDoWAdK+uWH9aYVMM6ScRDx31Ej4BehLlr/VAImT\nQHQx6zZUCeZ8eomQ1endxbq4EbukVZ/f7iEuN7pGebhXfDy44lUcjbUcutp2\nzIYVbimaqTEuxOrPd7cQ6+Af1JD37LDuXNdtj3u4BUQFcURhrxn1oGunPmqq\nknujteAwiljq3Vcxkh0gIQINinYq3NC2RvHXeCia8wHuYtfHen992Z56bHHZ\n5F4kibgZ4GP40+cD1Jq+YyXByn7eBxh9zYfUtMKDEx2BLw2tnGa1YlpnJEVS\nfshV1Rot8ZpTde2k12XCerPjxYaejth2wmya9gdqcgFVwxB8yBLjA02KG3K5\nIAayMFQfp8y8uE2dylRMl1xLK1Rtmx8MFpsD6iCVmWkX3nHJX0vwXbgacbAa\niTAPWZOuu5GYJzeeTeR4AVLyg7LcpbLKq2QCs7gFoUmnCgRYraY7qFEJih49\ngWynqJEiSV5TvJxN7fUvpqp7eCSMNg38DBYpFJJuaWDRhFtm+ji/b8mpQR4v\nDlCfTRDWugrgfJvS4LsxWabZi+warKvkYrsWyYPea7Z8XnluSBnpq0XbcHbG\n8aOg2x2lAlAH1ogfeQFs1rlsGqxctJhjAmF/nuvhIulS9HwBfJkt6HnyZOau\nKVe1\r\n=Sp52\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"c8f666908e64df28cf5ec0e8e47ff48ea86ea126","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.24_1542639392430_0.007965434019531203","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.25-sync-new-flows-a4f619243b1f332723c2b20a7474019a05f079be":{"name":"resin-procbots","version":"3.18.25-sync-new-flows-a4f619243b1f332723c2b20a7474019a05f079be","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.25-sync-new-flows-a4f619243b1f332723c2b20a7474019a05f079be","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"fa525e0198f27d60aaf859b7d44554640a279f56","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.25-sync-new-flows-a4f619243b1f332723c2b20a7474019a05f079be.tgz","fileCount":92,"integrity":"sha512-F+cjBzSSEU8BnwTTVRC8BDj0HT5Bcf9wZUwGb6TmhoDeKFXDVPqn4zUBH4ryDtgAzw8yuv7ZrdwyUAIbBkxFYg==","signatures":[{"sig":"MEQCIDhJHA2TVsYiMuKbTpaAQ+MBbDwY14JcHVmo0eQdpidRAiA7U36ugXpHdfXXmwEagAQ1ykZ+1ppDpkdITrlky2qAbw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":909493,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb/AVzCRA9TVsSAnZWagAAbu0P/0TUtOAvSeTwB0ALMHhc\n73HjIOd4HH48Eit/ZsJRrHpjs/t1Xeg4lxAEYUjkXhsr+/HRlW+eAIGoZxi1\nCwS0UJ/QICzNJVKtDP4RF8A5ZPir7vArby5qx/Xy9XsELh83bkEvss7ttQNk\nASXG+mCjqmbJ1XaJdJgjxFUf3Ho2rexUMeBdQNFgP7pS6P9Gl5LDzZOqBQOA\nV9FmMYsti5WBUBeOa2BaSA3hKgf0Fb9qVt2Rs4Bq/iGCaKx3pvCzO6rLsOmi\nnaeEgH7z2YXjEDCPcMofk0Olo/sGpt2mlKTgDwCEt1R7SL1b8S1bpCR4LEff\nt9W58QHN73BIJdo7nyVg8r/fnA+4Zxq0BY14pmEA3xpvOqSQYfPADOpZRAD0\n8FpeV9lPKthbD3KQrGdO/Hup5Xa0UulaBUDyvcr6OO8Ld3IkbleaZ92z58qQ\nKCHg5gPbI/yjwvaCeLk7Ykyhz1C2oJk855ifmHzh3qlW4tjYgZKxh4szot3+\nRk8kWRYrmAsHq8og6uSV4YrUOeETDdJCGgzIW78jTA0JEbTWtb9aqW65r0J3\naVD39aAoU1/wscZNwBi5ZuP2LQLf+x7YSJekpc41ZynVCwZBsg2bMZJxWVFC\nwj6znfi+CUdHV2CYxItTg0nj+LoZ8ADzwp720xoB6NEeADAAeQnuySZt5deU\nKK8Q\r\n=q/Nn\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"a4f619243b1f332723c2b20a7474019a05f079be","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.25-sync-new-flows-a4f619243b1f332723c2b20a7474019a05f079be_1543243122418_0.26619992002020565","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.25":{"name":"resin-procbots","version":"3.18.25","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.25","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"e541fcd7990f3ea6cfa137b5f3311cb6afff42f8","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.25.tgz","fileCount":92,"integrity":"sha512-ay+zYSyFQsgAPYvGefF3VABSXXwTpm8ufA+LVKoVlX6bwdOnK4cKsEpM0OZHeGTNY4wsrOTdV8NCWSqcFISYaw==","signatures":[{"sig":"MEUCIEeGxqjY91fhsy3TqPit67Aie9/ugH4kxk1//QZ0KmduAiEAiTiWP2kk5Z+gGpRk/d8zaX3HE4nVeAZd492k+iNAo+s=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":909437,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb/UQGCRA9TVsSAnZWagAAW4gQAJE+41Hg7MVfG+k2QjN3\n8dgwXm1GodeRmSzHlHMVsLRduN3R/2qHVOtH+iP8iXRvWmLv4l/LmL89n/GT\n73Gf+Lz8/0XHhKET6BNrk0sFGiiPu0N7EouTgEugAgTtHx2I0LTFhRvrfd4C\neP/e5chQHd3gQJq891N47+BruTfgAQF7w3JJBQJsKqkA0cLblq0Uxvn/5660\nY0yxL0FWPRKGQdeeArzZ3eBGr/bhwruGvD92Fja8dpHyQue1vQJJbaLLC/mz\n6cuHNsvq79EdpA+e44nk26Ku2sXZcvDYkmBZ1AVz2Dg8Sgc46KuP7ZVP/vDU\nkAi9u+ZDqnnlla+WkKwj08FEm7YWnun+rFejY7jeaflIAM+acox39qfibKkZ\n58R4e9/M+UBnuYM1UGpzK9kclX+5rHJBXh38oz/hxHeHc181LZzkF+swdOub\n4meuPKc4dmCFWVNyN3Be3QbGg1J7C7vHUstOWjrBTHz+C76hLQfqOHJ+LED2\nG2InMGGeKI9AOuvLTfFQOMpTxfOHfvdK+7bJivMgs06M11Hl00qj2QQwfBLE\nMZx+6j8cJ5tteyQHaAz82CEBdENjzCN8X9XOgxrwkZ9Ffh6cyu5baL1AyEjE\nutBgnV7XlbCiQW/4S92bou49h3zJhX8osXbHO3AdU7X7okOtHv4HkpaCP9Kw\nZ6Ob\r\n=yVTt\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"9ba2d9620877361874360ab1eabdba8e554927d9","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.25_1543324677267_0.703734977152298","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.26-fix-payloadtoolarge-errors-eff7965b429803720d3bc856dadb7f9ea06f399a":{"name":"resin-procbots","version":"3.18.26-fix-payloadtoolarge-errors-eff7965b429803720d3bc856dadb7f9ea06f399a","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.26-fix-payloadtoolarge-errors-eff7965b429803720d3bc856dadb7f9ea06f399a","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"67f45d0a3c73589b1bc174970ae0ddd5fd15b7f9","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.26-fix-payloadtoolarge-errors-eff7965b429803720d3bc856dadb7f9ea06f399a.tgz","fileCount":92,"integrity":"sha512-lcTQ3wR1wNzgeYONJ5vf4wCYkDV6iBOYx1LsmIbaOnm+P0NPF6lmTUd8JqdprGrasTfoycI4vv2zbOtifwh9xA==","signatures":[{"sig":"MEQCIDpS7EBgluhFzxpPy6p1Z1f0/5K42RRARSmYxPkeVetKAiBF/FyV+a23DNkPC5ePJwo58J0NRC25teDM4hxl9UHH5A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":909662,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcA97nCRA9TVsSAnZWagAA6RgP+wQB8LIFHGtZahYjh7Gt\nTjbrXeHgp0NyfeCPYD0dyz48XEubV45IMPwiYIyHYghSAq7YK9WuoF021iOq\npMbPe9FmUQwB1Q0e1IRuZvP9kzjbw87a2ektM3abTfI2EAB68qfGXeAV5tH+\nbVLqFG/Ivn/vnzkvDs80JC40cpTq9VJU37FA4D5yeP7YaOzx4wDOxwAH8Ae9\n/rlxcsLOQMZsXYESroAa10RNP6fCxMADrUpUNaoS/XIuPdfcPXFsXVicgHge\n7sTsffpSm7cBpouxT90eP7QUALlqpaNVHgmOEJP800PfGIQEd7nHZ+c+oU24\nvD6aQyd8Rf6i9iQhpKATeQ4b8MPCiRmwTgHDcLXqYNoSB2jb2vim6VKJxQcf\njbRf0STjHlTmCMtmDQjZcSNYM55lnHtmX8YNDMeAJ6piN3HA8meDtIBiLhRm\nSS7oKifaIpVsw6sPODvGSE7ArT1a1a9Nn0g4lPlvaCN6ckDJ1kWszlm+Ra6d\no1dmtst6DNHPcNAeow42Q/wGcgQs2KD2Ub9azyMB8/YVwiBnA7HTQQYWgsch\nNRjYk2sCoUuHRAdWfB/kDL0ZNszNozebfqtWlEanVFxidNdoM2hyKzDQBj8+\nlk0S94T2LqHBY2fB4MfLGlrPuu2BajNJHLOmrb9ufaLjB1yZTR+bOA0Mllx9\nKl2v\r\n=e3MF\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"eff7965b429803720d3bc856dadb7f9ea06f399a","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.26-fix-payloadtoolarge-errors-eff7965b429803720d3bc856dadb7f9ea06f399a_1543757542742_0.4669897720478906","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.26":{"name":"resin-procbots","version":"3.18.26","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.26","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"44cf5f037c09e8741496c02901257d5b332eae39","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.26.tgz","fileCount":92,"integrity":"sha512-6NX/g5lX10K8CbroYmsTTuSH4ASAdELEW1RsYCGHoAOMo3kF65onQDqYU5MBpoGWhEovMqx4TLnFLjvotZWK3A==","signatures":[{"sig":"MEYCIQDdpfVq9CWPm36fbt67uRXkfwu68FnB/8Eune1nYw+N9AIhAJfk/ZCy5H9L0gdMZeusA90yWp3R1XSs0CSeh6hgFZLC","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":909594,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcBRPVCRA9TVsSAnZWagAA+kMQAJy9jwNBVEhWuEWAopxS\nQ53pguVzbYCMCWi/76iACWp/A93Dp2T58a45Lowhb5FZUadzPmkx0Cotnph2\nJ8UBCcZCrZDz6h5U8pXKkuFC/j9qfKM2sKfdwvGa4NO+GslltBP2AU+BRsrs\n3EWQbgU7DWxCLwLqOHluVWFgyac9QIe1Bqyh9SILMpl3iKPr2brdVTj6cQsL\njG8hHAUewXfmzOxasFOwDieQzpre5CZURB/l6Kl2A1pw3qM5CbBWC/W1ZoqH\nFQWU3f+9Spbl0Q4eOnjrk0U4xgyusNhFN7CG3ewjExfT4yBcXnEtu3gpZWYQ\nU+DzpD5JEpIf2oqyGGyD8o82n6OQv64KcXVKTBG0b19pjraTsUX1iJtYfdaH\n9p134mIXV5MeK4TqjPx7F+lUyWbZLI6ZfE4esWnsJmsVHAqvVnjaxCWHP8P7\ntPfFpuZpli44PUws0W3USLASiedQrsZvdIJe29jyl1q7RNDz8BUyC7ZowU5L\nbM7Abar/+h0sbrH8gW0qtxza/r/KPf6qkdOWq1Sq12llk5TvRZEjypgn+Y64\nmVLWjiXTFe5AaoQ+m6VCiqmeepbre2gqkz/r8vQp7Hn10TCahNq8zPEJOfjF\nh/e3uKsj6pLdQjdfhlOw/mubKsOsYRUC6yaKshr8aTtywUN6M5MrpIDxSx+F\nBV/K\r\n=+Lge\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"61a661d1b0ca6864b9d0a3ec9e09eca1188853aa","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.26_1543836628546_0.8009112300966224","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.27-flowdock-errors-debug-3fa6959b05654ca567a327367b0d789939b29e79":{"name":"resin-procbots","version":"3.18.27-flowdock-errors-debug-3fa6959b05654ca567a327367b0d789939b29e79","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.27-flowdock-errors-debug-3fa6959b05654ca567a327367b0d789939b29e79","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"e36dab9a77c55676ef3ca3214725cb3e2483f04a","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.27-flowdock-errors-debug-3fa6959b05654ca567a327367b0d789939b29e79.tgz","fileCount":92,"integrity":"sha512-LEC3tB5yvJOW45G5xLvIhjMwDfauPEBybwtvseX6UjrYXMew2OrwIghm2Bc6q9+gCxi+D8zNy5ypCeccCGFnBA==","signatures":[{"sig":"MEUCIDwL38Jcj41e/DXRMeV2f6EmkDRwGDOmfoGQW4fmx2NDAiEAqjh8QWo6TsQ+FBDtfA+ymprVUTAESIfFy4ePzOE5a5I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":909941,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcCXCPCRA9TVsSAnZWagAAeAgQAKSXUr2RZpH9v2jxnhEO\nwDZQfT+VqapoaQKYGbJsi1Wc2Q0r12HzUsQGxFoYxpjZISE4mCW8DVmOEzcp\nowrbLmKt6qEYElZ3EVTJXmB9vocXOS8QEuYkD/WfI8flYhI8pE22lghOAqWf\nUKDZ1zDnypf3lp53oCu3l6FO/+K9zcoVhgoyQChAjQD++cEkCeEwvewIxiPU\nfLHt/gJ1pLfh54tfu1zUIm4BQutCk6TDml4I79mocFshiDdQ1vhy577+KrCe\nDPYmYEcID6teIw78s6Soyh4eB2di8X4PJaCDQ7EVEUTmBDqXxB65uVv8G2ZU\nVqej/El/InJb2DQZipM1iR9fPoSxAeghIOnCjlrclb0bRQOBV0zpazkeI/tN\nyXuEPS92bWcKS1kMmiAd4Goyie2H1mAst8pR4V1mOZ2H07JWzNCj00TCtN0Z\nof4NJaV3dNzQCH8UVQ3IF8SAGlFGJMqPZlr+XQgz+D7zwq/D2AbPU1iEYIYq\nGqFBlYSYHJw3RzNFbSm8/WKsQm3eQWhLKknKjJtFxJy41DH8pFBEiKEvPBnG\nTstxmnuDpYdXI/e3EtL/MfmHVOOcQdZVsYkg/Gze3PlpVYtMqtp0MzpkwYvL\nSr4IYrI+o1Aa1bNIZIsK12xV1qlS23r/ioyFc5D3h4RTQRcJ7th+s1nd3woT\n2cqO\r\n=m1ch\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"3fa6959b05654ca567a327367b0d789939b29e79","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.27-flowdock-errors-debug-3fa6959b05654ca567a327367b0d789939b29e79_1544122511102_0.5611071052266208","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.27":{"name":"resin-procbots","version":"3.18.27","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.27","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"1b3aa65664d99873c4e4b8ed3b03c87b04de26cb","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.27.tgz","fileCount":92,"integrity":"sha512-4aNokQyZz7vnYN8kqecEd40kZfuZXMBnb2QQ3/kgDg5n504dAmNyQyT30I5Uz/kAef7NdARLpoVzZ7DSJ7i+ug==","signatures":[{"sig":"MEYCIQCuaj/ZO+HEcz+7XyyTvSgpc33tV7ip3+hs7NiMtyYXQAIhAIr+KJNxiEbB4NI2OY1HrN1liaGKKcskymDTxGG+Lhqe","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":909878,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcCYRgCRA9TVsSAnZWagAAFksP/jA2vY835eBwBtDAjv9E\ncvq5Y1gQ1b3j9K6H+vDf3ry6q8qD3S2CJ1V771/r9uIzAlI9B+6mclhll8hW\neZWxPd1lq+/lz/q8r6apArMbB4WfkuU8f94RktgG4pMLXLntHwPVVJpZPINp\nVAphptAL7cpj8TOz9F4ThPAhZuoOjrRldfAAXZakMDTiGTBrYr0oCLMbkHfK\n7bBYNumZ/t01FYG8EvkgHm485GClKW7XlZkidV6D89maW1J3lMfQo3JUWsYO\n+O9GQ9EtkE7uRKZqSTct5dRyYGYJWrmqyy3avLsyo1DeH4Exmi+A6bFqQQYu\nICKrSim4hGEF+pCPiMnrL59Gq9RxHXGfoU0rseMD6Xq3gyzp+CvXgpOpOkXK\nsFvzctBtGeX6jKx6V+8EuQvmzWvBcoQkLC61/H0auTu/ye5H2kJax1HXEzZC\nuzFytYQM5VhC6UjasKsPHQkl+M4JtzE0oMomm7O2DEWk8/eOXtQfZbpxrQyY\nrVyVkEPLj26GU91/fMLtEI5RVdFuPXNHiKReaEw/QIe3twMNaQuHj6BwQXrY\n/tHeiVI9MIym+AAYepFFpiV1en43WFljywOmyDBdeRVOm4edmDK7oCeSaTog\nNXVOyNdtyFACgof/VRUjfzs/6KUWG8nBZz+uXTLuuYW6dbICA01KbxAluNfb\nc6mK\r\n=zGd9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"87d667a548048e4a0e5af9e287e03fcec5a165df","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"^0.9.1","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.27_1544127582927_0.4930474234464679","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.28-vendor-flowdock-fork-bcccb87ce59490ef38407a5a040fb7a6bf1343bb":{"name":"resin-procbots","version":"3.18.28-vendor-flowdock-fork-bcccb87ce59490ef38407a5a040fb7a6bf1343bb","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.28-vendor-flowdock-fork-bcccb87ce59490ef38407a5a040fb7a6bf1343bb","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"ff339f39803c395470284b771a2fce395faa73c8","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.28-vendor-flowdock-fork-bcccb87ce59490ef38407a5a040fb7a6bf1343bb.tgz","fileCount":92,"integrity":"sha512-gkngtoIkuEjrlpnm6EYINA8rFXgNGXz1Kkch7InKXjs8pyoe2hnlTlbLZZXrYp4gPauwajSuK88Ki4x/I1/y/g==","signatures":[{"sig":"MEUCIQC1yzfhOCHN13Zp+ZlPRj0f+wFSRs4L5rjxUKjpnJ7K0wIgH0kVPsM2bl/sEjKvjfVBPVeTvMW2CPttwvMMeYXdxoM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":910172,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcDoyvCRA9TVsSAnZWagAA2O8P/0QXaShxiBN1nTFDdvjz\nv3rWSzKMgvL0B2m9DlhzmS7szIK+eYk6Vcpsz2tp76R6OYV1KYPkpkoS2vlj\nV+TD75DOsDpJHJYYUQoLqDL7Laa3YsWQ0by9c8YZx6+wkXSFjMgMX+0jUnzx\nDHgC38muOhkwhBG0Ech9ui8L5u0RSeGMIXy2E5AxptfnzvLUiw/HNayzr6dM\n+mlWlsMMLoP1j3hxu3ZU+x/XJZRY36jYUGpoU+nClScPKTMm84J9SIau9ukV\nYuCHcX6LGUbV+m5+6Ydwxc7fqHF9anH6nS/rI7ekl+A/qBDqd4t6rCjbw0sF\nFxTItrxPAbY8z/WAD8glVZjQ4nVAmdtmsDPdD4FJjKV2SjKyB3Eg1LbUUSzL\nYxMIa/YrFMAS/VUJh0/DkzdPfCGy51h6lz569qZYuja6Xh4hUijMdSV/rQBh\na5Di83dJ4EzQaf6hR7UCsbJAU8JEyN8OWwYZ7di9AseTBcpV0ySAyhilXEUb\n8RlwXoEngwMi9/3hKO1nFPKkIai7wZ8HYKdtlqpkaFK0lCkkWElTJq6Pz+Ti\nGv2iN9Q5j+YwA7xyfLHMaiIvraJ+rq0AzvfPBoJMBDY0mlHKnbsAbMzdECyb\nN50nkWdNc8iPISRHm/UvoIIXMQhzVYwyjdU5B/8bIC5VQqrhxvQKKwpTLtDl\nkdqn\r\n=xf61\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"bcccb87ce59490ef38407a5a040fb7a6bf1343bb","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.28-vendor-flowdock-fork-bcccb87ce59490ef38407a5a040fb7a6bf1343bb_1544457390612_0.7641942797355612","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.28-vendor-flowdock-fork-b53e36a85a2605ba04076d1ba49fcc013e052e62":{"name":"resin-procbots","version":"3.18.28-vendor-flowdock-fork-b53e36a85a2605ba04076d1ba49fcc013e052e62","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.28-vendor-flowdock-fork-b53e36a85a2605ba04076d1ba49fcc013e052e62","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"03067b7928fb309c6972dbb07b5f89cc4a4b440b","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.28-vendor-flowdock-fork-b53e36a85a2605ba04076d1ba49fcc013e052e62.tgz","fileCount":92,"integrity":"sha512-lAkc5OIzC+ZHeCNcFFuDAJ/ggIy24BpXUrc1wJOAWx2g2i+KKAk8bxYH2TkjI3UlFOVC+vW97SvxcwyhKS1bAA==","signatures":[{"sig":"MEYCIQDvYInKxDcyNhwSxiBNuGJ+UZQyIe9jg1oBXQz/Pho5MAIhAMPT7YH8Ow5ZWt60qUQQMkAD5uWPTEJZqWT+t9GxpKUj","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":910172,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcDo28CRA9TVsSAnZWagAAS3oQAIw/mtbxk1yGYu4FhUMi\n0MZn09Ft6iLpiwhS3hu6gQm/C9odr0d/YjgNxPJTgsdRP1YbFpzxZD4TizXV\nZkp4gP5yZvz2f4BbjdRA1kCj1mG3pr+y9kyZiQ00ji8Q47ZYAOKZf3MExOl7\nYTAYotT3GxfM7J1qvM9N3tgdoEVEhuz0CC2dGk9/rOwXWeKc0Hsu51tf5Dbx\n20+jNKAJP88g+M2IyM7FLYNOJswWCd3oNesrrjI6erhL4oTyTG/uR1FWbaJ1\nIlBfOm9a7xQMMqz9C77sYzdg5ijgTojWrNt8AYgBkGl41RQXJbi5iIczoE28\nhHJdb4CycMq7WenxYdc20c2UUchfCeNAiQPDzAI4cNB45OYhzJHfdoYPEkaK\n0DZK8LxW1Uu7FrlQpIqM/o5DaTnlA5pWTOIDa/WLLTJF3QBsq0xrOmKPbkJF\nWe6DR2PIkiDse0+ljZpP+wu15OXhxCvocSmYf4jFD5guDEV4Z5SPNQcPfkNA\nvXgUeGtamr83K0IE1d5qqZkTra2TXg01icN+rYj9/ZBapC8zIEl5fPryLM38\n40z2+aNKRvnIUfoS3TV3Lnw+NfVQ5OUyfakKt7bkQP40byN/TW/QzkDiQy28\nf1ihinrpTN7sFE+Lssh4h6NdEYRS2KA5VBg/jMcYyuKnzuHrwGpFqmBV5/ca\n5w7v\r\n=sktH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"b53e36a85a2605ba04076d1ba49fcc013e052e62","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.28-vendor-flowdock-fork-b53e36a85a2605ba04076d1ba49fcc013e052e62_1544457660341_0.03329437823732495","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.28":{"name":"resin-procbots","version":"3.18.28","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.28","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"c00013a8b512ef0b2daa1cc6a12b1cc04fb77380","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.28.tgz","fileCount":92,"integrity":"sha512-nZ/hURodbNZL9Tkw0at0ipC4oHaGHLz/mmtc6dTjOzVvaF7PVw11nC1qrpynSE60eHYZPVENqN1YRZAKbFSbcg==","signatures":[{"sig":"MEYCIQDvgPWt2aVZxvc4jHCDYZxeIFK6D2JKDaqEvoTn+EU4JwIhAOighfpP8AABqfS1fBM/jC+DAOSh/+NWzmr+D2kT5ioe","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":910110,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcDppkCRA9TVsSAnZWagAA//IP/jpStd4tS11M4KtrcIiy\nHSW0w/ksRS+cNd1Nb9oj430BmuaufhZzkksXzI67uISLaVyHVMfhys/yEyad\nuPA+1j1QZr5MK4P2eAx0FS3F2kzXgC/buEoXNk3xS+pe/5Bygs66yJMzHM8t\nvAHYL9TdOq4EjV8rV5yUPlKoK0lc4+CSkgctWwAbXsLEi2WzrpzDTzqv40c0\nVkjQTWUsKb/fVpKwjYgYkW9pm7pVMZ6JdaqQrCYnZjmZcaIzRtBnr024MaGK\n445E0Mk8/ZL4hGtreFD8ImllMDQqgml1oAMoh306IF8R+Ah/b3zJW6ioWuw1\nZqV8hURcavn2Ncb7WGDd8Phrpco3b7hHuwL9oy/e+4mLKY3bXXncrgU2b1oL\n2CBQzhoAYs9lTYdKr3Pro/VN1ld4zq/wm3YV+Fb6dWem7JTwPP1JED41kKGi\n9XJYrMIUPHHXHkglG+anRMv1flZbfA3sate17amRGYe4MxEh+BbWUVCXzfR/\nOu6uS6gSFtBx+bQ/Ah1G67O9Yha8fHkTgHgJmOh/4OU43DTrIGU/N2c/A5qu\ncqxXs0Mny8UBN+jfMsLOCks9i/pcvA5dLdqIlnxIf8+xOsCORD0pqrECQpT1\nalSjNuZSsFHKpMCtpvZoH7QKfh8WXBlbQGuzTk1qXLjgmsqCfkGibRU1uIPi\ni6gm\r\n=sNzl\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"ad3bda58f518e7ebed107c89986e1ffcaaa6498e","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.28_1544460899593_0.9383351843166388","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.29-630-manage-devops-users-7dfbfb132536d06570af7af30ec59d337139047d":{"name":"resin-procbots","version":"3.18.29-630-manage-devops-users-7dfbfb132536d06570af7af30ec59d337139047d","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.29-630-manage-devops-users-7dfbfb132536d06570af7af30ec59d337139047d","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"20350d40c4c74c85db4a15f2b6cdde9797e2c6bb","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.29-630-manage-devops-users-7dfbfb132536d06570af7af30ec59d337139047d.tgz","fileCount":92,"integrity":"sha512-S1FeB/Mb5rdVFg2FosIohd0n8KHTTcnm3K45t5QJZVLsTefBZTu/7Jx1waBziDvt4AvPxnMc7ZIIj0+8VjrtqA==","signatures":[{"sig":"MEUCIFpoJIKHSCZt/fTE+SyWWJjv0wimM/kZ1JCNpeXFdUf0AiEAgcTQEGZEeiaOZDgs1qdpKaAop7a7Rgr7b6JXn+i2yHM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":910255,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcD2jHCRA9TVsSAnZWagAAMocP/jldXIcqOwZwprVXG9Ym\nFUn4K8QEahH3B0ElhAUa7ii3MkZH1IPtbKWVDVDpan4o+8a9DkdZ8yntfRAv\nsQ707SLT0pOJHzaKoLO5ZnML31ki35UekCYLcwDif3d5CbjqUq3hVw14eacd\nUWJc9qMjxKkkUcnQdWIq+8L+tIwe6eu+ITQTtZO7uCbPvl4EBMWPw3oo59ay\ng17BgGD9vF0KASTyH/HimRK0ILtwEdYcj6d8Dl2kVYkCx6iFuUoSXD392F0V\nveTgW//LRaNkNP7EnYIDXMY4TDnrF9AWYe4t4NIYR8GcN2ekKFqEdmHpq+h8\ngUdr3aoN/uuZLsluQi2xS/k+eWpveZptoF1jnNDXG9XfY9q3E2JGhYHPQups\nFnTl6mQ8PauS2GM4RTo2O8LLf/FRB6X7boT8hARc0w4zd5aFZDM6teLIbB1g\n0Vq86EnqcQHkDsj6Y5ATBlJhOOpxN7srRFuyBS20+JDztdeSmChoNb5RJckN\n+6ta6WtH8YI7XDEqidCQMVYePgpBT0GW7LtTEKJBCdnm7BzEydV20x5p0q+v\n8ECfekEgmASMAoQEkQQy0eYwTjfwTA1L6vOodtfuzgcuGWdBc3w0ILNaXDE5\nS+1NSFMbkO1+TyPDT2dnZQMg9kkDn42RtL8wucyo+29WMUF4SJkLMFyucEnl\nH7PZ\r\n=eZq3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"7dfbfb132536d06570af7af30ec59d337139047d","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.29-630-manage-devops-users-7dfbfb132536d06570af7af30ec59d337139047d_1544513734459_0.9613416301969386","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.29-630-manage-devops-users-27d410f23f611824de94e2e85d99588fae2674d0":{"name":"resin-procbots","version":"3.18.29-630-manage-devops-users-27d410f23f611824de94e2e85d99588fae2674d0","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.29-630-manage-devops-users-27d410f23f611824de94e2e85d99588fae2674d0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"bfbb7dcbfdee6dd3f96b8a4a00acad227f4b0436","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.29-630-manage-devops-users-27d410f23f611824de94e2e85d99588fae2674d0.tgz","fileCount":92,"integrity":"sha512-ZVmmxljMqgQr/1txW14o4YuLemZSWO7BkzKVOoiV6e5F+FJVXPVxMOR+UCnK13HICIVQOVSH1xGhplgYIxwcFg==","signatures":[{"sig":"MEUCIQCaaVqv6ukINoqe3HybvM8PSd6df2O4aaXlHXeBgWHcEgIgScyMe41jin5q/8kpRprcF+J7dCqPDP2273XOHE3mSj0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":910287,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcD2yLCRA9TVsSAnZWagAAx/wP/RtwDscVhsJR0sny8Qj5\nKXKePxNo2q/htk4osV43fX7v7n60K93WT15wxCwO88IPkiWOaVRvM+KhBQh4\nrNcd6N0ZUHhtv1wpqaGiCIi25GW1q5tJwew3PbKfOPaPU5caWfna3dTVO9+l\nQQ1M4X61gYvJl6SlTCUokDVIy3i+LrwzGEBCwumJpFgxCcHyON4fGEwNIwdS\n2CBtMiL8K7VQMyWnqUJStTk28WwfQ7fRL1lBlbmLnsUMHdjzirxLmnfn9pLt\nABr6kkwP3AqmiwsBjiZmgo1gPSiKn2+IFy8dVOS7GKgEOo4XWvLpD3VIgdMi\nZKvNhsWHV7SSLmNfV9I4BGuwVXIh5F9roSLp/AAznylOH8uttG2J6HN2vM+x\n7fORA6LzIhYbDezehxUfPNEA+mscZ7W+/U/S/QVE9b0taANlMHuvtaqJyy+C\nj75+3KPOwWeAJ4xCvi3Sl5zSd4F3y1SvhrB41Lp2ikzondWPtE+t20BUDO4G\n+R2axVzM1I4hqYGlVkxtOWbROj1wruzxCFvUIDMR/IfV/ez/hI/g/YN2+yn3\ncUFIwyOAuisAkwvKs/iKRCoxDsk/cVfp54nJzR3gWJcalSbkUMVCuFnaSBaS\nZASUWL/48LQy4ZWXVtU+FXxlBHpWBOchwyyJRsYkhrcGzdo/bpNNDGn7Y3K0\nxBk9\r\n=IPKO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"27d410f23f611824de94e2e85d99588fae2674d0","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.29-630-manage-devops-users-27d410f23f611824de94e2e85d99588fae2674d0_1544514698681_0.10546796353775889","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.18.29":{"name":"resin-procbots","version":"3.18.29","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.18.29","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"696562dfba857b53c4b467d13c33f3b23cb1806e","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.18.29.tgz","fileCount":92,"integrity":"sha512-t5t0NPij3rMf3vLC1IEIjca4fdsc1GDScm0yxg4ai2aG1Fy0PTRKvINH4WA7YOkW5/j/DuUim4jHew3yMZocVg==","signatures":[{"sig":"MEYCIQD2X8RbLsS03HR+45uFs9LrstVpF7nyCI3qR0+2qMej8AIhANGSDmdMROs8ZKhhh/PIItD9e98PmlinK2YfTHoYpmn+","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":910222,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcD21eCRA9TVsSAnZWagAAWl0P/0bqCPS/D7XsVCXUK/RJ\nKvWoLi3cZZ5p8iuNsm/6alasQwCL+ze4VKobbNEFfmCUu5wyRwgf3ozGS7+P\nyB8FgbH9NxaUGbSPkqbSmMpbN/abbUtDBN8xFKt0EB2SvtzTj/epfgzl4oJ0\nQMSfSKwgscL4SgC6+VEh9eQz8BRuY5xwgyq1FPfquPVWYlLoA2JkEN2XK14k\nEjQfHGHejCfslBtSDV7QZa6/6GM/FpHVAJ21hAfbcKsaWundKNQGo0w3SqF6\n5tiySOT9LDr6zqCuUmXd9mrMlfWhA2LLfIIpgb7ZuJs+oabRvsthAa2bzPNi\nN1fBd/jbJrNcMRKfKFzICVIrMgK+Ylh4Bxc6YEYiMk8Tc3u180oahKpfnBYU\n6ylePBpRtprg9Yd7crNgN1Jcq3nod/4OEdmVvaovQJAQxxPunyP4q2TAZoZg\nZ0Mc1GL4XT0IQSXWka7fLPWbVWrEx0KewcXu39EAaQiAHfrdI/1JHC+ZdlZx\n8/+ctMVJfUIjtjjnomMnP8JpRZDscrlcJkA5XzaxnHCmX9P8nkX1vk0yZh8I\n/D4KDnSmrcRChHx7RhBsVrg0ewyBgDb5EX+n/VKaQo3Igkna2slU1FtWxPB9\n/POcKN2Ovgs1+6e5pGPVyJ9LOx/nLnNkShd/GDKzx6HfggX/9oCQ+Q/DusGg\ndoK9\r\n=LsdO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"448751b086fb4d25ce2c9e35f42069f106bb3877","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.18.29_1544514909338_0.34512120164465254","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.19.0-add-hello-inbox-0b3993070c395d391ebbe5edf3045da8147818ad":{"name":"resin-procbots","version":"3.19.0-add-hello-inbox-0b3993070c395d391ebbe5edf3045da8147818ad","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.19.0-add-hello-inbox-0b3993070c395d391ebbe5edf3045da8147818ad","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"156ec8a4a8931f38da1f7137de61e399dbeaa4d7","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.19.0-add-hello-inbox-0b3993070c395d391ebbe5edf3045da8147818ad.tgz","fileCount":92,"integrity":"sha512-pC6CfPOCP2iyS8pzPwWrH+0FgdkTE2tqK+eVT++OIZoGTp7f7gbBWbkyQ/uXTaExGoPncR40gr8ffixFEZdsOg==","signatures":[{"sig":"MEYCIQDe+ywdj6B/zbQxzWAhzN6W2iL3+XJXaMptuoxHLKA1iwIhAPG8jMak5aoOHhmDpWN4WHdfyspDw0exciK1ESQodJju","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":910616,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcF9etCRA9TVsSAnZWagAAI2wP/R1dftyJr7aLiPcDfILt\npGD6yC41sISOu/NSPSbxPXuZ0PGl4SzppUN6wqXBhrXBQc8TUVKTd6KVVcHk\nNE8XqUKqcfNAJ4pPLtzZkbeXfDEolqhRBPjgd3EwoQK/CE/0O12ZfMKzETJK\nUTGNduOIeVMzZhmVtV404I3T+JbsDYNvSEDVzIK9Pa1eIX8Xylg5GKdck1na\nP7f6TDbcw9Orw6eT6dpbryUjXFs8FqxWRTe/tvjmq2pUe/CpMzq+fQ8m8b2c\nkLmlPYA0wJlKKysL6Vfk6iDm/zB1FegekdEnt0DmPRGtq9wjYf+FlQou8nu2\nsNxpJeNmoDbPQrOr6WJ0QIzxAFb4bqjllZPakJfWmFmwwoGPTFOGFkvHuppq\nxK+f0YdrEL13RR1wLj/RRR/yVklQ6PNjWwLQfe5e39+P7nJNyFvWGSmA/hMI\nEDyxRW/3x+6rpyNHvUl2VykDhwPXnn2NDfEJbp8YN4Gd//KQXHgOc/XgCvUd\n4fIOg6bmejRu5qhX7Hb7x/D05qI3fGesH9xbI2tvKmnkVDiwD6VV1tWMK4K7\nNVtSdlJm2nkDFArwHmKtJ9peAT98Y66qsnuWA801/+xbNrlSld0h0aLm+NoH\nfDSzuOOTiC/qKQ14I776OVwGPyb9f4wiEGYGa+5VPyGg6JmfSJunB4/UEczJ\nYtYc\r\n=dJ6K\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"0b3993070c395d391ebbe5edf3045da8147818ad","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.19.0-add-hello-inbox-0b3993070c395d391ebbe5edf3045da8147818ad_1545066412750_0.8816212398741408","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.19.0":{"name":"resin-procbots","version":"3.19.0","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.19.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"622cf5c60d2cc952669d225d6fb08e844dd58001","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.19.0.tgz","fileCount":92,"integrity":"sha512-iOgX/3PEV9vvpnPskqO5bQ+LqnKQvoX7V2cdpt0m9df5Cy9r+6WlbwjgwTUDcHxJC72vBPMa62kC4kG0m3hiPg==","signatures":[{"sig":"MEQCIB8RMb1pIXnZ0tvBT7SsNwamMUgZk7GORyGUmzT334EoAiB8gE558fBT3wvHJ4Rca+m6zwlhVN5vBRYt0qz/nbffrw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":910404,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcF9lBCRA9TVsSAnZWagAANS0P/AkBx18MzHZ23GlBTi17\nUQGSoybXnAEf6vl3DJ++QvVD1boq7pRkaRvyGYrPA12lK4RcGc9gQVu73Ahy\nU1gLZqbP7YnwMZVTm5Djoy3JLrRvVM9ezZwSGda8EfdAqspyo/bvUKBaxxZ4\n6bACiGuSr2QkVc20Ab04Y2JiPkfe74xx+MX2ur9kO+L9lkzui1gRKT4Zb1sC\n3nULtOWW9P4ZIsYeMSpswSqLqZ/MkxtYUXsF15YPlQSTIT6Xu5X3BYcx8GlD\nHeerBi8qOytkeDKctM+hewewQfF/3Q/+Dy9667F4ulkiVFham20BwE92Mxgp\n9dx86QyIWExKnC0pMBPcmG5wWggdrx2qkdEzmK52NqPozcMUsNZAynjwV9Ly\n3SwYg4fH3/rc1D0gUYJtcPtYU/+nCvmrXydFFrKxLXKbmtZzUnU1uipiki9p\nItQqywLguxCDtU+KNZh0ctvLop/M6hDwvgyb1rfmw3rSEFBAAIuNR0zGtIpe\n4e0KiyE7cyyRYVTyp0XKKMvzlCfUC4IHl2rw1bvLXaGnjunOS1QyRX0VMfQD\n/YgkehfvZW2I5JLqrzaJGwzUjTrzeAT41GS4eyQYkRH9Xdx6ZitXSuCfas3a\n/pQbhxTdQgiS5uIOmcaHwyuguTzkEMGY+tbxZShcpnOGI9buEj7bn2/2EDXL\nQDG6\r\n=Jv/I\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"2956d16e6f8873099b2314affb22c1bc12d6c671","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.19.0_1545066816705_0.48951249539846753","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.19.1-bug-fixes-8e182d2146ff0f182cc0c794432bd3d8593be640":{"name":"resin-procbots","version":"3.19.1-bug-fixes-8e182d2146ff0f182cc0c794432bd3d8593be640","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.19.1-bug-fixes-8e182d2146ff0f182cc0c794432bd3d8593be640","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"65a25acd08faedb26675fd337a66d207f4b8dbb5","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.19.1-bug-fixes-8e182d2146ff0f182cc0c794432bd3d8593be640.tgz","fileCount":92,"integrity":"sha512-Ph1aLk2Qiz8ddfSDzYLVrQiUmVQUWmqMXt8Fx1byxrE6mI4Gt9AW8YMQvNpPiiNL54DSmCiKnlcP0cr4zD5+2g==","signatures":[{"sig":"MEUCIE8nxzSmmcMoBaS02OM0XcNbBZGdJidCwPuRuxEn0FAVAiEAzr2UROSTpulM6fIwuXk0Rybi7UlV1p+62gVlCBhTqsE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":910443,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcGOSyCRA9TVsSAnZWagAA5FwP+wUnQ2aZdlAn8o77sUe7\ncS0pSFzCsisNxmDUL23dtGp4imOFFSnkMkZxo6IDFJislDsitotpjYz6K5S7\ngYNECPdZigorkr38umcpQZsQSlawxAaSmrSXiPQoSQse7t735jf4MARns9Tg\nVdA6s8VwxrrUZuqKw6yL7oDDWXgMAwb9AzUwRIEBcuw9rNQsKfYZehVniqDZ\nkXvM2Zcvayyn5ZW2ivjSuFK6CaSemae3OFqm3COeV2iDzFQ85tgdtF/KnLKd\nxi64XRBPEzGJh9r84NxRCa1tfr+vwL+QqKoXMn2o783wpHMC2Cq/FHDBULg8\nXVCkwVG16GpQIe8yvlyAre4ueyVQjccZxr591PXVyFDz99Nf/JdW0/gUEtdx\n70L5LOLmB/UfmdTeiiegBUCyXHtcahyxmPPEDlOOuwWWuF7chxJeFTvPLXAl\nQk6YYZooPKTMPj20JZM0FSBRr2tdsm0fAFrPTrQufr9I4rMHRazLnejgzXYe\n+YvDbgFfo4k2f+9VIJCGDoPebiao0c4xH7W2Ls1IvaHD3KUtrIg08ti/kHgB\neuuFbqikAmmXrEFxzVPRB4VFJm5l4NG4eN98w8EmGoLR6+09DiirxDZUnFwQ\n+IzBFp54MP8VgqvkaU7wQZHjCmZo8uP8XQVEVWCD3x1ow5nxdM6cYGDqL5nj\n5Oda\r\n=z1GO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"8e182d2146ff0f182cc0c794432bd3d8593be640","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.19.1-bug-fixes-8e182d2146ff0f182cc0c794432bd3d8593be640_1545135282287_0.261124526772051","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.19.1":{"name":"resin-procbots","version":"3.19.1","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.19.1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"44e82e00aa73e1d9985ea545ef0768790c6a9c05","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.19.1.tgz","fileCount":92,"integrity":"sha512-pfJ4Zmaiyuepi7dW0YAIDAGJewX1FeWNhKNxd6FfxPX9F2JEIvpVIAAqlBLO4oCk84cv3jklLmIQu2QX9J/8Lw==","signatures":[{"sig":"MEUCIQDbXtJC+LcmjD/LO2KZ+oxDvjvFNUY7eB3QI57FrcqyegIgFdmtwhcB7fHl7EIs8UHH+UIh+YjSiMMCgx9C7SFWJ/o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":910392,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcGOcfCRA9TVsSAnZWagAAO3oQAJsrXMiLGVUqoFFrYk5M\nzt/VRrelNaccOS8j0fOXynhwuVgt38/ri9nJLHIefKy3UMltunRiKO7/pv1F\nASkPYfqdkMyn8iXChu/qi/v1Hx+Newkq8XqyWl2PgYF8Dbqh+qvM8iJmpEx/\nIsd1j4t98mjLXeLXt9Yr/KJXddUWUBbsRdiaHOgZs0WJbwqei2aSBvF6+BYS\nozdsvVR8OH6NmwxRrcZDl5DVvDCnwNPMgdaRhTkIfQWi2ZXZYEjKHCkwUhLq\nbqlU0DUFo0RtGPqcrtRxuJRT1XYniuJKxMNd39rfI2rRIZDZklDYoITmWmnX\n3y0kJVI6o0B4r9Xr7lMbhFlNsp0FtixxTnoHX1ImM6ywyeYFZycQ46x5h7IJ\nqk1dN3gltiehBA7ok6XVRe6JLltpEJahsKtntMWdAWRi70cG/BXC8NMwed0G\n7l37kpUprO+8wUs+MlBjesaJFxD3ZnOnJDRYEu9eiTFgSpoaZOdw1lsm64DU\n0TvjitDy3+aJh/Nmjozq14tQ87MAJPqqhHEFGMDyb9AebjNVIrsNTxX4GalD\nA1mMqxU+utQRfK3Zkhggqe/TkDjB9yUPBSDp/NErobIGDXSIywfN3DbU8Y6W\nI3305fxm2F4AbDlOBHXEvJdql4eE+zt//ffffG9dDP4kJSSOkzUof+B4lkS3\n/pVN\r\n=2VZJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"51c0cd66ae772453b1c36910378eefbe75a4fd9e","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.19.1_1545135902461_0.8649689337029156","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.19.2":{"name":"resin-procbots","version":"3.19.2","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.19.2","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"46d5ebb4f861abd0937474cdb99dddfcb42c0f6c","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.19.2.tgz","fileCount":92,"integrity":"sha512-++ZdjPTL98cApMZa8xRy+9ko+VjNCeGoLaFlUfWQvp7QrINvm/ssfTfMhhdKK9P4cc6Gdb6pj+USXz5jQXNo6w==","signatures":[{"sig":"MEUCIQD/wZnunA/ZCMSsAQNArFU09ymkSqINCTwZtm/bWgpwewIgLbNPyBChdmJg54BUOwy6F/wWv/YXya039rZbQ0oQV9Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":910543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcGQ+gCRA9TVsSAnZWagAApk0P/3eMhCRUDjm6RTHVn+Sl\nOAWpbBMrdmpn1EXYsuVVSHce1s0lxxEkvQYZq4fbn37sb/c4sUeW/gHbTRoC\n9oQTDj97RyySjpWSZpByRIKOADairSjvJQ+uJyg9gNznqYWc8/arLDYlQeXH\nMTl0WTMbnbqdckoxuTBpgu2r83wHQvdALIqZYyCBG6o8Ce5Gsjs3OXRpRbVD\nFnMw/j1pVA9j5DlXzHplnAn9rFM2ph3eDK8kpyTHqqpiLKEK6ViaQgFN0K7z\nH2e0ds/oi6rwPgrfhWDf0iLpdIH4E1b3CeL05M61nl+FmikKtHTFyR71Mv/T\n6sH0qYYRB1BJTQFsmzzO0SN5LBWAr3xEobWxnKCLV9x5mzaJ8mj9mmARVyN+\nOyMjEuxL6dyV/8Ypp+s3Wxen3zu+eoVmMynAQ4odK7VJunC59Qk1Z1ad6lNR\ntIFWGl8IKtakBqhkH5/rxNcjR/4t7hPmVOWBfqjuiL39G9TPdjNykmdQRqVg\nN0e4Zog9XGoZRQZg40IyDmmxGll5YtqMpfbaaSkeyvMB+gKsfyCpBhbSP0iC\nfjqil7QaDZnBOYIi65BKzqJ8aWYo9eSGIphxKZ1LBBVnZTcwSwbIEiRO79o0\ndpeV02XYntYvWgZ9QVipJy/qh2XcG64lwHRWrvzdDEMhAd0GutI9rquh1BEA\nOEI/\r\n=wFAc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"21386ff1049f3e3f58b179b15c0a67345d1d37fa","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.19.2_1545146272281_0.3062438044274953","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.19.2-enable-inbox-channels-32bf56a4a0f77940172948e41087a2aded3eace4":{"name":"resin-procbots","version":"3.19.2-enable-inbox-channels-32bf56a4a0f77940172948e41087a2aded3eace4","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.19.2-enable-inbox-channels-32bf56a4a0f77940172948e41087a2aded3eace4","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"ddac3ae4b7bc3558ad4b45c08266d114f584c995","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.19.2-enable-inbox-channels-32bf56a4a0f77940172948e41087a2aded3eace4.tgz","fileCount":92,"integrity":"sha512-EGEp4BkgyFgye9fhAkR/IL9I07TnqJwZ3r5Of5aTnRoOAIVTOuR8hf5yW55kzKzJoDwxtdWsmcmrF/YVAaRdrw==","signatures":[{"sig":"MEQCIHJXE26nSmFzpLBTKw8t/0Famc7GytVvhjX0yrZxPkg0AiAFMET5v00PiJ5DeieIaqShvx0KpYykrRMyhp9gtilzhQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":910606,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcGRBACRA9TVsSAnZWagAAq8cP/RT87Pvq8iGjVNop+urf\n3GXk1tfdQrjU+k8qyQ73c39ocfPyQH7N5KKCL3ritnnWXcwXmjan7dv+IGUl\noW9CNpv98X82d5si2Law5jrSfczjALkd4j6A88u+oqVlgMTXlsUbR0lIg/R5\nGBL19mEojRNWxzw1JJWvcZDKLZ15rI0QDpxKPAJ6/chYz/3w4OQA/NaDEbJQ\n1HxYXcqcyxdZoXzCt1XNwfGzfZXWZuFoZAZ7mUGFX1XHJTJs8cqr6it9whRn\nJIZ9/f8jUMk2p2b66fdgmksfcahAbZltlrmka0irmXktfwdAF1jb8ZiTT4i2\n4dd/LLmmDjOSuJ/8V7Q7YOvS0GWFhmYrb321wpJbfyPWvbIPabzLRHpDlHjw\nyms2DsI3Uchnp8Yq689vKRqL/ghV6qzau2nOzqzIm3CNQI7of8hI6Mf5edj8\niqmaaGle/VT+dXkLEyMmsMdapzZmokdBgLXY+eCb/KiieSLU/upA0XrhcAyh\nvqrhUQCLA0zqHnMxkiM6zuKKym1gq/UEG6Ot3dHZEDYpV2p2YEpScxX4MscC\nKhMFpLkPY+boxFp91h3GyT07n4d/n+xarY/Uxrx2hgaIvNZ0ozcYi9xTN20M\n2tFrqCVuK7XdLNJo2QvVWp2aQvubEfkcN90zW2TdHXWSxjOzYX3MTwGxAozE\n2q5X\r\n=rhK2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"32bf56a4a0f77940172948e41087a2aded3eace4","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.19.2-enable-inbox-channels-32bf56a4a0f77940172948e41087a2aded3eace4_1545146431853_0.832508273793735","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.19.3-fix-hello-inbox-886457ae93c81ef95b27d6882371aad9b17d8528":{"name":"resin-procbots","version":"3.19.3-fix-hello-inbox-886457ae93c81ef95b27d6882371aad9b17d8528","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.19.3-fix-hello-inbox-886457ae93c81ef95b27d6882371aad9b17d8528","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"25a29ffe95841a66b384acab34e587f4d94dc81a","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.19.3-fix-hello-inbox-886457ae93c81ef95b27d6882371aad9b17d8528.tgz","fileCount":92,"integrity":"sha512-xwMI0u3Mh3fSG+zFBDr6YU5AQ1LyiD7xzKg0iCtzTFq3LpJauZ2S9c5uo/w89j4W+7ItKgyRjoEr+RRaOawETg==","signatures":[{"sig":"MEUCIQDU6lMtkyEpssQLzH8LFZDC7e39tL5P5R0gvg6IJrmeVAIgBQSQ7xm0cbQ3x18bCFT1TtHcij3YKu8DvLMOk+VLbUo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":910667,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcGShfCRA9TVsSAnZWagAA1UQP/2LcTPmo7vFWuTrWw0Y+\nWYCo11S15Dc+089wqF3Vdiq1m123QmM+cCTSX/nB/z9bvEdyNLzVT6vXoHWx\nk+ECJ6tPMaqkZiA8stBmbCFwtfEP/kwfb+3UHMoE0mHX44MOPEcc/gL/Gzno\nFXtoSZU6H2w0qCg+YmIE6nS18E9fC/JLBUr6MiliBuKa4XtDOpoRFVhvCiGp\nwyfWiGDcENSPqD3FQ9l7gUOhs+JbaY4wyYsjdBPtVBYWyrYZQqQbIk2Sl6OU\npiF+P2h7sWcttlNCbehfFEiWLZzGS/PTDus5Wm6aOGfUKMNkl8iQ38+mKUkx\n9jz2pasmWQC5RXbssSoN7Dqj8ot3J43Y/YiBbmBXyxkOR1Z/f2KhUKzwV7zU\njXGn/jn/bnaitpGjByr82BPYLD95h9BWdWKumMJDgewtHxlTq5WvrE0oR4JF\nWZ9SzI0V3KZro6ARxtg4wknmQLY3NoCV65tchkWcSBmgaIWs2QR2me63DUXM\ncVp4HDDT1HMNJEWT0C2Eq8hkoGwoJjuLAKSc9kpiDMJYj0GnD8zZRIzV/12q\nqsFM2sZe3aEwPBUPYiyPjBU3XoJ0zwoJvLkAfPUM9iSrw6aV50vrwMfQO4F4\nZuW8DK6AjbH0rTLLNl3tivaXdywWI/I40rvRvoA6ka5KQTeUW6oDhfflhnQ6\n3DZn\r\n=j41e\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"886457ae93c81ef95b27d6882371aad9b17d8528","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.19.3-fix-hello-inbox-886457ae93c81ef95b27d6882371aad9b17d8528_1545152606630_0.9622194935649102","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.19.3":{"name":"resin-procbots","version":"3.19.3","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.19.3","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"fb35b0b60265b0ceaafc4671ff353b8a0ee93727","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.19.3.tgz","fileCount":92,"integrity":"sha512-cvspg83SM8bnOLDHfS+r+DknjT0qQ0KEX9JXyfgHB685xqpvfb8rctvii8YchaZvgGpTe6ouh1R5CWvs3Xz8Ow==","signatures":[{"sig":"MEYCIQDhMr5BebO86pYFuXmBlYsEwaQYPja55ielnkPEfRHoLAIhAL01fg5nE8PqqJ+wCV6TKfn2FhCMX4aS6ijO71xbe2T9","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":910610,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcGSmlCRA9TVsSAnZWagAAlSMP/0yUr7Rjvs6qZR9erYk2\nyDZLHuDnmGQDKB3tZXty3EM/asYFbIiwOsM1POgVXjN0y/TH/m2DQt67CLGK\nlbOevhy0OaWTsPpw/4HowfMEw+k89bCZYXsWewL6SRmhyorNvbozZsIks53D\nWg2RiCmMYlLKKgY5sSMr8IUaQPmdTd3NHsxc8n7ZGewb6wtLUQ6IFtC4UhuD\nYnRr2ElSd2vRaA3uzxsic1u3u/kh5UkQmMckKq4JcuIELpvg0fnMffb0nC8u\nFJhaCKZG3rpjRFMJuheczUqvJvm+VCZfXdEyyKhOc57yiVx1NijavPwfLQge\nnM68ckjbN/bDfRTL6KYg87kfEgDpK4ZwFtH+XJZWU2RemruLSiDzKtHGXGPx\neqW3HQttulLzbcjytG/Ba/7unP4tE9RtLTkN41XZt3hEP9EhEBu3IRIc/IwB\nf4w1BNvLDstqftmhZk+cd8SvG3etpHEZncJqiugxVDCN5YGJDL75WvbOyl8V\n+2nvaNFCQuJxnyjRmS8dicobi38pYTtG9I8hCMIhn2GyRjumXSLCQYDs8/DL\nqKlB/uZsNDLOx06aUQyHz4AAxwQ/YIt9F107QPT+lathf++KW/dEwMefikgR\ndmVEp3pOpeamK/OW2sTSXw+jsC11O02rsoLI1xOYLHcazn8bNHGjnCE1KhxD\nBMVz\r\n=y3+a\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"a443fa214a432d5c7fc84c812a0373a903667406","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.1.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.19.3_1545152933280_0.6511203282272835","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.20.0-sync-balenaos-e1c3d9fdbea8d4162168e17ac4a86f41d6835f4e":{"name":"resin-procbots","version":"3.20.0-sync-balenaos-e1c3d9fdbea8d4162168e17ac4a86f41d6835f4e","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.20.0-sync-balenaos-e1c3d9fdbea8d4162168e17ac4a86f41d6835f4e","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"9983c41b2632a240e611b0a2adbe9caabd134ff8","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.20.0-sync-balenaos-e1c3d9fdbea8d4162168e17ac4a86f41d6835f4e.tgz","fileCount":92,"integrity":"sha512-Fs94Y9Fccyq39cFkbDrPQR4w20BT0Ua3V56FLnHiQAxcTOO/JXW478WkY1lPrIVSpQeFnyCEbqKL0tluyxT9YQ==","signatures":[{"sig":"MEQCIHtQHJ093mFbGT8A/9aczCpFq8YYK4zgHzb2T6dRDXE5AiBH0njRoVxV/Kd5eyltZsp/BrOET1QYzYqFBx8fnokUMA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":910735,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcatvkCRA9TVsSAnZWagAANQ8QAKFFHC1XkKHGWO2u+BfQ\nlRBAvE0tCayLU2HaxP6kdlbX22N5+3kQNToZYLn0w599UdkfSczIduY1wIvp\nAq6qjrowVmGTPmAELqhqrNyydbxMiWODOvSioa6Oj8MIZP4OzRDQLJ6UeIJb\n2czuwtRPE+GM+Lm+GVoCW5Fw+n44zjgNH4ugWMaFc3Y0s1tj5IwH1lXyzzXw\nycUgl53LcjmxXMdapbym2T2gfkZR4I+ichkzSJh3jy315E4iNeDqt+HKtSC5\nQyVXe/rcZ/1nketpnFHH2LLa8a16xFHHu8x9XbLTswsMGHkP/aWwJds9sTgu\nZ5irhpqBcbD3VvQaQ+2BDjYqYeyQzXmKhOHg8+dlGlvYtgnEmQM6VGGWpiTq\nh8nIpJhjASIDFCYdG3VqraQYyxJskp+JQLzbnCKXOx4IohtFFScjSjU3ViN8\noIWLERfjVSmAiNw/YzdG8BGpXW31th/eZPv8JII4C5U/TW0I5WEN+3qrZdiV\nEDuAiPbYEj8Eq05SXuw2Xda2A2TSHMmJsKJaNTC7i1oj+LJ73B0KDfN5bRmp\n2IELME3JIDx+bZCckddD7xjlOupyPhr2J9oaCZulL33y2JBeMREpmj9CvKlt\nF3Rr1kTVXyx8Omfr/fMYVKsED4Oc7CczjHjZtmejVAHxmxIdCQc+H+346f0a\n0KsE\r\n=NNET\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"e1c3d9fdbea8d4162168e17ac4a86f41d6835f4e","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.20.0-sync-balenaos-e1c3d9fdbea8d4162168e17ac4a86f41d6835f4e_1550506979310_0.8487343804878964","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.20.0-sync-balenaos-f75e5fcfd7f74f62c7e988e1590ee79faf4a0b37":{"name":"resin-procbots","version":"3.20.0-sync-balenaos-f75e5fcfd7f74f62c7e988e1590ee79faf4a0b37","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.20.0-sync-balenaos-f75e5fcfd7f74f62c7e988e1590ee79faf4a0b37","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"bff318ab69a6bbe49a00478d116b8072ecebd636","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.20.0-sync-balenaos-f75e5fcfd7f74f62c7e988e1590ee79faf4a0b37.tgz","fileCount":92,"integrity":"sha512-9feGQlSgmSVX8aajJY7BmgsNTlj3j8pUupO9v1Mx34CxSg226TgWRd0evo3Q+MhQgGkRXI23p042Ap37m7KT5Q==","signatures":[{"sig":"MEYCIQClj8sw0/3+EdYR2nvbz4Q44bbEEMwofr7Tvvp8qHn3pQIhALjv/tpVI9F9t5mt8uQ/lFo7jXz8WmyDn7XbZUTIfpUO","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":910639,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcauIlCRA9TVsSAnZWagAAD+oP/010qcg5V3a4FfXQVwcd\nf3Bfc7/sb7qLHFbfDdN6z7kQwxUB2fvSBdw+IwtZby+BMRzIJY/i3kZ92FBy\nnEe0Sf2BxXhOPAPuHDd69y8/65/X/smCbrLjoCNudKW0waRXkxo0JVzy/zZx\nrsdCPBg7dIlr8hkxUVCuI0qlicKYHiEy+yT1wE26Os0puTOXxy/RZOgY/PAi\ndY6iwjTmBNEGIdbsi8KNqIwwD506fl5yVXyyOxqZ7Rl17AL3Q4GjMu2msmgx\nRdV0p+2W70ZeGFBCrhWEHUJRLsA48XjwseNXjk7GIk98CG7UK/VKLDon06pv\n4njNIRXp7tPHg1Z/zPs8gS2xxakSyBdeL+c1Tl0IgH+euue2bItH2aDybKaA\nKtmfTJUx0IHdAzF4Kab27VqOZTM1WnIQFldjyGou/bhoZa6Te4cw5+GaGAlT\npPLAIsCmAHhNE5jpttGDZ9+FtoHn4VO9ZggN24H2J+rrAiYUL9hKG0WYu0Ex\n4/0Z6TB6OdxIi9FE7oBPVvOm/VJmVLaFPRnzxi6Jrtz82/SQ9OxnutGLe8Mx\nSJ5F4CS2YO1Lbk3rfCXFdSgcnUlHg/P9JIhd8fHuAR0AKd+LQtvWnWOK57pF\n8kYEMGnL+WQ3VfEXZDK2pUcQZo5lnVL01bb3F27wrTqQNOeO+pxOaN31uKDx\n5qsF\r\n=f51Y\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"f75e5fcfd7f74f62c7e988e1590ee79faf4a0b37","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.20.0-sync-balenaos-f75e5fcfd7f74f62c7e988e1590ee79faf4a0b37_1550508580982_0.6091098090047371","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.20.0-sync-balenaos-1bcfbd0e9ccbbfc3ba4ab1e41e8de6a43375ca6b":{"name":"resin-procbots","version":"3.20.0-sync-balenaos-1bcfbd0e9ccbbfc3ba4ab1e41e8de6a43375ca6b","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.20.0-sync-balenaos-1bcfbd0e9ccbbfc3ba4ab1e41e8de6a43375ca6b","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"d11c137a1ea5704e1f36d2b790c21825898783f6","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.20.0-sync-balenaos-1bcfbd0e9ccbbfc3ba4ab1e41e8de6a43375ca6b.tgz","fileCount":92,"integrity":"sha512-NBQqxL1kp07qBTn3sS3qSebrc5KP34YPq7hS18ziTgCr3AAOivtPU5ez31SIMa+O7rmrd9CnnRF4PHNeCsWPbg==","signatures":[{"sig":"MEYCIQDUaVUi7q2b9yvxS1H7b9ADoD5Vb2ZZgy2Rj65fvedEywIhAKVVor1AO49+wH3oKR8LJojY4QLUvm0mHoHuSNnfUMYP","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":910638,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJca9+RCRA9TVsSAnZWagAAvuQP/iFKpIfLfekgpX1qPfGW\nFFGtAIO8u/VY062pnqMs+3+vZRgC4jKtm1J0SNKNX2yit4XPEBd+cNXNcaEU\n0zE8hk0IwCbe1r1p1CioN9Pas2bKYZsc3UBDU93efuf1WVHfCCTz3MNgxhcB\nagtEJq6IhK1ePQiGdXWHraxtGDIWlOTeWXUDhIzRWUvOZiLJOr6yVC/dPdhh\nd7GobWMPmy9yzIskHk9BIoIFAWMgIXHlRfXZijQ43wLZqpiSK1tDnkKA2xx4\nA+E5p9g7fxxMuAxVtGn82tXe9HB8wyyf3kKpZ92vydHCuKwREBfxURos3DQz\nwbg5x6kKW8ezNcjHwup10x7Q8m7sz0Kn7zQ8lqYzBB90ENzf+gajvtIeu6DM\nYTkLNemOvbOdKKGvuvtXSHPv/yPx56ygWAB8q1r6LKRh1f97tEer4fLD5Tr9\n2ma4NZU54GBFF6IkGta+15DADygdhcx0MZ0OkDAwnWJ3Sjnrs22ne7UojJ4f\n5bC8yRz4fOMD2l2ttjB8oa5Sn42kjNXJVe5S6e7K9y6SDE7BHbAcKU5yfzrj\nRB5B3t2G5nbaaHxqmV9v3xXMOZmJf9DiM1lLRePCM6CTgGgNdu+xUejnxSlp\nw7xPs7eHVwXkwFsUflar0Y4MW2459x0lyPw2tYxgk/NXvjd8WF3QImlVCUjd\nyH9m\r\n=ODEo\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"1bcfbd0e9ccbbfc3ba4ab1e41e8de6a43375ca6b","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.20.0-sync-balenaos-1bcfbd0e9ccbbfc3ba4ab1e41e8de6a43375ca6b_1550573456548_0.41118532305395794","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.20.0-sync-balenaos-8717d99302efb1895ca7781c50c4b6724a1788d1":{"name":"resin-procbots","version":"3.20.0-sync-balenaos-8717d99302efb1895ca7781c50c4b6724a1788d1","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.20.0-sync-balenaos-8717d99302efb1895ca7781c50c4b6724a1788d1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"2009d7c69780402fcf0d99743fd16a6e84aa0edb","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.20.0-sync-balenaos-8717d99302efb1895ca7781c50c4b6724a1788d1.tgz","fileCount":92,"integrity":"sha512-JpyN2GLxkZHGIl8VNaGaDtwXEqOd0UEMXNJKEYq/PpbkpdsxRAQWBSGlE+VPAgvM+IYk5FLvuudETbhJOs/sNg==","signatures":[{"sig":"MEUCIHUj0Ba2I9/9+cRCj9zWin8buazDSZb/Usw6CWgnxq5DAiEAscbfkwIYnhExVQnn7GWIiEbiAVops+NmlHjWW0G7Po4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":910639,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJca+JVCRA9TVsSAnZWagAAczIP/3h3y5T8F6uL6sCwenBr\nOWgINruPT/NaUKQexw4Hz1Ey6nZJ6KF5Ylk9rf8z6qvLaYUwSRZPNLV4On23\ne4gGkNZ7k3lNNNCvBP+so6S/QuAFdvs6Itdrtp6Ced9Pkxt9sgmHoRBRJm7M\nbjLZm3ZG7Pumyt7Q1uzRZXSvgAYvh9BjmtHQMXUh5YA5RURJFjiIw6omVjzV\nN/XKkuFwCmv9m3Vf8GfPtMNzx3h8cpRs6655QNgpTgXmxph2uEu+XBiNJYIG\n1LQeDB4jqRPFKXOckTal++OT8cBZ9x0fIkRju1JzNy0KdMDF5n75PRhQJi/Y\n6H6CdmvigUWhSQrnGOVjN+3+/8BHyaHq3r9+nRL67qFd3h/+TCWvnR0/bAta\nKaIKfwC3w+Tmz8LN/7EJj2+/xVpCIIdCIMUK62wq1smf4CeRcLDHfsS0C8MS\nOdxBlaaZ2H5JcNt8JQ7ZIOZoxXbIXfkVVPSPZfniWrLGraW0q1LkRARmmvjF\nyhET6qSF1y2Erh8OtPk4OLdr5r2OKN4rJxSUIN5WTCeKny4LGaIjPPLLYQRu\nzuscdkZ30rqbLou/DQL6vQ5cFycUksVdKzCUHPoUkG7BR8myOIiBS5oQn9WU\nDSIAB93HR4hLqgQTTWl/Kn21+ebRNZMtORA4xB25wjg+ByK9dXE+uhccpxDX\nb03u\r\n=k6T0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"8717d99302efb1895ca7781c50c4b6724a1788d1","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.20.0-sync-balenaos-8717d99302efb1895ca7781c50c4b6724a1788d1_1550574164822_0.30206762555752387","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.20.0-sync-balenaos-bec5f04ce3519825a5c7e0c02d55cc15147a6af7":{"name":"resin-procbots","version":"3.20.0-sync-balenaos-bec5f04ce3519825a5c7e0c02d55cc15147a6af7","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.20.0-sync-balenaos-bec5f04ce3519825a5c7e0c02d55cc15147a6af7","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"3d8cf19296a666c86e0edc183d9463c9b8c5ec92","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.20.0-sync-balenaos-bec5f04ce3519825a5c7e0c02d55cc15147a6af7.tgz","fileCount":92,"integrity":"sha512-dVTzGITb4wLzmlab6FVZRL4CU/Qn80CYwXlqeAX1USvj3P3wOwZD2nttNM3osQdUA3ihOWmrMjjspJJmaOxVag==","signatures":[{"sig":"MEUCIC8Tu+sK+OlYwOT66RJXcGSe5L82NLTC7JMPnI4RXVrlAiEA66Gv2VBj+dArGUw7t1pzgQIgsUOBWSUxXW830obw+VM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":910823,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJca+q4CRA9TVsSAnZWagAAlzQP/0B18xCV+/kpIx7Ehaha\nYYmJQ/v7pdpwKWLakuecNyomPDhmFd+n6GHypCLYHnFemlPtWufPFEOGV9jx\noKNCfpZL1g4ln7UawU0WpwJ1AfltOmEKw1fm+ld4LYVQ5qb8qvtTrmhcT0qm\n9lKGNqu1fugYlDGDj4A3igzTMS8W1FnQWnwTlYP8C9gBp4GnJjELDR1XMbgA\nYQZLahgCKJxb85z98L3gLKy7ZjBIv32EfMc8O7Wu+mKvxatisJ4X+qLJ1Ea6\nDXywHIjZZd3D2cQJoFXpDZENDGDKRwEfwKXRTXXZhj7si4nEEf0vXEGS7UR3\nodQmLtXuC2vOcNi1r4KKkwo3h7+7N4Zmq6jt9Hil8GCYyjrqlk8i/FlJkzjO\nS17SfkvInZpsLiiG11pcEeMM3U6aWvU5kdVzWACWCAmvFo4SKkxSeUeWkxwb\nlam19CNdAzBFZoHOSqmUeVh3Qsvq4Ai8jPFGOBh3YDICDs7b4w1dMDbpLNiq\nT3RKnpolbJigTrD9fLAl2PPC2vxQ4rfLERyZiD9Mg9YVtW50tb0n0gypTUz2\n4h/fkUbkMxDkpunFRH2vyKoCM4WiYk+mDN+mQB/3KRgbiuNjGavm+wfuOMCX\nYRv8xzukMY3T9QNs3SFGHse3aTnhFyKiIoODXrTYW8Wh9wmvwG39qLXuobot\nGAXs\r\n=MmQd\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"bec5f04ce3519825a5c7e0c02d55cc15147a6af7","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.20.0-sync-balenaos-bec5f04ce3519825a5c7e0c02d55cc15147a6af7_1550576312375_0.6149201989559696","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.20.0-sync-balenaos-47b4a543bf6513bbd3fe1af2bb43e160c912b9c0":{"name":"resin-procbots","version":"3.20.0-sync-balenaos-47b4a543bf6513bbd3fe1af2bb43e160c912b9c0","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.20.0-sync-balenaos-47b4a543bf6513bbd3fe1af2bb43e160c912b9c0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"b01d2fbf1197b750e86f153f39f4e2985cdfdf9c","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.20.0-sync-balenaos-47b4a543bf6513bbd3fe1af2bb43e160c912b9c0.tgz","fileCount":92,"integrity":"sha512-zhsaDusH8rH8qSgyxhs2x9iKhf3aoyJiG1D4Uj8iUAPy7og4zqKusUC1wj5i85MEL74F4F9jWbpeIw1E00iC/A==","signatures":[{"sig":"MEUCIQCiplRydqcy8BTLzAFVdFQd1jWaFeuI/CzCA2RlpXAB5gIgB/UQFPhnPzXvfc0WaSlZGM2eLUhj9mKYT4iP+8vcALY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":910821,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJca+wcCRA9TVsSAnZWagAAfPcP/i8ieuV3Iys/Dn5WvNPb\nlXXDt3cYT1BubKOI4dHZwMq3nBoTsvB69UI3P1fAoI4l1iRWuxgU6b26y3WM\nQuWlT+8zZ6moQpA77uXWQubZAqcopa19p+Y7ulk9IVYq1XLfJlPGRp0f+N6b\nTR8+rjsyfPeBBQPui6tTcCiu2EIYnERNzpJ4hx4ZnXLGMdk4O0EWzUg9dG1E\nX+iW4xcVZshrgYQydp3a3a4vzHSn2mJduQ8ltUEMnSfYzSEaIhFW3SZNyqwM\nVDpW/qWfCLtruzeGLQtmDjDJu7CIWs4tkCiewEavDrsJaU0WRlPp+/vGK8hv\nKE6Gyve7Y4F6m7xmcp0+dJEbnFIhP7k9d/ODC1XiqfDOr94xCLjsZm0TGE+G\nUlmHjzwBOtkn0bdgaSZJAT5DapSL8AgQKJMCv2+3Qht30FsSJ5anSTtNWl9X\nTYuiIK2v+6f5R9rXGYz5ZTL3IdOSswnIhGC/MEZNbTedjd2EybP1o/eHfftG\nZMrhM3oQg6HMzcRgCKBuysS8Di7mOctbemvJAUMhIcBXDGxETeWrB8DsM6ES\nmT8c7yLEMWM9qCSNfqgjwBnxmCSp/rPRQRwD1TJxi4x64RjYatb06ckN8Z/M\nYJGa/jLOTVRZjD8/74JuyEkJVfA4klpnwV+PQYkJR1tVU2wXIi2YKKlmFTND\n3Prk\r\n=P6xL\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"47b4a543bf6513bbd3fe1af2bb43e160c912b9c0","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.20.0-sync-balenaos-47b4a543bf6513bbd3fe1af2bb43e160c912b9c0_1550576667900_0.4171670538422423","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.20.0-sync-balenaos-7fbfbe606b14bd35d8c391273a6cd886adf8b636":{"name":"resin-procbots","version":"3.20.0-sync-balenaos-7fbfbe606b14bd35d8c391273a6cd886adf8b636","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.20.0-sync-balenaos-7fbfbe606b14bd35d8c391273a6cd886adf8b636","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"c2654214ed7a0e6208dca1eb192ed7938f9166a0","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.20.0-sync-balenaos-7fbfbe606b14bd35d8c391273a6cd886adf8b636.tgz","fileCount":92,"integrity":"sha512-utLETSzlu/xOaQl2hANJTj1eKrgniSmmoO9RknPM/FY4nOOpkdNhIrOfzYthNSNzcCQZcYx2/lFPIHSTwcZP3A==","signatures":[{"sig":"MEUCIBIfkOhElzKtAjgaFNuibleym4P0NdjEMYLnIijkp4ACAiEAiw/0upoouzqTHmpf/+UnQbhAJMDmPwZhIV1vioqMaUM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":910826,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJca++CCRA9TVsSAnZWagAAtwgP/2DuQwUx9IGdvknuDDqh\n1PqPP4n8lFGZ29zowdcQDr3xAOYlmrtigAc9K9+5X0c2oaiOcpQm7ilJqGKp\n2rmKFeu1RgX8klT2GZAk8Bct4bjZmHCvxbnTCItt5+hOpSYPXwCG11qgjaR5\nduL/fGw/pP0MgUxgw2LJ4xCBJaJfunQ3lBq9s8BN3iVoNTkZSuNT8dK86tmm\nFZ84lBhDcdj97BiUltisBr6KVqldqIewT9x2wXLsU2M+doeSfoz3w2udANCH\nj5FiNVKziWtELuGWpHME0N8JPg6HwgzSO+gHuDa96ueK8Vg4aF39rmMQF0CC\nV2YFY6Fod0x1JKJcy9vjR7lYE7HbaKfqbmmjzpjooL09T/LUXcuZYgSQO3YI\nBSo5QZYZbIoVkQHYQSdP62Es+W7jDTCzXBWmoCI1uuCHPa5P2b+w+WMvoAPo\n7b5zn8lrfsHEN8bl71VYq6PKwgWT5nST2UqWaHf/psDMeJ2Vyc1zv3gmTcZO\nnaJ9m2iOPMOfGWDsQeUu1G04xc6Xa2rMDz4JAXGDCHpM0WKJO1m1Hpcf5fS8\ncrRdEQhpF+y4euPTY5tBp4vV9iW8VK9Mu4D0QW94Ph6XNaUlxhOlyK7gD9mp\n56MOSbtEq5UAlRSsk9tjBfQn4Dmz0JPAj1pZY9RRJhCnxqbDf5LGzyEAYpL4\n1KBZ\r\n=UM4t\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"7fbfbe606b14bd35d8c391273a6cd886adf8b636","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.20.0-sync-balenaos-7fbfbe606b14bd35d8c391273a6cd886adf8b636_1550577537756_0.23385398819081815","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.20.0-sync-balenaos-d835e931d87e28fe3099c7d63150b97d2cccd148":{"name":"resin-procbots","version":"3.20.0-sync-balenaos-d835e931d87e28fe3099c7d63150b97d2cccd148","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.20.0-sync-balenaos-d835e931d87e28fe3099c7d63150b97d2cccd148","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"6cc5fb6e1d8f11762320182c37e628d49ee90f36","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.20.0-sync-balenaos-d835e931d87e28fe3099c7d63150b97d2cccd148.tgz","fileCount":92,"integrity":"sha512-vPfx7GYQpdaHVYMuLXc/HA1A3Xl3DQwyWOcoG8N7vPcK4iFzs/RpoH654Zk/LoMT028Aslo2OJHgsQHuk/auMQ==","signatures":[{"sig":"MEUCIDNcTolJPU2fWiwEU2T/SII858oSGcEdV5Xh59GVtcbXAiEAw8KtD5ER2B0AIKoHZgUlxA1OPooU77D5eu2SeflIDM8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":910833,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJca/gGCRA9TVsSAnZWagAAEf8P/jGUPCbBzUXMqeydbo8A\nnh+o7zAcJtsvVFMRkq2NsiKeg7trS+u2Qttzkjgu/l4O2AZ1A8p5+2VlbdVj\ntBr34Z6k/5XhNr016LrLjx9//er6uE/HRIY4Vfd/sVnlpOoknxVN48YJgLAV\nLuXCFt1Q6uE9i5rLGTEThkGeGj6uUBGD5ait1zRXSkbhoA623obLGMOVM+v9\n1Vf2Vn5zK/Tmc7YY/S174ONMTaIovlLmHMWFXNsj9/rRc/DqMu1tD+QK7Wm5\nWYjHzW+gg7NaNqwqlPASMiffg7UAmWFxK7ksNthjrsLsXDnpkgxw2P93j5xi\n7/3+1r7/IbQvzNmsQwcpcY1vu0e9xeAh3/HjU4oHWx0xFKJJ3WsRi9lZnUFH\n/VuC+Sas9CeXsSe6xVDkKCOYbWrJXH+NUfeN3w0HLOI9kqffDedGQ2O2QggD\nqpc/2quPD+gSef2zfEiweK7nGks9dOJ1TTSuuCgerPmNTQZovkHnv31AI4tS\nlE/mwMpYQdYyyOK0RQRdolnEwzHMQ3RDIlHZQNxpbYLw9+c9tQ9eE7gyEcLq\n9pJ16138J/VFPCAlSAOdwkYD+toUZjF/qKtDmEjrRQJkq0UcdKQse0TDfoa5\nDm1/L9C1i16klxbBVi+ZZVt4WCA0/na0dVZKuIWQ/K4dy1Mn0KVAwKJI4Dkc\nglI5\r\n=CT/f\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"d835e931d87e28fe3099c7d63150b97d2cccd148","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.20.0-sync-balenaos-d835e931d87e28fe3099c7d63150b97d2cccd148_1550579718167_0.5035986442343334","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.20.0-sync-balenaos-03da2b21300008f9576cca9b3e6c99198cad8bdf":{"name":"resin-procbots","version":"3.20.0-sync-balenaos-03da2b21300008f9576cca9b3e6c99198cad8bdf","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.20.0-sync-balenaos-03da2b21300008f9576cca9b3e6c99198cad8bdf","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"9a9b80e9c72b8aef09aa20b0b10436e7f723f576","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.20.0-sync-balenaos-03da2b21300008f9576cca9b3e6c99198cad8bdf.tgz","fileCount":92,"integrity":"sha512-fB9I69LEWzqqrew1a13LolkDsnhKA5AU1hIAtSrM8ZLHtwvTfRO/Iq7aCe+/Rg2FyV0cb7hnKlggQQ33peZxjQ==","signatures":[{"sig":"MEYCIQDw9saP7Mf6tqsEFzJdSX9+rbKbwzpeYoNOA2cFRVzjEgIhAO+62xZXk6kOPRmIysF8CvWrdvmIIeuUfTix4rZ6Q3bn","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":910832,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJca/m2CRA9TVsSAnZWagAAwokP/3EcZ5i+WvI5ZL22UDD7\n8grSCdUSHCInKG7QtLI5N3h21W9tQxw2d9IXJ4SPsVprdm99i8a+WoyM9tjL\nH6yYhhDQqm8hPCIA6iU6O4zOFBBQEwKwR47sc/HLDBhAjAnRyPj3Wp++abqt\nXvmvfL0QerfSQZyiEBxb16Rmmdlgya5ogFLAnhucJVHztpFNQHsuCXUX6AUg\npjPiNFa6DnKJIID2cY85oWOcPwo9BYgwROMIWSZfozl4rxMiOR7omZuhQzYL\nxXMpyv9Tr7JsRvRiZxIZfVr1zxoQC6IFUhQXjnoUAy5X134hp9LGKwVhFf+K\nwf34y6Hh/d3IKMX0D+0ypf0VyT13VO81cUrR6MZ4L4PG67Y594vvrK+gyIBx\nVVF5+p00DBx/ueEObdBeWQd0D8gCvqbnCeXWNI3Ko/gbyGF1gJL0GBTHpkD9\nBZBcR4J7Bvqg/v5rFfH5sIZtUjb99KQ5De4eNC57d5RYoC4GgFsYSQriCxp7\nt7ARY3McM8NdTZUVAYtXrjoFDNzItx8hNwRo50OsBiipHT8ByzoKEtCA10wP\nDC6C8TD3PzX93u8J6V3X15zUjaQBqZtQpFN+JdhgQo/Q0MhMd9AyQsLixpI1\n+K9z52M/Ve7dU52D48/9WmjF6ue68Ek2uk2zz01aBwkqqxfC2mjUWXVQIg3K\nO9xB\r\n=yt6u\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"03da2b21300008f9576cca9b3e6c99198cad8bdf","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.20.0-sync-balenaos-03da2b21300008f9576cca9b3e6c99198cad8bdf_1550580149920_0.9364817337138966","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.20.0-sync-balenaos-898d05919f5249fa35fcc0f332f2388f96f8ca6a":{"name":"resin-procbots","version":"3.20.0-sync-balenaos-898d05919f5249fa35fcc0f332f2388f96f8ca6a","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.20.0-sync-balenaos-898d05919f5249fa35fcc0f332f2388f96f8ca6a","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"65bd7730bc640f1cfa996e2c729c57a5760e0e20","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.20.0-sync-balenaos-898d05919f5249fa35fcc0f332f2388f96f8ca6a.tgz","fileCount":91,"integrity":"sha512-j1q3wHdty498N4+SRl9CUCZdYFVtdTstCb/XrLHofOfTcADWB/vxgJ7JmP0fDj54s4rKIKnjc0RWecyqmiuAeg==","signatures":[{"sig":"MEQCIB07QGXozj+oSAFGe1mwToH9t7anA4PhRkGO4xhi9GjjAiBTfGZspklvfdPByJlTGL9T0c32kbGjyVd5vzU9+KCVdQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":909309,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJca/62CRA9TVsSAnZWagAABIwP/RIW+Oyyz9eqQidKszYO\nPUToxtCkWGO23ATiGM1J28KJEoeql0WAwkCf2OtCdRL5TAHqjMjvjucMc5p5\nV4NPRTRpTzSwUEUEkbSV7jXlYH9qfFfsvHZO6zQleyesKwEL7gFavrfG2gxe\nOCfrc/G2wxyiD3oz38pGWDLvubFF2qMHG9e+Kq7gm3G3U1pyGt6zD6jwIHJ8\nu9JWr33sSiAitehXRuIy7zfAV/IawBtpBJd3LaS7IM3OT01FIXDqftigId6O\ncDdxcXlsk3V5gi4POs3aURQ5I5JYzZPxcUkR4eK4bzI2hJ0Qypq9K6UgmN3u\nyu20sPPVa+sotnN9doZVaXVX0JVAAJx7M/CRMGZFNOfAkKQSK3NWgHI70VSr\nHL217ijmKjtfc5/obUw+z2EmegjqmYSb5f337b7WgPEjHjFUvI6bOr669SWr\n1fyCRP1LTsL6IQoGPpdiW4VZ5734zyyj7amPID+YEWh6zCoK03XyIJfAkJ+V\nWeyluQ5i6F5Gx5jUy2p4vNnv41+rUukElA3yWCil6LV4xw1srh7alnffr3FG\nuXDhIqZ7vYOOxjbUwvMgV2qcgnbXIUJHj55baktr8WisA11JDnJ++hLRxwyg\nWhSBN7agSFO7CqhbDfwmiD/Lbc09AYbjqZsnLZQKjjcRAmGQDstD1WXMDjNe\nqMv+\r\n=rGoy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"898d05919f5249fa35fcc0f332f2388f96f8ca6a","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.20.0-sync-balenaos-898d05919f5249fa35fcc0f332f2388f96f8ca6a_1550581429429_0.5631942661806515","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.20.0-sync-balenaos-4d358e1f89d79f5af06a115c8f63d6647061de9b":{"name":"resin-procbots","version":"3.20.0-sync-balenaos-4d358e1f89d79f5af06a115c8f63d6647061de9b","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.20.0-sync-balenaos-4d358e1f89d79f5af06a115c8f63d6647061de9b","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"24a5f1ede11fa99d40e54511deff991365e4e27f","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.20.0-sync-balenaos-4d358e1f89d79f5af06a115c8f63d6647061de9b.tgz","fileCount":91,"integrity":"sha512-uww9KszBeekrtC4uPTsk1PrUe8qqDMzRD+wsb3zdQ6If1O6JhC4i5/XAO1SpiG6plGmhjBTRRnQ1WPVvaSHq3A==","signatures":[{"sig":"MEUCIQDF4PTg+/UmIEZHiDhGQNizAqkXMHNBKRrLAOtzFoPD2wIgeQwiainoIEgleYQphnmJF6WgZbGPDCzkOn3fQ3rxRIk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":909310,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcbAC6CRA9TVsSAnZWagAAO0YP/jFSVKHC7FovCCxqkr5z\ngycHaW9wGAUOtKFd5rHlvi3e5kvQ75IeNMfhbfLfz1enOjzp4FUYk3HRUw3e\n6gLPxACFpYPzNt+EI32UlyA7V3JIy0ycgJPhVNJgRBxIfzu1qWtIhLI+b8cw\n1g1sQpkgwElPRRjPXEZW4s2UAget3aKWAqNjsVM0Wu3VFJqOW1PRxYZE+sSl\nOo/OGYP0bYJgtRFuiQe1c9Gm2J/RNyNdKBnFoJVA7HPVrEHxVt7laVizmhYw\n5kP6aMFniG740BR5pFcPspRcoHKvMBhaJHLY3l7H8uwZd7Ki/758IkN12pEi\nQ/m/1pLnugqkJDhbayPGvldi50d7ebrjeNkgK6Sy3kzsu1H42BGqlkIgemNs\nGZBxnAcHZtLjohev/WSRhkiOP1p5tz1+adeMjHzyq+mSCsuRGq1vzCLQ4A3+\nW8JtaEzE3HyEt7DQbPUAmTxGLfQvZbPvhKG3j1pdzJtZKS5SNDQRgjT8+jMu\n85jVPm4CcLYSLJqTeZwWIqRdNcxVn0a4X+eRC/pHL5d/5/R7wgYZs7KnHZRV\ntJVVeNbx7qWAq2rBhH9CJ48lyujzuppE52/bxdnsTdq4yZU6cAcyrtaaJPvQ\nCN4JWBBLC/HAk2VSlH+LqfYURTdrf6HNL90tz94VEmvgMaRoIfPX7BoI8sbi\nyp4s\r\n=pmF5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"4d358e1f89d79f5af06a115c8f63d6647061de9b","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.20.0-sync-balenaos-4d358e1f89d79f5af06a115c8f63d6647061de9b_1550581945363_0.10159877558962416","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.20.0":{"name":"resin-procbots","version":"3.20.0","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.20.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"6c86922ae13c46e4e331a921af139d014ca79d01","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.20.0.tgz","fileCount":91,"integrity":"sha512-wvIev5n0rCT7IpzB35aqz85A4RFZjDGU6DSZtrOkMIfzE7GLMQfx29eJsvAOLcViJ2f98gF7pAFqOnGJjDB9XQ==","signatures":[{"sig":"MEUCIAReUufM0c8sDrXnLvQ72cBP0zwhIOjJpjr1LTsPQyclAiEA3X8YNP2G6pRcw6rBRgsHD7eQlhkfh6dAWzzcSw/I3RE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":909255,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcbAKGCRA9TVsSAnZWagAA9EcP/0K99mybOkYVqfmjy1ih\nZtAZOPyYa6/ft1KFxGALCBjXnpLBdGZ89Ql++eWioEf0JOUDw8oqKsoxw5we\nC70FNxTbj1vb870jqwk8SYAQtuYNDzYJhkrXfHaKMBOhY5vPEKvB/iLZHuM3\nDH2s2WaF/IcjySLYWM+ZO6cUJpvAdYbCeOlxg8AhIYZFubgD/I+Sz8Zpf+O2\n5/LrKcRt8z7mNjn8dEc4skPFeDp5PNfncv6SNMhVa+0BFETjlRvZwYFY3iik\n+ZiCB25iVFHiATWxuT/dNSsvV0tB4uqakEQ9DRMzFho/tjf2c7Ogl0ACripv\n8QXldKmIEvSTQ+rIcs2psayjWYrMAGKCOxZdXJ/btiDVGLz/sPhv1E7A9CaW\nvlxCFSB63NVUD+s2rhsHurqaHt9uz5dk0kw6+PC3weq7GBhE2pkpR2kF2hX8\nhifzg3P+TVGwfZ/jg4+wyLTNcsS85hmi0rC5Oc7rt6nBl75aF6S3SkaMJWCX\nuus01uuy99HxjF97wgkMla77wpakE8Q8ujcjnwRSv1RdWprDZa31jZ9eJL+D\na/1sFbYYzVjeUbY4iVGFBZBxalq0+uVBG9r8KwNa2Si3dwR4aIKtGwMklp+X\nkE7Paei6Mz9CGRc0h44GmpDvwyxHlGqNBwfVVdR+A2K4a3Ubt4xL96kiCQrb\nPkUv\r\n=H+R2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"2f121a4782d3693306a077fb625f3e7aacd38ae3","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.20.0_1550582405448_0.35571183074331403","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.20.1-ci-enable-publish-52af863ee03182acb30bb51506cc3d3f2aaa49c1":{"name":"resin-procbots","version":"3.20.1-ci-enable-publish-52af863ee03182acb30bb51506cc3d3f2aaa49c1","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.20.1-ci-enable-publish-52af863ee03182acb30bb51506cc3d3f2aaa49c1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"388dc2716d9ce9db1ab7fb31e2250c7ebfc76c3a","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.20.1-ci-enable-publish-52af863ee03182acb30bb51506cc3d3f2aaa49c1.tgz","fileCount":91,"integrity":"sha512-NmKMxXZy6pZ3GzPxq7PlRELP6SaKz/u2tFL+9mzcwsUJ+xt0IgNUeDpbvIh5b07DB65h2KZdP4J1lAhALAB4bQ==","signatures":[{"sig":"MEUCIQDaSdgWa2E4JCNMjI55pyA2COKYKA+6O4vbDYv6i0jgeAIgALqvqrFze0XuDOXgZ+xSuqQNChzLeFQc9ZviiADSuuA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":909367,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcbA+MCRA9TVsSAnZWagAA1cUQAJdw40ap90klZS5DbABW\nGH7rsEObLgDKqyCDPR/UiGeuBQpo4AAVMmUcvKytP5MHvC9kGCCD4RSMSHIq\n3sfxIp705qXzocm212aH7Aj+nxeM8kIG6dDY7gLSRG5TM7gv+uyoKak8B7n8\nwMl5m1+1Dc6zMjSBLvfPPs826rPHTkZuB8b27EfTjVx8HlkHi8Pi1jMEi0VJ\ndLjxUC27ie9g0xOGxj2L2jbS//s9U3cFhibzpCflrNGbJ4bFVM4Vxf+ca5pG\nqrjZ7BWdX+g57x5fnpi64+IG3y1psncFrATprGDZfBnVH2kO44caZhxUiuOK\nMeFvKRb8kTNaZHM64UNDOjF8X0KS2RsgVrQo3F6nyooN30l+Hbm7p7JLEpPQ\nFsCxkqUr9vBZGYdRlLVlytaO4iJx/eiYWjud8fKDp/0RpX1xRwe3UYLe8uNx\nw+SKGpRTk5RKfr1fKtbAsiBzTzZ0+P9KBggKnK9IGXBCXKyl8YuojtAL/zPi\nhALYFwbmpi7fzk6xI5es1kB7FU6NRe0nE3dGu6UDx/QGL8eEashFi6fe+M45\nuhAkS/sG+Ul/1BlqX6wV2HgGOfi8nrE9IS3IigvKpQ0E78kr+2c2AlN0TjVL\nSY2pYiVyLI2LeKYZTNW/QhJTuJuQRcktFFAIWsX/dSqetwiDOfMuVa52izL5\nDsnm\r\n=tPgw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"52af863ee03182acb30bb51506cc3d3f2aaa49c1","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.20.1-ci-enable-publish-52af863ee03182acb30bb51506cc3d3f2aaa49c1_1550585739799_0.32951545372475444","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.20.1":{"name":"resin-procbots","version":"3.20.1","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.20.1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"8e10f25f46a284d1575ecca987e429e32052556e","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.20.1.tgz","fileCount":91,"integrity":"sha512-eujiS3ynmOgY5cXmJDcDubF4+NMUPPOjVFV7BLzaRIGC4MDdzxXsVv3gX2Q9qofderponbBqXeS6I6SiNP3jaQ==","signatures":[{"sig":"MEQCICTwDq9XzIzmy2NqWoawSx35qX29TeqI2IJR8+Q2jntgAiBCiGppz3Ss+YN8xaHZPYp6TI3Ai9xN7WYWXai91cuNQg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":909308,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcbBLGCRA9TVsSAnZWagAAQzcP/iB0du8873IWlbkRcjQs\noR5CzGoffMZAuouFiG8vWskUFHWApEHnzTWzZi+XSFLoFT7KVj3Jl/oDoqbe\nbunKcnB9gLcIEg5kGke5fEURv43ob4eFcVdyrvdHYf47jDla6y6M6WJv2IbT\n1AW1hQJuW0MO6tRBzY6Z1LfKiP3YexHK1Of444eR53eJvoJVl4+XteTmStPA\naQHPLxwRh6860KMDrt79fb+8+PiotFXshkCiJnNOjfOzsFANbMMaH0g2TEs4\n4k/2OR/PurwLulGEKC3jE2oreOX3vGE1MfDrwBQDkgjEypYkF0dYnX7wO5nI\ndhtvX3BLTAONzs3DZu882M/SMWDxi5FTKUB6wAWKF9mZeh5BM4DCGUjBbyXi\nOCrj7JMwM+JMRDAE64IfQq1xz6y2+kTxnExpxhWZlMVCGB69Mf/G4iZHcfT+\niGyqrOUtaD7HQHQnjDvpw7MjFDIj7oA0ruPiHByMB+sqnCRP6Yawf0bOXbgI\neTzjRmYHIjDw6bwz/V5dFd5KZu5+YRHg8y0pqhVfiFMbFPysU40mpksC9RDh\nAQNso1nPZ/6wtkMuxpm+3Vr/IlrQ0by5qdTT8k9YDjN9+SNyFIkKwW5uXenD\nFRxx4EER4mljPrs7Vqk+NEAnP+D2VWDDrGI2wqvuke5vnh5YX+WUgwAWrMle\nbES8\r\n=sRAp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"bad52db8f4d111efa257125c0807101d4e24c06d","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.20.1_1550586565843_0.5462792007180501","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.20.2-ci-enable-publish-c1582ce82152eba3b6d11557822b164dc3b91b20":{"name":"resin-procbots","version":"3.20.2-ci-enable-publish-c1582ce82152eba3b6d11557822b164dc3b91b20","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.20.2-ci-enable-publish-c1582ce82152eba3b6d11557822b164dc3b91b20","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"35a60668c69350f1f87ae3557e5d66513a1fb180","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.20.2-ci-enable-publish-c1582ce82152eba3b6d11557822b164dc3b91b20.tgz","fileCount":90,"integrity":"sha512-n/eUQ/fjvoRBvsHQhh+1QGG9gADaEYskqMaEZFUiH17jcMrEoWgk6QYSmS22Ozjq0Ra2kzcBUJrVkLIj44BJqw==","signatures":[{"sig":"MEYCIQDsqjwUNyKyB5kVJhvHHfFjsQXb59j8hWNS4J/gGnuQrgIhAIdO5ehads9YPocjmqkXBnWTOh7IEDVNSknob4Vuuba+","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":909359,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcbBXXCRA9TVsSAnZWagAA0VYP/2l+I0rNaZXMBKHsmhlh\n7zHV0SM3StrtTGRYTL54MBFu5voLXhpAJJXnM/vdWpipBxycGSYK5mLzqm+i\nv8zR4XMbK1nzLBSALH1SDqSD0qtxBPQx6ao12dWrJkH4RwZdtHL9cHJopjYk\nfprdI/t9ZUIxUoMrddZPj/jJSCFzyGJj0eg3K0yyueIBSGqr+DscWqE6Q08s\nIpTz/Vq7p6UdL3FoOkIw7ialkI8Ad5gd5NP8UAdeNsAStXDWTq/iP9SJoOly\nPuO45nV5KBUsyKjuLZbFBBe/U/o6vkNagu/qTrXDiTO8HQxgBo7tfmo6C0Mn\nXwfGwtom6oM0S2FWxX9RH2EXwRq4+hwDFYsMIFj2f9VZQFq4IA4SKVFTkLdI\nyoIOVZaQjwiVLuahtV/kKOjvVuw8xLop9g8wZlch/CufpqsA1TdrNj7srFMO\nyuueReqHh6SVOOueSyDVyLNIljHZij9KLf8cDUdwbpi0SKrJ2ruL4OyR7VUt\njeMk7GYjQpZuDAogfErjm+i0GnyCOwcj4jO3ziL6zM2a0qPRGbaP/pQ7rC7C\nNDjp28tqrkWaGptFN+USGjJVAtdLlbPQn4EMwG5DwjxufmE/bszwIRFOvnrG\nBtMqJigF2QIbXRDKnsIGTgBbvq2NubGGRoZmpO5anrvio+PPEBJ6zE+KENb9\n2JRf\r\n=R844\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"c1582ce82152eba3b6d11557822b164dc3b91b20","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.20.2-ci-enable-publish-c1582ce82152eba3b6d11557822b164dc3b91b20_1550587350438_0.14730740468031178","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.20.2":{"name":"resin-procbots","version":"3.20.2","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.20.2","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"894bfd2b2554bb5436fbe2845b9f846cd72072a8","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.20.2.tgz","fileCount":90,"integrity":"sha512-2VG5kTKORPDiJx+YPE5YE3xKBEPjDBrW4pJfTF+hYzvwMNi/CEqy5+lJUtMeWI7WQxu8NG2Gd8crRgrYRaW/sg==","signatures":[{"sig":"MEYCIQD91WYW/1XjDXFGmdk3BBYbo4TQoXGwlJjiBhXfy0ufpAIhAI6I+4s3xmNFfuplGraMjyn3S+dLyKfFrHQRFxn83cmT","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":909300,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcbBauCRA9TVsSAnZWagAAQC0QAI3/k/IuaulLYe6AZ8XX\nFoewnls9RVWr/hrxlKuupl6Y9b8y6lCapTVabAGVrVClDle7GBADTNeiIrdu\nZ+jqRUeCMTUQA8rtBWliIuu4l940FZhBCc8Ohu1Vml9rqbD4BOdf7RoiNxry\nKODBA9lk2a1753FsmyajIKfnpwUgV6QtDiyQntBESZX3NyJ+Hsx4ddAQAEVM\ncFFoXjJel0vHlbBEwYEj3TpC2e6QahjirOaURrgPSFm5QtIz68nOGBBA0ax2\nBPqtM6W1R87VWbIDufGxrkTr82uHbP+rCMk36/jv951ET+BfgUV1ImtoLStp\ntMy6sgemJxZbC41EeFer6ZzSDVCD/A1LGPGrP/P20iZJzMy7bAWZUFPdZA8B\nR+Si9ageMu+xXRoipS6gbjp7y7pWWC1vd4irHcP+3g2sUOgRF+uQ/BlBZZq2\n7adnQLhlikS2sEcAP6wlF5dZ6CoMAhysdSDtRun5s2ot2YDuMl/8tcOapwGq\nD/d7cksLKAV6nC2a0luleafnGAscR4iSX1EpLevcTFX3DZ5gocWXWFF3wTHT\nSqoMW2uh8D0Dj6d1pHdHwCjI4EQyKWVGhPBJReMEjchJcHg+AOzQjlzDe8eB\nLSlGghfM8otjndYWz4Pelv4iwdijpYbJ7yyCEa6EATbeXwQ04O0ZXtq72P3V\nAP/3\r\n=vZiQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"9f99dc9ec0d0ecd0d715d7a4e4d74aa0791a94e0","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.20.2_1550587565603_0.5086773862468459","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.0-revert-circle-cfb873402466dfb2482132fdce71e6a378ebd811":{"name":"resin-procbots","version":"3.21.0-revert-circle-cfb873402466dfb2482132fdce71e6a378ebd811","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.0-revert-circle-cfb873402466dfb2482132fdce71e6a378ebd811","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"0ef02a2dee478f006bb98f6d5ec1a4d9278a0ff6","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.0-revert-circle-cfb873402466dfb2482132fdce71e6a378ebd811.tgz","fileCount":91,"integrity":"sha512-sQu6ziAk0/CmcJKLPJHDwdVGdrqtnlz8NnIZAD6fDirbTyhEMsCocVnhsc+IkiUe4Nz8IaA8l7OGPimLUeQUag==","signatures":[{"sig":"MEQCIDMaUcJFpPoko/1oGEOVqS5pLDVFD3o54aXv/baG/8fwAiBWvWVKwYbEtJAER6GYTW0xH/ln54ud3jM7EWKnd5RB3Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":910941,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcbCNWCRA9TVsSAnZWagAArVgP/Rwuduz2uRsdZoISvsoP\nvE81860FL0BXUNfDh5w8Zd1QzDVv6BCKrsy1gp42yoyaaNNC85VdTUi716ds\naJCEuxjBjKOeSM1M64iTx1DSrcxiMdMrtzEIgSWLAWsxe/CyTJfc+/vkn6Nr\nqU76yIzswA2+BWNBUNKeZbOxuhgfuYfnZGePkuac3/6Ks/m+mz1IFoduuTlW\nnc7Y5jRJqImICCVG7r4YshTDp0Bm+ENrI4vgYpMUOluuxRfzdVDPazWNXZ+/\nquXjVPSoSeqlXxnhsDbU34yiWky9xK0mKUMJf4jOuQ80723V0mJdb8UKFvOs\nREMS4CT1qy9I/e5DHFBITzoJKZ/PmBKPa16vrmnZDOSR3/96crEf9Q7wNc8Y\ns8GbGI2E1JwNlGFGpL0aPUKGhsirLPJBHFsYDqikta52h2a3j/Wn6VCqZjPG\nZ52Npqv6yoEJ/aVjAuT2aZh6WH3ScPGImiW/LBLvKvLVp9nobbWrmCaCsF1f\nb9382yFMVwP8IDLnCijim8/ZBV7OHC4X0fKtaW1IU97jIgfK5lg+VgP1q3Zt\nT57XriFI0YBQ5p7kjITSQRAx1Hw6DJvoLQcBUVOSL/pwqkKEGnsa3mTQDgkf\nNgyojIGei3GVrkRCjt8xarzzEblPsBHCAWUMLaIXWZ3b7+R93/iJTabuDp51\nYBrr\r\n=cz9g\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"cfb873402466dfb2482132fdce71e6a378ebd811","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.0-revert-circle-cfb873402466dfb2482132fdce71e6a378ebd811_1550590806255_0.07202256842677723","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.0-revert-circle-6499a1727c6c407fb099ee7460fa911bcb936c73":{"name":"resin-procbots","version":"3.21.0-revert-circle-6499a1727c6c407fb099ee7460fa911bcb936c73","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.0-revert-circle-6499a1727c6c407fb099ee7460fa911bcb936c73","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"67aced4f97bfe1b496d418a4b3a904799db4bcbe","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.0-revert-circle-6499a1727c6c407fb099ee7460fa911bcb936c73.tgz","fileCount":91,"integrity":"sha512-SGi1ZS1On09YYW1tnYCu7IhdzwWlCP2jfmTbhU6EQjTeeQoJKUA7AyiaEkM8I5UMRZ7ctTFdFbjreXpGVoh7qA==","signatures":[{"sig":"MEUCIAMKf5rRESrTP5g2aiU590glLyRgR98h7m9oob2+QZTbAiEA3VgVOaMA7sk+7du5RKohr2VR++XSiDqo5VpwsrzhT5o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":910962,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcbCdzCRA9TVsSAnZWagAAYZYP+QCsDZBkZBrsVsokHvvs\nUWhanwXg7f6+eFezk7Ex0PDzKW7qJgAV6svob9AAjho4TmSzYUGJePucoUKQ\nlbqi3e4OXxRZbMMQ59rE+24hHXEQLcvSFZMtjFkcEFaZul7k5iYqGrCQJCUy\nesnBX4KUDsZcVvgHl30Jtv0RmJQNtDZjSJwbW9hktn1ZDQWmY+lq1sPSSxaW\nqxIqb5e1KSq0XJM7r5DQL4KgOe6ZtF5vw6QR8WVl4ToYIbLYdfjCw5xgp9TV\nVim/YU0dol2Bt1JYksp+TI+ew6HYArltL5ajWLWP9KwNJPXeBVtUrIaxtuDr\nVKbnQA46usrJ4DNq/8YHztWm7z29BtgwU3SuVW4EAlFMQdcxTX6LPd9046VG\nvN0Qak1ZSy9LITrFWpZY8jsnJ6N2/4BSbcAk7OibyDepghIPHk08E+ZO9dIE\nfW1q1H2dhGnvb/nRyvCnW52vnj8RunwcyRjntVxINaRaaEJISFRBAayPyqqv\nXbdsCBEzZ06eeF7vrcsm0mTHjkwhYprEAKXpnsfS4tM6H0OnXkLG+SLOGp3u\ndYFTc+ZWW7VT+B9oWPY93jjbnGiSFdAssnrBHWkTVrPPmALzMmJN55j3mQ4B\nQWtR5dReiqEUWM8qalg8ykj0ELBCt6sDMQ0ujMRJe3nWttMAV/dkUh5ijd4i\nRedq\r\n=ZBvs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"6499a1727c6c407fb099ee7460fa911bcb936c73","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.0-revert-circle-6499a1727c6c407fb099ee7460fa911bcb936c73_1550591859228_0.9021513923986766","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.0":{"name":"resin-procbots","version":"3.21.0","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"c09c4a6e7509e6faef15a3e66ed42ce1c13eefa1","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.0.tgz","fileCount":91,"integrity":"sha512-kFdDsq9c4CiGTdjzlB7iUFfhkUIpusbRWG+DLTClw3bP9I7Zh5mSmmFao/I1xVkKeQZI6VMM6ZjcTkcGrt5uVw==","signatures":[{"sig":"MEQCIAyROkz/w6yodSQK36JOls0qIC0AByqA9NZFvRgB/Lw5AiAfz8ndJHvBzNsS8YprSmg1XbcWPr7LB6VSjOfaOEEsLA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":910907,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcbCjBCRA9TVsSAnZWagAAgb4P/jzHfuo8XbwE7lwyCxuy\nSWohSP6MsDAqjN2+yKvFKnmXDKY/z09mUv/r4edm8VlD9djhWehcFr6Se7Cj\nayvVMN3VMY+civg/QbgmLkMNSsHC/RP+9O8T8uDYndATRAvmIWvW+DhLTNYs\nh6MMP0F8U/v5oX6Ozz1b4ehf9Dr4EtnosJJQtezOFVKrxboYvEjRmZLYeN/I\n4LlAGos0UDin1Sat2FA2yLMSp9C4aYgtXmfv/Pd6rl2SSsuzzirEBp1uaR+8\n8vfZVZz+4Wu4GhCNNukjnQvZC5EJPitjdb0cmWp4vP86s8AAznkXnmatcoIp\nCnXMTDeypUHvVMvcWbIAAQfdfNP0D6WI1VEkLB3uo6yr+hzcwE0AkA6q3JhU\nTeb84jeJgYzQojzvUjl6p+jrVmqQpEJGF/kcr18jAiZNF+SRl/RMiEsqSeAS\njcJmXMu6Q1gujTKXkHuP+mJgy1v//2ccg+hR3qQEbCIwE5HZRxs1BRFGyOVK\nygAs6Xy3/dg4YUOME4FKTJIWSujQozc0favHRjaWX3sgH3v9Fk5L+MXY8caA\nUyqbELgA8GNjlJVfFW5QKlKR73OSNLL7DQzdPibRMxNjbF6+NxkP3J4leji7\nM3PUe0yDnJ4qUVeDP0+QahxAcvovucEi/xxOI1CQ2wTNY8u/BKxVHGEAi3IC\nrI+L\r\n=hH1A\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"1af44a344c485f3f95f1bdd95356e6acc01049eb","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.0_1550592192381_0.28253067475127325","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.1-balenaos-disable-front-flowdock-sync-bdce384a799a4325c98f7d87473fb9d77f200ee8":{"name":"resin-procbots","version":"3.21.1-balenaos-disable-front-flowdock-sync-bdce384a799a4325c98f7d87473fb9d77f200ee8","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.1-balenaos-disable-front-flowdock-sync-bdce384a799a4325c98f7d87473fb9d77f200ee8","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"2e71982a676b5cfe49d947e5c5a423ee5c35a762","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.1-balenaos-disable-front-flowdock-sync-bdce384a799a4325c98f7d87473fb9d77f200ee8.tgz","fileCount":91,"integrity":"sha512-uj8luU9cdEeTqt4G01+jwAc8r8yic/tvUVH3W1nfkpBd6otx/ivr5Hfy9Dn/8+l0AHawWpZWL7tYTy2D9+igFw==","signatures":[{"sig":"MEUCIQDLSd1So8dLohi9HoD676GrtzAB1LDqudvKZmIrXM5ifwIgXU8J7dAwNpFlWtsiexI2JtQ2+XQCuEtj3ON1DBWn4Fs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":911102,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcct7wCRA9TVsSAnZWagAAX/UQAKUl95Eut7jbv1OZ+H7v\nWM9YPe8Q+ty+9Ha3kEE0C8G2u4DUOROV/0RpqJbOxfDBLnDi/q/G+IK38IFX\n+FVQ6YqOo9TX62aY2GxcQZauv+2EUSiD4ZptHUsA8HkVQktwbpGNzsEnrafY\nB1EsLtueAAkhHoXPJsiP+K5Hxjs3XTn3nVbVyvhXQvGoyYQJ6S4r2N7K2BjW\n+sKUksi8/zz7172RtTW7BbsJXuFPQE+2dMgzjaOrtW5yiQdgDaVyDN2N2u/G\nXNSG1GxD66uFdC3Pag1BORB38FvTYq0RZm+EpgFSnWaVMICjhwoRZn459dLt\nHBxYYRyhDrYU2LOt5nAhgF7bnUox2E7gCu46PTAeIDIXXl5zmfCOTupC4yF4\nQr0jsRJn4/vpIPwCtS8Kx9XtDW/4mtpFrosnvd9zb3nrRhAPushduHwt4gq1\nX0sTzw7GDLg70Us26eBYnCcmN5+lxvfC2x/wD+1p7cd/1MdZrhNgA3LU765F\nnz+FBrk5Q9OLeJqwvmR/tKi9fUEwDS1+5ONViQQ+OkCfIG78IcUh2gus040T\nqACdm7tV39E6kyhBqQbF1uWBdfWrw1u1Lvez683Mn7TObEp1xBpvbo2wegEq\n+S0/+kvAMMIeJvt+rKJ0QNJpqGNOyuXzddQryZrYL4cgC7W2V+fd89qnlIB2\nTj+E\r\n=jVXn\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"bdce384a799a4325c98f7d87473fb9d77f200ee8","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.1-balenaos-disable-front-flowdock-sync-bdce384a799a4325c98f7d87473fb9d77f200ee8_1551032047473_0.8959328680295944","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.1-fix-build-process-7c2264172d178fc2321c8112bec97f6ddacb04f0":{"name":"resin-procbots","version":"3.21.1-fix-build-process-7c2264172d178fc2321c8112bec97f6ddacb04f0","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.1-fix-build-process-7c2264172d178fc2321c8112bec97f6ddacb04f0","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"413ec164f278556a3336e09a2d7d3b48a08731a8","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.1-fix-build-process-7c2264172d178fc2321c8112bec97f6ddacb04f0.tgz","fileCount":90,"integrity":"sha512-if9mG95jUF8NI2iW8z1/3aVnt6n4B0kjPeoBJKl7FHVQMkr2ZFVk9NV+ozZyzWOi0jy33hQJyGjJdWiPIVcwbw==","signatures":[{"sig":"MEQCIHLdUeIw9YYtYOKDnhnk7yP0Q+ng6mSzbsSw6rnFO7MrAiAs42qWYvkfc2H/KVVFlMuXC7KETo6/B7j18bneeut0cg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":909580,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcct8iCRA9TVsSAnZWagAAkEMQAJHISNyRexxq7gc+1iXC\n1pO+sgGzVSyFOAGX7DPgkpumSJX5qYGPrDnv/IWxXEOCYf4zZTvhpeVl2sdW\nHBsB6ZZ+0DfSHBB1PMrOt0MjCENu38RbS9F78fV3RGnDyC+FSJKC9YWVo1iS\nLei3dwbe4AE2f9h6cpsywA3JycAxUfQhTV83p3HZFaatX76w4/kff3JhDM66\niBSV3tbt+ThDQDe2FjCIEWx9scLBjVC8Ecnj1krPrSWhWQwe8Bpx9+tPc+s6\nDRtp780w4D3lTwzyEUiscoi4+Zo5J84l67TkmzjN/brwaPpPyPir9MMnZ/0I\nTUprYpFfwG223ZAc5eQss+kHFCxbk/QKxCQ3Wj1bp1A3ZCbho9wUbycnyxgF\nH4PdIkPVxGFzj1AqYWtu79BG9b0B4jv6A3q+Nt50LgqyzeGLAy25PAD3eiK+\nLBW6ETQoTjfiNEyb1wsuksZRd5LpWCVZ8qtLd5A9alChQXvZKr8pTzeidIOd\ntw1VkwcFri4chRMUwhVNdpHpCyzVrV1n2sOSnKMMZEMUeLV5vpvke9abxBp4\nfxnr3k1cHxkGFIX6FXjhEyaUPx7RZ5WHbtFeswq6veYwOA0OPH5WHtxvbs0W\nFdX+5ugiH/7cC4w2IIep0Ktu+CnmGVA7Tf1asDBMKcsnMESrHtbDmiEzAKae\n/5wq\r\n=iXy5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"7c2264172d178fc2321c8112bec97f6ddacb04f0","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.1-fix-build-process-7c2264172d178fc2321c8112bec97f6ddacb04f0_1551032097610_0.4690387480159379","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.1":{"name":"resin-procbots","version":"3.21.1","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.1","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"e60adb8c11cdc0346fae45c687de846cdaae0b19","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.1.tgz","fileCount":90,"integrity":"sha512-La3eZYxct+cexgL5jT0Y8mkWBGP0g+4RIh4EFnpmQyqdVn8+v/fRlDH9uWRHLjGxcUVDwMD/5Bn8xO2c2G61pA==","signatures":[{"sig":"MEQCICdHPDBuSTKJxV9hQN7SfzxEmsqaGm9VaYodxGJKvY4UAiAYWYfCklwQ17BAtkJeE7VLfOZZecOuebr2g/ouTGYVNw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":909521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJccurbCRA9TVsSAnZWagAAcOcP/j8kICHNiHs7roj7aiHZ\n6qszt84n7iEg5GkZa+qncV6nINlOgXcQDsdgKV5+rckSf5nXcfB2X5N5NV4f\nJivPM4ZxTPP3oua55GPS9hIddIjQT8sWD+FLNjvXgnR5tHq6IMspxMnLsI3J\nnxFObZI3dXflJKgBZ4sCILMIdCokYV7ctTPSuYnmZePcy1JcvfC5oANT1Bq/\n/l655D181MF7vQ2JX6uoFTgZPJepNq95oLvE/SXfTwYpLqYXb3EgXiTbIfbH\ndJqmFr6BlEWwEozyqv1zjsJ+KnU7A6LAS4j1riebAPPwcIElHAq1YVNi3fba\niqS4hvmHsw/PIlNSMuh1rK7wg8yRPCvHSItpfeq5+yfMfTcBTVVNww3xjoOL\nuKi/ZOMYGRCyPCdd/u7k70zR6AGOgj17KcVQJBkDsbzpBq41wgTD0w9z2w05\neA/agGrO9O6ZpnN2q5dXPeKMlFtnR9J3e7rFjdoOmitdWHFWCQpvj45x7ITH\n5cYiRduYey63Bzqkrqf/s1C0YZQDwVxw9MCVTzSaHuLv3Bc0oeSqU6wyd/DM\nuzSvExGevsxsfU/J+ubVSMRYV6uUmBqZUEu2fH2xxmwfDWKpMOW2YWje+hlg\nSpVW7yxzPfT9H6JKPbU02zDAsA6960UUAFF0IPoYbspEk/5NiqFc3x21Z21O\nSFLQ\r\n=IuC7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"a8386840cc80699c9abff9b87f8724dc70140756","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.1_1551035098595_0.6789645142747349","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.2-balenaos-disable-front-flowdock-sync-178b4026bb633ddf123aad70895e03239eb9dd1c":{"name":"resin-procbots","version":"3.21.2-balenaos-disable-front-flowdock-sync-178b4026bb633ddf123aad70895e03239eb9dd1c","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.2-balenaos-disable-front-flowdock-sync-178b4026bb633ddf123aad70895e03239eb9dd1c","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"fe11510b3eb890f1588e4614bcd2e929b4c51fe9","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.2-balenaos-disable-front-flowdock-sync-178b4026bb633ddf123aad70895e03239eb9dd1c.tgz","fileCount":90,"integrity":"sha512-Gy2hsbAPKyUJ6YqgqE6SShBLiNdWs/RX/4zlk1ZPMnHpBkOLC6OAR02ZjZV3yvWuiOPQFJq2VRr5mjSh6RNVgQ==","signatures":[{"sig":"MEUCICHJDMDEK0er4pfuIDvt1ot/2Rc55ygJb+2zo9z4LR/9AiEAx6CauiONC4qXu/jSlCpdak9InahX+O5CSIzXc4oRw74=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":909716,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJccvUSCRA9TVsSAnZWagAAr6gP/3Bzi+5zbdVe+4wWOPjO\nwnM5ssR0GNqaiTwh/IRVOh5Y0Z3k8lJp1NR0WZru6Y0TqWfQzpvQxBTKUXQt\nHyU7vq22YBrTGupqTenFkIVB44eTiquwuSQcIysOQTl74E4K934HXaCx6blB\nA6VpegmBY6nFkZKf+hugFKlfYy62Y5IFnExYPSGbEkprhpP+B2R68ABHOptm\n0rvKx80RCvKtAN+uqLdqoVWBkZsRmZik6LcLYlbtscRRHNKZZa1mj3i/gtbK\nUNfPywi6g6byu3kUflBvGNsayXG51JN3kCYwEBSS9VMx847SLBTwNh6FVZwF\nme66ENXO3v15ZEeGwgaTbU4ykwdzIlqKPF8qcniXysDdNqICH+M8gkg4UJW5\n6QmZ5EtdCKw6zkR04Ro0rEkiKmSJia6yTyJpqtfiZztImkmuBbR0ezp4kZuc\n6NNFOa7z7+gM6keC+5SSHfBkE421IiIiKvus25R9wZStz8QVbVuzj9s95pow\npposy9g1q3aZ25B3AoYLQvUxin1TKCn3uW4Jh5VUopw8EVvN3u32qgL53xpU\nKe23yKg4DY1oKcqfhNpjE5vcSbampV4qzqWUDLC+X4Qs03uziy/tY9yBSOlX\nUxxR9vv3K3uyeFIoaQ+1+QIyx6LKkgo2kkDjABpApJYt/G74Da6AtdmjYID+\n84Wk\r\n=Xk7X\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"178b4026bb633ddf123aad70895e03239eb9dd1c","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.2-balenaos-disable-front-flowdock-sync-178b4026bb633ddf123aad70895e03239eb9dd1c_1551037714253_0.6993993055833909","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.2-balenaos-disable-front-flowdock-sync-ca04ae18a91cdf6b0883cc24559f2567a6d9c2b9":{"name":"resin-procbots","version":"3.21.2-balenaos-disable-front-flowdock-sync-ca04ae18a91cdf6b0883cc24559f2567a6d9c2b9","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.2-balenaos-disable-front-flowdock-sync-ca04ae18a91cdf6b0883cc24559f2567a6d9c2b9","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"3bfd0fa22e6d1e3fcb61a2a29da955e077fb6b80","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.2-balenaos-disable-front-flowdock-sync-ca04ae18a91cdf6b0883cc24559f2567a6d9c2b9.tgz","fileCount":90,"integrity":"sha512-AW6A+UzXxkAUprtnFb59n3tMN5pDN7kL1DGbFPBP7QFfoiVPIAjPYu22dqoBKU7KgHZGEAtQbRzy7FLXuTPJ8A==","signatures":[{"sig":"MEUCIBXt4b74egpL37c+xrJ90U6WlZWDfyA98fzYxb4g6PILAiEA4zpfbmXSo3uIuB6eitxSiPAXa2YmEizg2GjEcp/DYQc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":908621,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcc8dcCRA9TVsSAnZWagAAE3kP/Ax6hNzJQo+EJDuz//HJ\nAb65Ocr7ZH7mDZcrOAVlBmRCakZy4VJME/JwyTAtZ8UE4u1rEwmxUV2yAZys\nGdjSWA+0NKH08KYxnMghW21uYy47lHSjkskwCJOaS+d2BAJfFzpeMOcJdknR\ndE+TWfFzd3SVwrPvTKhkMQQTmfz/bDWvbUHosz8x8aypWRGNf2qoNPN4D6h/\nHB2AahY/4jOFZbXN+J8zE8jfZlcR9YWOqVTq0M8HXjSZ+25MnWOvuykAFjYt\nGEHrz7vDgxCMTBosm2+elaPixpYtJaf0wJYvelebLZNAmbTR4OqnWxAxghaJ\nxna7+A276moaj4PtnBnWgALwCt6b+FV12vux5ArUEbfZJlBK3ZqSRS/M9JBW\nxhrsBSNAtzzd+PjoqzY0bG03CJWqKUd9AgtcfgKP222IBfh7p6kaZ6bcsAvB\nzqNAQyjq74psCNaCLYy/pYc0p9XnzAvVRt8GjVmsDnN/QLOrRPMY45dl89f6\n9gLTFT9y/xtbG5pOvZx1WacESY8m9ZyqPYYxs+9EH5zltw8+toUN0nRTF6KU\n/lETpb1Gnzo4U/itrrJor8qq79F4TdKCpl6dPvR9zrZ4WmpSjKko3nYhMIiN\nf5YrfsK279bkrPVkXB2RdmZ6zJsJc4jroejwRDMH3GE3uJDwqfQeHVa/OAdq\nl2hx\r\n=1qQN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"ca04ae18a91cdf6b0883cc24559f2567a6d9c2b9","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.2-balenaos-disable-front-flowdock-sync-ca04ae18a91cdf6b0883cc24559f2567a6d9c2b9_1551091548109_0.0216149880922889","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.2-balenaos-disable-front-flowdock-sync-9676ca0589469f5116ff22d247042f08992dfa7c":{"name":"resin-procbots","version":"3.21.2-balenaos-disable-front-flowdock-sync-9676ca0589469f5116ff22d247042f08992dfa7c","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.2-balenaos-disable-front-flowdock-sync-9676ca0589469f5116ff22d247042f08992dfa7c","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"6ade55d6bdb62d02d8d9faf1816cf85cd37ffd88","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.2-balenaos-disable-front-flowdock-sync-9676ca0589469f5116ff22d247042f08992dfa7c.tgz","fileCount":90,"integrity":"sha512-EXYd2C3+TENNVzENV4jbnCtXYKRUlv+PfmKWXvcAr3cc8M33CWSYTaWgYOmre39U4Nja1Hu9QOYrFXrHWs9r2g==","signatures":[{"sig":"MEUCIQD1LywHAUdIfyAdIGJaDuhvyCmp5s5eVim74v/9cBnr7AIgbIUVvLC0tLxp7sCHRfhn9tPFGpR53IJqkLcEIobWqiE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":908661,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcc9CZCRA9TVsSAnZWagAAeXAQAJDJKCzhSn6biwZJgQSx\nrE6L1H13idRUeq+1f58XRZ99JfnQnjpWBw/mehRFUoyaMA1vWwXPFdiShRt7\n1QRx9ZSHfTtkT43b9AbiUjygeMRsXEnsVPXdBbJfxMDHuM56SwXAOAt9Wzoi\nGzqV2w1XhW7NOe7dDpSKOpz3fHQtw8siXObn3VXeRFhR0osgBGfmDOHDbtmC\n3tKL1SZR1XLHCIauhmnvAKmQ1fEZPo8zV89nVLrtDCNy2UQNkWq7tcXrrBsQ\nNFItFmjxRCuLCppaoJAaIxocCMbMWEJMFk6YDRiyWKYfZ/Hn76Ds6bBWZaGk\n6zTFFf7ruuJY8aU/19OTDD21cqTfxtxnlmx+yLUsva39l4SZLm77t4U9MfVU\nzwOW+uERGSAIvThO9OZWGLOQX0Nz5MulmgUJnr6MCZu7afRcBRuReH+ieIjh\nWqheOR5BeJVyki7TZ0ScEELSSUCMYnlOaW9CcKRqNX2p8GOA8UagKQ+ComSm\nn8sWnt3T5nhSmvbsqGglxbxYr7YjvpYYGt9KX3EjVZjYQz1mA71J+9OALeie\n3bC7W67APSy6R6QZ/2wgMKEA7e8/yo/BcKClh0BxQhK0wptDVAskHRR3vzMP\nSSM5S+Egz7U7E/NlapXgh96s0fUXAIcX2PtjtAMd5ca3Vs2gLL0LqZA2pOMW\nTFd0\r\n=PK+w\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"9676ca0589469f5116ff22d247042f08992dfa7c","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.2-balenaos-disable-front-flowdock-sync-9676ca0589469f5116ff22d247042f08992dfa7c_1551093912781_0.6780975808991399","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.2-balenaos-disable-front-flowdock-sync-5fdea8448c39e030595db297def5e91398b27ec4":{"name":"resin-procbots","version":"3.21.2-balenaos-disable-front-flowdock-sync-5fdea8448c39e030595db297def5e91398b27ec4","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.2-balenaos-disable-front-flowdock-sync-5fdea8448c39e030595db297def5e91398b27ec4","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"0bf4c9479ec192cd51008c79203b20bc61edf166","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.2-balenaos-disable-front-flowdock-sync-5fdea8448c39e030595db297def5e91398b27ec4.tgz","fileCount":91,"integrity":"sha512-M1H9PXVAq7PlJfGaei66ESLZvb5xj0tSnlTw33ruowIw/JkgfX0H6BwHizmmwxwS5RvsGDROKHET0meJb7EnTQ==","signatures":[{"sig":"MEUCIQCFJMuNOZT8F5lN7jPwJSyaW6w+0Set5NYEcWbiJmYPlQIgCLnCc/o/RQNiNU9XaT4pLmHpC+e3UHcUz+awEwTX1Cg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1192397,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcc9hcCRA9TVsSAnZWagAA9YEQAJt9jrXtk2ruv9xB7B+9\ne5RyMWUXpbWM7k/lFHs+FSQeSRMri+fBeoZ3K7U1mbV+8bkGeVoEzrK3P+OS\ndajZxivODmZQJ6zaPhi4SwGZlfmp2s2xJguvnhfwId0W2kbI0UqpqXFvAjRx\neoewa8aWh0LWyKGvNWzPS+sMwAXQyqKCb7GdogMLQ/FrJTWfSGCayD4R+mAW\nsq+zcauCDk6Ik8IL07/JUbIa2N61+6DakYE+pqzR96jwgs9L8Y1iz6HesTt3\naAormdjvC8Y8TFOgTd/C1EYwlqsiHaR0PQzKmpGFNoAse60Bq/qW/EvXe37K\nKr2BT7TlY+g6Nw+eWrP0DxuPs9qC8wHMQEcG1v+PwCweL2m4lUNxWvjDAetO\nJSX9dkICk1b1XCXRoytfKJ4wqlVhiTU1m/omNQ4M0mTdcdTGIEufAh2H93Av\n51bRdX1lhl4nTZm1LQVp2NyGjGIVX0v8eLmDJBHVhX17SIL6MQ6BR8pa3H4z\nucEGYGb0z6sd9nlk520iVUj7bneUj9Q6VLu9beUSdaO+2jHHWcNei2ButP55\nphBl12sYJ4MFVkl8mHPh96pzyn1xlM5Vc9BTb8Fzp2EF4xB7QqQQ3oqCm4GZ\nN2r1t1pjWV32Dfo1sL/BU5IfgAVOz9RDMUBSW/Aq7PbrtbcbSg8uOd+f5/du\nVwkn\r\n=AVOU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"5fdea8448c39e030595db297def5e91398b27ec4","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.2-balenaos-disable-front-flowdock-sync-5fdea8448c39e030595db297def5e91398b27ec4_1551095899433_0.635209603542332","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.2":{"name":"resin-procbots","version":"3.21.2","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.2","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"60f9d311228b266b2758b075e3e4150f6a379ef1","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.2.tgz","fileCount":91,"integrity":"sha512-7IQqzd+xwcEftGdEVGOqAkKbecoQxLY3xV1cHxZ6Np7siqLVS718PD4f7jmOMfOSoR5WTBMZBKLS5xluoSP0Ug==","signatures":[{"sig":"MEUCIFu2zGl0MJbeonAQ4KrpFnDPF7rDl2T7VqDdfQiZs//wAiEAnBRV7UPhWrpiPUeVxSbiYMhw+OLtVjYfsTLX6Xb3/E4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1192241,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcc9nvCRA9TVsSAnZWagAA7SIP/j8DiCfG+wzA+dgoWg3i\nknhIwm6kPIYO0zGviMec9igL8xjyxbRgOFPo2C6yK+kko0WIF9ptmcPqxuyK\nmavr+eEc93SXA3RASDCTd9ephfjdLILWN6SqXQbVMW384+S/2d3A9pCpwQIm\nwlJjRTx+z/FKDiKapnzjbZM9X/iHGRBPzMk7wRDMPGBlgys35XO8Sc6aOso+\nCpc7rEtIX+LGYulFwq8e1zrmk4XK4nh9Uz4iztCtFBcBsyp88TQJoKIapJYv\nFSLKT4GxrhEepI3JiGzlUGRXIFQ3elwja2lvQTZGQA7wtb4ZqfDsmLCC5uRt\nLhUA9yDRlaeu/Jp7f0STphKt/sdy0E7297GHUuzoGkVqb+wEP97GEnIjztED\n1n90n0lhndLo5EiegziTMELPWy8tQ4JjMMOociSuVQKcnSuDlha16nl3LmYP\noUoVKURyT99IL8UNBaRSHEyDLZFe+bSEY9irknSMmo7rF78kreUGvIKrPR5D\nQPynzPTx7ZeiY0UziIWhVlraUXmPxBwkp933sHOY9IHw96hXAdlwngogGW+e\nBC/yzvNzxofW24VuFEdWTYRkGcTAa5CVhuMjFpbxBbVLf1+Rbga6I8KSwSFY\nWLE8FZ2sJG/e1Ve0c+JRiYPszt3nXkAht7ZWKXzIhxqNiJE3BDW7Ihsvfuu7\nsMDS\r\n=hh00\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"c41b66004e38bee9d7d184848f033f64bed2834f","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.2_1551096302681_0.29930002012496115","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.3-enable-balenaetcher-sync-bd23be5dfc08e3243433d774b1baf7904823b256":{"name":"resin-procbots","version":"3.21.3-enable-balenaetcher-sync-bd23be5dfc08e3243433d774b1baf7904823b256","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.3-enable-balenaetcher-sync-bd23be5dfc08e3243433d774b1baf7904823b256","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"8caa9b19dc8478191c74c008532adbb73501fbdc","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.3-enable-balenaetcher-sync-bd23be5dfc08e3243433d774b1baf7904823b256.tgz","fileCount":91,"integrity":"sha512-/3cS8eV+GvAx+UmjpDTWEqqoWETi3v+AV0dy35efShdY/YQTQvzQVtwbBzYWVqFATuRpRCLj5bTupRfTIjAqpw==","signatures":[{"sig":"MEUCIQCUSdUd/2UyYO2/F5T+4C0foLfvhn95i+TWyj7SsyH4XgIgXHCjOU5omF5786+vSou4bd6sTbjZ47LKiUoUnIHqhw8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1192173,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcdRs8CRA9TVsSAnZWagAAnTcP/jsmI8aIHQU7iiIPreMZ\n61frFAOgmBhKyogAJ1WQ45tZGTfndDCgp8db7VHa6g473j2VGdJps/yBtaCb\nreAeVGey4h5NhV9DgABBH+4yRoH7DQ0r0FjHCnsCo22fbOmmCSXI9TlZvci3\n6fmsbVVY5Ox2858w6w7fr/1I58B9ROA4WIaG/dswRvBGYPJJXe23YfsP4B5G\nfjGepdzJdO+6AYTnogcbuvc9CxDOWSqt9iTOS1XvmMc37moAkbXAx2gJ9yZZ\nAPKj3SArLzT5gVRc3pBA6w7FKjkNS2tTKOwVaQnj94dgDsOkywoi25YJBaPA\njhzK+hsiYWE5n3oBsFyU5Xh10Qz1/y6qpOUP2BV1o1iJ15rKYU4XUZiOzCNQ\nzyOjQt03qFQvturRb/0l6Rnzj7jDcjxN3lyeWS6Rcqa2Q28Zbc2quoM2aS/y\nNdG3U9cqWNW8MwqyaXCNTkgJbdiVt3KnPGMW9dleFmFIRVX79f5wlFXgzvrG\nLBEfRhikD6/UEopefMeT13SF1eltj/I0Opd5r2nbi/uTpdo+VnMaNe6NII7y\n8HfaoGReiB9a95vLKUx+MaMS9Kq0xXsLfR/acgPd3OSNxfDfzAZSCETvIDJ3\niZDCQZu1YmYxJv0QxwcfnRCTsIIlSQwmjt3EN/9MAW9zUtV6oySTFuVpR6Jo\n/u45\r\n=M9Jz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"bd23be5dfc08e3243433d774b1baf7904823b256","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.3-enable-balenaetcher-sync-bd23be5dfc08e3243433d774b1baf7904823b256_1551178555425_0.7464307530390273","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.3-enable-balenaetcher-sync-12b2dc18a9f7898f2b6fa22d81afffcb9cbcebda":{"name":"resin-procbots","version":"3.21.3-enable-balenaetcher-sync-12b2dc18a9f7898f2b6fa22d81afffcb9cbcebda","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.3-enable-balenaetcher-sync-12b2dc18a9f7898f2b6fa22d81afffcb9cbcebda","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"ae899e9ad7b88db5e4977df68ed851d5eca1f4ce","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.3-enable-balenaetcher-sync-12b2dc18a9f7898f2b6fa22d81afffcb9cbcebda.tgz","fileCount":91,"integrity":"sha512-9/YStH84GII9wvQR9Bh3eJ35DH5eD9YpmYABsDK/7D3B1+jnxOOoKYRbjHI9o/5j3ZwEt6JgOIYauNIhOUkFQg==","signatures":[{"sig":"MEQCIAGuiJ7Q5eFzroMcDKSmsgvW8/pQ6LwcQkSzCfUz0zLJAiA4cHLwPN0VJ7f/2OdEpgPtRUG/I/myep3HqDfJIvGn2g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1192176,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcdSI1CRA9TVsSAnZWagAAQTgP/1rlfMi3yNn5EIqn1YtC\n4vJ1qnhOMzszpdS+j/RUTAOXuxgrHp+zbpz275VQNIFdTCZpYd42aqWZxEEi\n7/WjwL3Z5G6mHkqnagZVn9eS3vu9kJWeEY2W/YDsJyY9H8Y6QM/kgJ6WAPQV\njZALzluiIme15nN1caWSqZsiisnL6x6oANxYoZmeSfz3WkEwQrH2Kl7Xd6/n\nhxMOgproxi+Hu87N8ty74a2KfR0t0t498+LTICBqtfcrokIz0q0SsUkInkgV\n4IBpdLzIY3csE95AlTuB47cp176jXeOpH9V+RrzQg++Pzuc/gXTZuyh901aZ\ntjk9GFSl10QoDTrM2O2VVUD6IEmouoL+nQqVIGUVEMUVkCzNH9wysuacmoZM\nt7a8bs7HOUKb7SIIWqqp5C4frseZ5j9tx6m3LP6BueIHXBZevo6KeRV1mHLL\nxhP3HHPpYRHF/r+o49jPtkTJ3S9GNVZ6u4vydXF6BCqDNWJdK5rwh/y8KF30\nKy5OgEc7Y4ZfQRx4nys8FWcnkd4yWMDcKAO4mYzpMbk+tT4hi6BnTX0kbAaF\nT/pK+niGicBezGFJFRXhHaUr8cg0F5SRJUsW203qht0VRvyvam40NM8+JyPa\nB4liuwEbwwisd2d5lv2Z0JNShkcDM1B06bHklicwa/iEWgL3IbrkxPjG6DqD\n/s1n\r\n=cYN4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"12b2dc18a9f7898f2b6fa22d81afffcb9cbcebda","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.3-enable-balenaetcher-sync-12b2dc18a9f7898f2b6fa22d81afffcb9cbcebda_1551180340401_0.8002498612928373","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.3":{"name":"resin-procbots","version":"3.21.3","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.3","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"015ef2d7b28790b1f552c907649bbae95375d24d","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.3.tgz","fileCount":91,"integrity":"sha512-qYcZFsPbUmSjw9xPf9oZsAeEE4dTEy7xGvn+/a9q0Hn3NfOFyp/pogvVFe8o1gYY1GDHUodxdtS19GckGaDCSw==","signatures":[{"sig":"MEQCIC3jYhYxVOGJeu4mm4DVJWFqpba85A0z2ihY1RstUDnsAiBKPkiWxIbCQ+0slZhpxeKkSU0Z3aeN/uFe+6Xi7D+39A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1192044,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcdUOiCRA9TVsSAnZWagAARpUQAJyZr6EvJ4GvWq1GFbV8\nfTfqB07t/RfnTWJg0j+ZtgeqPLt2MIAs3F77flRiPpxGIa89TdjrsCoYo6U5\nzEu16UuDSfkvRd4ZrVEZwR1lLRM+jKkjFFpYy0cD1zXW5M7OtBpp6ptfSj/V\nvLiOBpWJ+SXRMBT1K24ECG0BfNXoUZxCrPD8T1AVUM9PEmvBouATAUVFyYKR\nBzw9IQZIVuau3XGHphEdS+tXnpnHT1fMuGBkVVcUgYWgiNbpdXQzEaOu92l3\nhXTPic4AKfcXGNXwzMbk1q7xjQWyRKeJ2qcLcdsDmwah7otrw0YkiJABVe5D\nS9kp+WS1LW8OXHnYDa74UZvUenTLfi/5nynxl6JvbPSMUZX80+9vACHb48Jh\nhdOHXffQ2ZtrP2WZ9wi1OKVIn3WZNJRf3OiDoKqEtCNDBNY+FqitmNMmp0BN\nK8GibNaTTpcGt+YTKAyxLqUL55pvAYl+/f9C3upRRIJm6JLAOfZ8VSNqrUbw\nE58Ca86Ad1tD5338Crz4HLco8Ncd6FtsWpYvKVOV2x4cYPDGS9sejbDUlkt2\np1/4ySFn2MFdKCzfPQoUM55hsYo0eUpDw2zf5YcdmDFYd2Au74/x+X/g02I+\nI3Zz28aybW2ciyMsn7iN3N8Pet25dLhsO5wm+RJyFDOvnMytBy8xomJjevxC\nmKfT\r\n=Tmcf\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"da64cd5638f9e985e71dc9f04d222c37741e4dee","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.3_1551188898232_0.8817415952283332","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.4-hide-discourse-edits-bd695be1d71d78503f64ebe0c297e3f15768ed3b":{"name":"resin-procbots","version":"3.21.4-hide-discourse-edits-bd695be1d71d78503f64ebe0c297e3f15768ed3b","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.4-hide-discourse-edits-bd695be1d71d78503f64ebe0c297e3f15768ed3b","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"bef7d4749557259a658a7e977da24e79370c2a24","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.4-hide-discourse-edits-bd695be1d71d78503f64ebe0c297e3f15768ed3b.tgz","fileCount":91,"integrity":"sha512-p+K04yPRhkqnsGImaFuqfKQFFY429ZaoKGntQBA701Ohw49waxxKjnptXSxLrP9CoeNKTyjtQYUa+jNZELVt3A==","signatures":[{"sig":"MEUCIQCNNqu3Vp/TTOcE8g58hAJTodnGXXYPj0fM3wqrly+d9wIgNCEYK43JHolgxLyGLfOL+ttEt/2wg4T2yLefGglrl6c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1192265,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcdUZfCRA9TVsSAnZWagAAUoEP/AtnLLIOwPBcFuADeacB\nSdRYJPXP5+oyhMuGwjSTULnIck3O2/G1U8fdxrpeuIdXUC25/8N4uc8CeOrw\nKuO2SyBSvG2kYinlKUggl3mje1ylK02VLdWhZQy9OoW6H2POARcZiQirmBHx\nHa5ei8RfVKdAkF+NOSoRcEK2xwwAQr5aoS3GAm2RgkAzyeS8g7M+CWQtIMvz\nVfB7j4ZXs1bLxBcAcok53gr8Z8b+YQx8pDNK7pD8y2tkt/lNVwXNInnorVYK\n1VF3vMwjBoOPXVQHs60fGvYV0OG6/NAFWfn1YXhIJDyF9SP5nzdf6L2tvcQ8\n+/ApGvqwzH0aoRv6OILtaJtAR9BWWaGRvnCH6Kh8uU5c63KVvMTPIl2Sedtf\nMBme3rZijvHduNCi3lFjDOU9D2l7lysCIRFUgx+6/aiu8nDDVu0OtJqgSfle\nWwVYfgfG9DfZhHNlubGv3VSiDw6bp02ISOx0o4I7hpP/WjElKbQogLLZ0liG\nS1MP6lPDY8hT26Iak24fdyq+YTo+72kitOR4LILaBs1peUkV40rt8cKeWRRn\nI61nwQ4BXFJ0URXdx1QccYTTP478C5yxribrApSTt/TiYyN31vHlnc1a65wH\nj3IGBODoY5K8MTYNQcvzNbpah2n0CKfG1aFiRXtlUUJI2HSFXH4IaZ6QrIro\nw3ul\r\n=cMmL\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"bd695be1d71d78503f64ebe0c297e3f15768ed3b","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.4-hide-discourse-edits-bd695be1d71d78503f64ebe0c297e3f15768ed3b_1551189598656_0.22118163446527594","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.4-hide-discourse-edits-fd29d36c06aabf601b6992f5cf537a0538eb9949":{"name":"resin-procbots","version":"3.21.4-hide-discourse-edits-fd29d36c06aabf601b6992f5cf537a0538eb9949","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.4-hide-discourse-edits-fd29d36c06aabf601b6992f5cf537a0538eb9949","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"ec6702002388bb8c0358460353e3f8e17cb009ef","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.4-hide-discourse-edits-fd29d36c06aabf601b6992f5cf537a0538eb9949.tgz","fileCount":91,"integrity":"sha512-RZ6ljzWQyRDouOr3kc8qV6X+vJ24b6vL59PyUHQZG5rvanEdBph+qYzBEcrTAFyDR0pTnXRxLZHK6Z9dxEdzlA==","signatures":[{"sig":"MEUCIDzkcx7utA5bDF+AfE/S81XdpEROR2Tf8Zyat6G4XjwrAiEA+g/xx5wQd04D0IxNAA2kYQKWO4j2wBI0EmDYqUbzxu0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1192266,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcdrcqCRA9TVsSAnZWagAAe+YP/iXpEGMXKCF1lgHAxP/k\nBk0Ms3jeTYsGyoHq9hnRGWUITq4XtmKfHI1x0uko6c1Gyjo/O5k8Sf05sC0h\nhqAtd/pFrLS8VeX4d/qqZmZmejuMqJDO0oBtRG07C3CLafD1jnVIGdMqaYWo\nE2GLBuKU1ZI1X2ytUfaSrpoU+VEIOvLFVUzM5CeOmMFVxNkKUGl4e9xrWaPf\nCsmkiHWQ7nlerhfz14C7FRQvHuA3lNFmQjcWPiOL54qHiiEChikNdDkPuBau\nO5VQUNKM0eF6KkBnHUDR3ZaRvd+RvPrP3kxWQp7YVZdbh6dk9c+Cnnn2R07M\nRRZctgulzEjL6vdpCw2CCinrmmY1H5Uo52tzm6yNtUJg5nrmsQKSjNM84wtJ\nODV9fYQCPqz78H8BnXcyjgHlZBIiXGMYvZ3KVIUNKzoV/ENy0PSeJxI/DDyW\nRZ1oxMAT8tCaea9HE1Rvk+X9sO/5xERccW9I6WjYiyFb70cCuMw9Qai6jCCz\nxCAp7dXWcYJd+CQL+6D8k2zGcOwGnWKV50DhWDZdoAIN8SIyIl65JDwEaaXf\n71YObv6fqxCQySt0TmuUroPm1Am3rFmzIyylWAGPaJTbVUQiidjkvgfvM8+D\nasDbVcLTH7E2MyDWKCAEz8ThzOkZXhmfRpGo8Sz02gmKgXnjHdw3k8bqAwb8\ndXNx\r\n=HUXr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"fd29d36c06aabf601b6992f5cf537a0538eb9949","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.4-hide-discourse-edits-fd29d36c06aabf601b6992f5cf537a0538eb9949_1551284010140_0.38789008933386127","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.4":{"name":"resin-procbots","version":"3.21.4","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.4","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"7f7fbda2df76770f720c6285ae0ea26b9d7b2503","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.4.tgz","fileCount":91,"integrity":"sha512-Q2Jumv1aFORnkhcRlpL334Skd06cmZm+9yLl3nOF9wVhEEayRECf+EbkBPBU39gV7VSRylrwG/FMPbaKfLrQFg==","signatures":[{"sig":"MEUCICHp/tpwSJJFREK6E4FYQg9ooh6PGUmID8D97uvk+aPOAiEAx4K5RD9pjXbrpGjMRL8ig9DNGTWGLQ5YfXkQ73RW7iU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1192142,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcdry7CRA9TVsSAnZWagAARIoP/1QZzwXc7cYaIu4OGpbO\nECXwKAb66TYhvdTmymbuKcjKjcrdCr9tsMXmWjOYTj5I7bSGXT3r5DFlSeEw\nmamd4M4lYt9v/UtG+1//B/btRQ9hPSl6WiStn6yFIAAtjMHdvKj9ii7qImyu\nsszubYBmgni7+6rFu/3ZWoaByd2DUu/KRgaeRpf3qa3tPNBdyFKyKEWiNNJq\naGDGwfqBI3NdZCaE7IGsgsU4AMy7kDIj6mueD1zDpMLDiNdnBJp9qacBnuXd\nkOfuD8vdv+hvD49+0TZQvTe4ZfH4aUE06ej2k9DIUVG/PRg2Rn25duCbHDRq\n4VaVukzgMjrUICTBVd4zhPvIlKr0MdQgshaVA32zmXRxsusvQie7guI/eCaj\nOteHOO/zDIMR+gGvsAQXcnKee54sU64w++A2vLnJTLl2GG+Kq1jnPM9AIexN\nkGb67sP19HtLlXMOkRsmJ1huPC49QOE9snK1ZJRmVkPdJLcWPQ6YiFF7Sf2g\nfTBKPxCd1ypInrZYf/6WiG8hmksyF0SzugysX1PZWW5KUHW6mts9pVYJxwyW\neQtNQbMPIR7GYSbqKw3Q29W5pE+mnGxFq8pj9g7HVWqCT1+yVs/Q5QcRLLCn\nQHUxwvku8fy25lsmEptH4bZq3s3/lupNPfrm4/Hb8+v/KkO8kR27Wmj9jq0x\nBiMS\r\n=aNNC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"985f055a0096fb0a09a1e4e63b05f8ff1ce93532","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.4_1551285435111_0.6548213092778585","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.5-intercomhack-fix-ac5766f3469daad808cbfd2ea535a77f8a9100d4":{"name":"resin-procbots","version":"3.21.5-intercomhack-fix-ac5766f3469daad808cbfd2ea535a77f8a9100d4","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.5-intercomhack-fix-ac5766f3469daad808cbfd2ea535a77f8a9100d4","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"0d71b77d1f93339170d6cee5af84a5c9842e1190","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.5-intercomhack-fix-ac5766f3469daad808cbfd2ea535a77f8a9100d4.tgz","fileCount":91,"integrity":"sha512-UJNmNduXel8jaAvft3Ts0nMTL0ewjl+fgXLylWVybYKEsKraS9csfkNpvk6fikK34XoAgGpXnk54TCue6rdLBQ==","signatures":[{"sig":"MEUCIDcnk42tVIXefGEUtc7tJ9ZneVzrwrE4J8WO5DIKDyPSAiEAhwy76uXwzrflSh0xCZT/ugOaZuZ4xeA/DY0QgfJuvSA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1192724,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcd+TCCRA9TVsSAnZWagAA4iAP/jN/poEy0zVCltMsEwT0\nWPUoKT9yO28NBjWgQPfcwn1bY01X10plLeeH0OoovIiKI5beb2ZaS1jzUE2o\n3a3kkq27Ow81rFPamlGPfgN3wNDQd21tVfFiZOR9tmWqCpfJ6bwR6PSiox4R\nbet88nWyJ3YNK5rgo7P1zvIt5ioeNn70+QR26euD7d2F1aaqbMJlmVy2kcVl\n/iXHj4P7sLKe4Nuos+hMG6pTmt1cItxF65lmKTvZAqR6HOlrv9hVZZouGgUF\nckYlyBzHH7VBGVWI1XGVMQ9CVXue2uAyr8liRC/YNo6scRV9fAVJZ9T5j/aF\nn4fQQjrCXBO2SY3hM5/0i2LUgxPUpGCHfCdTUZl7bagomxDsKykE7ykc+TB0\nTYWYzkSTbqI5CsFwszN8U7YSx8sieR/hyw6PHiPVA02NxZ2VCmz9a5eUYI0h\n2SeLDJ5m+iRcOzX+iZPkoVYTd5W4wFhbjmgzk/+lzQIGhtj9iPL7vy1PqXox\nt9Uz8fzvoVZOBFfWO2jIxMRiDAZm+EXcnRTyQgnGA+7j1kGukZol+de7ka97\n3BgevRgVGvGybatv/6oIH9ew8uzQ+2hutYz/468H70YfjqXhYoCtu4VfElxM\niimHldgmD0RjyfYi3U80g2EbTQ9ogrgoivhS/YZbtGvb0ZYqeru5lShq7v3J\n9yWM\r\n=Cfav\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"ac5766f3469daad808cbfd2ea535a77f8a9100d4","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.5-intercomhack-fix-ac5766f3469daad808cbfd2ea535a77f8a9100d4_1551361217924_0.034964823852451365","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.5-intercomhack-fix-41980fa96b154f4da428edca32bfd6fc9f445271":{"name":"resin-procbots","version":"3.21.5-intercomhack-fix-41980fa96b154f4da428edca32bfd6fc9f445271","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.5-intercomhack-fix-41980fa96b154f4da428edca32bfd6fc9f445271","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"c36c3dbbfd2f79c272aa8035fdab16656c51c0a0","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.5-intercomhack-fix-41980fa96b154f4da428edca32bfd6fc9f445271.tgz","fileCount":91,"integrity":"sha512-7hZPVXzWRMnZOXBqpcEhxrLlpM31JALScYBul1uDKA3bSGNBUdK3yEctISIcIG5BIx18sFO+qx3awcLWmzOJQQ==","signatures":[{"sig":"MEUCIAUyAHtpnjb++Ed9OSzcTfDiB7DqDwW5VEVXKpM8agYOAiEA4d/XloxgrXbEWVWnSZSVUjfTcJ7ALrwOmWVCQ75xOwI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1192724,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcd+bgCRA9TVsSAnZWagAAPGEQAIOgvpnVEk9MFrpT8vtN\ncJ6/lbUNkkJ51I6WaP7kb4cPSorYg0AKVe4IgCWbzqMUKbvL0y2c93IXfm0c\nK/OtP2G3KFAvGfvu2oDXFQBl4L+z4Wb981a1vgEwRitSlxVCSH11UmFEC8eZ\nK19dkSHECUP3KRrlak9SfR4nMsSev6zEV9RiYX039PIawga3V2qGXgAJV+LZ\nC/a3cTwboB8ED3DMUxZgKVjmRfFSshpVVsv/wNiapqh+iZfodQoL2HMart0N\nokuQz6O//eiWUdwLsbBpurYoUqhAO9OY63S3VpI1x/xmp7CLzjEinN+X0J0j\nYIzF3rRMVJDamkucCzrsLenbX6SWkeVYKYZwOZtgEKa48wSXhkf1Grcpg4CQ\nVaWDPrYzSdW04NTviJJg3VMLbdWhuzhSiSQ8L28S1M0zON/AlJWRR3GIa2KN\ndvgYm+gJhoeRcpX0eFkHPccDqCEvPyBo8EzB5z5RhBmBwrSFZ721xaqhrYVh\nnVRcRcLTVJmxE1d5XoVK9Adwp1QtEfySg7w8KiRASbegLQzdxr4UieyXN+sL\nmKEcEiW5xUP7QoZLtHVZL8sZ+SJzt6sd0ZVf1F+xrJupwhebabkwPJfaZw37\nvF5RoRwP/qX5dzDZUHdSsEXKMQPwgwc3IWY6ldUgWA/xdYTjlPZByPlQpPZb\n7Bxj\r\n=8oDf\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"41980fa96b154f4da428edca32bfd6fc9f445271","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.5-intercomhack-fix-41980fa96b154f4da428edca32bfd6fc9f445271_1551361760201_0.30096352901008916","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.5-intercomhack-fix-43e8ad5f35b9be5357335e54f51aa4a70b011e37":{"name":"resin-procbots","version":"3.21.5-intercomhack-fix-43e8ad5f35b9be5357335e54f51aa4a70b011e37","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.5-intercomhack-fix-43e8ad5f35b9be5357335e54f51aa4a70b011e37","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"5c36b9d42e063d8e94b431d3c10fd49e0fe9da64","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.5-intercomhack-fix-43e8ad5f35b9be5357335e54f51aa4a70b011e37.tgz","fileCount":91,"integrity":"sha512-Bly2X8S2dqZo7ZBk75ZZMrewj+KbPDAqRuvtUBdbcBgGNpYmtTNGd4zNV4fo2w5vfQ5etSDNwKjinPlTDbdTcg==","signatures":[{"sig":"MEYCIQDNt16yosd1hh4WnP7dYquqZxpCg27d9skzTTntDX+9MAIhAO78MyV3szOPwppgA/My7qnRMrEtGx9kXxQPVyU5DtH3","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1192803,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJce6HDCRA9TVsSAnZWagAA6QAP/RqDX+UznLFstvqYiLUf\njfN3Q3lLpxLNoc5deBq33Q6hlipnfc+p3c3ShMc1qGvfFoJnT78rHIlTBeOM\nZcuH+2P/m6ZN07M5WulTF7umLIymuCprfgEB1pgtRfa7+7TaQU+hy5+oh15P\nSjc8oYZez7EHOUlUkvgenGPKUt2VpBMKvn5UBvWTywXCY6gBMjy2HJpZNGCU\nXBWF1EKYwbBwuuDqij8skwoannnMzZRgpMt492PVdJwTLfbsEd5OracjWugj\nxlKd8f21dOW/gMPM3NsuzZRPeF/rP7ZSOqlW0WdlYYOjLDU3yU+xlwiuLprx\nr9lo6Q3WTzS9RsrtzqirMTkBr9SNVCDqZZEPrveZ5XnNMEDS4aWLMoWOkruG\neB8fqw1MsVDm8cLNO8y8t1DIJGX1mjv7l4+gCQBrbe+OpmBO+qFaprsgoNkV\n1GFV4nbzGBGm/Ssg2UMwoqjR3Upi9aodWINBy7qEuQXQNV7Vx6Xh/Diuvg8k\n2o384mN6+u6b48r68DhP8GXx6nQ7G/dQ/x6spa4FWiq+MxBgnYBFn6DigtYo\n6h8jysZsinaDkesE2eFOtvYHpRSPPdpLtrB9W/0Dml1zCbdskHuSrQB8Y49I\nVVm0NkPLGqCUfcyOArZOIPqHHcIkvzX9DYQl03fkTj6LVTCRwVARdcq9vblQ\npA8j\r\n=EeYT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"43e8ad5f35b9be5357335e54f51aa4a70b011e37","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.5-intercomhack-fix-43e8ad5f35b9be5357335e54f51aa4a70b011e37_1551606210367_0.16916425301686977","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.5-intercomhack-fix-aae0a779b4d2a4d7b6669742c60fc3e72f3be472":{"name":"resin-procbots","version":"3.21.5-intercomhack-fix-aae0a779b4d2a4d7b6669742c60fc3e72f3be472","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.5-intercomhack-fix-aae0a779b4d2a4d7b6669742c60fc3e72f3be472","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"dc33ae60f0eb60ca60518e3874b31700d0d21326","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.5-intercomhack-fix-aae0a779b4d2a4d7b6669742c60fc3e72f3be472.tgz","fileCount":91,"integrity":"sha512-roCf0tEB29MqDOzPrugmFigaZeafqVwc9MfrjtDgg8Ofn+cXd4SUhYE05QNrJyQNxdjfNoXGFCCPmNr08EHwrA==","signatures":[{"sig":"MEYCIQC0EdeFlBoLyf+xgaDQFeX7q5OjeNB4lLwYHsBhaBhvDwIhAMfVuYvowPdk+i6MMM0oXmMcWY89xtCIiu++Jphbv+zT","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1192961,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJce6+kCRA9TVsSAnZWagAADKkP/2JoSqKRWjXWd6LSaedf\n8NV1gS/9rKHalwtLF17tEwUxse1dwy716/1v+/73stkJa4HUmxKJLMNxOmJD\n9It8K4KYk61/QczqgYy9uJ5YY/BKmRO9RQ8eCYoiGaiKJVwpp/hE1lk7WlUh\ncCXe6YLiqx8/x/V3RcBle//3pRI/PLy5aftJr4TZdOzqGf6OITFIsUKYK6oh\nifJOzKW60UBJL5kHFonmlGhMTtTl/yEl83Sb2CdBd+DLGIP1WWrRGgeyHazp\n5VXLdIUCLZ9zFvA2DJ0Nl3UfO7HTJIdIHc5pRuqRQuN96A9ilRz1mYUdGFAs\njOetsNgBNHxIQYFjA0dS2hd1wtX2c7LWxueYWp/+4j03Nmq1VbJAiz4tsDxS\nDNSjcYYOj3bgPV/HZ27ugxIXpdUjlF+28u1GrC6xjaOLZISYwGNf8r2oCPNm\ndOfhVJJJvQZxrBPobIRJT1hqmuxIVB9tN2PctHkECs3oRdAJr58QQg7M7z33\nmZ9akTnt+913UBles2ASUnEXxJde9BmihtbBe9Vmr21HPUT7dt28Ml0ow+si\nIB0CndoDj2ECqHJc0sUE1xdufcctJYC24XOq/krZQItY6tbmuehERXoOkVoi\nIpk+pl7yZlHBJT6+XL64hSnrDzM5jch51pgsQyOnIdoOFmvfpkiD2v9PRJmr\nB2Qy\r\n=alvz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"aae0a779b4d2a4d7b6669742c60fc3e72f3be472","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.5-intercomhack-fix-aae0a779b4d2a4d7b6669742c60fc3e72f3be472_1551609764095_0.5471508475675153","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.5":{"name":"resin-procbots","version":"3.21.5","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.5","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"3bfb3704cc4db76dd9469ade518dc409608e4c8e","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.5.tgz","fileCount":91,"integrity":"sha512-eALxfxIq/5GQMubrpjFpRJm+JDz2LLVYmEU+33rJghwsFVZFwh2MjC0Zv6NcZAI4O11jlOhs7jg3VFLedDFHVw==","signatures":[{"sig":"MEUCIQDERxWM5EOnnK3isfwtQHeN02/u5YYIQ3fVHbKFdcuiiwIgMDg7BbDTl7CSXX5Ism3yrzfMi8RiJR+Ctf6P9X8o+j8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1192845,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJce7OSCRA9TVsSAnZWagAAgPwQAIMGcKZc62krD6pgvrWz\nrso28r5AP1k+wTUAfNsZU1eY1Gmt/MlqiK6jfaEj2CwJ/WSeIv4kUx4lqW2B\nUO41LmDr9V8M11ma+G27iKyVyYf5v0ua75JRKezm9mvS1ZMcP9i58ArP0pgb\nvu7cbAsOX8NQgIDvqTR+3LSe9pRx4YMiXtI4l0mUm5lW9xGszB5J6PgQ16+N\ndBdEYwdiIKDEdR97A8/zNQyxAe970n3HgI9GMWEs/1VER3SOxLKFB1sAcvTE\nHdcMD8EiITEjgL+i0Tg/4/qnPi635wxaHivizcNllzXgV4Cj+vwl9RjHj26b\nJPoBOgU346O+iOhW1dEta3kW4Xs7zRAbzDeXScgYaSxcOPNtYHol7OWUhL3R\nKcYxvl/ei6f0qem2wQUrtorIExwchnUyFUrElf35e58TrW6QvSUYX+1njeSK\nH0qOJMmM7CDkB9K/XPs3lQnbYFsXBYeKjtWc/HUok0YqkxywqkpFvI33i//T\nkgDRhZHUKFc7KQfUbdC3i42+FjnelT3hWyLme6seJGPm9gT6c6cNbvIMApq+\nfjcfIvZSxvXgIBcaQVkiE1q2GOECdLwzkBU0AEY9zTHlFd6CyAAuwphNx9Eq\nM+QwstiUTJ3mnSVk5zluxIY56RsYYwBVIQ5PWF1geAluB0JAFCw3eAErb0OB\nC5rm\r\n=eTLk\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"4833e9e49876cfb2d68632cad028807577679e8a","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.5_1551610769455_0.8835969760434006","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.5-fix-lost-fd-front-messages-0583cfbea467ac21dee86b9d44731564db8e8efc":{"name":"resin-procbots","version":"3.21.5-fix-lost-fd-front-messages-0583cfbea467ac21dee86b9d44731564db8e8efc","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.5-fix-lost-fd-front-messages-0583cfbea467ac21dee86b9d44731564db8e8efc","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"94c34ff3ad5507e8fbd6da20bed228c814d21b04","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.5-fix-lost-fd-front-messages-0583cfbea467ac21dee86b9d44731564db8e8efc.tgz","fileCount":91,"integrity":"sha512-wzPKPOsXAz8tid14qLCUlwLgLGiCa7lGuWAh79SPNIC6jVv4+I2JOiS9ZdgdxuLUx4oK2+JGTIQQbR4SSB/UNA==","signatures":[{"sig":"MEYCIQC0sdpywQtypplxvIbWeAOKkbG/Cou0W3v8E2gKmvgwkAIhAMigs9FQeQqXyHCeeXFKElwosuTAClXzJ1U+7vy0CgXp","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1193065,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcfQPZCRA9TVsSAnZWagAAm8MQAJO0yESB0rdckHHKM2Vz\n/3F5iYfImG2xK0yL3/rIgqHVEGGH1gi0DP6mQba0g3yz5lFYj2ZSUYqpAB8b\n1IjeAc0b1M3V3CeAoSwViQSb2gY1+0ZB+nU5BMPdgQ6Svm5dN2tdATs7ySQI\nxc8ZebYPb07Xh4MDIRbYWKdTUFOuv2y7DL8ger8il33JnhxURzzy14Shp1qy\npMPxc3lw7LBSGhiBqwoXSkQp2soE2TiEMPEzNixMnCwMM8r/fqjwejTtiDNj\nfpQDx2DjfCjaLGDwN84QsVXjU/z154lqC7bnZGyVFX9esIjlr2ycvWp5LhvW\nUvfv4Q5brHEsOTEQFZO0L6ag905Z1dfqv9D1w1U+Qf8HWKOyan0aZ3sbH+6/\nNfzvJRN/Y0CvRsPpp3Q35wq+EDpp0ZQ8tgAC8pU/muvuLfeQR/LiU4ERwo/5\nBRYgAJCzTXlP+IojNwnNxJYb3gxHRm+19JINNkp4CN3Ck8UlXVIgGA86ljHI\nBMos6AoyPjPiUfvYqDqhtknsoQ2ujMKJJvXwAZ2H3J+FZ/a47uvKFVysBEiq\n27Bl6VQsLa7IxKRMMnr7Q2uvwtZdvygfpQDbIynG1fLS4UB/LndRhPFc+6hS\nd9KMsxbUJqKxCQsiqPs+QBggWn9vS5VTHQV+uC3RJ3ieJ3fWU9uJU478eA34\nfhso\r\n=bwY5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"0583cfbea467ac21dee86b9d44731564db8e8efc","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.5-fix-lost-fd-front-messages-0583cfbea467ac21dee86b9d44731564db8e8efc_1551696856584_0.1850830767605809","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.5-fix-lost-fd-front-messages-e37475b137980107ffdbc0c9ae4a9e49f93bdc1b":{"name":"resin-procbots","version":"3.21.5-fix-lost-fd-front-messages-e37475b137980107ffdbc0c9ae4a9e49f93bdc1b","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.5-fix-lost-fd-front-messages-e37475b137980107ffdbc0c9ae4a9e49f93bdc1b","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"fde21256ee0b0d6deddef588f1422a06da845a0a","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.5-fix-lost-fd-front-messages-e37475b137980107ffdbc0c9ae4a9e49f93bdc1b.tgz","fileCount":91,"integrity":"sha512-Ey+oQdGkusuG7l/QLaDNzi2tEhe1L5r/Qp/Wq/uhqixc6qXKWy/4XMgSkZ0sPXmkRG0IbWP8Dgm3dApNqKcs+g==","signatures":[{"sig":"MEQCH0falp60KNs3F4ORYMkxOAhmaPTs3d5z+lkvWiMDLEQCIQDG5bFY2zUtOzzmEAflQa+B9F1zomn/hp+UhCwX/qwCAw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1193065,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcfQ6OCRA9TVsSAnZWagAAhaAQAJ5hO0aF+JfXtgA44LWy\ntnPPQD310f/SHI82uCF8wdHInl2/VlLhXvArPxSkPJbNE67kzUqfLWlnfMGs\nQzOa3Qzo6lqULBILlkZykR94ANu8PYSDHd2dnsMei+c7GkrSG1l6bh7KB6VQ\nSCOhmPEcrEiJ7lwyhmbNLtfkGGkf1Vej9cGRPBPsTaGYJMI98nc8Mj6ztVH9\nBI0HQdNQ44SJ10/irEAsAezeuXlK6MH9L5/D77Y3FrNUDenVa72tijwrpA9X\nji/9EOC8Tbalkh2/HSdKtbBPlzYub9/cfUgbLm2FJtMxur9DIKNc9Njcslc4\nraskDNxCD8graW8nXq8ybiekAyVShu2q3QuhVZQQ/QAPypzSZGaNpRxfgN4K\ncxXRAtmsdWq9a3BW6yK1NS4CIveHzJit77DseYihDhTE54sLc3935UaQxSCM\nCZY8cox2qlQxGyrweMiDcl4Tr/4hC4HPeXuzrv9jteUcGf/RCD5Dy0/BMz5C\nGPaDxH+4NVXagrn4F1w3XJcb3uBzfhRYMSHBcohRnwiFNLEnNF+fD5taDq1u\nbpV38FXKvVALFV5gX38D3ArFq+YhanI6EYXTLKc2lou7H7dVVJVNM9Am0xT4\nQSiV+RLOg6e3NEaEyTjPxeVvEmrT6PYQXZfq29MCzakArIsXBjTZ8qR4SPQN\nX/gQ\r\n=E/vq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"e37475b137980107ffdbc0c9ae4a9e49f93bdc1b","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.5-fix-lost-fd-front-messages-e37475b137980107ffdbc0c9ae4a9e49f93bdc1b_1551699598033_0.6284212382598704","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.6-fix-lost-fd-front-messages-e6c03fe9209e2ca2e1efeb0cb41f58704bed21af":{"name":"resin-procbots","version":"3.21.6-fix-lost-fd-front-messages-e6c03fe9209e2ca2e1efeb0cb41f58704bed21af","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.6-fix-lost-fd-front-messages-e6c03fe9209e2ca2e1efeb0cb41f58704bed21af","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"e5b72b3a8a2b9235aa67b2bca33e29312ca433cf","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.6-fix-lost-fd-front-messages-e6c03fe9209e2ca2e1efeb0cb41f58704bed21af.tgz","fileCount":91,"integrity":"sha512-gHBkl3h+TGNT3NIYv27PusX2mN48MPKehsaRRl3bM3suSoqc0ptfJbgaKQzPTfxgbLltmMh4ga+ajGfXb2DOeQ==","signatures":[{"sig":"MEUCIQCT6jP9z4Jy4QGF55oW5oD306LiiT/aL0HldxKV2Yfj4AIgcExgDSwVv1HsAQFtYBLFZduZMs7P60iu02/YFuIDhc0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1193090,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcfRMNCRA9TVsSAnZWagAAO+0P/AymqlLBA2VWgn0krFxU\nHUW/AVOyqzkdOZN/Uj1+VhRG/RfjY0q38s4fmaE14mZa7X1f9njjmxqCfXsG\nf/RAp2e1MjfscXW28pm44GahyTvLL7hxrVd7wzXTH87T2r6uxRi2wAtgoZ03\nWwhhpvyXaoSyVezaHrQZldPeQ7uoTFtpKscGwZRETCs10XAQcUyU1quvSpv+\nXax36x37HivxkJyrmtmTYj1PIkUlKXXU4H5422BeDDyOH0sU/tTnNsX30eAH\nZGJRuybXnxYmpLTh7cQGAn6tpr2hGl9K6KQAn7RXQAHuZwLAKcqzoKAwwbx1\n58LXJvZP1yzNd10bhgEwdLYP7610b1nbQkVNLSFGNntHZ/5bVz5iwWjvkaLU\n2eZolLWGWED+a7e74+KsyTuuRrYkbk2I9AKxmOlFaEBD4kEUs0jivaPOxX2R\nstVnmVK/Dp4tbkuPfnJVe5nub89RDAPgJE+FEsKfRK4OjSKzzuh7rZ2s0OHG\nLv5RsMwrktt7zBOYZ3HPgvYKLoS5j519GzEVhFORxBxLab6vWNUlID1Z7oTq\nwTk8N3JumGL7w0HxUjUqqh4r9AZXJH0YTl765pmYeOL55rKTvrozkkVRjFb3\nRB7xa967s7byDISn+G8KM927m32MVJ6SWa3fZtCbIZ76yWD5I5919lHwY1+B\nnXv2\r\n=jorq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"e6c03fe9209e2ca2e1efeb0cb41f58704bed21af","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.6-fix-lost-fd-front-messages-e6c03fe9209e2ca2e1efeb0cb41f58704bed21af_1551700748444_0.3754400179003212","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.6":{"name":"resin-procbots","version":"3.21.6","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.6","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"edb9ded3e50e1c133ad434ff7652198f73b0f6e2","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.6.tgz","fileCount":91,"integrity":"sha512-kxxbI6s7BVHEkSAU80ROrBr/bh+EwH4pqcgtbHoczwmgM2e+LaDk3ihR4d/QWoA0fwTNvzNDW8H85DXY7Or1qA==","signatures":[{"sig":"MEYCIQCZ4kmN/V/IGS4gkYPOBevOGVM9Cgi6U1F1tf14+9Hv5AIhAO0O+5rA32LbbJvfR2/d0LtsDwCNotl5wsFfGZ1S6TSO","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1192954,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcfRQuCRA9TVsSAnZWagAAK8IP/R7Q+JPyQUOtbDyoqeh6\nZf4nYZqihnN4YoC+DDGtZIbcNRa6aynCVj9BeiBC516fraEib3RM/HqFHcTW\n1gZpLj0LvTF8QfTSMyTQ5FcFxaqpRGaWIRGODR/f18U5zzSmZ4bv63n1aUEB\nRb4jGJHkdxMmnvCIyVC4BGrKhJrnJ9jVRqkTOwxohSit9OveJDi5jzMOZpP9\neoejqT1UoG63A70a5uAT/LS/0Rkh1rNmZ+z51Dq2Mk0a9pVD+Q9+dT87AHL+\nLhNYfpTUdqb1m3vpaxZ64pwmYWtRDTyPyDmveXwV8m4cyEibwTqKbowHor5+\n6S7gvQm1zb4fmyn0aOFpWGSai4lsutkCqXiL2TExCeh/mt3G63+xtBnak6xe\nJmZLieNRRqEUuHKmwBH7Xog2zBPfbx4PXsI7UanlWiw8sdURsVc2lqi/xnou\n9go6OhdfL6HXQodlPdH8MLKZCaLh+mb4nne4461wi8e7ZucY72kvRHvzl3QB\nvdY1SeiaO7ldWeXORWJ0TcsHTsZ/fpB46CCbKbEo9/PPGNDEfbhJYyu5weyL\nF5Z+kJy6fUNB3Lsk0HC46l3ndVOpo9korFjcvLoSoSJgTe1/f892T+KLlB69\nu66LNOplwbLxDl6vVb4CdPwFbQC4bgngvGUZF0w1msHwlU13TFdwIcYFkdy6\n3neY\r\n=y3BW\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"d74a6fba946f0c934677470b022adbafa3cd662b","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.7.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.3.1","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.6_1551701037807_0.6296116771375693","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.7-update-front-sdk-64c1ca98bb0e473774e6bcadc0e65a4f6c08aa79":{"name":"resin-procbots","version":"3.21.7-update-front-sdk-64c1ca98bb0e473774e6bcadc0e65a4f6c08aa79","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.7-update-front-sdk-64c1ca98bb0e473774e6bcadc0e65a4f6c08aa79","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"5874cabacf2b48a17b765b71130af6fda9d3ce48","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.7-update-front-sdk-64c1ca98bb0e473774e6bcadc0e65a4f6c08aa79.tgz","fileCount":91,"integrity":"sha512-gzqaRVfw1CXQwxR/qEOt26vksW+pTSAxuTpGt+55cK5Xm1m8AcMIEU7YQnBCBJEBXDhPiCGjPuhvCaWdF2A3oA==","signatures":[{"sig":"MEQCIC0DHidimqLbvEdpVmop6xdLPN2WCuTL7/kI9PF5J3mPAiB+ZmpdHKPii30y1v1jD9ts07kZi3407Hn9iDCf1FT6jQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1185541,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcpM5uCRA9TVsSAnZWagAAhEMP/iY8Xr+iOXM2cPkWNOvn\n/uIpAm4IB/Su5u5xYfVw7dKhqCM2lsNfcDK9nM5Ho8XQNGsP4dR//IqePjAq\nlS5UEfsesW48p+qPQtL2bu/qjIvTYzk1UeimPN6htZB/r+gh4v9e7B4JwFRg\nO+uLTgHcgp8FtZRYAfijfDrUnUB1SzLEpg8u3DhU3p5XptbdJ2p1cjZJo813\nYO484B0BL9tXQmhcK5gDyvqZogNLymm85nABYD8BXlD5GqAxQQ1xhsS/hBSM\nKISzDE/oXVxINl9bn0EricnXhMgKsV8St9iNLVF4q3pEjP6ErKylAxKnC0/5\ntHT74ZZuBSwq9q/d7OhXLpyF27d9ANWdYb9gqkVapabjCHrExbACYhgEeLmx\nTTbj39P9/uBr9Hz4xcawLwcvBeqnAzYsznoc59vvFHoPbKw2dUiHseKJDN+A\nG/5EqgPvTrE9dzXc/UNsizsSz9QUfDFK4TwlUCqPSdb0rCh6TwDmmG2EI3N1\ndkqar2C6cHxfv4MN/p+AcAeOc4Y+uvx1pV5oOYAGc4CKjRN5zSIOoDJgHEy/\ng+V10F6s0xL+GCaNPQ0iwS0OTEJhsvPG3fpcSD5uXnHi1gpNg53JEnCqZ+2L\nywqBN+zvk6sct7YD749gJbuyx9uuCUSvEYlMMGx19g9i5uf0J8JbjkWWVZMV\nlp79\r\n=nTvo\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"64c1ca98bb0e473774e6bcadc0e65a4f6c08aa79","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.9.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.6.0","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.7-update-front-sdk-64c1ca98bb0e473774e6bcadc0e65a4f6c08aa79_1554304622041_0.19357516027800803","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.7":{"name":"resin-procbots","version":"3.21.7","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.7","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"c54a796f812b284979da13d4adab69a58f808467","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.7.tgz","fileCount":91,"integrity":"sha512-RfUky8Bv8ixjeVRnu0IUOeprCb+We0FOhX0XeJdxXTXdK4YM/kWYyt9cZ98gY1ogva7TtBC/Gau5B58mymFBbA==","signatures":[{"sig":"MEYCIQDGYI+A1HFrtAC9tt6j7gPfJup8QAg78CfhJDoG7rcKNAIhAM+YpvbT3k0mRV5HStuQ/znS4HtyI9Wdz8g8tlw9vWlI","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1185425,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcpNBsCRA9TVsSAnZWagAAqg0P/25/ut1r0LRD6NkR87c6\nYi1mxBoryd2eAopkktCtD35vfd4XUbHQq/8LfOF97ENb7Q3eZ7w5k+VXJF9/\nVqg7aO0buofn5fFh9FxStvKh6ZLnYC7Bhzg2SNKr3bOuHzfphv0rmjJYAtHi\nGFrYmak8CU3nnxn/M9YU2gJRwe1XZv7JPpcSFPoD3EIf+rMCM7l0dYm3P60G\nKT3CA1wJMqvln2Tcwsuy8oh5/HQiyQEPsEtjDfbdYFE4uDd9Ukr8Db/bc/ka\n3clxl+zcc7D2HW1/JCqYANgE0CcidiCKiF7uWlu9tAJC9pNwY0CwgnF1WQZU\nZnrBMdfkFoybaXhqLHFK0gwaTG25HiLI5CWGdn0Z4GiGpSMHiUjJuA6Ylqz0\nDoiy6xPEQCfWFfdMNOtW1jq4GiiPEV14N4rJ1lopYKbww8MXTsNzkw/ARC6h\nzCZY86s1CRC8Kj1BSsC6FZzqxWmQ7x2enBXUTehy8vrW+XiT1TZP0iVwjN5r\nNS4UU9J3vEhoyX5Vwr4wxRbZ0xFOQ6QVK68lPjgBCoalsaRIC7ISp7OWw3Vs\nbxKF5eHfZT1LtNdSP+a4ENv3bOFVhTMmfBJZWKuvUjJr61M8bjAQxy8pr3L9\naynI5q0m66DuT2gREt1juMBvnDkaeZaEKrlUOa0C4vssj6wnLxwoAMJ+9jSv\nn+as\r\n=+yai\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"5bcf7546f68c66377411aeb097fe9044d86c0b98","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.9.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.6.0","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.7_1554305131045_0.7511057123897977","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.8-debug-front-thread-create-80fc56a14f6fbab0357e7865b8c5d117af54d032":{"name":"resin-procbots","version":"3.21.8-debug-front-thread-create-80fc56a14f6fbab0357e7865b8c5d117af54d032","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.8-debug-front-thread-create-80fc56a14f6fbab0357e7865b8c5d117af54d032","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"796ad0339cdca98d322d29931fabb0e0ab687bd3","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.8-debug-front-thread-create-80fc56a14f6fbab0357e7865b8c5d117af54d032.tgz","fileCount":91,"integrity":"sha512-SkwZzpJyR9Wd2bjSxEwLRZ6PMUrwwChBKCcDWGCiqAzb4B6Ixc/sVmA4qTWQ2/40gFN/Wf98lxw2EnJf/ecMxA==","signatures":[{"sig":"MEUCIB1fCAqz4ttmhRknwkFPBAxUQ8zLZvcr8WLmSttBqY22AiEAk07q2pqOOjrAc8z4oT1dtWi7tqL9Mk6EyR3FpbR6DLc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1185819,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcqgQRCRA9TVsSAnZWagAAipQQAJl9Yi14YjRPIscXn8fu\nIY1caFvID/VEOgDa3xXRPGJBDn1oVDNv365grwRdGQNOkIVe97bMbSa72FyU\nkS2VwLsLhdjhmFuCV01D7tp92l2EtoZyf3J+xmQk7EVeEDx7gCWj+pGVsxBt\nJgg8CO8ZLJVb1FNBd2Shkn6gFiStgN6W6grkEZPLA3WJCmvT3BhPiAs50yAJ\nq38FY61SY9NgVEmcIMhFiiEoDWDbG3WzBrnvdubx4THcD8EddyomG2uc7lwy\nNJ1R8f9VoZ8wPyCOPR2R8S9NpJ7J55edBHBn35Xjg2QgZpS23r+N4cBfw/ET\nQOMXhA/FIQPrX2bj9+A0oq+vY2V6nl+zln+vkFWdxAWKp8HWr0tQhQkYbJBP\nv3aTn0SI1cNL3g4dOAqWdK+7EtpKFZTJiBX25TCZGF7bb7cdBxhjFTGMTkjc\nW52/i59ogdamihhOFYCd/Yl7kfE6vPc6RogCIhblTseVegoqQkUQw0YYwIiR\n1OdUE9eq+s1j0tT+aQFaTdCqzaAfuhUHWjfo59zGJUQZEJl1D2ZKsz+H+cpy\n9yZ4XKx2Lu+ViQmQ4QtEQ83p1fV3Y/9IrH9aJZqIJ/gQm2lfmofmUtnf0vYW\nrELePG/0UQQ4PC8+5fdGJNgWnk+x+ZTxyu4FztIxB5HaEoEHoQPGDGZ0TSnO\nl5wU\r\n=ryjN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"80fc56a14f6fbab0357e7865b8c5d117af54d032","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.9.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.6.0","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.8-debug-front-thread-create-80fc56a14f6fbab0357e7865b8c5d117af54d032_1554646032926_0.9579952702878234","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.8-debug-front-thread-create-4f6eef130bfbc55c6fa0e3bfcf33be2a64c93997":{"name":"resin-procbots","version":"3.21.8-debug-front-thread-create-4f6eef130bfbc55c6fa0e3bfcf33be2a64c93997","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.8-debug-front-thread-create-4f6eef130bfbc55c6fa0e3bfcf33be2a64c93997","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"71d9754e406f678e5ed61f8aad31bb3695dcbe7c","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.8-debug-front-thread-create-4f6eef130bfbc55c6fa0e3bfcf33be2a64c93997.tgz","fileCount":91,"integrity":"sha512-lBLoQtvzO41/3WLeLx56AYn0/Kns6hLFgor9rIykVSwGJWLXGG0gud1fDJotVfURqBCWXvI1KR8DQ/yLJ+vy3A==","signatures":[{"sig":"MEYCIQDrLJdDuBL59rDPsFqRoSIdIY0xz8hAMmT2QVTADXtk9wIhAInVnZtZPVWs4ebiDQOiaMGyjNqXaRpv42x8D171iAWt","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1185851,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcqgb4CRA9TVsSAnZWagAArzgP+wcbRFT/FXbKCIrAkNsv\nZEXlCWJMK1hM0IH8UQA2bYfqO/cdzhgSsSNC9i6mHPDEd59UIS0dFDv1w+Mx\n0EiwzDX9+sft+QbMfrYAQSec1AMp0Vk461FR3DJo2v+4H6PXFzXDsYn1k9mV\n+qvpi2PQwfNveFgUHPiJBo979NgC2QZKTjX4+zuUHpBqROf1Cl/NXqfMxSTx\nE9in4C8/f1xcR3zsOUBaOofhJZ/NQ3ZCK27teqW8honfIyyt/FYLWwUytPwv\nL5AJaSZy8Ads9PaN1dreyFw8XmODNzHl5XjJC2axfREoni65V1NRKpVyxFc/\nxbrWEqk6zo3v76c4XOxmFOzHSKHrVavECEx8ceMzeSPWBmYoDIe3EStvSRg8\nI9kpiVpk7u7KyzNwIvx+G22pHP0hOW2QpWnRiFlnfdh58LzodyPjJ6aSSkxl\n9+hD65L0E4QSu4UICAZLCb8p+YjlJ+c2CsjtM0t+p4XFOCXwOgOsYr/ZUaQa\nMXGIJz9Af/85Lukb68/MabMSk3l4/Mbbs6+BxS+FXLJInpISu3rZWCPc7vlI\nE3KY1z4BnjJSyIBKJNHEHi9KGxA2Zoo/x84/eeUCiAtSwDTSb4jGPBaRqmDr\n4iJ+wLxI17IRKlEiCxEBCrdt6Gl/Zl9EpyLtLfIv9CeIXrQKqx9FRskC0KQM\ng7HX\r\n=hn1U\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"4f6eef130bfbc55c6fa0e3bfcf33be2a64c93997","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.9.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.6.0","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.8-debug-front-thread-create-4f6eef130bfbc55c6fa0e3bfcf33be2a64c93997_1554646775769_0.020489696509037092","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.8-stop-front-forums-syncing-841203056085f165e7dcfeb263f0c0577832994b":{"name":"resin-procbots","version":"3.21.8-stop-front-forums-syncing-841203056085f165e7dcfeb263f0c0577832994b","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.8-stop-front-forums-syncing-841203056085f165e7dcfeb263f0c0577832994b","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"47a2944ba935c4a980e2acc1e8798dd9029503bd","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.8-stop-front-forums-syncing-841203056085f165e7dcfeb263f0c0577832994b.tgz","fileCount":91,"integrity":"sha512-BCyMeIRyhVkqOjS7dnxthMbXKPwzrEcHvzgsnpvduFya1YSJhunE471pG4/OzGxqXMSQDTSAKtU+zwf/WJzMPw==","signatures":[{"sig":"MEYCIQDtG7U7nNEwZj2E5lJxAEtyDkTYQHm3zZjmp02D/7ktrQIhAMFUFfl/w9A6xsciMzcWKiEQZxs7fFM2EtLYpTJwAwig","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1183674,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcteRWCRA9TVsSAnZWagAAqcUQAJq9G8AW6IrzZ8QGZAVr\npR81QlW7TIL0lk4ZCXTFFG1y1uwulfVrNpdW3b+/zOPwnYsY7B7MBYpIj92o\nIEWcy8qtb47RAP+hK3CdOQgKTLlCSwD8D38gIyPlMi0yobPEgscuXCHJHQ28\nivRlW/FPjXrDb/Q/PGr2OLvUbBsJguu5b5ShK0GuaWLk9jlZA6bJ20cDffCA\nU0LJcquhP5ttHg3hQMuC+6tUk92QvU1nXWdrlW9SdBW6FG8cErUln+J6woMb\nUG0dh4Nzc2D1ynKWked/t/Z2VS+dF4GiOl3UUA+wIDtR7v575jzP3TY31eyY\ndZZHJe23inlGKxb5q68fyC93ML1qk3zBtF07xBaxwke8Qbonm5RidCzGip+o\ne3pOdBOgeg5BYTHWFc10dxz4QjuQnRXtOrbbDgfzFdC3VGWUJvMAaIJt+l17\naBjnsSF2rp8rUWMw+XrKMLJYaJBe27O2dZq+mJV2rSUsitVOE3FqjSP6jna7\nqCP++LstYB9aznQ8Syn57jz6Zd16gcA2aaCwGQm8KQRW4MkQZy4yIZiIbw2n\ncwY5GRr7mW1Xvt4pApSYdUc2YBzwXm231rpx6MfOjhKISlxz30/VksmqNdpv\nWX/URt4UMrKyDBR9X1gjAl+Pu3036vdlfkeofM/Giv0mwIf0zfNI0EPZk8sA\nwlAX\r\n=1swM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"841203056085f165e7dcfeb263f0c0577832994b","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.9.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.6.0","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.8-stop-front-forums-syncing-841203056085f165e7dcfeb263f0c0577832994b_1555424341713_0.1701024521684229","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.8":{"name":"resin-procbots","version":"3.21.8","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.8","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"},{"name":"resin-ci","email":"accounts+npm-ci@resin.io"},{"name":"resin.io","email":"accounts@resin.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"4dbb3a0508bce53a65e52af11188c94977073a3f","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.8.tgz","fileCount":91,"integrity":"sha512-0Ud2jE1rfvDacohbGlcc1FHAXOF01vVCboEdSOMzEaLZQDvE3kSfUgRHbSP6iJKibJJBvM9v0F4A58FHBMt/4g==","signatures":[{"sig":"MEUCIHePOPHzr9E60lG9auJPLQdaH0n9Qzss0OFUB96KJ+dTAiEAxWJ1WS89gS2M5/9VyJ6bZnZE6Y5x2ob0WqsRPNTDdwM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1183540,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctfZECRA9TVsSAnZWagAA5RgP/0yQJKQVmvwm2oIiool2\nuLi3ftTgxqlzOn1Mg4IuXZQfI/TzM3XRobS0hzVHB9z+lYxzOE0nLYYLZouD\n4QoCzBvkjdOoISXvVyd4mlboE5sffVFwWS3ei32AwENohuKi491s4nVnXjbG\n6drs36CLjKYlYXDc5L2OoHeDAWknbpKUj7m80K157EsheqXtGZ33oB+wQFdS\nyNqcF7le7geovaA/bbkVDZX3Nc6V5V/C/KmwSp3hmRUUBLSpjvW4UsW7HU5N\ncthzIgIKrsz6GXGLWb1AMIl4E058UUeIfJQ9BmQr8BM1g0UzLEunTRnmbE0r\nPLODkSpB90XT6i2lDp/NJOdR247ny+0WVdmVI2moPGjTsUEt2zaE9SFAhkIr\ne7NGjXE8gMv5bVWciejO9msXwvM5JvkJBXfF0U7IAPn2xCUyoMXD+Ivk4/Pn\nGJcWdH7CWWJUnbxaMuNQjRCdl7RrltOpUenAtGrETVMFaIJuD8FjjWA9zj9u\nej8bCbKmf3e9afp4C2jq9JGjv4q9qRX8XJbQa0bROwDbiVAwWGVW27NR8E7Q\nhd72YNZlNMrCcvJmJC2jxamaSKoO+/5Wpb2LQc8F/PlFYml2aUX5MZ7vEH4M\nC2m/3xdrl8LB+Q8+Iz40SzMH1jXi93zOKKHL3YHtS2tIhttMrfq/n61L64XB\nKpUu\r\n=TbAH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"34b27ed5b2d691f4bd801bf341851d3afd784bdb","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.9.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.6.0","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.8_1555428932248_0.8325891600975079","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.9-disable-discourse-integration-f936e66d7858ccaedda083b969701d3e298ed350":{"name":"resin-procbots","version":"3.21.9-disable-discourse-integration-f936e66d7858ccaedda083b969701d3e298ed350","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.9-disable-discourse-integration-f936e66d7858ccaedda083b969701d3e298ed350","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"231b1db403da22eef183d247c8ffbbe3d5ad60b7","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.9-disable-discourse-integration-f936e66d7858ccaedda083b969701d3e298ed350.tgz","fileCount":91,"integrity":"sha512-KAabGGceWR/LLBrD2iJoCotWNrA3no7+KU7aMlqODDenuWM/wZFWrw2KiNIIaa4POgHzU3FMTUWuHu2TsHm0xg==","signatures":[{"sig":"MEUCIQCE1uGdho/3cX8jBJTUqxBlllmEQf769Tz+b7KPCrFN7QIgFobjjZUj7PPAVq18kfYULsBQvwbG199EqxDgJ+zQfQU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1181774,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc5T9mCRA9TVsSAnZWagAAEV4QAJ4HQ1Tzgi5z2ngYes+v\n/07HC/eQri1Uk66BcMTd1wWoybB6hH6W2iPd09HO3GEJbJPg8NI57FVpsnAV\nuzwejl/CXa8WV4KbsIlIfgVT0V5CG/oSCa8Ep27mALNJXBvQcDeh3OZnhfd9\nQch3YLEMlT/z4MN97FXi9fxwvY+ZKyvTKNnsyp1eqEv8+o0RhmtA+ImOtHwF\nCP7U+K3361vwYTXbl1Nu/IFr8gzyM02vtOVnMNEqQDmrIeiv7LnyZW1133bq\nlZclxaSBslpO2cBqTfEM3sXNjPwHVIlRdWSO83y41YAQSbF3d8UkObpMAQqB\no3uTVhnGT8tI+4qHyXwxN8CA+vcniI/VKWiBrND8YQSuUbIiCPFC5sULE7Tk\nPfxUNiGCUO7zJhNnDWxesF9Hj/HJfxhjCb42onjhkE5TUi2CMO7Zu4A1W3LN\n4ZfTO8DUuDV2OHfWNBVhAYvxb6h8uLRdEfm8Rj7fLr3pcHSC95aMkXkAGQY7\nT3VnQBSIBlGW8WxXFSFtaPXXsTlclr/SLidcVAVdf6YkHSEqKNFoC5fCFJ+E\noY4GtCejOxRtm+EaB5rwypcZTLsL0pq5hfBmn3Zq78hfD/J1EVAxxx4ftDmM\npK5CqVv0LKK0NfWll/k4qBOxmZ1n8PBoGSS3q8gpF3h01b3MXAwIye8zQhm5\nXquK\r\n=VmV+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"f936e66d7858ccaedda083b969701d3e298ed350","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.9.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.6.0","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.9-disable-discourse-integration-f936e66d7858ccaedda083b969701d3e298ed350_1558527845940_0.15554690467359356","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.9":{"name":"resin-procbots","version":"3.21.9","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.9","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"7698bf01370910f85b155f1086305600b9c9cc9a","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.9.tgz","fileCount":91,"integrity":"sha512-D7Lj3dv9ERBFJUEEWSty+NzxObbo4zWSRoUV2+JsORZKMs/x5pECC00pQYDP7BNXfdWhlJ6FaJna7Cl8rtE6gA==","signatures":[{"sig":"MEUCIQDsfDMBSmJrhDu3a4tuVANROUREEpge+BuZ6SJsY0r+jwIgPPiDpzOUWiCg4i0O781Krfzz3NUWAi6wx9MyJobUf0A=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1181632,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc5UNoCRA9TVsSAnZWagAA20YQAImO6kHTsNXh0tj8dcpF\n0BrSGtjlGDVKhuVOupv2r+OWje6QhYkQlW6426Y0hKlLI3NsAuft0U3j6QLG\nHxDf9xSlA7ecY6+BV16I+wb9cm+GCj5qRqOpgpShZjnhejjnAZQwXNyYPhVT\nkmMBymo1ar1UgYMWKEiir4UhEjxM1H191mfsnkNJP0jCYkJm6G3o1d9nQDUR\n9PyPg3ThcHsPuTDoBfIIFwyGQEDzw3Tz6NRF6gAkobVLoF2u4jaJ8FHO5SHz\nM0WJKErK89RZsf/q5++Ev6cr6Gy127M5IJSsisMYSbtUmtsxSl4v1RKJqgds\n+sIhM9608gQ9UgF7NDDSdJxg9OmSp33eYqrOe/dpRiNrHe1hLF8R26Ezb6j7\nqzp+PWSKu7IsvMmezRXhuSHQUWT0Jey0I+Bd4h9GADvbP5Ww+/jLlkQQPaHN\nEyiEzvoA0gzFx+4ijw85Jo+wR5Drwa0xufALT70KOpeeojHCvhPOKlOgdgEZ\nqsflFVgruhYbBkl8YPlmUYI67iYSQz6iUeza17O8EwoohaLbWd3g0i747Hvc\nXF/Gcl8S6CNrBWc9Y9qeKQ6dk3ro6paqV4+i1urpLAZnzCRH7CAWpybeIG3W\nMBMYT8lrHBCl5meLpxGDtwiHcHIzIV/2pHyez+5Z38zge9HlhEjOCHLDyXIX\nxEoT\r\n=Rggg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"f92fd7dca7514c71aee974bc5490a7b7101819b5","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.9.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.6.0","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.9_1558528872094_0.7307387155622844","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.10-stop-syncing-support-meta-64ff0363923c2a3555a1c417bfcdd68fd5accafd":{"name":"resin-procbots","version":"3.21.10-stop-syncing-support-meta-64ff0363923c2a3555a1c417bfcdd68fd5accafd","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.10-stop-syncing-support-meta-64ff0363923c2a3555a1c417bfcdd68fd5accafd","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"8fd9f509244d60a5ce1c43515ccb561492f7c1a6","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.10-stop-syncing-support-meta-64ff0363923c2a3555a1c417bfcdd68fd5accafd.tgz","fileCount":91,"integrity":"sha512-cdPnh2ciAV3ks3CjSCttjEuRKGQbQiZUOigbEGi6tIdF/IxE97wkAu+LF88BEEiVN2pYB/kG9zF+Vd0IZbOA/w==","signatures":[{"sig":"MEUCIBblzN1WFnBPP1e+OK5sC4wEEXNAkfjkGrtiH9zmhDTpAiEAlzlseN2ez4+YvCJBPggScw6M/xhyTaqL/29zrrFJMXI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1181873,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeRRcWCRA9TVsSAnZWagAAbpwP/RL4SoIV+JkxNSZLs4WA\nBxAx68VSEoKCyd4Xi4DUQzoIbvmPGeQEeRKEc1FqGwKGCF9hzFoJkYdhFvT1\nim328kYGCJ+rVCrV/me6YGJA5nX+4kNvmi2H2GLBnY3KIu/Y+SsGFzFyTfUo\n84BX0E6fhaNnV4oNzZRhlEWJMlpDh3RZCzUiH4FNxI2HrDddJrLllKyJSxXK\nmPVObbDwyW4HrjRGmPoNn7rFgsvmMqEUFn0P6tsspKrmdr1NLE/gi2gIWf4K\nPoH3wxpm5wIf3ESjlfh/bs/e8dtrRVcUb4njtjh7C64RvfGq8P8FyCtzgXNz\ngCISCEX3uD8cv4i/8blYXkBj2ljdm975GYdybzlRX1wb4Dqq1KDGvu1rD2a8\n6doNw9VHDdg3Mzs4pMxFtLJSTHCoq355s3SRoQSI+XRjTYHxSCsArix7PeAy\nh0r1eG/IqNAUieRZp+RREEfLzb2E2wwxuveDJZRIrTaZgd5CdZTjAl8EFaex\n8I544fa8EXOxaNhCsijPerciWF/RtGTzwpMwTe58g9OQB271s6sK1O5FAu9c\nqPW2CsO4dwPPq3uoU4MTpR3qjqoyySZbV9r5AS9SPgDCFJzJvfXqqKyNVHxs\n6+uayzRjQRgMJKodoZ+inRsRqtbnvgLqdi7j3D+wg3u5WXXMCbordx7QTMlD\nVXHB\r\n=14hh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"64ff0363923c2a3555a1c417bfcdd68fd5accafd","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.9.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.6.0","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.10-stop-syncing-support-meta-64ff0363923c2a3555a1c417bfcdd68fd5accafd_1581586198216_0.23648451677163096","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.10":{"name":"resin-procbots","version":"3.21.10","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.10","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"626b9ba323b904eee06526a4c6ff066c4e89476f","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.10.tgz","fileCount":91,"integrity":"sha512-15DWbim64ZN8FSV0WLzfZk6ZGoq+ohhDSW4pDxwfaT0gVac6Zovl21/vTbW3/HlD2V4bVby4cuBt7uayxMg9uQ==","signatures":[{"sig":"MEQCIHYIs7Lh6DKgwLNtdx+Q9c4hzYZ4i3XS/DQm+B64dZrrAiAooBWlfU/OSgakXZT8SVTT8voaVotn7mrIa+0C+rC9CQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1181739,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeRTefCRA9TVsSAnZWagAANMIP+gNPlrzi3YyFeHDgJLVg\nB9a1s1BIPGQvV3WxfM6YncQLduufwRWD8oWJNvsDcCo1bOPw6wuSn7Azt51K\n+3BnrHjiUMwb1Go+DIFHLm+gCCFNJgKtOCGuTO6k+dUI4cpDwFBMm3VJSwjq\nuVo/hep+NnaTh7zchVrO86CA5+GHOeNa0vwpD9HG1na+OhiHzf7p+JdkE3Mo\n6oI8imprWbs2ffbY9SstULh63PUED+3qC7N6YodX/uT4KsXfamOaw/9s/SXM\njiKkXTK8w8Ac3T+WFQTjqeJxjaVkcOxRB62sJmdody4CcoFwpMwBJUoqA6al\n+Hm1LSXsX4Ah+peQnqWUM/cSWOwZM7ixISgKPEV8j5SGHc+5V/hnX5CBJSSl\nGdNzq0TsVErQyKcQv3VkQrGB2nTm4EA1HdrjmJgCKjyYf9OCakekrKvetfcU\nPBD42AuKLUv8hnnPU4ixu2uQpq7ndIAdXDlS5NC+9LwQ662Di4j1UC6YyHsb\n8vuokCKDUIbfHXpMF3QKZ5zNzZWAn1fAKaVRRmF15vU6md3UPwWWvEZejwCH\nJtFV239Cj+y4xv6i5hNqX35lmRJ4iXOSTAtHkUuSGlNhzC090M0ME3++Htqc\nDDQF5DSFforYpJVMNg3UIjsfAnJB3bgiuIjkwc/djIk+4XbP1+dbZY/U1tvI\nAYFF\r\n=jRmX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"9039aace5749e7e24b6afd6822eb5d003f48a64d","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.9.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.6.0","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.10_1581594527115_0.021622229061990517","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.11-remove-constructors-fe64282c77368af71c206b9686b8e23790aaee5d":{"name":"resin-procbots","version":"3.21.11-remove-constructors-fe64282c77368af71c206b9686b8e23790aaee5d","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.11-remove-constructors-fe64282c77368af71c206b9686b8e23790aaee5d","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"e0a387cc0b3059aa66838c5c692ab96a5f521beb","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.11-remove-constructors-fe64282c77368af71c206b9686b8e23790aaee5d.tgz","fileCount":91,"integrity":"sha512-zqdfEG56wRDYlbyjB8fQQXAYfHfAx3O8tNdz5d7imwz4nuZpZajwa+WDw7OZrx5huGGhqsBrO0Ys6bWcp5K0Qw==","signatures":[{"sig":"MEQCIAuUtJxsekdwnB+2jg7Sgz5I/ES5+4xcyEg+siDZR7SjAiBN+gBB3FIaxx6h8gsFzIbV4pxbx2vDJZ25y4Lk/Dl4+w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1181976,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJentNXCRA9TVsSAnZWagAAwkAQAJSM29XKMIpbaAEQULvd\nZOqd+l1jfrWT9nn60u1uqEn8zWrFtKcPvEolpUL6Qsb10ex9H5n9JfK9BxdI\nGbBkCFrFaq9uii+wBV85K5goTw0pfloitGzLtDc03F/RxIcDpCMVTIn2lo7K\nm8/CbIJY5J19DSDWLwQcRL8KCWrAZQsjqP/GL+qDvsejdKUvfaPKC00x685T\nefA10qUmK4mKOpU6MqjEthefVGkVWNxHRkpxC9RqcbBn+jjobiUykQ/uzyjA\nCsNWdYGHV6TVEdQa4WyqS5mldfcKN5JHjycV1yKOihrjeTDSu96NIewF0oUs\nniDyyDxcWwO7DguS1wFZo/+0tjWDHTrPnyyWvODj06wnri0AAmAYy6Z72z2e\nHxgZ36rg5UFLh7CamMepZvx31kSwhuh3ydLuAYU9rhSvrVSu1D6kbjYvPaba\nJ1KTOeLfHkSbETzK4MY/BDBEGTEpRQSygBEg32/nJpcudqn5n5awST8nWfWb\nroH4q/xx8LYtnOgldh6JTLts3bqNFRLDI/0SQuazHetOwR8Moc6SQObXgwEE\nGO4ZSzwsBohzKUASWzmwtabQMl2l0hKhhQjABaAH/xCuEZDOfGGAGTFLZAkW\ncbRmL25HGD3ZtQq9h4TX/2MEXLD5BpnXEgXx0s7XZ+8ezr+Paqn9LRWckVwa\nuHQ0\r\n=Onz4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"fe64282c77368af71c206b9686b8e23790aaee5d","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.9.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.6.0","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.11-remove-constructors-fe64282c77368af71c206b9686b8e23790aaee5d_1587467094684_0.43276749176265183","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.11":{"name":"resin-procbots","version":"3.21.11","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.11","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"45e3029117013b187efa8933a88b9913863dc177","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.11.tgz","fileCount":91,"integrity":"sha512-j8kKuxc1rf+zRgCy/oTYqWRbfByxFXx7xyImD9Wq7TwIIz2RHmP1wjFLMwlH26J2iuaB0gzHjN/4mXu0LCcMAw==","signatures":[{"sig":"MEUCIQDDcDucm4pii3T7izb9jITAkx+5y5DvyKZBtYM4CYfjfAIge5hcIS8HKSyyaQJ/dEIK93FVvyxZ8GK/CcUtD3wxSYw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1181854,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJenzJICRA9TVsSAnZWagAAoLkP/3xamr5dZdhf/vwxX13s\nDfLR4zOdwLHDyp0TcFI5hNHExHvo3Fd18uVS2dUQP9Ix/3S/+/iAFr4weo91\nsra+p/rJqdrW2aaNoFBFRRSvkRlHvtv7q6F1Zq3JXOqkLSWUas9oPCywTdhX\nzl3XVPqES7/pVDR/g8l3itUy6iMWYNgqRZMM7Tg/XCG/XedKNyom2/44ZSDx\nkqALOsNvX3TAKrk8RKDyRZ5QxbdFPGIS5eBdmfJBs3Mn71fTa1sjkURzcESY\nqEM3WFp8aVARYwG/lvV1O18sZsp9xZjQl2crKLVJnvmBDf+/tS/ra9pbA5NY\nEQg0ER713ZQGpahQ5lbhI3w1GBg21YW9CedmcmZK9ugx0h7pt9d2CIasMW6M\nOxHSg0UCE8h1hlWxRAWgBcgCHu2G6Uih4cWcECMY05Kv7v7Ql7GCmVQCL24s\nhHCabWnw1Mkc80gYmCdXUJfuf2N2MT2OhExk3U4Ar5fgN3S818wjpg0LhT8o\n9ldU2aCZjdTJTtP5+SyhYB9hn3/Kw6h+02EuhDAjdcOOnlkrIq5lGcZA2lG1\nrLR5U6hkyTW5m6vjNEqIV62A8hl+IQI5R9GwNYVO3/y9OSc/XWEzf5PCuERP\nsYC242ZX3FZ9KV05C4Vt1KwFrPmiWRalyFUbUTGaJqz2UUVRgovwzL6qAfYu\nO6IG\r\n=dpQ4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"59f3d4b9ea6dec6741c9e73078488e19cd215214","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.9.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.6.0","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.11_1587491400257_0.12448645590443408","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.12-change-prod-config-62b25ddd4639c41ca8391ba458903e5af84fe5bc":{"name":"resin-procbots","version":"3.21.12-change-prod-config-62b25ddd4639c41ca8391ba458903e5af84fe5bc","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.12-change-prod-config-62b25ddd4639c41ca8391ba458903e5af84fe5bc","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"38591e6877ab312ed4134b0123f877c3a7a57cbe","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.12-change-prod-config-62b25ddd4639c41ca8391ba458903e5af84fe5bc.tgz","fileCount":91,"integrity":"sha512-/tZSrgLpHuk3IEk0rCK746guzWqi/0zGD3rHbWoHUC2R3chAEqm0vdbbmPbfXhmdTXX2UwdS3AmA8kBtJvqMJw==","signatures":[{"sig":"MEYCIQCOXaGAGbOn8yeXPbAP/R0iSFzLtBqfQHhj0lpVMVdJwwIhAPptpQV6uxA+34ryxjG8bPil+uJYc9sUun4FhMwqS9co","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1179387,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeqbOkCRA9TVsSAnZWagAA9D8P/08D5eR0cOuJr7suu/8B\n9jwP/X0QB2A/gFAt8Ax+beAyayYeRB/tIK4fMGqB2EeXP8QA+2aCug1wi9Gd\nw6UqDAY2aynEj7CWq570M4Pq/fIe9jROMmcplZGEhrL8nPtmKVV08Z4mrwH6\nsZKY5k59+nQmHMY7bfgf+2HPjWjxtnAKzj1Oj/6qE4LTqqAAMO1wcp4y+v4T\ndYqpMnM/r/kxsLZuGUDzPfJ2tnkTEK5ygcplbdAG7SM9cO5cSwsuCUOrAFu+\nV962npJH7bH3F3HFFhu3eHQ00Kg889MgxkUxUB1HHyCUXNTv+y0aMYxjcSwz\nqm1YIHQZUXKC/xp1GgtWAIoMi7wecT4FiYSBhVhfBmir1seIxTEW0pZXOcwz\njTGuJUpPl4siivm9USsbRLpfDaIVUMLxr6G9PZOtKm0MPxRpf8Ixo2PYyEJz\nSCS4VhyVHXISjF58ROF1U9kd8Tyyk7zkxgXwJShQQwnIB9imlw/jGH92qqC3\nKnROP/vog3YcXauskf7t1dK1zkPaj4pHMgw9w3yHFhcB0r2YKwx2Rk2WMdOL\nvOoaVRTTqogb/HesUU6oHn0ZIgRsJywE2lJJpmDtZuoe9oXgyh4b1a357Jwi\nM5LtOZyvTfx1KSfNjq9rUioF67djCDpyWlLDdw4I3yIsH1CG9Gr9YKhKfB/4\n3DDV\r\n=ceD6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"62b25ddd4639c41ca8391ba458903e5af84fe5bc","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.9.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.6.0","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.12-change-prod-config-62b25ddd4639c41ca8391ba458903e5af84fe5bc_1588179876050_0.26068621342598597","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.12-change-prod-config-429763082d33d75425f68b2491c75126ff59f3a5":{"name":"resin-procbots","version":"3.21.12-change-prod-config-429763082d33d75425f68b2491c75126ff59f3a5","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.12-change-prod-config-429763082d33d75425f68b2491c75126ff59f3a5","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"0f4ab0c658a706492555f9b0ad17942ea813c00b","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.12-change-prod-config-429763082d33d75425f68b2491c75126ff59f3a5.tgz","fileCount":91,"integrity":"sha512-0grJ7QjcRaPlzoFtlCU9jx4bnRNeBYsvh4FDlSt8RuM2s7c2rtn9NY5DA7iKq6CX5bqX6f9gr3qXdKfRR/IoRw==","signatures":[{"sig":"MEUCIFXf2FV5bltqm+6lOIG3pPKYyeyRtLNuIYOXTC5cFbUfAiEAtFsXaqejyXRLTbFRp49blpp6Ira3snttNxGFpuKgwXE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1179555,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeqqq9CRA9TVsSAnZWagAAke4QAIStR7WgJMnQPGrBZEDd\nYVpGz4xz3gtK7FL7F6y6+iWGp8DXv940fjpAqfmbAUrFDCGIZ/nAlP6e1B+h\nizYq9Tf6lBvYtosDoPmQvkVwTadcpcLtnd1dsz1UZijqQsaGkoFA2gjnF/aV\nBa/v9suFtII2OSIrY1hKJ0Wd32MlVwaQVMIsp5vQGaKTuGd/sQWuguwjYv7j\nB71zxXahR3CHwh9saEBCgYFc3yCjPthNXXoupJ6VBKJq8y2BENVgvP19jjB0\ngjIMvog98puI4/GSVzsCnBYjK8YjvJmurC4zI1SMrz1uE9qeBZucK5DQ8XO+\nJDQqJml2leVebOsP3dMrtiC3PuX5TDRJyWlyFi/0wE2l037eKFsQvLDhLDrv\nvJSbBdiEsoxBv5wi6w3y2NrtiTDZpK1q8WsOnuD/ZH32i9U4pxuYkaPIj6EV\niKtk9wlfHW2UaxobnuzMiRZayR6lZ/hgEDsLyXDyoM1INt8OnDEoBZFMFuoT\nuPw5lJRba3uvsM55rPN5Gv4cNGjvs2XOzzUbCiibhMg361lrMEZ6lL+MiZVn\nALipRieNJwyewuyNFXzR8EqgXL8Y5sBoXWv5bKR/DmpFVRaf6WE53hiCHQnM\nex5WFIinuegWLPe21bzh7Nlx3ufx8UZ7EKNVyriak4lzS04ZrY+gRqm6sBG1\n0mGB\r\n=eP7X\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"429763082d33d75425f68b2491c75126ff59f3a5","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.9.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.6.0","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.12-change-prod-config-429763082d33d75425f68b2491c75126ff59f3a5_1588243133365_0.6520215155045421","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.12":{"name":"resin-procbots","version":"3.21.12","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.12","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"2dd97064daa0f5a83ad0483a4063d9faaa0742be","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.12.tgz","fileCount":91,"integrity":"sha512-Wp8lWIRwvvmMgSyxtDhZy48a30jhW8z6rvnUemli+ddJ6bBNCtGfbj3kAnkdk4pqplgOaOuPFdGSTqQVzhnLPw==","signatures":[{"sig":"MEUCIQDIWCGr9WRvvx5f73PMJiTgxsKiypKOIRfjQn7L9CgOsQIgXiFIO4CJKhqvqALj9UnEmChzSBBUQNQ5lqMTMi6uAh8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1179435,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeqq1lCRA9TVsSAnZWagAA9xEP/i21ZRdfg6K/wphHW3+e\nmV2oGVqV3fBGuH560WFK2+fO7PgvqyaE9qcgPu8y1ySdZ5h0Y5qU4ghG0bwj\ncCPjKMthwjsq8pbdVeKF1eyLLMWlmF/M4fSYUERpt0KBLoCnmV6sm4wPSrXN\n3DYgp9P4pe9vIXM5mqImUxtSvLPmIiKJbiSOuHuXkFLaTkky+XdcUGm3Cd+C\njWFLwlClkSLaB4cbdS7tGZM/Cnrw6deDRMsrHT7oCoLVXCYLIdOPxC5dZZ0L\nxVKBYaCBV6MRsa3AI377aG5EVDvjmahwOkgSEkmZnZyUAETGc6EBsU95dOjg\nnSsdhwVzV9ICWIF0qXtepNAN++5RUX1t9mMI0ds46+Kpdy/f/JeoVSVhyw4J\nQ0MQ5ohVnca/zVy6xWZP75U/ds7oPwkEXk1idgsyeBaQ3/tMBZMPgxuzN412\nQmKcd8qW74C5xKeAlS7WTF8Kmk48zs9Wo3EZ8narz6Cf0SV31voHQPqYsjxS\nyUZBNGIuDVRc2Ja5XNuVQfA5g+/+DcMbO2jG2mQzfZMXYUvxV9ka7F8ko7EG\nZEjP/EJywpSgMiW1iyuKX5hSvRIQDBmf5xDV3Ox7RFKEVNqInuNRbbHomfMH\nkex2nAxGOsKO5znAv3dKzcI1y4L34E5lN1vm0DtUleZpJtOwekUtm+7e8969\nyIeE\r\n=ucmw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"44d83aeed447782b7740188d8ccb2ed935269abd","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.9.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.6.0","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.12_1588243812915_0.9317076141050062","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.13-prod-config-changes-e8bc45059bc60e47191d933cfaf8968cfbdeffd9":{"name":"resin-procbots","version":"3.21.13-prod-config-changes-e8bc45059bc60e47191d933cfaf8968cfbdeffd9","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.13-prod-config-changes-e8bc45059bc60e47191d933cfaf8968cfbdeffd9","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"6fdccbe07e560f0318a2703f17e7a10c0333a95b","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.13-prod-config-changes-e8bc45059bc60e47191d933cfaf8968cfbdeffd9.tgz","fileCount":91,"integrity":"sha512-vxunxdAj/3ZG3ozWgULHZwHykaZhZW4Mwl039llX9r0lDLwFQGQDLc0pcVI+DkMUXAT7jUl1saWPB0JpSoAB6A==","signatures":[{"sig":"MEUCICfh7tI7czc/f1xIbMZcYJqjM8cKSLqjaH5YuP1tFjKrAiEA4PELDOB0PIlDTz0dmsMRcX/iHvJC9PhehxmyxokBGGc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1179194,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJesGYRCRA9TVsSAnZWagAAjFgP/j9c/56dw79ydYi8tQRC\ncn7TtB9eaxx5l1jkMY+zalmu737UTb3++DgTSHrqoh22D3B+yw4Wbn/at5j1\n2dgfN8/neAx9/CCKjiAdjiYcZLcyEynKA1YMC7nRrccFHVheGTC5iVH2mmoH\nOPcO3ULkaovbttteqW2YHXP2vagyX6rxS/CrkhNkQe7hsRR13/RJw5HuX2zm\nNb3h2g8sBLiPztHD6YNzEj61ppFRIkaphDZRFr7lA6h77gHEIeobCSZtHa1a\ncruhxBlsWpi0QHVzFRvCmaaWBlpLdUFeWtVP73ePWisXswQSfHSIoGjIt51H\nSPdKmrXJ9VF93nB3OqSQVZ+8Mg+G9IYouT1WCmoEJJ/AvkaRPr9HmCwjcRfd\nXSB+tlBFUXgp32Q2MQRxuU7Y/nU92PyFqsiWeO4qMcFMDTpjVsZT7N0w+rRz\nggtLfm3O4D2BzbVrDqvhE4LHSI4Z8FlN34KX9z5cIOsP4WN3HNJddljHo5Wd\nB78yJgFJDbg0GGoZ1HeZo5GDNw1VZOxs4JYzT9pxxeun9g05Yb4yyZTVoStD\nYyXZ6bhlH/N0z4YRHqTDWJh5DH4nzBgZ8Qw5sBl7dfUBA3W4FKiQCTKZXh5J\noT6kCpMcKsLDzaLbNLIznOktAZ7x3Mre7o+ZqROBbrpSxFib5nt8SoDxxEg9\nYShL\r\n=P0WX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"e8bc45059bc60e47191d933cfaf8968cfbdeffd9","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.9.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.6.0","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.13-prod-config-changes-e8bc45059bc60e47191d933cfaf8968cfbdeffd9_1588618768535_0.2676028280622438","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.13-prod-config-changes-3bab450ca56e5b5ceca2aa7d79856eb670ee3647":{"name":"resin-procbots","version":"3.21.13-prod-config-changes-3bab450ca56e5b5ceca2aa7d79856eb670ee3647","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.13-prod-config-changes-3bab450ca56e5b5ceca2aa7d79856eb670ee3647","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"b5ce2b6d2aa55e5e4106297cb0f9f6b9da8cf740","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.13-prod-config-changes-3bab450ca56e5b5ceca2aa7d79856eb670ee3647.tgz","fileCount":91,"integrity":"sha512-2nckSTFDR1GiU9hzKpZLQnBGNpIdFHb3IGUvAgM9FFyGTiOzi36/PzvbCyrIlCxYoDEblAqIoVsGBQjqov+v1g==","signatures":[{"sig":"MEQCIFsCGhjKUiye47yNkosxe23dcm3UmzCmwsNTOZkc2EHFAiBmyjpXRnb4z26aAJYbMUirRQ6m6RQNajnaY99nxm+Vrw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1179284,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJesHk9CRA9TVsSAnZWagAAJnYQAKDfglXbF+4fY1MJry0N\ndEU7ksRZx4CaHBgSkggyHRrqz2s4O/O/Fca83d2jM+fjC2Bxw9q/yL71lGTX\nmQuG/0XD2ootABxbvRbE1slEtpDF4nwhzwOlpRhCp73EM4hYdcBykrYqFQKg\nRtxLogrjPdOjNMHmbmd3yxkdxtLh9U3XZ+jvlIHz5fWgU9Ul6gR7EzHR9u/E\nHKxi6iD1s1H4A71IfL3ZTc6yJ+X+gPFwXCosNeYx5gksI8pmpkcfcfLt6o5x\ncDTiQwmmq9MFzQY+Wejgfio+TYVlJfiusmqoYCOId3VOCTELZiVG9pzrP9BR\nL+/hACZqPoADKBmDmeDwfiiYA2nCytvVmlBHa/ASQ8lFC+RKr59ndAPNL+U3\nEc7BUsPdNhUCgcJkzrBjGNPJjY7YAPfpoaj8raU26T1AyG/oU08bodysUzgK\nnfcZAsH6Fwzn7y6xdmYSb1FbcuMkx/ZFyIQsSSfZ9GpiakCzN6ozsToA77PA\ngoMs0Zv5jAckL6MJtyhWTFo8uJQ4JO7yubm0Teo2ksPRob/xFP9/qdMWg6bj\n0Dczs8UuzXcVMuwxYi0GCaCmhbKLz5XZp7VJdBm/daZyneGRWagHSUnvoUPy\np+OTyOTa8IkDRuFLaezWlkqV9nKjLSEDJSWZO+evK+rQzWQhZn0JeQD/hAIB\nlo5o\r\n=yfiD\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"3bab450ca56e5b5ceca2aa7d79856eb670ee3647","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.9.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.6.0","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.13-prod-config-changes-3bab450ca56e5b5ceca2aa7d79856eb670ee3647_1588623677393_0.9485515236573234","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.13":{"name":"resin-procbots","version":"3.21.13","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.13","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"./bin/procbots"},"dist":{"shasum":"0cc339050bbd379bf452453a2625de4c6860b0e7","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.13.tgz","fileCount":91,"integrity":"sha512-ZJJHeyaxlrz4gbM1HeK9OhT5JyRoEpW+9wUKdz0M/VNIOYKojZ7E9MpeMioBfx8tQkWhaV+JqIUKTTU0qxprjg==","signatures":[{"sig":"MEUCIQCcNs9bjWFvXmNHB5zsMXSYk6lxAOCUkXaZ9d5vkEwnbgIgOQKnQjosdkuxzGPubSkHQi27/+PXC+HeK3Oi2U+l4pU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1179162,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJesHrtCRA9TVsSAnZWagAA+JMP/iPQr4+HF1wyoFeEzoc/\nStpwMKY5Yqw4dX2tpPAJrVroYjidOejDa7ho5z21z5VParzWJy5w32FkyMWw\nAqrpPtEmo7G4z/nIDsEen006sj+uEqn1iLOfSftFhPFckp2ZMBybh4ys8lOe\nb1Ib0b7zOnvstf4kl3gVh5K0P8huHCdf7Q9UGeYYDXnVnFZd0EKN8hcyQhfI\nBotW7Ps/FVArOhsQqDfW6nCtlKJP+WTs7Jdl8kFMSy6qTXw41k46v44RyGf5\nYz1LZPjb1Sxad1JkJKuhYORf4L3ewYq/Y1PH4wClFMNmUxSo6kdwJfC6W+3J\nejXeaePNOXnC5x0Yep4EPbP0BlDacCNJjij/bThlYqLkuijHysTsogSkb1hX\nsoqhFWcehSQ7oLYvTfoRYXq0rXSgdS4LPH2Pqbn8CCGFeaTvVHBcCHudstbA\nNqB5gJVwzmJAeA8BQJX54MUEZriOEojhrKV0nAoetRNBLOgbXJYHE2Gjwf/R\n9+qT7pnsOYmhLHPjdZiR0fJi80eO8intCRfc4GRwZklZbA5Pdcm6BAA2QOke\nhCuuSqNCoYFoGnBU7awnCEtwfLaDOQOLcysAsoP80k+hN2fd4lwdafsjWoMy\ntLmav2LLtruOXwLXsu0QHz0GHD2CLox5VZFPToTEe8czThTBrqNttTvG3px7\n57WW\r\n=H+IV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"131d4bf149c1ab2cf4ed23e0b2bda7b04e5c15e3","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.9.0","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.4.0","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.6.0","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.13_1588624109092_0.6872208274530773","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.14-prod-cfg-addition-7c1a5f15722719953a2a6a593776427ccd047aa4":{"name":"resin-procbots","version":"3.21.14-prod-cfg-addition-7c1a5f15722719953a2a6a593776427ccd047aa4","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.14-prod-cfg-addition-7c1a5f15722719953a2a6a593776427ccd047aa4","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"bin/procbots"},"dist":{"shasum":"97f26b9a8418f32435c0fb5d89b4668e171f7071","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.14-prod-cfg-addition-7c1a5f15722719953a2a6a593776427ccd047aa4.tgz","fileCount":91,"integrity":"sha512-Htkv6TuiepxKLUlLaNI5pWPPx53DKKpIB1YCVrwMvieI/aiKCi1o9ZqhARLcYeZLoPfA5nqYxk38aU5rKkpwkw==","signatures":[{"sig":"MEQCIC9ZAh6VX3aaDHf7u90sCOoZgcOW7y18uXStvFDjQDc9AiBLYwWlFiVtDjYYJUEMW44qOcufxfepaxIvmnBwaCaQ3Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1179638,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe4jOsCRA9TVsSAnZWagAAml4P/2+n8YKiAUEckMNgt+Qb\nxQNqLeU/FzffBQb4AVXxkVMnpH7fYkxdALa90MUGzBgt1kgltG7wflnj5BdS\noI+cYjlFsAP89NqA2b78BEPbNg4WnRJ6f5qTgTxwmgBcAfFW6lmBVttnqHuj\nrw2vSOWleAg2wureUt7kGi59Ka4ULGDyj+E6ezoaNB5lAN1uhxSB1LpGoj/b\nKgSQD0delBZLKWF73UAkwBcHpnj2vgS3peQofn6iqZFH1yOEYGcaq1aoEr9t\nbsgX5IRWez6AuXQBCxwlv5SHiBdhKepfBmlhwCX2ozmkTkcChjsGv4tgzAY+\npvum1r+3tzS8YIcT5Updo+oFUbTcN1iJ2WMJV9krGV1j34oOlFIwC7H1QBoM\nw2O+Bc2WRT8ALPcjujBFdAx7rL/BqOYYEwi2YlYbyBgLYpjVF2zzakPUXpIi\no6LfaBoTplDtLOUHXot4kdNotoOmCXVPgEC0GdWC9UXTrtJEFhnmc2/0n0Tw\nKeTqhkHR4HeTIzTJGNGOYL49XjkwYmq27KSiqdkoDoWHBfJzoYn8VqqvcQN9\nc/G5gliyKCZO2IBfqxsp+evoWJWkPXIZyrCRi0HIy0Xb3tymEvXUxaYg5eaY\nfR6grb6L0SKj4dF0l+FkXwIansqxBLJcdWh2NM4XTbUOOFSGomMhwHhFHD0n\n9NVY\r\n=kZCe\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"7c1a5f15722719953a2a6a593776427ccd047aa4","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.14.5","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.20.1","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.6.0","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.14-prod-cfg-addition-7c1a5f15722719953a2a6a593776427ccd047aa4_1591882667392_0.5117124802901114","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.14":{"name":"resin-procbots","version":"3.21.14","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.14","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"bin/procbots"},"dist":{"shasum":"c1232285c17f86a4b237676d368b1487821d145e","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.14.tgz","fileCount":91,"integrity":"sha512-b/OgmPE9OzcuOJ2M4GIivipCjgyF3G9H+TNbFGsG2j5gxAF1xzJMNEE0AguyvT7IIPeibadM2Ut5USZBSwQoyA==","signatures":[{"sig":"MEYCIQCRl75AkWgGawSXgr1p1yfIO3Je8lauaJ84YlW/v6hbBAIhAOvHHcCeSKH/K/sNcAvJKloULIv8xm7erVITq5z1koo6","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1179520,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe4jlwCRA9TVsSAnZWagAArXkQAIQlMTzZOo+obi5b5aRN\neqpjSM/0dLvN7oyMjLT+ykeFNLZGnhF4Vu+lJh8TOCam89rIeVsQg1jnSbg7\ncgwofeNL3weK62LNuIKGBgXRS9CnQldqvsxJpmAv6GdNc9B1wanJnRYNxGz3\ndXXY+XnZ0MyRhcP2bzxz3Lqa28cLmSLFyNShLWjy6cdHaWU5p6fpj+6zvthJ\nzSUkEsm8Z95EwmcjZn+lviU1ETOK700jjmwygcZ8+VnU1zAULnAb0oV5aM9W\n24euom26fOgvX2Fw8Qxa0NF1Wm4x6J/sDR7QYTvVyJfeyScbFERm4m+UNu0I\nk481JQFs5bGx1uLg6o4V++YDdcv6kzG0MFZEsLJZuREI1TX7M/vMG2YsrqgG\nckB3DrM0iRtrg5mky89rQGM1GWiiUJ3a8Fq4IOO+Wga6gIspafgsPB9c4I8O\n8a3un8h+J6kTMwQZOSk8A7MWeNfR4zqq2edlfy3/BJlh1E0NKj/0YYbpYb+j\nQP4FNJ2jmDjWEaMzOi6QoRJOp4/BskH/leDnE1DSjenMQk984xzTNhaBedX1\nFVSLiDy8+hY8bbciRAYslTk5qkrhVWFPJxMbkUiB3J6M8rEUOaxVjklxrSZo\n8Bha1ogUljXRQl/0IZHklsLUduLLauOinUxZSDIQ5PyofWvUS5vQPW+T6JQc\nTL2E\r\n=aHBP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"84fec318284a16df2071331d5e26a02a1ab553b7","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.14.5","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.20.1","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.6.0","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.14_1591884144423_0.9920990759272212","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.15-feedback-channel-26d4b3d17ee4a1d498d8b1b4194ae5e197d90ba9":{"name":"resin-procbots","version":"3.21.15-feedback-channel-26d4b3d17ee4a1d498d8b1b4194ae5e197d90ba9","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.15-feedback-channel-26d4b3d17ee4a1d498d8b1b4194ae5e197d90ba9","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"bin/procbots"},"dist":{"shasum":"e64541b6bc0313757bc73b00947385dbd46ba27e","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.15-feedback-channel-26d4b3d17ee4a1d498d8b1b4194ae5e197d90ba9.tgz","fileCount":91,"integrity":"sha512-1wT8yTxUBQXc/REnBWHa/96kUPWQ/UFtZx24TaY7WMLxtWFaeblytg0fD2HS6Y2LuZgtmJO9yj3VVhjLIqdlew==","signatures":[{"sig":"MEUCIQDRlaxNDO+DR7wjNFBgmjBvL7cP4ADP/W+42lkaEFX+3QIgNE/ges8p+VEJ/8VXlfG20yw+6SwPQeRAb2ZpPUms6Ok=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1179756,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6h1yCRA9TVsSAnZWagAAnRYP+wYR/d/4ifsLY2MDT7Qi\nSQdcJMm5CDaQl7p4ce699wne/wTNqRfAJvgzcDkyKB/oQEHSUD7CiSo2wMDk\ngvIDAiQ7Sq1WvJ24YRqk2rxzj7zgoenjT0yGo9L8eLi2WBbee+yW6kFztK0B\nw1raxf+MVqbY1THT7YcWl9EilzOz5g3k82cLe9aOLSyNhoGfxA/OzMovGDby\nNxiy/9m5OYFGcSk0G9GgkEbva28rIhSd7tK3Jr9P/91cHT3y7qe5Sif5fM5J\ngcuZZzVfqSYdMk18oLHSYWR3tEAgCGpSocCCRYfjrVelDPMt853pYKREq8i4\nNgny8r5lbTcEVtoOyTMZefjJYK3ZnbInSFRoA2aUPDZ64sK4XbBHrov7+Cru\n3k8oGj0/vadQxicKZl/HaT8wswY+gcn2rFAmggYBvIA1InMvRtbjnRb8B6R0\nyrOFPWxpQHm6xPknrYOdpwX4A+obSUuPimFfetXKMVM6kRb2t6pFBLKQdqqU\nR8o4LbuKIffNzcIoRJf3+g2nNUczL1Wdp9idOofa1wAWHX8i7KTUzmfbDZTa\nL1FL/CC19+3KrWQK/l0IoOuZ0gP8h87H5i3v266rwUbaEFq1gC8/5osmcxA8\nkjDrp6ueHwMx2lqiQw93fidXxIZc8wnBTHoe3q90ves7EaN7tc6YqQt4r6ze\nHrpM\r\n=qNXj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"26d4b3d17ee4a1d498d8b1b4194ae5e197d90ba9","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.14.5","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.20.1","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.6.0","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.15-feedback-channel-26d4b3d17ee4a1d498d8b1b4194ae5e197d90ba9_1592401266280_0.8753098603181375","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.15":{"name":"resin-procbots","version":"3.21.15","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.15","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"bin/procbots"},"dist":{"shasum":"daf198eddbde8765d67537f91e565bb546c003a5","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.15.tgz","fileCount":91,"integrity":"sha512-T5nWqBFZa+n7KbEWtbQB+cue/2jIJtvyx6drmPHRl5DDzZq8xcTAEo6ZBM69Hc4O5VFfp5soEX3m7SYgdIah0Q==","signatures":[{"sig":"MEYCIQCHiecxYFK8STV77a97f9W/1n6ZKEmXTHYir+r40s7Q4QIhAKd3MCvCkZNw0S2Ezxc/TJmzVU2iED1lPilXrBhdlq+X","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1179640,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6iJgCRA9TVsSAnZWagAA3icQAITJmtvtca1e74pTvodc\naby7GjOxZml2X1yYA246qT1d1hXH30PdJWzn8qo4Fdv5JdG/+Sz26boC7n8T\nPVl4FFAKW/bld7X9tmY0Bcg6nnRFOMSwfzHjUNr8JvFYr28eJVRWwF7Bc3jm\nIWSZiIWqY4gFG/EOP4AWd43IjRCvbYDjHt7o13C+50Japt2a00BSEivHMyGe\nEcFA9eSl4szggGe4OON7uQaTgnY2QOAhLDqxNROlROEsK9peo6saLWs7Hfzg\nLuBdyBDET40amCNP9BSQMjPP0X3L9TtWJKAGXG9GBS7HBe1jrnxTERinqQqE\nQjOul4dflGQ9xaH21+hhw6c1RmPKXt6Ovw5lfcVMXXET21n80GPBLSy+AVwn\nDXb3lC1hWUCzs123AHeCpRaOGWEiIIH/lORxTxj5QxkxiqCYHrQAQBTtp2MJ\niqfF0CtJa/o9euJRXg8yS6v1qI0I/nEtEtHimR8XrWmVg0fihFAZCRPaG4yk\ng5/10Gynai/7wbwO1pHrToHUHBH0x5E4COjCp1jUVD+ursQS+tsKzHXgtwjn\n+b74jL6Ff6nD2uIUI7WJwgCVygTfOXb9m7dQLrku8DPz8TYNRpojh/u8UCm7\n2xn3808snIba8dpy3HwJ/x25jDzZ+ywADhRMBjmYAF7a5yCzJ8rA3yYNZPT4\nzIjo\r\n=a85I\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"3c2868ef834cda654c9c6a6be2c8d721a4a78019","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.14.5","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.20.1","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.6.0","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.15_1592402527652_0.3496693372108455","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.16-distribution-channel-40c6190155d65262ea77048528e445a3feae8227":{"name":"resin-procbots","version":"3.21.16-distribution-channel-40c6190155d65262ea77048528e445a3feae8227","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.16-distribution-channel-40c6190155d65262ea77048528e445a3feae8227","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"bin/procbots"},"dist":{"shasum":"a9965fdaa24cf6241eab4be1dc08a43476548324","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.16-distribution-channel-40c6190155d65262ea77048528e445a3feae8227.tgz","fileCount":91,"integrity":"sha512-jJCFDif908iKr5unmXNkq+VV1n43WfeQTr1dWLpjBdfLKQA5taM8qdwDinGqymciPQr/Ff1LU8io9RfTzztWdg==","signatures":[{"sig":"MEUCIGwSnE7DBQQ0YX5hTD1CvQSjZMrFeTS4FGigWe8XBCqkAiEArrEXTKbScVp823Op+ijYCzMMp8RF9Tc8rfWj4Umlhew=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1180180,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfF/KJCRA9TVsSAnZWagAAq3cP/23uo1O4Bx8ZXUWHt39z\nX1jo+9yf1pg+ZK3zKVeTyBgIoZgZYsT8gGGM2KWYawKcjYqzip2E8Rp+wOJ8\nAHmwglLPZ70y8dlalZZeivRy4LwK32J5Ha4jWoRT+wnuVGcnS5zkAeMAx7Dr\ni8JDiEWbr4Y8qqQmqaBtgCdAQTNJeUaiLH35aCQP7HCyrGgs/yMRlnh6f3xb\nfvgk/aYcLM3u5BVf65n2pGAO6DeI9n64yoKQhB9exTxD3rS753m74HjSm/8W\ntc/LNdAG4pBU9DgESPm8oFTWiLRwiZMC9qlF3qX+jmB0ZDWnJ8z9c7q5dV/G\nAGLxQkv8IB7iX0Fq3ZuneOLDh3iU8Jc2p0nJ8ZkFKbpOD2ZdRXaKgdI4PLJH\nYy37MoqWOhunbGHweK/EjdAQdEBhmVQgjN/qABtZo9pM/nIcd4Hh6oyTwgN4\nw33qmjbn4Mjed55IL5orCZVqmDr9T+SvH/0EVtdWF37OmYb2Hor7jgwp3rCS\n886IQ30QlvxeGpOyNcuTUYTElYu5v2VppfcquzFcxLgr89vC48E+KF6wmRui\nOpTRYy8YaW4ufxqKzO5KjjXlgH9+b8Hkg9spLoprzOMW1iRATldG9dwFaZcx\nmxBxunAbKA21bfgjDl40uvH/nmZEj4OQ6lb0UwPuC6Snnn948jpI1/YxD7SY\ntDjh\r\n=AVMu\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"40c6190155d65262ea77048528e445a3feae8227","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.14.5","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.20.1","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.6.0","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.16-distribution-channel-40c6190155d65262ea77048528e445a3feae8227_1595404937161_0.5400812060936908","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.16":{"name":"resin-procbots","version":"3.21.16","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.16","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"bin/procbots"},"dist":{"shasum":"d83ef3b0dd91e14a9062763704581baa29fb766b","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.16.tgz","fileCount":91,"integrity":"sha512-ybRLAyqpnli9joi4iUevyBLTktF45Lowq7a6k+E6roXR0DBvQL/bOC4BMMzaM2qG4UqlI80jIXUAGleUAX4o7w==","signatures":[{"sig":"MEYCIQDuXn2vY+G10Zl9hHVzNZ5eY0p/6A4/eLzKZE18PxSJtwIhAJjURuE0JeN5W7eXDOn2f7Fi7HOTNK+GyqKD46UKiJ2/","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1180056,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfF/NgCRA9TVsSAnZWagAAYBAP+we0XSWigLcLDKKShk8E\ngXMB2cX3xQZ6eytZbCwz2lrNLDc5Uwj1ypj3PBlxgEXXw3hJPCaq8ejjtplS\nV5Gcwoht7YP97oOo9eHDvaZqx9q+avxLzGUSq1YRB2QW/WsihZAWVdBD/1v+\nJWVn9R0iNfjlHJUiIr6JORjLIgsl0d5Z8omD1D7zHA7bG0cbNUn0L0s/kiwj\nJNs4vt/gk7WQP0ZxubNbOwfA0LXTnAYFaEr/nojP63ShDxAGwuMBS526V/Kd\nV2YTUsvmQQ8cLDT4O6EIQ6SRr9nLwm1ALAd531kGlnbv0JlZnpPpQQD5vv7x\nBG5sMiR/RbR0nMuonyI+zw67vpL8qJPcbcH1D/r387wBvGfhVrL/TNS0b3Qh\naC342jKepVU0voDpAjXu0Qrzg7WO6TsllWj+9NvCdL5R48f9g5BNs9uzVVLj\n9botZZYOP4MmMrthM1FTCDSAUC0XETJsMAoIZBLm4j+jaE82t5q4sdTOnEn+\nlmvLFmoqO1BZfRyyEmiozm0LW+uzkRqVwUFl4yU7R9S8hfIclFIaz7Hitt/+\n0mScNikpDXpe9L0cl4b/lv+iFfZfQHXQjTMFnOfsBGHwuH5yeGgkHY6+KsR5\nW+bHWccTaemwO2Q7DlpVaBPzxJ+joI74THzt33gKLc9zXkUKNufRKOvmY6Nu\nLHOI\r\n=T8TS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"04476a7ddcc0b17f96dc1bae2c39ac1baac69887","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.14.5","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.20.1","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.6.0","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.16_1595405151587_0.23908160440363901","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.17-change-dist-flow-a82590444c756f8463cf1bbecfbb8002b101b8be":{"name":"resin-procbots","version":"3.21.17-change-dist-flow-a82590444c756f8463cf1bbecfbb8002b101b8be","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.17-change-dist-flow-a82590444c756f8463cf1bbecfbb8002b101b8be","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"bin/procbots"},"dist":{"shasum":"7cb4e5cdd29dc5278b55552ba4cb9e7f5c2cfa50","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.17-change-dist-flow-a82590444c756f8463cf1bbecfbb8002b101b8be.tgz","fileCount":91,"integrity":"sha512-GSeWYx7ZWTYD2iibLedlQvlPfKcf0NNkdbeBUBrrlEQyPrAe7Y/6nWc3ZPtR+hoFcMhyykDkqr2KPBWf/FKDfA==","signatures":[{"sig":"MEUCIQDwol9/MS28BRxQUPgZwCt8Nj70Yo3ioZXIeLqQ0lNIkQIgDEbns1dRrdTm+r+UzmNYAxYaZBSwaO05z/KHZrWIzqs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1180254,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfIUfLCRA9TVsSAnZWagAAmAsP/15n2ZgJbTc6l5o2czfY\n0/aKzksV1izFWOgI1jbsmztlG8mAGX8naXwZboHPfXadQlvQwEIZOclPAKl7\nzfNp0ixDfnHDIUxUT8/DL3ILJI3BrbLT5eMN2JHR/o+FHRK+dLHWOJowqyz+\nZhlKKXujxrERyrPuitKm8lnejVKm6yQZFD8aJoxqfnFXEALSv26rfhaA/p7O\ncqHOL+QQa0dGXc4fdzLwV+QExK3aCJR53V0eYSKvXRI4ycjRCLMvTU66c7uR\n+7w9fblHrS/nmUDCJqWyYzKEgPif0UsMKLqOFHYtqaJGHuS7QpO6CO93Fhai\n8xmaaAcImOJQ8v1WrZZqngrGAV6jTZTtr8BGWJ+pLoeL25Yy5dTVN1eFAoy1\nnY/CQD4U3xxAdvSPuGAOJJlWQr8zVa2kqeL5CUMRi/1IILMiCExtoPE9Ls0w\nX5adN0ThP9L/9mhOnqnUHBThQbfCgEakZ/iOnKpDl3rpwUY465WhqEzMkvRh\n01JRPFZFfFsh+UBnO5xCBOlxfsFjvqi4xSJ8R0SenK9y4EVY2LRJ2zjZk0ze\nPa3R2YaWXs/SthIK9R2fCCK3/J7go+z66fVUjr5WTAXUO0TM9ULm15J5+Ku+\nuoSis04jElRhDSqulyoxReiR86rSx86dRD8fvzIS4oG51tVJbTLnybbm6A5b\nY6hx\r\n=xy1m\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"a82590444c756f8463cf1bbecfbb8002b101b8be","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.14.5","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.20.1","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.6.0","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.17-change-dist-flow-a82590444c756f8463cf1bbecfbb8002b101b8be_1596016586540_0.26536471971691666","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.17":{"name":"resin-procbots","version":"3.21.17","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.17","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"bin/procbots"},"dist":{"shasum":"d57f933732a3591c0def2f93a4fa48bd57738617","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.17.tgz","fileCount":91,"integrity":"sha512-OC+wPJQSF8fxydp1OcqhGSc0h1YDMuqt90BXkjBaBB1VerzzfHEJqHkuplIVvvH8q8a2o2HXC1+IpHjTbOKSwg==","signatures":[{"sig":"MEQCID+kYsTJ9lW51M7pXjsR2Noy8EVGZbQ4yySZpCtNF/BNAiA+6IBk841ah1qSdptaCq+pl2J+0ssg1QjhEV5S3rGjHg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1180138,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfIUiNCRA9TVsSAnZWagAAEIQQAJeNp9cWNGkHSdcTTVE8\nEuLlq8cTqwisXUkXeaXa3B/yCuRcPnZZaqVFvaqcdIZipE1+1y4T2P/nrrka\nbNQNui2jNcMrHiVOuwanddN4nYXFv1DNgS4f3W3un330NxMO6OEofO/k5h5n\nQi5pXv78SBPKumioUdNgKlAhvooNo1mJZNZbypNRR5GlMlXtOBuyTv3Xtwao\nGz09Oy7h+oX5cuEnnrGA9ua5Z434/KDmSAQKWZ+PoQlbFAUXK29LktgwYpUn\nIU90bkZyvLcSg85nNhfBPnEKBLIOMTfDeRKNJSZn7XGDFJlsAD9FBm/L6sdu\nUEshrBCASXwG+PzT/aSCLMCawZappvmirR5Umq7Z3bCRzUTn1u+xsbAhBqxY\n1NH+2KDxDJ41HnrOC46rpPgwvLVkaRi5Dy13ldaVu1kKxpiVH46E8aQFbJO4\na336s5iZOFIz28jP/uqjXTs9PHCNZLrs4uXM3yvt0yAJs5UOwEnpOR3sitnu\nLtCXqVM5pPBAqzdaPDOuEsSQXKW6W4BLzLuLaae80beEQaFgat+y3MfjWDa8\nTir8NvJjdp+cWbH6eQi1tDZ/O9xJQ8Rh8smA2PCycp3NjeaicwM1+At/q1gG\n/ybo2pyXQFGlwmZfDUiMFV9sjYDLxZ8BnEadGHVm5u27R42FneEpT5IlQui4\n9dxg\r\n=SgJe\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"e9065b20d6e312251f09eb35532df2133bedc577","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.14.5","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.20.1","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.6.0","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.17_1596016780610_0.4335125932345434","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.18-stop-paid-support-syncing-4d10aee8b0d4f76afd3cc1b28de989efee51ad22":{"name":"resin-procbots","version":"3.21.18-stop-paid-support-syncing-4d10aee8b0d4f76afd3cc1b28de989efee51ad22","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.18-stop-paid-support-syncing-4d10aee8b0d4f76afd3cc1b28de989efee51ad22","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"bin/procbots"},"dist":{"shasum":"440d4a34e1a25e2c1889b4b4dce54712ce02fc31","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.18-stop-paid-support-syncing-4d10aee8b0d4f76afd3cc1b28de989efee51ad22.tgz","fileCount":91,"integrity":"sha512-6mxUDt7vO4sRCpfq8Behr1DBxATiry3z3wAXEduwSgyrI+LH7HjjA2kHGkL4rZKuyhsHCGLV2uKBUOJrbUHD/g==","signatures":[{"sig":"MEUCIEVbKsXQqSNl1XX0vR6mVO0uTo8dkyBs/GieEp1Pf2aZAiEAy3qm1fVK4o/pWnooPsWaeZtv15bXw3wYj37w3He2XEo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1180042,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNBL0CRA9TVsSAnZWagAA24YP/RHEUEUIZ+0AnTsQQY1t\nwGaVv0CjVBttCGKxL3sWi6G9pHH+uvZrV4jbRyIVDwX3gq0L+NPVaPXo2qE6\nXwTp4UgI9iG5Teldg6/j3KTWCOnwUKT5uIyiO7lJ6sUAd3ZfA4oQ0SzOM2aJ\nNUt6Zsi7eyid7+RS3adylx8mMi+Rrj9H54f+HZFQaUf/7OnNw3bo+Czp0ime\noo4FPHMq4stbeiPmkx6JbgRF3mh97Ns/CT0xctY0hAreGgHtbaBXR1M8W51C\n0gasXG9os3G/HD5ARYeojl8R1wBBLY6U1YrixY+wreAimCJFk7Qql2pGLHSP\npfI9sVCzQvp8ausAbb9HMAbAEhCW75+qZFd3z98/FWNP7wZxPVTKvuIfgjAg\nRRWx7Y+9YCXL4C3QCmHqPUwW+YourDS3uHAqk8as6K93cp+aOrztXimg/+FJ\nTM//u1yTBoq//XfBmKNYJr8I21B8dC75KgoHborOG9f/y48FBcg8CccXjQh+\nF4g4bfjEBsqY2ed55jKvZ+kagqcJqu12ggJ77pp7pkUwerYPi8ZRh4GQVRo1\nLHLUAHrwdHLeGHr0zVpwni2TkuDQUIeAESsnXMeo1lrAIwarwF96DLFtT5TR\nvitQPi3e8ZwyCgZkxn6HkIrfclIGoCe2GQ0aXHhQvfm3hSwDea0ipK4RtAKR\nslus\r\n=dPwP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"4d10aee8b0d4f76afd3cc1b28de989efee51ad22","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.14.5","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.20.1","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.6.0","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.18-stop-paid-support-syncing-4d10aee8b0d4f76afd3cc1b28de989efee51ad22_1597248244172_0.6456218089411467","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.18":{"name":"resin-procbots","version":"3.21.18","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.18","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"bin/procbots"},"dist":{"shasum":"f61d701d391d63f426aab6dba8b61434964c2e46","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.18.tgz","fileCount":91,"integrity":"sha512-GY6f9IoVJXkPkyKKC1WK9cvo8J0NhS9sBfD/en61JQ4TWgT8p5IlBvd9RlXKXTAUd1egcL+Csx2gn6txvCkTwg==","signatures":[{"sig":"MEYCIQCrMzbc9UW+hvhWitFP769wrbu6rY6VvsTprQPgtuzvTAIhAIDumzI5DKlqKNUtmE1fkML89VSthwWuF1+/cOqREod6","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1179908,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNCEJCRA9TVsSAnZWagAAHHAP/2CklZMa+trQGvpdGbgd\nsQDUg1/UJiZaRSlXIlYL0H9OEI+4K0CjSfBHQyYrVa7EvQPc4qYNdfWjuqWj\n41hGE/l3sXimD5uWdTQjxPFo6TFLs9noSF8Ys5ZRdwZhIfJVU/WjPo+7Z67p\nXAGixOR4q572CKeu7jQALKCvFXdI2hwftxdCpOOkmia2VOx0bFQR82C4a51C\nhlbwnEtGvgF5duwR9SoxIED8rXQpQAL0WZRFn/RF8K7oUV13DB1Kg3Zqwdhj\nS02SwbgwCfkqtlLgAM/DqKMRM4V/sT+0LDVr29hLk41sGvVGjX/GJfZxszhg\nNZV7dqC97kdgwFLHaEtIWlfcY1E9bd97C5kXsI9vALqyWRZYejAPO7tYYoVH\nXUxgEoaTPrjBSFy47lM85p9sliYJcni+ZftU5AFFC0rrX+l5DQzPKwDolUxM\n+4Q3OfTV5SyW9EebOCq+RBgmSd3YU2AMu/sV7bgcnPywnjdvITZZgrd+XSpa\n5Jxmvda+j5lqhuef0g215S9nGRvCV/J3rsyiCFMNmtqpET2tJCB+77cxQ/rD\nBkDc4F6s/7nstfbWK/JbGastfSHUo82PaleUcQGeTzJmJRNC/SUOXtXSxJ3R\nHiH7HYNxGXPQqUJWO11buAvca3BR3ddhD60BUAfJQMnA1TwYXge3Q/27Rpm/\nTnk2\r\n=L7O0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"729f5a8e65fda8e82f70517d02f625ccc57cde34","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.14.5","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"10.20.1","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.6.0","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.18_1597251849102_0.06958342510781934","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.19-fix-sync-64805b86547895ae886a0310fbc5c80ae0e64c2a":{"name":"resin-procbots","version":"3.21.19-fix-sync-64805b86547895ae886a0310fbc5c80ae0e64c2a","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.19-fix-sync-64805b86547895ae886a0310fbc5c80ae0e64c2a","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"bin/procbots"},"dist":{"shasum":"309d06cc7d8453b185d1da991c98705a4679a520","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.19-fix-sync-64805b86547895ae886a0310fbc5c80ae0e64c2a.tgz","fileCount":91,"integrity":"sha512-amc5uKXe5NH4Kze6XRyCLYcr6+Unx6JHT/YgxqoeKJoLn+sLFNXvYRbfzGWmZPf+/cPPWixOJwHNkJ36x2GNXg==","signatures":[{"sig":"MEYCIQCtlr6xJKUS1S0iZACMjz7RaTTrDSJWodiHaSL2yYGj7AIhAO/K11yY0FdrpvgJ9EKLFPIlf9UrvLKCNJZq9W2eb49P","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1180481,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0PtpCRA9TVsSAnZWagAA7GsP/iiWGvSNZ/GPafuZMNuy\npjv2/6Oawnwd+SFchKa9HMnun7UBkH0AJW/n3ivxk6dpqCXaY1lyCHL0Thqh\nxkHDERH0GL1ZoLauf+bXripv9f1XMDrH40bPIhK0esRBu9imqQJMbzlIWGvx\nZq/x6XtBu2OYJeFccFR+z6t/Tkoci6K6Rq8P6WmLN8MN7eqMYK3YJNwrLYK1\n40JW5rf2FmT3oKW5O630lQQSgXwRqCETUD+x0bDSjJ7AKbOKkBSNRw5BOHFV\nKudVgbIYv1k/FnB4i9oFUkebcabXOVJWsugMi6o4QiXp7W3mgX0Rwcp4u2+3\nC4e34ExrgIcm6DsaG11SF7+F+55HCGNY/pFtQbA1V4sywieDIGiwNeMKbq+G\n2aBeY6+G6VeVvnKts2WkQoociUHiko+pB0d/oG17NZxQ5PImkGISK68cNmnv\nhOwvCOmXGLpbSBOBEe41rMXuUxRoCTI4WOpgNhpLODdQxGEQCzC5L03vvJo/\n4FP1eDCggbuLq3r8ELR8qwOROdBt8ZThDdx93LN/brPNDbRcDark01jhiE4y\nnx70vgL/MovRnRcFgDxZBVpe1O+5yskMlEpU4cVorCwHxZaGHWZt9UdpjyaV\nKD+Th8tI1uQKHNetRKwjKSofOrDD+CzNF5kbUdckSgt3JIVqDsrsqu2bcK1Z\n7go7\r\n=Kau7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"64805b86547895ae886a0310fbc5c80ae0e64c2a","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.14.5","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"12.18.1","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.6.0","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.19-fix-sync-64805b86547895ae886a0310fbc5c80ae0e64c2a_1607531369030_0.832082488194235","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.19-fix-sync-1eb9bc14c66fd9014e09aca36a805e9e1a590f6e":{"name":"resin-procbots","version":"3.21.19-fix-sync-1eb9bc14c66fd9014e09aca36a805e9e1a590f6e","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.19-fix-sync-1eb9bc14c66fd9014e09aca36a805e9e1a590f6e","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"bin/procbots"},"dist":{"shasum":"1868e05d03014b6fa48a6ac7350efa759d5f7454","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.19-fix-sync-1eb9bc14c66fd9014e09aca36a805e9e1a590f6e.tgz","fileCount":91,"integrity":"sha512-KPh+Ybna2Ei18t3RPbQK2xo+IQmgV/C9B3vq4LXm6fhEU9VRV3FhtVm5s5HykidmKadjhxzKgDZqGmZbqP8tbA==","signatures":[{"sig":"MEUCIQDDzCW61VNAOz2dQwXee7QnA9Dws3FYxOjOxszRLnkhjgIgO81EborFFAkN6D8DLHqdogLowMywwN06JoqbmX6cECY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1180333,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0P3ECRA9TVsSAnZWagAAJ4gP/29vtUT/cBiKlnf+r/IS\nER8zAS/bmNF4oLatMeIcUT7m3HG5fariODcEMajmNO79jCW1RJlbOa2zHBiA\n7ocxya6nkQ0Evi/mLGMcbVA7S5lJO/CdytQvUMzUNwJs11yzWh0thf4iDGdQ\ngkVNgV7J1U7vh0u/c+fe3C2lKJOSAgR3a2wHHDIPXGsN5iK6ZZg3GoQBEBP0\ncblExDuvtrty+lV5fyyUPc+kKCARP0JJ1cSPmtWoxpfNj72NCvWxS1mcuSoL\n3jjp0UWASpKwElmdytCP6lyJjmrcS9ZRhlrw6M5tZYgRSKy6dwrKsw9j2v2B\neuUX+JHG1N8Vj2RiALg2QC5k+jfN14D170hhgTLyedYCySH6daxCi5cC18Te\n3jH1VeEiN1aTzJnXbeUOoSxpcfWt8mxMzSlXgjXKwHFEGXxgkQmddvPP6Pp7\nFYZ5+oqZjIqNZNLV4mxw+puvpJ1zaTgsEGIVSPC2w6zZqoqBS+yRjTZQGg5T\nrsxnvE4BdtqZM/PnMCNxQ+bnemXZRnr3/kX4/cY6Y91m68tKG/J9d1tCzmW4\nBaQ2pSnkw5JBfPKhezVjhorLDUSpRyRyYhnBnCgAjjVPAGd/L8Hg5oMenp+u\nzoeqARzKLq3hWAP3F3ySBylgDQPH3lrT/41KVfG6i8Wr8Sai2+XR0HXcPcbh\nfQOS\r\n=Z+7j\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"1eb9bc14c66fd9014e09aca36a805e9e1a590f6e","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.14.5","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"12.18.1","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.6.0","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.19-fix-sync-1eb9bc14c66fd9014e09aca36a805e9e1a590f6e_1607531972091_0.28234072099336727","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.19":{"name":"resin-procbots","version":"3.21.19","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.19","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"bin/procbots"},"dist":{"shasum":"cab54eddbe8b930dc91f50fbbbe5bd37e7a36dc7","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.19.tgz","fileCount":91,"integrity":"sha512-NERsLv6eEj0EM1Tg5AA1SpCfTnIrDH41oGwKb3d3ZI/ytsfRAuuMAzjJDrqBKx+zuQHSF3ECn8YBAiykXlbOVg==","signatures":[{"sig":"MEUCIGsblwMyfAdc2Wzw9pjOb/Pudm43Tz7mS8RqFq3Ws/1lAiEAu/6TKTa2LcVfz4zyQWF0cUUrTETGU1PgKxevsHbeKKs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1180233,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0P+ICRA9TVsSAnZWagAAjXwP/ifqpqi9Xfud5IZmCddl\niQwNjf664BdWdHSAY4988Q/9xeXfgP85RWccHMJOVANtZ4PKxUorsQjqTtRi\nipMcS8jZnlMNug9ChXGBmjmyEnEUTaiWHiM2eoaF9KZQ4B3+DRz855mhrvt4\n1hJYsPwm1Nle0lynxYFUkEWI036JJmF4hVBPsbeg5z3TW5oUUVccGZ14bXB2\n560bnnyiOCmFS2Y1X6x/LteAgTZdCuZ8FJCLvQwEdS1Gc1+NzU2xw/8bNMuV\nAqvyzFKpRCVkIJ7vev+Rjz6MATzq20QxYfYn6Tl4FHgTzYgqMp+3uOT3IKLE\nCJeLh0HNUFobVHr6ui1aY5Kp6/bkMVwAgCNYV2+dbzMmBLjmteOJm4yVQGM9\nElgtivR30vzDpHi3Gifkn3ES4IKE/fVXvbaBZIHeu9pnfu/H7vZwQBCFtrL7\nYOzZs3RU81olfwUMvP6pdxtwT1SnwFmndjy+zcb8n31t09JqkAxQzgDL9tCb\n7jUclbGhH7qjTwl/3uMntHQrzVZ27S95OPSRcinO+Ml29mBCHohcMPI+d4Nd\n81Vr1mgMah7zNgG+2WNeYo1BkNBCHeut637Q8aHe66zwVwCiujO72v47Mutd\nVo01qQjPqV6dvfxKYgb/aK1enUVPEd+HIyPbmJtf8nDmiopjWzXaF0Ztb+f1\nlcL9\r\n=vacT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","gitHead":"0c1506dc376a777dd4fba6ac3b5e51fb9408cf18","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.14.5","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"12.18.1","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.6.0","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.19_1607532423995_0.9747025224432069","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."},"3.21.20-improve-error-logging-53342dc2fd607aace5d237fd3fe77edbef38579f":{"name":"resin-procbots","version":"3.21.20-improve-error-logging-53342dc2fd607aace5d237fd3fe77edbef38579f","keywords":["resin","process"],"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","_id":"resin-procbots@3.21.20-improve-error-logging-53342dc2fd607aace5d237fd3fe77edbef38579f","maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"homepage":"https://github.com/resin-io-modules/resin-procbots#readme","bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"bin":{"procbots":"bin/procbots"},"dist":{"shasum":"2754c0c05643f4fd3797f8d9d0fa419083f2da4c","tarball":"https://registry.npmjs.org/resin-procbots/-/resin-procbots-3.21.20-improve-error-logging-53342dc2fd607aace5d237fd3fe77edbef38579f.tgz","fileCount":91,"integrity":"sha512-Cy86zl5bf14euwNzK4jwTOamYotquq3P2HfgFwx0jw/csUgOLnS8IPm3S0B/SI9CjIlkuQvNB8EStJ3rDtBkrg==","signatures":[{"sig":"MEUCIAgDBspiuNdLqhwsKJr2MwleB62pxgqsNUlYqjIbnN6BAiEAnjKi9sGU5EcYnpCEuoLFupHmGEk1LTgoFcky9lhySI0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1335850,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgyy71CRA9TVsSAnZWagAAI1UP/R2rCDjxw9LDTzWsJM0p\nESjnegMIevPO/5NbPzlc/KZdZOtbW/b26Qo6AqdR25UoXm8IxjFr5BtZ+G4J\nVW5awdJi6nQZ272UuA9fQicd/fpDfJ9lXwkcKJblsHRu5ZSmvdZIt44O01Ag\n5DAW7TvBY3+/ZESC+/LSe1lJ0F6djkt5QrhwTrPttyFT9PjlQadmXLEtUUW5\nO91tdUFnhY4khgtnmye8wFxYv4Vsxy1SGx3QVNVS4utOhig/eGFBSXxgTO0k\nVnDY9MRO+1pPVMDl3knZz+emlrb/jGOY3U7Iqu1V6jI1vqkeHodKWm+iXl+x\nQIBZNHfod0WxZffqzsKcrbMI8FAl+QEl7JBGGrtvCl65rcReEnPguWaKvRel\nPvjX+Qsw8mBXpkt9treyFSBF4yX0cLy7JAyprh0mfcKz/yU3ZOfxBnUDF+EU\nKAYbLf/x8gKBe/fI3mFHS72wybH06a0v7C+ruf0+cut1N+nT+Zv9pJMgP86u\njZncvxgAanJtK4MDunhx+h0Nx459D2nSU96XSJ10XRsYlNgjnSppprP4aazG\nP48og/R8iCqOEYIF2zLzjyvjXzaKfV31m9pG6Ax1if5aerZoAz3hng4oMF/e\nEnmm8mpRngCmqgoCFF0EKwSvWxBLPj1oS8yBOeLAIOZd88X/1dyxfhUnuvrB\nYVZM\r\n=56L4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/app.js","readme":"# procbots\n\nProcess bots used for automating the development and deployment CI pipeline.\n\nThis README aims to get the reader up to speed with both running and developing ProcBots.\n\n## Installation\n\nRun `npm install` in the root `resin-procbots` repository.\n\nProcBots uses a dynamic loader to execute its Client Bots. The `PROCBOT_BOTS_TO_LOAD` environment variable needs to be set to a valid ProcBot instance (the name of which corresponds to the bot names in `lib/bots`, eg. `versionbot`).\n\nOther environment variables are required depending on the ProcBot being executed. Please see the section at the bottom of this README which has links to each individual bots own documentation.\n\n### `resin-on-resin` Deployment\n\nCreate new app, add appropriate git remote for resin.io.\n\n```\ngulp build\ngit push resin master\n```\n\nAppropriate environment variables are required before execution. See below.\n\n### Kubernetes Deployment\n\nDeploying to a local K8 cluster (or to an already existing environment) requires a bit of implicit knowledge. A framework for doing this within Resin exists. Please speak to DevOps.\n\n### Running Locally\n\n```\nPROCBOT_BOTS_TO_LOAD=<name> npm start\n```\n\nIf the Client Bot listens to an external service (eg. Github, Front, Discourse, etc), then those services should have their webhook endpoints set to your local machine. This can be achieved via a proxy, such as `ngrok`. For example, the Github ServiceListener for `VersionBot` listens on port 4567. Running:\n```\nngrok http 4567\n```\nWill produce an HTTPS url (eg. https://12345.ngrok.io) that can then be used as the Github App webhook URL.\n\n## Development\n\nDeveloping ProcBots requires some core knowledge of the concepts behind them, see the Architecture document linked to at the bottom of this README for more information.\n\n### Security\n\nMost Client Bots will require secure keys or tokens to operate. These should be passed as environment variables. This allows ProcBots to:\n* Stay open, without the need for any obfuscation or private submodules\n* Allow the security to become a deployment environment function\n\nAs the latter changes radically between deployment solutions, this allows the ProcBot framework itself to stay agnostic.\n\n### Building\n\nBuilding tasks are implemented in [`gulp`](http://gulpjs.com/), and these tasks are defined in the `gulpfile.js` file.\n\n`gulp build` will:\n* lint the codebase\n* Transpile the TypeScript source (in `lib`) into JavaScript (in `build`), copying any required definitions\n* Produce documentation (output to the `docs` directory as HTML)\n\nDevelopment itself is agnostic, but currently this repository includes a `.vscode` directory that has configuration for this editor. This has tasks setup, so buliding from within VSCode will automatically run the `gulp` tasks and then launch the ProcBots framework.\n\n### Testing\n\nTesting is done using the [`mocha`](https://mochajs.org/) framework. Tests are containg withing the `tests` directory, which mimics the structure of the `lib` directory. Test files should end with `.spec.ts`.\n\nTo run the tests use `npm test`.\n\n## Contributions\n\nWhilst this is a [resin.io](http://resin.io) project, we welcome any contributions to the ProcBots project, including issue reports, ideas for features, new Client Bots, etc.\n\n## Architecture\n\n[The full architecture documentation.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/Architecture/procbot-architecture.md)\n\n## VersionBot\n\n* [VersionBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/VersionBot/versionbot.md)\n\n## SyncBot\n\n* [SyncBot getting started for users.](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/SyncBot/syncbot-readme.md)\n\n## KeyframeBot\n\n* [KeyframeBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/KeyframeBot/keyframebot.md)\n\n## NotifyBot\n\n* [NotifyBot HowTo](https://github.com/resin-io-modules/resin-procbots/blob/master/docresources/NotifyBot/notifybot.md)\n","gitHead":"53342dc2fd607aace5d237fd3fe77edbef38579f","scripts":{"test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts'","build":"gulp build","start":"node ./bin/procbots -b ${PROCBOT_BOTS_TO_LOAD}","full-test":"nyc mocha -r ts-node/register 'tests/**/*.spec.ts' 'tests/**/*.e2e.ts'"},"_npmUser":{"name":"balena.io","email":"accounts+npm@balena.io"},"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"_npmVersion":"6.14.5","description":"Process robots for automating CI pipelines","directories":{},"_nodeVersion":"12.18.1","dependencies":{"hmac":"^1.0.1","temp":"^0.8.3","rmdir":"^1.2.0","colors":"^1.1.2","github":"9.2.0","lodash":"^4.17.2","marked":"^0.3.12","mkdirp":"^0.5.1","moment":"^2.18.1","express":"^4.0.34","js-yaml":"^3.8.1","keyfctl":"git://github.com/resin-io-modules/keyfctl.git#linter","request":"^2.79.0","bluebird":"^3.5.0","flowdock":"github:balena-io-playground/node-flowdock#emit-error-response","front-sdk":"^0.6.0","resin-sdk":"^6.4.1","versionist":"^2.13.0","body-parser":"^1.17.1","node-getopt":"^0.2.3","typed-error":"^1.0.1","jsonwebtoken":"^7.2.1","resin-semver":"^1.4.0","html-entities":"^1.2.1","request-promise":"^4.1.1","serialize-error":"^8.1.0","emailreplyparser":"0.0.5","github-webhook-handler":"^0.6.0"},"preferGlobal":true,"_hasShrinkwrap":true,"readmeFilename":"README.md","devDependencies":{"nyc":"^11.3.0","chai":"^4.1.2","gulp":"^3.9.1","jsdoc":"^3.4.3","mocha":"^4.0.1","tslint":"^4.5.1","ts-node":"^3.3.0","typedoc":"^0.7.1","gulp-util":"^3.0.8","typescript":"~2.9.2","@types/chai":"^4.0.5","@types/node":"^6.0.48","gulp-tslint":"^7.1.0","@types/mocha":"^2.2.44","@types/github":"^0.0.0","@types/lodash":"^4.14.54","@types/express":"^4.0.34","@types/js-yaml":"^3.5.29","@types/request":"^2.0.0","gulp-sourcemaps":"^2.4.1","gulp-typescript":"^3.1.5","chai-as-promised":"^7.1.1","@types/jwt-decode":"^2.2.1","@types/body-parser":"0.0.33","@types/node-getopt":"^0.2.29","@types/jsonwebtoken":"^7.2.0","@types/html-entities":"^1.2.16","@types/bluebird-global":"^3.0.1","@types/request-promise":"^4.1.36","@types/chai-as-promised":"^7.1.0"},"_npmOperationalInternal":{"tmp":"tmp/resin-procbots_3.21.20-improve-error-logging-53342dc2fd607aace5d237fd3fe77edbef38579f_1623928564900_0.40199793787773674","host":"s3://npm-registry-packages"},"deprecated":"Deprecated: no longer maintained. The GitHub repository has been archived and no further releases will be published."}},"time":{"created":"2018-09-17T15:53:22.887Z","modified":"2026-01-29T12:26:08.264Z","3.18.14-599-contact-request-fix-db7cc61129e3b1adaf3375bd67e9354102e231bb":"2018-09-17T15:53:23.277Z","3.18.15-599-contact-request-fix-8dfba737135f749dd00bc165e88413e50d792b91":"2018-09-17T16:22:38.593Z","3.18.15":"2018-09-17T16:24:41.892Z","3.18.16-601-resin-semver-f6df56fcaf6d29c20bfd57178eb59829661c5d0b":"2018-09-18T13:52:46.360Z","3.18.16-598-document-chatops-33d9440bdeb6b664c27e6f28301682c0f16fab2a":"2018-09-19T10:20:10.498Z","3.18.16-585-new-line-parsing-8ebef7dbb0441366bfacde41ec0fbecb4adbe255":"2018-09-24T10:36:08.561Z","3.18.16-606-remove-summary-keywords-4fea61b4032bbd5d63efdd249a048e0ebf3105bb":"2018-09-25T13:40:22.646Z","3.18.16-608-resin-ci-5f85862ae9a9bacb2141ab68ade30ef3e49ebe91":"2018-09-26T09:12:01.989Z","3.18.16-608-resin-ci-b778de731b261c21d9e537b83221182658fbda44":"2018-09-26T09:33:33.159Z","3.18.16":"2018-09-26T10:07:16.532Z","3.18.16-606-remove-summary-keywords-118392dd58eb7320016c0f2433d08c88ff250f80":"2018-09-26T10:16:44.882Z","3.18.17-606-remove-summary-keywords-fe9a85a79334b60d3767be8d56fee8337a25f2df":"2018-09-26T10:26:24.146Z","3.18.17":"2018-09-26T10:34:43.391Z","3.18.18-585-new-line-parsing-d134c5647bed5873ed45928f5efcc5a435991662":"2018-09-26T10:42:01.238Z","3.18.18-598-document-chatops-576481360d328172a93775a56dcc46a55b5f36d2":"2018-09-26T10:46:47.441Z","3.18.18":"2018-09-26T10:50:31.831Z","3.18.19-598-document-chatops-3cee26d44007e43b7db87ea3253ad1a28fede6f1":"2018-09-26T10:58:08.882Z","3.18.19":"2018-09-26T11:03:13.912Z","3.18.20-610-off-board-sqweelygig-7f4702a012c88db81600e41b73beb5913aabaa1a":"2018-09-27T10:46:29.747Z","3.18.20":"2018-09-27T12:16:06.303Z","3.18.21-pdcastro-resin-semver-1.4.0-f3c456aa0bc06fa4a6ab9e2bf5af0b3ece927d32":"2018-10-23T16:05:36.513Z","3.19.0-forums-namechange-3e6cee20eb0bf6fda90b34a69da42a7ac00fa167":"2018-10-24T16:45:14.798Z","3.18.21-rename-baseUrl-b1696191dc2453a71717c03e56280e5b6cb2b7d9":"2018-10-24T17:24:08.882Z","3.18.21-rename-baseUrl-91e4c100e3d8a0c9be23a0e2932c5b083340cadc":"2018-10-24T17:37:28.560Z","3.18.21":"2018-10-24T17:45:33.974Z","3.18.22-pdcastro-resin-semver-1.4.0-cde7e7395331b00f31b6d54ae56404282b9f1698":"2018-10-24T21:00:04.788Z","3.18.22":"2018-10-24T21:06:30.086Z","3.18.23-fix-flowdock-hashtag-event-types-487ec56ebcf26adc0e97fdb3dc063d9ebf335568":"2018-11-15T15:56:37.528Z","3.18.23-undefined-error-messages-f40d1efd76e3e58b8dc64a36ecd3ace2ba218184":"2018-11-15T16:21:52.120Z","3.18.23-correctly-interpret-error-messages-4a8b3db38f7636f1020430cbe08e5d6a6b8626c9":"2018-11-15T17:37:08.204Z","3.18.23":"2018-11-18T16:18:47.785Z","3.18.23-bug-fixing-66523bda99a51c645f887be49290d2770638f0ca":"2018-11-19T11:33:57.428Z","3.18.23-bug-fixing-e5200f2f4abc96b8da421e3e6ec8dbf51f7ca2ea":"2018-11-19T11:56:29.111Z","3.18.23-bug-fixing-f82d6707222164952b9fc81593c9492ee21cea4f":"2018-11-19T12:25:19.172Z","3.18.24-bug-fixing-34e72eaaacc3b9b4f197b40f5f17d42fd1117d98":"2018-11-19T13:19:30.711Z","3.18.24":"2018-11-19T14:56:32.578Z","3.18.25-sync-new-flows-a4f619243b1f332723c2b20a7474019a05f079be":"2018-11-26T14:38:42.709Z","3.18.25":"2018-11-27T13:17:57.411Z","3.18.26-fix-payloadtoolarge-errors-eff7965b429803720d3bc856dadb7f9ea06f399a":"2018-12-02T13:32:22.939Z","3.18.26":"2018-12-03T11:30:28.691Z","3.18.27-flowdock-errors-debug-3fa6959b05654ca567a327367b0d789939b29e79":"2018-12-06T18:55:11.270Z","3.18.27":"2018-12-06T20:19:43.018Z","3.18.28-vendor-flowdock-fork-bcccb87ce59490ef38407a5a040fb7a6bf1343bb":"2018-12-10T15:56:30.777Z","3.18.28-vendor-flowdock-fork-b53e36a85a2605ba04076d1ba49fcc013e052e62":"2018-12-10T16:01:00.518Z","3.18.28":"2018-12-10T16:54:59.719Z","3.18.29-630-manage-devops-users-7dfbfb132536d06570af7af30ec59d337139047d":"2018-12-11T07:35:34.649Z","3.18.29-630-manage-devops-users-27d410f23f611824de94e2e85d99588fae2674d0":"2018-12-11T07:51:38.878Z","3.18.29":"2018-12-11T07:55:09.503Z","3.19.0-add-hello-inbox-0b3993070c395d391ebbe5edf3045da8147818ad":"2018-12-17T17:06:52.903Z","3.19.0":"2018-12-17T17:13:36.887Z","3.19.1-bug-fixes-8e182d2146ff0f182cc0c794432bd3d8593be640":"2018-12-18T12:14:42.536Z","3.19.1":"2018-12-18T12:25:02.658Z","3.19.2":"2018-12-18T15:17:52.461Z","3.19.2-enable-inbox-channels-32bf56a4a0f77940172948e41087a2aded3eace4":"2018-12-18T15:20:32.202Z","3.19.3-fix-hello-inbox-886457ae93c81ef95b27d6882371aad9b17d8528":"2018-12-18T17:03:26.815Z","3.19.3":"2018-12-18T17:08:53.520Z","3.20.0-sync-balenaos-e1c3d9fdbea8d4162168e17ac4a86f41d6835f4e":"2019-02-18T16:22:59.496Z","3.20.0-sync-balenaos-f75e5fcfd7f74f62c7e988e1590ee79faf4a0b37":"2019-02-18T16:49:41.135Z","3.20.0-sync-balenaos-1bcfbd0e9ccbbfc3ba4ab1e41e8de6a43375ca6b":"2019-02-19T10:50:56.704Z","3.20.0-sync-balenaos-8717d99302efb1895ca7781c50c4b6724a1788d1":"2019-02-19T11:02:45.021Z","3.20.0-sync-balenaos-bec5f04ce3519825a5c7e0c02d55cc15147a6af7":"2019-02-19T11:38:32.514Z","3.20.0-sync-balenaos-47b4a543bf6513bbd3fe1af2bb43e160c912b9c0":"2019-02-19T11:44:28.108Z","3.20.0-sync-balenaos-7fbfbe606b14bd35d8c391273a6cd886adf8b636":"2019-02-19T11:58:57.971Z","3.20.0-sync-balenaos-d835e931d87e28fe3099c7d63150b97d2cccd148":"2019-02-19T12:35:18.378Z","3.20.0-sync-balenaos-03da2b21300008f9576cca9b3e6c99198cad8bdf":"2019-02-19T12:42:30.045Z","3.20.0-sync-balenaos-898d05919f5249fa35fcc0f332f2388f96f8ca6a":"2019-02-19T13:03:49.582Z","3.20.0-sync-balenaos-4d358e1f89d79f5af06a115c8f63d6647061de9b":"2019-02-19T13:12:25.540Z","3.20.0":"2019-02-19T13:20:05.671Z","3.20.1-ci-enable-publish-52af863ee03182acb30bb51506cc3d3f2aaa49c1":"2019-02-19T14:15:40.000Z","3.20.1":"2019-02-19T14:29:26.040Z","3.20.2-ci-enable-publish-c1582ce82152eba3b6d11557822b164dc3b91b20":"2019-02-19T14:42:30.653Z","3.20.2":"2019-02-19T14:46:05.786Z","3.21.0-revert-circle-cfb873402466dfb2482132fdce71e6a378ebd811":"2019-02-19T15:40:06.423Z","3.21.0-revert-circle-6499a1727c6c407fb099ee7460fa911bcb936c73":"2019-02-19T15:57:39.447Z","3.21.0":"2019-02-19T16:03:12.587Z","3.21.1-balenaos-disable-front-flowdock-sync-bdce384a799a4325c98f7d87473fb9d77f200ee8":"2019-02-24T18:14:07.666Z","3.21.1-fix-build-process-7c2264172d178fc2321c8112bec97f6ddacb04f0":"2019-02-24T18:14:57.830Z","3.21.1":"2019-02-24T19:04:58.758Z","3.21.2-balenaos-disable-front-flowdock-sync-178b4026bb633ddf123aad70895e03239eb9dd1c":"2019-02-24T19:48:34.511Z","3.21.2-balenaos-disable-front-flowdock-sync-ca04ae18a91cdf6b0883cc24559f2567a6d9c2b9":"2019-02-25T10:45:48.273Z","3.21.2-balenaos-disable-front-flowdock-sync-9676ca0589469f5116ff22d247042f08992dfa7c":"2019-02-25T11:25:12.999Z","3.21.2-balenaos-disable-front-flowdock-sync-5fdea8448c39e030595db297def5e91398b27ec4":"2019-02-25T11:58:19.607Z","3.21.2":"2019-02-25T12:05:02.894Z","3.21.3-enable-balenaetcher-sync-bd23be5dfc08e3243433d774b1baf7904823b256":"2019-02-26T10:55:55.705Z","3.21.3-enable-balenaetcher-sync-12b2dc18a9f7898f2b6fa22d81afffcb9cbcebda":"2019-02-26T11:25:40.730Z","3.21.3":"2019-02-26T13:48:18.495Z","3.21.4-hide-discourse-edits-bd695be1d71d78503f64ebe0c297e3f15768ed3b":"2019-02-26T13:59:58.882Z","3.21.4-hide-discourse-edits-fd29d36c06aabf601b6992f5cf537a0538eb9949":"2019-02-27T16:13:30.402Z","3.21.4":"2019-02-27T16:37:15.267Z","3.21.5-intercomhack-fix-ac5766f3469daad808cbfd2ea535a77f8a9100d4":"2019-02-28T13:40:18.057Z","3.21.5-intercomhack-fix-41980fa96b154f4da428edca32bfd6fc9f445271":"2019-02-28T13:49:20.364Z","3.21.5-intercomhack-fix-43e8ad5f35b9be5357335e54f51aa4a70b011e37":"2019-03-03T09:43:30.588Z","3.21.5-intercomhack-fix-aae0a779b4d2a4d7b6669742c60fc3e72f3be472":"2019-03-03T10:42:44.416Z","3.21.5":"2019-03-03T10:59:29.638Z","3.21.5-fix-lost-fd-front-messages-0583cfbea467ac21dee86b9d44731564db8e8efc":"2019-03-04T10:54:16.767Z","3.21.5-fix-lost-fd-front-messages-e37475b137980107ffdbc0c9ae4a9e49f93bdc1b":"2019-03-04T11:39:58.199Z","3.21.6-fix-lost-fd-front-messages-e6c03fe9209e2ca2e1efeb0cb41f58704bed21af":"2019-03-04T11:59:08.567Z","3.21.6":"2019-03-04T12:03:57.942Z","3.21.7-update-front-sdk-64c1ca98bb0e473774e6bcadc0e65a4f6c08aa79":"2019-04-03T15:17:02.185Z","3.21.7":"2019-04-03T15:25:31.224Z","3.21.8-debug-front-thread-create-80fc56a14f6fbab0357e7865b8c5d117af54d032":"2019-04-07T14:07:13.095Z","3.21.8-debug-front-thread-create-4f6eef130bfbc55c6fa0e3bfcf33be2a64c93997":"2019-04-07T14:19:35.946Z","3.21.8-stop-front-forums-syncing-841203056085f165e7dcfeb263f0c0577832994b":"2019-04-16T14:19:01.877Z","3.21.8":"2019-04-16T15:35:32.456Z","3.21.9-disable-discourse-integration-f936e66d7858ccaedda083b969701d3e298ed350":"2019-05-22T12:24:06.121Z","3.21.9":"2019-05-22T12:41:12.294Z","3.21.10-stop-syncing-support-meta-64ff0363923c2a3555a1c417bfcdd68fd5accafd":"2020-02-13T09:29:58.388Z","3.21.10":"2020-02-13T11:48:47.326Z","3.21.11-remove-constructors-fe64282c77368af71c206b9686b8e23790aaee5d":"2020-04-21T11:04:54.948Z","3.21.11":"2020-04-21T17:50:00.558Z","3.21.12-change-prod-config-62b25ddd4639c41ca8391ba458903e5af84fe5bc":"2020-04-29T17:04:36.286Z","3.21.12-change-prod-config-429763082d33d75425f68b2491c75126ff59f3a5":"2020-04-30T10:38:53.610Z","3.21.12":"2020-04-30T10:50:13.119Z","3.21.13-prod-config-changes-e8bc45059bc60e47191d933cfaf8968cfbdeffd9":"2020-05-04T18:59:28.755Z","3.21.13-prod-config-changes-3bab450ca56e5b5ceca2aa7d79856eb670ee3647":"2020-05-04T20:21:17.553Z","3.21.13":"2020-05-04T20:28:29.289Z","3.21.14-prod-cfg-addition-7c1a5f15722719953a2a6a593776427ccd047aa4":"2020-06-11T13:37:47.898Z","3.21.14":"2020-06-11T14:02:24.565Z","3.21.15-feedback-channel-26d4b3d17ee4a1d498d8b1b4194ae5e197d90ba9":"2020-06-17T13:41:06.554Z","3.21.15":"2020-06-17T14:02:07.843Z","3.21.16-distribution-channel-40c6190155d65262ea77048528e445a3feae8227":"2020-07-22T08:02:17.372Z","3.21.16":"2020-07-22T08:05:51.807Z","3.21.17-change-dist-flow-a82590444c756f8463cf1bbecfbb8002b101b8be":"2020-07-29T09:56:26.697Z","3.21.17":"2020-07-29T09:59:40.802Z","3.21.18-stop-paid-support-syncing-4d10aee8b0d4f76afd3cc1b28de989efee51ad22":"2020-08-12T16:04:04.408Z","3.21.18":"2020-08-12T17:04:09.256Z","3.21.19-fix-sync-64805b86547895ae886a0310fbc5c80ae0e64c2a":"2020-12-09T16:29:29.184Z","3.21.19-fix-sync-1eb9bc14c66fd9014e09aca36a805e9e1a590f6e":"2020-12-09T16:39:32.253Z","3.21.19":"2020-12-09T16:47:04.203Z","3.21.20-improve-error-logging-53342dc2fd607aace5d237fd3fe77edbef38579f":"2021-06-17T11:16:05.115Z"},"bugs":{"url":"https://github.com/resin-io-modules/resin-procbots/issues"},"author":{"name":"Heds Simons","email":"hedley@resin.io"},"license":"Apache-2.0","homepage":"https://github.com/resin-io-modules/resin-procbots#readme","keywords":["resin","process"],"repository":{"url":"git+https://github.com/resin-io-modules/resin-procbots.git","type":"git"},"description":"Process robots for automating CI pipelines","contributors":[{"name":"Andrew Lucas","email":"andrewl@resin.io"}],"maintainers":[{"name":"balena.io","email":"accounts+npm@balena.io"}],"readme":"","readmeFilename":""}