@suin/esa-webhook-router
TypeScript icon, indicating that this package has built-in type declarations

2.0.0 • Public • Published

@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をセットする。
  • createRoutersecretオプションをセットする。

どちらも設定されている場合は、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を実行してください。

API リファレンス

https://suin.github.io/esa-webhook-router/

Readme

Keywords

Package Sidebar

Install

npm i @suin/esa-webhook-router

Weekly Downloads

3

Version

2.0.0

License

MIT

Unpacked Size

58.3 kB

Total Files

38

Last publish

Collaborators

  • suin