hookido
v7.0.0
Published
Hapi plugin for handling AWS SNS http(s) subscriptions aka webhooks
Readme
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 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');
