7.0.0 • Published 10 months ago
hookido v7.0.0
hookido
Hapi plugin for handling AWS SNS http(s) subscriptions aka webhooks
Installation
This module is installed via npm:
$ npm install hookidoOptions
skipPayloadValidation- Skip Signature validation on SNS message, defaultfalseaws- AWS config passed to new AWS.SNS()route: Hapi route configuration overriding any defaults. Useful for settingpathandauth.topic- Used for automatically setting attributes or subscribing on startuparn- SNS topic arn requiredattributes- Topic attributes, Object, key:valuesubscribe- Automatically subscribe if subscription does not exitendpoint- requiredprotocol-HTTPorHTTPSrequiredattributesObject, key:value, Set subscription attributes, only used if the plugin handles the subscription confirmation and subscription does not exist'
handlerssubscriptionconfirmation-Function(req, h, payload)If omitted the plugin will handle the subscription confirmation messages -notification-Function(req, h, payload)required
Examples
If you already have subscription setup on SNS for your server
const Hapi = require('hapi');
const server = new Hapi.Server();
await server.register({
plugin: require('hookido'),
options: {
aws: {
region: 'eu-west-1',
accessKeyId: 'a',
secretAccessKey: 'a'
},
route: {
path: '/path/used/in/subscription'
},
handlers: {
notification: (req, h, payload) => {
console.log('Got notification from SNS', payload);
return 'Ok'
}
}
}
});
await server.start();
console.log('Server running and accepting SNS notifications');Register subscription and set custom topic and subscription attributes on startup
const Hapi = require('hapi');
const server = new Hapi.Server();
await server.register({
plugin: require('hookido'),
options: {
topic: {
arn: 'arn:to:mytopic',
attributes: {
HTTPSuccessFeedbackRoleArn: 'arn:aws:iam::xxxx:role/myRole',
HTTPSuccessFeedbackSampleRate: '100'
},
subscribe: {
protocol: 'HTTP',
endpoint: 'http://myserver.com/hookido',
attributes: {
DeliveryPolicy: '{"healthyRetryPolicy":{"numRetries":5}}'
}
}
},
aws: {
region: 'eu-west-1',
accessKeyId: 'a',
secretAccessKey: 'a'
},
handlers: {
notification: (req, h, payload) => {
console.log('Got notification from SNS', payload);
return 'Ok'
}
}
}
});
await server.start();
console.log('Server running and accepting SNS notifications');Configuring multiple SNS topics
const Hapi = require('hapi');
const server = new Hapi.Server();
await server.register({
plugin: require('hookido'),
options: [{
topic: {
arn: 'arn:to:mytopic'
},
aws: {
region: 'eu-west-1',
accessKeyId: 'a',
secretAccessKey: 'a'
},
route: {
path: '/path/used/in/subscription'
},
handlers: {
notification: (req, h, payload) => {
console.log('Got notification from SNS', payload);
return 'Ok';
}
}
}, {
topic: {
arn: 'arn:to:mytopic2'
},
aws: {
region: 'eu-central-1',
accessKeyId: 'b',
secretAccessKey: 'b'
},
route: {
path: '/second/path'
},
handlers: {
notification: (req, h, payload) => {
console.log('Got notification from SNS', payload);
return 'Ok';
}
}
}]
});
await server.start;
console.log('Server running and accepting SNS notifications');