Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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.
- Host: GitHub
- URL: https://github.com/johnagan/slack-devkit
- Owner: johnagan
- License: mit
- Created: 2018-08-12T06:34:01.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2022-03-31T03:07:26.000Z (over 2 years ago)
- Last Synced: 2024-11-13T17:11:49.672Z (about 1 month ago)
- Topics: express, lambda, middleware, sdk, serverless, slack
- Language: JavaScript
- Homepage: https://slackdevkit.com
- Size: 245 KB
- Stars: 30
- Watchers: 4
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
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 |