🧞‍♀️

webhook を hono with zodで validateする

2023/03/27に公開

Environment

Hono

バージョン 3.1.0
https://hono.dev/

Zod

バージョン 3.21.4
https://zod.dev/

Validation に掲載されているサンプルコードは、HTMLのフォームタグを使ってSubmitされたデータをvalidateするコードになっています。たとえばメールフォームのようなものだと、このサンプルに沿って行うと良いでしょう。

JSON形式でPOSTされてくるwebhookを受け取ってvalidateしたい場合、 validator() メソッドの第一引数の validationTarget を変更する必要がありました。

Validation Sample for JSON Webhook

// 仮のSchema ここでvalidationルールを設定
const schema = z.object({
  event: z.string({}),
  payload: z.object({
    // ...
  }),
});
validator("json", (value:any, c:Context) => {
  const parsed = schema.safeParse(value)
  if (!parsed.success) {
    return c.text('Invalid!', 401)
  }
  return parsed.data;
}), (c:Context) => {
  const body = c.req.valid("json");
  // do something  
  c.json({"result": "ok"}, 200);
});

All of ValidationTypes

json: any;
form: Record<string, string | File>;
query: Record<string, string | string[]>;
queries: Record<string, string[]>;
param: Record<string, string>;

Discussion