gemi 0.141.0 → 0.143.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai/index.js +2 -2
- package/dist/ai/index.js.map +1 -1
- package/dist/app/App.d.ts +4 -3
- package/dist/app/App.d.ts.map +1 -1
- package/dist/app/index.js +1 -1
- package/dist/auth/AuthController.d.ts.map +1 -1
- package/dist/auth/config.d.ts +24 -5
- package/dist/auth/config.d.ts.map +1 -1
- package/dist/bin/gemi.js +2 -2
- package/dist/bin/gemi.js.map +3 -3
- package/dist/bun/plugin.js +1 -1
- package/dist/bun/preload.js +1 -1
- package/dist/{chunk-s58hbczk.js → chunk-0839f72f.js} +2 -2
- package/dist/{chunk-s58hbczk.js.map → chunk-0839f72f.js.map} +1 -1
- package/dist/{chunk-0c553zfq.js → chunk-0t2ym9ap.js} +3 -3
- package/dist/{chunk-0c553zfq.js.map → chunk-0t2ym9ap.js.map} +1 -1
- package/dist/{chunk-1axhttzr.js → chunk-159c392q.js} +2 -2
- package/dist/{chunk-1axhttzr.js.map → chunk-159c392q.js.map} +1 -1
- package/dist/{chunk-r6thf4ge.js → chunk-1cn7ets3.js} +3 -3
- package/dist/{chunk-r6thf4ge.js.map → chunk-1cn7ets3.js.map} +1 -1
- package/dist/{chunk-kddgfct7.js → chunk-1ed75a7b.js} +3 -3
- package/dist/{chunk-kddgfct7.js.map → chunk-1ed75a7b.js.map} +1 -1
- package/dist/chunk-1rvnk7g8.js +24 -0
- package/dist/{chunk-03qkwjvy.js.map → chunk-1rvnk7g8.js.map} +5 -6
- package/dist/{chunk-98dxtkbt.js → chunk-1skdsmjx.js} +2 -2
- package/dist/{chunk-98dxtkbt.js.map → chunk-1skdsmjx.js.map} +1 -1
- package/dist/{chunk-x4g0r9d3.js → chunk-1w5dnkd1.js} +2 -2
- package/dist/{chunk-x4g0r9d3.js.map → chunk-1w5dnkd1.js.map} +1 -1
- package/dist/{chunk-3wpxqcw7.js → chunk-1x9ghjpt.js} +1 -1
- package/dist/{chunk-vtqvq9ca.js → chunk-20d0n391.js} +2 -2
- package/dist/{chunk-tbhtx2t0.js.map → chunk-20d0n391.js.map} +1 -1
- package/dist/{chunk-y7v30zd8.js → chunk-236be97q.js} +1 -1
- package/dist/{chunk-tghh8r2q.js → chunk-2ra5skyk.js} +2 -2
- package/dist/{chunk-tghh8r2q.js.map → chunk-2ra5skyk.js.map} +1 -1
- package/dist/{chunk-kc2z9z3m.js → chunk-3q7sc68p.js} +2 -2
- package/dist/{chunk-kc2z9z3m.js.map → chunk-3q7sc68p.js.map} +1 -1
- package/dist/{chunk-t7qp951h.js → chunk-5g7m7g4a.js} +3 -3
- package/dist/{chunk-t7qp951h.js.map → chunk-5g7m7g4a.js.map} +1 -1
- package/dist/{chunk-5013raxj.js → chunk-5qfzvnyp.js} +3 -3
- package/dist/{chunk-5013raxj.js.map → chunk-5qfzvnyp.js.map} +1 -1
- package/dist/{chunk-eydahc2f.js → chunk-5xfpqda5.js} +1 -1
- package/dist/{chunk-p131vmpy.js → chunk-63q7ycwt.js} +2 -2
- package/dist/{chunk-p131vmpy.js.map → chunk-63q7ycwt.js.map} +1 -1
- package/dist/{chunk-gy307m19.js → chunk-68f0jpje.js} +2 -2
- package/dist/{chunk-gy307m19.js.map → chunk-68f0jpje.js.map} +1 -1
- package/dist/{chunk-b9d021hx.js → chunk-78bfmwp0.js} +2 -2
- package/dist/{chunk-b9d021hx.js.map → chunk-78bfmwp0.js.map} +1 -1
- package/dist/{chunk-j9hf1jyd.js → chunk-83cvkhzn.js} +2 -2
- package/dist/{chunk-j9hf1jyd.js.map → chunk-83cvkhzn.js.map} +1 -1
- package/dist/{chunk-9yfg4nqq.js → chunk-8ex0y47w.js} +2 -2
- package/dist/{chunk-9yfg4nqq.js.map → chunk-8ex0y47w.js.map} +1 -1
- package/dist/{chunk-me6mmvbq.js → chunk-8ky8cmde.js} +2 -2
- package/dist/{chunk-me6mmvbq.js.map → chunk-8ky8cmde.js.map} +1 -1
- package/dist/{chunk-gp4s95kn.js → chunk-9dkpv8ev.js} +2 -2
- package/dist/{chunk-gp4s95kn.js.map → chunk-9dkpv8ev.js.map} +1 -1
- package/dist/{chunk-v2cv3wcw.js → chunk-9k46m1vf.js} +2 -2
- package/dist/{chunk-v2cv3wcw.js.map → chunk-9k46m1vf.js.map} +1 -1
- package/dist/chunk-9qfd02h8.js +10 -0
- package/dist/{chunk-0540ptgm.js.map → chunk-9qfd02h8.js.map} +4 -4
- package/dist/{chunk-e9eh5k8a.js → chunk-9tgcmx4h.js} +2 -2
- package/dist/{chunk-e9eh5k8a.js.map → chunk-9tgcmx4h.js.map} +1 -1
- package/dist/{chunk-23mcs80p.js → chunk-9xzg05xg.js} +3 -3
- package/dist/{chunk-23mcs80p.js.map → chunk-9xzg05xg.js.map} +1 -1
- package/dist/{chunk-e9xbdgb2.js → chunk-a37shxb1.js} +2 -2
- package/dist/{chunk-e9xbdgb2.js.map → chunk-a37shxb1.js.map} +1 -1
- package/dist/chunk-aw8gj99f.js +4 -0
- package/dist/chunk-aw8gj99f.js.map +10 -0
- package/dist/{chunk-k732d7x5.js → chunk-azd6da5h.js} +2 -2
- package/dist/{chunk-k732d7x5.js.map → chunk-azd6da5h.js.map} +1 -1
- package/dist/{chunk-1fe07ge4.js → chunk-b4jx4fzq.js} +1 -1
- package/dist/chunk-b6mgrrk6.js +5 -0
- package/dist/{chunk-5gkzbhts.js.map → chunk-b6mgrrk6.js.map} +1 -1
- package/dist/{chunk-6zz3kez5.js → chunk-ce9wm3r9.js} +2 -2
- package/dist/{chunk-6zz3kez5.js.map → chunk-ce9wm3r9.js.map} +1 -1
- package/dist/{chunk-t6n490ha.js → chunk-ceb4jcrm.js} +2 -2
- package/dist/{chunk-t6n490ha.js.map → chunk-ceb4jcrm.js.map} +1 -1
- package/dist/{chunk-9b4ypfcw.js → chunk-ej4kf7m5.js} +3 -3
- package/dist/{chunk-9b4ypfcw.js.map → chunk-ej4kf7m5.js.map} +1 -1
- package/dist/{chunk-b3tmkge9.js → chunk-f2e7n064.js} +2 -2
- package/dist/{chunk-b3tmkge9.js.map → chunk-f2e7n064.js.map} +1 -1
- package/dist/{chunk-6qydm38w.js → chunk-f5qdyw45.js} +2 -2
- package/dist/{chunk-6qydm38w.js.map → chunk-f5qdyw45.js.map} +1 -1
- package/dist/{chunk-r1x5ms0y.js → chunk-fpz9e3xx.js} +2 -2
- package/dist/{chunk-r1x5ms0y.js.map → chunk-fpz9e3xx.js.map} +1 -1
- package/dist/{chunk-mj55jdwp.js → chunk-fsem81ec.js} +1 -1
- package/dist/{chunk-b97tpvet.js → chunk-hnsrwr0p.js} +2 -2
- package/dist/{chunk-b97tpvet.js.map → chunk-hnsrwr0p.js.map} +1 -1
- package/dist/{chunk-dptp6ceg.js → chunk-hyhbk12v.js} +2 -2
- package/dist/{chunk-dptp6ceg.js.map → chunk-hyhbk12v.js.map} +1 -1
- package/dist/{chunk-eve0hewa.js → chunk-j2k408xc.js} +3 -3
- package/dist/{chunk-eve0hewa.js.map → chunk-j2k408xc.js.map} +1 -1
- package/dist/{chunk-ct3sgfpj.js → chunk-jmhrpfqn.js} +2 -2
- package/dist/{chunk-ct3sgfpj.js.map → chunk-jmhrpfqn.js.map} +1 -1
- package/dist/{chunk-qdz4dqbf.js → chunk-kaphqnpp.js} +3 -3
- package/dist/{chunk-qdz4dqbf.js.map → chunk-kaphqnpp.js.map} +1 -1
- package/dist/chunk-kkqw8bqg.js +117 -0
- package/dist/{chunk-akahs8fn.js.map → chunk-kkqw8bqg.js.map} +10 -8
- package/dist/{chunk-dzvp8ynr.js → chunk-ktrm6y5j.js} +3 -3
- package/dist/{chunk-dzvp8ynr.js.map → chunk-ktrm6y5j.js.map} +1 -1
- package/dist/{chunk-vp4x2c0k.js → chunk-kzc6bn8n.js} +2 -2
- package/dist/{chunk-vp4x2c0k.js.map → chunk-kzc6bn8n.js.map} +1 -1
- package/dist/{chunk-5aj27bgc.js → chunk-m6t5a0me.js} +2 -2
- package/dist/{chunk-5aj27bgc.js.map → chunk-m6t5a0me.js.map} +1 -1
- package/dist/{chunk-yxhg3wjf.js → chunk-m70hn4eg.js} +2 -2
- package/dist/{chunk-yxhg3wjf.js.map → chunk-m70hn4eg.js.map} +1 -1
- package/dist/{chunk-rw4z3n9b.js → chunk-m8yd59gg.js} +2 -2
- package/dist/{chunk-rw4z3n9b.js.map → chunk-m8yd59gg.js.map} +1 -1
- package/dist/{chunk-b4qh3ywd.js → chunk-maqkrbsb.js} +2 -2
- package/dist/{chunk-b4qh3ywd.js.map → chunk-maqkrbsb.js.map} +1 -1
- package/dist/{chunk-7dwgex81.js → chunk-mfn94b95.js} +2 -2
- package/dist/{chunk-7dwgex81.js.map → chunk-mfn94b95.js.map} +1 -1
- package/dist/{chunk-jrvg80jw.js → chunk-mkw35cz7.js} +2 -2
- package/dist/{chunk-jrvg80jw.js.map → chunk-mkw35cz7.js.map} +1 -1
- package/dist/{chunk-7hdfbp2x.js → chunk-mnmr27wd.js} +2 -2
- package/dist/{chunk-7hdfbp2x.js.map → chunk-mnmr27wd.js.map} +1 -1
- package/dist/{chunk-1cdz01em.js → chunk-n9zycjm1.js} +3 -3
- package/dist/{chunk-1cdz01em.js.map → chunk-n9zycjm1.js.map} +1 -1
- package/dist/{chunk-d0kw04ym.js → chunk-ncb1qtae.js} +2 -2
- package/dist/{chunk-d0kw04ym.js.map → chunk-ncb1qtae.js.map} +1 -1
- package/dist/{chunk-c7ecv545.js → chunk-p57nt0pm.js} +2 -2
- package/dist/{chunk-c7ecv545.js.map → chunk-p57nt0pm.js.map} +1 -1
- package/dist/{chunk-yxjfghq3.js → chunk-p81qeav5.js} +3 -3
- package/dist/{chunk-yxjfghq3.js.map → chunk-p81qeav5.js.map} +1 -1
- package/dist/{chunk-rwrcsfzv.js → chunk-qt6x2r6a.js} +2 -2
- package/dist/{chunk-rwrcsfzv.js.map → chunk-qt6x2r6a.js.map} +1 -1
- package/dist/{chunk-qvtmn7mn.js → chunk-r0z27j6t.js} +2 -2
- package/dist/{chunk-qvtmn7mn.js.map → chunk-r0z27j6t.js.map} +1 -1
- package/dist/{chunk-6d9f4vw0.js → chunk-r567t83k.js} +4 -4
- package/dist/{chunk-6d9f4vw0.js.map → chunk-r567t83k.js.map} +1 -1
- package/dist/{chunk-pfgbkhmm.js → chunk-rezmtdyt.js} +2 -2
- package/dist/{chunk-pfgbkhmm.js.map → chunk-rezmtdyt.js.map} +1 -1
- package/dist/{chunk-apfk702c.js → chunk-rvm5mkwm.js} +2 -2
- package/dist/{chunk-apfk702c.js.map → chunk-rvm5mkwm.js.map} +1 -1
- package/dist/{chunk-eyqsvzej.js → chunk-s29tgy4y.js} +2 -2
- package/dist/{chunk-eyqsvzej.js.map → chunk-s29tgy4y.js.map} +1 -1
- package/dist/{chunk-dje31gme.js → chunk-sa6a0wy1.js} +2 -2
- package/dist/{chunk-dje31gme.js.map → chunk-sa6a0wy1.js.map} +1 -1
- package/dist/{chunk-d1whcvyn.js → chunk-sgwgj2q0.js} +1 -1
- package/dist/{chunk-8r9kna46.js → chunk-t03nda3s.js} +2 -2
- package/dist/{chunk-8r9kna46.js.map → chunk-t03nda3s.js.map} +1 -1
- package/dist/{chunk-tbhtx2t0.js → chunk-t2nsn0r2.js} +2 -2
- package/dist/{chunk-vtqvq9ca.js.map → chunk-t2nsn0r2.js.map} +1 -1
- package/dist/{chunk-7p64zc6a.js → chunk-tkvamktq.js} +2 -2
- package/dist/{chunk-7p64zc6a.js.map → chunk-tkvamktq.js.map} +1 -1
- package/dist/{chunk-8gfgsmxk.js → chunk-v57ndv0h.js} +2 -2
- package/dist/{chunk-8gfgsmxk.js.map → chunk-v57ndv0h.js.map} +1 -1
- package/dist/{chunk-e3y72vzw.js → chunk-wffc5k3m.js} +2 -2
- package/dist/{chunk-e3y72vzw.js.map → chunk-wffc5k3m.js.map} +1 -1
- package/dist/{chunk-pxavt1j3.js → chunk-x0t3t7g3.js} +2 -2
- package/dist/{chunk-pxavt1j3.js.map → chunk-x0t3t7g3.js.map} +1 -1
- package/dist/{chunk-dvwdehnp.js → chunk-y5yac6n1.js} +2 -2
- package/dist/{chunk-dvwdehnp.js.map → chunk-y5yac6n1.js.map} +1 -1
- package/dist/{chunk-ks7msv3e.js → chunk-yjszzjyj.js} +2 -2
- package/dist/{chunk-ks7msv3e.js.map → chunk-yjszzjyj.js.map} +1 -1
- package/dist/{chunk-18y8n1r3.js → chunk-z80v4z8y.js} +2 -2
- package/dist/{chunk-18y8n1r3.js.map → chunk-z80v4z8y.js.map} +1 -1
- package/dist/config/index.js +1 -1
- package/dist/console/run.js +2 -2
- package/dist/console/run.js.map +1 -1
- package/dist/container/index.js +2 -2
- package/dist/container/index.js.map +1 -1
- package/dist/database/index.js +2 -2
- package/dist/database/index.js.map +1 -1
- package/dist/email/index.js +2 -2
- package/dist/email/index.js.map +1 -1
- package/dist/facades/index.js +2 -2
- package/dist/facades/index.js.map +1 -1
- package/dist/foundation/index.js +2 -2
- package/dist/foundation/index.js.map +1 -1
- package/dist/http/RateLimitMiddleware.d.ts.map +1 -1
- package/dist/http/clientAddress.d.ts +8 -0
- package/dist/http/clientAddress.d.ts.map +1 -0
- package/dist/http/index.js +2 -2
- package/dist/http/index.js.map +1 -1
- package/dist/i18n/dictionaryRuntime.js +2 -2
- package/dist/i18n/dictionaryRuntime.js.map +1 -1
- package/dist/i18n/index.js +2 -2
- package/dist/i18n/index.js.map +1 -1
- package/dist/kernel/index.js +2 -2
- package/dist/kernel/index.js.map +1 -1
- package/dist/orm/index.js +2 -2
- package/dist/orm/index.js.map +1 -1
- package/dist/server/forwardedFor.d.ts +28 -20
- package/dist/server/forwardedFor.d.ts.map +1 -1
- package/dist/server/httpProd.d.ts.map +1 -1
- package/dist/server/index.js +2 -2
- package/dist/server/index.js.map +1 -1
- package/dist/services/broadcast/SocketHub.d.ts.map +1 -1
- package/dist/services/index.d.ts +1 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +2 -2
- package/dist/services/index.js.map +1 -1
- package/dist/services/queue/work.js +2 -2
- package/dist/services/queue/work.js.map +1 -1
- package/dist/services/router/DomainResolver.d.ts +2 -1
- package/dist/services/router/DomainResolver.d.ts.map +1 -1
- package/dist/services/router/DomainRouter.d.ts +17 -0
- package/dist/services/router/DomainRouter.d.ts.map +1 -1
- package/dist/services/router/RouteServiceProvider.d.ts.map +1 -1
- package/dist/stats/route-table.js +1 -1
- package/dist/support/index.js +2 -2
- package/dist/support/index.js.map +1 -1
- package/dist/vitest/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-03qkwjvy.js +0 -24
- package/dist/chunk-0540ptgm.js +0 -10
- package/dist/chunk-3v4esxbd.js +0 -4
- package/dist/chunk-3v4esxbd.js.map +0 -10
- package/dist/chunk-5gkzbhts.js +0 -5
- package/dist/chunk-akahs8fn.js +0 -117
- /package/dist/{chunk-3wpxqcw7.js.map → chunk-1x9ghjpt.js.map} +0 -0
- /package/dist/{chunk-y7v30zd8.js.map → chunk-236be97q.js.map} +0 -0
- /package/dist/{chunk-eydahc2f.js.map → chunk-5xfpqda5.js.map} +0 -0
- /package/dist/{chunk-1fe07ge4.js.map → chunk-b4jx4fzq.js.map} +0 -0
- /package/dist/{chunk-mj55jdwp.js.map → chunk-fsem81ec.js.map} +0 -0
- /package/dist/{chunk-d1whcvyn.js.map → chunk-sgwgj2q0.js.map} +0 -0
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"import { type HeldLock, LockManager } from \"../lock/LockManager\";\nimport { LockLostError } from \"../lock/LockStore\";\nimport { MemoryLockStore } from \"../lock/MemoryLockStore\";\nimport type { CronJob } from \"./CronJob\";\nimport type { ScheduleConfig } from \"./config\";\n\n// The handle the in-process `Bun.cron(schedule, callback)` overload returns\n// (has `.stop()`). `ReturnType<typeof Bun.cron>` can't be used — it resolves to\n// the module-path overload's `Promise<void>` instead.\ntype BunCronHandle = Bun.CronJob;\n\n// Runs a tick inside whatever async context the framework needs, so a job body\n// can resolve services exactly like a request handler can.\nexport type ScheduleRunner = <T>(cb: () => T | Promise<T>) => Promise<T> | T;\n\ndeclare global {\n // Registered cron jobs keyed by name, kept on `globalThis` so it survives\n // `bun --hot` reloads. Re-registering a name stops the previous schedule\n // first, so a reload *updates* the job in place instead of stacking a\n // duplicate. (Bun also stops all in-process cron jobs before re-evaluating on\n // hot reload; this makes the intent explicit and covers any re-construction.)\n var __gemiCronJobs: Map<string, BunCronHandle> | undefined;\n}\n\n/**\n * One tick of one job: the gate, then the three hooks in order.\n *\n * Named and exported rather than left inline in `start()` because otherwise the\n * only way to reach it is to wait — the tightest schedule `Bun.cron` accepts is\n * once a minute, which is not a thing a test can honestly sit through. What a\n * caller gives up by calling this directly is Bun's clock; what it keeps is\n * everything the scheduler puts between the clock and the job, which is the\n * part that has behaviour.\n *\n * The three hooks each catch and log, so one throwing does not stop the next —\n * `onComplete` in particular runs whether `callback` returned or threw, closer\n * to a `finally` than to a success handler.\n */\nexport async function runTick(job: CronJob, options: TickOptions = {}): Promise<void> {\n try {\n // Plain truthiness, not `!== false`. The sloppy gate an app writes is\n // `if (!isProduction) return false;`, which returns `undefined` on the path\n // that was meant to run — and between the two readings of that, the one\n // that skips a recurring tick is recoverable and the one that mails a\n // customer from a developer's laptop is not. The declared return type makes\n // that method a compile error anyway, so the type system catches it while\n // it is still being written and the runtime stays on the safe side.\n if (!(await job.shouldRun.call(job))) {\n return;\n }\n } catch (error) {\n // Fail closed, for the same reason. A gate that throws has told us nothing\n // about whether the job may run, and the framework already refuses to\n // schedule a job whose name or expression it cannot read rather than run\n // something half-declared. The throw is logged, so this is loud; the missed\n // tick comes back on the next one.\n console.error(\n `Error evaluating shouldRun for cron job ${job.name}:`,\n error,\n );\n return;\n }\n\n const overlap = overlapLease(job.withoutOverlapping);\n if (!job.onOneServer && overlap === undefined) {\n await runHooks(job);\n return;\n }\n\n // Fail closed, like the gate: a tick that cannot find out whether it may\n // run is skipped, and the next one tries again.\n let locks: LockManager;\n try {\n locks = options.locks?.() ?? processLocks();\n if (job.onOneServer) {\n const minute = Math.floor((options.now ?? Date.now()) / 60_000);\n if (!(await locks.store.advance(`gemi:cron-tick:${job.name}`, minute))) return;\n }\n } catch (error) {\n console.error(`Could not claim the tick of cron job ${job.name}; skipped it:`, error);\n return;\n }\n if (overlap === undefined) {\n await runHooks(job);\n return;\n }\n\n try {\n await locks.run(`gemi:cron:${job.name}`, { ttl: overlap }, (lock) => runHooks(job, lock));\n } catch (error) {\n if (error instanceof LockLostError) {\n console.error(\n `Cron job ${job.name} lost its withoutOverlapping lock while running: ` +\n `another tick may have started alongside it.`,\n error,\n );\n } else {\n console.error(`Could not take the withoutOverlapping lock of cron job ${job.name}:`, error);\n }\n }\n}\n\n/** What `runTick` needs beyond the job. */\nexport interface TickOptions {\n /**\n * The locks `withoutOverlapping` and `onOneServer` take. The scheduler\n * passes the queue's, so they hold across instances sharing its storage;\n * without one they hold within this process only.\n */\n locks?: () => LockManager;\n /** The tick's time, for `onOneServer`. Default now. */\n now?: number;\n}\n\nconst DEFAULT_OVERLAP_LEASE = 5 * 60_000;\n\nfunction overlapLease(option: CronJob[\"withoutOverlapping\"]): number | undefined {\n if (!option) return undefined;\n if (option === true) return DEFAULT_OVERLAP_LEASE;\n return option.expiresAfter ?? DEFAULT_OVERLAP_LEASE;\n}\n\nlet fallbackLocks: LockManager | undefined;\nfunction processLocks() {\n fallbackLocks ??= new LockManager(new MemoryLockStore());\n return fallbackLocks;\n}\n\nasync function runHooks(job: CronJob, lock?: HeldLock) {\n try {\n await job.onTick.call(job);\n } catch (error) {\n console.error(`Error executing cron job ${job.name}:`, error);\n }\n try {\n await job.callback.call(job, lock);\n } catch (error) {\n console.error(`Error in cron job ${job.name}:`, error);\n }\n try {\n await job.onComplete.call(job);\n } catch (error) {\n console.error(`Error completing cron job ${job.name}:`, error);\n }\n}\n\n/** A tick `drain` could not wait out. */\nexport interface UnfinishedTick {\n /** The job's `name`. */\n name: string;\n /**\n * When this tick started. A job whose tick outlasts its own interval has\n * two ticks running at once, and the name alone would list it twice with\n * nothing to tell the two apart.\n */\n startedAt: Date;\n}\n\n/** What `drain` could not wait out. */\nexport interface ScheduleDrainResult {\n /**\n * Ticks still running when the timeout elapsed. They keep running — a tick\n * has no way to be told to stop — until they finish or the process exits.\n */\n unfinished: UnfinishedTick[];\n}\n\nexport class Scheduler {\n static token = \"scheduler\";\n\n private handles: BunCronHandle[] = [];\n private resolved: Array<new () => CronJob>;\n\n /**\n * Every tick this scheduler has started and not seen settle, keyed by an\n * object of its own so two overlapping ticks of one job are two entries.\n * Without this there is nothing for a shutdown to wait on, and a tick the\n * process exits under is cut off halfway through its `callback`.\n */\n private readonly inFlight = new Map<object, { tick: UnfinishedTick; done: Promise<unknown> }>();\n\n /**\n * Set by `stop()`, cleared by `start()`. `handle.stop()` is what keeps Bun\n * from firing again, and this is the second lock on the same door: a\n * callback Bun had already dispatched when `stop()` ran, or a handle some\n * other scheduler left in the hot-reload registry, still finds nothing to\n * start once the drain has begun.\n */\n private stopped = false;\n\n private locks: (() => LockManager) | undefined;\n\n constructor(config: Required<ScheduleConfig>) {\n this.resolved = config.jobs;\n }\n\n /**\n * The jobs this scheduler will run, or ran — declared in the config slice or\n * discovered under `app/cron`, whichever the slice asked for.\n *\n * #323 turned an application's schedule from an array it could import into a\n * directory it cannot, and an app that had a test walking that array —\n * asserting every report has an owner, that no two share an expression — was\n * about to lose it. This is where that test goes instead, and it is the\n * better question anyway: the config slice says what was asked for, this says\n * what the scheduler took.\n *\n * It lists what `start()` iterates, not what `Bun.cron` accepted. A job with\n * no name, no expression, or a name another job already claimed is logged and\n * skipped, and still appears here — a test walking this should see the\n * problem rather than have it tidied away.\n *\n * A copy, so that walk cannot edit the set the scheduler is running from.\n */\n get jobs(): ReadonlyArray<new () => CronJob> {\n return [...this.resolved];\n }\n\n /**\n * Replaces the job set, for the provider to hand over what it found under\n * `app/cron` before it calls `start()`.\n *\n * The scheduler is constructed in `register()`, where reading a directory and\n * importing what is in it is not allowed to happen — that phase is\n * synchronous and resolves nothing. So it is built from whatever the slice\n * declared and corrected in `boot()`, one line before it starts. Calling this\n * after `start()` changes what `jobs` reports and nothing else; the schedules\n * are already registered.\n */\n useJobs(jobs: Array<new () => CronJob>) {\n this.resolved = jobs;\n }\n\n /**\n * Where `withoutOverlapping` and `onOneServer` take their locks. The\n * provider hands over the queue's, resolved only when a tick needs them.\n */\n useLocks(locks: () => LockManager) {\n this.locks = locks;\n }\n\n /**\n * Schedules every configured job. Called from `ScheduleServiceProvider.boot()`\n * — never from the constructor — so a job body may resolve any service the\n * container holds by the time it first ticks. That ordering is what replaced\n * the old `kernel.waitForBoot()` handshake.\n */\n start(run: ScheduleRunner = (cb) => cb()) {\n this.stopped = false;\n if (this.resolved.length === 0) {\n return;\n }\n\n const registry = (globalThis.__gemiCronJobs ??= new Map());\n\n // Names claimed during *this* pass, which is a different question from what\n // `registry` holds. `registry` spans hot reloads and is supposed to already\n // contain the previous reload's handle under the same name; this starts\n // empty every time and is how a name claimed twice in one schedule is told\n // apart from the same job coming back after an edit.\n const claimed = new Map<string, string>();\n\n for (const Job of this.resolved) {\n const job = new Job();\n if (!job.name) {\n // Named by its class, because under discovery nobody wrote this job\n // down anywhere and `JSON.stringify(job)` on a nameless one prints\n // `{}`. The overwhelmingly common cause is the second sentence: a\n // shared base class sitting in the walked directory. `abstract` is\n // erased before this code runs, so there is nothing here that could\n // tell a base class from a job — only the message can.\n console.error(\n `Cron job must have a name — ${Job.name || \"an anonymous class\"} ` +\n `has none, so it is not scheduled. If this is a base class that ` +\n `other jobs extend, move it out of the discovered directory: ` +\n `\\`abstract\\` does not survive to runtime, so a class under ` +\n `app/cron is indistinguishable from a job.`,\n );\n continue;\n }\n if (!job.cron) {\n console.error(`Cron job must have an expression. Job: ${job.name}`);\n continue;\n }\n const taken = claimed.get(job.name);\n if (taken !== undefined) {\n // Refusing the second one, rather than letting it through to the\n // `registry.get(...).stop()` below — which is what used to happen, and\n // it stopped the *first* job's schedule while leaving both classes in\n // `jobs`. That is the failure #323 exists to remove wearing a disguise:\n // a report that silently stops arriving, and a test walking `jobs` that\n // sees two healthy entries and passes.\n console.error(\n `Two cron jobs claim the name \"${job.name}\" — ${taken} is ` +\n `scheduled and ${Job.name || \"an anonymous class\"} is not. A name ` +\n `is the scheduler's key, so only one job can hold it. Rename one.`,\n );\n continue;\n }\n claimed.set(job.name, Job.name || \"an anonymous class\");\n\n // Update in place: stop any schedule previously registered under this name\n // before re-registering, so a hot reload replaces rather than duplicates.\n registry.get(job.name)?.stop();\n\n // Inside `run`, gate included: a `shouldRun` that resolves a service to\n // decide is the ordinary case, and evaluating it out here would leave it\n // without the application context every other line of the tick has.\n const handle = Bun.cron(job.cron, () => {\n if (this.stopped) return;\n const locks = this.locks;\n return this.track(job.name, () => run(() => runTick(job, { locks })));\n });\n\n registry.set(job.name, handle);\n this.handles.push(handle);\n }\n }\n\n /**\n * Stops every schedule, so no new tick starts. A tick already running is\n * left alone — `drain` is how to wait for it.\n */\n stop() {\n this.stopped = true;\n for (const handle of this.handles) {\n handle.stop();\n }\n this.handles = [];\n }\n\n /**\n * Stops every schedule, waits up to `timeoutMs` for the ticks already\n * running, and reports the ones that did not finish.\n *\n * Stopping comes first, so a tick that falls due while this waits does not\n * start: a drain that kept the clock running would never be sure it had\n * waited for everything. Nothing is cancelled — a job has no way to be told\n * — so an unfinished tick keeps running after this resolves, until it ends\n * or the process does.\n *\n * A later `start()` schedules again.\n */\n async drain(timeoutMs = Infinity): Promise<ScheduleDrainResult> {\n this.stop();\n\n let timer: ReturnType<typeof setTimeout> | undefined;\n const deadline = new Promise<void>((resolve) => {\n if (timeoutMs !== Infinity) timer = setTimeout(resolve, timeoutMs);\n });\n await Promise.race([\n Promise.allSettled([...this.inFlight.values()].map((e) => e.done)),\n deadline,\n ]);\n clearTimeout(timer);\n\n return {\n unfinished: [...this.inFlight.values()].map((e) => ({ ...e.tick })),\n };\n }\n\n /** How many ticks this scheduler is running right now. */\n get running(): number {\n return this.inFlight.size;\n }\n\n private track(name: string, tick: () => unknown): Promise<unknown> {\n const key = {};\n // `Promise.resolve().then(...)` rather than calling `tick` directly, so a\n // runner that throws synchronously lands in the same promise as one that\n // rejects, and the entry below is removed either way.\n const done = Promise.resolve()\n .then(tick)\n .finally(() => this.inFlight.delete(key));\n this.inFlight.set(key, { tick: { name, startedAt: new Date() }, done });\n return done;\n }\n}\n",
|
|
12
12
|
"import { isMainThread } from \"node:worker_threads\";\n\nimport type { Application } from \"../../foundation/Application\";\nimport { ServiceProvider } from \"../../support/ServiceProvider\";\nimport { discoverJobs, discoverWorkflows } from \"../discovery\";\nimport { withDefaults } from \"../../support/withDefaults\";\nimport { queueConfigDefaults, type QueueConfig } from \"./config\";\nimport { LockManager } from \"../lock/LockManager\";\nimport { MemoryQueueDriver } from \"./MemoryQueueDriver\";\nimport {\n claimingTurnedOff,\n claimsInThisProcess,\n isQueueWorker,\n QueueManager,\n} from \"./QueueManager\";\n\n/**\n * How far inside the provider deadline the drain stops, so there is time left\n * to write the list of jobs it abandoned before `Application` stops waiting\n * for this provider and the process exits. A tenth of the budget, capped, so\n * that a deadline of a few milliseconds still spends most of itself waiting\n * rather than handing the whole of it to the margin.\n */\nconst REPORT_MARGIN_MS = 100;\n\nconst reportMargin = (timeoutMs: number) =>\n Math.min(REPORT_MARGIN_MS, Math.floor(timeoutMs / 10));\n\nexport class QueueServiceProvider extends ServiceProvider {\n register() {\n this.app.singleton(\n QueueManager,\n () =>\n new QueueManager(this.app.config.get<QueueConfig>(\"queue\", {}), {\n application: this.app,\n }),\n );\n // The `Lock` facade's binding: the queue's locks, over its storage.\n this.app.singleton(LockManager, () => this.app.make(QueueManager).locks);\n }\n\n /**\n * Fills in the job registry when the app did not declare one.\n *\n * ### Why the raw slice and not the manager's config\n *\n * The decision here is whether the app said anything, and by the time the\n * manager holds a config it can no longer tell: `withDefaults` treats an\n * absent key and an `undefined` one alike and substitutes the default `[]`,\n * which is the same value an app writes when it means \"no jobs, and I mean\n * it\". Reading the slice before defaults are applied is the only place the\n * difference still exists.\n *\n * So: `jobs` present, including `jobs: []`, is used verbatim and no directory\n * is read. Absent or `undefined`, the classes under `jobsDir` are.\n *\n * ### Why phase two\n *\n * Discovery imports every file it walks, which is asynchronous, and\n * `register()` is not. It also has to happen before the first dispatch rather\n * than before the first tick — there is no equivalent of the scheduler's\n * `start()` to hang it off, so the registry has to be complete by the end of\n * boot.\n */\n async boot() {\n const slice = this.app.config.get<QueueConfig>(\"queue\", {});\n const { jobsDir, workflowsDir } = withDefaults(queueConfigDefaults(), slice);\n if (slice.jobs === undefined) {\n this.app.make(QueueManager).useJobs(await discoverJobs(jobsDir));\n }\n // Workflows by the same rule, under `app/workflows`. An app with none\n // has no such directory, and discovery says nothing about that.\n if (slice.workflows === undefined) {\n const workflows = await discoverWorkflows(workflowsDir);\n if (workflows.length > 0) this.app.make(QueueManager).useWorkflows(workflows);\n }\n }\n\n /**\n * Stops claiming and waits for the jobs this process is running, on the way\n * out of a server told to stop. Runs after the request drain, and before the\n * database provider's, so the jobs still have their connection.\n *\n * A job still running at the deadline is abandoned with the process. With\n * the memory driver that job is lost; with one that outlives the process it\n * is claimed again elsewhere once its lease runs out. With such a driver\n * claiming already stopped when the signal arrived, so the jobs here are\n * only the ones that were running then; the memory driver kept claiming\n * until now, so a job dispatched by a request still draining ran here too.\n *\n * The drain is bounded by a little less than what is left of the shared\n * provider deadline, so that this is the thing that names the jobs it gave\n * up on. Draining without a timeout of its own read better but could not\n * work: `drain()` then resolves only once every job has finished, by which\n * point nothing is unfinished and the list below is always empty — and the\n * operator who needed it got `Application`'s generic \"did not finish within\n * the provider shutdown deadline\" instead, which names no job at all. *\n * A drain that left jobs running resolves `{ abandoned: true }`, so\n * `Application` reports this provider in `timedOut` and the process exits 1:\n * the jobs are named in the log, and the exit code shows the stop was not\n * clean (#580).\n */\n async shutdown(options?: { timeoutMs: number }) {\n // Resolving the manager now would build a driver only to stop it.\n if (!this.app.resolved(QueueManager)) return;\n const queue = this.app.make(QueueManager);\n if (queue.running > 0) {\n console.log(\n `[gemi] Shutting down: waiting for ${queue.running} running queued job(s).`,\n );\n }\n const budget = options?.timeoutMs;\n const { unfinished } = await queue.drain(\n budget === undefined ? Infinity : Math.max(0, budget - reportMargin(budget)),\n );\n if (unfinished.length > 0) {\n console.error(\n `[gemi] Queued jobs still running at shutdown: ` +\n unfinished.map((job) => `${job.name} (${job.id})`).join(\", \"),\n );\n return { abandoned: true };\n }\n }\n}\n\n/**\n * Starts claiming once the application has booted, in a production server\n * whose driver keeps jobs outside the process, rather than at its first\n * dispatch. That is the recovery half of a durable driver: the jobs a previous\n * process left behind are claimed by whichever one is up, and a replica that\n * serves no dispatch of its own would otherwise never look.\n *\n * Called by the kernel after every provider has booted, not from `boot()`\n * above: queued listeners are registered as jobs by the event provider, which\n * boots after this one, and a job claimed before its name is registered is\n * dead-lettered for it.\n *\n * Not the memory driver, which never has anything left behind. Not a console\n * command or a migration, which boot the same providers and would claim jobs\n * only to exit under them — `ROOT_DIR` is set by `Server.start()` and the\n * `gemi queue:work` worker alone. Not a server started with\n * `GEMI_QUEUE_CLAIM=off`, which leaves its jobs to workers. Not\n * a `worker` job's thread, which clones the application. And not development,\n * where `bun --hot` boots a fresh application on every save: there the queue\n * starts at the first dispatch, and a reload hands a running loop over — see\n * `takeOverDevQueue`.\n */\nexport function startClaimingIfServing(application: Application) {\n warnAboutClaimSwitch(application);\n if (process.env.NODE_ENV !== \"production\") return takeOverDevQueue(application);\n if (configuresMemory(application)) return;\n if (!claimsInThisProcess()) return;\n if (!application.bound(QueueManager)) return;\n application.make(QueueManager).start();\n}\n\nfunction configuresMemory(application: Application) {\n const driver = application.config.get<QueueConfig>(\"queue\", {}).driver ?? \"memory\";\n return driver === \"memory\" || driver instanceof MemoryQueueDriver;\n}\n\n/**\n * Whether the queue's jobs live only in this process, for the warning below.\n * The config says so for `\"memory\"` or a `MemoryQueueDriver`, but a factory\n * only says once it has run, so for one the manager is built — which is the\n * same driver `durable` and `push()` go by. A factory that throws here is\n * left to throw at the first dispatch, as it would have without the switch,\n * rather than failing the boot over a warning.\n */\nfunction keepsJobsInProcess(application: Application) {\n if (configuresMemory(application)) return true;\n const driver = application.config.get<QueueConfig>(\"queue\", {}).driver;\n if (typeof driver !== \"function\" || !application.bound(QueueManager)) return false;\n try {\n return !application.make(QueueManager).durable;\n } catch {\n return false;\n }\n}\n\n/**\n * Says so at boot when a server's `GEMI_QUEUE_CLAIM` will not do what it\n * reads as. Only in a server's main thread: a console command or a `worker`\n * job's thread shares the server's environment and claims nothing anyway.\n *\n * - `off` with the memory driver is ignored, because a memory queue's jobs\n * exist only in the process that dispatched them. Honoured, it would leave\n * every dispatch waiting in a `Map` that no worker can see, for good.\n * - Any value but `off` or `on` claims. `false` or `0` read as \"off\" and are\n * not it, and a web process that quietly keeps claiming is the failure a\n * deploy that set one would never notice.\n */\nfunction warnAboutClaimSwitch(application: Application) {\n const value = process.env.GEMI_QUEUE_CLAIM;\n if (value === undefined || isQueueWorker()) return;\n if (process.env.ROOT_DIR === undefined || !isMainThread) return;\n if (claimingTurnedOff()) {\n if (!keepsJobsInProcess(application)) return;\n console.warn(\n `[gemi] GEMI_QUEUE_CLAIM=off is ignored: the memory queue driver keeps ` +\n `jobs in the process that dispatched them, so no worker could run ` +\n `them. This server runs its own jobs. Use a driver other processes ` +\n `can read, such as \"database\", to hand jobs to \\`gemi queue:work\\`.`,\n );\n } else if (value.trim().toLowerCase() !== \"on\") {\n console.warn(\n `[gemi] GEMI_QUEUE_CLAIM=\"${value}\" is not \"off\" or \"on\", so this ` +\n `server claims jobs. Set it to \"off\" to leave them to \\`gemi queue:work\\`.`,\n );\n }\n}\n\n/**\n * Under `gemi dev`, stops the loop the previous application started over a\n * shared driver, and starts this application's in its place.\n *\n * A `bun --hot` reload boots a new application in the same process, and the\n * old application's loop — started lazily by a dispatch — is a live closure\n * that nothing stopped. Over the database driver it went on claiming rows\n * from the table and running them with the code from before the save, and\n * after a few saves several generations of it were doing so side by side.\n *\n * Stopped rather than drained: `stop()` claims nothing more and returns, and\n * a job the old loop is running finishes on its old code and reports as\n * usual, where waiting for it would hold up the reload behind a job. Its row\n * stays claimed until then, so the new loop cannot take it twice.\n *\n * The new loop is started only when an old one was running, which keeps the\n * rule that development claims nothing until something is dispatched, while\n * a job waiting out a retry when the file was saved still gets its retry —\n * on the new code, which is the point of the reload. A memory queue is never\n * recorded, so it is never handed over: only its own application feeds it,\n * and stopping it would drop whatever was still waiting there.\n *\n * Runs from every boot. `waitForBoot` twice on one application stops its own\n * loop and starts it again at once, which changes nothing. The `bound` guard\n * is for an application built without the queue provider, which still stops\n * the stale loop.\n */\nfunction takeOverDevQueue(application: Application) {\n const previous = globalThis.__gemiDevQueue;\n if (!previous) return;\n globalThis.__gemiDevQueue = undefined;\n void previous.stop();\n if (application.bound(QueueManager)) application.make(QueueManager).start();\n}\n",
|
|
13
13
|
"import { app } from \"../../foundation/app\";\nimport { GEMI_REQUEST_BREAKER_ERROR } from \"../../http/Error\";\nimport { HttpRequest } from \"../../http/HttpRequest\";\nimport { type CarriedContext, RequestContext } from \"../../http/requestContext\";\nimport { isPolicyDeniedError, isRecordNotFoundError } from \"../../orm/errors\";\nimport { MiddlewareRegistry } from \"../middleware/MiddlewareRegistry\";\nimport { breakResponse, mergeContextIntoResponse } from \"./ApiRouteDispatcher\";\nimport { isApiPath } from \"./apiPath\";\nimport { notFoundResponse } from \"./notFound\";\nimport { policyDeniedResponse, policyDeniedView } from \"./policyDenied\";\nimport { viewBreakResponse, viewDataBreakResponse } from \"./ViewRouteDispatcher\";\n\nexport interface GlobalMiddlewareOutcome {\n /** The response that ends the request, when a global middleware refused it. */\n refusal: Response | null;\n /**\n * Puts the headers and cookies the global middleware set on the request\n * context onto the response the request ends with. The response's own\n * headers win; the context only fills gaps, as it does for route middleware.\n * Cookies are left off a response a shared cache may store (see\n * `sharedCacheable`).\n */\n apply(response: Response): Response;\n /**\n * The user the list left on its context, for the route's context to start\n * from. `null` when there is no list, or it refused.\n */\n carried: CarriedContext | null;\n}\n\n/**\n * Whether a shared cache may store this response: `public` or `s-maxage` in\n * its Cache-Control, as the static `dist/client` files carry\n * (`public, max-age=31536000`). A per-visitor cookie a global middleware set\n * would otherwise be stored with the asset, and a CDN that caches responses\n * with Set-Cookie would hand it to every visitor who gets that copy.\n */\nfunction sharedCacheable(response: Response) {\n const cacheControl = response.headers.get(\"Cache-Control\")?.toLowerCase() ?? \"\";\n return /(^|[\\s,])(public|s-maxage)\\b/.test(cacheControl);\n}\n\nconst noCookies = new Set<string>();\n\nconst passThrough: GlobalMiddlewareOutcome = {\n refusal: null,\n apply: (response) => response,\n carried: null,\n};\n\n/**\n * Runs the `global` middleware list for one incoming request, before anything\n * is routed and before a static file is served. Called from `App`, once per\n * request (see `App.withGlobalMiddleware`), inside the kernel scope.\n *\n * It opens a request scope of its own. The router has not run, so the\n * `HttpRequest` a global middleware gets has no params and an empty\n * `routePath`, and its `kind` is read off the url the way `App.fetch` picks a\n * dispatcher. The scope is not the one the route later runs in: the route's\n * dispatcher opens a fresh one, as it always has. Three things cross over.\n * Headers and cookies reach the response through `apply`; the request state\n * the list set (`req.state`, #887) is `carried` into the route's request; and\n * so is the user, so a gate that looked the user up does\n * not make `auth` or `Auth.user()` look them up again. Both trust a user they\n * find on the context without checking it against a session or asking for a\n * token, so whatever a global middleware sets is treated as authenticated by\n * the route — which is what lets one sign a user in by SSO header or API key\n * (#577), and why it must set only a user it has verified. The rest stays\n * behind:\n * the locale, because the dispatchers decide it for the route, from its url,\n * and the feature evaluations, made against a request with no route and maybe\n * before a user was known.\n *\n * A break answers the way the same break from a route middleware would for\n * that url: the api's JSON for `/api`, the `.json` navigation's body for view\n * data, and the page response otherwise, static files included. A policy\n * denial is the same 403 the dispatchers give. Anything else is thrown, and\n * the caller answers it as the server's 500.\n */\nexport async function runGlobalMiddleware(req: Request): Promise<GlobalMiddlewareOutcome> {\n const registry = app(MiddlewareRegistry);\n if (registry.config.global.length === 0) {\n return passThrough;\n }\n\n const { pathname } = new URL(req.url);\n const isApi = isApiPath(pathname);\n const httpRequest = new HttpRequest(req, {}, isApi ? \"api\" : \"view\", \"\");\n\n return await RequestContext.run(httpRequest, async () => {\n const ctx = RequestContext.getStore();\n // Held past `destroy()` below, which only drops the store's references.\n const { headers, cookies } = ctx;\n const apply = (response: Response) => {\n if (!sharedCacheable(response)) {\n return mergeContextIntoResponse(response, headers, cookies);\n }\n const withoutCookies = new Headers(headers);\n withoutCookies.delete(\"Set-Cookie\");\n return mergeContextIntoResponse(response, withoutCookies, noCookies);\n };\n\n try {\n await registry.runGlobalMiddleware();\n return { refusal: null, apply, carried: { user: ctx.user, state: httpRequest.state } };\n } catch (err) {\n const isViewData = !isApi && pathname.endsWith(\".json\");\n if (err?.kind === GEMI_REQUEST_BREAKER_ERROR) {\n const refusal = isApi\n ? breakResponse(err.payload.api)\n : isViewData\n ? viewDataBreakResponse(err.payload.viewData ?? err.payload.api)\n : viewBreakResponse(err.payload.view);\n return { refusal: apply(refusal), apply, carried: null };\n }\n // A global middleware that resolves the request's tenant or workspace by\n // an id from the url asks the same question a route handler does, and a\n // miss is the same 404. Only for the two json-shaped requests here: a\n // full page load should render the application's `404` view rather than\n // a bare body, and that is #614's to do.\n if (isRecordNotFoundError(err) && (isApi || isViewData)) {\n return { refusal: apply(notFoundResponse()), apply, carried: null };\n }\n if (isPolicyDeniedError(err)) {\n console.error(err);\n const refusal =\n isApi || isViewData ? policyDeniedResponse() : viewBreakResponse(policyDeniedView());\n return { refusal: apply(refusal), apply, carried: null };\n }\n throw err;\n } finally {\n ctx.destroy();\n }\n });\n}\n",
|
|
14
|
-
"import type { Server, ServerWebSocket, WebSocketHandler } from \"bun\";\n\nimport type { Application } from \"../../foundation/Application\";\nimport { signedInUser } from \"../../http/ChannelRouter\";\nimport { HttpRequest } from \"../../http/HttpRequest\";\nimport { type CarriedContext, RequestContext } from \"../../http/requestContext\";\nimport { kernelContext } from \"../../kernel/context\";\nimport { isShuttingDown } from \"../../server/shutdown\";\nimport { runGlobalMiddleware } from \"../router/globalMiddleware\";\nimport type { BroadcastRevocation } from \"./BroadcastDriver\";\nimport type { BroadcastManager } from \"./BroadcastManager\";\nimport {\n BROADCAST_PROTOCOL,\n CloseCode,\n SUBSCRIPTION_ID,\n type DeniedCode,\n type ServerFrame,\n} from \"./protocol\";\nimport { newSocketId, socketTag } from \"./socketTag\";\n\n/** What the hub keeps on each of its sockets (`ws.data`). */\nexport interface GemiSocketData {\n /** Marks a broadcast socket, as opposed to the dev server's HMR relay. */\n readonly gemiSocket: true;\n /** The hub that accepted it. After a dev reload that may not be the current one. */\n readonly hub: SocketHub;\n readonly socketId: string;\n readonly tag: string;\n /** The upgrade request, kept to rebuild a request context for every `sub`. */\n readonly request: { url: string; headers: [string, string][] };\n /** What the global middleware resolved for the upgrade: its user. */\n readonly carried: CarriedContext | null;\n /** The signed-in user's id at the upgrade, for limits and `revoke({ user })`. */\n readonly userId: string | null;\n readonly ip: string | null;\n /** Subscription id → its topic, `null` while it is being authorized. */\n readonly subs: Map<string, Subscription>;\n /** Topic → how many of this socket's subscriptions are on it. */\n readonly topics: Map<string, number>;\n rate: { windowStart: number; subs: number; pings: number };\n /**\n * The process, IP and user connection counts this socket holds. Taken\n * before the upgrade's first `await`, so concurrent upgrades cannot\n * overshoot the caps, and given back exactly once.\n */\n reservation: Reservation | null;\n /** The hub has closed it (backpressure, revoke, bye); its close is on the way. */\n closing: boolean;\n closed: boolean;\n}\n\ninterface Subscription {\n pattern: string;\n params: Record<string, string | number>;\n topic: string | null;\n}\n\ninterface Reservation {\n ip: string | null;\n userId: string | null;\n}\n\n/** Pings a socket may send per `subscribeRate` window before it is closed (1008). */\nconst PING_LIMIT_PER_WINDOW = 120;\n/** Over how long the re-authorizations after a `gap` are spread. */\nconst GAP_REAUTHORIZE_SPREAD_MS = 2_000;\n/** How often a subscription is authorized again when revocations keep landing. */\nconst MAX_AUTHORIZE_ATTEMPTS = 3;\n\ntype GemiSocket = ServerWebSocket<GemiSocketData>;\n\n/**\n * The WebSocket side of broadcasting, one per HTTP server process: accepts\n * upgrades on the configured path, speaks the `gemi.v1` protocol (see\n * `protocol.ts`), authorizes every subscription through the app's\n * `ChannelRouter`, and delivers what the driver hands it with\n * `server.publish`.\n *\n * Nothing here keeps a queue or a log. A socket that falls behind is closed\n * (`1013`), one whose user signs out is closed (`4001`), and a server that\n * stops says `bye` (`1012`); in every case the client reconnects and\n * refetches what it shows.\n */\nexport class SocketHub {\n static token = \"broadcast.sockets\";\n\n private server: Server<GemiSocketData> | null = null;\n private readonly sockets = new Set<GemiSocket>();\n private readonly byTopic = new Map<string, Set<GemiSocket>>();\n private readonly topicReady = new Map<string, Promise<void>>();\n private readonly perIp = new Map<string, number>();\n private readonly perUser = new Map<string, number>();\n /** Sockets held or being upgraded: the process cap's count. */\n private connections = 0;\n /** Bumped by every topic revocation; see `revokedAt`. */\n private revocationSeq = 0;\n /** Topic → the `revocationSeq` of its last revocation. */\n private readonly revokedAt = new Map<string, number>();\n private closing = false;\n /** Resolves once every socket `shutdown` closed is gone, or was cut. */\n private closed: Promise<void> | null = null;\n private onAllClosed: (() => void) | null = null;\n private startPromise: Promise<void> | null = null;\n\n constructor(\n private readonly manager: BroadcastManager,\n private readonly application: Application,\n ) {}\n\n private get config() {\n return this.manager.config;\n }\n\n /** Whether `req` is for the socket endpoint (an upgrade or not). */\n matches(req: Request): boolean {\n try {\n return new URL(req.url).pathname === this.config.path;\n } catch {\n return false;\n }\n }\n\n /** Sockets open on this process. */\n get size(): number {\n return this.sockets.size;\n }\n\n /**\n * Starts delivering: the driver's frames for this process go out with\n * `server.publish`. Call once the server is listening.\n */\n start(server: Server<any>): Promise<void> {\n this.server = server as Server<GemiSocketData>;\n this.startPromise ??= this.manager\n .start((topic, frame) => this.deliver(topic, frame), {\n onGap: () => this.onGap(),\n onRevoke: (revocation) => this.applyRevocation(revocation),\n })\n .catch((error) => {\n this.startPromise = null;\n console.error(\"[gemi] The broadcast driver could not start; events reach no socket.\", error);\n });\n return this.startPromise;\n }\n\n /**\n * Answers a request for the socket endpoint: upgrades it, or refuses it\n * with a status saying why. `undefined` once Bun has taken it over.\n */\n upgrade(req: Request, server: Server<any>): Promise<Response | undefined> {\n return this.run(() => this.tryUpgrade(req, server as Server<GemiSocketData>));\n }\n\n private async tryUpgrade(\n req: Request,\n server: Server<GemiSocketData>,\n ): Promise<Response | undefined> {\n if (this.closing || isShuttingDown()) {\n return refuse(503, \"The server is restarting.\", { \"Retry-After\": \"5\" });\n }\n if (req.method !== \"GET\" || req.headers.get(\"upgrade\")?.toLowerCase() !== \"websocket\") {\n return refuse(426, \"This endpoint only accepts WebSocket upgrades.\", {\n Upgrade: \"websocket\",\n });\n }\n const protocols = (req.headers.get(\"sec-websocket-protocol\") ?? \"\")\n .split(\",\")\n .map((protocol) => protocol.trim());\n if (!protocols.includes(BROADCAST_PROTOCOL)) {\n return refuse(400, `Open the socket with the \"${BROADCAST_PROTOCOL}\" subprotocol.`);\n }\n const origin = this.checkOrigin(req);\n if (origin !== true) return refuse(403, origin);\n if (this.connections >= this.config.maxConnectionsPerProcess) {\n return refuse(503, \"Too many connections.\", { \"Retry-After\": \"10\" });\n }\n const ip = clientIp(req, server);\n if (ip && (this.perIp.get(ip) ?? 0) >= this.config.maxConnectionsPerIp) {\n return refuse(429, \"Too many connections from this address.\", { \"Retry-After\": \"30\" });\n }\n // Counted now, before the first `await`: checks made while another\n // upgrade's middleware or session lookup is pending see it.\n const reservation = this.reserve(ip);\n let handedOver = false;\n try {\n const response = await this.authenticate(req, server, reservation);\n handedOver = response === undefined;\n return response;\n } finally {\n if (!handedOver) this.release(reservation);\n }\n }\n\n private async authenticate(\n req: Request,\n server: Server<GemiSocketData>,\n reservation: Reservation,\n ): Promise<Response | undefined> {\n // The global middleware covers the endpoint as it covers every route: a\n // gate that refuses a request refuses its socket.\n const outcome = await runGlobalMiddleware(req);\n if (outcome.refusal) return outcome.refusal;\n const carried = outcome.carried;\n if (this.closing || isShuttingDown()) {\n return refuse(503, \"The server is restarting.\", { \"Retry-After\": \"5\" });\n }\n\n let user: unknown;\n try {\n const httpRequest = new HttpRequest(req, {}, \"api\", this.config.path);\n user = await RequestContext.run(\n httpRequest,\n async () => {\n const ctx = RequestContext.getStore();\n try {\n return await signedInUser(httpRequest);\n } finally {\n ctx.destroy();\n }\n },\n carried,\n );\n } catch (error) {\n console.error(\"[gemi] Resolving the session of a socket upgrade failed.\", error);\n return refuse(503, \"The session could not be checked.\", { \"Retry-After\": \"5\" });\n }\n const userId = userIdOf(user);\n if (userId && (this.perUser.get(userId) ?? 0) >= this.config.maxConnectionsPerUser) {\n return refuse(429, \"Too many connections for this user.\", { \"Retry-After\": \"30\" });\n }\n if (userId) {\n reservation.userId = userId;\n this.perUser.set(userId, (this.perUser.get(userId) ?? 0) + 1);\n }\n\n const socketId = newSocketId();\n const data: GemiSocketData = {\n gemiSocket: true,\n hub: this,\n socketId,\n tag: socketTag(socketId),\n request: { url: req.url, headers: [...req.headers] },\n carried,\n userId,\n ip: reservation.ip,\n subs: new Map(),\n topics: new Map(),\n rate: { windowStart: Date.now(), subs: 0, pings: 0 },\n reservation,\n closing: false,\n closed: false,\n };\n const upgraded = server.upgrade(req, {\n headers: { \"Sec-WebSocket-Protocol\": BROADCAST_PROTOCOL },\n data,\n });\n if (!upgraded) return refuse(400, \"The WebSocket upgrade failed.\");\n return undefined;\n }\n\n /**\n * `true`, or why the upgrade is refused. A browser always sends `Origin` on\n * a WebSocket upgrade, and cookies ride along with it whatever the page\n * that opened it, so an upgrade carrying cookies must come from an allowed\n * origin and one without `Origin` is refused. A native client sends its\n * token in a header and no cookies, and may leave `Origin` out.\n */\n private checkOrigin(req: Request): true | string {\n const origin = req.headers.get(\"origin\");\n const hasCookies = Boolean(req.headers.get(\"cookie\"));\n if (!origin) {\n return hasCookies ? \"A socket that carries cookies must send an Origin header.\" : true;\n }\n return this.originAllowed(origin, req) ? true : \"This origin may not open a socket.\";\n }\n\n /** Whether `origin` may open a socket. */\n originAllowed(origin: string, req: Request): boolean {\n let url: URL;\n try {\n url = new URL(origin);\n } catch {\n return false;\n }\n if (url.protocol !== \"https:\" && url.protocol !== \"http:\") return false;\n // The request's own host: the page and the socket share an origin.\n const host = req.headers.get(\"host\");\n if (host && url.host.toLowerCase() === host.toLowerCase()) return true;\n // Subdomains are never implied, `route.domains` ones included: those\n // serve tenant content, are same-site with the app (so its cookies ride\n // along), and a WebSocket has no CORS. A wildcard entry opts in.\n for (const allowed of [\n process.env.APP_URL,\n process.env.HOST_NAME,\n ...this.config.allowedOrigins,\n ]) {\n if (allowed && originMatches(allowed.trim(), url)) return true;\n }\n return false;\n }\n\n private reserve(ip: string | null): Reservation {\n this.connections++;\n if (ip) this.perIp.set(ip, (this.perIp.get(ip) ?? 0) + 1);\n return { ip, userId: null };\n }\n\n private release(reservation: Reservation) {\n this.connections--;\n decrement(this.perIp, reservation.ip);\n decrement(this.perUser, reservation.userId);\n }\n\n /** `Bun.serve`'s `websocket` option. */\n get websocket(): WebSocketHandler<GemiSocketData> {\n return {\n open: (ws) => ws.data.hub.onOpen(ws),\n message: (ws, message) => ws.data.hub.onMessage(ws, message),\n close: (ws) => ws.data.hub.onClose(ws),\n ...this.socketOptions(),\n };\n }\n\n /** The server-wide socket settings, also for a handler shared with HMR in dev. */\n socketOptions() {\n return {\n maxPayloadLength: this.config.maxInboundMessageBytes,\n idleTimeout: this.config.idleTimeout,\n // The hub closes a socket over `backpressureLimit` with 1013 at its\n // next delivery; Bun's own limit, at twice that, is the backstop for a\n // burst between two deliveries (Bun closes with 1006).\n backpressureLimit: this.config.backpressureLimit * 2,\n closeOnBackpressureLimit: true,\n sendPings: true,\n perMessageDeflate: false,\n } as const;\n }\n\n onOpen(ws: GemiSocket) {\n const data = ws.data;\n if (this.closing) {\n this.sayBye(ws);\n return;\n }\n this.sockets.add(ws);\n send(ws, {\n op: \"hello\",\n socketId: data.socketId,\n tag: data.tag,\n heartbeatMs: this.config.heartbeatMs,\n });\n }\n\n onMessage(ws: GemiSocket, message: string | Buffer) {\n if (typeof message !== \"string\") {\n ws.close(CloseCode.UnsupportedData, \"Frames are JSON text.\");\n return;\n }\n if (message.length > this.config.maxInboundMessageBytes) {\n ws.close(CloseCode.PolicyViolation, \"Frame too large.\");\n return;\n }\n let frame: any;\n try {\n frame = JSON.parse(message);\n } catch {\n ws.close(CloseCode.UnsupportedData, \"Frames are JSON text.\");\n return;\n }\n switch (frame?.op) {\n case \"ping\":\n if (this.countPing(ws)) send(ws, { op: \"pong\" });\n return;\n case \"sub\":\n this.subscribe(ws, frame).catch((error) => {\n console.error(\"[gemi] A socket subscription failed.\", error);\n if (typeof frame.id === \"string\" && ws.data.subs.has(frame.id)) {\n const sub = ws.data.subs.get(frame.id)!;\n ws.data.subs.delete(frame.id);\n if (sub.topic && !ws.data.closed) this.leave(ws, sub.topic);\n if (!ws.data.closed) deny(ws, frame.id, \"error\");\n }\n });\n return;\n case \"unsub\":\n this.unsubscribeFrame(ws, frame);\n return;\n default:\n ws.close(CloseCode.UnsupportedData, \"Unknown op.\");\n }\n }\n\n onClose(ws: GemiSocket) {\n const data = ws.data;\n if (data.closed) return;\n data.closed = true;\n for (const [, sub] of data.subs) {\n if (sub.topic) this.leave(ws, sub.topic);\n }\n data.subs.clear();\n this.sockets.delete(ws);\n if (data.reservation) {\n this.release(data.reservation);\n data.reservation = null;\n }\n if (this.closing && this.sockets.size === 0) this.onAllClosed?.();\n }\n\n private rateWindow(ws: GemiSocket) {\n const rate = ws.data.rate;\n const now = Date.now();\n if (now - rate.windowStart >= this.config.subscribeRate.windowMs) {\n rate.windowStart = now;\n rate.subs = 0;\n rate.pings = 0;\n }\n return rate;\n }\n\n /**\n * Counts a `sub`. Only `sub` frames count: an `unsub` costs the server\n * nothing to speak of, and counting it would charge a component's every\n * mount and unmount twice.\n */\n private countSub(ws: GemiSocket): \"ok\" | \"limited\" | \"closed\" {\n const { limit } = this.config.subscribeRate;\n const rate = this.rateWindow(ws);\n rate.subs++;\n if (rate.subs > limit * 2) {\n console.warn(`[gemi] Socket closed for sending too many subscribe frames (1008).`);\n ws.close(CloseCode.PolicyViolation, \"Too many subscribe frames.\");\n return \"closed\";\n }\n return rate.subs > limit ? \"limited\" : \"ok\";\n }\n\n /** `false` when the socket was closed for pinging too often. */\n private countPing(ws: GemiSocket): boolean {\n const rate = this.rateWindow(ws);\n rate.pings++;\n if (rate.pings <= PING_LIMIT_PER_WINDOW) return true;\n ws.close(CloseCode.PolicyViolation, \"Too many pings.\");\n return false;\n }\n\n private async subscribe(ws: GemiSocket, frame: Record<string, unknown>) {\n const data = ws.data;\n const id = frame.id;\n if (typeof id !== \"string\" || !SUBSCRIPTION_ID.test(id)) {\n ws.close(CloseCode.UnsupportedData, \"A sub needs an id.\");\n return;\n }\n const rate = this.countSub(ws);\n if (rate === \"closed\") return;\n if (rate === \"limited\") return deny(ws, id, \"rate_limited\");\n const pattern = frame.ch;\n const params = frame.p ?? {};\n if (typeof pattern !== \"string\" || !isParams(params)) return deny(ws, id, \"invalid\");\n if (data.subs.has(id)) return deny(ws, id, \"invalid\");\n if (data.subs.size >= this.config.maxChannelsPerSocket) return deny(ws, id, \"limit\");\n\n const sub: Subscription = { pattern, params, topic: null };\n data.subs.set(id, sub);\n if (!this.manager.channels) {\n data.subs.delete(id);\n return deny(ws, id, \"unknown_channel\");\n }\n\n // A revocation of the topic committed while the authorization ran may\n // not have been seen by it: authorize again until none has.\n let result: AuthorizeResult;\n for (let attempt = 1; ; attempt++) {\n const seq = this.revocationSeq;\n result = await this.authorize(ws, sub);\n // Unsubscribed, or the socket closed, while it was being authorized.\n if (data.closed || data.subs.get(id) !== sub) return;\n if (result.ok !== true) break;\n if ((this.revokedAt.get(result.topic) ?? 0) <= seq) break;\n if (attempt >= MAX_AUTHORIZE_ATTEMPTS) {\n data.subs.delete(id);\n return deny(ws, id, \"error\");\n }\n }\n if (result.ok !== true) {\n data.subs.delete(id);\n return deny(ws, id, (result as { code: DeniedCode }).code);\n }\n\n sub.topic = result.topic;\n try {\n await this.join(ws, result.topic);\n } catch (error) {\n console.error(\n `[gemi] The broadcast driver could not subscribe to \"${result.topic}\".`,\n error,\n );\n if (data.subs.get(id) === sub) {\n data.subs.delete(id);\n if (!data.closed) this.leave(ws, result.topic);\n deny(ws, id, \"error\");\n }\n return;\n }\n if (data.closed || data.subs.get(id) !== sub) return;\n // Only now: the driver delivers this topic to this process, so the\n // resync the client runs on this ack cannot miss an event.\n send(ws, { op: \"subscribed\", id, t: result.topic });\n }\n\n /** Runs the channel's authorization for `sub`, as the socket's upgrade request. */\n private authorize(ws: GemiSocket, sub: Subscription): Promise<AuthorizeResult> {\n const data = ws.data;\n const channels = this.manager.channels;\n if (!channels) return Promise.resolve({ ok: false, code: \"unknown_channel\" });\n return this.run(() =>\n channels.authorize(\n new Request(data.request.url, { headers: data.request.headers }),\n sub.pattern,\n sub.params,\n { carried: data.carried },\n ),\n ) as Promise<AuthorizeResult>;\n }\n\n private unsubscribeFrame(ws: GemiSocket, frame: Record<string, unknown>) {\n const id = frame.id;\n if (typeof id !== \"string\" || !SUBSCRIPTION_ID.test(id)) {\n ws.close(CloseCode.UnsupportedData, \"An unsub needs an id.\");\n return;\n }\n const sub = ws.data.subs.get(id);\n if (!sub) return;\n ws.data.subs.delete(id);\n if (sub.topic) this.leave(ws, sub.topic);\n }\n\n /** Puts `ws` on `topic`, and resolves once the driver delivers the topic here. */\n private join(ws: GemiSocket, topic: string): Promise<void> {\n const data = ws.data;\n const count = data.topics.get(topic) ?? 0;\n data.topics.set(topic, count + 1);\n if (count === 0) {\n ws.subscribe(topic);\n let set = this.byTopic.get(topic);\n if (!set) {\n set = new Set();\n this.byTopic.set(topic, set);\n const ready = Promise.resolve().then(() => this.manager.topicAdded(topic));\n this.topicReady.set(topic, ready);\n // A failed `topicAdded` is not cached: the next join tries again.\n ready.catch(() => {\n if (this.topicReady.get(topic) === ready) this.topicReady.delete(topic);\n });\n }\n set.add(ws);\n }\n return this.topicReady.get(topic) ?? Promise.resolve();\n }\n\n private leave(ws: GemiSocket, topic: string) {\n const data = ws.data;\n const count = data.topics.get(topic) ?? 0;\n if (count > 1) {\n data.topics.set(topic, count - 1);\n return;\n }\n data.topics.delete(topic);\n if (!data.closed) ws.unsubscribe(topic);\n const set = this.byTopic.get(topic);\n if (!set) return;\n set.delete(ws);\n if (set.size > 0) return;\n this.byTopic.delete(topic);\n this.topicReady.delete(topic);\n Promise.resolve()\n .then(() => this.manager.topicRemoved(topic))\n .catch((error) =>\n console.error(`[gemi] The broadcast driver could not unsubscribe from \"${topic}\".`, error),\n );\n }\n\n /**\n * The driver's delivery for this process. A socket already over the\n * backpressure limit is closed first (1013): it would only fall further\n * behind, and its client recovers by reconnecting and refetching.\n */\n deliver(topic: string, frame: string) {\n const set = this.byTopic.get(topic);\n if (!set || !this.server) return;\n const limit = this.config.backpressureLimit;\n for (const ws of set) {\n if (!ws.data.closing && ws.getBufferedAmount() > limit) {\n console.warn(`[gemi] Socket closed for backpressure (1013) on \"${topic}\".`);\n closeSocket(ws, CloseCode.TryAgainLater, \"Too far behind; reconnect.\");\n }\n }\n this.server.publish(topic, frame);\n }\n\n /**\n * The driver may have lost frames, revocations included (a Redis\n * subscriber that reconnected). Clients are told to resync, and every\n * subscription is authorized again, as after `revoke({ channel })`, so\n * one whose access a missed revocation ended is denied. Spread over\n * `GAP_REAUTHORIZE_SPREAD_MS`, so a Redis blip does not send every\n * authorization to the database at once.\n */\n private onGap() {\n this.sendAll({ op: \"gap\" });\n for (const topic of this.byTopic.keys()) {\n const delay = Math.floor(Math.random() * GAP_REAUTHORIZE_SPREAD_MS);\n const timer = setTimeout(() => {\n if (!this.closing) this.applyRevocation({ topic });\n }, delay);\n (timer as { unref?: () => void }).unref?.();\n }\n }\n\n /** Applies a revocation that reached this process. */\n applyRevocation(revocation: BroadcastRevocation) {\n if (\"user\" in revocation) {\n for (const ws of this.sockets) {\n if (ws.data.userId === revocation.user && !ws.data.closing) {\n closeSocket(ws, CloseCode.Revoked, \"Revoked.\");\n }\n }\n return;\n }\n const topic = revocation.topic;\n const seq = ++this.revocationSeq;\n this.revokedAt.set(topic, seq);\n const set = this.byTopic.get(topic);\n if (!set) return;\n for (const ws of set) void this.reauthorize(ws, topic, seq);\n }\n\n /**\n * After `revoke({ channel })`: every subscription `ws` has on `topic` is\n * authorized again, as the socket's upgrade request. The ones refused are\n * denied with `revoked`; the others stay, and get a fresh `subscribed` so\n * the client resyncs whatever was published while the topic was paused.\n * The socket receives nothing on the topic until the answers are in.\n */\n private async reauthorize(ws: GemiSocket, topic: string, seq: number) {\n const data = ws.data;\n const subs = [...data.subs].filter(([, sub]) => sub.topic === topic);\n if (subs.length === 0) return;\n ws.unsubscribe(topic);\n const results = await Promise.all(\n subs.map(([, sub]) =>\n this.authorize(ws, sub).catch((error) => {\n console.error(`[gemi] Authorizing \"${topic}\" again after a revoke failed.`, error);\n return { ok: false, code: \"revoked\" } as AuthorizeResult;\n }),\n ),\n );\n if (data.closed) return;\n // A later revocation of the topic runs its own pass, and decides.\n if (this.revokedAt.get(topic) !== seq) return;\n subs.forEach(([id, sub], index) => {\n const result = results[index];\n if (data.subs.get(id) !== sub) return;\n if (result.ok === true && result.topic === topic) return;\n data.subs.delete(id);\n this.leave(ws, topic);\n deny(ws, id, \"revoked\");\n });\n if (!data.topics.has(topic)) return;\n ws.subscribe(topic);\n for (const [id, sub] of data.subs) {\n if (sub.topic === topic) send(ws, { op: \"subscribed\", id, t: topic });\n }\n }\n\n private sendAll(frame: ServerFrame) {\n const text = JSON.stringify(frame);\n for (const ws of this.sockets) ws.send(text);\n }\n\n /**\n * Stops accepting sockets and says `bye` to every open one, with a\n * jittered `retryAfter` (1–5 s) so a restart's reconnects do not arrive at\n * once, then closes them (1012). Sockets that have not closed after\n * `terminateAfterMs` are cut. Idempotent.\n *\n * Resolves once every socket has closed, or at `terminateAfterMs` when the\n * rest were cut: by the hub's own count, which the drain waits on instead\n * of Bun's (on a loaded CI runner, Bun's graceful `stop()` was seen to wait\n * on terminated sockets for good).\n */\n shutdown(options: { terminateAfterMs?: number } = {}): Promise<void> {\n if (this.closed) return this.closed;\n this.closing = true;\n this.closed = new Promise<void>((resolve) => {\n this.onAllClosed = resolve;\n });\n const sockets = [...this.sockets];\n if (sockets.length === 0) this.onAllClosed?.();\n if (sockets.length > 0) {\n console.log(`[gemi] Closing ${sockets.length} broadcast socket(s) (1012).`);\n }\n for (const ws of sockets) this.sayBye(ws);\n // Every one of them, closed or not: a socket whose close frame was\n // answered can still hold the connection open, and a graceful\n // `server.stop()` waits on it.\n const timer = setTimeout(() => {\n for (const ws of sockets) {\n try {\n ws.terminate();\n } catch {\n // Already gone.\n }\n }\n this.onAllClosed?.();\n }, options.terminateAfterMs ?? 2_000);\n (timer as { unref?: () => void }).unref?.();\n return this.closed;\n }\n\n /** Whether `shutdown` ran. */\n get isClosing(): boolean {\n return this.closing;\n }\n\n private sayBye(ws: GemiSocket) {\n send(ws, {\n op: \"bye\",\n code: CloseCode.Restart,\n retryAfter: 1_000 + Math.floor(Math.random() * 4_000),\n });\n closeSocket(ws, CloseCode.Restart, \"Server restarting.\");\n }\n\n /** In the application's scope, as a request is: facades resolve from it. */\n private run<T>(fn: () => T): T {\n return kernelContext.run(this.application, fn);\n }\n}\n\ntype AuthorizeResult = { ok: true; topic: string } | { ok: false; code: DeniedCode };\n\n/**\n * Whether an `allowedOrigins` entry (or `APP_URL` / `HOST_NAME`) admits\n * `url`. An entry is an origin (`https://app.example.com`), a bare host\n * (`app.example.com`), or a wildcard for the subdomains of a host\n * (`*.example.com`, `https://*.example.com`), which does not admit the host\n * itself.\n */\nexport function originMatches(allowed: string, url: URL): boolean {\n const wildcard = /^(?:(https?):\\/\\/)?\\*\\.([^/:]+)(?::(\\d+))?\\/?$/i.exec(allowed);\n if (wildcard) {\n const [, scheme, base, port] = wildcard;\n if (scheme && `${scheme.toLowerCase()}:` !== url.protocol) return false;\n if ((port ?? \"\") !== url.port) return false;\n return url.hostname.toLowerCase().endsWith(`.${base.toLowerCase().replace(/\\.$/, \"\")}`);\n }\n if (/^https?:\\/\\//i.test(allowed)) {\n try {\n return new URL(allowed).origin === url.origin;\n } catch {\n return false;\n }\n }\n // A bare host.\n return allowed.toLowerCase().replace(/\\/$/, \"\") === url.host.toLowerCase();\n}\n\nfunction closeSocket(ws: GemiSocket, code: number, reason: string) {\n ws.data.closing = true;\n ws.close(code, reason);\n}\n\nfunction send(ws: GemiSocket, frame: ServerFrame) {\n ws.send(JSON.stringify(frame));\n}\n\nfunction deny(ws: GemiSocket, id: string, code: DeniedCode) {\n send(ws, { op: \"denied\", id, code });\n}\n\nfunction refuse(status: number, message: string, headers: Record<string, string> = {}) {\n return new Response(message, {\n status,\n headers: { \"Content-Type\": \"text/plain; charset=utf-8\", ...headers },\n });\n}\n\nfunction isParams(value: unknown): value is Record<string, string | number> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return false;\n return Object.values(value).every((v) => typeof v === \"string\" || typeof v === \"number\");\n}\n\nfunction userIdOf(user: unknown): string | null {\n const id = (user as { id?: unknown } | null)?.id;\n return typeof id === \"string\" || typeof id === \"number\" ? String(id) : null;\n}\n\n/**\n * The client address: what the production server left in `X-Forwarded-For`\n * (see `forwardedFor.ts`), or the socket's peer.\n */\nfunction clientIp(req: Request, server: Server<any>): string | null {\n const forwarded = req.headers.get(\"x-forwarded-for\")?.split(\",\")[0]?.trim();\n if (forwarded) return forwarded;\n try {\n return server.requestIP(req)?.address ?? null;\n } catch {\n return null;\n }\n}\n\nfunction decrement(map: Map<string, number>, key: string | null) {\n if (!key) return;\n const count = (map.get(key) ?? 0) - 1;\n if (count <= 0) map.delete(key);\n else map.set(key, count);\n}\n",
|
|
14
|
+
"import type { Server, ServerWebSocket, WebSocketHandler } from \"bun\";\n\nimport type { Application } from \"../../foundation/Application\";\nimport { signedInUser } from \"../../http/ChannelRouter\";\nimport { normalizeIpEntry } from \"../../http/clientAddress\";\nimport { HttpRequest } from \"../../http/HttpRequest\";\nimport { type CarriedContext, RequestContext } from \"../../http/requestContext\";\nimport { kernelContext } from \"../../kernel/context\";\nimport { isShuttingDown } from \"../../server/shutdown\";\nimport { runGlobalMiddleware } from \"../router/globalMiddleware\";\nimport type { BroadcastRevocation } from \"./BroadcastDriver\";\nimport type { BroadcastManager } from \"./BroadcastManager\";\nimport {\n BROADCAST_PROTOCOL,\n CloseCode,\n SUBSCRIPTION_ID,\n type DeniedCode,\n type ServerFrame,\n} from \"./protocol\";\nimport { newSocketId, socketTag } from \"./socketTag\";\n\n/** What the hub keeps on each of its sockets (`ws.data`). */\nexport interface GemiSocketData {\n /** Marks a broadcast socket, as opposed to the dev server's HMR relay. */\n readonly gemiSocket: true;\n /** The hub that accepted it. After a dev reload that may not be the current one. */\n readonly hub: SocketHub;\n readonly socketId: string;\n readonly tag: string;\n /** The upgrade request, kept to rebuild a request context for every `sub`. */\n readonly request: { url: string; headers: [string, string][] };\n /** What the global middleware resolved for the upgrade: its user. */\n readonly carried: CarriedContext | null;\n /** The signed-in user's id at the upgrade, for limits and `revoke({ user })`. */\n readonly userId: string | null;\n readonly ip: string | null;\n /** Subscription id → its topic, `null` while it is being authorized. */\n readonly subs: Map<string, Subscription>;\n /** Topic → how many of this socket's subscriptions are on it. */\n readonly topics: Map<string, number>;\n rate: { windowStart: number; subs: number; pings: number };\n /**\n * The process, IP and user connection counts this socket holds. Taken\n * before the upgrade's first `await`, so concurrent upgrades cannot\n * overshoot the caps, and given back exactly once.\n */\n reservation: Reservation | null;\n /** The hub has closed it (backpressure, revoke, bye); its close is on the way. */\n closing: boolean;\n closed: boolean;\n}\n\ninterface Subscription {\n pattern: string;\n params: Record<string, string | number>;\n topic: string | null;\n}\n\ninterface Reservation {\n ip: string | null;\n userId: string | null;\n}\n\n/** Pings a socket may send per `subscribeRate` window before it is closed (1008). */\nconst PING_LIMIT_PER_WINDOW = 120;\n/** Over how long the re-authorizations after a `gap` are spread. */\nconst GAP_REAUTHORIZE_SPREAD_MS = 2_000;\n/** How often a subscription is authorized again when revocations keep landing. */\nconst MAX_AUTHORIZE_ATTEMPTS = 3;\n\ntype GemiSocket = ServerWebSocket<GemiSocketData>;\n\n/**\n * The WebSocket side of broadcasting, one per HTTP server process: accepts\n * upgrades on the configured path, speaks the `gemi.v1` protocol (see\n * `protocol.ts`), authorizes every subscription through the app's\n * `ChannelRouter`, and delivers what the driver hands it with\n * `server.publish`.\n *\n * Nothing here keeps a queue or a log. A socket that falls behind is closed\n * (`1013`), one whose user signs out is closed (`4001`), and a server that\n * stops says `bye` (`1012`); in every case the client reconnects and\n * refetches what it shows.\n */\nexport class SocketHub {\n static token = \"broadcast.sockets\";\n\n private server: Server<GemiSocketData> | null = null;\n private readonly sockets = new Set<GemiSocket>();\n private readonly byTopic = new Map<string, Set<GemiSocket>>();\n private readonly topicReady = new Map<string, Promise<void>>();\n private readonly perIp = new Map<string, number>();\n private readonly perUser = new Map<string, number>();\n /** Sockets held or being upgraded: the process cap's count. */\n private connections = 0;\n /** Bumped by every topic revocation; see `revokedAt`. */\n private revocationSeq = 0;\n /** Topic → the `revocationSeq` of its last revocation. */\n private readonly revokedAt = new Map<string, number>();\n private closing = false;\n /** Resolves once every socket `shutdown` closed is gone, or was cut. */\n private closed: Promise<void> | null = null;\n private onAllClosed: (() => void) | null = null;\n private startPromise: Promise<void> | null = null;\n\n constructor(\n private readonly manager: BroadcastManager,\n private readonly application: Application,\n ) {}\n\n private get config() {\n return this.manager.config;\n }\n\n /** Whether `req` is for the socket endpoint (an upgrade or not). */\n matches(req: Request): boolean {\n try {\n return new URL(req.url).pathname === this.config.path;\n } catch {\n return false;\n }\n }\n\n /** Sockets open on this process. */\n get size(): number {\n return this.sockets.size;\n }\n\n /**\n * Starts delivering: the driver's frames for this process go out with\n * `server.publish`. Call once the server is listening.\n */\n start(server: Server<any>): Promise<void> {\n this.server = server as Server<GemiSocketData>;\n this.startPromise ??= this.manager\n .start((topic, frame) => this.deliver(topic, frame), {\n onGap: () => this.onGap(),\n onRevoke: (revocation) => this.applyRevocation(revocation),\n })\n .catch((error) => {\n this.startPromise = null;\n console.error(\"[gemi] The broadcast driver could not start; events reach no socket.\", error);\n });\n return this.startPromise;\n }\n\n /**\n * Answers a request for the socket endpoint: upgrades it, or refuses it\n * with a status saying why. `undefined` once Bun has taken it over.\n */\n upgrade(req: Request, server: Server<any>): Promise<Response | undefined> {\n return this.run(() => this.tryUpgrade(req, server as Server<GemiSocketData>));\n }\n\n private async tryUpgrade(\n req: Request,\n server: Server<GemiSocketData>,\n ): Promise<Response | undefined> {\n if (this.closing || isShuttingDown()) {\n return refuse(503, \"The server is restarting.\", { \"Retry-After\": \"5\" });\n }\n if (req.method !== \"GET\" || req.headers.get(\"upgrade\")?.toLowerCase() !== \"websocket\") {\n return refuse(426, \"This endpoint only accepts WebSocket upgrades.\", {\n Upgrade: \"websocket\",\n });\n }\n const protocols = (req.headers.get(\"sec-websocket-protocol\") ?? \"\")\n .split(\",\")\n .map((protocol) => protocol.trim());\n if (!protocols.includes(BROADCAST_PROTOCOL)) {\n return refuse(400, `Open the socket with the \"${BROADCAST_PROTOCOL}\" subprotocol.`);\n }\n const origin = this.checkOrigin(req);\n if (origin !== true) return refuse(403, origin);\n if (this.connections >= this.config.maxConnectionsPerProcess) {\n return refuse(503, \"Too many connections.\", { \"Retry-After\": \"10\" });\n }\n const ip = clientIp(req, server);\n if (ip && (this.perIp.get(ip) ?? 0) >= this.config.maxConnectionsPerIp) {\n return refuse(429, \"Too many connections from this address.\", { \"Retry-After\": \"30\" });\n }\n // Counted now, before the first `await`: checks made while another\n // upgrade's middleware or session lookup is pending see it.\n const reservation = this.reserve(ip);\n let handedOver = false;\n try {\n const response = await this.authenticate(req, server, reservation);\n handedOver = response === undefined;\n return response;\n } finally {\n if (!handedOver) this.release(reservation);\n }\n }\n\n private async authenticate(\n req: Request,\n server: Server<GemiSocketData>,\n reservation: Reservation,\n ): Promise<Response | undefined> {\n // The global middleware covers the endpoint as it covers every route: a\n // gate that refuses a request refuses its socket.\n const outcome = await runGlobalMiddleware(req);\n if (outcome.refusal) return outcome.refusal;\n const carried = outcome.carried;\n if (this.closing || isShuttingDown()) {\n return refuse(503, \"The server is restarting.\", { \"Retry-After\": \"5\" });\n }\n\n let user: unknown;\n try {\n const httpRequest = new HttpRequest(req, {}, \"api\", this.config.path);\n user = await RequestContext.run(\n httpRequest,\n async () => {\n const ctx = RequestContext.getStore();\n try {\n return await signedInUser(httpRequest);\n } finally {\n ctx.destroy();\n }\n },\n carried,\n );\n } catch (error) {\n console.error(\"[gemi] Resolving the session of a socket upgrade failed.\", error);\n return refuse(503, \"The session could not be checked.\", { \"Retry-After\": \"5\" });\n }\n const userId = userIdOf(user);\n if (userId && (this.perUser.get(userId) ?? 0) >= this.config.maxConnectionsPerUser) {\n return refuse(429, \"Too many connections for this user.\", { \"Retry-After\": \"30\" });\n }\n if (userId) {\n reservation.userId = userId;\n this.perUser.set(userId, (this.perUser.get(userId) ?? 0) + 1);\n }\n\n const socketId = newSocketId();\n const data: GemiSocketData = {\n gemiSocket: true,\n hub: this,\n socketId,\n tag: socketTag(socketId),\n request: { url: req.url, headers: [...req.headers] },\n carried,\n userId,\n ip: reservation.ip,\n subs: new Map(),\n topics: new Map(),\n rate: { windowStart: Date.now(), subs: 0, pings: 0 },\n reservation,\n closing: false,\n closed: false,\n };\n const upgraded = server.upgrade(req, {\n headers: { \"Sec-WebSocket-Protocol\": BROADCAST_PROTOCOL },\n data,\n });\n if (!upgraded) return refuse(400, \"The WebSocket upgrade failed.\");\n return undefined;\n }\n\n /**\n * `true`, or why the upgrade is refused. A browser always sends `Origin` on\n * a WebSocket upgrade, and cookies ride along with it whatever the page\n * that opened it, so an upgrade carrying cookies must come from an allowed\n * origin and one without `Origin` is refused. A native client sends its\n * token in a header and no cookies, and may leave `Origin` out.\n */\n private checkOrigin(req: Request): true | string {\n const origin = req.headers.get(\"origin\");\n const hasCookies = Boolean(req.headers.get(\"cookie\"));\n if (!origin) {\n return hasCookies ? \"A socket that carries cookies must send an Origin header.\" : true;\n }\n return this.originAllowed(origin, req) ? true : \"This origin may not open a socket.\";\n }\n\n /** Whether `origin` may open a socket. */\n originAllowed(origin: string, req: Request): boolean {\n let url: URL;\n try {\n url = new URL(origin);\n } catch {\n return false;\n }\n if (url.protocol !== \"https:\" && url.protocol !== \"http:\") return false;\n // The request's own host: the page and the socket share an origin.\n const host = req.headers.get(\"host\");\n if (host && url.host.toLowerCase() === host.toLowerCase()) return true;\n // Subdomains are never implied, `route.domains` ones included: those\n // serve tenant content, are same-site with the app (so its cookies ride\n // along), and a WebSocket has no CORS. A wildcard entry opts in.\n for (const allowed of [\n process.env.APP_URL,\n process.env.HOST_NAME,\n ...this.config.allowedOrigins,\n ]) {\n if (allowed && originMatches(allowed.trim(), url)) return true;\n }\n return false;\n }\n\n private reserve(ip: string | null): Reservation {\n this.connections++;\n if (ip) this.perIp.set(ip, (this.perIp.get(ip) ?? 0) + 1);\n return { ip, userId: null };\n }\n\n private release(reservation: Reservation) {\n this.connections--;\n decrement(this.perIp, reservation.ip);\n decrement(this.perUser, reservation.userId);\n }\n\n /** `Bun.serve`'s `websocket` option. */\n get websocket(): WebSocketHandler<GemiSocketData> {\n return {\n open: (ws) => ws.data.hub.onOpen(ws),\n message: (ws, message) => ws.data.hub.onMessage(ws, message),\n close: (ws) => ws.data.hub.onClose(ws),\n ...this.socketOptions(),\n };\n }\n\n /** The server-wide socket settings, also for a handler shared with HMR in dev. */\n socketOptions() {\n return {\n maxPayloadLength: this.config.maxInboundMessageBytes,\n idleTimeout: this.config.idleTimeout,\n // The hub closes a socket over `backpressureLimit` with 1013 at its\n // next delivery; Bun's own limit, at twice that, is the backstop for a\n // burst between two deliveries (Bun closes with 1006).\n backpressureLimit: this.config.backpressureLimit * 2,\n closeOnBackpressureLimit: true,\n sendPings: true,\n perMessageDeflate: false,\n } as const;\n }\n\n onOpen(ws: GemiSocket) {\n const data = ws.data;\n if (this.closing) {\n this.sayBye(ws);\n return;\n }\n this.sockets.add(ws);\n send(ws, {\n op: \"hello\",\n socketId: data.socketId,\n tag: data.tag,\n heartbeatMs: this.config.heartbeatMs,\n });\n }\n\n onMessage(ws: GemiSocket, message: string | Buffer) {\n if (typeof message !== \"string\") {\n ws.close(CloseCode.UnsupportedData, \"Frames are JSON text.\");\n return;\n }\n if (message.length > this.config.maxInboundMessageBytes) {\n ws.close(CloseCode.PolicyViolation, \"Frame too large.\");\n return;\n }\n let frame: any;\n try {\n frame = JSON.parse(message);\n } catch {\n ws.close(CloseCode.UnsupportedData, \"Frames are JSON text.\");\n return;\n }\n switch (frame?.op) {\n case \"ping\":\n if (this.countPing(ws)) send(ws, { op: \"pong\" });\n return;\n case \"sub\":\n this.subscribe(ws, frame).catch((error) => {\n console.error(\"[gemi] A socket subscription failed.\", error);\n if (typeof frame.id === \"string\" && ws.data.subs.has(frame.id)) {\n const sub = ws.data.subs.get(frame.id)!;\n ws.data.subs.delete(frame.id);\n if (sub.topic && !ws.data.closed) this.leave(ws, sub.topic);\n if (!ws.data.closed) deny(ws, frame.id, \"error\");\n }\n });\n return;\n case \"unsub\":\n this.unsubscribeFrame(ws, frame);\n return;\n default:\n ws.close(CloseCode.UnsupportedData, \"Unknown op.\");\n }\n }\n\n onClose(ws: GemiSocket) {\n const data = ws.data;\n if (data.closed) return;\n data.closed = true;\n for (const [, sub] of data.subs) {\n if (sub.topic) this.leave(ws, sub.topic);\n }\n data.subs.clear();\n this.sockets.delete(ws);\n if (data.reservation) {\n this.release(data.reservation);\n data.reservation = null;\n }\n if (this.closing && this.sockets.size === 0) this.onAllClosed?.();\n }\n\n private rateWindow(ws: GemiSocket) {\n const rate = ws.data.rate;\n const now = Date.now();\n if (now - rate.windowStart >= this.config.subscribeRate.windowMs) {\n rate.windowStart = now;\n rate.subs = 0;\n rate.pings = 0;\n }\n return rate;\n }\n\n /**\n * Counts a `sub`. Only `sub` frames count: an `unsub` costs the server\n * nothing to speak of, and counting it would charge a component's every\n * mount and unmount twice.\n */\n private countSub(ws: GemiSocket): \"ok\" | \"limited\" | \"closed\" {\n const { limit } = this.config.subscribeRate;\n const rate = this.rateWindow(ws);\n rate.subs++;\n if (rate.subs > limit * 2) {\n console.warn(`[gemi] Socket closed for sending too many subscribe frames (1008).`);\n ws.close(CloseCode.PolicyViolation, \"Too many subscribe frames.\");\n return \"closed\";\n }\n return rate.subs > limit ? \"limited\" : \"ok\";\n }\n\n /** `false` when the socket was closed for pinging too often. */\n private countPing(ws: GemiSocket): boolean {\n const rate = this.rateWindow(ws);\n rate.pings++;\n if (rate.pings <= PING_LIMIT_PER_WINDOW) return true;\n ws.close(CloseCode.PolicyViolation, \"Too many pings.\");\n return false;\n }\n\n private async subscribe(ws: GemiSocket, frame: Record<string, unknown>) {\n const data = ws.data;\n const id = frame.id;\n if (typeof id !== \"string\" || !SUBSCRIPTION_ID.test(id)) {\n ws.close(CloseCode.UnsupportedData, \"A sub needs an id.\");\n return;\n }\n const rate = this.countSub(ws);\n if (rate === \"closed\") return;\n if (rate === \"limited\") return deny(ws, id, \"rate_limited\");\n const pattern = frame.ch;\n const params = frame.p ?? {};\n if (typeof pattern !== \"string\" || !isParams(params)) return deny(ws, id, \"invalid\");\n if (data.subs.has(id)) return deny(ws, id, \"invalid\");\n if (data.subs.size >= this.config.maxChannelsPerSocket) return deny(ws, id, \"limit\");\n\n const sub: Subscription = { pattern, params, topic: null };\n data.subs.set(id, sub);\n if (!this.manager.channels) {\n data.subs.delete(id);\n return deny(ws, id, \"unknown_channel\");\n }\n\n // A revocation of the topic committed while the authorization ran may\n // not have been seen by it: authorize again until none has.\n let result: AuthorizeResult;\n for (let attempt = 1; ; attempt++) {\n const seq = this.revocationSeq;\n result = await this.authorize(ws, sub);\n // Unsubscribed, or the socket closed, while it was being authorized.\n if (data.closed || data.subs.get(id) !== sub) return;\n if (result.ok !== true) break;\n if ((this.revokedAt.get(result.topic) ?? 0) <= seq) break;\n if (attempt >= MAX_AUTHORIZE_ATTEMPTS) {\n data.subs.delete(id);\n return deny(ws, id, \"error\");\n }\n }\n if (result.ok !== true) {\n data.subs.delete(id);\n return deny(ws, id, (result as { code: DeniedCode }).code);\n }\n\n sub.topic = result.topic;\n try {\n await this.join(ws, result.topic);\n } catch (error) {\n console.error(\n `[gemi] The broadcast driver could not subscribe to \"${result.topic}\".`,\n error,\n );\n if (data.subs.get(id) === sub) {\n data.subs.delete(id);\n if (!data.closed) this.leave(ws, result.topic);\n deny(ws, id, \"error\");\n }\n return;\n }\n if (data.closed || data.subs.get(id) !== sub) return;\n // Only now: the driver delivers this topic to this process, so the\n // resync the client runs on this ack cannot miss an event.\n send(ws, { op: \"subscribed\", id, t: result.topic });\n }\n\n /** Runs the channel's authorization for `sub`, as the socket's upgrade request. */\n private authorize(ws: GemiSocket, sub: Subscription): Promise<AuthorizeResult> {\n const data = ws.data;\n const channels = this.manager.channels;\n if (!channels) return Promise.resolve({ ok: false, code: \"unknown_channel\" });\n return this.run(() =>\n channels.authorize(\n new Request(data.request.url, { headers: data.request.headers }),\n sub.pattern,\n sub.params,\n { carried: data.carried },\n ),\n ) as Promise<AuthorizeResult>;\n }\n\n private unsubscribeFrame(ws: GemiSocket, frame: Record<string, unknown>) {\n const id = frame.id;\n if (typeof id !== \"string\" || !SUBSCRIPTION_ID.test(id)) {\n ws.close(CloseCode.UnsupportedData, \"An unsub needs an id.\");\n return;\n }\n const sub = ws.data.subs.get(id);\n if (!sub) return;\n ws.data.subs.delete(id);\n if (sub.topic) this.leave(ws, sub.topic);\n }\n\n /** Puts `ws` on `topic`, and resolves once the driver delivers the topic here. */\n private join(ws: GemiSocket, topic: string): Promise<void> {\n const data = ws.data;\n const count = data.topics.get(topic) ?? 0;\n data.topics.set(topic, count + 1);\n if (count === 0) {\n ws.subscribe(topic);\n let set = this.byTopic.get(topic);\n if (!set) {\n set = new Set();\n this.byTopic.set(topic, set);\n const ready = Promise.resolve().then(() => this.manager.topicAdded(topic));\n this.topicReady.set(topic, ready);\n // A failed `topicAdded` is not cached: the next join tries again.\n ready.catch(() => {\n if (this.topicReady.get(topic) === ready) this.topicReady.delete(topic);\n });\n }\n set.add(ws);\n }\n return this.topicReady.get(topic) ?? Promise.resolve();\n }\n\n private leave(ws: GemiSocket, topic: string) {\n const data = ws.data;\n const count = data.topics.get(topic) ?? 0;\n if (count > 1) {\n data.topics.set(topic, count - 1);\n return;\n }\n data.topics.delete(topic);\n if (!data.closed) ws.unsubscribe(topic);\n const set = this.byTopic.get(topic);\n if (!set) return;\n set.delete(ws);\n if (set.size > 0) return;\n this.byTopic.delete(topic);\n this.topicReady.delete(topic);\n Promise.resolve()\n .then(() => this.manager.topicRemoved(topic))\n .catch((error) =>\n console.error(`[gemi] The broadcast driver could not unsubscribe from \"${topic}\".`, error),\n );\n }\n\n /**\n * The driver's delivery for this process. A socket already over the\n * backpressure limit is closed first (1013): it would only fall further\n * behind, and its client recovers by reconnecting and refetching.\n */\n deliver(topic: string, frame: string) {\n const set = this.byTopic.get(topic);\n if (!set || !this.server) return;\n const limit = this.config.backpressureLimit;\n for (const ws of set) {\n if (!ws.data.closing && ws.getBufferedAmount() > limit) {\n console.warn(`[gemi] Socket closed for backpressure (1013) on \"${topic}\".`);\n closeSocket(ws, CloseCode.TryAgainLater, \"Too far behind; reconnect.\");\n }\n }\n this.server.publish(topic, frame);\n }\n\n /**\n * The driver may have lost frames, revocations included (a Redis\n * subscriber that reconnected). Clients are told to resync, and every\n * subscription is authorized again, as after `revoke({ channel })`, so\n * one whose access a missed revocation ended is denied. Spread over\n * `GAP_REAUTHORIZE_SPREAD_MS`, so a Redis blip does not send every\n * authorization to the database at once.\n */\n private onGap() {\n this.sendAll({ op: \"gap\" });\n for (const topic of this.byTopic.keys()) {\n const delay = Math.floor(Math.random() * GAP_REAUTHORIZE_SPREAD_MS);\n const timer = setTimeout(() => {\n if (!this.closing) this.applyRevocation({ topic });\n }, delay);\n (timer as { unref?: () => void }).unref?.();\n }\n }\n\n /** Applies a revocation that reached this process. */\n applyRevocation(revocation: BroadcastRevocation) {\n if (\"user\" in revocation) {\n for (const ws of this.sockets) {\n if (ws.data.userId === revocation.user && !ws.data.closing) {\n closeSocket(ws, CloseCode.Revoked, \"Revoked.\");\n }\n }\n return;\n }\n const topic = revocation.topic;\n const seq = ++this.revocationSeq;\n this.revokedAt.set(topic, seq);\n const set = this.byTopic.get(topic);\n if (!set) return;\n for (const ws of set) void this.reauthorize(ws, topic, seq);\n }\n\n /**\n * After `revoke({ channel })`: every subscription `ws` has on `topic` is\n * authorized again, as the socket's upgrade request. The ones refused are\n * denied with `revoked`; the others stay, and get a fresh `subscribed` so\n * the client resyncs whatever was published while the topic was paused.\n * The socket receives nothing on the topic until the answers are in.\n */\n private async reauthorize(ws: GemiSocket, topic: string, seq: number) {\n const data = ws.data;\n const subs = [...data.subs].filter(([, sub]) => sub.topic === topic);\n if (subs.length === 0) return;\n ws.unsubscribe(topic);\n const results = await Promise.all(\n subs.map(([, sub]) =>\n this.authorize(ws, sub).catch((error) => {\n console.error(`[gemi] Authorizing \"${topic}\" again after a revoke failed.`, error);\n return { ok: false, code: \"revoked\" } as AuthorizeResult;\n }),\n ),\n );\n if (data.closed) return;\n // A later revocation of the topic runs its own pass, and decides.\n if (this.revokedAt.get(topic) !== seq) return;\n subs.forEach(([id, sub], index) => {\n const result = results[index];\n if (data.subs.get(id) !== sub) return;\n if (result.ok === true && result.topic === topic) return;\n data.subs.delete(id);\n this.leave(ws, topic);\n deny(ws, id, \"revoked\");\n });\n if (!data.topics.has(topic)) return;\n ws.subscribe(topic);\n for (const [id, sub] of data.subs) {\n if (sub.topic === topic) send(ws, { op: \"subscribed\", id, t: topic });\n }\n }\n\n private sendAll(frame: ServerFrame) {\n const text = JSON.stringify(frame);\n for (const ws of this.sockets) ws.send(text);\n }\n\n /**\n * Stops accepting sockets and says `bye` to every open one, with a\n * jittered `retryAfter` (1–5 s) so a restart's reconnects do not arrive at\n * once, then closes them (1012). Sockets that have not closed after\n * `terminateAfterMs` are cut. Idempotent.\n *\n * Resolves once every socket has closed, or at `terminateAfterMs` when the\n * rest were cut: by the hub's own count, which the drain waits on instead\n * of Bun's (on a loaded CI runner, Bun's graceful `stop()` was seen to wait\n * on terminated sockets for good).\n */\n shutdown(options: { terminateAfterMs?: number } = {}): Promise<void> {\n if (this.closed) return this.closed;\n this.closing = true;\n this.closed = new Promise<void>((resolve) => {\n this.onAllClosed = resolve;\n });\n const sockets = [...this.sockets];\n if (sockets.length === 0) this.onAllClosed?.();\n if (sockets.length > 0) {\n console.log(`[gemi] Closing ${sockets.length} broadcast socket(s) (1012).`);\n }\n for (const ws of sockets) this.sayBye(ws);\n // Every one of them, closed or not: a socket whose close frame was\n // answered can still hold the connection open, and a graceful\n // `server.stop()` waits on it.\n const timer = setTimeout(() => {\n for (const ws of sockets) {\n try {\n ws.terminate();\n } catch {\n // Already gone.\n }\n }\n this.onAllClosed?.();\n }, options.terminateAfterMs ?? 2_000);\n (timer as { unref?: () => void }).unref?.();\n return this.closed;\n }\n\n /** Whether `shutdown` ran. */\n get isClosing(): boolean {\n return this.closing;\n }\n\n private sayBye(ws: GemiSocket) {\n send(ws, {\n op: \"bye\",\n code: CloseCode.Restart,\n retryAfter: 1_000 + Math.floor(Math.random() * 4_000),\n });\n closeSocket(ws, CloseCode.Restart, \"Server restarting.\");\n }\n\n /** In the application's scope, as a request is: facades resolve from it. */\n private run<T>(fn: () => T): T {\n return kernelContext.run(this.application, fn);\n }\n}\n\ntype AuthorizeResult = { ok: true; topic: string } | { ok: false; code: DeniedCode };\n\n/**\n * Whether an `allowedOrigins` entry (or `APP_URL` / `HOST_NAME`) admits\n * `url`. An entry is an origin (`https://app.example.com`), a bare host\n * (`app.example.com`), or a wildcard for the subdomains of a host\n * (`*.example.com`, `https://*.example.com`), which does not admit the host\n * itself.\n */\nexport function originMatches(allowed: string, url: URL): boolean {\n const wildcard = /^(?:(https?):\\/\\/)?\\*\\.([^/:]+)(?::(\\d+))?\\/?$/i.exec(allowed);\n if (wildcard) {\n const [, scheme, base, port] = wildcard;\n if (scheme && `${scheme.toLowerCase()}:` !== url.protocol) return false;\n if ((port ?? \"\") !== url.port) return false;\n return url.hostname.toLowerCase().endsWith(`.${base.toLowerCase().replace(/\\.$/, \"\")}`);\n }\n if (/^https?:\\/\\//i.test(allowed)) {\n try {\n return new URL(allowed).origin === url.origin;\n } catch {\n return false;\n }\n }\n // A bare host.\n return allowed.toLowerCase().replace(/\\/$/, \"\") === url.host.toLowerCase();\n}\n\nfunction closeSocket(ws: GemiSocket, code: number, reason: string) {\n ws.data.closing = true;\n ws.close(code, reason);\n}\n\nfunction send(ws: GemiSocket, frame: ServerFrame) {\n ws.send(JSON.stringify(frame));\n}\n\nfunction deny(ws: GemiSocket, id: string, code: DeniedCode) {\n send(ws, { op: \"denied\", id, code });\n}\n\nfunction refuse(status: number, message: string, headers: Record<string, string> = {}) {\n return new Response(message, {\n status,\n headers: { \"Content-Type\": \"text/plain; charset=utf-8\", ...headers },\n });\n}\n\nfunction isParams(value: unknown): value is Record<string, string | number> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return false;\n return Object.values(value).every((v) => typeof v === \"string\" || typeof v === \"number\");\n}\n\nfunction userIdOf(user: unknown): string | null {\n const id = (user as { id?: unknown } | null)?.id;\n return typeof id === \"string\" || typeof id === \"number\" ? String(id) : null;\n}\n\n/**\n * The client address: what the production server left in `X-Forwarded-For`\n * (see `forwardedFor.ts`), or the socket's peer.\n */\nfunction clientIp(req: Request, server: Server<any>): string | null {\n const forwarded = req.headers.get(\"x-forwarded-for\")?.split(\",\")[0]?.trim();\n if (forwarded) return normalizeIpEntry(forwarded) ?? forwarded;\n try {\n return server.requestIP(req)?.address ?? null;\n } catch {\n return null;\n }\n}\n\nfunction decrement(map: Map<string, number>, key: string | null) {\n if (!key) return;\n const count = (map.get(key) ?? 0) - 1;\n if (count <= 0) map.delete(key);\n else map.set(key, count);\n}\n",
|
|
15
15
|
"import { assertChannelPatterns, type ChannelRouterClass } from \"../../http/ChannelRouter\";\nimport { ServiceProvider } from \"../../support/ServiceProvider\";\nimport type { BroadcastDriver } from \"./BroadcastDriver\";\nimport { BroadcastManager } from \"./BroadcastManager\";\nimport { RedisBroadcastDriver } from \"./RedisBroadcastDriver\";\nimport type { BroadcastConfig } from \"./config\";\nimport { SocketHub } from \"./SocketHub\";\n\nexport class BroadcastServiceProvider extends ServiceProvider {\n register() {\n this.app.singleton(\n BroadcastManager,\n () =>\n new BroadcastManager(this.app.config.get<BroadcastConfig>(\"broadcast\", {}), {\n application: this.app,\n channels: this.app.config.get<ChannelRouterClass | undefined>(\"route.channels\"),\n }),\n );\n // The WebSocket transport, built by the HTTP server (`Kernel.sockets()`)\n // when the app declares `route.channels`.\n this.app.singleton(SocketHub, () => new SocketHub(this.app.make(BroadcastManager), this.app));\n }\n\n /**\n * Fails the boot on a malformed channel pattern, rather than refusing every\n * subscription to it at runtime.\n */\n boot() {\n const Channels = this.app.config.get<ChannelRouterClass | undefined>(\"route.channels\");\n if (Channels) assertChannelPatterns(new Channels());\n const config = this.app.config.get<BroadcastConfig>(\"broadcast\", {});\n // A driver the app builds (an instance, or a factory) may be the redis\n // one too: build the manager to see. A name needs no manager.\n const built =\n typeof config.driver === \"function\" || typeof config.driver === \"object\"\n ? this.app.make(BroadcastManager).driver\n : undefined;\n assertSharedSecret(config, process.env, built);\n }\n\n /**\n * Says `bye` to the sockets (the server's drain did already, in\n * production; a dev reload retiring this application did not), then stops\n * receiving and closes the driver's connections.\n */\n async shutdown() {\n if (this.app.resolved(SocketHub)) this.app.make(SocketHub).shutdown();\n if (!this.app.resolved(BroadcastManager)) return;\n await this.app.make(BroadcastManager).close();\n }\n}\n\n/**\n * The redis driver carries one frame to every instance, and a `toOthers`\n * frame names the socket to skip by a tag keyed from `SECRET` (`socketTag`).\n * Without `SECRET` each process keys it at random, so the sender's own socket\n * on another instance would not recognise its tag and would get its own\n * emit back. Fails the boot in production; warns elsewhere.\n */\nexport function assertSharedSecret(\n config: BroadcastConfig,\n env: Record<string, string | undefined> = process.env,\n driver?: BroadcastDriver,\n): void {\n const redis = config.driver === \"redis\" || driver instanceof RedisBroadcastDriver;\n if (!redis || env.SECRET) return;\n const message =\n `[gemi] The \"redis\" broadcast driver needs SECRET set, the same on every ` +\n `instance: Broadcast.toOthers tags the sender's socket with a key derived ` +\n `from it, and every instance must derive the same one.`;\n if (env.NODE_ENV === \"production\") throw new Error(message);\n console.warn(message);\n}\n",
|
|
16
16
|
"import { ServiceProvider } from \"../../support/ServiceProvider\";\nimport { CacheManager } from \"./CacheManager\";\nimport type { CacheConfig } from \"./config\";\n\nexport class CacheServiceProvider extends ServiceProvider {\n register() {\n this.app.singleton(\n CacheManager,\n () =>\n new CacheManager(this.app.config.get<CacheConfig>(\"cache\", {}), {\n application: this.app,\n }),\n );\n }\n}\n",
|
|
17
17
|
"import { ServiceProvider } from \"../../support/ServiceProvider\";\nimport type { ChangeFeedConfig } from \"./config\";\nimport { ChangeFeedManager } from \"./ChangeFeedManager\";\n\nexport class ChangeFeedServiceProvider extends ServiceProvider {\n register() {\n this.app.singleton(\n ChangeFeedManager,\n () =>\n new ChangeFeedManager(this.app.config.get<ChangeFeedConfig>(\"changeFeed\", {}), {\n application: this.app,\n }),\n );\n }\n\n /**\n * Ends every subscription and closes the `LISTEN` connection. Streams have\n * already ended by then: each stops at its next keepalive once the server\n * starts shutting down, so the request drain does not wait on them.\n */\n async shutdown() {\n if (!this.app.resolved(ChangeFeedManager)) return;\n await this.app.make(ChangeFeedManager).close();\n }\n}\n",
|
|
@@ -36,10 +36,10 @@
|
|
|
36
36
|
"import { ServiceProvider } from \"../../support/ServiceProvider\";\nimport { withDefaults } from \"../../support/withDefaults\";\nimport { RateLimiter } from \"./RateLimiter\";\nimport { rateLimiterConfigDefaults, type RateLimiterConfig } from \"./config\";\n\nexport class RateLimiterServiceProvider extends ServiceProvider {\n register() {\n this.app.singleton(\n RateLimiter,\n () =>\n new RateLimiter(\n withDefaults(\n rateLimiterConfigDefaults(),\n this.app.config.get<RateLimiterConfig>(\"ratelimiter\", {}),\n ),\n ),\n );\n }\n}\n",
|
|
37
37
|
"import type { RedisOptions } from \"bun\";\n\n// Config key: `redis`. Derived from `RedisServiceProvider`.\nexport interface RedisConfig {\n // Connection URL for Bun's Redis client. Defaults to the `REDIS_URL`\n // environment variable (Bun itself falls back to `redis://localhost:6379`\n // when unset).\n url?: string;\n\n // Optional Bun Redis client options (TLS, timeouts, auto-reconnect, ...).\n options?: RedisOptions;\n}\n\nexport function defineRedisConfig(config: RedisConfig): RedisConfig {\n return config;\n}\n\nexport function redisConfigDefaults(): RedisConfig {\n return {\n url: process.env.REDIS_URL,\n options: undefined,\n };\n}\n",
|
|
38
38
|
"import { ServiceProvider } from \"../../support/ServiceProvider\";\nimport { withDefaults } from \"../../support/withDefaults\";\nimport { redisConfigDefaults, type RedisConfig } from \"./config\";\nimport { RedisManager } from \"./RedisManager\";\n\nexport class RedisServiceProvider extends ServiceProvider {\n register() {\n this.app.singleton(\n RedisManager,\n () =>\n new RedisManager(\n withDefaults(\n redisConfigDefaults(),\n this.app.config.get<RedisConfig>(\"redis\", {}),\n ),\n ),\n );\n }\n\n /**\n * Closes the client, if anything built one. Under `gemi dev` this is what\n * keeps each `bun --hot` reload from leaving a Redis connection behind; see\n * `DatabaseServiceProvider.shutdown`.\n */\n shutdown() {\n if (!this.app.resolved(RedisManager)) return;\n this.app.make(RedisManager).close();\n }\n}\n",
|
|
39
|
-
"import { ServiceProvider } from \"../../support/ServiceProvider\";\nimport { McpRegistry } from \"../mcp/McpRegistry\";\nimport { McpHttpServer } from \"../mcp/http/McpHttpServer\";\nimport { ApiRouteDispatcher } from \"./ApiRouteDispatcher\";\nimport { DomainRouter } from \"./DomainRouter\";\nimport { ViewRouteDispatcher } from \"./ViewRouteDispatcher\";\nimport type { ApiRouteConfig, DomainsConfig, McpRouteConfig, ViewRouteConfig } from \"./config\";\nimport type { Repository } from \"../../support/Repository\";\n\nfunction readConfig<T>(config: Repository, key: string): T {\n const slice = config.get<T>(key);\n if (!slice) {\n throw new Error(\n `Missing \"${key}\" configuration. Route dispatching needs a root router — declare it in \"app/config/route.ts\".`,\n );\n }\n return slice;\n}\n\n/**\n * Owns both route dispatchers. Laravel ships a single RouteServiceProvider for\n * every route file it loads; the api/view split is a config slice, not a\n * separate provider.\n */\nexport class RouteServiceProvider extends ServiceProvider {\n register() {\n this.app.singleton(\n ApiRouteDispatcher,\n () =>\n new ApiRouteDispatcher(\n readConfig<ApiRouteConfig>(this.app.config, \"route.api\"),\n ),\n );\n\n this.app.singleton(\n ViewRouteDispatcher,\n () =>\n new ViewRouteDispatcher(\n readConfig<ViewRouteConfig>(this.app.config, \"route.view\"),\n ),\n );\n\n // The root pair above is the root group's; the other `route.domains`\n // groups get their own only when they bring their own routers.\n this.app.singleton(\n DomainRouter,\n () =>\n new DomainRouter(\n { api: this.app.make(ApiRouteDispatcher), view: this.app.make(ViewRouteDispatcher) },\n {\n api: readConfig<ApiRouteConfig>(this.app.config, \"route.api\"),\n view: readConfig<ViewRouteConfig>(this.app.config, \"route.view\"),\n domains: this.app.config.get<DomainsConfig | undefined>(\"route.domains\"),\n },\n ),\n );\n\n // Bound whether or not the app declares one, so asking for it without\n // `route.mcp` fails with a sentence rather than an unbound token.\n this.app.singleton(McpRegistry, () => {\n const config = this.app.config.get<McpRouteConfig | undefined>(\"route.mcp\");\n if (!config?.router) {\n throw new Error(\n 'No MCP router is configured. Declare one as `mcp: { router }` in \"app/config/route.ts\".',\n );\n }\n return new McpRegistry(new config.router(), this.app.make(ApiRouteDispatcher), {\n files: config.remote?.files,\n });\n });\n this.registerMcpHttp();\n }\n\n /**\n * Bound here and built at boot when `route.mcp.remote.enabled`, so a\n * misconfigured endpoint — no resolver, no url, no SECRET — fails the boot,\n * not the first client that connects.\n */\n private registerMcpHttp() {\n this.app.singleton(McpHttpServer, () => {\n const config = this.app.config.get<McpRouteConfig | undefined>(\"route.mcp\");\n if (!config?.remote?.enabled) {\n throw new Error(\"The MCP endpoint is not enabled: set route.mcp.remote.enabled.\");\n }\n return new McpHttpServer(this.app.make(McpRegistry), config.remote);\n });\n }\n\n /**\n * The dispatchers of every host group, and the MCP registry when an app declares one, must\n * not be built lazily: constructing the dispatchers flattens the route\n * tables and runs `assertNoReservedRoutePaths`, and constructing the registry\n * resolves every tool against those tables. A missing `route` config, a\n * route under a reserved prefix or a tool naming a route that is gone has to\n * fail the boot rather than the first request, or the first tool call, that\n * happens to hit it.\n */\n boot() {\n this.app.make(ApiRouteDispatcher);\n this.app.make(ViewRouteDispatcher);\n // Builds every host group's dispatchers and validates `route.domains`.\n this.app.make(DomainRouter);\n if (this.app.config.get(\"route.mcp\")) {\n this.app.make(McpRegistry);\n }\n const remote = this.app.config.get<McpRouteConfig[\"remote\"]>(\"route.mcp.remote\");\n if (remote?.enabled === true) {\n this.app.make(McpHttpServer);\n } else if (remote?.enabled !== undefined && remote.enabled !== false) {\n throw new Error(\"route.mcp.remote.enabled must be true or false.\");\n }\n }\n}\n",
|
|
39
|
+
"import { ServiceProvider } from \"../../support/ServiceProvider\";\nimport { parseClientIpHeaderTrust } from \"../../server/forwardedFor\";\nimport { McpRegistry } from \"../mcp/McpRegistry\";\nimport { McpHttpServer } from \"../mcp/http/McpHttpServer\";\nimport { ApiRouteDispatcher } from \"./ApiRouteDispatcher\";\nimport { DomainRouter } from \"./DomainRouter\";\nimport { ViewRouteDispatcher } from \"./ViewRouteDispatcher\";\nimport type { ApiRouteConfig, DomainsConfig, McpRouteConfig, ViewRouteConfig } from \"./config\";\nimport type { Repository } from \"../../support/Repository\";\n\nfunction readConfig<T>(config: Repository, key: string): T {\n const slice = config.get<T>(key);\n if (!slice) {\n throw new Error(\n `Missing \"${key}\" configuration. Route dispatching needs a root router — declare it in \"app/config/route.ts\".`,\n );\n }\n return slice;\n}\n\n/**\n * Owns both route dispatchers. Laravel ships a single RouteServiceProvider for\n * every route file it loads; the api/view split is a config slice, not a\n * separate provider.\n */\nexport class RouteServiceProvider extends ServiceProvider {\n register() {\n this.app.singleton(\n ApiRouteDispatcher,\n () =>\n new ApiRouteDispatcher(\n readConfig<ApiRouteConfig>(this.app.config, \"route.api\"),\n ),\n );\n\n this.app.singleton(\n ViewRouteDispatcher,\n () =>\n new ViewRouteDispatcher(\n readConfig<ViewRouteConfig>(this.app.config, \"route.view\"),\n ),\n );\n\n // The root pair above is the root group's; the other `route.domains`\n // groups get their own only when they bring their own routers.\n this.app.singleton(\n DomainRouter,\n () =>\n new DomainRouter(\n { api: this.app.make(ApiRouteDispatcher), view: this.app.make(ViewRouteDispatcher) },\n {\n api: readConfig<ApiRouteConfig>(this.app.config, \"route.api\"),\n view: readConfig<ViewRouteConfig>(this.app.config, \"route.view\"),\n domains: this.app.config.get<DomainsConfig | undefined>(\"route.domains\"),\n clientIpTrust: parseClientIpHeaderTrust(process.env),\n },\n ),\n );\n\n // Bound whether or not the app declares one, so asking for it without\n // `route.mcp` fails with a sentence rather than an unbound token.\n this.app.singleton(McpRegistry, () => {\n const config = this.app.config.get<McpRouteConfig | undefined>(\"route.mcp\");\n if (!config?.router) {\n throw new Error(\n 'No MCP router is configured. Declare one as `mcp: { router }` in \"app/config/route.ts\".',\n );\n }\n return new McpRegistry(new config.router(), this.app.make(ApiRouteDispatcher), {\n files: config.remote?.files,\n });\n });\n this.registerMcpHttp();\n }\n\n /**\n * Bound here and built at boot when `route.mcp.remote.enabled`, so a\n * misconfigured endpoint — no resolver, no url, no SECRET — fails the boot,\n * not the first client that connects.\n */\n private registerMcpHttp() {\n this.app.singleton(McpHttpServer, () => {\n const config = this.app.config.get<McpRouteConfig | undefined>(\"route.mcp\");\n if (!config?.remote?.enabled) {\n throw new Error(\"The MCP endpoint is not enabled: set route.mcp.remote.enabled.\");\n }\n return new McpHttpServer(this.app.make(McpRegistry), config.remote);\n });\n }\n\n /**\n * The dispatchers of every host group, and the MCP registry when an app declares one, must\n * not be built lazily: constructing the dispatchers flattens the route\n * tables and runs `assertNoReservedRoutePaths`, and constructing the registry\n * resolves every tool against those tables. A missing `route` config, a\n * route under a reserved prefix or a tool naming a route that is gone has to\n * fail the boot rather than the first request, or the first tool call, that\n * happens to hit it.\n */\n boot() {\n this.app.make(ApiRouteDispatcher);\n this.app.make(ViewRouteDispatcher);\n // Builds every host group's dispatchers and validates `route.domains`.\n this.app.make(DomainRouter);\n if (this.app.config.get(\"route.mcp\")) {\n this.app.make(McpRegistry);\n }\n const remote = this.app.config.get<McpRouteConfig[\"remote\"]>(\"route.mcp.remote\");\n if (remote?.enabled === true) {\n this.app.make(McpHttpServer);\n } else if (remote?.enabled !== undefined && remote.enabled !== false) {\n throw new Error(\"route.mcp.remote.enabled must be true or false.\");\n }\n }\n}\n",
|
|
40
40
|
"import { ServiceProvider } from \"../../support/ServiceProvider\";\nimport type { RunsConfig } from \"./config\";\nimport { RunManager } from \"./RunManager\";\n\nexport class RunsServiceProvider extends ServiceProvider {\n register() {\n this.app.singleton(\n RunManager,\n () =>\n new RunManager(this.app.config.get<RunsConfig>(\"runs\", {}), {\n application: this.app,\n }),\n );\n }\n}\n"
|
|
41
41
|
],
|
|
42
|
-
"mappings": "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",
|
|
43
|
-
"debugId": "
|
|
42
|
+
"mappings": "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",
|
|
43
|
+
"debugId": "CE5F072877DF3F2264756E2164756E21",
|
|
44
44
|
"names": []
|
|
45
45
|
}
|