Hapi plugin for handling AWS SNS http(s) subscriptions aka webhooks
This module is installed via npm:
$ npm install hookido
skipPayloadValidation
- Skip Signature validation on SNS message, defaultfalse
aws
- AWS config passed to new AWS.SNS()route
: Hapi route configuration overriding any defaults. Useful for settingpath
andauth
.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
-HTTP
orHTTPS
requiredattributes
Object, key:value, Set subscription attributes, only used if the plugin handles the subscription confirmation and subscription does not exist'
handlers
subscriptionconfirmation
-Function(req, h, payload)
If omitted the plugin will handle the subscription confirmation messagesnotification
-Function(req, h, payload)
required
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');