2.0.0 • Published 2 years ago
@suin/esa-webhook-router v2.0.0
@suin/esa-webhook-router
esa.io の Generic Webhookを受信し、ペイロードのkindごとにルーティングするルーター。
特徴
- 現在、以下のペイロードに対応しています。
- 記事作成時(kind: "post_create")
- 記事更新時(kind: "post_update")
- 記事アーカイブ時(kind: "post_archive")
- 記事削除時(kind: "post_delete")
- 記事復旧時(kind: "post_restore")
- リクエストボディ改ざん防止のための
X-Esa-Signatureに対応しています。
動作要件
- Node.js: 18.x 以上
インストール
yarn add @suin/esa-webhook-router
# or
npm install @suin/esa-webhook-router使い方
基本的な用法
import { createRouter } from "@suin/esa-webhook-router";
// `createRouter`には、イベントの種類ごとに実行するハンドラー関数を渡します。
const route = createRouter({
post_create: ({ event }) => console.log("投稿が作成されました。", event),
post_update: ({ event }) => console.log("投稿が更新されました。", event),
post_archive: ({ event }) =>
console.log("投稿がアーカイブされました。", event),
post_delete: ({ event }) => console.log("投稿が削除されました。", event),
});
// `createRouter`の戻り値は関数なので、それにHTTPリクエストを渡すと、ハンドラーが実行されます。
await route(request);AWS LambdaやNetlify Functionで使う
createRouterで作成した関数には、APIGatewayProxyEventを渡すことができるので、AWS LambdaやNetlify Functionでもこのライブラリを用いることができるはずです。動作確認はしてません。
X-Esa-Signatureをあつかう
esa Webhookにはリクエストボディーの署名がX-Esa-Signatureヘッダについています。この署名の検証を行うには次の方法のどれかで、シークレットを渡してください。
- 環境変数
ESA_WEBHOOK_SECRETをセットする。 createRouterのsecretオプションをセットする。
どちらも設定されている場合は、secretオプションが優先されます。
使い方をもっと学ぶ
より詳しい使い方については、usage.spec.tsをご覧ください。
動作デモ
いろいろな環境での動作デモを用意してあります。
- ローカル環境での動作デモ: ローカル環境でHTTPサーバーを起動し、esa Webhookを受け取れるようにします。グローバルのURLはCloudflare Tunnelを使って作成しますので、実際のesaチームと結合して動作させることができます。起動するには、このリポジトリを
git cloneし、yarn install && yarn tsx local/main.tsを実行してください。 - Vercel Functionsでの動作デモ: Vercel Functionsにデプロイして、esa Webhookを受け取れるようにします。実際のesaチームと結合して動作させることができます。ローカルで実行するには、このリポジトリを
git cloneし、yarn install && npx vercel devを実行してください。