オープンソース公開中(MIT License)
確実に届ける Webhook 中継
デスクトップアプリで起きたイベントを、スリープやオフラインのあいだも失わずに、別のマシンへ届ける Node.js 製のツールです。
構成
送信側
- 受け取りプラグイン(ネットワークに触れない)
- 保存SQLite(Outbox)
- 送信常駐プロセス(macOS LaunchAgent)
受信側
- 受け付けHTTP サーバー / SQLite(Inbox)
開発
- 実装Node.js 24(外部パッケージなし)
- CIGitHub Actions(Ubuntu / macOS)
技術的なポイント
- Outbox パターン
- イベントは保存してから受け取りを返すので、途中で止まっても失われません。
- イベントの流れごとに順序を守り、「少なくとも 1 回」届けます(at-least-once)。
- 同じイベントが重なって届いても、受信側で取り除きます。
- 黙って捨てない — スリープやオフラインから戻ったことを検知して、すぐ送り直します。キューがいっぱいになったら、捨てずに止まります。
- 改ざんの防止 — HMAC-SHA256 で署名し、タイムスタンプの許容幅と送信元も検証します。署名の鍵はキーチェーンで管理します。
- 外部パッケージなし — node:sqlite、node:crypto、node:test など、Node.js に組み込まれた機能だけで作っています。テストは 48 件で、Ubuntu と macOS の両方で実行しています。