{"_id":"@testlio/webhooks","_rev":"36-01748aa39dd9f1ba3c9941eb0152af59","name":"@testlio/webhooks","dist-tags":{"latest":"1.1.0"},"versions":{"1.0.0":{"name":"@testlio/webhooks","version":"1.0.0","keywords":["webhooks","events"],"author":{"name":"Testlio"},"license":"ISC","_id":"@testlio/webhooks@1.0.0","maintainers":[{"name":"kirstein","email":"mikk@kolmas.org"}],"dist":{"shasum":"dd71425fe94d06ef36f5b3efbe3d61f95c940317","tarball":"https://registry.npmjs.org/@testlio/webhooks/-/webhooks-1.0.0.tgz","integrity":"sha512-Sy55+/3ihacMEQpw1rcGpt+f+rYhYXKqguPMkz9SwkLBazjaEUw5YCpKmSffVrLNh4XRj6tiKA6+lfkTRgCU9g==","signatures":[{"sig":"MEQCIGHfECDIbJsDGoX3hP+byRg+YMZ4WtHDJm/JVWpF39eLAiBqozUbwyHqpfLZmZhbsTYwYdaFO6mZesIsVi3toBlbDQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/webhooks.js","_from":".","_shasum":"dd71425fe94d06ef36f5b3efbe3d61f95c940317","gitHead":"7d33c080b09fa24afaf909905829258c89e19ea9","scripts":{"lint":"eslint .","test":"tape 'test/*-test.js' | tap-spec"},"_npmUser":{"name":"kirstein","email":"mikk@kolmas.org"},"deprecated":"No longer supported, service behind this is being removed","repository":{"url":"github.com:Testlio/webhooks.git","type":"git"},"_npmVersion":"2.15.1","description":"Helper library for registering and triggering webhooks.","directories":{},"_nodeVersion":"4.4.4","dependencies":{"lodash":"^4.12.0","@testlio/discovered-request":"^1.0.1"},"devDependencies":{"tape":"^4.5.1","eslint":"^2.9.0","tap-spec":"^4.1.1","proxyquire":"^1.7.7","@testlio/eslint-config-services":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/webhooks-1.0.0.tgz_1464091343742_0.8918355111964047","host":"packages-16-east.internal.npmjs.com"}},"1.0.1":{"name":"@testlio/webhooks","version":"1.0.1","keywords":["webhooks","events"],"author":{"name":"Testlio"},"license":"ISC","_id":"@testlio/webhooks@1.0.1","maintainers":[{"name":"batweasel","email":"virgo@testlio.com"},{"name":"escane","email":"escane@gmail.com"},{"name":"georgetestlio","email":"george@testlio.com"},{"name":"henri","email":"henri@testlio.com"},{"name":"jekaterina","email":"jekaterina@testlio.com"},{"name":"kaarelkk","email":"kaarelkk@gmail.com"},{"name":"kaarelp","email":"kaarel.purde@testlio.com"},{"name":"kirstein","email":"mikk@kolmas.org"},{"name":"kschotter","email":"kairi@testlio.com"},{"name":"martinraag","email":"martin@testlio.com"},{"name":"martr","email":"mart@testlio.com"},{"name":"mkruustu","email":"marko@testlio.com"},{"name":"rasmus-testlio","email":"rasmus@testlio.com"},{"name":"testlio-ci","email":"martin+npmjs@testlio.com"},{"name":"valdo","email":"valdo@testlio.com"}],"dist":{"shasum":"fa7a6ffb5557056e162bc40c8ba04f1198a00a83","tarball":"https://registry.npmjs.org/@testlio/webhooks/-/webhooks-1.0.1.tgz","integrity":"sha512-CxSgDZGTZuDd+zSaoMfuA8LP2VRbg4+3xRCb91ZhrvC4Hq+k9iiSHOdreLtYp2Bdmgy+KAPv/mQRRdoZpzUXeA==","signatures":[{"sig":"MEYCIQDeKDN1H4WdtWBcA1znX5kFpyVA687fxHW1ErsUk4RwawIhAPmzFOJC7PNlGLr0aPefYD1uXM+XczPa3pGyWUsgaKL+","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/webhooks.js","_from":".","_shasum":"fa7a6ffb5557056e162bc40c8ba04f1198a00a83","gitHead":"263193f9ad7e0d115fb55e8b0cb51b78671dc466","scripts":{"lint":"eslint .","test":"tape 'test/*-test.js' | tap-spec"},"_npmUser":{"name":"kirstein","email":"mikk@kolmas.org"},"deprecated":"No longer supported, service behind this is being removed","repository":{"url":"github.com:Testlio/webhooks.git","type":"git"},"_npmVersion":"2.15.1","description":"Helper library for registering and triggering webhooks.","directories":{},"_nodeVersion":"4.4.4","dependencies":{"lodash":"^4.12.0","@testlio/discovered-request":"^1.0.1"},"devDependencies":{"tape":"^4.5.1","eslint":"^2.9.0","tap-spec":"^4.1.1","proxyquire":"^1.7.7","@testlio/eslint-config-services":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/webhooks-1.0.1.tgz_1464782219691_0.7391753536649048","host":"packages-12-west.internal.npmjs.com"}},"1.1.0":{"name":"@testlio/webhooks","version":"1.1.0","keywords":["webhooks","events"],"author":{"name":"Testlio"},"license":"ISC","_id":"@testlio/webhooks@1.1.0","maintainers":[{"name":"batweasel","email":"virgo@testlio.com"},{"name":"escane","email":"escane@gmail.com"},{"name":"georgetestlio","email":"george@testlio.com"},{"name":"henri","email":"henri@testlio.com"},{"name":"jekaterina","email":"jekaterina@testlio.com"},{"name":"kaarelkk","email":"kaarelkk@gmail.com"},{"name":"kaarelp","email":"kaarel.purde@testlio.com"},{"name":"kirstein","email":"mikk@kolmas.org"},{"name":"kschotter","email":"kairi@testlio.com"},{"name":"martinraag","email":"martin@testlio.com"},{"name":"martr","email":"mart@testlio.com"},{"name":"mkruustu","email":"marko@testlio.com"},{"name":"rasmus-testlio","email":"rasmus@testlio.com"},{"name":"testlio-ci","email":"martin+npmjs@testlio.com"},{"name":"valdo","email":"valdo@testlio.com"}],"dist":{"shasum":"0031c48722b028916f1b46eeb811fe12b8ef9cf1","tarball":"https://registry.npmjs.org/@testlio/webhooks/-/webhooks-1.1.0.tgz","integrity":"sha512-oFxLx5G0ZTgWSqXuREWJv/ze9TlO4Cusp3bfxPkvuAA6NHdld9iGcfGMfVFueVIsZaFIEAhAM0zJDneGydlHvQ==","signatures":[{"sig":"MEQCIHteIC7Nc1jLOFDLgljrZQbONMbsD8lKI0bvwi9+FqYUAiAgiGdTruRMkCDfZubFCQIFZ01D/abzkzY9yYK56Z3bWQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/webhooks.js","_from":".","_shasum":"0031c48722b028916f1b46eeb811fe12b8ef9cf1","scripts":{"lint":"eslint .","test":"tape 'test/*-test.js' | tap-spec"},"_npmUser":{"name":"testlio-ci","email":"martin+npmjs@testlio.com"},"deprecated":"No longer supported, service behind this is being removed","repository":{"url":"github.com:Testlio/webhooks.git","type":"git"},"_npmVersion":"3.6.0","description":"Helper library for registering and triggering webhooks.","directories":{},"_nodeVersion":"5.7.0","dependencies":{"lodash":"^4.12.0","@testlio/discovered-request":"^1.0.1"},"devDependencies":{"tape":"^4.5.1","eslint":"^2.9.0","tap-spec":"^4.1.1","proxyquire":"^1.7.7","@testlio/eslint-config-services":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/webhooks-1.1.0.tgz_1465540328529_0.0341423605568707","host":"packages-12-west.internal.npmjs.com"}}},"time":{"created":"2016-05-24T12:02:24.889Z","modified":"2026-08-28T14:10:54.760Z","1.0.0":"2016-05-24T12:02:24.889Z","1.0.1":"2016-06-01T11:57:02.197Z","1.1.0":"2016-06-10T06:32:10.877Z"},"author":{"name":"Testlio"},"license":"ISC","keywords":["webhooks","events"],"repository":{"url":"github.com:Testlio/webhooks.git","type":"git"},"description":"Helper library for registering and triggering webhooks.","maintainers":[{"email":"dev-services@testlio.com","name":"testlio-ci"},{"email":"hello@roope.sh","name":"roopeshvs"},{"email":"viraj.premaratne@testlio.com","name":"viraj.premaratne"}],"readme":"# webhooks\nHelper library for registering and triggering webhooks.\n\n##Installation\n```\nnpm install @testlio/webhooks\n```\n\n## Usage\n\n### Changing webhook-service location and version\nDefault values for `api` and `version` are `{ api: 'https://api.testlio.com', version: 'v1' }`.\n\n```\nconst webhooks = require('@testlio/webhooks');\n\nwebhooks.setConfig({\n    api: 'http://local.testlio.com',\n    version: 'v2',\n    authToken: 'Bearer eyJhbGciOiJIUzI1NiIsInR5c..'\n});\n```\n\n### Injecting promise dependency\nIf your environment doesn't support `new Promise` you need to define promise dependency by yourself.\n\n```\nconst webhooks = require('@testlio/webhooks');\nwebhooks.setPromisesDependency(require('Bluebird'));\n```\n\n### GetHooks\nGet one or more hooks. JWT token is required for authentication. Webhook-service is located using `@testlio/discovered-request`.\n\n```\nconst config = {\n    authToken: 'Bearer eyJhbGciOiJIUzI1NiIsInR5c..',\n    apiKey: 'bkayZOMvuy8aZOhIgxq94K9Oe7Y70Hw55'\n};\nconst webhooks = require('@testlio/webhooks');\nwebhooks.setConfig(config);\n\nconst resource = 'https://api.testlio.com/issue/v1/collection/a692eef0-f122-4953-95c8-498c63a749ff';\nconst events = ['create', 'delete'];\nwebhooks.getHooks(resource, events).then(hooks => {\n    console.log(hooks);\n}).catch(err => {\n    console.log(err);\n});\n```\n\n#### Output\n```\n{\n    \"create\": { \"href\": \"http://local.testlio:3030/hooks/9df2cb44132c5d12a9b24b8458ad238add4dea7f\" },\n    \"delete\": { \"href\": \"http://local.testlio:3030/hooks/f3d846d0d1d341caf13cb3cbb39ef303d05fb78b\" }\n}\n```\n\n### TriggerEvents\nTrigger events and receive receipts from the service. JWT token is required for authentication.\n\n```\nconst config = {\n    authToken: 'Bearer eyJhbGciOiJIUzI1NiIsInR5c..',\n    apiKey: 'bkayZOMvuy8aZOhIgxq94K9Oe7Y70Hw55'\n};\nconst webhooks = require('@testlio/webhooks');\nwebhooks.setConfig(config);\n\nconst resource = 'https://api.testlio.com/issue/v1/collection/a692eef0-f122-4953-95c8-498c63a749ff';\nconst events = ['create', 'delete'];\nconst payload = {\n    body: {...},\n    headers: {...}\n};\n\nwebhooks.triggerEvents(resource, events, payload).then(response => {\n    console.log(response);\n}).catch(err => {\n    console.log(err);\n});\n```\n\n#### Output\n```\n{\n    \"create\": {\n        \"hook\": { \"href\": \"http://local.testlio:3030/hooks/9df2cb44132c5d12a9b24b8458ad238add4dea7f\" },\n        \"receipt\": { \"href\": \"http://local.testlio:3030/events/90c26b7a-43a0-4c90-8b8e-a8ac204be0fc\" }\n    },\n    \"delete\": {\n        \"hook\": { \"href\": \"http://local.testlio:3030/hooks/f3d846d0d1d341caf13cb3cbb39ef303d05fb78b\" },\n        \"receipt\": { \"href\": \"http://local.testlio:3030/events/46dea6ed-23c1-4d43-b585-241ba573b3ac\" }\n    }\n}\n```\n\n### ValidateSignature\nHelper function for validating the signature of a received hook (the `Authorization` header). Expects as parameters all available HTTP headers from the request, the payload of the request (as a `String`) and the signing key (shared secret).\n\n```\nconst headers = {\n    Authorization: ...,\n    X-testlio-callback: ...,\n    X-testlio-timestamp: ...\n};\n\nconst payload = ...;\nconst signatureKey = ...;\n\nwebhooks.validateSignature(headers, payload, signatureKey); // Returns true if the signature that is generated matches the one that was provided\n```\n","readmeFilename":"Readme.md"}