1{2 // The same Worker on celld (https://celld.dev), for hosting without3 // Cloudflare: `celld dev wrangler.celld.jsonc` locally, `celld deploy4 // wrangler.celld.jsonc --bucket ...` to a fleet. celld accepts a subset of5 // the Wrangler keys and stops on any other, so this file has no routes,6 // rate limits, observability or environments. `node scripts/check-celld.mjs`7 // keeps it in step with wrangler.jsonc. See docs/16-hosting-without-cloudflare.md.8 "name": "bindws-relay",9 "main": "src/index.ts",10 "compatibility_date": "2026-08-01",11 "compatibility_flags": ["nodejs_compat"],12 "vars": {13 "DOMAIN": "bind.ws",14 "DEV_RELAY": "dev",15 "PUSH_CALLBACK_ORIGINS": "[]",16 // The header a trusted proxy puts the client's address in: x-forwarded-for17 // for Caddy, x-real-ip for nginx. Empty means no address is known, so18 // per-address limits are off. Set it only behind a proxy that overwrites19 // the header on every request.20 "CLIENT_IP_HEADER": "",21 // Cloudflare for SaaS is not available here; custom hostnames are the22 // proxy's job (see the doc). These stay empty.23 "ZONE_ID": "",24 "CNAME_TARGET": "",25 "LIGHTNING_ADDRESS": "",26 "SERVICE_PUBKEY": "",27 "FREE_EVENTS_MB": "100",28 "FREE_MEDIA_MB": "1024",29 "FREE_ACTIVE_HOURS": "100",30 "FREE_ROWS_WRITTEN": "250000",31 "SATS_PER_GB_MONTH_EVENTS": "400",32 "SATS_PER_GB_MONTH_MEDIA": "30",33 "SATS_PER_ACTIVE_HOUR": "11",34 "SATS_PER_MILLION_ROWS": "2000"35 },36 "durable_objects": {37 "bindings": [{ "name": "RELAY", "class_name": "Relay" }]38 },39 // Media lives in the fleet bucket under r2/bindws-media/.40 "r2_buckets": [{ "binding": "MEDIA", "bucket_name": "bindws-media" }],41 // Custom hostname to relay name; filled by hand with `celld kv put HOSTS`.42 "kv_namespaces": [{ "binding": "HOSTS", "id": "hosts" }],43 "migrations": [{ "tag": "v1", "new_sqlite_classes": ["Relay"] }]44}