hookido
v7.0.0
Published
Hapi plugin for handling AWS SNS http(s) subscriptions aka webhooks
Downloads
10,463
Readme
hookido
Hapi plugin for handling AWS SNS http(s) subscriptions aka webhooks
Installation
This module is installed via npm:
$ npm install hookido
Options
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
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');