Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/johnagan/slack-devkit

A Slack developer kit to make building distributed Slack Apps easy.
https://github.com/johnagan/slack-devkit

express lambda middleware sdk serverless slack

Last synced: about 1 month ago
JSON representation

A Slack developer kit to make building distributed Slack Apps easy.

Awesome Lists containing this project

README

        

![](https://cl.ly/3V2e321C0D00/logo-black.png)

# Slack DevKit

Slack DevKit is a light-weight developer kit to build [Slack Apps](https://api.slack.com/slack-apps) in node.js **super fast**. No previous knowledge about building Slack Apps or Bots needed! Plus, automatic support for verifying requests from Slack and responding to validations.

This was made to build Slack Apps on [Glitch](https://glitch.com) even faster, but it works everywhere!

Learn more on [SlackDevKit.com](https://slackdevkit.com)

## Overview

### Features

- OAuth support without 3rd-party database
- Supports Single Channel Installations
- Verifies request signatures and/or verification tokens
- Support for short-lived tokens with automatic refresh
- Automatic retrieval of workspace's authentication info
- Auto-parsing of string-encoded JSON payloads
- Authenticated HTTP client for Slack's API
- Writeable datastore associated to the workspace

### What's Included

- [App](./src/core/app.js) - The Slack App
- [Request](./src/core/request.js) - The request made from Slack
- [Client](./src/core/client.js) - Minimal HTTPS client (to call other APIs)
- [Payload](./src/core/payload.js) - Wrapper for Slack payloads (to standardize attributes)
- [Router](./src/server/router.js) - An [Express.js](https://expressjs.com/) router (middleware)
- [Express](./src/server/express.js) - An [Express.js](https://expressjs.com/) instance with the router attached
- [Lambda](./src/server/lambda.js) - An [AWS Lambda](https://aws.amazon.com/lambda/) AWS Lambda handler
- [FileStore](./src/datastore/filestore.js) - File-based storage to save workspace information
- [DynamoDB](./src/datastore/dynamodb.js) - DynamoDB storage to save workspace information

### Examples

| File | Description |
| ------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| [features.js](./examples/features.js) | Examples of some common Slack App features |
| [internal-integration.js](./examples/internal-integration.js) | Example configuration of an [internal integrations](https://api.slack.com/slack-apps#internal_integrations) |
| [storing-data.js](./examples/storing-data.js) | Example of storing and retrieving data from the datastore |
| [express.js](./examples/express.js) | Example of adding Slack DevKit to an exiting [Express.js](https://expressjs.com/) server |
| [lambda.js](./examples/lambda.js) | Using Slack DevKit with AWS Lambda and DynamoDB |

## Getting Started

### Install

```
npm i slack-devkit
```

### Usage

```javascript
const Slack = require('slack-devkit');

// Configure express with the Slack App settings
const { server } = new Slack({
scope: 'chat:write,bot',
client_id: '1212313.1231231231231',
client_secret: '12312312323123123',
signing_secret: 'sdfsadfsadfasdfas',
redirect_uri: 'https://myserver.com', // optional
datastore: '.data/workspaces' // optional
});

// All GET routes redirect to the “Add to Slack” OAuth flow
server.get('/', (req, res) => {
req.slack.data; // the authenticated workspace info
res.send();
});

// All POST routes expect Slack callback events
// and verify against the verification token
server.post('/', (req, res) => {
const user = req.slack.user_id;
req.slack.api('users.info', { user }).then(r => {
r.data; // the results of 'users.info' API request
});
res.send();
});

// Start the webserver on port 3000
server.start(3000);
```

### Configuration

The configuration options used for the constructor

| Name | Type | Description |
| -------------------- | -------- | ---------------------------------------------------------------------------------------------------------------- |
| `scope` | Required | [Slack OAuth scopes](https://api.slack.com/docs/oauth#step_1_-_sending_users_to_authorize_and_or_install) |
| `client_id` | Required | [Slack OAuth client id](https://api.slack.com/docs/oauth#step_1_-_sending_users_to_authorize_and_or_install) |
| `client_secret` | Required | [Slack OAuth client secret](https://api.slack.com/docs/oauth#step_1_-_sending_users_to_authorize_and_or_install) |
| `redirect_uri` | Optional | [Slack OAuth redirect uri](https://api.slack.com/docs/oauth#step_1_-_sending_users_to_authorize_and_or_install) |
| `signing_secret` | Optional | [Slack signing secret](https://api.slack.com/docs/verifying-requests-from-slack#about) |
| `verification_token` | Optional | [Slack verification token](https://api.slack.com/events-api#url_verification) |
| `access_token` | Optional | Access token for [internal integrations](https://api.slack.com/slack-apps#internal_integrations) |
| `slack_root` | Optional | Root domain to use for Slack requests |
| `datastore` | Optional | File path to write to or a DataStore object |