# Autohook 🎣 Autohook configures and manages [Twitter webhooks](https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/guides/managing-webhooks-and-subscriptions) for you. Zero configuration. Just run and go! ![Demo](https://github.com/twitterdev/autohook/raw/master/demo.gif) * 🚀 Spawns a server for you * ⚙️ Registers a webhook (it removes existing webhooks if you want, and you can add more than one webhook if your Premium subscription supports it) * ✅ Performs the CRC validation when needed * 📝 Subscribes to your current user's context (you can always subscribe more users if you need) * 🎧 Exposes a listener so you can pick up Account Activity events and process the ones you care about ## Usage You can use Autohook as a module or as a command-line tool. ### Node.js module ```js const { Autohook } = require('twitter-autohook'); (async ƛ => { const webhook = new Autohook(); // Removes existing webhooks await webhook.removeWebhooks(); // Listens to incoming activity webhook.on('event', event => console.log('Something happened:', event)); // Starts a server and adds a new webhook await webhook.start(); // Subscribes to a user's activity await webhook.subscribe({oauth_token, oauth_token_secret}); })(); ``` ### Command line Starting Autohook from the command line is useful when you need to test your connection and subscriptions. When started from the command line, Autohook simply provisions a webhook, subscribes your user (unless you specify `--do-not-subscribe-me`), and echoes incoming events to `stdout`. ```bash # Starts a server, removes any existing webhook, adds a new webhook, and subscribes to the authenticating user's activity. $ autohook -rs # All the options $ autohook --help ``` ## OAuth Autohook works only when you pass your OAuth credentials. You won't have to figure out OAuth by yourself – Autohook will work that out for you. You can pass your OAuth credentials in a bunch of ways. ## Dotenv (~/.env.twitter) Create a file named `~/.env.twitter` (sits in your home dir) with the following variables: ```bash TWITTER_CONSUMER_KEY= # https://developer.twitter.com/en/apps ➡️ Your app ID ➡️ Details ➡️ API key TWITTER_CONSUMER_SECRET= # https://developer.twitter.com/en/apps ➡️ Your app ID ➡️ Details ➡️ API secret key TWITTER_ACCESS_TOKEN= # https://developer.twitter.com/en/apps ➡️ Your app ID ➡️ Details ➡️ Access token TWITTER_ACCESS_TOKEN_SECRET= # https://developer.twitter.com/en/apps ➡️ Your app ID ➡️ Details ➡️ Access token secret TWITTER_WEBHOOK_ENV= # https://developer.twitter.com/en/account/environments ➡️ One of 'Dev environment label' or 'Prod environment label' ``` Autohook will pick up these details automatically, so you won't have to specify anything in code or via CLI. ## Env variables Useful when you're deploying to remote servers, and can be used in conjunction with your dotenv file. ```bash # To your current environment export TWITTER_CONSUMER_KEY= # https://developer.twitter.com/en/apps ➡️ Your app ID ➡️ Details ➡️ API key export TWITTER_CONSUMER_SECRET= # https://developer.twitter.com/en/apps ➡️ Your app ID ➡️ Details ➡️ API secret key export TWITTER_ACCESS_TOKEN= # https://developer.twitter.com/en/apps ➡️ Your app ID ➡️ Details ➡️ Access token export TWITTER_ACCESS_TOKEN_SECRET= # https://developer.twitter.com/en/apps ➡️ Your app ID ➡️ Details ➡️ Access token secret export TWITTER_WEBHOOK_ENV= # https://developer.twitter.com/en/account/environments ➡️ One of 'Dev environment label' or 'Prod environment label' # To other services, e.g. Heroku heroku config:set TWITTER_CONSUMER_KEY=value TWITTER_CONSUMER_SECRET=value TWITTER_ACCESS_TOKEN=value TWITTER_ACCESS_TOKEN_SECRET=value TWITTER_WEBHOOK_ENV=value ``` ## Directly Not recommended, because you should always [secure your credentials](https://developer.twitter.com/en/docs/basics/authentication/guides/securing-keys-and-tokens.html). ### Node.js ```js new Autohook({ token: 'value', token_secret: 'value', consumer_key: 'value', consumer_secret: 'value', env: 'env', port: 1337 }); ``` ### CLI ```bash $ autohook \ --token $TWITTER_ACCESS_TOKEN \ --secret $TWITTER_ACCESS_TOKEN_SECRET \ --consumer-key $TWITTER_CONSUMER_KEY \ --consumer-secret $TWITTER_CONSUMER_SECRET \ --env $TWITTER_WEBHOOK_ENV ``` ## Install ```bash # npm $ npm i -g twitter-autohook # Yarn $ yarn global add twitter-autohook ```