slack-webhooks-handler
Version:
Manage incoming webhooks to send messages to Slack
83 lines (68 loc) • 1.78 kB
Markdown
# HapiJS
You can create a sort of _**Slack Service**_ that exposes the webhook handler. You don't need to do it exactly like this. This is just for reference.
## Service
```javascript
// service.js
import { Dispatcher, factory } from 'slack-webhooks-handler';
export default class SlackService {
constructor(options) {
this.dispatcher = new Dispatcher(options);
}
async send() {
return await this.dispatcher.send();
}
eventFrom(type, ...params) {
const webhook = factory(type);
const { attachments } = webhook(...params);
this.dispatcher.withAttachments(attachments);
return this;
}
}
```
## Plugin
```javascript
// slackPlugin.js
import SlackService from './service';
const name = 'slack-service';
export default {
name,
register: async(server, options) => {
const service = new SlackService(options);
server.decorate('server', 'slackService', service);
}
};
```
## Register Plugin
```javascript
import slackPlugin from '/path/to/slackPlugin';
await server.register([
// more plugins...
{
plugin: slackPlugin,
options
}
]);
```
## Use in a handler
```javascript
import Boom from 'boom';
server.route({
method: 'POST',
path: `/webhooks/{type}`,
options: {
description: 'Webhooks Trigger',
handler: async(request) {
try {
const { headers, params, payload } = request;
const { slackService } = request.server;
return await slackService
.eventFrom(params.type, headers, payload)
.send();
}
catch (error) {
return Boom.badRequest(error);
}
}
}
});
```