🦕

APubHook(Webhook的に ActivityPub に投稿する実装)をforkしてDeno版 APubHookD を作った

2023/09/12に公開

APubHook とは、castaneaiさんが作成された ActivityPub の実装です。
参考: Webhook的に ActivityPub に投稿する実装を作った
Webhook を通じて ActivityPub に投稿できるため、IFTTT などと連携させて Bot を作るのに便利です。

APubHook は Cloudflare Workers と Cloudflare D1 で動作するのですが、これを fork して Deno に置き換え、Deno Deploy と Deno KV で動作するようにしました。

https://github.com/y-moriya/apubhookd

最後の D は Deno の D です(安直……)。
リポジトリを clone して Deno Deploy に Project を用意してデプロイすれば、APubHook と同様に Webhook 的に動作します。

Deno への置換

npm パッケージの置換

Deno でも npm パッケージは動作しますが、APubHook が依存しているライブラリは Hono と Zod 程度のため、これらを Deno 版に置き換えました。deps.ts にまとめています。

D1 -> KV

APubHook では Cloudflare D1 に対して直接 SQL で操作しているのですが、Deno KV はキーバリューストアのため、そのまま移植はできません。ここでは kvdex という ORM ライクなラッパーを使いました。
db.ts で実装していますが、一部のリレーションが実現できてないと思うので、若干怪しめです(一応フォローやポストができているのは確認している)。

また、アカウントの追加についても APubHook では SQL を流していましたが、APubHookD ではアカウント追加用のエンドポイントを実装しています。URL は公開したくないため、環境変数で UUID を設定するようにしています api.ts

デプロイ

Deno Deploy では deployctl を使ってデプロイできます。Webのコンソールからプロジェクトを作成するなどの事前作業が必要です。

その他

置換作業は思ったより簡単でした。特に何か目的があって Deno に置き換えたわけではないのですが、kvdex のようなライブラリにも出会えたので少しは Deno 力が上がったような気がします。
Deno KV についてはまだ Beta ですが、上手く使えばいろんなことができそうですね。

Discussion