在 Cloudflare Workers 免費方案上,30 分鐘搭一個無需註冊的 Nostr 工具
在 Cloudflare Workers 免費方案上,30 分鐘搭一個無需註冊的 Nostr 工具
最近做了一個小東西:cesf-7d-tipjar,貼上 npub 或 hex pubkey 就能拿到對應的 kind:0 metadata。沒有註冊、沒有追蹤、原始碼公開。把過程、踩到的坑、邊界條件記下來,給想做類似工具的人省一些時間。
這個小工具能做什麼
把 npub 丟進去,回傳整理過的 profile:lud16(給 Lightning 打賞)、nip05、display_name、relay 列表。需要快速確認某人「能不能收 zap」「他現在用哪些 relay」時,比開完整 Nostr client 快很多。
技術棧(極簡)
- TypeScript Worker,一個檔案約 175 行
- compatibility_date = 2025-10-01、nodejs_compat
- wrangler deploy 一條指令就上線
- 不需要資料庫、build pipeline、auth 層
最有趣的是:Worker 邊緣節點上的 WebSocket 是瀏覽器標準 API(不是 Node 的 ws),所以連 relay 訂閱事件這段,完全不需要引入 nostr-tools——直接 new WebSocket(url) 加 addEventListener 就好。發佈端要簽事件才需要 nostr-tools,那是另一個 Worker 的事了。
三個比較有用的觀察
1. 並行查 + first-hit 比串行 polling 好太多
對單一 relay 查 kind:0,中位數 200–800ms,但偶爾會掛 5 秒以上。同時對 3 個 relay 開 WebSocket,誰先回 EVENT 就採用、其他關掉,幾乎都能 1 秒內結束。
2. damus 最快,primal 緊跟其後
relay.damus.io 和 relay.primal.net 命中率高、回應快。relay.snort.social 和 nostr.wine 在我這邊偶爾 timeout,留作備援但很少先到。
3. Workers 免費額度遠遠夠用
每個 request fan out 3 個 WS connection,幾秒內結束。即使一天上千次請求也離限制非常遠。Cloudflare 註冊不需要信用卡也不要電話(2026-04 親測),唯一卡關的可能是 Turnstile captcha。
v1 還沒做的
NIP-19 bech32 解碼比預期複雜(需要查表 + 5-bit 重組),會把 Worker 體積撐大不少,所以 v1 先要求 hex 輸入。npub 支援放在下一版。
更想做的方向:把 kind:10002(NIP-65 relay list)和 kind:10000(mute list)也加進來,做一個真正的「profile dossier」工具。如果有人覺得這方向有意思,也許再加一個 L402 paywall 的高用量端點(基本查詢永遠免費)。
原始碼 + 打賞
- 原始碼:github.com/relayhop/...
- LN 打賞:[email protected]
如果你也做了類似的小工具,歡迎留言或 DM 我。