インストール
必要環境: Node.js 18+、Express 4+
クイックスタート
自分のウォレット(手数料0%)
マネージド(ノード不要)
l402(options) — ミドルウェア
ルートに L402 支払いを強制する Express RequestHandler を返します。
オプション
402 レスポンスボディ
WWW-Authenticate ヘッダー
プロバイダー
AlbyProvider — ソブリンモードに推奨
Alby — セルフカストディアルウォレット。鍵はあなたが管理します。
BTCPayProvider — セルフホスト、ゼロトラスト
自分の BTCPay Server を運用。完全な主権を持てます。
BlinkProvider — カストディアル、最も簡単な始め方
Blink — 無料、少額なら KYC 不要。
LNbitsProvider
セルフホストまたは legend.lnbits.com。
OpenNodeProvider
ManagedProvider — クラウドモード(手数料0.3%)
l402kit.com が Lightning ノードをホスト。各支払いの99.7%を受け取れます。明示的なオプトインが必要です。
登録は起動時に一度だけ実行されます(ファイア・アンド・フォーゲット、エラーはサイレント)。API は l402kit.com/apis.json に掲載され、エージェントが自動的に発見できるようになります。
リプレイ防止
デフォルト — インメモリ(開発環境)
組み込み済み。再起動でリセットされます。シングルプロセスのデプロイに適しています。
Redis(本番環境 — マルチインスタンス)
RedisReplayAdapter は SET key 1 NX EX ttl を使用 — アトミックでレースコンディションがありません。
支払い Webhook
各支払い後に署名付きイベントを受け取ります。
Webhook ペイロード:
onPayment コールバック
検証済みの支払いごとに next() の前に呼び出される同期フック:
Supabase 支払いログ
環境変数に SUPABASE_URL と SUPABASE_ANON_KEY を設定すると、支払いが自動的にログに記録されます。
payments テーブルスキーマ (payments):
payment_hash には SHA256(preimage) が格納されており、生の preimage は格納されません。preimage は32バイトの Lightning 支払いシークレットですが、そのハッシュは BOLT11 インボイスにすでに公開されています。
スタンドアロンユーティリティ
検証タイミング
トークン検証はメモリ内で SHA256(preimage) == paymentHash を実行します — サブミリ秒、ホットパスでのネットワーク呼び出しなし。
インメモリの ReplayAdapter(デフォルト)も同期的に実行されます。RedisReplayAdapter を使用する場合、リクエストごとに 5〜50 ms の Redis ラウンドトリップが加わります。高頻度エンドポイントに対してはキャパシティを適切に計画してください。
x402 互換性(X-Payment ヘッダー)
このミドルウェアは、標準の Authorization: L402 … ヘッダーに加えて、Coinbase の x402 protocol で使用される X-Payment ヘッダーも透過的に受け入れます。両方とも同一に扱われます — どちらのプロトコルを話すクライアントにも対応したい場合に便利です。
設定は不要です。常に有効になっています。
マイグレーションガイド
v1.1 → v1.2
payments テーブルのカラム名を変更してください: