gemi 0.109.0 → 0.111.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/Agent.d.ts +11 -0
- package/dist/ai/Agent.d.ts.map +1 -1
- package/dist/ai/AgentController.d.ts +7 -0
- package/dist/ai/AgentController.d.ts.map +1 -1
- package/dist/ai/index.js +11 -11
- package/dist/ai/index.js.map +4 -4
- package/dist/app/index.js +2 -2
- package/dist/app/index.js.map +1 -1
- package/dist/bin/gemi.js +485 -63
- package/dist/bin/gemi.js.map +12 -8
- package/dist/bun/plugin.js +2 -2
- package/dist/bun/plugin.js.map +1 -1
- package/dist/bun/preload.js +2 -2
- package/dist/bun/preload.js.map +1 -1
- package/dist/{chunk-hgz8sx40.js → chunk-09ypnhjv.js} +3 -3
- package/dist/{chunk-hgz8sx40.js.map → chunk-09ypnhjv.js.map} +1 -1
- package/dist/{chunk-qnq110tw.js → chunk-0d9qsmx2.js} +3 -3
- package/dist/{chunk-qnq110tw.js.map → chunk-0d9qsmx2.js.map} +1 -1
- package/dist/{chunk-m9609t1y.js → chunk-0sjh5v1n.js} +1 -1
- package/dist/{chunk-g5a3ptsa.js → chunk-11fsn5mr.js} +3 -3
- package/dist/{chunk-g5a3ptsa.js.map → chunk-11fsn5mr.js.map} +1 -1
- package/dist/chunk-1bkr5wnt.js +58 -0
- package/dist/chunk-1bkr5wnt.js.map +14 -0
- package/dist/{chunk-whe0x70j.js → chunk-1c1d0e60.js} +3 -3
- package/dist/{chunk-whe0x70j.js.map → chunk-1c1d0e60.js.map} +1 -1
- package/dist/{chunk-rgfzqwpg.js → chunk-1kr25rcg.js} +3 -3
- package/dist/{chunk-rgfzqwpg.js.map → chunk-1kr25rcg.js.map} +1 -1
- package/dist/{chunk-vee4j6ft.js → chunk-1pem26zc.js} +3 -3
- package/dist/{chunk-vee4j6ft.js.map → chunk-1pem26zc.js.map} +1 -1
- package/dist/{chunk-nxxx0m1a.js → chunk-1va15sfq.js} +2 -2
- package/dist/{chunk-nxxx0m1a.js.map → chunk-1va15sfq.js.map} +2 -2
- package/dist/{chunk-wvwee7dn.js → chunk-1yx2e0bh.js} +2 -2
- package/dist/{chunk-wvwee7dn.js.map → chunk-1yx2e0bh.js.map} +1 -1
- package/dist/{chunk-9r3znmqq.js → chunk-303mprnv.js} +2 -2
- package/dist/{chunk-9r3znmqq.js.map → chunk-303mprnv.js.map} +1 -1
- package/dist/{chunk-grs8dnkd.js → chunk-30xjcyzh.js} +2 -2
- package/dist/{chunk-grs8dnkd.js.map → chunk-30xjcyzh.js.map} +1 -1
- package/dist/{chunk-h15eae7g.js → chunk-358sdcx9.js} +3 -3
- package/dist/{chunk-h15eae7g.js.map → chunk-358sdcx9.js.map} +1 -1
- package/dist/{chunk-367kyrdx.js → chunk-3cg7y62b.js} +2 -2
- package/dist/{chunk-367kyrdx.js.map → chunk-3cg7y62b.js.map} +1 -1
- package/dist/{chunk-t26n9vzw.js → chunk-3y8q8x11.js} +2 -2
- package/dist/{chunk-t26n9vzw.js.map → chunk-3y8q8x11.js.map} +1 -1
- package/dist/chunk-4mfrgd5m.js +34 -0
- package/dist/chunk-4mfrgd5m.js.map +10 -0
- package/dist/chunk-5cygrbxv.js +4 -0
- package/dist/{chunk-9qw9fa6z.js.map → chunk-5cygrbxv.js.map} +2 -2
- package/dist/{chunk-tvy2fqza.js → chunk-5stgtwqw.js} +2 -2
- package/dist/{chunk-tvy2fqza.js.map → chunk-5stgtwqw.js.map} +1 -1
- package/dist/chunk-6chz1ktz.js +9 -0
- package/dist/chunk-6chz1ktz.js.map +13 -0
- package/dist/{chunk-wqsdjweb.js → chunk-6vr7f5fq.js} +4 -4
- package/dist/{chunk-wqsdjweb.js.map → chunk-6vr7f5fq.js.map} +1 -1
- package/dist/{chunk-g74qwhvf.js → chunk-7tx5y712.js} +2 -2
- package/dist/{chunk-g74qwhvf.js.map → chunk-7tx5y712.js.map} +1 -1
- package/dist/{chunk-g7fr2cy2.js → chunk-8afxrmdc.js} +3 -3
- package/dist/{chunk-g7fr2cy2.js.map → chunk-8afxrmdc.js.map} +1 -1
- package/dist/{chunk-vwkdfngg.js → chunk-8b2tw2yp.js} +1 -1
- package/dist/{chunk-t3qw9syt.js → chunk-9rchedr4.js} +2 -2
- package/dist/{chunk-t3qw9syt.js.map → chunk-9rchedr4.js.map} +1 -1
- package/dist/{chunk-jm4jn28j.js → chunk-9s851qz8.js} +2 -2
- package/dist/{chunk-jm4jn28j.js.map → chunk-9s851qz8.js.map} +1 -1
- package/dist/{chunk-jc4j61xb.js → chunk-a6453d9s.js} +3 -3
- package/dist/{chunk-jc4j61xb.js.map → chunk-a6453d9s.js.map} +1 -1
- package/dist/{chunk-9m18pknp.js → chunk-bn5yn731.js} +2 -2
- package/dist/{chunk-9m18pknp.js.map → chunk-bn5yn731.js.map} +1 -1
- package/dist/{chunk-t85rca2p.js → chunk-c098fzvk.js} +2 -2
- package/dist/{chunk-t85rca2p.js.map → chunk-c098fzvk.js.map} +1 -1
- package/dist/{chunk-mp5krm14.js → chunk-cttmy1jp.js} +4 -4
- package/dist/{chunk-mp5krm14.js.map → chunk-cttmy1jp.js.map} +2 -2
- package/dist/{chunk-eyg88bgv.js → chunk-cy5qp6mz.js} +3 -3
- package/dist/{chunk-eyg88bgv.js.map → chunk-cy5qp6mz.js.map} +1 -1
- package/dist/{chunk-zys7kecf.js → chunk-ddr4qvvt.js} +3 -3
- package/dist/{chunk-zys7kecf.js.map → chunk-ddr4qvvt.js.map} +1 -1
- package/dist/{chunk-r9gzbjc5.js → chunk-et4pv1b1.js} +1 -1
- package/dist/{chunk-a1g0bahx.js → chunk-frerzsxq.js} +2 -2
- package/dist/{chunk-a1g0bahx.js.map → chunk-frerzsxq.js.map} +1 -1
- package/dist/{chunk-qz9aaw5x.js → chunk-gb37722w.js} +3 -3
- package/dist/{chunk-qz9aaw5x.js.map → chunk-gb37722w.js.map} +1 -1
- package/dist/chunk-h3864a8z.js +17 -0
- package/dist/{chunk-s5aa4hty.js.map → chunk-h3864a8z.js.map} +13 -12
- package/dist/{chunk-zhm3qvrc.js → chunk-h4sw6nt3.js} +3 -3
- package/dist/{chunk-zhm3qvrc.js.map → chunk-h4sw6nt3.js.map} +1 -1
- package/dist/{chunk-5d6eaxab.js → chunk-he7z7y9j.js} +2 -2
- package/dist/{chunk-5d6eaxab.js.map → chunk-he7z7y9j.js.map} +1 -1
- package/dist/{chunk-d2tngs73.js → chunk-hf7a51s3.js} +2 -2
- package/dist/{chunk-d2tngs73.js.map → chunk-hf7a51s3.js.map} +1 -1
- package/dist/chunk-hn67spz6.js +5 -0
- package/dist/{chunk-z9x8x3wq.js.map → chunk-hn67spz6.js.map} +1 -1
- package/dist/{chunk-f7jhkg8x.js → chunk-jbrwt3cs.js} +4 -4
- package/dist/{chunk-f7jhkg8x.js.map → chunk-jbrwt3cs.js.map} +1 -1
- package/dist/{chunk-k1ezptt8.js → chunk-k1vw22t2.js} +2 -2
- package/dist/{chunk-k1ezptt8.js.map → chunk-k1vw22t2.js.map} +1 -1
- package/dist/chunk-k1xt2tw7.js +4 -0
- package/dist/{chunk-rjcsdazt.js.map → chunk-k1xt2tw7.js.map} +2 -2
- package/dist/{chunk-7mc5e61r.js → chunk-kf71mjxa.js} +3 -3
- package/dist/{chunk-7mc5e61r.js.map → chunk-kf71mjxa.js.map} +1 -1
- package/dist/{chunk-vna85rdq.js → chunk-m6ystvtk.js} +2 -2
- package/dist/{chunk-vna85rdq.js.map → chunk-m6ystvtk.js.map} +1 -1
- package/dist/{chunk-qyyxzy04.js → chunk-mb7q7s0a.js} +3 -3
- package/dist/{chunk-qyyxzy04.js.map → chunk-mb7q7s0a.js.map} +1 -1
- package/dist/{chunk-sp2v357a.js → chunk-mn5xw79b.js} +3 -3
- package/dist/{chunk-sp2v357a.js.map → chunk-mn5xw79b.js.map} +1 -1
- package/dist/{chunk-q8k7f11z.js → chunk-mwqg079k.js} +2 -2
- package/dist/{chunk-q8k7f11z.js.map → chunk-mwqg079k.js.map} +1 -1
- package/dist/{chunk-ga533cpz.js → chunk-nncz308h.js} +3 -3
- package/dist/{chunk-ga533cpz.js.map → chunk-nncz308h.js.map} +1 -1
- package/dist/{chunk-hf32yq23.js → chunk-nsvktvp4.js} +2 -2
- package/dist/{chunk-hf32yq23.js.map → chunk-nsvktvp4.js.map} +1 -1
- package/dist/{chunk-3x86bhfn.js → chunk-nvv9wej6.js} +3 -3
- package/dist/{chunk-3x86bhfn.js.map → chunk-nvv9wej6.js.map} +1 -1
- package/dist/chunk-p1aqq0ga.js +16 -0
- package/dist/{chunk-d5sbnzng.js.map → chunk-p1aqq0ga.js.map} +5 -9
- package/dist/chunk-p7r2w4qw.js +5 -0
- package/dist/{chunk-ehasw3qm.js.map → chunk-p7r2w4qw.js.map} +2 -2
- package/dist/{chunk-zz7h6tdr.js → chunk-pwmgqq7z.js} +2 -2
- package/dist/{chunk-zz7h6tdr.js.map → chunk-pwmgqq7z.js.map} +1 -1
- package/dist/chunk-pyj7cd9t.js +4 -0
- package/dist/{chunk-gdsby5jh.js.map → chunk-pyj7cd9t.js.map} +2 -2
- package/dist/{chunk-h6g9g8qc.js → chunk-q9s7kwgt.js} +3 -3
- package/dist/{chunk-h6g9g8qc.js.map → chunk-q9s7kwgt.js.map} +1 -1
- package/dist/{chunk-9hbwvcxn.js → chunk-qd2v93y4.js} +2 -2
- package/dist/{chunk-9hbwvcxn.js.map → chunk-qd2v93y4.js.map} +1 -1
- package/dist/{chunk-tr9mxdth.js → chunk-rfcygmf5.js} +3 -3
- package/dist/{chunk-tr9mxdth.js.map → chunk-rfcygmf5.js.map} +1 -1
- package/dist/{chunk-vsnmdtrs.js → chunk-s6jjy4y9.js} +2 -2
- package/dist/{chunk-vsnmdtrs.js.map → chunk-s6jjy4y9.js.map} +1 -1
- package/dist/{chunk-6zekebzt.js → chunk-sq2wkynk.js} +2 -2
- package/dist/{chunk-6zekebzt.js.map → chunk-sq2wkynk.js.map} +1 -1
- package/dist/{chunk-52vsdnny.js → chunk-td8tha3j.js} +3 -3
- package/dist/{chunk-52vsdnny.js.map → chunk-td8tha3j.js.map} +1 -1
- package/dist/chunk-tdsfke9q.js +6 -0
- package/dist/{chunk-fe1pcnw6.js.map → chunk-tdsfke9q.js.map} +5 -4
- package/dist/{chunk-t0bp8nrc.js → chunk-tk5q8hkv.js} +4 -4
- package/dist/{chunk-t0bp8nrc.js.map → chunk-tk5q8hkv.js.map} +2 -2
- package/dist/{chunk-dpy08xw4.js → chunk-tq85n8zh.js} +2 -2
- package/dist/{chunk-dpy08xw4.js.map → chunk-tq85n8zh.js.map} +1 -1
- package/dist/{chunk-wdpdqjr1.js → chunk-twnn7r66.js} +2 -2
- package/dist/{chunk-wdpdqjr1.js.map → chunk-twnn7r66.js.map} +1 -1
- package/dist/chunk-w7jsh3xd.js +5 -0
- package/dist/{chunk-1es50p4k.js.map → chunk-w7jsh3xd.js.map} +2 -2
- package/dist/chunk-wqvvjd5r.js +24 -0
- package/dist/{chunk-w3j53r0a.js.map → chunk-wqvvjd5r.js.map} +4 -4
- package/dist/{chunk-zh1t33nq.js → chunk-wsttx9rg.js} +2 -2
- package/dist/{chunk-zh1t33nq.js.map → chunk-wsttx9rg.js.map} +1 -1
- package/dist/{chunk-7ssjzp87.js → chunk-wvsv1jgg.js} +2 -2
- package/dist/{chunk-7ssjzp87.js.map → chunk-wvsv1jgg.js.map} +1 -1
- package/dist/chunk-x78jrs4y.js +4 -0
- package/dist/{chunk-y66ntxbg.js.map → chunk-x78jrs4y.js.map} +2 -2
- package/dist/chunk-xk930yaw.js +5 -0
- package/dist/{chunk-pa3khk46.js.map → chunk-xk930yaw.js.map} +2 -2
- package/dist/chunk-xkc7ftnq.js +9 -0
- package/dist/chunk-xkc7ftnq.js.map +10 -0
- package/dist/{chunk-564zfdd1.js → chunk-yer1r3t3.js} +2 -2
- package/dist/{chunk-564zfdd1.js.map → chunk-yer1r3t3.js.map} +1 -1
- package/dist/{chunk-c8dhvdrs.js → chunk-yqavgpwd.js} +3 -3
- package/dist/{chunk-c8dhvdrs.js.map → chunk-yqavgpwd.js.map} +1 -1
- package/dist/{chunk-hyfzw1fk.js → chunk-z10cas5r.js} +2 -2
- package/dist/{chunk-hyfzw1fk.js.map → chunk-z10cas5r.js.map} +1 -1
- package/dist/{chunk-jgtean4t.js → chunk-zhs1r1z0.js} +3 -3
- package/dist/{chunk-jgtean4t.js.map → chunk-zhs1r1z0.js.map} +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +106 -52
- package/dist/client/index.js.map +1 -1
- package/dist/client/islands.d.ts +99 -56
- package/dist/client/islands.d.ts.map +1 -1
- package/dist/config/index.d.ts +8 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -1
- package/dist/config/index.js.map +2 -2
- 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/Lang.d.ts +7 -1
- package/dist/facades/Lang.d.ts.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/CorsMiddleware.d.ts +13 -0
- package/dist/http/CorsMiddleware.d.ts.map +1 -1
- package/dist/http/Middleware.d.ts +11 -0
- package/dist/http/Middleware.d.ts.map +1 -1
- package/dist/http/ViewRouter.d.ts +29 -0
- package/dist/http/ViewRouter.d.ts.map +1 -1
- 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/internal/islandRuntime.d.ts +45 -0
- package/dist/internal/islandRuntime.d.ts.map +1 -0
- package/dist/kernel/index.js +2 -2
- package/dist/kernel/index.js.map +1 -1
- package/dist/orm/context.d.ts +24 -0
- package/dist/orm/context.d.ts.map +1 -1
- package/dist/orm/index.d.ts +1 -1
- package/dist/orm/index.d.ts.map +1 -1
- package/dist/orm/index.js +3 -3
- package/dist/orm/index.js.map +2 -2
- package/dist/server/devFetch.d.ts.map +1 -1
- package/dist/server/httpDev.d.ts.map +1 -1
- package/dist/server/httpProd.d.ts.map +1 -1
- package/dist/server/idleTimeout.d.ts +24 -0
- package/dist/server/idleTimeout.d.ts.map +1 -0
- package/dist/server/index.js +2 -2
- package/dist/server/index.js.map +1 -1
- package/dist/server/modulePreloads.d.ts +7 -6
- package/dist/server/modulePreloads.d.ts.map +1 -1
- package/dist/services/index.js +2 -2
- package/dist/services/index.js.map +1 -1
- package/dist/services/middleware/MiddlewareRegistry.d.ts +13 -2
- package/dist/services/middleware/MiddlewareRegistry.d.ts.map +1 -1
- package/dist/services/queue/work.js +2 -2
- package/dist/services/queue/work.js.map +1 -1
- package/dist/services/router/DomainRouter.d.ts +10 -0
- package/dist/services/router/DomainRouter.d.ts.map +1 -1
- package/dist/services/router/ViewRouteDispatcher.d.ts +3 -1
- package/dist/services/router/ViewRouteDispatcher.d.ts.map +1 -1
- package/dist/services/router/staticCache.d.ts +23 -0
- package/dist/services/router/staticCache.d.ts.map +1 -0
- package/dist/services/router/staticDocument.d.ts +39 -17
- package/dist/services/router/staticDocument.d.ts.map +1 -1
- package/dist/stats/bundleStats.d.ts +104 -0
- package/dist/stats/bundleStats.d.ts.map +1 -0
- package/dist/stats/route-table.d.ts +2 -0
- package/dist/stats/route-table.d.ts.map +1 -0
- package/dist/stats/route-table.js +4 -0
- package/dist/stats/route-table.js.map +11 -0
- package/dist/stats/routeTable.d.ts +25 -0
- package/dist/stats/routeTable.d.ts.map +1 -0
- package/dist/stats/run.d.ts +43 -0
- package/dist/stats/run.d.ts.map +1 -0
- package/dist/support/index.js +2 -2
- package/dist/support/index.js.map +1 -1
- package/dist/vite/index.mjs +125 -23
- package/dist/vitest/index.d.ts +18 -0
- package/dist/vitest/index.d.ts.map +1 -1
- package/dist/vitest/index.js +2 -2
- package/dist/vitest/index.js.map +3 -3
- package/package.json +2 -1
- package/dist/chunk-1es50p4k.js +0 -5
- package/dist/chunk-9qw9fa6z.js +0 -4
- package/dist/chunk-d5sbnzng.js +0 -18
- package/dist/chunk-ehasw3qm.js +0 -5
- package/dist/chunk-fe1pcnw6.js +0 -6
- package/dist/chunk-fj6yftm7.js +0 -58
- package/dist/chunk-fj6yftm7.js.map +0 -14
- package/dist/chunk-gdsby5jh.js +0 -4
- package/dist/chunk-ngw4xzrt.js +0 -9
- package/dist/chunk-ngw4xzrt.js.map +0 -10
- package/dist/chunk-pa3khk46.js +0 -5
- package/dist/chunk-rjcsdazt.js +0 -4
- package/dist/chunk-s5aa4hty.js +0 -17
- package/dist/chunk-w3j53r0a.js +0 -24
- package/dist/chunk-y66ntxbg.js +0 -4
- package/dist/chunk-z9x8x3wq.js +0 -5
- /package/dist/{chunk-m9609t1y.js.map → chunk-0sjh5v1n.js.map} +0 -0
- /package/dist/{chunk-vwkdfngg.js.map → chunk-8b2tw2yp.js.map} +0 -0
- /package/dist/{chunk-r9gzbjc5.js.map → chunk-et4pv1b1.js.map} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../internal/isConstructor.ts", "../http/middlewareList.ts", "../http/contentDisposition.ts", "../http/createStreamResponse.ts", "../http/bodyLimit.ts", "../http/ApiRouter.ts", "../http/McpRouter.ts", "../utils/applyParams.ts", "../facades/Redirect.ts", "../http/HttpResponse.ts", "../http/ViewRouter.ts", "../http/Middleware.ts", "../http/middleware-config.ts", "../utils/intendedUrl.ts", "../auth/signInRedirect.ts", "../auth/accessToken.ts", "../http/AuthenticationMiddlware.ts", "../http/CacheMiddleware.ts", "../http/CorsMiddleware.ts", "../services/rate-limiter/RateLimiter.ts", "../http/RateLimitMiddleware.ts", "../http/CSRFMiddleware.ts", "../http/BodyLimitMiddleware.ts", "../http/PoliciesServiceProvider.ts", "../http/Policy.ts", "../http/safeFetch/safeFetch.ts", "../http/safeFetch/addresses.ts", "../http/safeFetch/errors.ts", "../auth/sessionToken.ts", "../auth/oneTimeCode.ts", "../services/rate-limiter/slidingWindow.ts", "../services/rate-limiter/drivers/RateLimiterDriver.ts", "../services/rate-limiter/drivers/InMemoryRateLimiterDriver.ts", "../auth/config.ts", "../auth/requests.ts", "../auth/UserProvider.ts", "../auth/AuthController.ts", "../../../node_modules/.bun/temporal-polyfill@0.2.5/node_modules/temporal-polyfill/chunks/internal.js", "../../../node_modules/.bun/temporal-polyfill@0.2.5/node_modules/temporal-polyfill/chunks/classApi.js", "../auth/routes.ts", "../i18n/I18nRouter.ts", "../services/image-optimization/drivers/ImageOptimizationDriver.ts", "../services/image-optimization/drivers/SharpDriver.ts", "../services/image-optimization/config.ts", "../services/image-optimization/ImageManager.ts", "../services/logging/LoggingRouter.ts", "../services/middleware/MiddlewareRegistry.ts", "../services/router/config.ts", "../services/router/createFlatApiRoutes.ts", "../services/router/createFlatViewRoutes.ts", "../../../node_modules/.bun/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/urlpattern.js", "../services/router/matchViewRoute.ts", "../services/router/planPartialRender.ts", "../utils/partialRender.ts", "../services/router/ViewRouteDispatcher.ts", "../services/router/createRouteManifest.ts", "../services/router/createComponentTree.ts", "../client/helpers/flattenComponentTree.ts", "../facades/Lang.ts", "../services/kernel-id/KernelId.ts", "../services/router/htmlInsertionPoint.ts", "../services/router/streamQueryInjection.ts", "../services/features/context.ts", "../services/features/bucket.ts", "../services/features/evaluate.ts", "../services/features/FeatureFlagStore.ts", "../services/features/sources/FeatureFlagSource.ts", "../services/features/FeatureManager.ts", "../utils/omitNullishValues.ts", "../services/router/ServerQueryStore.ts", "../client/QueryError.ts", "../services/router/policyDenied.ts", "../services/router/serverQueryFetcher.ts", "../services/router/shellContentReport.ts", "../services/router/routePayloadStream.ts", "../client/islands.tsx", "../services/router/staticDocument.ts", "../services/router/notFound.ts", "../services/router/ApiRouteDispatcher.ts", "../services/router/DomainResolver.ts", "../services/router/DomainRouter.ts", "../auth/AuthManager.ts", "../facades/Auth.ts", "../facades/Prefetch.ts", "../utils/domainUrl.ts", "../facades/Url.ts", "../facades/Meta.ts", "../facades/Cookie.ts", "../facades/Redis.ts", "../facades/RateLimiter.ts", "../facades/Lock.ts", "../facades/Features.ts", "../facades/DB.ts"],
|
|
3
|
+
"sources": ["../internal/isConstructor.ts", "../http/middlewareList.ts", "../http/contentDisposition.ts", "../http/createStreamResponse.ts", "../http/bodyLimit.ts", "../http/ApiRouter.ts", "../http/McpRouter.ts", "../utils/applyParams.ts", "../facades/Redirect.ts", "../http/HttpResponse.ts", "../http/ViewRouter.ts", "../http/Middleware.ts", "../http/middleware-config.ts", "../utils/intendedUrl.ts", "../auth/signInRedirect.ts", "../auth/accessToken.ts", "../http/AuthenticationMiddlware.ts", "../http/CacheMiddleware.ts", "../http/CorsMiddleware.ts", "../services/rate-limiter/RateLimiter.ts", "../http/RateLimitMiddleware.ts", "../http/CSRFMiddleware.ts", "../http/BodyLimitMiddleware.ts", "../http/PoliciesServiceProvider.ts", "../http/Policy.ts", "../http/safeFetch/safeFetch.ts", "../http/safeFetch/addresses.ts", "../http/safeFetch/errors.ts", "../auth/sessionToken.ts", "../auth/oneTimeCode.ts", "../services/rate-limiter/slidingWindow.ts", "../services/rate-limiter/drivers/RateLimiterDriver.ts", "../services/rate-limiter/drivers/InMemoryRateLimiterDriver.ts", "../auth/config.ts", "../auth/requests.ts", "../auth/UserProvider.ts", "../auth/AuthController.ts", "../../../node_modules/.bun/temporal-polyfill@0.2.5/node_modules/temporal-polyfill/chunks/internal.js", "../../../node_modules/.bun/temporal-polyfill@0.2.5/node_modules/temporal-polyfill/chunks/classApi.js", "../auth/routes.ts", "../i18n/I18nRouter.ts", "../services/image-optimization/drivers/ImageOptimizationDriver.ts", "../services/image-optimization/drivers/SharpDriver.ts", "../services/image-optimization/config.ts", "../services/image-optimization/ImageManager.ts", "../services/logging/LoggingRouter.ts", "../services/middleware/MiddlewareRegistry.ts", "../services/router/config.ts", "../services/router/createFlatApiRoutes.ts", "../services/router/createFlatViewRoutes.ts", "../../../node_modules/.bun/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/urlpattern.js", "../services/router/matchViewRoute.ts", "../services/router/planPartialRender.ts", "../utils/partialRender.ts", "../services/router/ViewRouteDispatcher.ts", "../services/router/createRouteManifest.ts", "../services/router/createComponentTree.ts", "../client/helpers/flattenComponentTree.ts", "../facades/Lang.ts", "../services/kernel-id/KernelId.ts", "../services/router/htmlInsertionPoint.ts", "../services/router/streamQueryInjection.ts", "../services/features/context.ts", "../services/features/bucket.ts", "../services/features/evaluate.ts", "../services/features/FeatureFlagStore.ts", "../services/features/sources/FeatureFlagSource.ts", "../services/features/FeatureManager.ts", "../utils/omitNullishValues.ts", "../services/router/ServerQueryStore.ts", "../client/QueryError.ts", "../services/router/policyDenied.ts", "../services/router/serverQueryFetcher.ts", "../services/router/shellContentReport.ts", "../services/router/routePayloadStream.ts", "../client/islands.tsx", "../services/router/staticDocument.ts", "../services/router/staticCache.ts", "../services/router/notFound.ts", "../services/router/ApiRouteDispatcher.ts", "../services/router/DomainResolver.ts", "../services/router/DomainRouter.ts", "../auth/AuthManager.ts", "../facades/Auth.ts", "../facades/Prefetch.ts", "../utils/domainUrl.ts", "../facades/Url.ts", "../facades/Meta.ts", "../facades/Cookie.ts", "../facades/Redis.ts", "../facades/RateLimiter.ts", "../facades/Lock.ts", "../facades/Features.ts", "../facades/DB.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"export function isConstructor(value: any) {\n return typeof value === \"function\" && value.prototype !== undefined;\n}\n",
|
|
6
6
|
"/**\n * What a route's `.middleware()` accepts.\n *\n * A bare string is allowed because it is what people write — `\"auth\"` reads\n * better than `[\"auth\"]` for the overwhelmingly common single-middleware case,\n * and the array form was accepted silently wrong for long enough that the\n * starter template itself does it (`.middleware(\"cache:private\")`).\n */\nexport type MiddlewareInput = string | string[];\n\n/**\n * Normalizes `.middleware()`'s argument to the array the registry expects.\n *\n * Without this, a bare string was assigned straight to `middlewares`, and\n * `transformMiddleware` iterates its input — so a string was iterated one\n * **character** at a time. Each character became an alias lookup that resolved\n * to nothing and was dropped by the trailing `.filter(Boolean)`, which means the\n * middleware did not run and nothing anywhere said so. A route that looked\n * authenticated was public.\n *\n * The type said `string[]`, so this was a type error at every call site — but\n * only for a project whose `tsc` is clean, and the failure at runtime is silent\n * either way. Accepting both shapes removes the trap rather than documenting it.\n */\nexport function toMiddlewareList(input: MiddlewareInput): string[] {\n return typeof input === \"string\" ? [input] : input;\n}\n",
|
|
@@ -12,15 +12,15 @@
|
|
|
12
12
|
"export function applyParams<T extends string>(\n url: T,\n params: Record<string, string | number | undefined>,\n): string {\n return (\n url\n .replace(/:([^/]+[*?]?)/g, (_, key) => {\n const hasSuffix = key.endsWith(\"?\") || key.endsWith(\"*\");\n const paramName = hasSuffix ? key.slice(0, -1) : key;\n const value = params[paramName];\n\n if (value === undefined) {\n if (hasSuffix) {\n return \"\"; // Remove the optional segment if no value is provided\n }\n // @ts-ignore\n if (import.meta.env.DEV) {\n throw new Error(`Missing parameter: ${paramName}`);\n }\n console.error(`Missing parameter: ${paramName} in URL: ${url}`);\n }\n\n return String(value);\n })\n // remove double slashes\n .replace(/\\/\\//g, \"/\")\n // remove trailing slash\n .replace(/\\/$/, \"\")\n );\n}\n",
|
|
13
13
|
"import type { UrlParser, ViewPaths } from \"../client/types\";\nimport { RequestBreakerError } from \"../http/Error\";\nimport { applyParams } from \"../utils/applyParams\";\n\nclass RedirectError extends RequestBreakerError {\n constructor(path: string, status = 307) {\n super(\"Redirect error\");\n this.name = \"RedirectError\";\n this.payload = {\n api: {\n status: 200,\n data: {},\n directive: { kind: \"Redirect\", path },\n },\n view: {\n status,\n headers: {\n \"Cache-Control\":\n \"private, no-cache, no-store, max-age=0, must-revalidate\",\n Location: path,\n },\n },\n };\n }\n}\n\ntype Options<T extends ViewPaths> = UrlParser<T> extends Record<string, never>\n ? {\n search?: Record<string, string | number | boolean | undefined | null>;\n status?: number;\n permanent?: boolean;\n }\n : {\n search?: Record<string, string | number | boolean | undefined | null>;\n params: UrlParser<T>;\n status?: number;\n permanent?: boolean;\n };\n\nexport class Redirect {\n static to<T extends ViewPaths>(\n path: T,\n ...args: UrlParser<T> extends Record<string, never>\n ? [options?: Options<T>]\n : [options: Options<T>]\n ) {\n const [options = {}] = args;\n const {\n search = {},\n params = {},\n permanent,\n status,\n } = {\n params: {},\n status: 307,\n permanent: false,\n ...options,\n };\n const searchParams = new URLSearchParams(search).toString();\n throw new RedirectError(\n // `applyParams` strips a trailing slash, so the root collapses to `\"\"`\n // and `filter(Boolean)` then drops it — an empty `Location`. Reachable\n // with nothing stranger than `Redirect.to(Auth.intendedUrl())`, which\n // returns `/` when there is no page to go back to.\n [applyParams(path, params) || \"/\", searchParams.toString()]\n .filter(Boolean)\n .join(\"?\"),\n status ?? (permanent ? 301 : 307),\n );\n }\n\n static external(url: string, status = 307) {\n throw new RedirectError(url, status);\n }\n}\n",
|
|
14
14
|
"import type { Refusal } from \"./refusal\";\n\n/**\n * Marks an `HttpResponse` at runtime. A registered symbol rather than\n * `instanceof`, so a route built against one copy of gemi is still recognised by\n * a dispatcher from another (a linked package, a duplicated install) — the\n * reason `RequestBreakerError` is recognised by its `kind` too.\n */\nconst HTTP_RESPONSE = Symbol.for(\"gemi.HttpResponse\");\n\nexport type HttpResponseOptions<S extends number = number> = {\n /** The status code. `200` when omitted. */\n status?: S;\n /**\n * Set on top of everything the request already put on the response. Each\n * header named here replaces the one the context holds; a `Set-Cookie` is\n * added to the cookies set during the request rather than replacing them.\n */\n headers?: HeadersInit;\n};\n\n/**\n * What the response's body is and how it is written. One member per factory;\n * `.text()` or `.redirect()` would each add one, and a `case` in `serialize`.\n */\ntype HttpResponseKind = \"json\";\n\n/**\n * A handler's answer with a status or headers of its own, where returning the\n * data would answer `200`.\n *\n * ```ts\n * \"/posts\": this.post(async (req) => {\n * const post = await Post.create({ data: (await req.input()).toJSON() });\n * return HttpResponse.json(post, { status: 201 });\n * }),\n * ```\n *\n * Unlike a `Response` built by hand it stays typed: the route's client type is\n * `T`, exactly as if the handler had returned `data`. And it is answered through\n * the same path as a plain return, so the request's cookies, the headers set\n * with `req.ctx().setHeaders()` and whatever middleware added (CORS,\n * `Cache-Control`) are on it too.\n *\n * For api routes. A view's handler returns its props; returning one there\n * throws.\n */\nexport class HttpResponse<T = unknown, S extends number = number> {\n readonly [HTTP_RESPONSE] = true;\n\n private constructor(\n readonly kind: HttpResponseKind,\n readonly body: T,\n readonly status: S,\n readonly headers: Headers,\n ) {}\n\n /**\n * `data` as JSON, with `options.status` (default `200`) and\n * `options.headers` on top of the request's own.\n *\n * A status of 400 or more answers `Cache-Control: no-store` unless\n * `options.headers` sets one, as gemi's own error responses do: a route\n * behind `cache` would otherwise let a shared cache replay one client's 404\n * to everyone.\n */\n static json<T, S extends number = 200>(\n data: T,\n options: HttpResponseOptions<S> = {},\n ): HttpResponse<T, S> {\n const status = options.status ?? 200;\n assertStatus(status);\n return new HttpResponse(\"json\", data, status as S, new Headers(options.headers));\n }\n\n /**\n * A typed error: `{ \"error\": body }` with a status from 400 to 599, the\n * envelope gemi's own errors answer.\n *\n * ```ts\n * if (expired(link)) {\n * return HttpResponse.error(410, { kind: \"gone\", message: \"Link has expired\" });\n * }\n * return { catalogId };\n * ```\n *\n * The route's client type leaves it out of the data and adds `body` to the\n * error type instead: `onError` and `error` on `useMutation`, `usePost`,\n * `useUpload` and `<Form>` are `MutationError | typeof body` (with `status`\n * added), so `if (!(e instanceof Error) && e.kind === \"gone\")` narrows.\n * `httpError(status, body)` is the same function.\n */\n static error<const E, S extends number>(\n status: S,\n body: E,\n options: Omit<HttpResponseOptions, \"status\"> = {},\n ): HttpResponse<{ error: E }, S> {\n if (!Number.isInteger(status) || status < 400 || status > 599) {\n throw new RangeError(\n `HttpResponse.error: status must be an integer from 400 to 599, got ${status}.`,\n );\n }\n return HttpResponse.json({ error: body }, { ...options, status });\n }\n\n /** Whether the status is 2xx, as `Response.ok`. */\n get ok() {\n return this.status >= 200 && this.status < 300;\n }\n\n /**\n * The `Response` this answers, given what the request context accumulated.\n *\n * `contextHeaders` is the request context's own `Headers` and is written\n * into, as the plain-return path always did; the dispatcher is done with it\n * once the response is built.\n *\n * @internal Called by the api dispatcher.\n */\n toResponse(contextHeaders: Headers, cookies: Iterable<string>): Response {\n const headers = contextHeaders;\n const body = this.serialize(headers);\n\n for (const cookie of cookies) {\n headers.append(\"Set-Cookie\", cookie);\n }\n\n // Built with forEach rather than spread: the browser tsconfig's lib set\n // has DOM but not DOM.Iterable, so `Headers` has no [Symbol.iterator].\n this.headers.forEach((value, key) => {\n if (key.toLowerCase() !== \"set-cookie\") {\n headers.set(key, value);\n }\n });\n for (const cookie of this.headers.getSetCookie()) {\n headers.append(\"Set-Cookie\", cookie);\n }\n\n if (this.status >= 400 && !this.headers.has(\"Cache-Control\")) {\n headers.set(\"Cache-Control\", \"no-store\");\n }\n\n return new Response(body, { status: this.status, headers });\n }\n\n private serialize(headers: Headers): BodyInit | null {\n switch (this.kind) {\n case \"json\":\n headers.set(\"Content-Type\", \"application/json\");\n return JSON.stringify(this.body) ?? null;\n }\n }\n}\n\n/**\n * Checked when the response is made rather than when it is sent, so the stack\n * points at the handler. `new Response` would throw for a status outside\n * 200–599 anyway, and a 204, 205 or 304 cannot carry the body `.json()` has.\n */\nfunction assertStatus(status: number) {\n if (!Number.isInteger(status) || status < 200 || status > 599) {\n throw new RangeError(`HttpResponse: status must be an integer from 200 to 599, got ${status}.`);\n }\n if (status === 204 || status === 205 || status === 304) {\n throw new RangeError(`HttpResponse.json: a ${status} response has no body.`);\n }\n}\n\nexport function isHttpResponse(value: unknown): value is HttpResponse<unknown> {\n return typeof value === \"object\" && value !== null && (value as any)[HTTP_RESPONSE] === true;\n}\n\n/**\n * `HttpResponse.error(status, body)`: a typed error response. See\n * `HttpResponse.error`.\n */\nexport function httpError<const E, S extends number>(\n status: S,\n body: E,\n options: Omit<HttpResponseOptions, \"status\"> = {},\n): HttpResponse<{ error: E }, S> {\n return HttpResponse.error(status, body, options);\n}\n\ntype Digit = \"0\" | \"1\" | \"2\" | \"3\" | \"4\" | \"5\" | \"6\" | \"7\" | \"8\" | \"9\";\n\n/**\n * Whether `S` is known to be 400 or more: a literal status, or a union of\n * them, every one of which is. `number`, and a union with a 2xx in it, are\n * not, so a status picked at run time stays in the data as it always was.\n */\ntype IsErrorStatus<S> = [S] extends [never]\n ? false\n : [`${S & number}`] extends [`4${Digit}${Digit}` | `5${Digit}${Digit}`]\n ? true\n : false;\n\n// One member of a handler's resolved output, as the client's data: an\n// `HttpResponse` is its body, unless its status is an error one; anything else\n// is itself.\ntype SuccessMember<T> =\n T extends HttpResponse<infer Data, infer S>\n ? IsErrorStatus<S> extends true\n ? never\n : Data\n : T;\n\n/**\n * A raw `Response` in a union with typed returns is dropped: the client never\n * receives a `Response` object, and it was the success type `if (r instanceof\n * Response)` had to be written against. A route that only ever returns one (a\n * file, a stream) keeps it, as before.\n */\ntype SuccessData<T> = [Exclude<SuccessMember<T>, Response>] extends [never]\n ? SuccessMember<T>\n : Exclude<SuccessMember<T>, Response>;\n\n/**\n * What a handler returning `Output` answers the client with on success:\n * `Output` itself, with every `HttpResponse<T>` in it — under a `Promise` or\n * not, alone or in a union with plain returns — replaced by its `T`.\n *\n * Left out: an `HttpResponse` whose status is a literal 400 or more\n * (`HttpResponse.error`, `httpError`, `HttpResponse.json(x, { status: 409 })`),\n * which `ResponseError` collects instead, and a raw `Response` in a union with\n * anything else. `any` stays `any`.\n */\nexport type ResponseData<Output> = 0 extends 1 & Output\n ? Output\n : // Not distributive: `SuccessData` has to see the whole union to know\n // whether a raw `Response` is alone in it.\n [Output] extends [Promise<infer Resolved>]\n ? Promise<SuccessData<Resolved>>\n : [Extract<Output, Promise<any>>] extends [never]\n ? SuccessData<Output>\n : // A sync handler returning a promise on one branch: member by member.\n Output extends Promise<infer Resolved>\n ? Promise<SuccessData<Resolved>>\n : SuccessData<Output>;\n\n/**\n * The value the client's `onError` receives for an error body `E` answered\n * with status `S`, as `mutationErrorFromBody` builds it: `status` is added\n * unless `E` has one, an object with a `message` and no `kind` is given the\n * kind its status stands for, and a string (or nothing) becomes a refusal.\n */\nexport type ClientHttpError<E, S extends number = number> = E extends string | null | undefined\n ? Refusal\n : E extends object\n ? E extends { kind: string }\n ? WithStatus<E, S>\n : E extends { message: string }\n ? WithStatus<E, S> & { kind: Refusal[\"kind\"] }\n : WithStatus<E, S>\n : E;\n\ntype WithStatus<E, S extends number> = \"status\" extends keyof E ? E : E & { status: S };\n\n// The error body the client sees for one `HttpResponse`: the `error` field when\n// there is one, as gemi's own errors carry it, otherwise the body.\ntype ErrorMember<T> =\n T extends HttpResponse<infer Data, infer S>\n ? IsErrorStatus<S> extends true\n ? Data extends { error: infer E }\n ? ClientHttpError<E, S>\n : ClientHttpError<Data, S>\n : never\n : never;\n\n/**\n * The typed errors a handler returning `Output` can answer: every\n * `HttpResponse` in it whose status is a literal 400 or more, as the client's\n * `onError` receives it (see `ClientHttpError`). `never` when there are none,\n * and for `any`.\n */\nexport type ResponseError<Output> = 0 extends 1 & Output ? never : ErrorMember<Awaited<Output>>;\n",
|
|
15
|
-
"import type { RemoveGroupPrefix } from \"../client/types\";\nimport { Redirect } from \"../facades/Redirect\";\nimport type { KeyAndValue, KeyAndValueToObject } from \"../internal/type-utils\";\nimport { contentDisposition } from \"./contentDisposition\";\nimport { isHttpResponse } from \"./HttpResponse\";\nimport type { Controller } from \"./Controller\";\nimport type { HttpRequest } from \"./HttpRequest\";\nimport type { FeatureKey } from \"../client/rpc\";\nimport { type MiddlewareInput, toMiddlewareList } from \"./middlewareList\";\n\ntype ControllerMethods<T extends new () => Controller> = {\n [K in keyof InstanceType<T>]: InstanceType<T>[K] extends Function ? K : never;\n}[keyof InstanceType<T>];\n\nexport type ViewRoutes = Record<\n string,\n | ViewRoute<any, any, any>\n | LayoutRoute<any, any, any, any>\n | RedirectRoute<any, any, any>\n | FileRoute<any, any>\n | (new () => ViewRouter)\n>;\n\ntype CallbackHandler<Input, Output, Params> = (\n req: HttpRequest<Input, Params>,\n) => Promise<Output> | Output;\n\nexport type ViewHandler<Input, Output, Params> =\n | CallbackHandler<Input, Output, Params>\n | (new () => Controller);\n\ntype ParseViewControllerHandler<\n C extends new () => Controller,\n M extends ControllerMethods<C>,\n> = InstanceType<C>[M] extends (req: HttpRequest<infer Input, infer Params>) => infer Output\n ? ViewRoute<Input, Output, Params>\n : never;\n\ntype ParseFileControllerHandler<\n C extends new () => Controller,\n M extends ControllerMethods<C>,\n> = InstanceType<C>[M] extends (req: HttpRequest<infer Input, infer Params>) => any\n ? FileRoute<Input, Params>\n : never;\n\ntype ParseLayoutControllerHandler<\n T extends ViewRoutes,\n C extends new () => Controller,\n M extends ControllerMethods<C>,\n> = InstanceType<C>[M] extends (req: HttpRequest<infer Input, infer Params>) => infer Output\n ? LayoutRoute<T, Input, Output, Params>\n : never;\n\ntype RedirectOutput = {\n destination: string;\n permanent?: boolean;\n status?: number;\n};\n\nexport class RedirectRoute<Input, Output, Params> {\n kind = \"redirect\" as const;\n viewPath = \"REDIRECT\";\n\n // @internal\n middlewares: string[] = [];\n featureGates: string[] = [];\n private handler: (req: HttpRequest<Input, Params>) => Promise<RedirectOutput>;\n constructor(\n handler?:\n | CallbackHandler<Input, RedirectOutput, Params>\n | [new () => Controller, ControllerMethods<any>],\n ) {\n if (!handler) {\n this.handler = (() => ({})) as any;\n } else if (typeof handler === \"function\") {\n this.handler = handler as any;\n } else {\n const [controller, methodName] = handler;\n this.handler = (req: HttpRequest<Input, Params>): Promise<RedirectOutput> => {\n const controllerInstance = new controller();\n return controllerInstance[methodName](req);\n };\n }\n }\n\n async run(req: HttpRequest<Input, Params>, path: string) {\n const { destination, permanent = false, status = 307 } = await this.handler(req);\n\n if (!destination) {\n throw new Error(`Redirect destination is required see ${path}`);\n }\n\n Redirect.to(destination as never, { permanent, status });\n\n return {};\n }\n\n middleware(middlewares: MiddlewareInput) {\n this.middlewares = toMiddlewareList(middlewares);\n return this;\n }\n\n /**\n * Hides this route behind a feature flag.\n *\n * When the flag is off the route behaves as though it does not exist — the\n * application's own `404` view, with a 404 status — rather than returning an\n * error page that confirms something is there.\n *\n * Returns `this`, so the route's type is unchanged and the path keeps its\n * entry in `ViewPaths`: `<Link>` and `Redirect.to` stay typed. That also means\n * the path is still in the route manifest the browser receives, so this gates\n * the *response*, not the route's existence. Declare the feature\n * `defineFeature({ serverOnly: true })` and keep unreleased routes out of the\n * client tree if the name itself is the secret.\n *\n * ## A `rollout` is not access control\n *\n * Gate on `active` — a feature nobody has switched on is unreachable, which is\n * the case this is for — or on a `when` that reads something the visitor\n * cannot choose, like the signed-in user.\n *\n * A `rollout` is neither, for an anonymous visitor. The subject is their\n * `session_id` cookie, which they supply; bucketing is a published pure\n * function of it, so they can compute one that lands inside any percentage and\n * send it. Signing the cookie would not fix this — they can equally well\n * discard it and ask for a fresh one until a signed id happens to land inside,\n * which for a 5% rollout is a couple of dozen requests. Nothing that hands out\n * identities on demand can restrict anything to a fraction of them.\n */\n feature(key: FeatureKey): this {\n this.featureGates = [...this.featureGates, key as string];\n return this;\n }\n}\n\nexport type FileBody = Blob | ReadableStream | ArrayBuffer | ArrayBufferView | string;\n\nexport type FileOutput =\n | Blob\n | Response\n | {\n file: FileBody;\n /** File name sent in `Content-Disposition`. Defaults to the blob name, if any. */\n name?: string;\n /** Overrides the mime type. Defaults to the blob type, then `application/octet-stream`. */\n type?: string;\n /** `true` sends `attachment` (download), `false` (default) sends `inline`. */\n download?: boolean;\n status?: number;\n headers?: Record<string, string>;\n };\n\nexport async function createFileResponse(output: FileOutput, headers: Headers) {\n if (output instanceof Response) {\n return output;\n }\n\n const isBlob = output instanceof Blob;\n const body = isBlob ? output : output.file;\n const name = isBlob ? (output as File).name : (output.name ?? (output.file as File)?.name);\n const type = (isBlob ? output.type : (output.type ?? (output.file as Blob)?.type)) || \"\";\n const download = isBlob ? false : (output.download ?? false);\n const status = isBlob ? 200 : (output.status ?? 200);\n\n if (!isBlob) {\n for (const [key, value] of Object.entries(output.headers ?? {})) {\n headers.set(key, value);\n }\n }\n\n // `Bun.file()` is lazy, a missing path only blows up once the stream is read,\n // which is after the response has been committed. Check it up front instead.\n if (body instanceof Blob && \"exists\" in body && typeof body.exists === \"function\") {\n const exists = await (body as any).exists();\n if (!exists) {\n return new Response(\"Not found\", { status: 404 });\n }\n }\n\n headers.set(\"Content-Type\", type || \"application/octet-stream\");\n if (body instanceof Blob) {\n headers.set(\"Content-Length\", String(body.size));\n }\n if (name) {\n headers.set(\"Content-Disposition\", contentDisposition(name, download));\n }\n\n return new Response((body instanceof Blob ? body.stream() : body) as BodyInit, {\n status,\n headers,\n });\n}\n\nexport class FileRoute<Input, Params> {\n kind = \"file\" as const;\n viewPath = \"FILE\";\n\n // @internal\n middlewares: string[] = [];\n featureGates: string[] = [];\n private handler: (req: HttpRequest<Input, Params>) => Promise<FileOutput> | FileOutput;\n constructor(\n handler?:\n | CallbackHandler<Input, FileOutput, Params>\n | [new () => Controller, ControllerMethods<any>],\n ) {\n if (!handler) {\n this.handler = (() => null) as any;\n } else if (typeof handler === \"function\") {\n this.handler = handler as any;\n } else {\n const [controller, methodName] = handler;\n this.handler = (req: HttpRequest<Input, Params>) => {\n const controllerInstance = new controller();\n return controllerInstance[methodName](req);\n };\n }\n }\n\n async run(req: HttpRequest<Input, Params>, path: string) {\n const file = await this.handler(req);\n\n if (!file) {\n throw new Error(`File route handler must return a file see ${path}`);\n }\n\n return { FILE: file };\n }\n\n middleware(middlewares: MiddlewareInput) {\n this.middlewares = toMiddlewareList(middlewares);\n return this;\n }\n\n /**\n * Hides this route behind a feature flag.\n *\n * When the flag is off the route behaves as though it does not exist — the\n * application's own `404` view, with a 404 status — rather than returning an\n * error page that confirms something is there.\n *\n * Returns `this`, so the route's type is unchanged and the path keeps its\n * entry in `ViewPaths`: `<Link>` and `Redirect.to` stay typed. That also means\n * the path is still in the route manifest the browser receives, so this gates\n * the *response*, not the route's existence. Declare the feature\n * `defineFeature({ serverOnly: true })` and keep unreleased routes out of the\n * client tree if the name itself is the secret.\n *\n * ## A `rollout` is not access control\n *\n * Gate on `active` — a feature nobody has switched on is unreachable, which is\n * the case this is for — or on a `when` that reads something the visitor\n * cannot choose, like the signed-in user.\n *\n * A `rollout` is neither, for an anonymous visitor. The subject is their\n * `session_id` cookie, which they supply; bucketing is a published pure\n * function of it, so they can compute one that lands inside any percentage and\n * send it. Signing the cookie would not fix this — they can equally well\n * discard it and ask for a fresh one until a signed id happens to land inside,\n * which for a 5% rollout is a couple of dozen requests. Nothing that hands out\n * identities on demand can restrict anything to a fraction of them.\n */\n feature(key: FeatureKey): this {\n this.featureGates = [...this.featureGates, key as string];\n return this;\n }\n}\n\n/**\n * A view's handler answers its props, which gemi renders; it has no status or\n * headers of its own to give. Spread into props, an `HttpResponse` rendered the\n * view with `kind`, `body` and `status` for data, and no error anywhere.\n */\nfunction assertNotHttpResponse<T>(data: T, viewPath: string): T {\n if (isHttpResponse(data)) {\n throw new Error(\n `The handler of view \"${viewPath}\" returned an HttpResponse. HttpResponse is for api routes; a view handler returns its props.`,\n );\n }\n return data;\n}\n\n/** Options for `ViewRoute.static()`. */\nexport interface StaticViewOptions {\n /**\n * A view path (a file under `app/views`, like any view) whose default export\n * renders the whole document — `<html>`, `<Head />`, `<body>` — in place of\n * the app's `RootLayout`. Its stylesheet replaces the app's: the page gets\n * the CSS this layout and the route's own views import, and none of what the\n * app's client entry imports.\n *\n * Left out, the page renders inside the app's `RootLayout` with the app's\n * stylesheet, exactly as a hydrated view would.\n */\n layout?: string;\n}\n\nexport class ViewRoute<Input, Output, Params> {\n middlewares: string[] = [];\n featureGates: string[] = [];\n /** @internal Set by `static()`. `null` for a hydrated view. */\n staticOptions: StaticViewOptions | null = null;\n private handler: (req: HttpRequest<Input, Params>) => Output;\n constructor(\n public viewPath: string,\n handler?:\n | CallbackHandler<Input, Output, Params>\n | [new () => Controller, ControllerMethods<any>],\n ) {\n if (!handler) {\n this.handler = (() => ({})) as any;\n } else if (typeof handler === \"function\") {\n this.handler = handler as any;\n } else {\n const [controller, methodName] = handler;\n this.handler = (req: HttpRequest<Input, Params>): Output => {\n const controllerInstance = new controller();\n return controllerInstance[methodName](req);\n };\n }\n }\n\n async run(req: HttpRequest<Input, Params>, path: string) {\n const data = assertNotHttpResponse(await this.handler(req), this.viewPath);\n\n return {\n [this.viewPath]: {\n ...data,\n breadcrumb: {\n label: (data as any)?.breadcrumb ?? \"\",\n href: path,\n },\n },\n };\n }\n\n middleware(middlewares: MiddlewareInput) {\n this.middlewares = toMiddlewareList(middlewares);\n return this;\n }\n\n /**\n * Serves this view as a static document: rendered on the server as usual,\n * but sent with no React on the client.\n *\n * The handler, middleware, redirects, `Query.prefetch`, `useQuery` reads,\n * `Head` metadata, dictionaries and status codes all work as for any view.\n * What changes is the document: gemi waits for the whole tree to settle\n * (no streaming) and sends it without the client entry, `modulepreload`s,\n * the `__GEMI_DATA__` payload, the theme script or React's streaming\n * scripts. A page with no islands ships no JavaScript at all.\n *\n * Interactive parts are islands — see `island()` in `gemi/client` — which\n * add one small loader plus each used island's own module.\n *\n * Because nothing hydrates, event handlers, effects and state in the view\n * never run in the browser. Links are plain `<a>`s, and a client-side\n * navigation from a hydrated page to this route becomes a full page load.\n *\n * Returns `this`, so the route's type (and its `ViewPaths` entry) is\n * unchanged.\n */\n static(options: StaticViewOptions = {}): this {\n this.staticOptions = { ...options };\n return this;\n }\n\n /**\n * Hides this route behind a feature flag.\n *\n * When the flag is off the route behaves as though it does not exist — the\n * application's own `404` view, with a 404 status — rather than returning an\n * error page that confirms something is there.\n *\n * Returns `this`, so the route's type is unchanged and the path keeps its\n * entry in `ViewPaths`: `<Link>` and `Redirect.to` stay typed. That also means\n * the path is still in the route manifest the browser receives, so this gates\n * the *response*, not the route's existence. Declare the feature\n * `defineFeature({ serverOnly: true })` and keep unreleased routes out of the\n * client tree if the name itself is the secret.\n *\n * ## A `rollout` is not access control\n *\n * Gate on `active` — a feature nobody has switched on is unreachable, which is\n * the case this is for — or on a `when` that reads something the visitor\n * cannot choose, like the signed-in user.\n *\n * A `rollout` is neither, for an anonymous visitor. The subject is their\n * `session_id` cookie, which they supply; bucketing is a published pure\n * function of it, so they can compute one that lands inside any percentage and\n * send it. Signing the cookie would not fix this — they can equally well\n * discard it and ask for a fresh one until a signed id happens to land inside,\n * which for a 5% rollout is a couple of dozen requests. Nothing that hands out\n * identities on demand can restrict anything to a fraction of them.\n */\n feature(key: FeatureKey): this {\n this.featureGates = [...this.featureGates, key as string];\n return this;\n }\n}\n\nexport class LayoutRoute<T extends ViewRoutes, Input, Output, Params> {\n children: new () => ViewRouter;\n middlewares: string[] = [];\n featureGates: string[] = [];\n /** @internal Set by `alwaysRun()`. */\n alwaysRuns = false;\n private handler: (req: HttpRequest<Input, Params>) => Output = (() => ({})) as any;\n constructor(\n public viewPath: string,\n handlerOrRoutes:\n | CallbackHandler<Input, Output, Params>\n | [new () => Controller, ControllerMethods<any>]\n | T,\n routes?: T,\n ) {\n if (typeof handlerOrRoutes === \"function\") {\n this.handler = handlerOrRoutes as any;\n this.children = class extends ViewRouter {\n routes = routes ?? ({} as T);\n };\n } else if (Array.isArray(handlerOrRoutes)) {\n const [controller, methodName] = handlerOrRoutes;\n this.handler = (req: HttpRequest<Input, Params>): Output => {\n const controllerInstance = new controller();\n return controllerInstance[methodName](req);\n };\n this.children = class extends ViewRouter {\n routes = routes ?? ({} as T);\n };\n } else {\n this.children = class extends ViewRouter {\n routes = handlerOrRoutes as T;\n };\n this.handler = () => ({}) as Output;\n }\n }\n\n async run(req: HttpRequest<Input, Params>, path: string) {\n const data = assertNotHttpResponse(await this.handler(req), this.viewPath);\n\n return {\n [this.viewPath]: {\n ...data,\n breadcrumb: {\n label: (data as any)?.breadcrumb ?? \"\",\n href: path,\n },\n },\n };\n }\n\n /**\n * Runs this layout's handler on every navigation underneath it, instead of\n * only when the client enters the layout.\n *\n * Costs a handler run per navigation, so reach for it when the layout's data\n * genuinely changes as the routes below it change. It is not a way to make a\n * handler-level access check reliable — use middleware for that, which runs\n * on every request regardless.\n */\n alwaysRun() {\n this.alwaysRuns = true;\n return this;\n }\n\n middleware(middlewares: MiddlewareInput) {\n this.middlewares = toMiddlewareList(middlewares);\n return this;\n }\n\n /**\n * Hides this route behind a feature flag.\n *\n * When the flag is off the route behaves as though it does not exist — the\n * application's own `404` view, with a 404 status — rather than returning an\n * error page that confirms something is there.\n *\n * Returns `this`, so the route's type is unchanged and the path keeps its\n * entry in `ViewPaths`: `<Link>` and `Redirect.to` stay typed. That also means\n * the path is still in the route manifest the browser receives, so this gates\n * the *response*, not the route's existence. Declare the feature\n * `defineFeature({ serverOnly: true })` and keep unreleased routes out of the\n * client tree if the name itself is the secret.\n *\n * ## A `rollout` is not access control\n *\n * Gate on `active` — a feature nobody has switched on is unreachable, which is\n * the case this is for — or on a `when` that reads something the visitor\n * cannot choose, like the signed-in user.\n *\n * A `rollout` is neither, for an anonymous visitor. The subject is their\n * `session_id` cookie, which they supply; bucketing is a published pure\n * function of it, so they can compute one that lands inside any percentage and\n * send it. Signing the cookie would not fix this — they can equally well\n * discard it and ask for a fresh one until a signed id happens to land inside,\n * which for a 5% rollout is a couple of dozen requests. Nothing that hands out\n * identities on demand can restrict anything to a fraction of them.\n */\n feature(key: FeatureKey): this {\n this.featureGates = [...this.featureGates, key as string];\n return this;\n }\n}\n\nexport class ViewRouter {\n middlewares: string[] = [];\n featureGates: string[] = [];\n routes: ViewRoutes = {};\n\n public view<C extends new () => Controller, M extends ControllerMethods<C>>(\n viewPath: string,\n handler?: [C, M],\n ): ParseViewControllerHandler<C, M>;\n public view<Input, Output, Params>(\n viewPath: string,\n handler?: ViewHandler<Input, Output, Params>,\n ): ViewRoute<Input, Output, Params>;\n public view<C extends new () => Controller, M extends ControllerMethods<C>>(\n viewPath: string,\n handler?: [C, M] | ViewHandler<any, any, any>,\n ) {\n return new ViewRoute(viewPath, handler as any);\n }\n\n public file<C extends new () => Controller, M extends ControllerMethods<C>>(\n handler: [C, M],\n ): ParseFileControllerHandler<C, M>;\n public file<Input, Params>(\n handler: CallbackHandler<Input, FileOutput, Params>,\n ): FileRoute<Input, Params>;\n public file<C extends new () => Controller, M extends ControllerMethods<C>>(\n handler: [C, M] | CallbackHandler<any, FileOutput, any>,\n ) {\n return new FileRoute(handler as any);\n }\n\n // @ts-expect-error\n public redirect<C extends new () => Controller, M extends ControllerMethods<C>>(\n handler?: [C, M],\n ): ParseViewControllerHandler<C, M>;\n public redirect<Input, Output, Params>(\n handler?: ViewHandler<Input, Output, Params>,\n ): ViewRoute<Input, Output, Params>;\n public redirect<C extends new () => Controller, M extends ControllerMethods<C>>(\n handler?: [C, M] | ViewHandler<any, any, any>,\n ) {\n return new RedirectRoute(handler as any);\n }\n\n public layout<T extends ViewRoutes>(\n viewPath: string,\n handlerOrRoutes: T,\n routes?: T,\n ): LayoutRoute<T, any, any, any>;\n public layout<\n T extends ViewRoutes,\n C extends new () => Controller,\n M extends ControllerMethods<C>,\n >(viewPath: string, handlerOrRoutes: [C, M], routes?: T): ParseLayoutControllerHandler<T, C, M>;\n public layout<T extends ViewRoutes, Input, Output, Params>(\n viewPath: string,\n handlerOrRoutes: CallbackHandler<Input, Output, Params>,\n routes?: T,\n ): LayoutRoute<T, Input, Output, Params>;\n public layout<\n T extends ViewRoutes,\n C extends new () => Controller,\n M extends ControllerMethods<C>,\n >(viewPath: string, handlerOrRoutes: ViewHandler<any, any, any> | [C, M] | T, routes?: T) {\n return new LayoutRoute(viewPath, handlerOrRoutes as any, routes);\n }\n}\n\ntype ViewRouteParser<T, Prefix extends PropertyKey = \"\"> =\n T extends ViewRoute<infer Input, infer Output, infer Params>\n ? KeyAndValue<`view:${Prefix & string}`, ViewHandler<Input, Output, Params>>\n : never;\n\ntype LayoutRouteParser<T, Prefix extends PropertyKey = \"\"> =\n T extends LayoutRoute<infer Routes, infer I, infer O, infer P>\n ? RoutesParser<Routes, Prefix> | KeyAndValue<`layout:${Prefix & string}`, ViewHandler<I, O, P>>\n : never;\n\ntype ParsePrefixAndKey<\n P extends PropertyKey,\n K extends PropertyKey,\n U extends string = `${P & string}${K & string}`,\n> = U extends \"//\"\n ? \"/\"\n : U extends `${infer T1}//${infer T2}`\n ? `${RemoveGroupPrefix<T1>}/${RemoveGroupPrefix<T2>}`\n : U extends `${infer T1}/${infer T2}/`\n ? `${RemoveGroupPrefix<T1>}/${RemoveGroupPrefix<T2>}`\n : RemoveGroupPrefix<U>;\n\ntype RouterInstanceParser<\n T extends new () => ViewRouter,\n Prefix extends PropertyKey = \"\",\n> = RoutesParser<InstanceType<T>[\"routes\"], Prefix>;\n\ntype RoutesParser<\n T extends ViewRoutes,\n Prefix extends PropertyKey = \"\",\n K extends keyof T = keyof T,\n> = K extends any\n ? T[K] extends new () => ViewRouter\n ? RouterInstanceParser<T[K], ParsePrefixAndKey<Prefix, K>>\n : T[K] extends LayoutRoute<any, any, any, any>\n ? LayoutRouteParser<T[K], ParsePrefixAndKey<Prefix, K>>\n : T[K] extends FileRoute<any, any>\n ? never\n : T[K] extends ViewRoute<any, any, any>\n ? ViewRouteParser<T[K], ParsePrefixAndKey<Prefix, K>>\n : never\n : never;\n\nexport type CreateViewRPC<\n T extends ViewRouter,\n Prefix extends PropertyKey = \"\",\n> = KeyAndValueToObject<RoutesParser<T[\"routes\"], Prefix>>;\n",
|
|
16
|
-
"import { HttpRequest } from \"./HttpRequest\";\n\nexport class Middleware<T extends Record<string, any> = Record<string, any>> {\n config: T = {} as T;\n constructor(protected req: HttpRequest) {}\n run(..._args: any[]): Promise<any> | any {\n return {};\n }\n\n static configure<T extends Middleware<any>>(\n this: new (req: HttpRequest<any, any>) => T,\n config: T[\"config\"],\n ) {\n const self = this as any;\n return class extends self {\n config = config;\n } as any;\n }\n}\n",
|
|
15
|
+
"import type { RemoveGroupPrefix } from \"../client/types\";\nimport { Redirect } from \"../facades/Redirect\";\nimport type { KeyAndValue, KeyAndValueToObject } from \"../internal/type-utils\";\nimport { contentDisposition } from \"./contentDisposition\";\nimport { isHttpResponse } from \"./HttpResponse\";\nimport type { Controller } from \"./Controller\";\nimport type { HttpRequest } from \"./HttpRequest\";\nimport type { FeatureKey } from \"../client/rpc\";\nimport { type MiddlewareInput, toMiddlewareList } from \"./middlewareList\";\n\ntype ControllerMethods<T extends new () => Controller> = {\n [K in keyof InstanceType<T>]: InstanceType<T>[K] extends Function ? K : never;\n}[keyof InstanceType<T>];\n\nexport type ViewRoutes = Record<\n string,\n | ViewRoute<any, any, any>\n | LayoutRoute<any, any, any, any>\n | RedirectRoute<any, any, any>\n | FileRoute<any, any>\n | (new () => ViewRouter)\n>;\n\ntype CallbackHandler<Input, Output, Params> = (\n req: HttpRequest<Input, Params>,\n) => Promise<Output> | Output;\n\nexport type ViewHandler<Input, Output, Params> =\n | CallbackHandler<Input, Output, Params>\n | (new () => Controller);\n\ntype ParseViewControllerHandler<\n C extends new () => Controller,\n M extends ControllerMethods<C>,\n> = InstanceType<C>[M] extends (req: HttpRequest<infer Input, infer Params>) => infer Output\n ? ViewRoute<Input, Output, Params>\n : never;\n\ntype ParseFileControllerHandler<\n C extends new () => Controller,\n M extends ControllerMethods<C>,\n> = InstanceType<C>[M] extends (req: HttpRequest<infer Input, infer Params>) => any\n ? FileRoute<Input, Params>\n : never;\n\ntype ParseLayoutControllerHandler<\n T extends ViewRoutes,\n C extends new () => Controller,\n M extends ControllerMethods<C>,\n> = InstanceType<C>[M] extends (req: HttpRequest<infer Input, infer Params>) => infer Output\n ? LayoutRoute<T, Input, Output, Params>\n : never;\n\ntype RedirectOutput = {\n destination: string;\n permanent?: boolean;\n status?: number;\n};\n\nexport class RedirectRoute<Input, Output, Params> {\n kind = \"redirect\" as const;\n viewPath = \"REDIRECT\";\n\n // @internal\n middlewares: string[] = [];\n featureGates: string[] = [];\n private handler: (req: HttpRequest<Input, Params>) => Promise<RedirectOutput>;\n constructor(\n handler?:\n | CallbackHandler<Input, RedirectOutput, Params>\n | [new () => Controller, ControllerMethods<any>],\n ) {\n if (!handler) {\n this.handler = (() => ({})) as any;\n } else if (typeof handler === \"function\") {\n this.handler = handler as any;\n } else {\n const [controller, methodName] = handler;\n this.handler = (req: HttpRequest<Input, Params>): Promise<RedirectOutput> => {\n const controllerInstance = new controller();\n return controllerInstance[methodName](req);\n };\n }\n }\n\n async run(req: HttpRequest<Input, Params>, path: string) {\n const { destination, permanent = false, status = 307 } = await this.handler(req);\n\n if (!destination) {\n throw new Error(`Redirect destination is required see ${path}`);\n }\n\n Redirect.to(destination as never, { permanent, status });\n\n return {};\n }\n\n middleware(middlewares: MiddlewareInput) {\n this.middlewares = toMiddlewareList(middlewares);\n return this;\n }\n\n /**\n * Hides this route behind a feature flag.\n *\n * When the flag is off the route behaves as though it does not exist — the\n * application's own `404` view, with a 404 status — rather than returning an\n * error page that confirms something is there.\n *\n * Returns `this`, so the route's type is unchanged and the path keeps its\n * entry in `ViewPaths`: `<Link>` and `Redirect.to` stay typed. That also means\n * the path is still in the route manifest the browser receives, so this gates\n * the *response*, not the route's existence. Declare the feature\n * `defineFeature({ serverOnly: true })` and keep unreleased routes out of the\n * client tree if the name itself is the secret.\n *\n * ## A `rollout` is not access control\n *\n * Gate on `active` — a feature nobody has switched on is unreachable, which is\n * the case this is for — or on a `when` that reads something the visitor\n * cannot choose, like the signed-in user.\n *\n * A `rollout` is neither, for an anonymous visitor. The subject is their\n * `session_id` cookie, which they supply; bucketing is a published pure\n * function of it, so they can compute one that lands inside any percentage and\n * send it. Signing the cookie would not fix this — they can equally well\n * discard it and ask for a fresh one until a signed id happens to land inside,\n * which for a 5% rollout is a couple of dozen requests. Nothing that hands out\n * identities on demand can restrict anything to a fraction of them.\n */\n feature(key: FeatureKey): this {\n this.featureGates = [...this.featureGates, key as string];\n return this;\n }\n}\n\nexport type FileBody = Blob | ReadableStream | ArrayBuffer | ArrayBufferView | string;\n\nexport type FileOutput =\n | Blob\n | Response\n | {\n file: FileBody;\n /** File name sent in `Content-Disposition`. Defaults to the blob name, if any. */\n name?: string;\n /** Overrides the mime type. Defaults to the blob type, then `application/octet-stream`. */\n type?: string;\n /** `true` sends `attachment` (download), `false` (default) sends `inline`. */\n download?: boolean;\n status?: number;\n headers?: Record<string, string>;\n };\n\nexport async function createFileResponse(output: FileOutput, headers: Headers) {\n if (output instanceof Response) {\n return output;\n }\n\n const isBlob = output instanceof Blob;\n const body = isBlob ? output : output.file;\n const name = isBlob ? (output as File).name : (output.name ?? (output.file as File)?.name);\n const type = (isBlob ? output.type : (output.type ?? (output.file as Blob)?.type)) || \"\";\n const download = isBlob ? false : (output.download ?? false);\n const status = isBlob ? 200 : (output.status ?? 200);\n\n if (!isBlob) {\n for (const [key, value] of Object.entries(output.headers ?? {})) {\n headers.set(key, value);\n }\n }\n\n // `Bun.file()` is lazy, a missing path only blows up once the stream is read,\n // which is after the response has been committed. Check it up front instead.\n if (body instanceof Blob && \"exists\" in body && typeof body.exists === \"function\") {\n const exists = await (body as any).exists();\n if (!exists) {\n return new Response(\"Not found\", { status: 404 });\n }\n }\n\n headers.set(\"Content-Type\", type || \"application/octet-stream\");\n if (body instanceof Blob) {\n headers.set(\"Content-Length\", String(body.size));\n }\n if (name) {\n headers.set(\"Content-Disposition\", contentDisposition(name, download));\n }\n\n return new Response((body instanceof Blob ? body.stream() : body) as BodyInit, {\n status,\n headers,\n });\n}\n\nexport class FileRoute<Input, Params> {\n kind = \"file\" as const;\n viewPath = \"FILE\";\n\n // @internal\n middlewares: string[] = [];\n featureGates: string[] = [];\n private handler: (req: HttpRequest<Input, Params>) => Promise<FileOutput> | FileOutput;\n constructor(\n handler?:\n | CallbackHandler<Input, FileOutput, Params>\n | [new () => Controller, ControllerMethods<any>],\n ) {\n if (!handler) {\n this.handler = (() => null) as any;\n } else if (typeof handler === \"function\") {\n this.handler = handler as any;\n } else {\n const [controller, methodName] = handler;\n this.handler = (req: HttpRequest<Input, Params>) => {\n const controllerInstance = new controller();\n return controllerInstance[methodName](req);\n };\n }\n }\n\n async run(req: HttpRequest<Input, Params>, path: string) {\n const file = await this.handler(req);\n\n if (!file) {\n throw new Error(`File route handler must return a file see ${path}`);\n }\n\n return { FILE: file };\n }\n\n middleware(middlewares: MiddlewareInput) {\n this.middlewares = toMiddlewareList(middlewares);\n return this;\n }\n\n /**\n * Hides this route behind a feature flag.\n *\n * When the flag is off the route behaves as though it does not exist — the\n * application's own `404` view, with a 404 status — rather than returning an\n * error page that confirms something is there.\n *\n * Returns `this`, so the route's type is unchanged and the path keeps its\n * entry in `ViewPaths`: `<Link>` and `Redirect.to` stay typed. That also means\n * the path is still in the route manifest the browser receives, so this gates\n * the *response*, not the route's existence. Declare the feature\n * `defineFeature({ serverOnly: true })` and keep unreleased routes out of the\n * client tree if the name itself is the secret.\n *\n * ## A `rollout` is not access control\n *\n * Gate on `active` — a feature nobody has switched on is unreachable, which is\n * the case this is for — or on a `when` that reads something the visitor\n * cannot choose, like the signed-in user.\n *\n * A `rollout` is neither, for an anonymous visitor. The subject is their\n * `session_id` cookie, which they supply; bucketing is a published pure\n * function of it, so they can compute one that lands inside any percentage and\n * send it. Signing the cookie would not fix this — they can equally well\n * discard it and ask for a fresh one until a signed id happens to land inside,\n * which for a 5% rollout is a couple of dozen requests. Nothing that hands out\n * identities on demand can restrict anything to a fraction of them.\n */\n feature(key: FeatureKey): this {\n this.featureGates = [...this.featureGates, key as string];\n return this;\n }\n}\n\n/**\n * A view's handler answers its props, which gemi renders; it has no status or\n * headers of its own to give. Spread into props, an `HttpResponse` rendered the\n * view with `kind`, `body` and `status` for data, and no error anywhere.\n */\nfunction assertNotHttpResponse<T>(data: T, viewPath: string): T {\n if (isHttpResponse(data)) {\n throw new Error(\n `The handler of view \"${viewPath}\" returned an HttpResponse. HttpResponse is for api routes; a view handler returns its props.`,\n );\n }\n return data;\n}\n\n/** Options for `ViewRoute.static()`. */\nexport interface StaticViewOptions {\n /**\n * A view path (a file under `app/views`, like any view) whose default export\n * renders the whole document — `<html>`, `<Head />`, `<body>` — in place of\n * the app's `RootLayout`. Its stylesheet replaces the app's: the page gets\n * the CSS this layout and the route's own views import, and none of what the\n * app's client entry imports.\n *\n * Left out, the page renders inside the app's `RootLayout` with the app's\n * stylesheet, exactly as a hydrated view would.\n */\n layout?: string;\n /**\n * The `Cache-Control` header the page is sent with, for example\n * `\"public, max-age=60, s-maxage=600, stale-while-revalidate=86400\"` to let a\n * CDN cache it. Left out, gemi sends none and the cache in front decides.\n *\n * Only the rendered page gets it — not a redirect, an error or the 404 a\n * missing record turns the request into — and only when the response sets\n * no cookie: a page whose handler or middleware set one is sent\n * `private, no-store` instead, so a shared cache never stores one visitor's\n * cookie and hands it to the next. A `Cache-Control` the handler set itself\n * (`req.ctx().headers`) wins over this option.\n */\n cacheControl?: string;\n /**\n * Mint the `session_id` cookie for a visitor who has none, as a hydrated view\n * does. Off by default: a static page is one body for everyone, and a\n * per-visitor `Set-Cookie` keeps a CDN from caching it. Turn it on when the\n * page's flags roll out by percentage to anonymous visitors (the rollout\n * subject is that cookie) and the page is not meant to be cached.\n */\n session?: boolean;\n /**\n * Set the `csrf_token` cookie, as a hydrated view does. Off by default, for\n * the same reason as `session`. Turn it on only when a form on this page\n * posts to a same-origin route behind `CSRFMiddleware`; a form that posts to\n * an api route with its own protection (a honeypot, a token in the body, an\n * `Origin` check) needs nothing from the page.\n */\n csrf?: boolean;\n}\n\nexport class ViewRoute<Input, Output, Params> {\n middlewares: string[] = [];\n featureGates: string[] = [];\n /** @internal Set by `static()`. `null` for a hydrated view. */\n staticOptions: StaticViewOptions | null = null;\n private handler: (req: HttpRequest<Input, Params>) => Output;\n constructor(\n public viewPath: string,\n handler?:\n | CallbackHandler<Input, Output, Params>\n | [new () => Controller, ControllerMethods<any>],\n ) {\n if (!handler) {\n this.handler = (() => ({})) as any;\n } else if (typeof handler === \"function\") {\n this.handler = handler as any;\n } else {\n const [controller, methodName] = handler;\n this.handler = (req: HttpRequest<Input, Params>): Output => {\n const controllerInstance = new controller();\n return controllerInstance[methodName](req);\n };\n }\n }\n\n async run(req: HttpRequest<Input, Params>, path: string) {\n const data = assertNotHttpResponse(await this.handler(req), this.viewPath);\n\n return {\n [this.viewPath]: {\n ...data,\n breadcrumb: {\n label: (data as any)?.breadcrumb ?? \"\",\n href: path,\n },\n },\n };\n }\n\n middleware(middlewares: MiddlewareInput) {\n this.middlewares = toMiddlewareList(middlewares);\n return this;\n }\n\n /**\n * Serves this view as a static document: rendered on the server as usual,\n * but sent with no React on the client.\n *\n * The handler, middleware, redirects, `Query.prefetch`, `useQuery` reads,\n * `Head` metadata, dictionaries and status codes all work as for any view.\n * What changes is the document: gemi waits for the whole tree to settle\n * (no streaming) and sends it without the client entry, `modulepreload`s,\n * the `__GEMI_DATA__` payload, the theme script or React's streaming\n * scripts. A page with no islands ships no JavaScript at all.\n *\n * Interactive parts are islands — see `island()` in `gemi/client` — which\n * add one small loader plus each used island's own module.\n *\n * Because nothing hydrates, event handlers, effects and state in the view\n * never run in the browser. Links are plain `<a>`s, and a client-side\n * navigation from a hydrated page to this route becomes a full page load.\n *\n * Returns `this`, so the route's type (and its `ViewPaths` entry) is\n * unchanged.\n */\n static(options: StaticViewOptions = {}): this {\n this.staticOptions = { ...options };\n return this;\n }\n\n /**\n * Hides this route behind a feature flag.\n *\n * When the flag is off the route behaves as though it does not exist — the\n * application's own `404` view, with a 404 status — rather than returning an\n * error page that confirms something is there.\n *\n * Returns `this`, so the route's type is unchanged and the path keeps its\n * entry in `ViewPaths`: `<Link>` and `Redirect.to` stay typed. That also means\n * the path is still in the route manifest the browser receives, so this gates\n * the *response*, not the route's existence. Declare the feature\n * `defineFeature({ serverOnly: true })` and keep unreleased routes out of the\n * client tree if the name itself is the secret.\n *\n * ## A `rollout` is not access control\n *\n * Gate on `active` — a feature nobody has switched on is unreachable, which is\n * the case this is for — or on a `when` that reads something the visitor\n * cannot choose, like the signed-in user.\n *\n * A `rollout` is neither, for an anonymous visitor. The subject is their\n * `session_id` cookie, which they supply; bucketing is a published pure\n * function of it, so they can compute one that lands inside any percentage and\n * send it. Signing the cookie would not fix this — they can equally well\n * discard it and ask for a fresh one until a signed id happens to land inside,\n * which for a 5% rollout is a couple of dozen requests. Nothing that hands out\n * identities on demand can restrict anything to a fraction of them.\n */\n feature(key: FeatureKey): this {\n this.featureGates = [...this.featureGates, key as string];\n return this;\n }\n}\n\nexport class LayoutRoute<T extends ViewRoutes, Input, Output, Params> {\n children: new () => ViewRouter;\n middlewares: string[] = [];\n featureGates: string[] = [];\n /** @internal Set by `alwaysRun()`. */\n alwaysRuns = false;\n private handler: (req: HttpRequest<Input, Params>) => Output = (() => ({})) as any;\n constructor(\n public viewPath: string,\n handlerOrRoutes:\n | CallbackHandler<Input, Output, Params>\n | [new () => Controller, ControllerMethods<any>]\n | T,\n routes?: T,\n ) {\n if (typeof handlerOrRoutes === \"function\") {\n this.handler = handlerOrRoutes as any;\n this.children = class extends ViewRouter {\n routes = routes ?? ({} as T);\n };\n } else if (Array.isArray(handlerOrRoutes)) {\n const [controller, methodName] = handlerOrRoutes;\n this.handler = (req: HttpRequest<Input, Params>): Output => {\n const controllerInstance = new controller();\n return controllerInstance[methodName](req);\n };\n this.children = class extends ViewRouter {\n routes = routes ?? ({} as T);\n };\n } else {\n this.children = class extends ViewRouter {\n routes = handlerOrRoutes as T;\n };\n this.handler = () => ({}) as Output;\n }\n }\n\n async run(req: HttpRequest<Input, Params>, path: string) {\n const data = assertNotHttpResponse(await this.handler(req), this.viewPath);\n\n return {\n [this.viewPath]: {\n ...data,\n breadcrumb: {\n label: (data as any)?.breadcrumb ?? \"\",\n href: path,\n },\n },\n };\n }\n\n /**\n * Runs this layout's handler on every navigation underneath it, instead of\n * only when the client enters the layout.\n *\n * Costs a handler run per navigation, so reach for it when the layout's data\n * genuinely changes as the routes below it change. It is not a way to make a\n * handler-level access check reliable — use middleware for that, which runs\n * on every request regardless.\n */\n alwaysRun() {\n this.alwaysRuns = true;\n return this;\n }\n\n middleware(middlewares: MiddlewareInput) {\n this.middlewares = toMiddlewareList(middlewares);\n return this;\n }\n\n /**\n * Hides this route behind a feature flag.\n *\n * When the flag is off the route behaves as though it does not exist — the\n * application's own `404` view, with a 404 status — rather than returning an\n * error page that confirms something is there.\n *\n * Returns `this`, so the route's type is unchanged and the path keeps its\n * entry in `ViewPaths`: `<Link>` and `Redirect.to` stay typed. That also means\n * the path is still in the route manifest the browser receives, so this gates\n * the *response*, not the route's existence. Declare the feature\n * `defineFeature({ serverOnly: true })` and keep unreleased routes out of the\n * client tree if the name itself is the secret.\n *\n * ## A `rollout` is not access control\n *\n * Gate on `active` — a feature nobody has switched on is unreachable, which is\n * the case this is for — or on a `when` that reads something the visitor\n * cannot choose, like the signed-in user.\n *\n * A `rollout` is neither, for an anonymous visitor. The subject is their\n * `session_id` cookie, which they supply; bucketing is a published pure\n * function of it, so they can compute one that lands inside any percentage and\n * send it. Signing the cookie would not fix this — they can equally well\n * discard it and ask for a fresh one until a signed id happens to land inside,\n * which for a 5% rollout is a couple of dozen requests. Nothing that hands out\n * identities on demand can restrict anything to a fraction of them.\n */\n feature(key: FeatureKey): this {\n this.featureGates = [...this.featureGates, key as string];\n return this;\n }\n}\n\nexport class ViewRouter {\n middlewares: string[] = [];\n featureGates: string[] = [];\n routes: ViewRoutes = {};\n\n public view<C extends new () => Controller, M extends ControllerMethods<C>>(\n viewPath: string,\n handler?: [C, M],\n ): ParseViewControllerHandler<C, M>;\n public view<Input, Output, Params>(\n viewPath: string,\n handler?: ViewHandler<Input, Output, Params>,\n ): ViewRoute<Input, Output, Params>;\n public view<C extends new () => Controller, M extends ControllerMethods<C>>(\n viewPath: string,\n handler?: [C, M] | ViewHandler<any, any, any>,\n ) {\n return new ViewRoute(viewPath, handler as any);\n }\n\n public file<C extends new () => Controller, M extends ControllerMethods<C>>(\n handler: [C, M],\n ): ParseFileControllerHandler<C, M>;\n public file<Input, Params>(\n handler: CallbackHandler<Input, FileOutput, Params>,\n ): FileRoute<Input, Params>;\n public file<C extends new () => Controller, M extends ControllerMethods<C>>(\n handler: [C, M] | CallbackHandler<any, FileOutput, any>,\n ) {\n return new FileRoute(handler as any);\n }\n\n // @ts-expect-error\n public redirect<C extends new () => Controller, M extends ControllerMethods<C>>(\n handler?: [C, M],\n ): ParseViewControllerHandler<C, M>;\n public redirect<Input, Output, Params>(\n handler?: ViewHandler<Input, Output, Params>,\n ): ViewRoute<Input, Output, Params>;\n public redirect<C extends new () => Controller, M extends ControllerMethods<C>>(\n handler?: [C, M] | ViewHandler<any, any, any>,\n ) {\n return new RedirectRoute(handler as any);\n }\n\n public layout<T extends ViewRoutes>(\n viewPath: string,\n handlerOrRoutes: T,\n routes?: T,\n ): LayoutRoute<T, any, any, any>;\n public layout<\n T extends ViewRoutes,\n C extends new () => Controller,\n M extends ControllerMethods<C>,\n >(viewPath: string, handlerOrRoutes: [C, M], routes?: T): ParseLayoutControllerHandler<T, C, M>;\n public layout<T extends ViewRoutes, Input, Output, Params>(\n viewPath: string,\n handlerOrRoutes: CallbackHandler<Input, Output, Params>,\n routes?: T,\n ): LayoutRoute<T, Input, Output, Params>;\n public layout<\n T extends ViewRoutes,\n C extends new () => Controller,\n M extends ControllerMethods<C>,\n >(viewPath: string, handlerOrRoutes: ViewHandler<any, any, any> | [C, M] | T, routes?: T) {\n return new LayoutRoute(viewPath, handlerOrRoutes as any, routes);\n }\n}\n\ntype ViewRouteParser<T, Prefix extends PropertyKey = \"\"> =\n T extends ViewRoute<infer Input, infer Output, infer Params>\n ? KeyAndValue<`view:${Prefix & string}`, ViewHandler<Input, Output, Params>>\n : never;\n\ntype LayoutRouteParser<T, Prefix extends PropertyKey = \"\"> =\n T extends LayoutRoute<infer Routes, infer I, infer O, infer P>\n ? RoutesParser<Routes, Prefix> | KeyAndValue<`layout:${Prefix & string}`, ViewHandler<I, O, P>>\n : never;\n\ntype ParsePrefixAndKey<\n P extends PropertyKey,\n K extends PropertyKey,\n U extends string = `${P & string}${K & string}`,\n> = U extends \"//\"\n ? \"/\"\n : U extends `${infer T1}//${infer T2}`\n ? `${RemoveGroupPrefix<T1>}/${RemoveGroupPrefix<T2>}`\n : U extends `${infer T1}/${infer T2}/`\n ? `${RemoveGroupPrefix<T1>}/${RemoveGroupPrefix<T2>}`\n : RemoveGroupPrefix<U>;\n\ntype RouterInstanceParser<\n T extends new () => ViewRouter,\n Prefix extends PropertyKey = \"\",\n> = RoutesParser<InstanceType<T>[\"routes\"], Prefix>;\n\ntype RoutesParser<\n T extends ViewRoutes,\n Prefix extends PropertyKey = \"\",\n K extends keyof T = keyof T,\n> = K extends any\n ? T[K] extends new () => ViewRouter\n ? RouterInstanceParser<T[K], ParsePrefixAndKey<Prefix, K>>\n : T[K] extends LayoutRoute<any, any, any, any>\n ? LayoutRouteParser<T[K], ParsePrefixAndKey<Prefix, K>>\n : T[K] extends FileRoute<any, any>\n ? never\n : T[K] extends ViewRoute<any, any, any>\n ? ViewRouteParser<T[K], ParsePrefixAndKey<Prefix, K>>\n : never\n : never;\n\nexport type CreateViewRPC<\n T extends ViewRouter,\n Prefix extends PropertyKey = \"\",\n> = KeyAndValueToObject<RoutesParser<T[\"routes\"], Prefix>>;\n",
|
|
16
|
+
"import { HttpRequest } from \"./HttpRequest\";\n\nexport class Middleware<T extends Record<string, any> = Record<string, any>> {\n /**\n * Run this middleware even when one before it in the chain refused the\n * request, so the headers it sets reach the refusal (a `body-limit` 413, a\n * `rate-limit` 429, an `auth` 401). `CorsMiddleware` sets it, and so should\n * an app's own middleware that only adds response headers such as CORS.\n *\n * Such a middleware must not refuse, read the body, or rely on what the\n * middleware before it returned: after a refusal it runs on a request that\n * will not reach the handler. One that throws then is logged and ignored.\n */\n static runsOnRefusal = false;\n\n config: T = {} as T;\n constructor(protected req: HttpRequest) {}\n run(..._args: any[]): Promise<any> | any {\n return {};\n }\n\n static configure<T extends Middleware<any>>(\n this: new (req: HttpRequest<any, any>) => T,\n config: T[\"config\"],\n ) {\n const self = this as any;\n return class extends self {\n config = config;\n } as any;\n }\n}\n",
|
|
17
17
|
"import type { HttpRequest } from \"./HttpRequest\";\nimport type { Middleware } from \"./Middleware\";\n\ntype MiddlewareClass = new (req: HttpRequest) => Middleware;\n\n// Config key: `middleware`. Derived from `MiddlewareServiceProvider`.\nexport interface MiddlewareConfig {\n aliases?: Record<string, MiddlewareClass>;\n /**\n * Runs, in order, on every request the server receives — static files\n * included — before the router matches a route and before any route\n * middleware. Each entry is a middleware class or an alias from `aliases`,\n * with `alias:param` arguments as in a route's list. See `docs/middleware.md`.\n */\n global?: (string | MiddlewareClass)[];\n /**\n * The request body limit for every api route without a `body-limit` of its\n * own: bytes, or a size such as `\"1mb\"`. A route's `body-limit:…` replaces\n * it, raising it as well as lowering it (`body-limit:none` lifts it). Unset,\n * only Bun's server-wide `maxRequestBodySize` applies. See\n * `docs/middleware.md`.\n */\n bodyLimit?: string | number | null;\n}\n\nexport function defineMiddlewareConfig(\n config: MiddlewareConfig,\n): MiddlewareConfig {\n return config;\n}\n\nexport function middlewareConfigDefaults(): Required<MiddlewareConfig> {\n return {\n aliases: {},\n global: [],\n bodyLimit: null,\n };\n}\n",
|
|
18
18
|
"/**\n * The search parameter carrying the page a signed-out visitor was trying to\n * reach. `AuthenticationMiddleware` writes it onto the sign-in redirect —\n * `/auth/sign-in?redirect=%2Finvoices%3Fpage%3D2` — and `Auth.intendedUrl()` /\n * `useIntendedUrl()` read it back after sign-in.\n */\nexport const INTENDED_URL_PARAM = \"redirect\";\n\n// Only ever compared against, never requested.\nconst PROBE_ORIGIN = \"http://gemi.invalid\";\n\n/**\n * `value` if it is a path on this origin, `fallback` otherwise.\n *\n * The intended URL arrives in a query string anybody can write, so reading it\n * back unchecked is an open redirect: `?redirect=https://evil.example` signs\n * the user in and hands them to a look-alike. Only a same-origin path passes:\n * `//evil.example` and `/\\evil.example` are protocol-relative to a browser and\n * are refused, as is anything a browser would strip control characters out of\n * before resolving.\n *\n * Returns path, search and hash — never an origin — so the result is safe to\n * hand to `push`, `Redirect.to` or a `Location` header alike.\n */\nexport function safeRedirectPath(value: unknown, fallback = \"/\"): string {\n if (typeof value !== \"string\" || !value.startsWith(\"/\")) {\n return fallback;\n }\n if (/[\\u0000-\\u001f\\u007f\\\\]/.test(value) || value.startsWith(\"//\")) {\n return fallback;\n }\n try {\n const url = new URL(value, PROBE_ORIGIN);\n if (url.origin !== PROBE_ORIGIN) {\n return fallback;\n }\n // `push` and `Redirect.to` run their path through `applyParams`, which\n // reads `:x` as a route parameter and collapses `//` — both legal in a\n // query (`?next=https://…`) and in a path. Percent-encoded they mean the\n // same to `URLSearchParams` and survive the trip; left raw, `?redirect=/:x`\n // throws in dev and navigates to `/undefined` in production.\n const tail = `${url.search}${url.hash}`.replaceAll(\"/\", \"%2F\");\n const path = `${url.pathname}${tail}`.replaceAll(\":\", \"%3A\");\n // The `//` test above reads the input, but `.` and `..` segments are\n // resolved away by `new URL` afterwards, and resolving them can *produce* a\n // leading `//`: `/..//evil.example` normalizes to `//evil.example`, which is\n // protocol-relative to a browser. Test what actually goes out.\n return path.startsWith(\"//\") ? fallback : path;\n } catch {\n return fallback;\n }\n}\n\n/**\n * Whether the client addressed this request over https — through the proxy in\n * front if there is one, since TLS is nearly always terminated before the app\n * and a forged `X-Forwarded-Proto` only spoils the forger's own cookie.\n *\n * Not `origin.includes(\"localhost\")`: the URL is built from the `Host` header,\n * so `localhost.evil.example` would read as local and drop `Secure`.\n */\nexport function isSecureRequest(request: Request): boolean {\n const forwarded = request.headers.get(\"x-forwarded-proto\")?.split(\",\")[0]?.trim();\n return forwarded ? forwarded === \"https\" : new URL(request.url).protocol === \"https:\";\n}\n\n/**\n * Whether a `Redirect` directive names somewhere outside the router — an\n * absolute http(s) URL or a protocol-relative one — and so has to leave the\n * page rather than be looked up as a route.\n *\n * Only those two shapes. The value goes to `location.replace`, and *any*\n * scheme that parses would include `javascript:`, which runs in this document\n * rather than navigating away from it: an app passing a user-influenced value\n * to `Redirect.external` would be handing out same-origin script execution.\n * Anything else falls through to the router, which cannot leave the origin.\n */\nexport function isExternalRedirect(path: string | null | undefined): boolean {\n return /^(https?:\\/\\/|\\/\\/)/i.test(path ?? \"\");\n}\n",
|
|
19
19
|
"import type { HttpRequest } from \"../http/HttpRequest\";\nimport { app } from \"../foundation/app\";\nimport { Translator } from \"../i18n/Translator\";\nimport { INTENDED_URL_PARAM } from \"../utils/intendedUrl\";\nimport { AuthManager } from \"./AuthManager\";\n\n/**\n * The page a view request stands for, as the client router would `push` it:\n * without the `.json` / `.og` suffix of a data request, and without the locale\n * segment — `useNavigate` adds the current one back, and the sign-in page is\n * already under it by the time this is read, so keeping it would double it.\n */\nexport function intendedPathOf(req: HttpRequest, keepSearch = true): string {\n const url = new URL(req.rawRequest.url);\n let pathname = url.pathname.replace(/\\.(json|og)$/, \"\");\n\n const [, maybeLocale, ...rest] = pathname.split(\"/\");\n if (app(Translator).supportedLocales.includes(maybeLocale)) {\n pathname = `/${rest.join(\"/\")}`;\n }\n\n return keepSearch ? `${pathname}${url.search}` : pathname;\n}\n\n/** Trailing slashes apart, since `/x` and `/x/` are the same page here. */\nfunction samePath(a: string, b: string) {\n const trim = (value: string) => value.replace(/\\/+$/, \"\") || \"/\";\n return trim(a) === trim(b);\n}\n\n/**\n * Where a signed-out request is sent: `signInPath` — the route's own, from\n * `\"auth:/admin/sign-in\"`, or else `auth.signInPath` — carrying the page the\n * request was for, so sign-in can return there.\n *\n * Only a view request carries one. An API request answers 401 and never\n * redirects, and a call outside any HTTP scope has no page.\n */\nexport function signInLocation(req: HttpRequest | undefined, signInPath?: string): string {\n const path = signInPath || app(AuthManager).config.signInPath;\n // An absolute `signInPath` — sign-in hosted on another origin — keeps its\n // origin; a path stays a path. Anything else is a configuration mistake, and\n // it ends up in a `Location` and in a client-side `location.replace`, so it\n // is refused rather than redirected to: a bare `https` (what the route form\n // `\"auth:https://sso.example/login\"` truncates to, since the alias parser\n // splits on `:`) would otherwise send signed-out users to `/https`.\n const isAbsolute = /^[a-z][a-z\\d+.-]*:/i.test(path);\n if (isAbsolute ? !/^https?:\\/\\//i.test(path) : !path.startsWith(\"/\")) {\n throw new Error(\n `\\`auth.signInPath\\` must be a path like \"/auth/sign-in\", or an http(s) URL for sign-in hosted elsewhere. Got \"${path}\". A route's own \\`\"auth:<path>\"\\` cannot carry a URL, because the alias parser splits it on the colon.`,\n );\n }\n const target = new URL(path, \"http://gemi.invalid\");\n\n if (req?.kind === \"view\") {\n // Not the query string when sign-in is on another origin: a protected page\n // reached with a single-use token (`?invite=`, `?token=`) would hand it to\n // that origin, and to its logs and `Referer`.\n const intended = intendedPathOf(req, !isAbsolute);\n // Sending the sign-in page back to itself would only be a loop.\n if (isAbsolute || !samePath(new URL(intended, target).pathname, target.pathname)) {\n target.searchParams.set(INTENDED_URL_PARAM, intended);\n }\n }\n\n return isAbsolute ? target.href : `${target.pathname}${target.search}`;\n}\n",
|
|
20
20
|
"import type { User } from \"./types\";\n\n/** The name of gemi's session credential, as a cookie and as a header. */\nexport const ACCESS_TOKEN = \"access_token\";\n\n/**\n * Anything that carries a request's credentials, such as an `HttpRequest`.\n */\nexport interface AccessTokenSource {\n cookies: { get(name: string): string | null | undefined };\n headers: { get(name: string): string | null | undefined };\n}\n\n/**\n * The access token `source` carries: the `access_token` cookie a browser\n * sends, or else the `access_token` header a native client sends. `null` when\n * it carries neither.\n *\n * The one place gemi reads the token. `AuthenticationMiddleware`,\n * `Auth.user()` and sign-out used to read it each in their own way, and\n * disagreed on whether the header counted — so a header client was signed in on a route carrying `auth` and\n * refused on one without it (#587).\n *\n * An empty cookie — what a sign-out leaves a client that ignored the clearing\n * `Set-Cookie` — counts as no cookie, so a header beside it is still read.\n * When both are present the cookie wins, as it always has.\n *\n * Reading a token is not authenticating: it is only a claim until\n * `AuthManager.getSession` finds a live session for it. See `sessionUser`.\n */\nexport function readAccessToken(source: AccessTokenSource | null | undefined): string | null {\n return source?.cookies?.get(ACCESS_TOKEN) || source?.headers?.get(ACCESS_TOKEN) || null;\n}\n\n/**\n * The user whose live session `source`'s access token names, or `null` when\n * it carries no token, or one with no session, an expired one included.\n *\n * Takes the manager rather than resolving it, so the facade's own accessor —\n * and a test's stand-in for it — is the one asked.\n */\nexport async function sessionUser(\n auth: { getSession(token: string, userAgent: string): Promise<{ user?: User } | null> },\n source: AccessTokenSource | null | undefined,\n): Promise<User | null> {\n const token = readAccessToken(source);\n if (!token) {\n return null;\n }\n // Passed on as the request carried it, absent included, exactly as each\n // reader did before; a user provider may store and compare it.\n const session = await auth.getSession(token, source.headers.get(\"User-Agent\") as string);\n return session?.user ?? null;\n}\n",
|
|
21
21
|
"import { Middleware } from \"./Middleware\";\nimport { RequestContext } from \"./requestContext\";\nimport { AuthenticationError } from \"./errors\";\nimport { AuthManager } from \"../auth/AuthManager\";\nimport { signInLocation } from \"../auth/signInRedirect\";\nimport { app } from \"../foundation/app\";\nimport { sessionUser } from \"../auth/accessToken\";\n\n/**\n * Refuses a request with no signed-in user: none on the request context, and\n * no `access_token` cookie or header naming a live session. An API route gets\n * a 401, and a view a redirect to the sign-in page carrying the page that was\n * asked for — `/auth/sign-in?redirect=%2Finvoices` — for `useIntendedUrl()` or\n * `Auth.intendedUrl()` to send the user back to once they sign in.\n *\n * The sign-in page is `signInPath` in the auth config. A route that needs a\n * different one names it as the alias parameter:\n *\n * ```ts\n * \"/admin\": this.view(\"Admin\").middleware([\"auth:/admin/sign-in\"]),\n * ```\n */\nexport class AuthenticationMiddleware extends Middleware {\n async run(signInPath?: string) {\n const requestContextStore = RequestContext.getStore();\n const req = requestContextStore.req;\n\n // A user already on the context passes, token or not. It was put there by\n // code that runs before this one — a global middleware, a route middleware\n // listed ahead of `auth`, or a lookup like this one — and that code is the\n // app's own, so a user it set is one it vouches for: an SSO header a proxy\n // in front of the app wrote, an API key it checked (#577). Nothing in gemi\n // puts a user there from request data it has not verified. The flip side\n // is that an app's middleware must never `setUser` anyone it has not\n // authenticated; see \"Who counts as signed in\" in docs/middleware.md.\n if (requestContextStore.user) {\n return {};\n }\n\n const user = await sessionUser(app(AuthManager), req);\n if (!user) {\n throw new AuthenticationError({ redirectTo: signInLocation(req, signInPath) });\n }\n requestContextStore.setUser(user);\n\n return {};\n }\n}\n",
|
|
22
22
|
"import { Middleware } from \"./Middleware\";\n\nexport class CacheMiddleware extends Middleware {\n async run(...args: [scope: string, maxAge: string, ...rest: string[]]) {\n const [scope = \"public\", maxAge = \"864000\", ...rest] = args;\n let value = `${scope}, max-age=${maxAge}${rest.length > 0 ? \", \" : \"\"}${rest.join(\", \")}`;\n if (args.length === 0) {\n value =\n \"public, max-age=864000, stale-while-revalidate=300, stale-if-error=600\";\n }\n if (args.length === 1 && args[0] === \"public\") {\n value =\n \"public, max-age=864000, stale-while-revalidate=300, stale-if-error=600\";\n }\n if (args.length === 1 && args[0] === \"private\") {\n value =\n \"private, max-age=0, stale-while-revalidate=300, stale-if-error=600\";\n }\n if (this.req.rawRequest.method === \"GET\") {\n this.req.ctx().setHeaders(\"Cache-Control\", value);\n }\n\n return {};\n }\n}\n",
|
|
23
|
-
"import { Middleware } from \"./Middleware\";\n\ntype CorsHeaders = {\n \"Access-Control-Allow-Methods\": string;\n \"Access-Control-Allow-Headers\": string;\n \"Access-Control-Allow-Credentials\": string;\n};\n\nconst defaultHeaders: CorsHeaders = {\n \"Access-Control-Allow-Methods\": \"GET, POST, PUT, DELETE, OPTIONS\",\n \"Access-Control-Allow-Headers\":\n \"Content-Type, Authorization, X-Requested-With\",\n \"Access-Control-Allow-Credentials\": \"true\",\n};\n\nexport class CorsMiddleware extends Middleware {\n config = {\n origins: {\n \"\": {\n \"Access-Control-Allow-Methods\": \"GET, HEAD, POST, PUT, DELETE, OPTIONS\",\n \"Access-Control-Allow-Headers\":\n \"Content-Type, Authorization, X-Requested-With\",\n \"Access-Control-Allow-Credentials\": \"true\",\n },\n } as Record<string, Partial<CorsHeaders>>,\n };\n run() {\n const req = this.req;\n const origin = req.rawRequest.headers.get(\"Origin\");\n if (this.config.origins[origin]) {\n req.ctx().setHeaders(\"Access-Control-Allow-Origin\", origin);\n const headers = { ...defaultHeaders, ...this.config.origins[origin] };\n\n for (const [key, value] of Object.entries(headers)) {\n req.ctx().setHeaders(key, value);\n }\n }\n\n return {};\n }\n}\n",
|
|
23
|
+
"import { Middleware } from \"./Middleware\";\n\ntype CorsHeaders = {\n \"Access-Control-Allow-Methods\": string;\n \"Access-Control-Allow-Headers\": string;\n \"Access-Control-Allow-Credentials\": string;\n};\n\nconst defaultHeaders: CorsHeaders = {\n \"Access-Control-Allow-Methods\": \"GET, POST, PUT, DELETE, OPTIONS\",\n \"Access-Control-Allow-Headers\":\n \"Content-Type, Authorization, X-Requested-With\",\n \"Access-Control-Allow-Credentials\": \"true\",\n};\n\n/**\n * Sets CORS headers for a request whose `Origin` is a key of `origins`, or for\n * any origin when `origins` has a `\"*\"` key. An exact key wins over `\"*\"`.\n *\n * `\"*\"` answers `Access-Control-Allow-Origin: *` and leaves\n * `Access-Control-Allow-Credentials` out (browsers refuse the pair), so it suits\n * a public endpoint that takes no cookies — a form posted from any site.\n *\n * It runs on refusals too (`runsOnRefusal`): a `rate-limit` 429 or a\n * `body-limit` 413 from a middleware listed before it still carries its headers,\n * so the browser sees the status rather than a CORS failure.\n */\nexport class CorsMiddleware extends Middleware {\n static override runsOnRefusal = true;\n\n config = {\n origins: {\n \"\": {\n \"Access-Control-Allow-Methods\": \"GET, HEAD, POST, PUT, DELETE, OPTIONS\",\n \"Access-Control-Allow-Headers\":\n \"Content-Type, Authorization, X-Requested-With\",\n \"Access-Control-Allow-Credentials\": \"true\",\n },\n } as Record<string, Partial<CorsHeaders>>,\n };\n run() {\n const req = this.req;\n const origin = req.rawRequest.headers.get(\"Origin\");\n if (origin && this.config.origins[origin]) {\n req.ctx().setHeaders(\"Access-Control-Allow-Origin\", origin);\n const headers = { ...defaultHeaders, ...this.config.origins[origin] };\n\n for (const [key, value] of Object.entries(headers)) {\n req.ctx().setHeaders(key, value);\n }\n } else if (origin && this.config.origins[\"*\"]) {\n req.ctx().setHeaders(\"Access-Control-Allow-Origin\", \"*\");\n const headers: Partial<CorsHeaders> = { ...defaultHeaders, ...this.config.origins[\"*\"] };\n // Browsers refuse credentials with a wildcard origin.\n delete headers[\"Access-Control-Allow-Credentials\"];\n\n for (const [key, value] of Object.entries(headers)) {\n req.ctx().setHeaders(key, value);\n }\n }\n\n return {};\n }\n}\n",
|
|
24
24
|
"import type { RateLimiterConfig } from \"./config\";\nimport type { RateLimiterDriver } from \"./drivers/RateLimiterDriver\";\nimport type { RateLimitResult } from \"./types\";\n\nexport interface ConsumeOptions {\n /** Requests allowed per window. Defaults to the configured `limit`. */\n limit?: number;\n /** Window length in **seconds**. Defaults to the configured `window`. */\n window?: number;\n /** How much this call costs. Defaults to `1`. */\n cost?: number;\n}\n\nexport class RateLimiter {\n static token = \"ratelimiter\";\n\n constructor(public config: Required<RateLimiterConfig>) {}\n\n get driver(): RateLimiterDriver {\n return this.config.driver;\n }\n\n /**\n * Records one hit against `key` and reports whether it fits the budget.\n *\n * Windows are given in seconds here — the unit routes, middleware and config\n * are written in — and converted to the milliseconds drivers work in.\n */\n async consume(\n key: string,\n options: ConsumeOptions = {},\n ): Promise<RateLimitResult> {\n const limit = options.limit ?? this.config.limit;\n const window = options.window ?? this.config.window;\n const cost = options.cost ?? 1;\n\n // A zero window divides by zero inside the sliding-window maths and a\n // negative cost hands out budget instead of spending it. Both mean the\n // caller passed something nonsensical, so say so rather than limiting in a\n // way nobody can explain later.\n assertPositive(\"window\", window);\n assertPositive(\"limit\", limit);\n if (!Number.isFinite(cost) || cost < 0) {\n throw new Error(`Rate limiter cost must be zero or greater, got ${cost}`);\n }\n\n return await this.config.driver.consume({\n key,\n limit,\n window: window * 1000,\n cost,\n });\n }\n}\n\nfunction assertPositive(name: string, value: number) {\n if (!Number.isFinite(value) || value <= 0) {\n throw new Error(\n `Rate limiter ${name} must be greater than zero, got ${value}`,\n );\n }\n}\n",
|
|
25
25
|
"import { app } from \"../foundation/app\";\nimport { RateLimiter } from \"../services/rate-limiter/RateLimiter\";\nimport type { RateLimitResult } from \"../services/rate-limiter/types\";\nimport { refusal, RequestBreakerError } from \"./Error\";\nimport type { HttpRequest } from \"./HttpRequest\";\nimport { Middleware } from \"./Middleware\";\nimport { dispatchedClientAddress } from \"./modelOriginated\";\n\nexport class RateLimitExceededError extends RequestBreakerError {\n constructor(result?: RateLimitResult) {\n super(\"Rate limit exceeded\");\n const headers = {\n \"Content-Type\": \"application/json\",\n ...(result ? rateLimitHeaders(result) : {}),\n };\n\n this.payload = {\n api: {\n status: 429,\n data: {\n error: refusal(\"rate_limit\", \"Rate limit exceeded\", 429),\n },\n headers,\n },\n view: {\n error: {\n message: \"Rate limit exceeded\",\n },\n status: 429,\n headers,\n },\n };\n }\n}\n\nexport interface RateLimitMiddlewareConfig {\n /** Requests allowed per window. The DSL parameter wins over this. */\n limit?: number;\n /** Window length in **seconds**. The DSL parameter wins over this. */\n window?: number;\n /**\n * What counts as one client. Defaults to the caller's IP plus the route\n * path, so a client's budget for `/api/search` is separate from its budget\n * for `/api/upload`.\n *\n * Override it to limit by something more trustworthy than a header —\n * a session, an API key, a tenant:\n *\n * ```ts\n * RateLimitMiddleware.configure({\n * limit: 60,\n * key: (req) => `user:${req.ctx().user?.id ?? clientIp(req)}`,\n * })\n * ```\n *\n * A model's tool call (`ApiRouteDispatcher.dispatchAs`) spends the same\n * budget as the user's own requests by default: `clientIp` answers the\n * address of the request that started the run. To give model traffic a\n * budget of its own, key on `req.isModelOriginated()`, which no client can\n * set:\n *\n * ```ts\n * RateLimitMiddleware.configure({\n * key: (req) =>\n * `${req.isModelOriginated() ? \"model\" : \"direct\"}:${clientIp(req)}:${req.routePath}`,\n * })\n * ```\n */\n key?: (req: HttpRequest) => string;\n /** Set `X-RateLimit-*` response headers. Defaults to `true`. */\n headers?: boolean;\n}\n\n/**\n * Limits how often one client may hit a route.\n *\n * ```\n * \"rate-limit\" // provider defaults (1000 per 60s)\n * \"rate-limit:100\" // 100 per 60s\n * \"rate-limit:10,30\" // 10 per 30s\n * ```\n *\n * The counting itself is the rate-limiter service's job, so the same DSL runs\n * against the in-memory driver locally and Redis in production.\n */\nexport class RateLimitMiddleware extends Middleware<RateLimitMiddlewareConfig> {\n async run(limit?: string | number, window?: string | number) {\n const limiter = resolveLimiter();\n\n // No application, or one without a rate limiter bound. Rejecting every\n // request because a service is missing would be a worse failure than not\n // limiting.\n if (!limiter) return {};\n\n const result = await limiter.consume(this.key(), {\n // The DSL passes strings (`\"rate-limit:100,30\"`), so both parameters are\n // parsed rather than trusted; anything unusable falls back to config and\n // then to the configured defaults.\n limit: toPositiveNumber(limit) ?? this.config.limit,\n window: toPositiveNumber(window) ?? this.config.window,\n });\n\n if (this.config.headers !== false) {\n const ctx = this.req.ctx?.();\n if (ctx) {\n for (const [name, value] of Object.entries(rateLimitHeaders(result))) {\n ctx.setHeaders(name, value);\n }\n }\n }\n\n if (!result.allowed) {\n throw new RateLimitExceededError(result);\n }\n\n return {};\n }\n\n private key() {\n if (this.config.key) {\n return this.config.key(this.req);\n }\n return `${clientIp(this.req)}:${this.req.routePath ?? \"*\"}`;\n }\n}\n\n/**\n * The limiter, or `null` when there is nothing to resolve it from. `app()`\n * throws outside a booted application — unit tests, build-time tooling — and\n * that is not a reason to fail a request.\n */\nfunction resolveLimiter(): RateLimiter | null {\n try {\n const container = app();\n return container.bound(RateLimiter) ? container.make(RateLimiter) : null;\n } catch {\n return null;\n }\n}\n\n/**\n * Best-effort client address.\n *\n * `x-forwarded-for` is a list — `client, proxy1, proxy2` — and the old\n * implementation used the whole string as the key, so a request arriving\n * through a different proxy chain got a fresh budget. Only the left-most entry\n * names the client.\n *\n * Under `gemi start` the production server has already decided which entry to\n * believe (`GEMI_TRUST_PROXY`, see `server/forwardedFor.ts`) and left exactly\n * one address in `x-forwarded-for`, with `x-real-ip` dropped, so neither is\n * client-written here. Elsewhere (`gemi dev`, a custom server) both headers are\n * whatever the client sent. When you have something better (a session, an API\n * key), pass `key` in the config.\n */\nexport function clientIp(req: HttpRequest) {\n // A tool call's synthetic request has no forwarding headers; it spends the\n // budget of the user whose run made it. Checked first so a nested dispatch\n // keeps the address of the request that started the chain.\n const dispatched = dispatchedClientAddress(req.rawRequest);\n if (dispatched !== undefined) return dispatched;\n\n const forwardedFor = req.headers.get(\"x-forwarded-for\");\n if (forwardedFor) {\n const [client] = forwardedFor.split(\",\");\n if (client?.trim()) return client.trim();\n }\n\n return req.headers.get(\"x-real-ip\")?.trim() || \"unknown\";\n}\n\nfunction rateLimitHeaders(result: RateLimitResult): Record<string, string> {\n const headers: Record<string, string> = {\n \"X-RateLimit-Limit\": String(result.limit),\n \"X-RateLimit-Remaining\": String(result.remaining),\n \"X-RateLimit-Reset\": String(Math.ceil(result.resetAt / 1000)),\n };\n\n if (!result.allowed) {\n // Seconds, and never `0` — a `Retry-After: 0` invites an immediate retry\n // that is certain to be rejected again.\n headers[\"Retry-After\"] = String(\n Math.max(1, Math.ceil(result.retryAfter / 1000)),\n );\n }\n\n return headers;\n}\n\nfunction toPositiveNumber(value: string | number | undefined) {\n if (value === undefined || value === null || value === \"\") return undefined;\n const parsed = Number(value);\n if (!Number.isFinite(parsed) || parsed <= 0) return undefined;\n return parsed;\n}\n",
|
|
26
26
|
"import { RequestBreakerError, stringEraRefusal } from \"./Error\";\nimport { Middleware } from \"./Middleware\";\n\nexport class CSRFMiddleware extends Middleware {\n async run() {\n const csrfToken = this.req.cookies.get(\"csrf_token\");\n if (!csrfToken) {\n throw new InvalidCSRFTokenError();\n }\n const NON_GET_METHODS = [\"POST\", \"PUT\", \"PATCH\", \"DELETE\"];\n if (!NON_GET_METHODS.includes(this.req.rawRequest.method)) {\n return {};\n }\n\n if (!Bun.CSRF.verify(csrfToken, { secret: process.env.SECRET })) {\n throw new InvalidCSRFTokenError();\n }\n\n return {};\n }\n}\n\nexport class InvalidCSRFTokenError extends RequestBreakerError {\n constructor() {\n super(\"Invalid CSRF token\");\n this.name = \"InvalidCSRFTokenError\";\n }\n\n payload = {\n api: {\n status: 403,\n data: { error: stringEraRefusal(\"csrf\", \"Invalid CSRF token\", 403) },\n },\n view: {},\n };\n}\n",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"import type { ImageOptimizationDriver } from \"./drivers/ImageOptimizationDriver\";\nimport { Sharp } from \"./drivers/SharpDriver\";\n\n// Config key: `image`.\nexport interface ImageConfig {\n driver?: ImageOptimizationDriver;\n}\n\nexport function defineImageConfig(config: ImageConfig): ImageConfig {\n return config;\n}\n\nexport function imageConfigDefaults(): Required<ImageConfig> {\n return {\n driver: new Sharp(),\n };\n}\n",
|
|
49
49
|
"import { app } from \"../../foundation/app\";\nimport { ApiRouter, HttpRequest } from \"../../http\";\nimport { imageConfigDefaults, type ImageConfig } from \"./config\";\nimport type { ImageOptimizationDriver } from \"./drivers/ImageOptimizationDriver\";\nimport type { ResizeParameters } from \"./drivers/types\";\n\nexport class ImageOptimizationRouter extends ApiRouter {\n routes = {\n \"/resize\": this.file(async () => {\n const req = new HttpRequest();\n const url = new URL(req.rawRequest.url);\n const rawImageUrl = url.searchParams.get(\"url\");\n const width = Number(url.searchParams.get(\"w\"));\n const height = Number(url.searchParams.get(\"h\"));\n const fit = url.searchParams.get(\"fit\") ?? \"cover\";\n const quality = Number(url.searchParams.get(\"q\"));\n\n if (!rawImageUrl) {\n return new Response(\n JSON.stringify({\n error: \"url query parameter is required\",\n }),\n {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n status: 404,\n },\n );\n }\n const prefix = rawImageUrl.startsWith(\"http\")\n ? \"\"\n : `http://localhost:${process.env.PORT || 5173}`;\n const fullImageUrl = `${prefix}${rawImageUrl}`;\n const res = await fetch(fullImageUrl);\n if (!res.ok) {\n return new Response(\n JSON.stringify({\n error: \"Image not found\",\n info: fullImageUrl,\n }),\n {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n status: 404,\n },\n );\n }\n\n const imageBuffer = Buffer.from(await res.arrayBuffer());\n\n const buffer = await app(ImageManager).resize(imageBuffer, {\n height,\n width,\n fit: fit as any,\n quality,\n });\n\n res.headers.delete(\"Content-Type\");\n res.headers.delete(\"Content-Length\");\n const _headers = new Headers(res.headers);\n _headers.set(\"Content-Type\", \"image/webp\");\n _headers.set(\"Content-Length\", `${buffer.byteLength}`);\n return new Response(new Uint8Array(buffer), {\n headers: _headers,\n });\n }),\n };\n}\n\nexport class ImageManager {\n static token = \"image\";\n\n readonly driver: ImageOptimizationDriver;\n\n constructor(config: ImageConfig = {}) {\n this.driver = config.driver ?? imageConfigDefaults().driver;\n }\n\n resize(buffer: Buffer, params: ResizeParameters) {\n return this.driver.resize(buffer, params);\n }\n}\n",
|
|
50
50
|
"import { ApiRouter } from \"../../http\";\nimport { app } from \"../../foundation/app\";\nimport { LogManager } from \"./LogManager\";\n\nexport class LoggingRouter extends ApiRouter {\n middlewares = [\"cache:private,0\"];\n routes = {\n \"/live\": this.get(async () => {\n const file = Bun.file(app(LogManager).currentLogFilePath);\n return new Response(await file.text(), {\n headers: {\n \"Content-Type\": \"text/plain\",\n },\n });\n }),\n };\n}\n",
|
|
51
|
-
"import { HttpRequest, Middleware } from \"../../http\";\nimport { BodyLimitMiddleware } from \"../../http/BodyLimitMiddleware\";\nimport { hasBodyLimit, parseByteSize, setBodyLimit } from \"../../http/bodyLimit\";\nimport type { MiddlewareConfig } from \"../../http/middleware-config\";\nimport type { RouterMiddleware } from \"../../http/Router\";\nimport { isConstructor } from \"../../internal/isConstructor\";\n\nfunction transformMiddleware(input: (string | Function)[]) {\n const map = new Map();\n for (const middleware of input) {\n if (typeof middleware === \"string\") {\n const [alias, params = \"\"] = middleware.split(\":\");\n if (alias.startsWith(\"-\")) {\n if (map.has(alias.replace(\"-\", \"\"))) {\n map.delete(alias.replace(\"-\", \"\"));\n }\n } else {\n map.set(alias, params.split(\",\").filter(Boolean));\n }\n } else {\n map.set(middleware, []);\n }\n }\n return map;\n}\n\n/**\n * Aliases that work without an entry in the app's `aliases`, which replace them\n * when they name the same alias. Only for middleware whose absence would be\n * silent and unsafe: an unknown alias is skipped, so a `body-limit:64kb` on a\n * public route that the app forgot to register would bound nothing.\n */\nconst builtinAliases: Record<string, new (req: HttpRequest) => Middleware> = {\n \"body-limit\": BodyLimitMiddleware,\n};\n\nexport class MiddlewareRegistry {\n static token = \"middleware\";\n\n /** `config.bodyLimit` in bytes, or `null`. Parsed once, here. */\n readonly defaultBodyLimit: number | null;\n\n constructor(public config: Required<MiddlewareConfig>) {\n this.defaultBodyLimit =\n config.bodyLimit === null || config.bodyLimit === undefined\n ? null\n : parseByteSize(config.bodyLimit);\n }\n\n get aliases(): Record<string, new (req: HttpRequest) => Middleware> {\n return { ...builtinAliases, ...this.config.aliases };\n }\n\n /**\n * Installs the app-wide `bodyLimit` on an api request that has no limit yet.\n * Its `Content-Length` is checked when the body is read rather than now, so\n * a route's own `body-limit`, which runs after this, can still raise it.\n */\n applyDefaultBodyLimit(request: Request) {\n if (this.defaultBodyLimit !== null && !hasBodyLimit(request)) {\n setBodyLimit(request, this.defaultBodyLimit, { checkDeclared: false });\n }\n }\n\n /**\n * Throws on a `global` entry that would not run. A route's unknown alias is\n * skipped silently, which is survivable there; a global middleware is\n * usually a gate for the whole origin, and a typo in its alias would leave\n * every request ungated with nothing saying so. A `-alias` has nothing to\n * cancel in a list that nothing is inherited into.\n */\n assertGlobalMiddleware() {\n for (const entry of this.config.global) {\n if (typeof entry !== \"string\") {\n continue;\n }\n const [alias] = entry.split(\":\");\n if (alias.startsWith(\"-\")) {\n throw new Error(\n `Global middleware \"${entry}\" cancels an alias, but nothing is inherited into the global list. Remove it.`,\n );\n }\n if (!this.aliases[alias]) {\n throw new Error(\n `Global middleware \"${alias}\" is not a registered alias. Add it to \\`aliases\\` in the middleware config, or list the class itself.`,\n );\n }\n }\n }\n\n /**\n * The `global` list, run the way a route's list is.\n *\n * It does not re-check the list: `MiddlewareServiceProvider.boot` has\n * already thrown on a bad entry, a boot failure stops `gemi start`, and the\n * config is not written to afterwards. This runs on every request the server\n * takes, static files included, so the check belongs at boot and only there.\n */\n public runGlobalMiddleware() {\n return this.runMiddleware(this.config.global);\n }\n\n public runMiddleware(\n middleware: (string | RouterMiddleware | (new (req: HttpRequest) => Middleware))[],\n ) {\n const req = new HttpRequest();\n const aliases = this.aliases;\n
|
|
51
|
+
"import { HttpRequest, Middleware } from \"../../http\";\nimport { BodyLimitMiddleware } from \"../../http/BodyLimitMiddleware\";\nimport { hasBodyLimit, parseByteSize, setBodyLimit } from \"../../http/bodyLimit\";\nimport type { MiddlewareConfig } from \"../../http/middleware-config\";\nimport type { RouterMiddleware } from \"../../http/Router\";\nimport { isConstructor } from \"../../internal/isConstructor\";\n\nfunction transformMiddleware(input: (string | Function)[]) {\n const map = new Map();\n for (const middleware of input) {\n if (typeof middleware === \"string\") {\n const [alias, params = \"\"] = middleware.split(\":\");\n if (alias.startsWith(\"-\")) {\n if (map.has(alias.replace(\"-\", \"\"))) {\n map.delete(alias.replace(\"-\", \"\"));\n }\n } else {\n map.set(alias, params.split(\",\").filter(Boolean));\n }\n } else {\n map.set(middleware, []);\n }\n }\n return map;\n}\n\n/**\n * Aliases that work without an entry in the app's `aliases`, which replace them\n * when they name the same alias. Only for middleware whose absence would be\n * silent and unsafe: an unknown alias is skipped, so a `body-limit:64kb` on a\n * public route that the app forgot to register would bound nothing.\n */\nconst builtinAliases: Record<string, new (req: HttpRequest) => Middleware> = {\n \"body-limit\": BodyLimitMiddleware,\n};\n\nexport class MiddlewareRegistry {\n static token = \"middleware\";\n\n /** `config.bodyLimit` in bytes, or `null`. Parsed once, here. */\n readonly defaultBodyLimit: number | null;\n\n constructor(public config: Required<MiddlewareConfig>) {\n this.defaultBodyLimit =\n config.bodyLimit === null || config.bodyLimit === undefined\n ? null\n : parseByteSize(config.bodyLimit);\n }\n\n get aliases(): Record<string, new (req: HttpRequest) => Middleware> {\n return { ...builtinAliases, ...this.config.aliases };\n }\n\n /**\n * Installs the app-wide `bodyLimit` on an api request that has no limit yet.\n * Its `Content-Length` is checked when the body is read rather than now, so\n * a route's own `body-limit`, which runs after this, can still raise it.\n */\n applyDefaultBodyLimit(request: Request) {\n if (this.defaultBodyLimit !== null && !hasBodyLimit(request)) {\n setBodyLimit(request, this.defaultBodyLimit, { checkDeclared: false });\n }\n }\n\n /**\n * Throws on a `global` entry that would not run. A route's unknown alias is\n * skipped silently, which is survivable there; a global middleware is\n * usually a gate for the whole origin, and a typo in its alias would leave\n * every request ungated with nothing saying so. A `-alias` has nothing to\n * cancel in a list that nothing is inherited into.\n */\n assertGlobalMiddleware() {\n for (const entry of this.config.global) {\n if (typeof entry !== \"string\") {\n continue;\n }\n const [alias] = entry.split(\":\");\n if (alias.startsWith(\"-\")) {\n throw new Error(\n `Global middleware \"${entry}\" cancels an alias, but nothing is inherited into the global list. Remove it.`,\n );\n }\n if (!this.aliases[alias]) {\n throw new Error(\n `Global middleware \"${alias}\" is not a registered alias. Add it to \\`aliases\\` in the middleware config, or list the class itself.`,\n );\n }\n }\n }\n\n /**\n * The `global` list, run the way a route's list is.\n *\n * It does not re-check the list: `MiddlewareServiceProvider.boot` has\n * already thrown on a bad entry, a boot failure stops `gemi start`, and the\n * config is not written to afterwards. This runs on every request the server\n * takes, static files included, so the check belongs at boot and only there.\n */\n public runGlobalMiddleware() {\n return this.runMiddleware(this.config.global);\n }\n\n /**\n * Runs a middleware list in order, merging what each returns.\n *\n * When one throws — a refusal such as a `body-limit` 413 or a `rate-limit`\n * 429, or anything else — the middleware after it that declare\n * `static runsOnRefusal = true` (`CorsMiddleware`) still run before the\n * error goes on, so the headers they set reach the refusal. Without that, a\n * `cors` listed after the middleware that refused, which is where a router's\n * inherited middleware puts it, left the refusal without CORS headers, and\n * the browser reported a network error instead of the status.\n */\n public runMiddleware(\n middleware: (string | RouterMiddleware | (new (req: HttpRequest) => Middleware))[],\n ) {\n const req = new HttpRequest();\n const aliases = this.aliases;\n const chain: { run: () => any; runsOnRefusal: boolean }[] = [];\n for (const [key, params] of transformMiddleware(middleware).entries()) {\n if (typeof key === \"string\") {\n const Middleware = aliases[key];\n if (Middleware) {\n const middleware = new Middleware(req);\n chain.push({\n run: () => middleware.run.call(middleware, ...params),\n runsOnRefusal: runsOnRefusal(Middleware),\n });\n }\n } else if (isConstructor(key)) {\n const middleware = new key(req);\n chain.push({ run: middleware.run.bind(middleware), runsOnRefusal: runsOnRefusal(key) });\n } else {\n chain.push({ run: key as () => any, runsOnRefusal: false });\n }\n }\n\n return (async () => {\n let result = {};\n for (let i = 0; i < chain.length; i++) {\n try {\n result = { ...result, ...(await chain[i].run()) };\n } catch (err) {\n await runAfterRefusal(chain.slice(i + 1));\n throw err;\n }\n }\n return result;\n })();\n }\n}\n\nfunction runsOnRefusal(middleware: unknown): boolean {\n return (middleware as { runsOnRefusal?: unknown })?.runsOnRefusal === true;\n}\n\n/**\n * The `runsOnRefusal` middleware left in a chain that was refused. One that\n * throws itself is logged and skipped: the refusal already decided the answer.\n */\nasync function runAfterRefusal(rest: { run: () => any; runsOnRefusal: boolean }[]) {\n for (const entry of rest) {\n if (!entry.runsOnRefusal) {\n continue;\n }\n try {\n await entry.run();\n } catch (err) {\n console.error(err);\n }\n }\n}\n",
|
|
52
52
|
"import type { JSX } from \"react\";\nimport type { HttpRequest } from \"../../http/HttpRequest\";\nimport type { ApiRouter } from \"../../http/ApiRouter\";\nimport type { McpRouter } from \"../../http/McpRouter\";\nimport type { ViewRouter } from \"../../http/ViewRouter\";\nimport type { StreamSummary } from \"./ServerQueryStore\";\n\n// Config key: `route.api`. Derived from `ApiRouterServiceProvider`.\nexport interface ApiRouteConfig {\n // `typeof ApiRouter`, not `new () => ApiRouter`: route flattening identifies\n // nested routers by the static `__brand`, which a bare construct signature\n // does not carry.\n rootRouter: typeof ApiRouter;\n\n onRequestStart?: (req: HttpRequest) => void | Promise<void>;\n onRequestEnd?: (req: HttpRequest) => void | Promise<void>;\n onRequestFail?: (req: HttpRequest, error: any) => void | Promise<void>;\n}\n\n// Config key: `route.view`. Derived from `ViewRouterServiceProvider`.\nexport interface ViewRouteConfig {\n root: (props: any) => JSX.Element;\n rootRouter: new () => ViewRouter;\n\n /**\n * Whether a client-side navigation may skip the handlers of the layout\n * segments the client already has mounted, rather than re-running the whole\n * chain for every route below a layout.\n *\n * Set to `false` to run every handler on every navigation. Prefer\n * `alwaysRun()` on the one layout that needs it — this switch is for when an\n * app cannot audit them all at once.\n */\n partialRendering?: boolean;\n\n onRequestStart?: (req: HttpRequest) => void | Promise<void>;\n onRequestEnd?: (req: HttpRequest) => void | Promise<void>;\n onRequestFail?: (req: HttpRequest, error: any) => void | Promise<void>;\n\n /**\n * Fires when the response body actually closes — after the last streamed\n * chunk, not when the handler returns. Under streaming those are very\n * different moments: the handler returns at time-to-shell while queries keep\n * streaming for as long as the slowest one takes, so an APM span ended in the\n * handler under-reports every streamed request. End it here instead;\n * `summary` carries `shellAt`/`settledAt`, whether the stream deadline\n * aborted rendering, and per-query timings. Non-streamed responses (`.json`\n * payloads, `no-stream` routes, bot requests) report `shellAt === settledAt`.\n *\n * Although the body closes long after the handler returned, the dispatcher\n * re-enters the request's scopes around this hook — facades and `req.ctx()`\n * work here exactly as they do in the other lifecycle hooks.\n */\n onStreamComplete?: (\n req: HttpRequest,\n summary: StreamSummary,\n ) => void | Promise<void>;\n}\n\n// Config key: `route.mcp`. Optional: an app that exposes nothing to a model\n// declares nothing.\nexport interface McpRouteConfig {\n // The app's `McpRouter`, normally `app/http/routes/mcp.ts`. Resolved against\n // the api routes at boot, so a stale reference fails the boot.\n router: new () => McpRouter<any>;\n}\n\n// The routers one host group serves. Either may be left out, in which case the\n// group serves the root `api` / `view` config for that side — the usual case\n// for tenant subdomains, which run the same app with different data.\nexport interface DomainGroupRouters {\n api?: Partial<ApiRouteConfig> & Pick<ApiRouteConfig, \"rootRouter\">;\n view?: Partial<ViewRouteConfig> & Pick<ViewRouteConfig, \"rootRouter\">;\n}\n\nexport interface DomainGroupConfig extends DomainGroupRouters {\n /**\n * The label(s) in front of `domains.root`. A fixed subdomain (`\"admin\"`,\n * `\"eu.admin\"`) matches exactly; a param subdomain (`\":tenant\"`) matches any\n * single label and hands it to the request as `req.domain.params.tenant`.\n * Fixed subdomains are tried before param ones.\n */\n subdomain: string;\n\n /**\n * For a param subdomain: whether the value names something that exists. A\n * `false` answers the request with a 404 before any route runs, and keeps the\n * ask endpoint from approving a certificate for it.\n *\n * `req` is the request being routed — except on the ask path, where it is\n * the proxy's own request and says nothing about the host being judged. Read\n * `params`, not `req`'s host, headers or cookies, or a certificate decision\n * and a routing decision can disagree.\n */\n exists?: (\n params: Record<string, string>,\n req: Request,\n ) => boolean | Promise<boolean>;\n}\n\nexport interface CustomDomainConfig {\n /**\n * The `subdomain` of the group a resolved custom host is served as — so\n * `app.acme.com` runs exactly what `acme.example.com` does.\n */\n group: string;\n\n /**\n * Maps a host outside `domains.root` to the params of `group`, or `null`\n * when the host is not one the app knows. Usually a database lookup;\n * answers are cached for `cacheTtlMs`.\n */\n resolve: (\n host: string,\n ) => Record<string, string> | null | Promise<Record<string, string> | null>;\n\n /** How long a `resolve` answer, hit or miss, is reused. Defaults to 60s; `0` disables. */\n cacheTtlMs?: number;\n\n /**\n * Serves every host `resolve` returned `null` for, instead of a 404. The ask\n * endpoint never approves a host on the strength of this group alone.\n */\n fallback?: DomainGroupRouters;\n}\n\n/**\n * `route.domains.trustProxy` in its long form: which header carries the host\n * the client addressed, and what proves the proxy sent it.\n */\nexport interface TrustProxyConfig {\n /**\n * The header the host is read from — the one the proxy in front writes the\n * client's host into. Defaults to `\"x-forwarded-host\"`.\n *\n * Name one the platform in front does not own. Behind a CDN that terminates\n * the customer's TLS and then a host like Railway, Render, Fly or Heroku,\n * the host overwrites `X-Forwarded-Host` with the `Host` it was reached by,\n * which the CDN had to rewrite to the app's own domain; the customer's host\n * only survives in a header the CDN adds, e.g. `X-Original-Host: ${http.host}`.\n */\n hostHeader?: string;\n\n /**\n * Trusts `hostHeader` only on a request that carries this header with this\n * value — a shared secret the proxy adds, so a client that reaches the app\n * directly, around the proxy, cannot name its own host. Without it the\n * request is routed by its own host, exactly as with `trustProxy` left out.\n *\n * `value` must be at least 16 characters and is compared in constant time.\n * The header is withheld from what a `proxy()` route forwards upstream.\n */\n secret?: { header: string; value: string };\n}\n\n// Config key: `route.domains`. Optional: without it every host is served by\n// the root routers, exactly as before.\nexport interface DomainsConfig {\n /**\n * The apex the subdomains hang off, e.g. `\"example.com\"` — `\"localhost\"` in\n * development, where `acme.localhost` resolves to loopback. Compared against\n * the request's hostname, so the port does not matter.\n */\n root: string;\n\n /**\n * Read the host from a header the proxy in front sets, rather than the\n * request URL. Only set it behind a proxy that overwrites that header, or a\n * client picks its own host.\n *\n * `true` reads `X-Forwarded-Host`. An object names the header, and can make\n * trusting it depend on a shared secret the proxy sends — see\n * {@link TrustProxyConfig}.\n *\n * The scheme is read from `X-Forwarded-Proto` whether or not this is set.\n */\n trustProxy?: boolean | TrustProxyConfig;\n\n groups?: DomainGroupConfig[];\n\n custom?: CustomDomainConfig;\n\n /**\n * Turns on the on-demand TLS ask endpoint, which a proxy calls to decide\n * whether to issue a certificate for a host.\n *\n * Left out, the path is not served at all — it answers the same 404 as any\n * other unrouted path. That is the default because the answer is exactly\n * \"is this a tenant of yours\", asked without a session: open to the\n * internet it enumerates tenant slugs and customer domains, and runs an\n * uncached `exists` or `resolve` per probe.\n *\n * `secret` must be at least 16 characters and is compared in constant time.\n * The proxy passes it as `?secret=`; anything else falls through unanswered,\n * so the endpoint cannot be probed for.\n */\n ask?: { secret: string };\n}\n\n// Config key: `route`. Covers both route dispatchers and the MCP registry.\nexport interface RouteConfig {\n api: ApiRouteConfig;\n view: ViewRouteConfig;\n mcp?: McpRouteConfig;\n domains?: DomainsConfig;\n}\n\nexport function defineRouteConfig(config: RouteConfig): RouteConfig {\n return config;\n}\n\n// `rootRouter` / `root` have no defaults — the app must supply them.\nexport function apiRouteConfigDefaults(): Omit<\n Required<ApiRouteConfig>,\n \"rootRouter\"\n> {\n return {\n onRequestStart: () => {},\n onRequestEnd: () => {},\n onRequestFail: () => {},\n };\n}\n\nexport function viewRouteConfigDefaults(): Omit<\n Required<ViewRouteConfig>,\n \"root\" | \"rootRouter\"\n> {\n return {\n partialRendering: true,\n onRequestStart: () => {},\n onRequestEnd: () => {},\n onRequestFail: () => {},\n onStreamComplete: () => {},\n };\n}\n",
|
|
53
53
|
"import { HttpRequest, type Middleware } from \"../../http\";\nimport {\n type ApiRoutes,\n type RouteHandlers,\n type ApiRouter,\n type ResourceRoutes,\n RouteHandler,\n type ProxyHandler,\n type RouteSource,\n} from \"../../http/ApiRouter\";\nimport type { RouterMiddleware } from \"../../http/Router\";\n\ntype ApiRouteExec = any;\nexport type FlatApiRoutes = Record<\n string,\n Record<\n string,\n {\n exec: ApiRouteExec;\n middleware: (string | (new () => Middleware) | RouterMiddleware)[];\n // Absent on a callback route, a proxy route and OPTIONS: none of them\n // runs a controller method.\n source?: RouteSource;\n }\n >\n>;\n\nfunction isRouteHandler(option: ApiRoutes[string]): option is RouteHandler<any, any, any, any> {\n return \"run\" in option;\n}\n\nfunction isRouteHandlers(option: ApiRoutes[string]): option is RouteHandlers {\n return (\n Object.hasOwn(option, \"get\") ||\n Object.hasOwn(option, \"post\") ||\n Object.hasOwn(option, \"put\") ||\n Object.hasOwn(option, \"patch\") ||\n Object.hasOwn(option, \"delete\")\n );\n}\n\nfunction isResouceRoutes(option: ApiRoutes[string]): option is ResourceRoutes<any> {\n return Object.hasOwn(option, \"first\") && Object.hasOwn(option, \"second\");\n}\n\n// Narrows to `typeof ApiRouter`, not `new () => ApiRouter`: the latter lacks\n// the static `__brand` this very guard reads, so it is not a subtype of the\n// parameter and TypeScript rejects the predicate under a strict lib.\nfunction isApiRouter(routeHandlers: ApiRoutes[string]): routeHandlers is typeof ApiRouter {\n if (\"__brand\" in routeHandlers) {\n return routeHandlers.__brand === \"ApiRouter\";\n }\n return false;\n}\n\nfunction isProxyHandler(option: ApiRoutes[string]): option is ProxyHandler {\n if (\"__internal_brand\" in option) {\n return option.__internal_brand === \"ProxyHandler\";\n }\n return false;\n}\n\nfunction isStreamHandler(option: ApiRoutes[string]) {\n if (\"__internal_brand\" in option) {\n return option.__internal_brand === \"StreamHandler\";\n }\n return false;\n}\n\nexport function createFlatApiRoutes(\n routes: ApiRoutes,\n rootPath = \"\",\n rootMiddleware: RouterMiddleware[] | string[] = [],\n) {\n const flatApiRoutes: FlatApiRoutes = {};\n\n function addRoute(\n path: string,\n method: string,\n exec: ApiRouteExec,\n middleware: RouterMiddleware[] | string[],\n source?: RouteSource,\n ) {\n const subPath = path === \"/\" ? \"\" : path;\n const _rootPath = rootPath === \"/\" ? \"\" : rootPath;\n const finalPath = (`${_rootPath}${subPath}` === \"\" ? \"/\" : `${_rootPath}${subPath}`).replaceAll(\n \"//\",\n \"/\",\n );\n if (!flatApiRoutes[finalPath]) {\n flatApiRoutes[finalPath] = {};\n }\n flatApiRoutes[finalPath][method.toUpperCase()] = {\n exec,\n middleware: [...rootMiddleware, ...middleware],\n ...(source ? { source } : {}),\n };\n flatApiRoutes[finalPath].OPTIONS = {\n exec: () => {\n const req = new HttpRequest();\n const headers = req.ctx().headers;\n return new Response(null, { headers, status: 204 });\n },\n middleware: [],\n };\n }\n\n for (const [path, option] of Object.entries(routes)) {\n if (isProxyHandler(option)) {\n const proxyHandler = option;\n for (const method of [\"GET\", \"POST\", \"PUT\", \"DELETE\"]) {\n addRoute(path, method, proxyHandler.run.bind(proxyHandler), proxyHandler.middlewares);\n }\n continue;\n }\n\n if (isRouteHandler(option)) {\n const routeHandler = option;\n const method = routeHandler.method;\n const middleware = routeHandler.middlewares;\n const exec = routeHandler.run.bind(routeHandler);\n addRoute(path, method, exec, middleware, routeHandler.source);\n // A stream route also answers HEAD, so a client can read the size and\n // Accept-Ranges without pulling the body. It runs the same handler, so\n // it has the same source.\n if (isStreamHandler(option)) {\n addRoute(path, \"HEAD\", exec, middleware, routeHandler.source);\n }\n }\n\n if (isRouteHandlers(option)) {\n for (const [method, handler] of Object.entries(option)) {\n // At runtime every value is a `RouteHandler`: `FileHandler` and\n // `StreamHandler` construct one. Their types are kept apart only so\n // they stay out of the RPC client.\n const routeHandler = handler as RouteHandler<any, any, any, any>;\n const middleware = routeHandler.middlewares;\n const exec = routeHandler.run.bind(routeHandler);\n addRoute(path, method, exec, middleware, routeHandler.source);\n // `get: this.stream(...)` answers HEAD too, as a stream route on its\n // own path does. An explicit `head` key is not part of the map.\n if (method === \"get\" && isStreamHandler(routeHandler)) {\n addRoute(path, \"HEAD\", exec, middleware, routeHandler.source);\n }\n }\n }\n\n if (isApiRouter(option)) {\n const router = new option();\n const routes = createFlatApiRoutes(router.routes, `${rootPath}${path}`, router.middlewares);\n for (const [path, route] of Object.entries(routes)) {\n flatApiRoutes[path.replaceAll(\"//\", \"/\")] = route;\n }\n }\n\n if (isResouceRoutes(option)) {\n const { first, second } = option;\n for (const [method, routeHandler] of Object.entries(first)) {\n const middleware = routeHandler.middlewares;\n const exec = routeHandler.run.bind(routeHandler);\n const [lastSegment, ...rest] = path.split(\"/\").reverse();\n if (!lastSegment.startsWith(\":\")) {\n throw new Error(\"Resource route must end with a dynamic segment\");\n }\n addRoute(rest.reverse().join(\"/\"), method, exec, middleware, routeHandler.source);\n }\n for (const [method, routeHandler] of Object.entries(second)) {\n const middleware = routeHandler.middlewares;\n const exec = routeHandler.run.bind(routeHandler);\n addRoute(path, method, exec, middleware, routeHandler.source);\n }\n }\n }\n\n return Object.fromEntries(\n Object.entries(flatApiRoutes).sort(([a], [b]) => {\n const x = a.split(\"/\").length + a.split(\":\").length;\n const y = b.split(\"/\").length + b.split(\":\").length;\n return x - y;\n }),\n );\n}\n",
|
|
54
54
|
"import type { HttpRequest } from \"../../http\";\nimport type { StaticViewOptions, ViewRoutes } from \"../../http/ViewRouter\";\n\nexport type ViewRouteExec = (req: HttpRequest<any, any>) => any; // TODO: fix type\n\n/**\n * One entry per segment of a route, parallel to `exec` — `segments[i]` is what\n * `exec[i]` renders. `path` is the segment's own route pattern, prefixed by\n * every ancestor, so the last segment's `path` is always the flat route key.\n *\n * Partial rendering compares these pairwise between the route the client is on\n * and the one it is navigating to, to find the segments it can skip.\n */\nexport type ViewRouteSegment = {\n path: string;\n viewPath: string;\n /** Layout opted out of being skipped, via `alwaysRun()`. */\n alwaysRun?: boolean;\n};\n\nexport type FlatViewRoutes = Record<\n string,\n {\n exec: ViewRouteExec[];\n middleware: (string | any)[];\n viewPath: string;\n segments: ViewRouteSegment[];\n /**\n * Feature flags gating this route, accumulated from every router and layout\n * above it. All must be on for the route to resolve; any one off makes the\n * request a 404. Evaluated per request, after middleware, since the table\n * itself is built once at boot and cannot vary by user.\n */\n features: string[];\n /**\n * Set when the route's view was declared `.static()`: the document is sent\n * settled and without the client runtime. Only a leaf view can be static;\n * the layouts above it render into the same static document.\n */\n static?: StaticViewOptions;\n }\n>;\n\nfunction removeGroupPrefix(input: string) {\n // Remove all (str) patterns\n const withoutParentheses = input.replace(/\\([^)]*\\)/g, \"\");\n\n // Remove all double slashes // by replacing with single slash\n const withoutDoubleSlashes = withoutParentheses.replace(/\\/\\//g, \"/\");\n return withoutDoubleSlashes;\n}\n\n/** How a child route path is mounted under its parent's. */\nfunction joinRoutePath(prefix: string, path: string) {\n if (prefix === \"/\") return path;\n if (path === \"/\") return prefix;\n return `${prefix}${path}`;\n}\n\n/**\n * A segment path is compared against other segment paths, so it has to be\n * spelled one way only. A group as the last part of a path (`/app/(private)`)\n * leaves a trailing slash behind once the group is stripped.\n */\nfunction segmentPath(path: string) {\n const withoutGroups = removeGroupPrefix(path);\n return withoutGroups.length > 1 ? withoutGroups.replace(/\\/$/, \"\") : withoutGroups;\n}\n\nfunction prefixSegments(prefix: string, segments: ViewRouteSegment[]) {\n return segments.map((segment) => ({\n ...segment,\n path: segmentPath(joinRoutePath(prefix, segment.path)),\n }));\n}\n\nexport function createFlatViewRoutes(routes: ViewRoutes) {\n const flatRoutes: FlatViewRoutes = {};\n\n for (const [routePath, viewConfigOrViewRouter] of Object.entries(routes)) {\n if (\"run\" in viewConfigOrViewRouter) {\n const route = viewConfigOrViewRouter;\n if (\"children\" in route) {\n const children = new route.children();\n const result = createFlatViewRoutes(children.routes);\n\n for (const [\n path,\n { exec, middleware, segments, features, static: staticOptions },\n ] of Object.entries(result)) {\n const _key = joinRoutePath(routePath, path);\n\n const handler = (req: HttpRequest<any, any>) =>\n route.run.call(route, req, routePath);\n\n flatRoutes[removeGroupPrefix(_key)] = {\n exec: [handler, ...exec],\n middleware: [...route.middlewares, ...middleware],\n features: [...route.featureGates, ...features],\n viewPath: route.viewPath,\n segments: [\n {\n path: segmentPath(routePath),\n viewPath: route.viewPath,\n ...(route.alwaysRuns ? { alwaysRun: true } : {}),\n },\n ...prefixSegments(routePath, segments),\n ],\n ...(staticOptions ? { static: staticOptions } : {}),\n };\n }\n } else {\n const handler = (req: HttpRequest<any, any>) =>\n route.run.call(route, req, routePath);\n flatRoutes[removeGroupPrefix(routePath)] = {\n exec: [handler],\n middleware: route.middlewares,\n features: route.featureGates,\n viewPath: route.viewPath,\n segments: [{ path: segmentPath(routePath), viewPath: route.viewPath }],\n ...(\"staticOptions\" in route && route.staticOptions\n ? { static: route.staticOptions }\n : {}),\n };\n }\n } else {\n const router = new viewConfigOrViewRouter();\n const result = createFlatViewRoutes(router.routes);\n for (const [\n path,\n { exec, middleware, viewPath, segments, features, static: staticOptions },\n ] of Object.entries(result)) {\n const _key = joinRoutePath(routePath, path);\n flatRoutes[removeGroupPrefix(_key)] = {\n exec,\n middleware: [...router.middlewares, ...middleware],\n features: [...router.featureGates, ...features],\n viewPath,\n segments: prefixSegments(routePath, segments),\n ...(staticOptions ? { static: staticOptions } : {}),\n };\n }\n }\n }\n\n return Object.fromEntries(\n Object.entries(flatRoutes).sort(([a], [b]) => {\n const x = a.split(\"/\").length + a.split(\":\").length;\n const y = b.split(\"/\").length + b.split(\":\").length;\n return x - y;\n }),\n );\n}\n",
|
|
@@ -56,11 +56,11 @@
|
|
|
56
56
|
"// @ts-ignore\nimport { URLPattern } from \"urlpattern-polyfill/urlpattern\";\nimport type { FlatViewRoutes } from \"./createFlatViewRoutes\";\n\nexport interface ViewRouteMatch {\n routePath: string;\n params: Record<string, string>;\n route: FlatViewRoutes[string];\n}\n\n/**\n * First route whose pattern matches `pathname`. `flatViewRoutes` is ordered\n * least-specific-first, so this is insertion order, not a best match.\n */\nexport function matchViewRoute(\n flatViewRoutes: FlatViewRoutes,\n pathname: string,\n): ViewRouteMatch | null {\n for (const [routePath, route] of Object.entries(flatViewRoutes)) {\n const pattern = new URLPattern({ pathname: routePath });\n if (pattern.test({ pathname })) {\n return {\n routePath,\n params: pattern.exec({ pathname })?.pathname.groups ?? {},\n route,\n };\n }\n }\n\n return null;\n}\n",
|
|
57
57
|
"import { applyParams } from \"../../utils/applyParams\";\nimport type { FlatViewRoutes, ViewRouteSegment } from \"./createFlatViewRoutes\";\nimport { matchViewRoute } from \"./matchViewRoute\";\n\n/** A route, as matched for one request, in the terms partial rendering needs. */\nexport interface PartialRenderRoute {\n segments: ViewRouteSegment[];\n params: Record<string, string>;\n search: string;\n}\n\nexport interface PartialRenderPlan {\n /** Index of the first segment whose handler has to run. */\n startIndex: number;\n /** View paths of the segments that were skipped, in order. */\n carriedViews: string[];\n}\n\nconst NOTHING_SKIPPED: PartialRenderPlan = { startIndex: 0, carriedViews: [] };\n\nfunction resolve(segment: ViewRouteSegment, params: Record<string, string>) {\n const resolved = applyParams(segment.path, params);\n // `applyParams` only substitutes `:name`. A bare `*` survives, and two\n // different URLs would then compare equal — never skip such a segment.\n return resolved.includes(\"*\") ? null : resolved;\n}\n\n/**\n * Works out which of the target route's segments the client already has\n * rendered, and so which of its handlers this request can skip.\n *\n * A segment is carried forward only when it is *the same segment on the same\n * resolved path*: `/app/A/chat` → `/app/A/lists` reuses the layout, but\n * `/app/A/chat` → `/app/B/chat` re-runs it even though the view is the same.\n *\n * The target's own leaf always runs — navigating to the URL you are already on\n * is a reload, not a no-op.\n */\nexport function planPartialRender(\n from: PartialRenderRoute | null,\n to: PartialRenderRoute,\n): PartialRenderPlan {\n if (!from) {\n return NOTHING_SKIPPED;\n }\n\n // Handlers read `req.search`, and there is no way to know which ones do.\n if (from.search !== to.search) {\n return NOTHING_SKIPPED;\n }\n\n const limit = Math.min(from.segments.length, to.segments.length - 1);\n\n let startIndex = 0;\n while (startIndex < limit) {\n const fromSegment = from.segments[startIndex];\n const toSegment = to.segments[startIndex];\n\n // This layout asked to run on every navigation underneath it. Segments are\n // skipped as a prefix, so everything from here down runs too.\n if (toSegment.alwaysRun) break;\n\n if (fromSegment.viewPath !== toSegment.viewPath) break;\n\n const fromPath = resolve(fromSegment, from.params);\n const toPath = resolve(toSegment, to.params);\n if (fromPath === null || toPath === null || fromPath !== toPath) break;\n\n startIndex++;\n }\n\n if (startIndex === 0) {\n return NOTHING_SKIPPED;\n }\n\n return {\n startIndex,\n carriedViews: to.segments.slice(0, startIndex).map(({ viewPath }) => viewPath),\n };\n}\n\nfunction stripLocaleSegment(pathname: string, supportedLocales: string[]) {\n const [, maybeLocale, ...rest] = pathname.split(\"/\");\n if (!supportedLocales.includes(maybeLocale)) {\n return pathname;\n }\n const stripped = `/${rest.join(\"/\")}`;\n return stripped === \"/\" ? \"/\" : stripped.replace(/\\/$/, \"\");\n}\n\n/**\n * Turns the `x-gemi-from` header into a plan for the request being served.\n *\n * Every way of not knowing what the client has — no header, an unparseable\n * one, a path this server does not route — ends in the same place: render\n * everything. The client is telling the server what to skip, so the failure\n * mode has to be doing the work, never trusting a value that did not check out.\n */\nexport function resolvePartialRender(options: {\n flatViewRoutes: FlatViewRoutes;\n supportedLocales: string[];\n /** Raw `x-gemi-from` value. */\n from: string | null;\n /** Origin to resolve the header value against. */\n origin: string;\n to: PartialRenderRoute;\n}): PartialRenderPlan {\n const { flatViewRoutes, supportedLocales, from, origin, to } = options;\n\n if (!from) {\n return NOTHING_SKIPPED;\n }\n\n let url: URL;\n try {\n url = new URL(from, origin);\n } catch {\n return NOTHING_SKIPPED;\n }\n\n // The client sends a path. Anything that resolved somewhere else was not one.\n if (url.origin !== origin) {\n return NOTHING_SKIPPED;\n }\n\n const match = matchViewRoute(flatViewRoutes, stripLocaleSegment(url.pathname, supportedLocales));\n\n if (!match) {\n return NOTHING_SKIPPED;\n }\n\n return planPartialRender(\n { segments: match.route.segments, params: match.params, search: url.search },\n to,\n );\n}\n",
|
|
58
58
|
"import { applyParams } from \"./applyParams\";\n\n/**\n * Route the client is currently rendering, sent on `.json` navigations so the\n * server can skip the handlers of the segments that route already has mounted.\n * Value is a locale-less pathname plus search, e.g. `/app/A/chat?tab=2`.\n */\nexport const PARTIAL_RENDER_HEADER = \"x-gemi-from\";\n\n/** What the server reports back about the skip it performed, if any. */\nexport interface PartialRenderInfo {\n /** The `x-gemi-from` value the plan was computed against. */\n from: string;\n /** View paths of the skipped segments, in order. Their data is carried forward. */\n carriedViews: string[];\n}\n\n/**\n * The `x-gemi-from` value for the route the client starts on.\n *\n * On the first render the router's `pathname` is still the route *pattern* the\n * server matched — it only becomes a resolved path once the history listener\n * has run — so this has to apply the params. Sending `/app/:orgId/chat` names\n * no route the server can resolve, and the first navigation after every full\n * page load would skip nothing.\n */\nexport function initialRenderedRoute(route: {\n pathname?: string;\n params?: Record<string, string>;\n search?: string;\n}) {\n // `applyParams` strips the trailing slash, so the root route resolves to the\n // empty string — which the server reads as \"no header\" and renders in full.\n const pathname = applyParams(route.pathname ?? \"/\", route.params ?? {}) || \"/\";\n return `${pathname}${route.search ?? \"\"}`;\n}\n",
|
|
59
|
-
"import { HttpRequest } from \"../../http\";\nimport { GEMI_REQUEST_BREAKER_ERROR } from \"../../http/Error\";\nimport { type CarriedContext, ensureSessionId, RequestContext } from \"../../http/requestContext\";\nimport type { RouterMiddleware } from \"../../http/Router\";\nimport {\n createFlatViewRoutes,\n type FlatViewRoutes,\n type ViewRouteExec,\n} from \"./createFlatViewRoutes\";\nimport { viewRouteConfigDefaults, type ViewRouteConfig } from \"./config\";\nimport { resolvePartialRender } from \"./planPartialRender\";\nimport { matchViewRoute } from \"./matchViewRoute\";\nimport { PARTIAL_RENDER_HEADER, type PartialRenderInfo } from \"../../utils/partialRender\";\nimport { createElement, Fragment } from \"react\";\n\nimport { createFileResponse, type FileOutput, type ViewRoutes } from \"../../http/ViewRouter\";\nimport { createRouteManifest } from \"./createRouteManifest\";\nimport { createComponentTree } from \"./createComponentTree\";\nimport { flattenComponentTree } from \"../../client/helpers/flattenComponentTree\";\nimport type { ComponentTree } from \"../../client/types\";\nimport { Translator } from \"../../i18n/Translator\";\nimport { resolveLocale } from \"../../i18n/resolveLocale\";\nimport { preloadDictionaries } from \"../../i18n/dictionaryRegistry\";\nimport { createDictionarySink } from \"../../i18n/dictionarySink\";\nimport { MiddlewareRegistry } from \"../middleware/MiddlewareRegistry\";\nimport { Log } from \"../../facades/Log\";\nimport { Lang } from \"../../facades/Lang\";\nimport { AuthViewRouter } from \"../../auth/routes\";\nimport { KernelId } from \"../kernel-id/KernelId\";\nimport { FeatureManager } from \"../features/FeatureManager\";\nimport { app } from \"../../foundation/app\";\nimport { kernelContext } from \"../../kernel/context\";\nimport { ServerQueryStore, type StreamSummary } from \"./ServerQueryStore\";\nimport { isPolicyDeniedError, isRecordNotFoundError } from \"../../orm/errors\";\nimport { QueryError } from \"../../client/QueryError\";\nimport { policyDeniedResponse, policyDeniedView } from \"./policyDenied\";\nimport { createServerQueryFetcher } from \"./serverQueryFetcher\";\nimport { DomainRouter } from \"./DomainRouter\";\nimport { htmlSafeJson, injectQueryPayloads, isBotUserAgent } from \"./streamQueryInjection\";\nimport { createShellContentObserver, createShellContentReporter } from \"./shellContentReport\";\nimport { createRoutePayloadStream } from \"./routePayloadStream\";\nimport { loadSharp } from \"../../support/sharp\";\nimport type { StaticViewOptions } from \"../../http/ViewRouter\";\nimport { StaticRenderContext, type StaticRenderCollector } from \"../../client/islands\";\nimport { injectIslands, type IslandResolver } from \"./staticDocument\";\n\n/**\n * `satori`, loaded on the first OG-image request rather than on import, for the\n * same reason `sharp` is (see `support/sharp.ts`): this module is reachable\n * from `gemi/services` through `RouteServiceProvider`, so a static import put\n * satori — and, one hop on, a font parser and an SVG layout engine — in the\n * module graph of every app and test that imported the barrel to reach\n * `CronJob` (#403).\n *\n * Rendering an OG image is a cold path by definition: a crawler asks for it\n * once and a CDN serves it afterwards.\n */\nconst loadSatori = async () => (await import(\"satori\")).default;\n\n/**\n * React's server renderer, loaded on the first render rather than on import.\n *\n * **Importing `react-dom/server.browser` keeps the process alive forever.** On\n * React 19.2.3 under Bun, that one import — nothing else, no render, no server\n * — is enough that the process never exits: `getActiveResourcesInfo()` comes\n * back empty, there are no timers, no sockets and an empty kqueue, and it hangs\n * anyway. `react-dom/server.node` does not do it. Reduced from #316's third\n * item, which reports the same hang from `await import(\"gemi/kernel\")` and\n * predates the 0.51 line.\n *\n * That import sat at module scope here, and this module is reachable from\n * `gemi/kernel` through `RouteServiceProvider` — so *any* script that touched\n * the kernel inherited the hang and needed an explicit `process.exit()`. A\n * one-off migration, a seeder, a cron entry point, a CI check: all of them\n * loaded the SSR renderer to get a `Kernel` they were going to use for\n * something else entirely.\n *\n * Deferring it costs one already-resolved dynamic import on the first document\n * render and nothing after — `react-dom` is external in the framework build, so\n * this stays a runtime resolve out of the app's own `node_modules` exactly as\n * the static import was. A server renders, so it pays this once at first\n * request; a script that never renders no longer pays it at all, which is the\n * whole point.\n *\n * Wrapped rather than awaited at each call site so the three of them read\n * unchanged.\n *\n * The slot is cleared on failure so a rejection is not what gets memoised. A\n * missing `react-dom` is fatal either way — this is about the diagnostic, not\n * about recovery: caching the rejected promise would make every later render\n * report whatever the loader threw the first time, with no stack from the call\n * that actually failed.\n */\nlet serverRenderer:\n | Promise<{ renderToReadableStream: (...args: any[]) => Promise<any> }>\n | undefined;\n\nconst renderToReadableStream = async (...args: any[]): Promise<any> => {\n // @ts-ignore\n serverRenderer ??= import(\"react-dom/server.browser\").catch((error) => {\n serverRenderer = undefined;\n throw error;\n });\n return (await serverRenderer).renderToReadableStream(...args);\n};\n\n/**\n * How long a document response may keep streaming before pending segments are\n * cut over to client rendering. One hung query must not hold the connection\n * open forever; the browser resolves whatever was aborted over `/api`.\n */\nconst STREAM_DEADLINE_MS = 10_000;\n\nconst themeScript = `\n!function(){try{var d=document.documentElement,c=d.classList;\nc.remove('light','dark');\nvar e=localStorage.getItem('theme');\nif('system'===e||(!e&&'system'===defaultTheme)){\n var t='(prefers-color-scheme: dark)',m=window.matchMedia(t);\n if(m.media!==t||m.matches){d.style.colorScheme='dark';c.add('dark')}\n else{d.style.colorScheme='light';c.add('light')}\n}else if(e){\n c.add(e||'')\n}}catch(e){}}()\n`;\n\nasync function getTtfFont(\n family: string,\n weight: number,\n style: \"normal\" | \"italic\",\n): Promise<ArrayBuffer> {\n const familyParam = `${style === \"italic\" ? \"italic,\" : \"\"}wght@${style === \"italic\" ? \"1,\" : \"\"}${weight}`;\n\n // Get css style sheet with user agent Mozilla/5.0 Firefox/1.0 to ensure non-variable TTF is returned\n const cssCall = await fetch(\n `https://fonts.googleapis.com/css2?family=${family}:${familyParam}&display=swap`,\n {\n headers: {\n \"User-Agent\": \"Mozilla/5.0 Firefox/1.0\",\n },\n },\n );\n\n const css = await cssCall.text();\n const ttfUrl = css.match(/url\\(([^)]+)\\)/)?.[1];\n\n return await fetch(ttfUrl).then((res) => res.arrayBuffer());\n}\n\n/**\n * `/assets` is where the client build output is served from, ahead of the\n * router — a route mounted there could never be reached in production, and in\n * dev it would appear to work. Fail at boot instead of shipping that.\n */\nexport const RESERVED_ROUTE_PREFIX = \"/assets\";\n\n/**\n * `/assets` or anything under it. The boot-time route check and the production\n * static handler both ask this, so a route the router accepts is never one the\n * static handler answers from `dist/client` instead.\n */\nexport function isReservedAssetPath(path: string): boolean {\n return path === RESERVED_ROUTE_PREFIX || path.startsWith(`${RESERVED_ROUTE_PREFIX}/`);\n}\n\nexport function assertNoReservedRoutePaths(routePaths: string[]) {\n const reserved = routePaths.filter(isReservedAssetPath);\n\n if (reserved.length > 0) {\n const many = reserved.length > 1;\n throw new Error(\n `View route path${many ? \"s\" : \"\"} ${reserved.map((path) => `\"${path}\"`).join(\", \")} ` +\n `use${many ? \"\" : \"s\"} the reserved \"${RESERVED_ROUTE_PREFIX}\" prefix. ` +\n `The client build output is served from there before the router runs, so the route would never match. ` +\n `Mount it somewhere else.`,\n );\n }\n}\n\n/** A request breaker's `payload.view` as the page response it stands for. */\n/** What a page learns of its host group — `useDomain()` reads it. */\nfunction clientDomain(req: HttpRequest) {\n const resolver = app(DomainRouter).resolver!;\n return {\n ...req.domain!,\n root: resolver.root,\n origin: resolver.publicOrigin(req.rawRequest),\n };\n}\n\nexport function viewBreakResponse(view: Record<string, any>) {\n const { status = 400, error } = view;\n return new Response(error?.message, {\n ...view,\n status,\n });\n}\n\n/**\n * The same break for a `.json` navigation, from its `payload.api`: the client\n * router reads `data` and `directive` out of the body.\n */\nexport function viewDataBreakResponse(api: Record<string, any>) {\n const { status = 400, data, directive, headers } = api;\n return new Response(JSON.stringify({ data, directive }), {\n headers,\n status,\n });\n}\n\nexport class ViewRouteDispatcher {\n static token = \"router.view\";\n\n flatViewRoutes: FlatViewRoutes = {};\n routeManifest: Record<string, string[]> = {};\n /** `routeManifest` without file routes — they have no component to render client side. */\n clientRouteManifest: Record<string, string[]> = {};\n componentTree: ComponentTree = [];\n flatComponentTree: string[] = [];\n /**\n * Route patterns declared `.static()`. Shipped to the browser so a\n * client-side navigation to one becomes a full page load: the page has no\n * client router to render it into.\n */\n staticRoutes: string[] = [];\n root: any = null;\n /**\n * The shell-content hint (#294): React defers any boundary over\n * `progressiveChunkSize` on size alone, so a page that reads fine without\n * JS can go blank the day one more section pushes it over the budget — and\n * nothing else notices the transition (#289 was found by hand-measuring).\n * The reporter owns the once-per-route-per-boot dedup so a hot route\n * doesn't spam the dev console.\n */\n private shellReporter = createShellContentReporter();\n\n /**\n * `modulepreload` elements per route, built once instead of per request —\n * everything they derive from (the built chunk graph, the client entry) is\n * fixed at boot, and React elements are immutable, so one set is reusable\n * across every render of that route.\n *\n * Keyed on the manifest object rather than a plain field so a process that\n * ever renders against two of them — a test suite, most obviously — can\n * never serve one route's chunks out of the other's cache.\n */\n private preloadCache = new WeakMap<\n object,\n { clientEntry: unknown; byRoute: Map<string, any[]> }\n >();\n\n private readonly hooks: Required<\n Pick<\n ViewRouteConfig,\n \"onRequestStart\" | \"onRequestEnd\" | \"onRequestFail\" | \"onStreamComplete\"\n >\n >;\n\n /** See `ViewRouteConfig.partialRendering`. */\n readonly partialRendering: boolean;\n\n constructor(config: ViewRouteConfig) {\n const defaults = viewRouteConfigDefaults();\n\n this.partialRendering = config.partialRendering ?? defaults.partialRendering;\n\n this.hooks = {\n onRequestStart: config.onRequestStart ?? defaults.onRequestStart,\n onRequestEnd: config.onRequestEnd ?? defaults.onRequestEnd,\n onRequestFail: config.onRequestFail ?? defaults.onRequestFail,\n onStreamComplete: config.onStreamComplete ?? defaults.onStreamComplete,\n };\n\n const routes: ViewRoutes = {\n \"/\": config.rootRouter,\n \"/auth\": AuthViewRouter,\n };\n this.flatViewRoutes = createFlatViewRoutes(routes);\n assertNoReservedRoutePaths(Object.keys(this.flatViewRoutes));\n this.routeManifest = createRouteManifest(routes);\n this.clientRouteManifest = Object.fromEntries(\n Object.entries(this.routeManifest).filter(([, views]) => views.at(-1) !== \"FILE\"),\n );\n this.componentTree = createComponentTree(routes);\n this.flatComponentTree = flattenComponentTree(this.componentTree);\n this.staticRoutes = Object.entries(this.flatViewRoutes)\n .filter(([, route]) => route.static)\n .map(([path]) => path);\n // A static view's own document layout is a view module like any other —\n // the servers load every name in this list up front — but it is in no\n // route's chain, so it would not be here otherwise.\n for (const path of this.staticRoutes) {\n const layout = this.flatViewRoutes[path].static?.layout;\n if (layout && !this.flatComponentTree.includes(layout)) {\n this.flatComponentTree.push(layout);\n }\n }\n this.root = config.root;\n }\n\n /**\n * Whether every flag gating a route is on for this request.\n *\n * All must pass. Gates accumulate down the tree — a router's, then a layout's,\n * then the route's — and the intersection is the only reading that composes:\n * a route inside a gated section cannot be more reachable than the section.\n */\n private async passesFeatureGates(keys: string[]): Promise<boolean> {\n const features = app(FeatureManager);\n for (const key of keys) {\n if (!(await features.enabled(key))) return false;\n }\n return true;\n }\n\n async onRequestEnd(req: HttpRequest) {\n // Idempotent, and normally a no-op by the time it gets here: the request\n // already minted the id up front so that everything which ran in between\n // saw it. Kept as a backstop for any path that reaches the end without\n // having asked.\n ensureSessionId();\n\n return await this.hooks.onRequestEnd(req);\n }\n\n /**\n * Fires the provider's `onStreamComplete` from a stream callback — an\n * observability hook must never break the response body it observes, so\n * sync throws and rejections are logged and swallowed.\n *\n * Call sites must invoke this inside the request scope (see\n * `runInRequestScope` in `handleViewRequest`): stream callbacks are driven\n * by the HTTP server after the handler returned, outside the kernel\n * AsyncLocalStorage — where both the user's hook and this very `Log.error`\n * guard would break.\n */\n private completeStream(req: HttpRequest, summary: StreamSummary) {\n const logError = (err: any) => {\n Log.error(err?.message ?? 'Error in \"onStreamComplete\" event handler', {\n err: JSON.stringify(err),\n });\n };\n try {\n Promise.resolve(this.hooks.onStreamComplete(req, summary)).catch(logError);\n } catch (err) {\n logError(err);\n }\n }\n\n /** See `preloadCache`. */\n private modulePreloadLinks(args: {\n clientEntry?: { module: string; preload: string[] };\n modulePreloadManifest?: Record<string, string[]>;\n views: string[];\n routeKey: string;\n }) {\n const { clientEntry, modulePreloadManifest, views, routeKey } = args;\n\n const build = () => {\n const hrefs = new Set<string>(clientEntry?.preload ?? []);\n for (const view of views) {\n for (const href of modulePreloadManifest?.[view] ?? []) {\n hrefs.add(href);\n }\n }\n return [...hrefs].map((href) =>\n createElement(\"link\", {\n key: `modulepreload:${href}`,\n rel: \"modulepreload\",\n href,\n }),\n );\n };\n\n // Dev: no chunk graph to announce, so there is nothing worth caching.\n if (!modulePreloadManifest) {\n return build();\n }\n\n let cached = this.preloadCache.get(modulePreloadManifest);\n if (!cached || cached.clientEntry !== clientEntry) {\n cached = { clientEntry, byRoute: new Map() };\n this.preloadCache.set(modulePreloadManifest, cached);\n }\n let links = cached.byRoute.get(routeKey);\n if (!links) {\n links = build();\n cached.byRoute.set(routeKey, links);\n }\n return links;\n }\n\n /**\n * A `.static()` view's document: the same tree a hydrated view renders, but\n * settled before the first byte and sent with no client runtime — no entry\n * module, `modulepreload`s, `__GEMI_DATA__`, theme script, query or\n * dictionary payloads, or React's streaming scripts. Islands that rendered\n * add their loader (`injectIslands`).\n */\n private async renderStatic(args: {\n req: HttpRequest;\n runInRequestScope: <T>(fn: () => T) => T;\n staticView: StaticViewOptions;\n currentViews: string[];\n data: any;\n serverQueries: ServerQueryStore;\n headers: Headers;\n getStyles: (p: string[], options?: { static?: boolean; layout?: string }) => Promise<any[]>;\n viewImportMap: Record<string, any>;\n viewModules?: Record<string, any>;\n resolveIsland?: IslandResolver;\n }) {\n const { req, runInRequestScope, staticView, currentViews, data, serverQueries, headers } =\n args;\n\n let rootLayout: unknown;\n if (staticView.layout) {\n rootLayout = args.viewImportMap[staticView.layout];\n if (!rootLayout) {\n throw new Error(\n `The static layout \"${staticView.layout}\" was not found. It is a view path: a file at app/views/${staticView.layout}.tsx whose default export renders the document.`,\n );\n }\n }\n\n const styles = await args.getStyles(currentViews, { static: true, layout: staticView.layout });\n\n serverQueries.markRenderStart();\n const collector: StaticRenderCollector = { islands: new Map() };\n const dictionarySink = createDictionarySink();\n const deadline = new AbortController();\n const deadlineTimer = setTimeout(() => deadline.abort(), STREAM_DEADLINE_MS);\n\n try {\n const stream = await renderToReadableStream(\n createElement(StaticRenderContext.Provider, {\n value: collector,\n children: createElement(Fragment, {\n children: [\n ...styles,\n createElement(this.root, {\n data,\n viewImportMap: args.viewImportMap,\n viewModules: args.viewModules,\n serverQueries,\n dictionarySink,\n rootLayout,\n key: \"root\",\n }),\n ],\n }),\n }),\n {\n signal: deadline.signal,\n // With `allReady` awaited below, this keeps every boundary inline\n // rather than split out behind a reveal script (see `settled`).\n progressiveChunkSize: Number.MAX_SAFE_INTEGER,\n onError(error: unknown) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(error);\n }\n },\n },\n );\n await stream.allReady.catch(() => {});\n const html = await new Response(stream).text();\n\n return new Response(\n injectIslands(html, collector, args.resolveIsland, process.env.NODE_ENV !== \"production\"),\n { status: 200, headers },\n );\n } finally {\n clearTimeout(deadlineTimer);\n runInRequestScope(() =>\n this.completeStream(req, serverQueries.summarize(deadline.signal.aborted)),\n );\n }\n }\n\n private async render(props: {\n req: HttpRequest;\n /**\n * Re-enters the kernel + request AsyncLocalStorage scopes captured while\n * the request was live. Every stream lifecycle callback below runs after\n * the handler returned — driven by the HTTP server, outside both scopes —\n * so user hooks are always invoked through this.\n */\n runInRequestScope: <T>(fn: () => T) => T;\n viewData: any;\n pathname: string;\n currentPathName: string;\n csrfTokenHMAC: Buffer;\n headers: any;\n url: URL;\n i18n: any;\n user: any;\n serverQueries: ServerQueryStore;\n userAgent: string | null;\n noStream: boolean;\n params: any;\n breadcrumbs: any;\n urlLocaleSegment?: string;\n meta: any;\n isOgRequest?: boolean;\n appId: string;\n features: Record<string, boolean>;\n /** The matched route's `.static()` options; absent for a hydrated view. */\n staticView?: StaticViewOptions;\n }) {\n const {\n req,\n runInRequestScope,\n csrfTokenHMAC,\n currentPathName,\n headers,\n i18n,\n params,\n pathname,\n serverQueries,\n userAgent,\n noStream,\n url,\n user,\n viewData,\n breadcrumbs,\n urlLocaleSegment,\n meta,\n isOgRequest,\n appId,\n features,\n staticView,\n } = props;\n\n const pageDataKey = pathname.replace(`/${urlLocaleSegment}`, \"\");\n\n const result = {\n kind: \"view\",\n data: {\n meta,\n pageData: {\n [pageDataKey]: viewData,\n },\n __csrf: csrfTokenHMAC.toString(\"base64\"),\n // Placeholder — re-snapshotted at render time (below) so everything\n // that resolved while styles and modules loaded still makes the\n // document payload instead of streaming.\n prefetchedData: {} as Record<string, Record<string, any>>,\n i18n,\n auth: { user },\n routeManifest: this.clientRouteManifest,\n breadcrumbs,\n router: {\n urlLocaleSegment,\n pathname: currentPathName,\n params,\n currentPath: pathname,\n searchParams: url.search,\n is404: !currentPathName ? true : false,\n // Only on the document: a client-side navigation never changes host.\n domain: req.domain ? clientDomain(req) : null,\n },\n appId,\n // Evaluated key -> value only. Rules, conditions, segment criteria and\n // the bucketing seed stay on the server: with the seed and a subject id\n // anyone could compute another user's bucket for every flag, including\n // unreleased ones.\n features,\n componentTree: [[\"404\", []], ...this.componentTree],\n // Only when there are any, so an app without static views ships the\n // payload it always did.\n ...(this.staticRoutes.length > 0 ? { staticRoutes: this.staticRoutes } : {}),\n },\n head: {},\n };\n\n const Root = this.root;\n const currentViews = this.routeManifest[currentPathName];\n return async (params: {\n /**\n * `static` is set for a static view, which has no client to load CSS\n * later: the styles must cover the views' whole import graph. `layout`\n * is its own document layout, whose CSS then replaces the app's\n * stylesheet.\n */\n getStyles: (p: string[], options?: { static?: boolean; layout?: string }) => Promise<any[]>;\n viewImportMap: any;\n bootstrapModules?: string[];\n loaders: string;\n cssManifest: Record<string, string[]>;\n ogMap: Record<string, any>;\n /**\n * Full view modules (not just default exports) so `Route` can render a\n * view's `Loading`/`Error` exports on the server — a streamed shell\n * carries real fallbacks, and they must match what the client hydrates.\n */\n viewModules?: Record<string, any>;\n /**\n * The client entry, when the server wants it booted from the bootstrap\n * script instead of handed to React as a `bootstrapModule`: `module` is\n * imported, `preload` is every chunk that import pulls in.\n *\n * React preloads its own `bootstrapModules` with `fetchPriority=\"low\"`\n * hardcoded (Fizz has no option for it), which parks the one module\n * that unblocks hydration behind everything else the page is fetching.\n * Emitting the `modulepreload` ourselves gets it the browser's default\n * script priority, and it is the same request either way — the\n * `import()` below consumes the preloaded module (#352).\n */\n clientEntry?: { module: string; preload: string[] };\n /**\n * Built chunk URLs per view name, like `cssManifest`. Only the current\n * route's chain is preloaded.\n */\n modulePreloadManifest?: Record<string, string[]>;\n /**\n * The prefix the client build was built with. `cssManifest` carries\n * manifest paths, not URLs — they double as the `id` of the `<style>`\n * each one is inlined into — so the client needs the base to fetch one.\n */\n assetBase?: string;\n /** Where island client modules are served from; see `injectIslands`. */\n resolveIsland?: IslandResolver;\n }) => {\n const {\n bootstrapModules = [],\n loaders,\n getStyles,\n viewImportMap,\n cssManifest,\n ogMap,\n viewModules,\n clientEntry,\n modulePreloadManifest,\n assetBase,\n resolveIsland,\n } = params;\n\n // `clientEntry` and `bootstrapModules` are two spellings of the same job,\n // and running both would boot the entry twice — once through React's\n // `<script type=\"module\">`, once through the `import()` below. The entry\n // wins where it is offered, so React is handed nothing and never emits\n // the `fetchPriority=\"low\"` preload that made it worth taking over.\n const reactBootstrapModules = clientEntry ? [] : bootstrapModules;\n\n const bootstrapScriptContent = (data: string) =>\n [\n data,\n `window.loaders=${loaders}`,\n // Nothing imports the entry when the server routed it through\n // `clientEntry` — the bootstrap script is where it starts. The\n // `.catch` re-throws out of the microtask because a bare `import()`\n // here would report a chunk that 404s after a deploy, or an entry\n // that throws while evaluating, as an `unhandledrejection` only —\n // which `window.onerror`-based reporters do not see. The page would\n // then sit permanently unhydrated with nothing raised.\n ...(clientEntry\n ? [\n `import(${JSON.stringify(clientEntry.module)}).catch(function(e){setTimeout(function(){throw e})})`,\n ]\n : []),\n ].join(\";\");\n\n if (isOgRequest) {\n let ogHandler = null;\n let ogComponent = null;\n // `currentViews` is `undefined` on an unmatched route. Without the\n // guard `GET /nope.og` throws here and `httpProd` answers with the raw\n // stack trace, where the 404 below is what a crawler should get.\n for (const view of currentViews ?? []) {\n if (typeof ogMap[view] === \"function\") {\n ogComponent = view;\n ogHandler = ogMap[view];\n }\n }\n if (!ogHandler) {\n return new Response(\"Not found\", { status: 404 });\n }\n const data = Object.values(result.data.pageData)[0];\n\n try {\n await renderToReadableStream(createElement(ogHandler, data[ogComponent]), {\n onError: () => {},\n });\n } catch (err) {\n const { fonts, ...options } = err.satoriOptions;\n const _fonts = await Promise.all(\n fonts.map((font) => {\n return getTtfFont(font.name, font.weight, font.style).then((data) => ({\n ...font,\n data,\n }));\n }),\n );\n\n const ogHeaders = new Headers(headers);\n ogHeaders.set(\"Content-Type\", \"image/png\");\n const [satori, sharp] = await Promise.all([\n loadSatori(),\n loadSharp(\"Rendering an OG image\"),\n ]);\n const svg = await satori(err.jsx, { ...options, fonts: _fonts });\n const png = await sharp(Buffer.from(svg))\n .png({\n compressionLevel: 0,\n effort: 10,\n })\n .toBuffer();\n\n return new Response(new Uint8Array(png), { headers: ogHeaders });\n }\n\n return new Response(\"data\");\n }\n\n if (staticView && currentPathName) {\n return await this.renderStatic({\n req,\n runInRequestScope,\n staticView,\n currentViews,\n data: result.data,\n serverQueries,\n headers,\n getStyles,\n viewImportMap,\n viewModules,\n resolveIsland,\n });\n }\n\n result.data[\"cssManifest\"] = cssManifest;\n // Client-side navigation reaches a route's chunks the same serial way a\n // hard load did, one `import()` per level, so it needs the same list the\n // shell head carries — shipped like `cssManifest` and warmed by\n // `preloadRouteModules` (#352).\n result.data[\"modulePreloadManifest\"] = modulePreloadManifest ?? {};\n // Only when there is one: the client's default is the root-relative `/`,\n // and a payload without the key is the one every app shipped before it.\n if (assetBase && assetBase !== \"/\") {\n result.data[\"assetBase\"] = assetBase;\n }\n\n // Hydration reaches each route segment through `window.loaders`, i.e. an\n // `import()` the browser cannot see until the entry has run — and it\n // sees a nested chunk only once its parent has parsed. On a real\n // network that serial chain shows every boundary's `Loading` fallback\n // where server-rendered content already is, collapsing the page height\n // and restoring it a round trip later (#352). Preloaded in the shell\n // head, the whole chain is fetched in parallel with the entry and is\n // resident before hydration asks for it.\n //\n // An unmatched route leaves `currentViews` undefined but still renders a\n // document — the `404` view, the one route class most likely to be hit\n // cold — so it preloads that view's chain, mirroring the `[\"404\"]` the\n // client mounts.\n const preloadLinks = this.modulePreloadLinks({\n clientEntry,\n modulePreloadManifest,\n views: currentViews ?? [\"404\"],\n routeKey: currentPathName ?? \"404\",\n });\n\n const styles = await getStyles(currentViews);\n\n // Everything resolved by now ships in the document payload; everything\n // still in flight streams in behind it. The snapshot marks its entries\n // as shipped so the injector doesn't send them twice.\n result.data.prefetchedData = serverQueries.snapshotResolved();\n serverQueries.markRenderStart();\n\n const deadline = new AbortController();\n const deadlineTimer = setTimeout(() => deadline.abort(), STREAM_DEADLINE_MS);\n\n // Decided before the render call because it changes *render-time*\n // behavior: React splits any boundary bigger than\n // `progressiveChunkSize` (~12.8KB) out of the shell as it renders, and\n // awaiting `allReady` afterwards settles the data but cannot undo the\n // split — a non-JS reader would see a body whose content is parked in\n // `<div hidden>` + `$RC()` reveal scripts (#286, #289). Two audiences\n // need the settled document: crawlers (detected by UA — progressive\n // chunking only exists to reach a browser sooner, which is worthless to\n // a client that buffers the whole response) and routes that declared\n // `\"no-stream\"` (marketing/content pages that must render for\n // JS-disabled humans, text browsers, and failed-script loads too).\n const settled = isBotUserAgent(userAgent) || noStream;\n\n // Dev-only: collect the streamed bytes so the close hook can measure\n // what a no-JS reader gets (#294). A settled document carries its\n // content inline by construction — nothing to measure — and a route\n // already hinted this boot skips the collection entirely.\n const shellObserver =\n process.env.NODE_ENV !== \"production\" &&\n !settled &&\n currentPathName &&\n this.shellReporter.shouldObserve(currentPathName)\n ? createShellContentObserver()\n : null;\n\n // Which dictionaries a page reads is only knowable once it has rendered,\n // so they cannot ride the `__GEMI_DATA__` snapshot (serialized below,\n // before the render starts). The sink collects them during the render and\n // the injector streams each one into the document.\n const dictionarySink = createDictionarySink();\n\n try {\n const stream = await renderToReadableStream(\n createElement(Fragment, {\n children: [\n // React hoists these into `<head>`, ahead of the inlined\n // stylesheets, so the browser starts the fetches on the shell's\n // first bytes.\n ...preloadLinks,\n ...styles,\n createElement(\"script\", {\n key: \"theme-script\",\n dangerouslySetInnerHTML: {\n __html: themeScript,\n },\n }),\n createElement(Root, {\n data: result.data,\n viewImportMap,\n viewModules,\n serverQueries,\n dictionarySink,\n key: \"root\",\n }),\n ],\n }),\n {\n bootstrapScriptContent: bootstrapScriptContent(\n `window.__GEMI_DATA__ = ${htmlSafeJson(result.data)}`,\n ),\n bootstrapModules: reactBootstrapModules,\n signal: deadline.signal,\n ...(settled ? { progressiveChunkSize: Number.MAX_SAFE_INTEGER } : {}),\n // A query rejecting inside a streamed segment is expected: React\n // client-renders that boundary and the browser surfaces the error\n // through its own fetch. Log it and move on.\n onError(error: unknown) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(error);\n }\n },\n },\n );\n\n stream.allReady\n .catch(() => {})\n .finally(() => clearTimeout(deadlineTimer));\n\n // A settled response waits for everything before the first byte.\n // Works only together with the `progressiveChunkSize` override\n // above: this waits for the data, that keeps the content inline\n // instead of script-revealed.\n if (settled) {\n await stream.allReady.catch(() => {});\n }\n\n return new Response(\n injectQueryPayloads(stream, serverQueries, {\n // A settled body has no shell-then-stream phase — its first byte\n // already carries everything — so only progressive responses mark\n // one; the summary then reports `shellAt === settledAt` for the\n // settled ones.\n onShell: settled ? undefined : () => serverQueries.markShell(),\n onChunk: shellObserver?.onChunk,\n // The APM-visible end of the request: the body closed, not the\n // handler returned (that was at time-to-shell).\n onClose: () =>\n runInRequestScope(() => {\n this.completeStream(req, serverQueries.summarize(deadline.signal.aborted));\n if (shellObserver) {\n // The injector's `onChunk` collected the exact bytes the\n // visitor got; measured once the body closed (#294).\n this.shellReporter.report(currentPathName, shellObserver.measure());\n }\n }),\n },\n dictionarySink),\n {\n status: !currentPathName ? 404 : 200,\n headers,\n },\n );\n } catch (err) {\n clearTimeout(deadlineTimer);\n // The document below writes the message and stack into the page for\n // the dev overlay. In production they would reach whoever loaded the\n // page (#523), so the error goes on to the server's last-resort\n // handler instead, which answers a generic 500 and reports it. No\n // body will close to end the span, so it ends here.\n if (process.env.NODE_ENV === \"production\") {\n runInRequestScope(() =>\n this.completeStream(req, serverQueries.summarize(deadline.signal.aborted)),\n );\n throw err;\n }\n const stream = await renderToReadableStream(createElement(\"div\"), {\n bootstrapScriptContent: bootstrapScriptContent(\n `window.error= ${htmlSafeJson(err.message)}; window.stack_trace=${htmlSafeJson(err.stack)};window.__GEMI_DATA__ = ${htmlSafeJson(result.data)}`,\n ),\n bootstrapModules:\n process.env.NODE_ENV === \"development\"\n ? [\"/render-error.js\", ...reactBootstrapModules]\n : reactBootstrapModules,\n });\n // The failed-render body still closes, and the span-ending hook is\n // pinned to the body closing, not the render succeeding — a span that\n // only ends on happy paths leaks for exactly the requests worth\n // seeing. No shell mark: this body is one settled error document.\n return new Response(\n injectQueryPayloads(stream, serverQueries, {\n onClose: () =>\n runInRequestScope(() =>\n this.completeStream(req, serverQueries.summarize(deadline.signal.aborted)),\n ),\n }),\n {\n status: !currentPathName ? 404 : 200,\n headers,\n },\n );\n }\n };\n }\n\n async handleViewRequest(req: Request, carried?: CarriedContext | null) {\n const url = new URL(req.url);\n const isViewDataRequest = url.pathname.endsWith(\".json\");\n const isOgRequest = url.pathname.endsWith(\".og\");\n const urlPathnameWithLocale = url.pathname.replace(\".json\", \"\").replace(\".og\", \"\");\n\n const [, maybeLocale, ...rest] = urlPathnameWithLocale.split(\"/\");\n let urlPathname = `/${rest.join(\"/\")}`;\n let urlLocaleSegment = null;\n let urlLocale: string | null = null;\n\n const translator = app(Translator);\n\n const isPathnameWithLocale =\n !translator.supportedLocales.includes(maybeLocale);\n\n if (isPathnameWithLocale) {\n urlPathname = urlPathnameWithLocale;\n } else {\n urlLocaleSegment = maybeLocale;\n urlLocale = maybeLocale;\n }\n\n // A first path segment is not necessarily a locale, and the shapes overlap:\n // `de-luxe` is a language `de` with a legal 4-letter subtag, `en-suite` the\n // same for `en`. No tightening of the tag pattern separates them, so route\n // existence is the signal — a path the app actually serves is served, and\n // only one it does not is read as a locale that needs redirecting. Without\n // this, `/de-luxe` answered `302 /de-DE` and the page was gone.\n const pathIsARoute =\n urlLocale === null && matchViewRoute(this.flatViewRoutes, urlPathname) !== null;\n\n if (translator.isLocaleAware && !isOgRequest && urlLocale === null && !pathIsARoute) {\n // A locale prefix the app doesn't serve verbatim but can map onto one it\n // does — `/en/about` → `/en-US/about`, `/de-AT/about` → `/de-DE/about` —\n // is sent to that locale's URL rather than rendered as an unknown path.\n const resolvedLocale = resolveLocale(\n maybeLocale,\n translator.supportedLocales,\n translator.defaultLocale,\n );\n if (resolvedLocale) {\n // `rest` is the path after the locale segment; `.json` is re-appended\n // so a route-data request lands on the data it asked for.\n const restPath = rest.length ? `/${rest.join(\"/\")}` : \"\";\n return new Response(\"\", {\n status: 302,\n headers: {\n \"Cache-Control\": \"private, no-cache, no-store, max-age=0, must-revalidate\",\n Location: `/${resolvedLocale}${restPath}${isViewDataRequest ? \".json\" : \"\"}${url.search}`,\n },\n });\n }\n }\n\n if (translator.isLocaleAware && !isOgRequest) {\n const locale = app(Translator).detectLocale(\n new HttpRequest(req, {}, \"view\", urlPathname),\n );\n\n if (urlLocale === null && locale !== translator.defaultLocale) {\n const _pathname = url.pathname === \"/\" ? \"\" : url.pathname;\n return new Response(\"\", {\n status: 302,\n headers: {\n \"Cache-Control\": \"private, no-cache, no-store, max-age=0, must-revalidate\",\n Location: `/${locale}${_pathname}${url.search}`,\n },\n });\n }\n }\n\n urlPathname = urlPathname.replace(\"//\", \"/\");\n let handlers: ViewRouteExec[] = [];\n let middlewares: (RouterMiddleware | string)[] = [];\n let currentPathName: null | string = null;\n let params: Record<string, any> = {};\n let partial: PartialRenderInfo | null = null;\n // `\"no-stream\"` in a route's (or its router's) middleware list opts the\n // route out of progressive streaming: everyone gets the fully settled\n // document a bot UA would (#289). It is a directive read here, not real\n // middleware — the middleware runner ignores unknown aliases.\n let noStream = false;\n // Flags gating the matched route, checked once the request scope is open\n // and middleware has run.\n let featureGates: string[] = [];\n // The matched route's `.static()` options, if it has any.\n let staticView: StaticViewOptions | undefined;\n\n try {\n const match = matchViewRoute(this.flatViewRoutes, urlPathname);\n if (match) {\n currentPathName = match.routePath;\n params = match.params;\n handlers = match.route.exec;\n middlewares = match.route.middleware;\n featureGates = match.route.features;\n noStream = middlewares.includes(\"no-stream\");\n staticView = match.route.static;\n\n // Only navigations skip work. A document request renders the whole\n // tree, and the client has nothing to carry forward yet.\n if (isViewDataRequest && this.partialRendering) {\n const from = req.headers.get(PARTIAL_RENDER_HEADER);\n const plan = resolvePartialRender({\n flatViewRoutes: this.flatViewRoutes,\n supportedLocales: app(Translator).supportedLocales,\n from,\n origin: url.origin,\n to: { segments: match.route.segments, params, search: url.search },\n });\n\n if (plan.startIndex > 0) {\n handlers = handlers.slice(plan.startIndex);\n partial = { from, carriedViews: plan.carriedViews };\n }\n }\n }\n } catch (err) {\n // TODO: Handle this\n throw err;\n }\n\n // A static view's handler output reaches the browser only as the markup\n // it renders, and an app may rely on that (return a whole record, render\n // part of it). The `.json` payload would hand over all of it, and nothing\n // asks for one: the client router loads static routes as documents.\n if (staticView && isViewDataRequest) {\n return new Response(\"Not found\", { status: 404 });\n }\n\n const httpRequest = new HttpRequest(req, params, \"view\", currentPathName);\n this.hooks.onRequestStart(httpRequest);\n return await RequestContext.run(httpRequest, async () => {\n let pageData: {\n cookies: Set<string>;\n headers: Headers;\n currentPathName: string | null;\n data: Record<string, any>;\n prefetchedData: Record<string, any>;\n user: any; // TODO: fix type\n params: Record<string, any>;\n urlLocaleSegment: string | null;\n meta: any;\n appId: string;\n features: Record<string, boolean>;\n } | null = null;\n const ctx = RequestContext.getStore();\n // The HTTP server drives the response body — and therefore every stream\n // lifecycle callback — after `app.fetch` returned, outside the kernel\n // AsyncLocalStorage scope and outside this request's context (the same\n // phenomenon `createServerQueryFetcher` documents for render-discovered\n // fetches). Facades and `req.ctx()` inside `onStreamComplete` /\n // `onRequestFail` would break there, so capture both scopes while they\n // are live and re-enter them around every hook invocation below.\n const kernelStore = kernelContext.getStore();\n const runInRequestScope = <T>(fn: () => T): T =>\n kernelContext.run(kernelStore, () => RequestContext.runWith(ctx, fn));\n // Before middleware and handlers, so every `Query.prefetch` along the\n // way lands in one live, request-scoped store.\n ctx.serverQueries = new ServerQueryStore(createServerQueryFetcher(req));\n // A query rejecting during the streamed render (or a fire-and-forget\n // prefetch) never throws the handler, so the catch below can't see it —\n // error tracking wired to `onRequestFail` would miss server-side work\n // that failed. Route rejections through the hook here. The identity set\n // keeps `Query.instant` rethrows — which DO reach the catch — from\n // reporting the same error twice.\n const reportedQueryErrors = new Set<any>();\n ctx.serverQueries.onQueryFail((entry) => {\n reportedQueryErrors.add(entry.error);\n try {\n // In scope, and with the rejection handler attached *inside* the\n // scope, so a facade-using hook works for render-phase failures\n // exactly as it does for handler-phase ones.\n runInRequestScope(() =>\n Promise.resolve(this.hooks.onRequestFail(httpRequest, entry.error)).catch(\n () => {},\n ),\n );\n } catch {\n // An error-reporting hook must not break the settle chain it\n // observes — a suspended segment is waiting on it.\n }\n });\n\n if (urlLocale) {\n const locale = urlLocale.replaceAll(\"/\", \"\");\n Lang.setLocale(locale);\n } else {\n Lang.setLocale();\n }\n\n const httpRequest = ctx.req;\n\n // Before middleware, so that everything downstream — middleware, handlers,\n // feature-flag bucketing — reads one id, and the same one the browser is\n // about to be given. Both the document and the `.json` navigation path\n // come through here, which is the point: minting only on the document path\n // left a client-side navigation with no subject to bucket on.\n ensureSessionId();\n\n try {\n // A view middleware can resolve the record the route is about — the\n // workspace named in the path, the membership it implies — and raise\n // `RecordNotFoundError` doing it. That means here what it means in a\n // loader, so it is caught rather than left to the break path below:\n // the answer is not a refusal, it is this request becoming an\n // unmatched one.\n let recordMissing = false;\n try {\n await app(MiddlewareRegistry).runMiddleware(middlewares);\n } catch (err) {\n if (!isRecordNotFoundError(err)) {\n throw err;\n }\n recordMissing = true;\n }\n\n // After middleware, not at match time: `auth` is what puts the user on\n // the request context, and a route gated on a flag that targets signed-in\n // users has to see them. The route table is built once at boot and is\n // shared by every visitor, so this is the only place a per-user decision\n // about a route can be made.\n //\n // Clearing the match rather than throwing is what produces the real 404:\n // the framework renders the application's `404` view exactly when\n // `currentPathName` is null, so a gated route becomes indistinguishable\n // from one that was never defined — status, view and component tree\n // included. A `RequestBreakerError` here would instead return a bare\n // text body, which both looks broken and confirms the route exists.\n //\n // A missing record joins the gate here rather than getting a branch of\n // its own, because the outcome is the same one and it is spelled in\n // exactly these three assignments. Short-circuited: a request whose\n // middleware already found nothing must not go on to evaluate flags.\n if (\n recordMissing ||\n (featureGates.length > 0 && !(await this.passesFeatureGates(featureGates)))\n ) {\n currentPathName = null;\n handlers = [];\n // `routePath` too, and not only for tidiness: it is what selects this\n // request's translation namespace below, so leaving it would serve the\n // gated route's dictionary alongside its 404 while a genuinely\n // unmatched path carries none. For an unannounced feature the\n // translation keys are usually the most descriptive thing about it,\n // which makes that difference the leak this block exists to prevent.\n //\n // Safe this late: the feature context was built and memoized by the\n // gate check above, so a `when` reading `ctx.request.routePath` has\n // already seen the real value.\n httpRequest.routePath = \"\";\n }\n\n const translator = app(Translator);\n // Two ways to be an i18n app now. `isEnabled` means the legacy\n // `prefetch` config has dictionaries to serve; configured\n // `supportedLocales` alone means the app uses `defineDictionary` and\n // still needs its locale detected, or every `useDictionary` would fall\n // back to its source language. `isLocaleAware` is the same predicate\n // the locale-prefix redirect above uses — they have to agree.\n const hasLegacyDictionaries = translator.isEnabled;\n const isI18nEnabled = translator.isLocaleAware;\n // Shipped whether or not the app is locale-aware: `useFormatter` and\n // `useDictionary(...).format` read the zone (and, without a resolved\n // locale, the default one) from here, so the browser formats in exactly\n // what the server rendered with and hydration finds the same text.\n const detectionRequest = new HttpRequest(req, httpRequest.params as any);\n let i18n: Record<string, any> = {\n defaultLocale: translator.defaultLocale,\n timeZone: translator.detectTimeZone(detectionRequest),\n };\n if (isI18nEnabled) {\n let locale = null;\n if (urlLocale) {\n locale = urlLocale.replaceAll(\"/\", \"\");\n ctx.setLocale(locale);\n } else {\n locale = translator.detectLocale(detectionRequest);\n ctx.setLocale(locale);\n }\n\n const translations = hasLegacyDictionaries\n ? translator.getPageTranslations(locale, httpRequest.routePath)\n : {};\n\n i18n = {\n ...i18n,\n supportedLocales: translator.supportedLocales,\n currentLocale: locale,\n dictionary: {\n [locale]: translations,\n },\n defaultLocale: translator.defaultLocale,\n };\n }\n\n // Outside the `isI18nEnabled` branch on purpose. `defineDictionary`\n // needs no `translation` config at all — that is what `docs/i18n.md`\n // presents as the whole setup — so gating the preload on it left the\n // documented minimal app taking the unwarmed path: every\n // `useDictionary` suspends, and on a streamed route each component's\n // markup lands in `<div hidden>` behind a `$RC()` reveal instead of\n // inline in the shell (#286/#289). A reader without JS would see the\n // Suspense fallback where the page text belongs.\n //\n // An empty locale means the app configured none; `preloadDictionaries`\n // then warms each dictionary under its own source language, which is\n // the key `useDictionary` will ask for. It returns immediately when\n // nothing is registered, so an app with no dictionaries pays nothing.\n await preloadDictionaries(i18n.currentLocale ?? \"\");\n\n // Handlers gate the response — they decide redirects, status codes,\n // cookies — so they are awaited. Queries do not: `Query.prefetch`\n // starts its request the moment it is called (a live store, so a\n // prefetch after a handler's first `await` is no longer silently\n // dropped), and both response shapes stream whatever is still in\n // flight — the document as interleaved payload scripts, the `.json`\n // navigation payload as NDJSON lines (#290).\n // The loader's own lookup — `Page.findUniqueOrThrow(...)` guarding the\n // route — lands here. Becoming an unmatched request is the whole\n // answer: `currentPathName` being null is what makes the framework\n // render the application's `404` view, under a 404 for a page load and\n // under `is404` in a `.json` navigation's envelope. Same three\n // assignments as the gate above; this one cannot be folded into it\n // because a loader only runs after that decision is made.\n //\n // What it does NOT do is clear `ctx.serverQueries`. A loader that\n // prefetched before it threw keeps those results in the payload — they\n // ran as this user, under this request's policies, so it is waste\n // rather than a leak, and the guard belongs at the top of the loader\n // where the issue's example puts it.\n let data: unknown[];\n try {\n data = await Promise.all(handlers.map((fn) => fn(httpRequest as any)));\n } catch (err) {\n if (!isRecordNotFoundError(err)) {\n throw err;\n }\n currentPathName = null;\n handlers = [];\n httpRequest.routePath = \"\";\n data = [];\n }\n\n const cookies = ctx.cookies;\n const headers = ctx.headers;\n\n pageData = {\n data,\n cookies,\n headers,\n user: ctx.user,\n prefetchedData: ctx.serverQueries.snapshotResolved(),\n currentPathName,\n params: httpRequest.params,\n urlLocaleSegment,\n meta: ctx.renderMeta(),\n appId: app(KernelId).id,\n // After the handlers, deliberately: middleware and handlers are what\n // populate `ctx.user`, and a flag targeted at a signed-in user has to\n // see them. Before the render, necessarily: the document payload is\n // written as `bootstrapScriptContent` at the top of the body, so a\n // flag discovered mid-render could not be added to it.\n features: await app(FeatureManager).forClient(),\n };\n\n const { params, user } = pageData;\n\n const viewData = {};\n const breadcrumbs = {};\n for (const part of data ?? []) {\n const [key, value] = Object.entries(part)?.[0] ?? [];\n if (!key || !value) {\n continue;\n }\n breadcrumbs[`${key}:${currentPathName}`] = (value as any).breadcrumb;\n viewData[key] = value;\n }\n\n const fileOutput: FileOutput | undefined = (viewData as any).FILE;\n if (fileOutput) {\n for (const cookie of cookies) {\n headers.append(\"Set-Cookie\", cookie.toString());\n }\n\n try {\n await this.onRequestEnd(httpRequest);\n } catch (err) {\n Log.error(err?.message ?? 'Error in \"onRequestEnd\" event handler', {\n err: JSON.stringify(err),\n });\n }\n\n return await createFileResponse(fileOutput, headers);\n }\n\n if (isViewDataRequest) {\n // NDJSON: envelope first — sent at handler speed — then one line\n // per query as it settles (#290). The client commits the\n // navigation off the envelope and hydrates the rest as it lands.\n headers.set(\"Content-Type\", \"application/x-ndjson; charset=utf-8\");\n // The body depends on the route the client came from, so no shared\n // cache may serve one client's partial response to another.\n headers.append(\"Vary\", PARTIAL_RENDER_HEADER);\n\n cookies.forEach((cookie) => headers.append(\"Set-Cookie\", cookie.toString()));\n\n await this.hooks.onRequestEnd(httpRequest);\n\n const envelope = {\n // Nothing that rendered touched the metadata, so the segments\n // that were skipped are still the ones that own it.\n meta: partial && !ctx.metadata.touched ? null : pageData.meta,\n data: {\n [urlPathname]: viewData,\n },\n breadcrumbs,\n // Resolved-so-far; the rest streams behind the envelope. The\n // snapshot marks its entries shipped so they aren't sent twice.\n prefetchedData: ctx.serverQueries.snapshotResolved(),\n i18n,\n // Sent on every navigation, **including a partial render**. Unlike\n // `meta`, flags are a property of the request rather than of the\n // segments that re-ran — omitting them on a partial would leave the\n // client showing the previous route's flag values.\n features: pageData.features,\n is404: !currentPathName,\n appId: pageData.appId,\n partial,\n };\n\n return new Response(\n createRoutePayloadStream(envelope, ctx.serverQueries, undefined, ({ aborted }) =>\n // No shell was marked, so the summary reports\n // `shellAt === settledAt` — the NDJSON body is one payload, not\n // a shell followed by streamed content.\n runInRequestScope(() =>\n this.completeStream(httpRequest, ctx.serverQueries.summarize(aborted)),\n ),\n ),\n {\n headers,\n },\n );\n }\n\n headers.set(\"Content-Type\", \"text/html; charset=utf-8\");\n\n // The streamed/settled decision is UA-derived (crawlers get inline\n // settled documents), so the body varies by User-Agent and a shared\n // cache must key on it — otherwise a cached browser shell full of\n // fallbacks and reveal scripts gets served to a bot. `no-stream`\n // routes serve one settled body to everyone, so they stay cacheable\n // without the (CDN-hostile) Vary.\n // A static view is one settled body for everyone, like `no-stream` —\n // unless the request became a 404, which renders as usual.\n if (!noStream && !(staticView && currentPathName)) {\n headers.append(\"Vary\", \"User-Agent\");\n }\n\n for (const cookie of cookies) {\n headers.append(\"Set-Cookie\", cookie.toString());\n }\n\n // const { csrfToken, csrfTokenHMAC } = this.generateCSRFTokenWithHmac();\n\n const csrfToken = Bun.CSRF.generate(process.env.SECRET);\n headers.append(\n \"Set-Cookie\",\n `csrf_token=${csrfToken}; HttpOnly; Secure; SameSite=Strict; Expires=${new Date(Date.now() + 1000 * 60 * 60 * 24).toUTCString()}`,\n );\n\n try {\n await this.onRequestEnd(httpRequest);\n } catch (err) {\n Log.error(err?.message ?? 'Error in \"onRequestEnd\" event handler', {\n err: JSON.stringify(err),\n });\n }\n\n return await this.render({\n req: httpRequest,\n runInRequestScope,\n csrfTokenHMAC: Buffer.from(\"\"),\n currentPathName,\n headers,\n i18n,\n params,\n pathname: url.pathname,\n serverQueries: ctx.serverQueries,\n userAgent: req.headers.get(\"user-agent\"),\n noStream,\n url,\n user,\n viewData,\n breadcrumbs,\n urlLocaleSegment,\n meta: pageData.meta,\n appId: pageData.appId,\n features: pageData.features,\n isOgRequest,\n // Not when the request became a 404 (a gate or a missing record):\n // that renders the app's `404` view, which hydrates as usual.\n staticView: currentPathName ? staticView : undefined,\n });\n } catch (err) {\n if (err.kind === GEMI_REQUEST_BREAKER_ERROR) {\n if (isViewDataRequest) {\n return viewDataBreakResponse(err.payload.viewData ?? err.payload.api);\n } else {\n return viewBreakResponse(err.payload.view);\n }\n }\n // `Query.instant` rethrows the entry's error object into this catch —\n // already reported when the rejection settled, so skip the duplicate.\n if (!reportedQueryErrors.has(err)) {\n this.hooks.onRequestFail(httpRequest, err);\n }\n // A loader or a middleware read a policied model it may not see. Left\n // to throw, it became the server's 500, whose body in production is\n // the error's stack and so the policy's message: a server error for\n // what is a refusal. The developer keeps the reason through\n // `onRequestFail` above and the log; the client gets the api's 403\n // body on a `.json` navigation and a 403 page otherwise.\n if (isPolicyDeniedError(err)) {\n console.error(err);\n return isViewDataRequest ? policyDeniedResponse() : viewBreakResponse(policyDeniedView());\n }\n // The same refusal one step removed: the loader's `Query.instant` hit\n // an api route that answered 403, a policy denial there among them.\n // The api side logged it and the query's rejection reported it, so\n // the view only passes the refusal on instead of turning it into a\n // 500.\n if (err instanceof QueryError && err.status === 403) {\n return isViewDataRequest ? policyDeniedResponse() : viewBreakResponse(policyDeniedView());\n }\n throw err;\n }\n }, carried);\n }\n}\n",
|
|
59
|
+
"import { HttpRequest } from \"../../http\";\nimport { GEMI_REQUEST_BREAKER_ERROR } from \"../../http/Error\";\nimport { type CarriedContext, ensureSessionId, RequestContext } from \"../../http/requestContext\";\nimport type { RouterMiddleware } from \"../../http/Router\";\nimport {\n createFlatViewRoutes,\n type FlatViewRoutes,\n type ViewRouteExec,\n} from \"./createFlatViewRoutes\";\nimport { viewRouteConfigDefaults, type ViewRouteConfig } from \"./config\";\nimport { resolvePartialRender } from \"./planPartialRender\";\nimport { matchViewRoute } from \"./matchViewRoute\";\nimport { PARTIAL_RENDER_HEADER, type PartialRenderInfo } from \"../../utils/partialRender\";\nimport { createElement, Fragment } from \"react\";\n\nimport { createFileResponse, type FileOutput, type ViewRoutes } from \"../../http/ViewRouter\";\nimport { createRouteManifest } from \"./createRouteManifest\";\nimport { createComponentTree } from \"./createComponentTree\";\nimport { flattenComponentTree } from \"../../client/helpers/flattenComponentTree\";\nimport type { ComponentTree } from \"../../client/types\";\nimport { Translator } from \"../../i18n/Translator\";\nimport { resolveLocale } from \"../../i18n/resolveLocale\";\nimport { preloadDictionaries } from \"../../i18n/dictionaryRegistry\";\nimport { createDictionarySink } from \"../../i18n/dictionarySink\";\nimport { MiddlewareRegistry } from \"../middleware/MiddlewareRegistry\";\nimport { Log } from \"../../facades/Log\";\nimport { Lang } from \"../../facades/Lang\";\nimport { AuthViewRouter } from \"../../auth/routes\";\nimport { KernelId } from \"../kernel-id/KernelId\";\nimport { FeatureManager } from \"../features/FeatureManager\";\nimport { app } from \"../../foundation/app\";\nimport { kernelContext } from \"../../kernel/context\";\nimport { ServerQueryStore, type StreamSummary } from \"./ServerQueryStore\";\nimport { isPolicyDeniedError, isRecordNotFoundError } from \"../../orm/errors\";\nimport { QueryError } from \"../../client/QueryError\";\nimport { policyDeniedResponse, policyDeniedView } from \"./policyDenied\";\nimport { createServerQueryFetcher } from \"./serverQueryFetcher\";\nimport { DomainRouter } from \"./DomainRouter\";\nimport { htmlSafeJson, injectQueryPayloads, isBotUserAgent } from \"./streamQueryInjection\";\nimport { createShellContentObserver, createShellContentReporter } from \"./shellContentReport\";\nimport { createRoutePayloadStream } from \"./routePayloadStream\";\nimport { loadSharp } from \"../../support/sharp\";\nimport type { StaticViewOptions } from \"../../http/ViewRouter\";\nimport { StaticRenderContext, createStaticRenderCollector } from \"../../client/islands\";\nimport { injectIslands, spliceIslandSlots, type IslandResolver } from \"./staticDocument\";\nimport { applyStaticCacheControl, staticCookiePolicy } from \"./staticCache\";\n\n/**\n * `satori`, loaded on the first OG-image request rather than on import, for the\n * same reason `sharp` is (see `support/sharp.ts`): this module is reachable\n * from `gemi/services` through `RouteServiceProvider`, so a static import put\n * satori — and, one hop on, a font parser and an SVG layout engine — in the\n * module graph of every app and test that imported the barrel to reach\n * `CronJob` (#403).\n *\n * Rendering an OG image is a cold path by definition: a crawler asks for it\n * once and a CDN serves it afterwards.\n */\nconst loadSatori = async () => (await import(\"satori\")).default;\n\n/**\n * React's server renderer, loaded on the first render rather than on import.\n *\n * **Importing `react-dom/server.browser` keeps the process alive forever.** On\n * React 19.2.3 under Bun, that one import — nothing else, no render, no server\n * — is enough that the process never exits: `getActiveResourcesInfo()` comes\n * back empty, there are no timers, no sockets and an empty kqueue, and it hangs\n * anyway. `react-dom/server.node` does not do it. Reduced from #316's third\n * item, which reports the same hang from `await import(\"gemi/kernel\")` and\n * predates the 0.51 line.\n *\n * That import sat at module scope here, and this module is reachable from\n * `gemi/kernel` through `RouteServiceProvider` — so *any* script that touched\n * the kernel inherited the hang and needed an explicit `process.exit()`. A\n * one-off migration, a seeder, a cron entry point, a CI check: all of them\n * loaded the SSR renderer to get a `Kernel` they were going to use for\n * something else entirely.\n *\n * Deferring it costs one already-resolved dynamic import on the first document\n * render and nothing after — `react-dom` is external in the framework build, so\n * this stays a runtime resolve out of the app's own `node_modules` exactly as\n * the static import was. A server renders, so it pays this once at first\n * request; a script that never renders no longer pays it at all, which is the\n * whole point.\n *\n * Wrapped rather than awaited at each call site so the three of them read\n * unchanged.\n *\n * The slot is cleared on failure so a rejection is not what gets memoised. A\n * missing `react-dom` is fatal either way — this is about the diagnostic, not\n * about recovery: caching the rejected promise would make every later render\n * report whatever the loader threw the first time, with no stack from the call\n * that actually failed.\n */\nlet serverRenderer:\n | Promise<{ renderToReadableStream: (...args: any[]) => Promise<any> }>\n | undefined;\n\nconst renderToReadableStream = async (...args: any[]): Promise<any> => {\n // @ts-ignore\n serverRenderer ??= import(\"react-dom/server.browser\").catch((error) => {\n serverRenderer = undefined;\n throw error;\n });\n return (await serverRenderer).renderToReadableStream(...args);\n};\n\n/**\n * How long a document response may keep streaming before pending segments are\n * cut over to client rendering. One hung query must not hold the connection\n * open forever; the browser resolves whatever was aborted over `/api`.\n */\nconst STREAM_DEADLINE_MS = 10_000;\n\nconst themeScript = `\n!function(){try{var d=document.documentElement,c=d.classList;\nc.remove('light','dark');\nvar e=localStorage.getItem('theme');\nif('system'===e||(!e&&'system'===defaultTheme)){\n var t='(prefers-color-scheme: dark)',m=window.matchMedia(t);\n if(m.media!==t||m.matches){d.style.colorScheme='dark';c.add('dark')}\n else{d.style.colorScheme='light';c.add('light')}\n}else if(e){\n c.add(e||'')\n}}catch(e){}}()\n`;\n\nasync function getTtfFont(\n family: string,\n weight: number,\n style: \"normal\" | \"italic\",\n): Promise<ArrayBuffer> {\n const familyParam = `${style === \"italic\" ? \"italic,\" : \"\"}wght@${style === \"italic\" ? \"1,\" : \"\"}${weight}`;\n\n // Get css style sheet with user agent Mozilla/5.0 Firefox/1.0 to ensure non-variable TTF is returned\n const cssCall = await fetch(\n `https://fonts.googleapis.com/css2?family=${family}:${familyParam}&display=swap`,\n {\n headers: {\n \"User-Agent\": \"Mozilla/5.0 Firefox/1.0\",\n },\n },\n );\n\n const css = await cssCall.text();\n const ttfUrl = css.match(/url\\(([^)]+)\\)/)?.[1];\n\n return await fetch(ttfUrl).then((res) => res.arrayBuffer());\n}\n\n/**\n * `/assets` is where the client build output is served from, ahead of the\n * router — a route mounted there could never be reached in production, and in\n * dev it would appear to work. Fail at boot instead of shipping that.\n */\nexport const RESERVED_ROUTE_PREFIX = \"/assets\";\n\n/**\n * `/assets` or anything under it. The boot-time route check and the production\n * static handler both ask this, so a route the router accepts is never one the\n * static handler answers from `dist/client` instead.\n */\nexport function isReservedAssetPath(path: string): boolean {\n return path === RESERVED_ROUTE_PREFIX || path.startsWith(`${RESERVED_ROUTE_PREFIX}/`);\n}\n\nexport function assertNoReservedRoutePaths(routePaths: string[]) {\n const reserved = routePaths.filter(isReservedAssetPath);\n\n if (reserved.length > 0) {\n const many = reserved.length > 1;\n throw new Error(\n `View route path${many ? \"s\" : \"\"} ${reserved.map((path) => `\"${path}\"`).join(\", \")} ` +\n `use${many ? \"\" : \"s\"} the reserved \"${RESERVED_ROUTE_PREFIX}\" prefix. ` +\n `The client build output is served from there before the router runs, so the route would never match. ` +\n `Mount it somewhere else.`,\n );\n }\n}\n\n/** A request breaker's `payload.view` as the page response it stands for. */\n/** What a page learns of its host group — `useDomain()` reads it. */\nfunction clientDomain(req: HttpRequest) {\n const resolver = app(DomainRouter).resolver!;\n return {\n ...req.domain!,\n root: resolver.root,\n origin: resolver.publicOrigin(req.rawRequest),\n };\n}\n\nexport function viewBreakResponse(view: Record<string, any>) {\n const { status = 400, error } = view;\n return new Response(error?.message, {\n ...view,\n status,\n });\n}\n\n/**\n * The same break for a `.json` navigation, from its `payload.api`: the client\n * router reads `data` and `directive` out of the body.\n */\nexport function viewDataBreakResponse(api: Record<string, any>) {\n const { status = 400, data, directive, headers } = api;\n return new Response(JSON.stringify({ data, directive }), {\n headers,\n status,\n });\n}\n\nexport class ViewRouteDispatcher {\n static token = \"router.view\";\n\n flatViewRoutes: FlatViewRoutes = {};\n routeManifest: Record<string, string[]> = {};\n /** `routeManifest` without file routes — they have no component to render client side. */\n clientRouteManifest: Record<string, string[]> = {};\n componentTree: ComponentTree = [];\n flatComponentTree: string[] = [];\n /**\n * Route patterns declared `.static()`. Shipped to the browser so a\n * client-side navigation to one becomes a full page load: the page has no\n * client router to render it into.\n */\n staticRoutes: string[] = [];\n root: any = null;\n /**\n * The shell-content hint (#294): React defers any boundary over\n * `progressiveChunkSize` on size alone, so a page that reads fine without\n * JS can go blank the day one more section pushes it over the budget — and\n * nothing else notices the transition (#289 was found by hand-measuring).\n * The reporter owns the once-per-route-per-boot dedup so a hot route\n * doesn't spam the dev console.\n */\n private shellReporter = createShellContentReporter();\n\n /**\n * `modulepreload` elements per route, built once instead of per request —\n * everything they derive from (the built chunk graph, the client entry) is\n * fixed at boot, and React elements are immutable, so one set is reusable\n * across every render of that route.\n *\n * Keyed on the manifest object rather than a plain field so a process that\n * ever renders against two of them — a test suite, most obviously — can\n * never serve one route's chunks out of the other's cache.\n */\n private preloadCache = new WeakMap<\n object,\n { clientEntry: unknown; byRoute: Map<string, any[]> }\n >();\n\n private readonly hooks: Required<\n Pick<\n ViewRouteConfig,\n \"onRequestStart\" | \"onRequestEnd\" | \"onRequestFail\" | \"onStreamComplete\"\n >\n >;\n\n /** See `ViewRouteConfig.partialRendering`. */\n readonly partialRendering: boolean;\n\n constructor(config: ViewRouteConfig) {\n const defaults = viewRouteConfigDefaults();\n\n this.partialRendering = config.partialRendering ?? defaults.partialRendering;\n\n this.hooks = {\n onRequestStart: config.onRequestStart ?? defaults.onRequestStart,\n onRequestEnd: config.onRequestEnd ?? defaults.onRequestEnd,\n onRequestFail: config.onRequestFail ?? defaults.onRequestFail,\n onStreamComplete: config.onStreamComplete ?? defaults.onStreamComplete,\n };\n\n const routes: ViewRoutes = {\n \"/\": config.rootRouter,\n \"/auth\": AuthViewRouter,\n };\n this.flatViewRoutes = createFlatViewRoutes(routes);\n assertNoReservedRoutePaths(Object.keys(this.flatViewRoutes));\n this.routeManifest = createRouteManifest(routes);\n this.clientRouteManifest = Object.fromEntries(\n Object.entries(this.routeManifest).filter(([, views]) => views.at(-1) !== \"FILE\"),\n );\n this.componentTree = createComponentTree(routes);\n this.flatComponentTree = flattenComponentTree(this.componentTree);\n this.staticRoutes = Object.entries(this.flatViewRoutes)\n .filter(([, route]) => route.static)\n .map(([path]) => path);\n // A static view's own document layout is a view module like any other —\n // the servers load every name in this list up front — but it is in no\n // route's chain, so it would not be here otherwise.\n for (const path of this.staticRoutes) {\n const layout = this.flatViewRoutes[path].static?.layout;\n if (layout && !this.flatComponentTree.includes(layout)) {\n this.flatComponentTree.push(layout);\n }\n }\n this.root = config.root;\n }\n\n /**\n * Whether every flag gating a route is on for this request.\n *\n * All must pass. Gates accumulate down the tree — a router's, then a layout's,\n * then the route's — and the intersection is the only reading that composes:\n * a route inside a gated section cannot be more reachable than the section.\n */\n private async passesFeatureGates(keys: string[]): Promise<boolean> {\n const features = app(FeatureManager);\n for (const key of keys) {\n if (!(await features.enabled(key))) return false;\n }\n return true;\n }\n\n async onRequestEnd(req: HttpRequest, options: { mintSession?: boolean } = {}) {\n // Idempotent, and normally a no-op by the time it gets here: the request\n // already minted the id up front so that everything which ran in between\n // saw it. Kept as a backstop for any path that reaches the end without\n // having asked. A static view skips it unless it asked (`.static({ session })`).\n if (options.mintSession !== false) {\n ensureSessionId();\n }\n\n return await this.hooks.onRequestEnd(req);\n }\n\n /**\n * Fires the provider's `onStreamComplete` from a stream callback — an\n * observability hook must never break the response body it observes, so\n * sync throws and rejections are logged and swallowed.\n *\n * Call sites must invoke this inside the request scope (see\n * `runInRequestScope` in `handleViewRequest`): stream callbacks are driven\n * by the HTTP server after the handler returned, outside the kernel\n * AsyncLocalStorage — where both the user's hook and this very `Log.error`\n * guard would break.\n */\n private completeStream(req: HttpRequest, summary: StreamSummary) {\n const logError = (err: any) => {\n Log.error(err?.message ?? 'Error in \"onStreamComplete\" event handler', {\n err: JSON.stringify(err),\n });\n };\n try {\n Promise.resolve(this.hooks.onStreamComplete(req, summary)).catch(logError);\n } catch (err) {\n logError(err);\n }\n }\n\n /** See `preloadCache`. */\n private modulePreloadLinks(args: {\n clientEntry?: { module: string; preload: string[] };\n modulePreloadManifest?: Record<string, string[]>;\n views: string[];\n routeKey: string;\n }) {\n const { clientEntry, modulePreloadManifest, views, routeKey } = args;\n\n const build = () => {\n const hrefs = new Set<string>(clientEntry?.preload ?? []);\n for (const view of views) {\n for (const href of modulePreloadManifest?.[view] ?? []) {\n hrefs.add(href);\n }\n }\n return [...hrefs].map((href) =>\n createElement(\"link\", {\n key: `modulepreload:${href}`,\n rel: \"modulepreload\",\n href,\n }),\n );\n };\n\n // Dev: no chunk graph to announce, so there is nothing worth caching.\n if (!modulePreloadManifest) {\n return build();\n }\n\n let cached = this.preloadCache.get(modulePreloadManifest);\n if (!cached || cached.clientEntry !== clientEntry) {\n cached = { clientEntry, byRoute: new Map() };\n this.preloadCache.set(modulePreloadManifest, cached);\n }\n let links = cached.byRoute.get(routeKey);\n if (!links) {\n links = build();\n cached.byRoute.set(routeKey, links);\n }\n return links;\n }\n\n /**\n * A `.static()` view's document: the same tree a hydrated view renders, but\n * settled before the first byte and sent with no client runtime — no entry\n * module, `modulepreload`s, `__GEMI_DATA__`, theme script, query or\n * dictionary payloads, or React's streaming scripts. Islands that rendered\n * add their loader (`injectIslands`).\n */\n private async renderStatic(args: {\n req: HttpRequest;\n runInRequestScope: <T>(fn: () => T) => T;\n staticView: StaticViewOptions;\n currentViews: string[];\n data: any;\n serverQueries: ServerQueryStore;\n headers: Headers;\n getStyles: (p: string[], options?: { static?: boolean; layout?: string }) => Promise<any[]>;\n viewImportMap: Record<string, any>;\n viewModules?: Record<string, any>;\n resolveIsland?: IslandResolver;\n }) {\n const { req, runInRequestScope, staticView, currentViews, data, serverQueries, headers } =\n args;\n\n let rootLayout: unknown;\n if (staticView.layout) {\n rootLayout = args.viewImportMap[staticView.layout];\n if (!rootLayout) {\n throw new Error(\n `The static layout \"${staticView.layout}\" was not found. It is a view path: a file at app/views/${staticView.layout}.tsx whose default export renders the document.`,\n );\n }\n }\n\n const styles = await args.getStyles(currentViews, { static: true, layout: staticView.layout });\n\n serverQueries.markRenderStart();\n const dictionarySink = createDictionarySink();\n const deadline = new AbortController();\n const deadlineTimer = setTimeout(() => deadline.abort(), STREAM_DEADLINE_MS);\n const onError = (error: unknown) => {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(error);\n }\n };\n // Each island is its own React root in the browser, so it is rendered as\n // one here too: the HTML `hydrateRoot` sees is exactly what this produced,\n // `useId` included (hence the prefix), and nothing from the page's context\n // leaks in on the server that the browser would not have.\n const collector = createStaticRenderCollector(async (element, identifierPrefix) => {\n const stream = await renderToReadableStream(element, {\n signal: deadline.signal,\n identifierPrefix,\n progressiveChunkSize: Number.MAX_SAFE_INTEGER,\n onError,\n });\n await stream.allReady.catch(() => {});\n return await new Response(stream).text();\n });\n\n try {\n const stream = await renderToReadableStream(\n createElement(StaticRenderContext.Provider, {\n value: collector,\n children: createElement(Fragment, {\n children: [\n ...styles,\n createElement(this.root, {\n data,\n viewImportMap: args.viewImportMap,\n viewModules: args.viewModules,\n serverQueries,\n dictionarySink,\n rootLayout,\n key: \"root\",\n }),\n ],\n }),\n }),\n {\n signal: deadline.signal,\n // With `allReady` awaited below, this keeps every boundary inline\n // rather than split out behind a reveal script (see `settled`).\n progressiveChunkSize: Number.MAX_SAFE_INTEGER,\n onError,\n },\n );\n await stream.allReady.catch(() => {});\n const html = spliceIslandSlots(await new Response(stream).text());\n\n return new Response(\n injectIslands(html, collector, args.resolveIsland, process.env.NODE_ENV !== \"production\"),\n { status: 200, headers },\n );\n } finally {\n clearTimeout(deadlineTimer);\n runInRequestScope(() =>\n this.completeStream(req, serverQueries.summarize(deadline.signal.aborted)),\n );\n }\n }\n\n private async render(props: {\n req: HttpRequest;\n /**\n * Re-enters the kernel + request AsyncLocalStorage scopes captured while\n * the request was live. Every stream lifecycle callback below runs after\n * the handler returned — driven by the HTTP server, outside both scopes —\n * so user hooks are always invoked through this.\n */\n runInRequestScope: <T>(fn: () => T) => T;\n viewData: any;\n pathname: string;\n currentPathName: string;\n csrfTokenHMAC: Buffer;\n headers: any;\n url: URL;\n i18n: any;\n user: any;\n serverQueries: ServerQueryStore;\n userAgent: string | null;\n noStream: boolean;\n params: any;\n breadcrumbs: any;\n urlLocaleSegment?: string;\n meta: any;\n isOgRequest?: boolean;\n appId: string;\n features: Record<string, boolean>;\n /** The matched route's `.static()` options; absent for a hydrated view. */\n staticView?: StaticViewOptions;\n }) {\n const {\n req,\n runInRequestScope,\n csrfTokenHMAC,\n currentPathName,\n headers,\n i18n,\n params,\n pathname,\n serverQueries,\n userAgent,\n noStream,\n url,\n user,\n viewData,\n breadcrumbs,\n urlLocaleSegment,\n meta,\n isOgRequest,\n appId,\n features,\n staticView,\n } = props;\n\n const pageDataKey = pathname.replace(`/${urlLocaleSegment}`, \"\");\n\n const result = {\n kind: \"view\",\n data: {\n meta,\n pageData: {\n [pageDataKey]: viewData,\n },\n __csrf: csrfTokenHMAC.toString(\"base64\"),\n // Placeholder — re-snapshotted at render time (below) so everything\n // that resolved while styles and modules loaded still makes the\n // document payload instead of streaming.\n prefetchedData: {} as Record<string, Record<string, any>>,\n i18n,\n auth: { user },\n routeManifest: this.clientRouteManifest,\n breadcrumbs,\n router: {\n urlLocaleSegment,\n pathname: currentPathName,\n params,\n currentPath: pathname,\n searchParams: url.search,\n is404: !currentPathName ? true : false,\n // Only on the document: a client-side navigation never changes host.\n domain: req.domain ? clientDomain(req) : null,\n },\n appId,\n // Evaluated key -> value only. Rules, conditions, segment criteria and\n // the bucketing seed stay on the server: with the seed and a subject id\n // anyone could compute another user's bucket for every flag, including\n // unreleased ones.\n features,\n componentTree: [[\"404\", []], ...this.componentTree],\n // Only when there are any, so an app without static views ships the\n // payload it always did.\n ...(this.staticRoutes.length > 0 ? { staticRoutes: this.staticRoutes } : {}),\n },\n head: {},\n };\n\n const Root = this.root;\n const currentViews = this.routeManifest[currentPathName];\n return async (params: {\n /**\n * `static` is set for a static view, which has no client to load CSS\n * later: the styles must cover the views' whole import graph. `layout`\n * is its own document layout, whose CSS then replaces the app's\n * stylesheet.\n */\n getStyles: (p: string[], options?: { static?: boolean; layout?: string }) => Promise<any[]>;\n viewImportMap: any;\n bootstrapModules?: string[];\n loaders: string;\n cssManifest: Record<string, string[]>;\n ogMap: Record<string, any>;\n /**\n * Full view modules (not just default exports) so `Route` can render a\n * view's `Loading`/`Error` exports on the server — a streamed shell\n * carries real fallbacks, and they must match what the client hydrates.\n */\n viewModules?: Record<string, any>;\n /**\n * The client entry, when the server wants it booted from the bootstrap\n * script instead of handed to React as a `bootstrapModule`: `module` is\n * imported, `preload` is every chunk that import pulls in.\n *\n * React preloads its own `bootstrapModules` with `fetchPriority=\"low\"`\n * hardcoded (Fizz has no option for it), which parks the one module\n * that unblocks hydration behind everything else the page is fetching.\n * Emitting the `modulepreload` ourselves gets it the browser's default\n * script priority, and it is the same request either way — the\n * `import()` below consumes the preloaded module (#352).\n */\n clientEntry?: { module: string; preload: string[] };\n /**\n * Built chunk URLs per view name, like `cssManifest`. Only the current\n * route's chain is preloaded.\n */\n modulePreloadManifest?: Record<string, string[]>;\n /**\n * The prefix the client build was built with. `cssManifest` carries\n * manifest paths, not URLs — they double as the `id` of the `<style>`\n * each one is inlined into — so the client needs the base to fetch one.\n */\n assetBase?: string;\n /** Where island client modules are served from; see `injectIslands`. */\n resolveIsland?: IslandResolver;\n }) => {\n const {\n bootstrapModules = [],\n loaders,\n getStyles,\n viewImportMap,\n cssManifest,\n ogMap,\n viewModules,\n clientEntry,\n modulePreloadManifest,\n assetBase,\n resolveIsland,\n } = params;\n\n // `clientEntry` and `bootstrapModules` are two spellings of the same job,\n // and running both would boot the entry twice — once through React's\n // `<script type=\"module\">`, once through the `import()` below. The entry\n // wins where it is offered, so React is handed nothing and never emits\n // the `fetchPriority=\"low\"` preload that made it worth taking over.\n const reactBootstrapModules = clientEntry ? [] : bootstrapModules;\n\n const bootstrapScriptContent = (data: string) =>\n [\n data,\n `window.loaders=${loaders}`,\n // Nothing imports the entry when the server routed it through\n // `clientEntry` — the bootstrap script is where it starts. The\n // `.catch` re-throws out of the microtask because a bare `import()`\n // here would report a chunk that 404s after a deploy, or an entry\n // that throws while evaluating, as an `unhandledrejection` only —\n // which `window.onerror`-based reporters do not see. The page would\n // then sit permanently unhydrated with nothing raised.\n ...(clientEntry\n ? [\n `import(${JSON.stringify(clientEntry.module)}).catch(function(e){setTimeout(function(){throw e})})`,\n ]\n : []),\n ].join(\";\");\n\n if (isOgRequest) {\n let ogHandler = null;\n let ogComponent = null;\n // `currentViews` is `undefined` on an unmatched route. Without the\n // guard `GET /nope.og` throws here and `httpProd` answers with the raw\n // stack trace, where the 404 below is what a crawler should get.\n for (const view of currentViews ?? []) {\n if (typeof ogMap[view] === \"function\") {\n ogComponent = view;\n ogHandler = ogMap[view];\n }\n }\n if (!ogHandler) {\n return new Response(\"Not found\", { status: 404 });\n }\n const data = Object.values(result.data.pageData)[0];\n\n try {\n await renderToReadableStream(createElement(ogHandler, data[ogComponent]), {\n onError: () => {},\n });\n } catch (err) {\n const { fonts, ...options } = err.satoriOptions;\n const _fonts = await Promise.all(\n fonts.map((font) => {\n return getTtfFont(font.name, font.weight, font.style).then((data) => ({\n ...font,\n data,\n }));\n }),\n );\n\n const ogHeaders = new Headers(headers);\n ogHeaders.set(\"Content-Type\", \"image/png\");\n const [satori, sharp] = await Promise.all([\n loadSatori(),\n loadSharp(\"Rendering an OG image\"),\n ]);\n const svg = await satori(err.jsx, { ...options, fonts: _fonts });\n const png = await sharp(Buffer.from(svg))\n .png({\n compressionLevel: 0,\n effort: 10,\n })\n .toBuffer();\n\n return new Response(new Uint8Array(png), { headers: ogHeaders });\n }\n\n return new Response(\"data\");\n }\n\n if (staticView && currentPathName) {\n return await this.renderStatic({\n req,\n runInRequestScope,\n staticView,\n currentViews,\n data: result.data,\n serverQueries,\n headers,\n getStyles,\n viewImportMap,\n viewModules,\n resolveIsland,\n });\n }\n\n result.data[\"cssManifest\"] = cssManifest;\n // Client-side navigation reaches a route's chunks the same serial way a\n // hard load did, one `import()` per level, so it needs the same list the\n // shell head carries — shipped like `cssManifest` and warmed by\n // `preloadRouteModules` (#352).\n result.data[\"modulePreloadManifest\"] = modulePreloadManifest ?? {};\n // Only when there is one: the client's default is the root-relative `/`,\n // and a payload without the key is the one every app shipped before it.\n if (assetBase && assetBase !== \"/\") {\n result.data[\"assetBase\"] = assetBase;\n }\n\n // Hydration reaches each route segment through `window.loaders`, i.e. an\n // `import()` the browser cannot see until the entry has run — and it\n // sees a nested chunk only once its parent has parsed. On a real\n // network that serial chain shows every boundary's `Loading` fallback\n // where server-rendered content already is, collapsing the page height\n // and restoring it a round trip later (#352). Preloaded in the shell\n // head, the whole chain is fetched in parallel with the entry and is\n // resident before hydration asks for it.\n //\n // An unmatched route leaves `currentViews` undefined but still renders a\n // document — the `404` view, the one route class most likely to be hit\n // cold — so it preloads that view's chain, mirroring the `[\"404\"]` the\n // client mounts.\n const preloadLinks = this.modulePreloadLinks({\n clientEntry,\n modulePreloadManifest,\n views: currentViews ?? [\"404\"],\n routeKey: currentPathName ?? \"404\",\n });\n\n const styles = await getStyles(currentViews);\n\n // Everything resolved by now ships in the document payload; everything\n // still in flight streams in behind it. The snapshot marks its entries\n // as shipped so the injector doesn't send them twice.\n result.data.prefetchedData = serverQueries.snapshotResolved();\n serverQueries.markRenderStart();\n\n const deadline = new AbortController();\n const deadlineTimer = setTimeout(() => deadline.abort(), STREAM_DEADLINE_MS);\n\n // Decided before the render call because it changes *render-time*\n // behavior: React splits any boundary bigger than\n // `progressiveChunkSize` (~12.8KB) out of the shell as it renders, and\n // awaiting `allReady` afterwards settles the data but cannot undo the\n // split — a non-JS reader would see a body whose content is parked in\n // `<div hidden>` + `$RC()` reveal scripts (#286, #289). Two audiences\n // need the settled document: crawlers (detected by UA — progressive\n // chunking only exists to reach a browser sooner, which is worthless to\n // a client that buffers the whole response) and routes that declared\n // `\"no-stream\"` (marketing/content pages that must render for\n // JS-disabled humans, text browsers, and failed-script loads too).\n const settled = isBotUserAgent(userAgent) || noStream;\n\n // Dev-only: collect the streamed bytes so the close hook can measure\n // what a no-JS reader gets (#294). A settled document carries its\n // content inline by construction — nothing to measure — and a route\n // already hinted this boot skips the collection entirely.\n const shellObserver =\n process.env.NODE_ENV !== \"production\" &&\n !settled &&\n currentPathName &&\n this.shellReporter.shouldObserve(currentPathName)\n ? createShellContentObserver()\n : null;\n\n // Which dictionaries a page reads is only knowable once it has rendered,\n // so they cannot ride the `__GEMI_DATA__` snapshot (serialized below,\n // before the render starts). The sink collects them during the render and\n // the injector streams each one into the document.\n const dictionarySink = createDictionarySink();\n\n try {\n const stream = await renderToReadableStream(\n createElement(Fragment, {\n children: [\n // React hoists these into `<head>`, ahead of the inlined\n // stylesheets, so the browser starts the fetches on the shell's\n // first bytes.\n ...preloadLinks,\n ...styles,\n createElement(\"script\", {\n key: \"theme-script\",\n dangerouslySetInnerHTML: {\n __html: themeScript,\n },\n }),\n createElement(Root, {\n data: result.data,\n viewImportMap,\n viewModules,\n serverQueries,\n dictionarySink,\n key: \"root\",\n }),\n ],\n }),\n {\n bootstrapScriptContent: bootstrapScriptContent(\n `window.__GEMI_DATA__ = ${htmlSafeJson(result.data)}`,\n ),\n bootstrapModules: reactBootstrapModules,\n signal: deadline.signal,\n ...(settled ? { progressiveChunkSize: Number.MAX_SAFE_INTEGER } : {}),\n // A query rejecting inside a streamed segment is expected: React\n // client-renders that boundary and the browser surfaces the error\n // through its own fetch. Log it and move on.\n onError(error: unknown) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(error);\n }\n },\n },\n );\n\n stream.allReady\n .catch(() => {})\n .finally(() => clearTimeout(deadlineTimer));\n\n // A settled response waits for everything before the first byte.\n // Works only together with the `progressiveChunkSize` override\n // above: this waits for the data, that keeps the content inline\n // instead of script-revealed.\n if (settled) {\n await stream.allReady.catch(() => {});\n }\n\n return new Response(\n injectQueryPayloads(stream, serverQueries, {\n // A settled body has no shell-then-stream phase — its first byte\n // already carries everything — so only progressive responses mark\n // one; the summary then reports `shellAt === settledAt` for the\n // settled ones.\n onShell: settled ? undefined : () => serverQueries.markShell(),\n onChunk: shellObserver?.onChunk,\n // The APM-visible end of the request: the body closed, not the\n // handler returned (that was at time-to-shell).\n onClose: () =>\n runInRequestScope(() => {\n this.completeStream(req, serverQueries.summarize(deadline.signal.aborted));\n if (shellObserver) {\n // The injector's `onChunk` collected the exact bytes the\n // visitor got; measured once the body closed (#294).\n this.shellReporter.report(currentPathName, shellObserver.measure());\n }\n }),\n },\n dictionarySink),\n {\n status: !currentPathName ? 404 : 200,\n headers,\n },\n );\n } catch (err) {\n clearTimeout(deadlineTimer);\n // The document below writes the message and stack into the page for\n // the dev overlay. In production they would reach whoever loaded the\n // page (#523), so the error goes on to the server's last-resort\n // handler instead, which answers a generic 500 and reports it. No\n // body will close to end the span, so it ends here.\n if (process.env.NODE_ENV === \"production\") {\n runInRequestScope(() =>\n this.completeStream(req, serverQueries.summarize(deadline.signal.aborted)),\n );\n throw err;\n }\n const stream = await renderToReadableStream(createElement(\"div\"), {\n bootstrapScriptContent: bootstrapScriptContent(\n `window.error= ${htmlSafeJson(err.message)}; window.stack_trace=${htmlSafeJson(err.stack)};window.__GEMI_DATA__ = ${htmlSafeJson(result.data)}`,\n ),\n bootstrapModules:\n process.env.NODE_ENV === \"development\"\n ? [\"/render-error.js\", ...reactBootstrapModules]\n : reactBootstrapModules,\n });\n // The failed-render body still closes, and the span-ending hook is\n // pinned to the body closing, not the render succeeding — a span that\n // only ends on happy paths leaks for exactly the requests worth\n // seeing. No shell mark: this body is one settled error document.\n return new Response(\n injectQueryPayloads(stream, serverQueries, {\n onClose: () =>\n runInRequestScope(() =>\n this.completeStream(req, serverQueries.summarize(deadline.signal.aborted)),\n ),\n }),\n {\n status: !currentPathName ? 404 : 200,\n headers,\n },\n );\n }\n };\n }\n\n async handleViewRequest(req: Request, carried?: CarriedContext | null) {\n const url = new URL(req.url);\n const isViewDataRequest = url.pathname.endsWith(\".json\");\n const isOgRequest = url.pathname.endsWith(\".og\");\n const urlPathnameWithLocale = url.pathname.replace(\".json\", \"\").replace(\".og\", \"\");\n\n const [, maybeLocale, ...rest] = urlPathnameWithLocale.split(\"/\");\n let urlPathname = `/${rest.join(\"/\")}`;\n let urlLocaleSegment = null;\n let urlLocale: string | null = null;\n\n const translator = app(Translator);\n\n const isPathnameWithLocale =\n !translator.supportedLocales.includes(maybeLocale);\n\n if (isPathnameWithLocale) {\n urlPathname = urlPathnameWithLocale;\n } else {\n urlLocaleSegment = maybeLocale;\n urlLocale = maybeLocale;\n }\n\n // A first path segment is not necessarily a locale, and the shapes overlap:\n // `de-luxe` is a language `de` with a legal 4-letter subtag, `en-suite` the\n // same for `en`. No tightening of the tag pattern separates them, so route\n // existence is the signal — a path the app actually serves is served, and\n // only one it does not is read as a locale that needs redirecting. Without\n // this, `/de-luxe` answered `302 /de-DE` and the page was gone.\n const pathIsARoute =\n urlLocale === null && matchViewRoute(this.flatViewRoutes, urlPathname) !== null;\n\n if (translator.isLocaleAware && !isOgRequest && urlLocale === null && !pathIsARoute) {\n // A locale prefix the app doesn't serve verbatim but can map onto one it\n // does — `/en/about` → `/en-US/about`, `/de-AT/about` → `/de-DE/about` —\n // is sent to that locale's URL rather than rendered as an unknown path.\n const resolvedLocale = resolveLocale(\n maybeLocale,\n translator.supportedLocales,\n translator.defaultLocale,\n );\n if (resolvedLocale) {\n // `rest` is the path after the locale segment; `.json` is re-appended\n // so a route-data request lands on the data it asked for.\n const restPath = rest.length ? `/${rest.join(\"/\")}` : \"\";\n return new Response(\"\", {\n status: 302,\n headers: {\n \"Cache-Control\": \"private, no-cache, no-store, max-age=0, must-revalidate\",\n Location: `/${resolvedLocale}${restPath}${isViewDataRequest ? \".json\" : \"\"}${url.search}`,\n },\n });\n }\n }\n\n if (translator.isLocaleAware && !isOgRequest) {\n const locale = app(Translator).detectLocale(\n new HttpRequest(req, {}, \"view\", urlPathname),\n );\n\n if (urlLocale === null && locale !== translator.defaultLocale) {\n const _pathname = url.pathname === \"/\" ? \"\" : url.pathname;\n return new Response(\"\", {\n status: 302,\n headers: {\n \"Cache-Control\": \"private, no-cache, no-store, max-age=0, must-revalidate\",\n Location: `/${locale}${_pathname}${url.search}`,\n },\n });\n }\n }\n\n urlPathname = urlPathname.replace(\"//\", \"/\");\n let handlers: ViewRouteExec[] = [];\n let middlewares: (RouterMiddleware | string)[] = [];\n let currentPathName: null | string = null;\n let params: Record<string, any> = {};\n let partial: PartialRenderInfo | null = null;\n // `\"no-stream\"` in a route's (or its router's) middleware list opts the\n // route out of progressive streaming: everyone gets the fully settled\n // document a bot UA would (#289). It is a directive read here, not real\n // middleware — the middleware runner ignores unknown aliases.\n let noStream = false;\n // Flags gating the matched route, checked once the request scope is open\n // and middleware has run.\n let featureGates: string[] = [];\n // The matched route's `.static()` options, if it has any.\n let staticView: StaticViewOptions | undefined;\n\n try {\n const match = matchViewRoute(this.flatViewRoutes, urlPathname);\n if (match) {\n currentPathName = match.routePath;\n params = match.params;\n handlers = match.route.exec;\n middlewares = match.route.middleware;\n featureGates = match.route.features;\n noStream = middlewares.includes(\"no-stream\");\n staticView = match.route.static;\n\n // Only navigations skip work. A document request renders the whole\n // tree, and the client has nothing to carry forward yet.\n if (isViewDataRequest && this.partialRendering) {\n const from = req.headers.get(PARTIAL_RENDER_HEADER);\n const plan = resolvePartialRender({\n flatViewRoutes: this.flatViewRoutes,\n supportedLocales: app(Translator).supportedLocales,\n from,\n origin: url.origin,\n to: { segments: match.route.segments, params, search: url.search },\n });\n\n if (plan.startIndex > 0) {\n handlers = handlers.slice(plan.startIndex);\n partial = { from, carriedViews: plan.carriedViews };\n }\n }\n }\n } catch (err) {\n // TODO: Handle this\n throw err;\n }\n\n // A static view's handler output reaches the browser only as the markup\n // it renders, and an app may rely on that (return a whole record, render\n // part of it). The `.json` payload would hand over all of it, and nothing\n // asks for one: the client router loads static routes as documents.\n if (staticView && isViewDataRequest) {\n return new Response(\"Not found\", { status: 404 });\n }\n\n const httpRequest = new HttpRequest(req, params, \"view\", currentPathName);\n this.hooks.onRequestStart(httpRequest);\n return await RequestContext.run(httpRequest, async () => {\n let pageData: {\n cookies: Set<string>;\n headers: Headers;\n currentPathName: string | null;\n data: Record<string, any>;\n prefetchedData: Record<string, any>;\n user: any; // TODO: fix type\n params: Record<string, any>;\n urlLocaleSegment: string | null;\n meta: any;\n appId: string;\n features: Record<string, boolean>;\n } | null = null;\n const ctx = RequestContext.getStore();\n // The HTTP server drives the response body — and therefore every stream\n // lifecycle callback — after `app.fetch` returned, outside the kernel\n // AsyncLocalStorage scope and outside this request's context (the same\n // phenomenon `createServerQueryFetcher` documents for render-discovered\n // fetches). Facades and `req.ctx()` inside `onStreamComplete` /\n // `onRequestFail` would break there, so capture both scopes while they\n // are live and re-enter them around every hook invocation below.\n const kernelStore = kernelContext.getStore();\n const runInRequestScope = <T>(fn: () => T): T =>\n kernelContext.run(kernelStore, () => RequestContext.runWith(ctx, fn));\n // Before middleware and handlers, so every `Query.prefetch` along the\n // way lands in one live, request-scoped store.\n ctx.serverQueries = new ServerQueryStore(createServerQueryFetcher(req));\n // A query rejecting during the streamed render (or a fire-and-forget\n // prefetch) never throws the handler, so the catch below can't see it —\n // error tracking wired to `onRequestFail` would miss server-side work\n // that failed. Route rejections through the hook here. The identity set\n // keeps `Query.instant` rethrows — which DO reach the catch — from\n // reporting the same error twice.\n const reportedQueryErrors = new Set<any>();\n ctx.serverQueries.onQueryFail((entry) => {\n reportedQueryErrors.add(entry.error);\n try {\n // In scope, and with the rejection handler attached *inside* the\n // scope, so a facade-using hook works for render-phase failures\n // exactly as it does for handler-phase ones.\n runInRequestScope(() =>\n Promise.resolve(this.hooks.onRequestFail(httpRequest, entry.error)).catch(\n () => {},\n ),\n );\n } catch {\n // An error-reporting hook must not break the settle chain it\n // observes — a suspended segment is waiting on it.\n }\n });\n\n // A static view is one body for every visitor, so it sets no cookie of\n // its own — no `i18n-locale`, `session_id` or `csrf_token` — unless it\n // asked for one. A per-visitor `Set-Cookie` is what keeps a CDN from\n // caching a page. The handler and middleware still set what they set.\n const staticCookies = staticCookiePolicy(staticView);\n\n if (urlLocale) {\n const locale = urlLocale.replaceAll(\"/\", \"\");\n Lang.setLocale(locale, { cookie: staticCookies.locale });\n } else {\n Lang.setLocale(undefined, { cookie: staticCookies.locale });\n }\n\n const httpRequest = ctx.req;\n\n // Before middleware, so that everything downstream — middleware, handlers,\n // feature-flag bucketing — reads one id, and the same one the browser is\n // about to be given. Both the document and the `.json` navigation path\n // come through here, which is the point: minting only on the document path\n // left a client-side navigation with no subject to bucket on.\n if (staticCookies.session) {\n ensureSessionId();\n }\n\n try {\n // A view middleware can resolve the record the route is about — the\n // workspace named in the path, the membership it implies — and raise\n // `RecordNotFoundError` doing it. That means here what it means in a\n // loader, so it is caught rather than left to the break path below:\n // the answer is not a refusal, it is this request becoming an\n // unmatched one.\n let recordMissing = false;\n try {\n await app(MiddlewareRegistry).runMiddleware(middlewares);\n } catch (err) {\n if (!isRecordNotFoundError(err)) {\n throw err;\n }\n recordMissing = true;\n }\n\n // After middleware, not at match time: `auth` is what puts the user on\n // the request context, and a route gated on a flag that targets signed-in\n // users has to see them. The route table is built once at boot and is\n // shared by every visitor, so this is the only place a per-user decision\n // about a route can be made.\n //\n // Clearing the match rather than throwing is what produces the real 404:\n // the framework renders the application's `404` view exactly when\n // `currentPathName` is null, so a gated route becomes indistinguishable\n // from one that was never defined — status, view and component tree\n // included. A `RequestBreakerError` here would instead return a bare\n // text body, which both looks broken and confirms the route exists.\n //\n // A missing record joins the gate here rather than getting a branch of\n // its own, because the outcome is the same one and it is spelled in\n // exactly these three assignments. Short-circuited: a request whose\n // middleware already found nothing must not go on to evaluate flags.\n if (\n recordMissing ||\n (featureGates.length > 0 && !(await this.passesFeatureGates(featureGates)))\n ) {\n currentPathName = null;\n handlers = [];\n // `routePath` too, and not only for tidiness: it is what selects this\n // request's translation namespace below, so leaving it would serve the\n // gated route's dictionary alongside its 404 while a genuinely\n // unmatched path carries none. For an unannounced feature the\n // translation keys are usually the most descriptive thing about it,\n // which makes that difference the leak this block exists to prevent.\n //\n // Safe this late: the feature context was built and memoized by the\n // gate check above, so a `when` reading `ctx.request.routePath` has\n // already seen the real value.\n httpRequest.routePath = \"\";\n }\n\n const translator = app(Translator);\n // Two ways to be an i18n app now. `isEnabled` means the legacy\n // `prefetch` config has dictionaries to serve; configured\n // `supportedLocales` alone means the app uses `defineDictionary` and\n // still needs its locale detected, or every `useDictionary` would fall\n // back to its source language. `isLocaleAware` is the same predicate\n // the locale-prefix redirect above uses — they have to agree.\n const hasLegacyDictionaries = translator.isEnabled;\n const isI18nEnabled = translator.isLocaleAware;\n // Shipped whether or not the app is locale-aware: `useFormatter` and\n // `useDictionary(...).format` read the zone (and, without a resolved\n // locale, the default one) from here, so the browser formats in exactly\n // what the server rendered with and hydration finds the same text.\n const detectionRequest = new HttpRequest(req, httpRequest.params as any);\n let i18n: Record<string, any> = {\n defaultLocale: translator.defaultLocale,\n timeZone: translator.detectTimeZone(detectionRequest),\n };\n if (isI18nEnabled) {\n let locale = null;\n if (urlLocale) {\n locale = urlLocale.replaceAll(\"/\", \"\");\n ctx.setLocale(locale);\n } else {\n locale = translator.detectLocale(detectionRequest);\n ctx.setLocale(locale);\n }\n\n const translations = hasLegacyDictionaries\n ? translator.getPageTranslations(locale, httpRequest.routePath)\n : {};\n\n i18n = {\n ...i18n,\n supportedLocales: translator.supportedLocales,\n currentLocale: locale,\n dictionary: {\n [locale]: translations,\n },\n defaultLocale: translator.defaultLocale,\n };\n }\n\n // Outside the `isI18nEnabled` branch on purpose. `defineDictionary`\n // needs no `translation` config at all — that is what `docs/i18n.md`\n // presents as the whole setup — so gating the preload on it left the\n // documented minimal app taking the unwarmed path: every\n // `useDictionary` suspends, and on a streamed route each component's\n // markup lands in `<div hidden>` behind a `$RC()` reveal instead of\n // inline in the shell (#286/#289). A reader without JS would see the\n // Suspense fallback where the page text belongs.\n //\n // An empty locale means the app configured none; `preloadDictionaries`\n // then warms each dictionary under its own source language, which is\n // the key `useDictionary` will ask for. It returns immediately when\n // nothing is registered, so an app with no dictionaries pays nothing.\n await preloadDictionaries(i18n.currentLocale ?? \"\");\n\n // Handlers gate the response — they decide redirects, status codes,\n // cookies — so they are awaited. Queries do not: `Query.prefetch`\n // starts its request the moment it is called (a live store, so a\n // prefetch after a handler's first `await` is no longer silently\n // dropped), and both response shapes stream whatever is still in\n // flight — the document as interleaved payload scripts, the `.json`\n // navigation payload as NDJSON lines (#290).\n // The loader's own lookup — `Page.findUniqueOrThrow(...)` guarding the\n // route — lands here. Becoming an unmatched request is the whole\n // answer: `currentPathName` being null is what makes the framework\n // render the application's `404` view, under a 404 for a page load and\n // under `is404` in a `.json` navigation's envelope. Same three\n // assignments as the gate above; this one cannot be folded into it\n // because a loader only runs after that decision is made.\n //\n // What it does NOT do is clear `ctx.serverQueries`. A loader that\n // prefetched before it threw keeps those results in the payload — they\n // ran as this user, under this request's policies, so it is waste\n // rather than a leak, and the guard belongs at the top of the loader\n // where the issue's example puts it.\n let data: unknown[];\n try {\n data = await Promise.all(handlers.map((fn) => fn(httpRequest as any)));\n } catch (err) {\n if (!isRecordNotFoundError(err)) {\n throw err;\n }\n currentPathName = null;\n handlers = [];\n httpRequest.routePath = \"\";\n data = [];\n }\n\n const cookies = ctx.cookies;\n const headers = ctx.headers;\n\n pageData = {\n data,\n cookies,\n headers,\n user: ctx.user,\n prefetchedData: ctx.serverQueries.snapshotResolved(),\n currentPathName,\n params: httpRequest.params,\n urlLocaleSegment,\n meta: ctx.renderMeta(),\n appId: app(KernelId).id,\n // After the handlers, deliberately: middleware and handlers are what\n // populate `ctx.user`, and a flag targeted at a signed-in user has to\n // see them. Before the render, necessarily: the document payload is\n // written as `bootstrapScriptContent` at the top of the body, so a\n // flag discovered mid-render could not be added to it.\n features: await app(FeatureManager).forClient(),\n };\n\n const { params, user } = pageData;\n\n const viewData = {};\n const breadcrumbs = {};\n for (const part of data ?? []) {\n const [key, value] = Object.entries(part)?.[0] ?? [];\n if (!key || !value) {\n continue;\n }\n breadcrumbs[`${key}:${currentPathName}`] = (value as any).breadcrumb;\n viewData[key] = value;\n }\n\n const fileOutput: FileOutput | undefined = (viewData as any).FILE;\n if (fileOutput) {\n for (const cookie of cookies) {\n headers.append(\"Set-Cookie\", cookie.toString());\n }\n\n try {\n await this.onRequestEnd(httpRequest);\n } catch (err) {\n Log.error(err?.message ?? 'Error in \"onRequestEnd\" event handler', {\n err: JSON.stringify(err),\n });\n }\n\n return await createFileResponse(fileOutput, headers);\n }\n\n if (isViewDataRequest) {\n // NDJSON: envelope first — sent at handler speed — then one line\n // per query as it settles (#290). The client commits the\n // navigation off the envelope and hydrates the rest as it lands.\n headers.set(\"Content-Type\", \"application/x-ndjson; charset=utf-8\");\n // The body depends on the route the client came from, so no shared\n // cache may serve one client's partial response to another.\n headers.append(\"Vary\", PARTIAL_RENDER_HEADER);\n\n cookies.forEach((cookie) => headers.append(\"Set-Cookie\", cookie.toString()));\n\n await this.hooks.onRequestEnd(httpRequest);\n\n const envelope = {\n // Nothing that rendered touched the metadata, so the segments\n // that were skipped are still the ones that own it.\n meta: partial && !ctx.metadata.touched ? null : pageData.meta,\n data: {\n [urlPathname]: viewData,\n },\n breadcrumbs,\n // Resolved-so-far; the rest streams behind the envelope. The\n // snapshot marks its entries shipped so they aren't sent twice.\n prefetchedData: ctx.serverQueries.snapshotResolved(),\n i18n,\n // Sent on every navigation, **including a partial render**. Unlike\n // `meta`, flags are a property of the request rather than of the\n // segments that re-ran — omitting them on a partial would leave the\n // client showing the previous route's flag values.\n features: pageData.features,\n is404: !currentPathName,\n appId: pageData.appId,\n partial,\n };\n\n return new Response(\n createRoutePayloadStream(envelope, ctx.serverQueries, undefined, ({ aborted }) =>\n // No shell was marked, so the summary reports\n // `shellAt === settledAt` — the NDJSON body is one payload, not\n // a shell followed by streamed content.\n runInRequestScope(() =>\n this.completeStream(httpRequest, ctx.serverQueries.summarize(aborted)),\n ),\n ),\n {\n headers,\n },\n );\n }\n\n headers.set(\"Content-Type\", \"text/html; charset=utf-8\");\n\n // The streamed/settled decision is UA-derived (crawlers get inline\n // settled documents), so the body varies by User-Agent and a shared\n // cache must key on it — otherwise a cached browser shell full of\n // fallbacks and reveal scripts gets served to a bot. `no-stream`\n // routes serve one settled body to everyone, so they stay cacheable\n // without the (CDN-hostile) Vary.\n // A static view is one settled body for everyone, like `no-stream` —\n // unless the request became a 404, which renders as usual.\n if (!noStream && !(staticView && currentPathName)) {\n headers.append(\"Vary\", \"User-Agent\");\n }\n\n // A missing record turned a static route into the app's hydrated\n // `404`, which gets the cookies a hydrated page does.\n const staticDocument = Boolean(staticView && currentPathName);\n if (!staticDocument || staticCookies.session) {\n ensureSessionId();\n }\n\n for (const cookie of cookies) {\n headers.append(\"Set-Cookie\", cookie.toString());\n }\n\n // const { csrfToken, csrfTokenHMAC } = this.generateCSRFTokenWithHmac();\n\n if (!staticDocument || staticCookies.csrf) {\n const csrfToken = Bun.CSRF.generate(process.env.SECRET);\n headers.append(\n \"Set-Cookie\",\n `csrf_token=${csrfToken}; HttpOnly; Secure; SameSite=Strict; Expires=${new Date(Date.now() + 1000 * 60 * 60 * 24).toUTCString()}`,\n );\n }\n\n try {\n await this.onRequestEnd(httpRequest, {\n mintSession: !staticDocument || staticCookies.session,\n });\n } catch (err) {\n Log.error(err?.message ?? 'Error in \"onRequestEnd\" event handler', {\n err: JSON.stringify(err),\n });\n }\n\n if (staticDocument) {\n applyStaticCacheControl(headers, staticView!);\n }\n\n return await this.render({\n req: httpRequest,\n runInRequestScope,\n csrfTokenHMAC: Buffer.from(\"\"),\n currentPathName,\n headers,\n i18n,\n params,\n pathname: url.pathname,\n serverQueries: ctx.serverQueries,\n userAgent: req.headers.get(\"user-agent\"),\n noStream,\n url,\n user,\n viewData,\n breadcrumbs,\n urlLocaleSegment,\n meta: pageData.meta,\n appId: pageData.appId,\n features: pageData.features,\n isOgRequest,\n // Not when the request became a 404 (a gate or a missing record):\n // that renders the app's `404` view, which hydrates as usual.\n staticView: currentPathName ? staticView : undefined,\n });\n } catch (err) {\n if (err.kind === GEMI_REQUEST_BREAKER_ERROR) {\n if (isViewDataRequest) {\n return viewDataBreakResponse(err.payload.viewData ?? err.payload.api);\n } else {\n return viewBreakResponse(err.payload.view);\n }\n }\n // `Query.instant` rethrows the entry's error object into this catch —\n // already reported when the rejection settled, so skip the duplicate.\n if (!reportedQueryErrors.has(err)) {\n this.hooks.onRequestFail(httpRequest, err);\n }\n // A loader or a middleware read a policied model it may not see. Left\n // to throw, it became the server's 500, whose body in production is\n // the error's stack and so the policy's message: a server error for\n // what is a refusal. The developer keeps the reason through\n // `onRequestFail` above and the log; the client gets the api's 403\n // body on a `.json` navigation and a 403 page otherwise.\n if (isPolicyDeniedError(err)) {\n console.error(err);\n return isViewDataRequest ? policyDeniedResponse() : viewBreakResponse(policyDeniedView());\n }\n // The same refusal one step removed: the loader's `Query.instant` hit\n // an api route that answered 403, a policy denial there among them.\n // The api side logged it and the query's rejection reported it, so\n // the view only passes the refusal on instead of turning it into a\n // 500.\n if (err instanceof QueryError && err.status === 403) {\n return isViewDataRequest ? policyDeniedResponse() : viewBreakResponse(policyDeniedView());\n }\n throw err;\n }\n }, carried);\n }\n}\n",
|
|
60
60
|
"import type { ViewRoutes } from \"../../http/ViewRouter\";\nfunction removeGroupPrefix(input: string) {\n // Remove all (str) patterns\n const withoutParentheses = input.replace(/\\([^)]*\\)/g, \"\");\n\n // Remove all double slashes // by replacing with single slash\n const withoutDoubleSlashes = withoutParentheses.replace(/\\/\\//g, \"/\");\n return withoutDoubleSlashes;\n}\n\nexport function createRouteManifest(routes: ViewRoutes) {\n const routeManifest: Record<string, string[]> = {};\n for (const [routePath, routeHandler] of Object.entries(routes)) {\n if (\"run\" in routeHandler) {\n // `viewPath` is \"FILE\" for file routes and \"REDIRECT\" for redirect routes,\n // neither of which resolves to a component — consumers filter them out.\n const viewPath = routeHandler.viewPath;\n\n if (\"children\" in routeHandler) {\n // Add the layout view\n routeManifest[routePath] = [viewPath];\n const children = new routeHandler.children();\n const manifest = createRouteManifest(children.routes);\n for (const [path, viewPaths] of Object.entries(manifest)) {\n const key = routePath === \"/\" ? path : `${routePath}${path}`;\n const _key = path === \"/\" && routePath !== \"/\" ? routePath : key;\n routeManifest[_key] = [viewPath, ...viewPaths];\n }\n // **A layout with no index route is not a navigable path.**\n //\n // Still length 1 means nothing merged into this key — the layout has no\n // `\"/\"` child — so the path would resolve to layouts and no page, and\n // rendering it would produce a blank content area. `createFlatViewRoutes`\n // agrees: `/foo` and `/foo/bar` appear there only as *segments* of\n // `/foo/bar/baz`, never as matchable routes of their own.\n //\n // The condition is \"no index route\", which is broader than the \"no\n // children at all\" this comment used to claim — a layout whose only\n // children are deeper layouts is removed too, and that is the case the\n // stale test in this directory expected to survive.\n if (routeManifest[routePath].length === 1) {\n delete routeManifest[routePath];\n }\n } else {\n routeManifest[routePath] = [viewPath];\n }\n } else {\n const router = new routeHandler();\n\n const manifest = createRouteManifest(router.routes);\n for (const [path, viewPaths] of Object.entries(manifest)) {\n const key = routePath === \"/\" ? path : `${routePath}${path}`;\n const _key = path === \"/\" && routePath !== \"/\" ? routePath : key;\n routeManifest[_key] = viewPaths;\n }\n }\n }\n\n return Object.fromEntries(\n Object.entries(routeManifest).map(([key, value]) => [\n removeGroupPrefix(key),\n value,\n ]),\n );\n}\n",
|
|
61
61
|
"import type { ComponentTree } from \"../../client/types\";\nimport type { ViewRoutes } from \"../../http/ViewRouter\";\n\n/**\n * Adds `node` to `tree`, folding it into a sibling with the same view path.\n *\n * Several routes can use one view (a legacy path and its replacement, or one\n * layout mounted under two prefixes). The tree describes what can render at\n * each depth, not one entry per route, so a view appears once per level —\n * otherwise `Tree` mounts every copy and the page renders twice (#788). The\n * subtrees of a repeated layout are merged the same way.\n */\nfunction addNode(tree: ComponentTree, node: ComponentTree[number]) {\n const [viewPath, branch] = node;\n const existing = tree.find(([path]) => path === viewPath);\n if (!existing) {\n tree.push([viewPath, [...branch]]);\n return;\n }\n for (const child of branch) {\n addNode(existing[1], child);\n }\n}\n\nexport function createComponentTree(routes: ViewRoutes): ComponentTree {\n const componentTree: ComponentTree = [];\n\n for (const [_, routeHandler] of Object.entries(routes)) {\n if (\"run\" in routeHandler) {\n const viewPath = routeHandler.viewPath;\n if (viewPath === \"__\") {\n continue;\n }\n\n // File and redirect routes never resolve to a component.\n if (viewPath === \"REDIRECT\") {\n continue;\n }\n\n if (viewPath === \"FILE\") {\n continue;\n }\n\n if (\"children\" in routeHandler) {\n const router = new routeHandler.children();\n const branch = createComponentTree(router.routes);\n addNode(componentTree, [viewPath, branch]);\n } else {\n addNode(componentTree, [viewPath, []]);\n }\n } else {\n const router = new routeHandler();\n const branch = createComponentTree(router.routes);\n for (const node of branch) {\n addNode(componentTree, node);\n }\n }\n }\n\n return componentTree;\n}\n",
|
|
62
62
|
"import type { ComponentTree } from \"../types\";\n\nexport function flattenComponentTree(componentTree: ComponentTree): string[] {\n let out: string[] = [];\n for (const [root, branches] of componentTree) {\n out.push(root, ...flattenComponentTree(branches).flat());\n }\n return Array.from(new Set(out));\n}\n",
|
|
63
|
-
"import { Translator } from \"../i18n/Translator\";\nimport { RequestContext } from \"../http/requestContext\";\nimport { Facade } from \"./Facade\";\n\nexport class Lang extends Facade {\n static getFacadeAccessor() {\n return Translator;\n }\n\n static getSupportedLocales() {\n return this.getFacadeRoot().supportedLocales;\n }\n\n static getDefaultLocale() {\n return this.getFacadeRoot().defaultLocale;\n }\n\n static locale() {\n const translator = this.getFacadeRoot();\n const requestStore = RequestContext.getStore();\n if (requestStore) {\n // The locale this request actually resolved to, when something has\n // resolved one. `detectLocale` re-reads the *incoming* cookie and\n // `accept-language`, so it does not see `ctx.setLocale()` or the URL\n // locale segment: a visitor whose cookie says `en-US` opening `/tr/about`\n // gets a Turkish page whose server-rendered strings — flash messages,\n // breadcrumbs, an order-confirmation email — come back in English, with\n // nothing raised. Detection stays the fallback for requests where no\n // locale was resolved, which is every API route.\n return requestStore.locale ?? translator.detectLocale(requestStore.req);\n }\n\n return translator.defaultLocale;\n }\n\n /**\n * The time zone dates are formatted in for the current request: what\n * `translation.detectTimeZone` resolves, else `translation.timeZone`\n * (`UTC` by default). Outside a request, the configured zone.\n */\n static timeZone() {\n const translator = this.getFacadeRoot();\n return translator.detectTimeZone(RequestContext.getStore()?.req);\n }\n\n /**\n * A formatter bound to the current request's locale and time zone — the\n * same ones the page renders with, so a date in a flash message or an email\n * matches the one on screen.\n *\n * ```ts\n * Lang.formatter().date(order.createdAt, { dateStyle: \"long\" });\n * ```\n */\n static formatter(options: { locale?: string; timeZone?: string } = {}) {\n const translator = this.getFacadeRoot();\n return translator.formatter(\n options.locale ?? Lang.locale(),\n options.timeZone ?? Lang.timeZone(),\n );\n }\n\n static setLocale(locale = Lang.locale()) {\n const translator = this.getFacadeRoot();\n let _locale = locale;\n if (!translator.supportedLocales.includes(locale)) {\n _locale = translator.defaultLocale;\n }\n\n const store = RequestContext.getStore();\n\n store.setCookie(\"i18n-locale\", _locale, {\n
|
|
63
|
+
"import { Translator } from \"../i18n/Translator\";\nimport { RequestContext } from \"../http/requestContext\";\nimport { Facade } from \"./Facade\";\n\nexport class Lang extends Facade {\n static getFacadeAccessor() {\n return Translator;\n }\n\n static getSupportedLocales() {\n return this.getFacadeRoot().supportedLocales;\n }\n\n static getDefaultLocale() {\n return this.getFacadeRoot().defaultLocale;\n }\n\n static locale() {\n const translator = this.getFacadeRoot();\n const requestStore = RequestContext.getStore();\n if (requestStore) {\n // The locale this request actually resolved to, when something has\n // resolved one. `detectLocale` re-reads the *incoming* cookie and\n // `accept-language`, so it does not see `ctx.setLocale()` or the URL\n // locale segment: a visitor whose cookie says `en-US` opening `/tr/about`\n // gets a Turkish page whose server-rendered strings — flash messages,\n // breadcrumbs, an order-confirmation email — come back in English, with\n // nothing raised. Detection stays the fallback for requests where no\n // locale was resolved, which is every API route.\n return requestStore.locale ?? translator.detectLocale(requestStore.req);\n }\n\n return translator.defaultLocale;\n }\n\n /**\n * The time zone dates are formatted in for the current request: what\n * `translation.detectTimeZone` resolves, else `translation.timeZone`\n * (`UTC` by default). Outside a request, the configured zone.\n */\n static timeZone() {\n const translator = this.getFacadeRoot();\n return translator.detectTimeZone(RequestContext.getStore()?.req);\n }\n\n /**\n * A formatter bound to the current request's locale and time zone — the\n * same ones the page renders with, so a date in a flash message or an email\n * matches the one on screen.\n *\n * ```ts\n * Lang.formatter().date(order.createdAt, { dateStyle: \"long\" });\n * ```\n */\n static formatter(options: { locale?: string; timeZone?: string } = {}) {\n const translator = this.getFacadeRoot();\n return translator.formatter(\n options.locale ?? Lang.locale(),\n options.timeZone ?? Lang.timeZone(),\n );\n }\n\n /**\n * Sets the locale for the rest of this request and, unless `cookie` is\n * `false`, remembers it in the `i18n-locale` cookie for the next one.\n */\n static setLocale(locale = Lang.locale(), options: { cookie?: boolean } = {}) {\n const translator = this.getFacadeRoot();\n let _locale = locale;\n if (!translator.supportedLocales.includes(locale)) {\n _locale = translator.defaultLocale;\n }\n\n const store = RequestContext.getStore();\n\n if (options.cookie !== false) {\n store.setCookie(\"i18n-locale\", _locale, {\n expires: new Date(Date.now() + 1000 * 60 * 60 * 24 * 365),\n secure: false,\n httpOnly: false,\n });\n }\n\n // The cookie is for the *next* request. Without also recording it here,\n // `Lang.locale()` would keep answering with the locale this request arrived\n // under — so setting the locale would not change what the rest of the\n // request renders in, which is the one thing calling it implies.\n store.setLocale(_locale);\n\n return _locale;\n }\n}\n",
|
|
64
64
|
"/**\n * Identifies one booted kernel process. The client compares it across\n * navigations to detect a server restart, so it must be stable for the life of\n * the process and different after a reboot.\n */\nexport class KernelId {\n static token = \"kernel.id\";\n\n constructor(public readonly id: string = crypto.randomUUID()) {}\n}\n",
|
|
65
65
|
"/**\n * Tracks where an HTML byte stream *is* — mid-tag, inside a comment, inside a\n * `<script>` body, or between elements — so the stream injector only splices a\n * payload script in at a point the parser will read it as markup (#404).\n *\n * React's SSR stream copies into a fixed 2048-byte view and enqueues it when\n * full, so its chunk boundaries fall at arbitrary byte offsets — routinely\n * inside a tag. Splicing at one produced\n *\n * <link rel=\"modulepre<script>(self.__GEMI_STREAM__=…)…</script>load\" href=\"…\"/>\n *\n * where the push script is swallowed as `<link>` attributes (so the payload\n * never reaches the client), the tail leaks as text, and the modulepreload is\n * lost.\n *\n * This is a byte scanner, not an HTML parser: it answers one question, \"would a\n * `<script>` spliced here be parsed as markup and executed\", and it only has to\n * be conservative in one direction. Reporting \"not safe\" when a splice would in\n * fact have been legal just defers the payload to the next opportunity;\n * reporting \"safe\" when it isn't is the bug. Ambiguous constructs therefore\n * resolve to *unsafe*.\n *\n * Tokenizer state alone does not answer that question, because two regions are\n * in DATA yet swallow a script at tree-construction time:\n *\n * - `<template>`. Its content is parsed into a `DocumentFragment`, where a\n * script never runs. This is not hypothetical on this code path: React emits\n * `<template id=\"B:n\"></template>` for every Suspense boundary, so a view\n * boundary landing inside that ~19-byte start tag would put the payload\n * somewhere it is silently dropped — #404's outcome by another route.\n * - Foreign content. Inside `<math>` a spliced `<script>` lands in the MathML\n * namespace as an unknown element and never runs. `<svg>` is the benign half\n * of the same divergence — an SVG script *does* execute — but it costs\n * nothing to sit out both.\n *\n * So the scanner also counts template and foreign-content nesting, and reports\n * safe only at depth zero.\n *\n * Scanning bytes rather than decoded text is sound because every byte it keys\n * on (`<`, `>`, `\"`, `'`, `/`, `!`, `-`) is ASCII, and no ASCII byte can appear\n * inside a multi-byte UTF-8 sequence. A chunk that splits a character mid-way\n * is therefore harmless.\n */\n\nconst TAB = 9;\nconst LF = 10;\nconst FF = 12;\nconst CR = 13;\nconst SPACE = 32;\nconst BANG = 33;\nconst DQUOTE = 34;\nconst SQUOTE = 39;\nconst DASH = 45;\nconst SLASH = 47;\nconst LT = 60;\nconst GT = 62;\nconst QUESTION = 63;\n\n/**\n * Elements whose content is raw text or RCDATA — everything until the matching\n * end tag is text, so a `<script>` spliced inside one is never executed.\n * `<noscript>` is raw text exactly when scripting is enabled, which is the case\n * that matters here. `<plaintext>` is deliberately absent: it has no end tag,\n * so treating it as raw text would stall every later payload, and React never\n * emits it.\n */\nconst RAW_TEXT_ELEMENTS = new Set([\n \"script\",\n \"style\",\n \"textarea\",\n \"title\",\n \"xmp\",\n \"iframe\",\n \"noembed\",\n \"noframes\",\n \"noscript\",\n]);\n\n/**\n * Roots of a foreign-content subtree. Everything inside is built in the SVG or\n * MathML namespace rather than the HTML one.\n */\nconst FOREIGN_ROOTS = new Set([\"svg\", \"math\"]);\n\ntype State =\n | \"data\"\n | \"tagOpen\"\n | \"endTagOpen\"\n | \"tagName\"\n | \"inTag\"\n | \"attrDouble\"\n | \"attrSingle\"\n | \"bang\"\n | \"bogus\"\n | \"comment\"\n | \"rawText\";\n\nfunction isWhitespace(byte: number): boolean {\n return (\n byte === SPACE || byte === TAB || byte === LF || byte === FF || byte === CR\n );\n}\n\nfunction isAsciiAlpha(byte: number): boolean {\n return (byte >= 65 && byte <= 90) || (byte >= 97 && byte <= 122);\n}\n\n/** ASCII lower-case; tag names are compared case-insensitively. */\nfunction toLower(byte: number): number {\n return byte >= 65 && byte <= 90 ? byte + 32 : byte;\n}\n\nexport interface HtmlInsertionScanner {\n /**\n * Consume `chunk`, stopping at the first byte offset where the output is in\n * the DATA state, and return that offset. Returns `chunk.length` if the whole\n * chunk was consumed without reaching DATA — the caller then forwards it\n * whole and asks again with the next one.\n *\n * The scanner's state always reflects exactly the bytes it consumed, so a\n * caller that stops short resumes by calling again with the remainder.\n */\n scanToInsertionPoint(chunk: Uint8Array): number;\n /** Consume `chunk` whole, for bytes forwarded without looking for a splice. */\n write(chunk: Uint8Array): void;\n /**\n * As of every byte consumed so far, would a `<script>` appended here be\n * parsed as an executable HTML script element?\n */\n isSafe(): boolean;\n}\n\nexport function createHtmlInsertionScanner(): HtmlInsertionScanner {\n let state: State = \"data\";\n /** Accumulated name of the tag currently being read. */\n let tagName = \"\";\n let isEndTag = false;\n /** `\"</\" + name` for the raw-text element being scanned past. */\n let closeSequence = \"\";\n /** How much of `closeSequence` the raw-text scan has matched so far. */\n let closeMatched = 0;\n /** Consecutive `-` bytes: two after `<!` open a comment, two before `>` close one. */\n let dashes = 0;\n /** Did the tag being read end with `/>`? Only meaningful in foreign content. */\n let selfClosing = false;\n /** Open `<template>` elements: their content is inert to a script. */\n let templateDepth = 0;\n /** Open `<svg>`/`<math>` elements: their content is not in the HTML namespace. */\n let foreignDepth = 0;\n\n const isSafe = () =>\n state === \"data\" && templateDepth === 0 && foreignDepth === 0;\n\n const finishTag = () => {\n if (!isEndTag && RAW_TEXT_ELEMENTS.has(tagName)) {\n // A raw-text element's content is text, so nothing may be spliced into\n // it. `<script/>` does not self-close in HTML — browsers open a script\n // element either way — so the end tag is what gets us out.\n state = \"rawText\";\n closeSequence = `</${tagName}`;\n closeMatched = 0;\n tagName = \"\";\n return;\n }\n state = \"data\";\n if (tagName === \"template\") {\n // `<template/>` is not self-closing in the HTML namespace, so the flag is\n // only honoured for the foreign roots below.\n if (isEndTag) templateDepth = Math.max(0, templateDepth - 1);\n else templateDepth += 1;\n } else if (FOREIGN_ROOTS.has(tagName)) {\n if (isEndTag) foreignDepth = Math.max(0, foreignDepth - 1);\n else if (!selfClosing) foreignDepth += 1;\n }\n tagName = \"\";\n };\n\n const step = (byte: number) => {\n switch (state) {\n case \"data\":\n if (byte === LT) state = \"tagOpen\";\n return;\n\n case \"tagOpen\":\n if (byte === BANG) {\n state = \"bang\";\n dashes = 0;\n } else if (byte === SLASH) {\n state = \"endTagOpen\";\n } else if (isAsciiAlpha(byte)) {\n state = \"tagName\";\n isEndTag = false;\n selfClosing = false;\n tagName = String.fromCharCode(toLower(byte));\n } else if (byte === QUESTION) {\n // A bogus comment: consumed to the next `>`.\n state = \"bogus\";\n } else if (byte === LT) {\n // `<<` — the second `<` is the one that opens a tag.\n state = \"tagOpen\";\n } else {\n // `<` followed by anything else is literal text.\n state = \"data\";\n }\n return;\n\n case \"endTagOpen\":\n if (isAsciiAlpha(byte)) {\n state = \"tagName\";\n isEndTag = true;\n selfClosing = false;\n tagName = String.fromCharCode(toLower(byte));\n } else if (byte === GT) {\n state = \"data\";\n } else {\n state = \"bogus\";\n }\n return;\n\n case \"tagName\":\n if (isWhitespace(byte) || byte === SLASH) {\n state = \"inTag\";\n selfClosing = byte === SLASH;\n } else if (byte === GT) {\n finishTag();\n } else {\n tagName += String.fromCharCode(toLower(byte));\n }\n return;\n\n case \"inTag\":\n if (byte === GT) {\n finishTag();\n return;\n }\n // Only `/` immediately before `>` self-closes; `/ >` does not.\n selfClosing = byte === SLASH;\n if (byte === DQUOTE) state = \"attrDouble\";\n else if (byte === SQUOTE) state = \"attrSingle\";\n return;\n\n case \"attrDouble\":\n if (byte === DQUOTE) state = \"inTag\";\n selfClosing = false;\n return;\n\n case \"attrSingle\":\n if (byte === SQUOTE) state = \"inTag\";\n selfClosing = false;\n return;\n\n case \"bang\":\n // `<!--` opens a comment; `<!DOCTYPE …` and anything else runs to `>`.\n if (byte === DASH) {\n dashes += 1;\n if (dashes === 2) {\n state = \"comment\";\n dashes = 0;\n }\n } else if (byte === GT) {\n state = \"data\";\n } else {\n state = \"bogus\";\n }\n return;\n\n case \"bogus\":\n if (byte === GT) state = \"data\";\n return;\n\n case \"comment\":\n if (byte === DASH) {\n // `--->` closes too, so the count saturates rather than resetting.\n dashes = dashes < 2 ? dashes + 1 : 2;\n } else if (byte === GT && dashes >= 2) {\n state = \"data\";\n dashes = 0;\n } else {\n dashes = 0;\n }\n return;\n\n case \"rawText\": {\n if (closeMatched < closeSequence.length) {\n if (toLower(byte) === closeSequence.charCodeAt(closeMatched)) {\n closeMatched += 1;\n } else {\n // `<` only ever appears at index 0 of `</name`, so a mismatch can\n // only restart the match on a `<`.\n closeMatched = byte === LT ? 1 : 0;\n }\n return;\n }\n // `</name` only ends the element when a tag-name delimiter follows —\n // `</scriptx>` is text, not an end tag.\n if (byte === GT) {\n state = \"data\";\n tagName = \"\";\n } else if (isWhitespace(byte) || byte === SLASH) {\n state = \"inTag\";\n tagName = \"\";\n } else {\n closeMatched = byte === LT ? 1 : 0;\n }\n return;\n }\n }\n };\n\n return {\n scanToInsertionPoint(chunk) {\n for (let i = 0; i < chunk.length; i++) {\n if (isSafe()) return i;\n step(chunk[i]!);\n }\n return chunk.length;\n },\n write(chunk) {\n for (let i = 0; i < chunk.length; i++) {\n step(chunk[i]!);\n }\n },\n isSafe,\n };\n}\n",
|
|
66
66
|
"import type { DictionarySink, DictionaryUse } from \"../../i18n/dictionarySink\";\nimport { createHtmlInsertionScanner } from \"./htmlInsertionPoint\";\nimport type { ServerQueryEntry, ServerQueryStore } from \"./ServerQueryStore\";\n\n/**\n * `</script>`-safe (and `<!--`-safe) JSON for inlining into an HTML script\n * element: any `<` in the data would otherwise let a string value close the\n * tag and inject markup.\n */\nexport function htmlSafeJson(value: unknown): string {\n const json = JSON.stringify(value);\n // `JSON.stringify(undefined)` is `undefined`, not `\"undefined\"`, so the\n // `.replace` below would throw on it. That is unreachable for a query payload\n // but not for the document bootstrap, which serializes `err.stack` \\u2014 absent on\n // anything thrown that is not an `Error`. Throwing there would replace the\n // error page with a second, worse error raised inside the error handler.\n if (json === undefined) {\n return \"undefined\";\n }\n return json\n .replace(/</g, \"\\\\u003c\")\n .replace(/\\u2028/g, \"\\\\u2028\")\n .replace(/\\u2029/g, \"\\\\u2029\");\n}\n\nexport function queryPayloadScript(entry: ServerQueryEntry): string {\n const payload = htmlSafeJson([entry.path, entry.variantKey, entry.data]);\n // Self-shimming: the first payload to arrive creates the buffer, so no\n // separate bootstrap is needed and execution order never matters.\n return `<script>(self.__GEMI_STREAM__=self.__GEMI_STREAM__||[]).push(${payload})</script>`;\n}\n\n/**\n * The same trick for a `defineDictionary` dictionary a segment just rendered\n * with. It rides the same queue as query payloads, so it lands ahead of the\n * reveal chunk for the segment that used it and hydration never re-fetches\n * strings the document already carries.\n */\nexport function dictionaryPayloadScript(use: DictionaryUse): string {\n const payload = htmlSafeJson([use.id, use.locale, use.strings]);\n return `<script>(self.__GEMI_DICT__=self.__GEMI_DICT__||[]).push(${payload})</script>`;\n}\n\n/**\n * The injector sits at the end of the response pipe, so it is the one place\n * that knows when the body's first byte goes out and when the body actually\n * closes — the two marks a handler-scoped span gets wrong under streaming.\n */\nexport interface StreamLifecycleHooks {\n /** The response's first chunk was enqueued — time-to-shell. */\n onShell?: () => void;\n /**\n * Every chunk enqueued into the response body, in order — the byte stream\n * exactly as the client receives it, injected payload scripts included.\n * The dev-mode shell-content measurement (#294) hangs here.\n */\n onChunk?: (chunk: Uint8Array) => void;\n /**\n * The body closed: the last chunk (and any leftover payload scripts)\n * flushed, the client went away, or the source stream errored. Fires\n * exactly once.\n */\n onClose?: () => void;\n}\n\n/**\n * Interleaves resolved query payloads with React's streamed HTML.\n *\n * A manual pull-pump around the source, not a `pipeThrough` — React's SSR\n * stream is a byte stream, and piping one through a `TransformStream` stalls\n * chunk delivery until close under Node's web-streams implementation. Pulling\n * with a plain reader behaves identically under Bun and Node.\n *\n * Ordering is the whole point, and it is guaranteed by construction twice\n * over:\n *\n * 1. Payload before reveal. The store queues the payload script *before* it\n * settles the promise the suspended segment threw (see\n * `ServerQueryStore.ensure`), and React only starts re-rendering the\n * segment after that promise resolves. By the time React produces the\n * segment's reveal chunk, the script is already waiting in `queue` — and\n * every forwarded chunk is preceded by a queue flush, so the script lands\n * first. Hydration can therefore never see a revealed segment whose data\n * isn't in the client cache.\n *\n * 2. Nothing before the shell's first byte. The queue is never flushed ahead\n * of the first React chunk, so a query that settles before streaming\n * begins can't push a script in front of `<!doctype html>`. (Those are\n * normally in the `__GEMI_DATA__` snapshot anyway and skipped here.)\n *\n * 3. Only ever between elements. React's chunk boundaries fall at arbitrary\n * byte offsets — 2048-byte views, not markup — so \"flush at a chunk\n * boundary\" used to splice scripts into the middle of a tag or into a\n * `<style>` body (#404). The scanner tracks the emitted bytes' parse state\n * and the flush moves to the first DATA-state offset *inside* the chunk\n * instead, which is still ahead of anything else that chunk carries. That\n * keeps guarantee 1: the reveal script cannot precede the payload, because\n * the earliest safe offset is at worst the end of the one tag straddling\n * the boundary.\n */\nexport function injectQueryPayloads(\n source: ReadableStream<Uint8Array>,\n store: ServerQueryStore,\n hooks: StreamLifecycleHooks = {},\n dictionaries?: DictionarySink,\n): ReadableStream<Uint8Array> {\n const encoder = new TextEncoder();\n const queue: string[] = [];\n let sentFirstChunk = false;\n let closed = false;\n const closeOnce = () => {\n if (closed) return;\n closed = true;\n hooks.onClose?.();\n };\n\n store.onSettle((entry) => {\n // Rejected entries stream nothing: React client-renders that segment and\n // the browser's own `/api` fetch surfaces the error into the boundary.\n if (entry.status !== \"resolved\") return;\n queue.push(queryPayloadScript(entry));\n });\n\n // Dictionaries read during render join the same queue, and inherit its\n // ordering guarantee: `useDictionary` reports a dictionary while rendering\n // the segment that uses it, so the script is queued before React can emit\n // that segment's chunk.\n dictionaries?.onUse((use) => {\n queue.push(dictionaryPayloadScript(use));\n });\n\n const reader = source.getReader();\n const scanner = createHtmlInsertionScanner();\n const forward = (\n controller: ReadableStreamDefaultController<Uint8Array>,\n chunk: Uint8Array,\n ) => {\n controller.enqueue(chunk);\n hooks.onChunk?.(chunk);\n };\n const flush = (controller: ReadableStreamDefaultController<Uint8Array>) => {\n while (queue.length > 0) {\n const script = encoder.encode(queue.shift()!);\n // Scanned like any other output so the state stays continuous. A payload\n // script is balanced markup, so this always lands back in DATA.\n scanner.write(script);\n forward(controller, script);\n }\n };\n\n /**\n * Forward one React chunk, splicing the queue in at the first offset the\n * parser would read a `<script>` as markup — offset 0 when the previous\n * chunk ended between elements, which is the common case.\n */\n const forwardWithPayloads = (\n controller: ReadableStreamDefaultController<Uint8Array>,\n chunk: Uint8Array,\n ) => {\n if (queue.length === 0) {\n scanner.write(chunk);\n forward(controller, chunk);\n return;\n }\n const at = scanner.scanToInsertionPoint(chunk);\n if (at > 0) {\n forward(controller, chunk.subarray(0, at));\n }\n // False only when the whole chunk was consumed without ever reaching DATA\n // (one very long tag or raw-text element), in which case the payload waits\n // for the next chunk — or, failing that, for the stream-end flush.\n if (scanner.isSafe()) {\n flush(controller);\n }\n const rest = chunk.subarray(at);\n if (rest.length > 0) {\n scanner.write(rest);\n forward(controller, rest);\n }\n };\n\n return new ReadableStream<Uint8Array>({\n async pull(controller) {\n let result: Awaited<ReturnType<typeof reader.read>>;\n try {\n result = await reader.read();\n } catch (err) {\n // A source error (React's stream failing post-shell) still ends the\n // body — without this, \"fires exactly once\" would be zero times on\n // the error exit, leaking whatever span `onClose` was meant to end.\n closeOnce();\n throw err;\n }\n const { done, value } = result;\n if (done) {\n // Queries nothing rendered (an unused prefetch) settle after React's\n // last chunk — they still belong in the client cache.\n flush(controller);\n controller.close();\n closeOnce();\n return;\n }\n if (!sentFirstChunk) {\n sentFirstChunk = true;\n scanner.write(value);\n forward(controller, value);\n hooks.onShell?.();\n // Guarantee 2 forbids splicing *into* the first chunk, so the queue\n // goes out behind it — and only if that chunk ended cleanly. A settled\n // (`no-stream`) document arrives with its whole backlog already queued,\n // which is why this boundary was the one that broke deterministically.\n if (scanner.isSafe()) {\n flush(controller);\n }\n return;\n }\n forwardWithPayloads(controller, value);\n },\n cancel(reason) {\n closeOnce();\n return reader.cancel(reason);\n },\n });\n}\n\n/**\n * Crawlers don't run scripts and don't wait — they index whatever HTML the\n * response body contains, so they get the fully-settled document\n * (`stream.allReady`) instead of a shell with fallbacks.\n */\nconst BOT_UA =\n /bot|crawler|spider|crawling|slurp|bingpreview|mediapartners|headless|lighthouse|prerender|facebookexternalhit|whatsapp|telegram|discord|twitterbot|linkedinbot/i;\n\nexport function isBotUserAgent(userAgent: string | null): boolean {\n if (!userAgent) return false;\n return BOT_UA.test(userAgent);\n}\n",
|
|
@@ -77,12 +77,13 @@
|
|
|
77
77
|
"import { QueryError } from \"../../client/QueryError\";\nimport { HttpRequest } from \"../../http/HttpRequest\";\nimport { isHttpResponse } from \"../../http/HttpResponse\";\nimport { RequestContext } from \"../../http/requestContext\";\nimport { kernelContext } from \"../../kernel/context\";\nimport { applyParams } from \"../../utils/applyParams\";\nimport { app } from \"../../foundation/app\";\nimport { requestDomain, setRequestDomain } from \"../../http/requestDomain\";\nimport { DomainRouter } from \"./DomainRouter\";\nimport type { ServerQueryFetcher } from \"./ServerQueryStore\";\n\n/**\n * The in-process \"fetch\" behind every server-side query: rebuild the request\n * the browser would have sent to `/api` and run the api handler directly.\n * Mirrors what `Query.prefetch` has always done, factored out so\n * render-discovered queries go through the identical path.\n *\n * Lives apart from `ServerQueryStore` on purpose: the store is pure and\n * unit-testable, while this pulls in the whole service-container graph.\n */\nexport function createServerQueryFetcher(req: Request): ServerQueryFetcher {\n // `app()` resolves through the kernel's AsyncLocalStorage. The factory runs\n // inside it (request handling always does), but a render-discovered query\n // fires from React's streaming render, which the http server drives\n // *outside* the kernel scope — so capture the store now and re-enter it\n // around every fetch.\n const kernelStore = kernelContext.getStore();\n return (patternPath, params, searchParams) => {\n const origin = new URL(req.url).origin;\n const pathnameWithSearch = [applyParams(patternPath, params), searchParams.toString()]\n .filter((s) => s.length > 0)\n .join(\"?\");\n const newReq = new Request(`${origin}/${pathnameWithSearch}`, {\n headers: req.headers,\n // The page request's: a client that leaves mid-render aborts the\n // queries the render started, as `req.signal` documents.\n signal: req.signal,\n });\n const domain = requestDomain(req);\n if (domain) {\n setRequestDomain(newReq, domain);\n }\n const httpRequest = new HttpRequest(newReq, params);\n return kernelContext.run(kernelStore, () =>\n RequestContext.run(httpRequest, async () => {\n try {\n // The api of the page's own host group — on `admin.` that is the\n // admin api, which may not share a single route with the root's.\n const data = await app(DomainRouter).dispatchers(domain).api.getRouteData(patternPath);\n // A handler's `HttpResponse`: its body is the data, and a status\n // outside 2xx is the same `QueryError` the browser's fetch makes of\n // it, body included.\n if (isHttpResponse(data)) {\n if (!data.ok) {\n throw new QueryError(\n applyParams(patternPath, params),\n searchParams.toString(),\n data.status,\n data.body,\n );\n }\n return data.body;\n }\n // A handler that broke (`RequestBreakerError`) comes back as an\n // error `Response`, not a throw. Surface it as the same\n // `QueryError` the browser's fetch would produce — otherwise the\n // entry \"resolves\" and the view renders with a Response object for\n // data.\n if (data instanceof Response) {\n const body = await data.json().catch(() => null);\n if (!data.ok) {\n throw new QueryError(\n applyParams(patternPath, params),\n searchParams.toString(),\n data.status,\n body,\n );\n }\n return body;\n }\n return data;\n } catch (err) {\n if (err instanceof QueryError) throw err;\n // A raw throw inside the api handler (not a `RequestBreakerError`)\n // would otherwise leave this boundary unwrapped, so `onRequestFail`\n // would see an error with no path/variant/status attached — the\n // browser's fetch for the same failure produces a 500 `QueryError`.\n // Wrapping here keeps the two paths interchangeable and keeps the\n // error identity stable for the router's rethrow dedupe\n // (`Query.instant` rethrows the entry's — now wrapped — error).\n const wrapped = new QueryError(\n applyParams(patternPath, params),\n searchParams.toString(),\n 500,\n { message: err instanceof Error ? err.message : String(err) },\n );\n wrapped.cause = err;\n throw wrapped;\n }\n }),\n );\n };\n}\n",
|
|
78
78
|
"/**\n * Dev-mode guard against the silent no-JS blanking threshold (#289, #294).\n *\n * React defers any boundary bigger than `progressiveChunkSize` (~12.8 kB) out\n * of the shell on size alone, so a public page that reads fine without JS\n * today goes blank the day one more section pushes it over the budget — its\n * content is parked in `<div hidden>` segments revealed by `$RC()` scripts,\n * and nothing in typecheck, tests, or CI notices the transition. `\"no-stream\"`\n * fixes it, but only for routes someone already knows are affected.\n *\n * The measurement is nearly free where the bytes already flow: the stream\n * injector is the last thing to see the response body, so an observer hung on\n * its `onChunk` hook holds the document exactly as the visitor received it.\n * After the body closes, the bytes are split into shell-readable text (what a\n * no-JS reader can see) versus deferred text (parked behind reveal scripts),\n * and a route shipping its content deferred while its shell is near-blank gets\n * a console hint — once per route per boot.\n */\n\nexport interface ShellContentMeasurement {\n /** Non-whitespace text chars a no-JS reader can see in the shell. */\n shellChars: number;\n /** Non-whitespace text chars parked in `<div hidden>` reveal segments. */\n deferredChars: number;\n}\n\n/**\n * Their text is code, styling, or metadata — never readable content. React's\n * `<template id=\"B:...\">` fallback markers are empty anyway; skipping the tag\n * also covers hand-written templates.\n */\nconst RAW_TEXT_TAGS = new Set([\"script\", \"style\", \"template\", \"title\"]);\n\n/**\n * `hidden` as a standalone attribute (`<div hidden id=\"S:0\">`, `hidden=\"\"`).\n * Tested against the tag with its quoted attribute values blanked out\n * (`QUOTED_VALUE` below), so the word `hidden` inside a value — a Tailwind\n * list like `class=\"mt-2 hidden md:block\"` or prose like\n * `title=\"show hidden files\"` — never opens a deferred segment.\n */\nconst HIDDEN_ATTR = /\\shidden([\\s=/]|$)/i;\n\n/**\n * Quoted attribute values, to be blanked before the `HIDDEN_ATTR` test. Safe\n * as a regex because React escapes `\"` and `'` inside attribute values, so a\n * quoted span never contains its own delimiter.\n */\nconst QUOTED_VALUE = /\"[^\"]*\"|'[^']*'/g;\n\n/**\n * Splits a streamed HTML document into shell-readable versus deferred text.\n *\n * A scanner, not a parser: it only needs to tell text from markup, skip the\n * tags whose text is never content, and track `<div hidden>` nesting — the\n * container React streams deferred segments in. Attribute text and comments\n * (including React's `<!--$?-->` boundary marks) never count; whitespace\n * never counts.\n */\nexport function measureShellContent(html: string): ShellContentMeasurement {\n let shellChars = 0;\n let deferredChars = 0;\n /** `<div>` nesting depth inside the current hidden segment; 0 = in the shell. */\n let hiddenDepth = 0;\n let i = 0;\n\n while (i < html.length) {\n const lt = html.indexOf(\"<\", i);\n const textEnd = lt === -1 ? html.length : lt;\n if (textEnd > i) {\n const visible = html.slice(i, textEnd).replace(/\\s+/g, \"\").length;\n if (hiddenDepth > 0) {\n deferredChars += visible;\n } else {\n shellChars += visible;\n }\n }\n if (lt === -1) break;\n\n if (html.startsWith(\"<!--\", lt)) {\n const end = html.indexOf(\"-->\", lt + 4);\n i = end === -1 ? html.length : end + 3;\n continue;\n }\n\n const gt = html.indexOf(\">\", lt);\n if (gt === -1) break; // truncated tag — nothing readable follows\n const tag = html.slice(lt + 1, gt);\n i = gt + 1;\n\n const name = /^\\/?([a-zA-Z][a-zA-Z0-9-]*)/.exec(tag)?.[1]?.toLowerCase();\n if (!name) continue;\n const isClosing = tag.startsWith(\"/\");\n\n if (!isClosing && RAW_TEXT_TAGS.has(name) && !tag.endsWith(\"/\")) {\n const close = html.indexOf(`</${name}`, i);\n i = close === -1 ? html.length : close;\n continue;\n }\n\n // Only `div` is tracked because that is the container React streams\n // deferred segments in. A hand-written `<section hidden>` still counts as\n // shell text — a false negative (stays silent), never a false hint.\n if (name !== \"div\") continue;\n if (isClosing) {\n if (hiddenDepth > 0) hiddenDepth -= 1;\n } else if (hiddenDepth > 0) {\n hiddenDepth += 1;\n } else if (HIDDEN_ATTR.test(tag.replace(QUOTED_VALUE, '\"\"'))) {\n hiddenDepth = 1;\n }\n }\n\n return { shellChars, deferredChars };\n}\n\n/** Below this much deferred text the page isn't relying on reveal scripts. */\nexport const DEFERRED_TEXT_FLOOR = 1000;\n\n/**\n * \"Near zero\": under this many readable chars the shell is effectively blank\n * — less than a sentence, no headline worth of content.\n */\nexport const SHELL_TEXT_NEAR_ZERO = 64;\n\nfunction formatChars(chars: number): string {\n return chars >= 1000 ? `${(chars / 1000).toFixed(1)} kB` : `${chars} chars`;\n}\n\n/**\n * The hint for a route whose content streams behind reveal scripts while its\n * shell is near-blank — exactly the transition #289 was discovered through by\n * hand-measuring. Null when the measurement is fine: a shell that carries its\n * own text, or too little deferred text to matter.\n */\nexport function shellContentHint(\n routePath: string,\n measurement: ShellContentMeasurement,\n): string | null {\n if (measurement.deferredChars < DEFERRED_TEXT_FLOOR) return null;\n if (measurement.shellChars >= SHELL_TEXT_NEAR_ZERO) return null;\n return (\n `[gemi] GET ${routePath} streams ${formatChars(measurement.deferredChars)} of its ` +\n `content behind reveal scripts — a no-JS visitor sees ~${measurement.shellChars} chars. ` +\n `If this is a public/content route, add \"no-stream\" to its middleware.`\n );\n}\n\n/**\n * Owns the once-per-route-per-boot dedup (#294's \"logs the hint once\"): a hot\n * route must not spam the dev console, but a route whose measurement is\n * healthy today must stay eligible for the hint the day it crosses the\n * threshold — only an actually-emitted hint marks the route as done.\n *\n * `warn` is injectable for tests; production callers use the default.\n */\nexport function createShellContentReporter(warn: (hint: string) => void = console.warn) {\n /** Routes already hinted this boot. */\n const hintedRoutes = new Set<string>();\n return {\n /**\n * Whether collecting bytes for this route can still lead to a hint —\n * false once the route has been hinted, so the caller can skip the\n * observer entirely.\n */\n shouldObserve(routePath: string): boolean {\n return !hintedRoutes.has(routePath);\n },\n report(routePath: string, measurement: ShellContentMeasurement): void {\n if (hintedRoutes.has(routePath)) return;\n const hint = shellContentHint(routePath, measurement);\n if (!hint) return;\n hintedRoutes.add(routePath);\n warn(hint);\n },\n };\n}\n\nexport type ShellContentReporter = ReturnType<typeof createShellContentReporter>;\n\n/**\n * Accumulates the response body for a post-close measurement. Wire `onChunk`\n * into `StreamLifecycleHooks.onChunk`; call `measure` once the body closed.\n * Decoding is streaming-safe — a multi-byte character split across chunks\n * still decodes as one character.\n */\nexport function createShellContentObserver() {\n const decoder = new TextDecoder();\n let html = \"\";\n return {\n onChunk(chunk: Uint8Array) {\n html += decoder.decode(chunk, { stream: true });\n },\n measure(): ShellContentMeasurement {\n html += decoder.decode();\n return measureShellContent(html);\n },\n };\n}\n",
|
|
79
79
|
"import type { ServerQueryStore } from \"./ServerQueryStore\";\n\n/**\n * How long a navigation payload may keep streaming query results before it\n * closes with whatever has settled. A hung query must not hold the response\n * open — the suspended segment it strands resolves over `/api` instead.\n */\nconst PAYLOAD_STREAM_DEADLINE_MS = 10_000;\n\n/**\n * The streamed `.json` navigation response (#290): NDJSON, one JSON value per\n * line.\n *\n * - **Line 1 — the envelope**: route data, meta, i18n, partial info, and the\n * `prefetchedData` that has already resolved. Written immediately, so the\n * client can commit the navigation at handler speed instead of waiting for\n * `allSettled` — the blocking that made priming a heavy query a tax on\n * every navigation.\n * - **Later lines — query payloads**: `[path, variantKey, data]`, one per\n * query as it settles. The client hydrates each into the cache, which\n * settles any segment suspended on that variant — the same wake path the\n * document stream uses.\n *\n * The envelope is an object and payload lines are arrays, which is how the\n * reader tells them apart. `JSON.stringify` never emits a raw newline, so\n * line framing is unambiguous. Rejected queries stream nothing: the\n * suspended segment's own `/api` fetch surfaces the error into its boundary.\n */\nexport function createRoutePayloadStream(\n envelope: unknown,\n store: ServerQueryStore,\n deadlineMs: number = PAYLOAD_STREAM_DEADLINE_MS,\n /**\n * The body actually closed — every settled query streamed, the deadline\n * fired (`aborted: true`), or the client went away. Fires exactly once;\n * the stream-lifecycle mirror of the document injector's `onClose`.\n */\n onClose?: (info: { aborted: boolean }) => void,\n): ReadableStream<Uint8Array> {\n const encoder = new TextEncoder();\n let closeStream: (aborted: boolean) => void = () => {};\n\n return new ReadableStream<Uint8Array>({\n start(controller) {\n let closed = false;\n const close = (aborted: boolean) => {\n if (closed) return;\n closed = true;\n clearTimeout(deadline);\n try {\n controller.close();\n } catch {}\n onClose?.({ aborted });\n };\n closeStream = close;\n\n controller.enqueue(encoder.encode(`${JSON.stringify(envelope)}\\n`));\n\n // Entries the envelope's snapshot already shipped are skipped by the\n // store itself (same contract the document injector relies on).\n store.onSettle((entry) => {\n if (closed || entry.status !== \"resolved\") return;\n controller.enqueue(\n encoder.encode(\n `${JSON.stringify([entry.path, entry.variantKey, entry.data])}\\n`,\n ),\n );\n });\n\n const deadline = setTimeout(() => close(true), deadlineMs);\n store.allSettled().then(\n () => close(false),\n () => close(false),\n );\n },\n cancel() {\n closeStream(false);\n },\n });\n}\n",
|
|
80
|
-
"import { type ComponentType, type Context, createContext, createElement, useContext } from \"react\";\n\n/**\n * When an island's client module is fetched and mounted, per marker.\n *\n * - `\"eager\"` (default): as soon as the page has parsed. The module (and its\n * static imports) is `modulepreload`ed from the head, so it is usually in\n * cache by then.\n * - `\"idle\"`: on `requestIdleCallback` (a timeout where unsupported).\n * - `\"visible\"`: when the island's content first scrolls into view. Suits a\n * heavy island far down the page, like a canvas or a map.\n */\nexport type IslandLoad = \"eager\" | \"idle\" | \"visible\";\n\n/**\n * The default export of an island's client module (`*.island.ts`). Runs once\n * per marker on the page: `root` is the `<gemi-island>` element wrapping the\n * server-rendered markup, `props` what the island chose to serialise (see\n * `IslandOptions.props`), or `undefined`.\n *\n * Plain DOM code — no React is loaded on a static page.\n */\nexport type IslandMount<P = unknown> = (root: HTMLElement, props: P) => void;\n\n/** `() => import(\"./x.island\")`. Never called on the server. */\nexport type IslandLoader = () => Promise<{ default: IslandMount<any> }>;\n\nexport interface IslandOptions<P> {\n /** When the client module loads. Defaults to `\"eager\"`. */\n load?: IslandLoad;\n /**\n * What `mount` receives as `props`. Left out (or `false`), nothing is\n * serialised: most islands read what they need from the markup. `true`\n * serialises the component's props without `children`; a function picks\n * what to send.\n *\n * Serialised with `JSON.stringify` into an attribute, so the value must be\n * JSON: functions and `undefined` are dropped, a `Date` becomes a string.\n * Anything in it is visible in the page source.\n */\n props?: boolean | ((props: P) => unknown);\n}\n\n/** @internal What a static render records about the islands it used. */\nexport interface StaticRenderCollector {\n /** Island name -> the client module's build key and load strategy. */\n islands: Map<string, { module: string; load: IslandLoad }>;\n}\n\n/** The property gemi's Vite plugin attaches to an island's loader. */\nexport const ISLAND_MODULE_KEY = \"gemiIsland\";\n\nconst CONTEXT_KEY = Symbol.for(\"gemi.staticRender\");\n\n/**\n * @internal Provided by the view router around a static view's render; `null`\n * everywhere else, which is how `island()` knows to render a plain component.\n *\n * On `globalThis` rather than a module-level `createContext`: the published\n * package bundles `gemi/client` and the server side separately, so a plain\n * module singleton would give the provider and the islands two different\n * context objects.\n */\nexport const StaticRenderContext: Context<StaticRenderCollector | null> = ((\n globalThis as Record<symbol, unknown>\n)[CONTEXT_KEY] ??= createContext<StaticRenderCollector | null>(null)) as Context<\n StaticRenderCollector | null\n>;\n\nfunction serialiseProps<P>(props: P, option: IslandOptions<P>[\"props\"]): string | undefined {\n if (!option) {\n return undefined;\n }\n let value: unknown;\n if (option === true) {\n const { children: _children, ...rest } = (props ?? {}) as Record<string, unknown>;\n value = rest;\n } else {\n value = option(props);\n }\n // React escapes attribute values (`\"`, `&`, `<`, `>`), so the JSON needs no\n // escaping of its own here — and must not get any, or `mount` would read\n // the escapes back.\n return JSON.stringify(value);\n}\n\n/**\n * Declares an interactive part of a page.\n *\n * ```tsx\n * export const NavMenu = island(\"nav-menu\", NavMenuView, () => import(\"./navMenu.island\"));\n * ```\n *\n * - In a **static** view (`this.view(...).static()`), it server-renders\n * `Component` inside a `<gemi-island name=\"nav-menu\">` marker and records\n * that the page uses it. The document then carries a tiny loader plus the\n * island's own module — and only for islands that rendered. The module's\n * default export (`IslandMount`) is called once per marker.\n * - In a **hydrated** view, it renders `Component` as an ordinary component and\n * loads nothing: the same component works in both kinds of page.\n *\n * The client module must be a file named `*.island.ts` (or `.tsx`/`.js`)\n * under `app/`, imported exactly as `() => import(\"./path.island\")`: gemi's\n * Vite plugin finds that call, builds the file as its own entry, and tells the\n * server which built file it is.\n *\n * `name` identifies the island in the markup and must be unique per module.\n */\nexport function island<P extends object>(\n name: string,\n Component: ComponentType<P>,\n loader: IslandLoader,\n options: IslandOptions<P> = {},\n): ComponentType<P> {\n if (typeof name !== \"string\" || name.length === 0) {\n throw new Error(\"island(): the name must be a non-empty string.\");\n }\n const load: IslandLoad = options.load ?? \"eager\";\n\n function Island(props: P) {\n const collector = useContext(StaticRenderContext);\n if (!collector) {\n return createElement(Component, props);\n }\n\n const module = (loader as unknown as Record<string, unknown>)[ISLAND_MODULE_KEY];\n if (typeof module !== \"string\") {\n throw new Error(\n `island(\"${name}\"): the client module could not be identified. Pass the loader as ` +\n `\\`() => import(\"./name.island\")\\` — a file named *.island.ts(x) under app/ — so ` +\n `gemi's Vite plugin can map it to its built file.`,\n );\n }\n const known = collector.islands.get(name);\n if (known && known.module !== module) {\n throw new Error(\n `island(\"${name}\") is declared for two modules (${known.module} and ${module}). ` +\n `Island names must be unique.`,\n );\n }\n collector.islands.set(name, { module, load });\n\n return createElement(\n \"gemi-island\",\n {\n name,\n \"data-props\": serialiseProps(props, options.props),\n style: { display: \"contents\" },\n },\n createElement(Component, props),\n );\n }\n\n Island.displayName = `Island(${name})`;\n return Island;\n}\n",
|
|
81
|
-
"import { createHash } from \"node:crypto\";\nimport type
|
|
80
|
+
"import {\n type ComponentType,\n type Context,\n type ReactElement,\n type ReactNode,\n Fragment,\n createContext,\n createElement,\n lazy,\n use,\n useContext,\n} from \"react\";\n\n/**\n * When an island's code is fetched and hydrated, per marker.\n *\n * - `\"eager\"` (default): as soon as the page has parsed. The island's chunks\n * and React are `modulepreload`ed from the head, so they are usually in\n * cache by then.\n * - `\"idle\"`: on `requestIdleCallback` (a timeout where unsupported).\n * - `\"visible\"`: when the island's content first scrolls into view. Suits a\n * heavy island far down the page, like a canvas or a map.\n */\nexport type IslandLoad = \"eager\" | \"idle\" | \"visible\";\n\nexport interface IslandOptions {\n /** When the island hydrates on a static page. Defaults to `\"eager\"`. */\n load?: IslandLoad;\n /** Which export of the module is the component. Defaults to `\"default\"`. */\n export?: string;\n}\n\n/**\n * `() => import(\"./Counter\")`, the argument `island()` takes. gemi's Vite\n * plugin adds the module's build key and the module itself, so the server can\n * render it synchronously in a hydrated view and point a static page at its\n * built chunk.\n */\nexport type IslandLoader<M = any> = (() => Promise<M>) & {\n /** @internal The module's path from the project root, the client manifest's key. */\n gemiIsland?: string;\n /** @internal The module, statically imported by the plugin. */\n gemiModule?: M;\n};\n\n/** @internal One island module a static page uses: an entry of the page's island table. */\nexport interface IslandEntry {\n /** The module's build key, or `undefined` when the plugin did not run. */\n module: string | undefined;\n export: string;\n load: IslandLoad;\n}\n\ninterface IslandInstance {\n html: Promise<string>;\n index: number;\n uid: string;\n props: string | undefined;\n}\n\n/**\n * @internal Provided by the view router around a static view's render; `null`\n * everywhere else, which is how `island()` knows to render a plain component.\n */\nexport interface StaticRenderCollector {\n /** The page's island table: what the loader imports, by marker index. */\n islands: IslandEntry[];\n /**\n * Renders one island as its own React root, settled, to HTML. Supplied by\n * the server, so this module never imports `react-dom/server`.\n */\n render: (element: ReactElement, identifierPrefix: string) => Promise<string>;\n /** Per-instance render state, keyed by the island's props object. */\n instances: WeakMap<object, IslandInstance>;\n /** Instances rendered so far, for each one's `identifierPrefix`. */\n count: number;\n}\n\n/** @internal */\nexport function createStaticRenderCollector(\n render: StaticRenderCollector[\"render\"],\n): StaticRenderCollector {\n return { islands: [], render, instances: new WeakMap(), count: 0 };\n}\n\n/** @internal The element an island's static children land in. */\nexport const ISLAND_SLOT_TAG = \"gemi-slot\";\n/** @internal On the empty slot an island's own render leaves for its children. */\nexport const ISLAND_SLOT_ATTRIBUTE = \"data-slot\";\n/** @internal On the template holding the children the page tree rendered. */\nexport const ISLAND_SLOT_TEMPLATE_ATTRIBUTE = \"data-gemi-slot\";\n\n/** The property gemi's Vite plugin attaches to an island's loader. */\nexport const ISLAND_MODULE_KEY = \"gemiIsland\";\n\nconst CONTEXT_KEY = Symbol.for(\"gemi.staticRender\");\n\n/**\n * @internal On `globalThis` rather than a module-level `createContext`: the\n * published package bundles `gemi/client` and the server side separately, so a\n * plain module singleton would give the provider and the islands two different\n * context objects.\n */\nexport const StaticRenderContext: Context<StaticRenderCollector | null> = ((\n globalThis as Record<symbol, unknown>\n)[CONTEXT_KEY] ??= createContext<StaticRenderCollector | null>(null)) as Context<\n StaticRenderCollector | null\n>;\n\nconst isProduction = () =>\n typeof process !== \"undefined\" && process.env?.NODE_ENV === \"production\";\n\n/**\n * Throws when `value` would not survive `JSON.stringify` and `JSON.parse`\n * unchanged, naming the prop. An island's props cross from the server to the\n * browser as JSON: a function would vanish and a `Date` would arrive as a\n * string, so the island would hydrate with other props than it rendered with.\n */\nexport function assertSerialisableProps(value: unknown, island: string): void {\n const seen = new Set<object>();\n const fail = (path: string, what: string): never => {\n throw new Error(\n `${island}: the prop \\`${path}\\` is ${what}. An island's props are sent to the browser ` +\n `as JSON, so they must be plain data: strings, finite numbers, booleans, null, ` +\n `arrays and plain objects. Pass static markup as children instead.`,\n );\n };\n const walk = (v: unknown, path: string, inArray: boolean): void => {\n switch (typeof v) {\n case \"string\":\n case \"boolean\":\n return;\n case \"number\":\n if (!Number.isFinite(v)) fail(path, String(v));\n return;\n case \"undefined\":\n // Dropped from an object, which reads back the same; not in an array.\n if (inArray) fail(path, \"undefined (it would arrive as null)\");\n return;\n case \"function\":\n fail(path, \"a function\");\n return;\n case \"symbol\":\n case \"bigint\":\n fail(path, `a ${typeof v}`);\n return;\n }\n if (v === null) return;\n const object = v as Record<string, unknown>;\n if (seen.has(object)) fail(path, \"a circular reference\");\n if (\"$$typeof\" in object) fail(path, \"a React element\");\n seen.add(object);\n if (Array.isArray(object)) {\n object.forEach((item, i) => walk(item, `${path}[${i}]`, true));\n } else {\n const proto = Object.getPrototypeOf(object);\n if (proto !== Object.prototype && proto !== null) {\n fail(path, `an instance of ${proto?.constructor?.name || \"a class\"}`);\n }\n for (const [key, item] of Object.entries(object)) {\n walk(item, path ? `${path}.${key}` : key, false);\n }\n }\n seen.delete(object);\n };\n walk(value, \"\", false);\n}\n\nconst hasChildren = (children: unknown) =>\n children !== undefined && children !== null && typeof children !== \"boolean\";\n\ntype AnyComponent = ComponentType<any>;\n\n/**\n * Makes a component an island: hydrated on its own on a static page, an\n * ordinary component everywhere else.\n *\n * ```tsx\n * // app/views/site/Counter.tsx: a plain React component\n * export default function Counter({ start }: { start: number }) {\n * const [n, setN] = useState(start);\n * return <button onClick={() => setN(n + 1)}>{n}</button>;\n * }\n *\n * // where it is used\n * const Counter = island(() => import(\"./Counter\"), { load: \"visible\" });\n * <Counter start={3} />\n * ```\n *\n * - In a **static** view (`this.view(...).static()`), it server-renders the\n * component as its own React root inside a `<gemi-island>` marker and\n * serialises its props. The page gets a tiny loader that, on the island's\n * `load` trigger, imports React (one chunk shared by every island) and the\n * component's chunk and calls `hydrateRoot` on the marker.\n * - In a **hydrated** view, it is the component itself: rendered inline, with\n * the page's context, and nothing extra to load.\n *\n * Write the loader exactly as `() => import(\"./path\")` inside the `island(`\n * call: gemi's Vite plugin finds that call, builds the module as its own\n * client entry and imports it statically for the server.\n *\n * Props must be plain data (checked in dev). `children` are rendered on the\n * server as static HTML and passed through untouched. On a static page the\n * island is a separate React root, so context from the page does not reach it.\n */\nexport function island<M extends { default: AnyComponent }>(\n loader: () => Promise<M>,\n options?: IslandOptions & { export?: \"default\" },\n): M[\"default\"];\nexport function island<M, K extends keyof M & string>(\n loader: () => Promise<M>,\n options: IslandOptions & { export: K },\n): M[K];\nexport function island(loader: IslandLoader, options: IslandOptions = {}): AnyComponent {\n if (typeof loader !== \"function\") {\n throw new Error(\n 'island() takes `() => import(\"./Component\")` and options since gemi 0.110. ' +\n 'The island(\"name\", Component, () => import(\"./x.island\")) form was removed: see UPGRADE.md.',\n );\n }\n const exportName = options.export ?? \"default\";\n const load: IslandLoad = options.load ?? \"eager\";\n const key = loader[ISLAND_MODULE_KEY];\n const label = `island(${key ?? \"() => import(…)\"}${exportName === \"default\" ? \"\" : `#${exportName}`})`;\n\n const pick = (mod: Record<string, unknown>): AnyComponent => {\n const component = mod?.[exportName];\n if (typeof component !== \"function\" && (typeof component !== \"object\" || component === null)) {\n throw new Error(`${label}: the module has no component export \\`${exportName}\\`.`);\n }\n return component as AnyComponent;\n };\n\n // A hydrated view renders the component in place. The plugin imported the\n // module statically; without it (a test that doesn't run the plugin) the\n // component loads lazily and suspends once.\n let inline: AnyComponent | undefined;\n const inlineComponent = (): AnyComponent =>\n (inline ??= loader.gemiModule\n ? pick(loader.gemiModule)\n : lazy(() => loader().then((mod) => ({ default: pick(mod) }))));\n\n const register = (collector: StaticRenderCollector): number => {\n const known = collector.islands.findIndex(\n (entry) =>\n key !== undefined && entry.module === key && entry.export === exportName && entry.load === load,\n );\n return known !== -1 ? known : collector.islands.push({ module: key, export: exportName, load }) - 1;\n };\n\n const start = (collector: StaticRenderCollector, props: Record<string, unknown>): IslandInstance => {\n const { children, ...rest } = props;\n if (!isProduction()) {\n assertSerialisableProps(rest, label);\n }\n const uid = `i${collector.count++}-`;\n const component = loader.gemiModule\n ? Promise.resolve(pick(loader.gemiModule))\n : loader().then(pick);\n // The island's own render is a root of its own, as it will be in the\n // browser: islands nested in it are plain components of that root. Its\n // children are not rendered here: they belong to the page (and its\n // context), so the page tree renders them next to the marker and\n // `spliceIslandSlots` moves their HTML into this empty slot.\n const html = component.then((Component) =>\n collector.render(\n createElement(\n StaticRenderContext.Provider,\n { value: null },\n hasChildren(children)\n ? createElement(\n Component,\n rest,\n createElement(ISLAND_SLOT_TAG, { [ISLAND_SLOT_ATTRIBUTE]: uid, style: { display: \"contents\" } }),\n )\n : createElement(Component, rest),\n ),\n uid,\n ),\n );\n // A rejection surfaces through `use`; this keeps it from also being\n // reported as unhandled.\n html.catch(() => {});\n const json = JSON.stringify(rest);\n return { html, index: register(collector), uid, props: json === \"{}\" ? undefined : json };\n };\n\n function Island(props: Record<string, unknown>): ReactNode {\n const collector = useContext(StaticRenderContext);\n if (!collector) {\n return createElement(inlineComponent(), props);\n }\n\n // Suspending on `use` re-renders this component with the same props\n // object, so the render it started is found again rather than restarted.\n let instance = collector.instances.get(props);\n if (!instance) {\n instance = start(collector, props);\n collector.instances.set(props, instance);\n }\n\n const marker = createElement(\"gemi-island\", {\n \"data-island\": instance.index,\n \"data-uid\": instance.uid,\n // React escapes attribute values, so the JSON needs (and must get) no\n // escaping of its own.\n \"data-props\": instance.props,\n style: { display: \"contents\" },\n dangerouslySetInnerHTML: { __html: use(instance.html) },\n });\n if (!hasChildren(props.children)) {\n return marker;\n }\n // The children, rendered here in the page tree with the page's context\n // (islands among them are islands of their own), in a template the\n // static document splices into the island's slot before it is sent.\n return createElement(\n Fragment,\n null,\n marker,\n createElement(\"template\", { [ISLAND_SLOT_TEMPLATE_ATTRIBUTE]: instance.uid }, props.children as ReactNode),\n );\n }\n\n Island.displayName = label;\n return Island;\n}\n",
|
|
81
|
+
"import { createHash } from \"node:crypto\";\nimport {\n ISLAND_SLOT_ATTRIBUTE,\n ISLAND_SLOT_TAG,\n ISLAND_SLOT_TEMPLATE_ATTRIBUTE,\n type StaticRenderCollector,\n} from \"../../client/islands\";\nimport { htmlSafeJson } from \"./streamQueryInjection\";\n\n/**\n * Where an island's entry is served from: `src` is imported by the loader,\n * `preload` is every chunk that import pulls in (itself first), React\n * included.\n */\nexport type IslandAsset = { src: string; preload: string[] };\n\n/** Maps an island module's build key (`app/views/site/Counter.tsx`) to its entry. */\nexport type IslandResolver = (moduleKey: string) => IslandAsset | undefined;\n\n/** The id of the JSON block the loader reads its island table from. */\nexport const ISLAND_DATA_ID = \"gemi-islands\";\n\n/**\n * The island loader, inlined into a static document that uses islands.\n *\n * Kept byte-for-byte constant (the per-page island table travels in a\n * separate `<script type=\"application/json\">`, which a Content Security Policy\n * does not treat as script), so a strict policy can allow it by hash:\n * `script-src 'sha256-…'` with `ISLAND_LOADER_CSP_HASH`. Everything it loads\n * is a plain `import()` of a same-origin (or asset-base) file.\n *\n * The table is `{ i: [{ s: entry URL, e: export, l: load }] }` and each\n * marker's `data-island` indexes `i`. Per marker, on its schedule: import the\n * island's entry (the module as `m`, the runtime's `h`), then\n * `h(marker, m[export])`, which calls `hydrateRoot`. A failure is logged and\n * leaves the server-rendered markup in place.\n */\nexport const ISLAND_LOADER_SOURCE =\n 'const d=document,c=JSON.parse(d.getElementById(\"gemi-islands\").textContent),' +\n \"w=f=>(window.requestIdleCallback||setTimeout)(f),\" +\n \"m=(e,o)=>{if(!e.g){e.g=1;import(o.s).then(x=>x.h(e,x.m[o.e])).catch(r=>console.error(r))}};\" +\n 'for(const e of d.querySelectorAll(\"gemi-island\")){const o=c.i[e.dataset.island];if(!o)continue;' +\n 'if(o.l==\"eager\")m(e,o);else if(o.l==\"idle\"||!window.IntersectionObserver||!e.children.length)w(()=>m(e,o));' +\n \"else{const v=new IntersectionObserver(n=>{if(n.some(x=>x.isIntersecting)){v.disconnect();m(e,o)}});for(const k of e.children)v.observe(k)}}\";\n\n/**\n * `'sha256-…'` for the production island loader, ready to put in a\n * `script-src` directive. The dev loader also installs the React Refresh\n * preamble and Vite's HMR client first, so it does not match; a dev policy\n * needs `'unsafe-inline'` as Vite itself does.\n */\nexport const ISLAND_LOADER_CSP_HASH = `'sha256-${createHash(\"sha256\")\n .update(ISLAND_LOADER_SOURCE)\n .digest(\"base64\")}'`;\n\n/**\n * The dev loader: the React Refresh preamble first (`@vitejs/plugin-react`\n * refuses to run a component module before it is installed), then Vite's HMR\n * client, so editing an island's component hot-updates it in place. Either is\n * missing without the React plugin or outside Vite, hence the catches.\n */\nconst DEV_ISLAND_LOADER_SOURCE =\n 'await import(\"/refresh.js\").catch(()=>{});await import(\"/@vite/client\").catch(()=>{});' +\n ISLAND_LOADER_SOURCE;\n\n/**\n * `</head>` is looked up from the front and `</body>` from the back: the\n * document's own tags are the first and the last of each, and React escapes\n * either spelling anywhere in text.\n */\nfunction insertBefore(html: string, marker: string, insertion: string, fromEnd: boolean) {\n if (!insertion) return html;\n const at = fromEnd ? html.lastIndexOf(marker) : html.indexOf(marker);\n return at === -1 ? html + insertion : html.slice(0, at) + insertion + html.slice(at);\n}\n\nconst attr = (value: string) =>\n value.replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/</g, \"<\");\n\n/**\n * Adds the island loader to a settled static document, only when the render\n * recorded an island, so a page without one keeps no script at all.\n *\n * Eager islands get `modulepreload`s in the head for their entry's whole\n * static import closure (React included); lazy ones are fetched when their\n * schedule fires, so nothing about them is announced up front.\n *\n * Without a resolver (a test rendering through `app.fetch`), the markup is\n * the whole result: nothing is injected and nothing is logged.\n */\nexport function injectIslands(\n html: string,\n collector: StaticRenderCollector,\n resolveIsland: IslandResolver | undefined,\n dev: boolean,\n): string {\n if (collector.islands.length === 0 || !resolveIsland) {\n return html;\n }\n\n const preloads = new Set<string>();\n const entries = collector.islands.map((island) => {\n const asset = island.module ? resolveIsland(island.module) : undefined;\n if (!asset) {\n // The markup is still there and still works without JS; a missing build\n // entry must not take the page down with it.\n console.error(\n `[gemi] island ${island.module ?? \"(unknown module)\"}: no client build entry. ` +\n \"Declare it as island(() => import(\\\"./Component\\\")) so gemi's Vite plugin builds it.\",\n );\n return null;\n }\n if (island.load === \"eager\") {\n for (const href of asset.preload) preloads.add(href);\n }\n return { s: asset.src, e: island.export, l: island.load };\n });\n\n if (entries.every((entry) => entry === null)) {\n return html;\n }\n\n const head = [...preloads].map((href) => `<link rel=\"modulepreload\" href=\"${attr(href)}\"/>`).join(\"\");\n const body =\n `<script type=\"application/json\" id=\"${ISLAND_DATA_ID}\">${htmlSafeJson({ i: entries })}</script>` +\n `<script type=\"module\">${dev ? DEV_ISLAND_LOADER_SOURCE : ISLAND_LOADER_SOURCE}</script>`;\n\n return insertBefore(insertBefore(html, \"</head>\", head, false), \"</body>\", body, true);\n}\n\n/** The end of the `</template>` matching the `<template` at `from`, or -1. */\nfunction templateEnd(html: string, from: number): number {\n const tag = /<(\\/?)template\\b[^>]*>/gi;\n tag.lastIndex = from;\n let depth = 0;\n for (let match = tag.exec(html); match; match = tag.exec(html)) {\n depth += match[1] ? -1 : 1;\n if (depth === 0) return tag.lastIndex;\n }\n return -1;\n}\n\n/**\n * Moves each island's children into its slot.\n *\n * An island's own render (a root of its own) leaves an empty\n * `<gemi-slot data-slot=\"i0-\">`; the page tree renders the children, with the\n * page's context, right after the marker in `<template data-gemi-slot=\"i0-\">`.\n * Here the template's content replaces the placeholder (as\n * `<gemi-slot style=\"display:contents\">…</gemi-slot>`, what the browser\n * hydrates against) and the template goes away.\n *\n * The last template is spliced first: nothing after it can be inside it, so it\n * holds no other island's children, and an island's children that contain\n * islands are spliced after theirs are. Children the island didn't render are\n * dropped, as a component that ignores `children` drops them anywhere.\n */\nexport function spliceIslandSlots(html: string): string {\n const opening = `<template ${ISLAND_SLOT_TEMPLATE_ATTRIBUTE}=\"`;\n for (let at = html.lastIndexOf(opening); at !== -1; at = html.lastIndexOf(opening)) {\n const end = templateEnd(html, at);\n if (end === -1) break;\n const uidStart = at + opening.length;\n const uid = html.slice(uidStart, html.indexOf('\"', uidStart));\n const contentStart = html.indexOf(\">\", uidStart) + 1;\n const content = html.slice(contentStart, end - \"</template>\".length);\n html = html.slice(0, at) + html.slice(end);\n const placeholder = `<${ISLAND_SLOT_TAG} ${ISLAND_SLOT_ATTRIBUTE}=\"${uid}\" style=\"display:contents\"></${ISLAND_SLOT_TAG}>`;\n html = html\n .split(placeholder)\n .join(`<${ISLAND_SLOT_TAG} style=\"display:contents\">${content}</${ISLAND_SLOT_TAG}>`);\n }\n return html;\n}\n",
|
|
82
|
+
"import type { StaticViewOptions } from \"../../http/ViewRouter\";\n\n/**\n * Which of the cookies gemi sets on its own a view request gets.\n *\n * A hydrated view gets all three. A static view (`.static()`) gets none unless\n * it asked: it is one body for every visitor, and a per-visitor `Set-Cookie`\n * is what keeps a CDN from caching it. `i18n-locale` has no opt-in — the url\n * carries a static page's locale.\n */\nexport function staticCookiePolicy(staticView: StaticViewOptions | undefined) {\n if (!staticView) {\n return { locale: true, session: true, csrf: true };\n }\n return {\n locale: false,\n session: staticView.session === true,\n csrf: staticView.csrf === true,\n };\n}\n\n/**\n * Sets a static page's `Cache-Control` from `.static({ cacheControl })`.\n *\n * The handler's own header wins. A response that sets a cookie is never handed\n * to a shared cache, whatever the option says: one visitor's cookie stored with\n * the page would be replayed to everyone who gets that copy.\n */\nexport function applyStaticCacheControl(headers: Headers, staticView: StaticViewOptions) {\n if (headers.getSetCookie().length > 0) {\n if (staticView.cacheControl && process.env.NODE_ENV !== \"production\") {\n console.warn(\n `[gemi] A static view with cacheControl \"${staticView.cacheControl}\" set a cookie, so it was sent \"private, no-store\" instead. Static pages are cacheable only when nothing on them sets a cookie.`,\n );\n }\n headers.set(\"Cache-Control\", \"private, no-store\");\n return;\n }\n if (staticView.cacheControl && !headers.has(\"Cache-Control\")) {\n headers.set(\"Cache-Control\", staticView.cacheControl);\n }\n}\n",
|
|
82
83
|
"import { refusal } from \"../../http/Error\";\n\n/**\n * What a client gets when a request's ORM lookup matched nothing.\n *\n * `findUniqueOrThrow`, `findFirstOrThrow`, and `update`/`delete` on a missing\n * row throw `RecordNotFoundError`, which is a plain `Error` — so a route that\n * looks a record up by an id taken from the URL used to answer 500 for an id\n * that simply does not exist. The record being absent is what the client asked\n * about, not a server failure, and 404 is the answer to it. Laravel does the\n * same with `ModelNotFoundException`.\n *\n * Not the error's message: that is `No Page found (Page.findUniqueOrThrow)`,\n * which names the model and the operation. A 404 is handed to anyone who can\n * guess a url, so it says only that there is nothing here — the same body\n * `FileNotFoundError` already answers with, and the same one the router uses\n * for a path that matches no route at all. The developer still gets the real\n * error in the log.\n */\nexport function notFoundResponse() {\n const body = JSON.stringify({ error: refusal(\"not_found\", \"Not found\", 404) });\n // Sized, so `isOpenEndedBody` ends the request when it is returned. Without\n // the length it would wait for the body to be read, and an in-process caller\n // that only checks the status would never end it. (Same reason as\n // `policyDeniedResponse`.)\n return new Response(body, {\n status: 404,\n headers: {\n \"Content-Type\": \"application/json\",\n \"Content-Length\": String(Buffer.byteLength(body)),\n // A 404 for a record turns into a 200 the moment the record is created,\n // and the url does not change when it does. Nothing may replay this.\n \"Cache-Control\": \"no-store\",\n },\n });\n}\n",
|
|
83
84
|
"import { AuthApiRouter } from \"../../auth/routes\";\nimport { ACCESS_TOKEN } from \"../../auth/accessToken\";\nimport { ApiRouter, HttpRequest } from \"../../http\";\nimport { GEMI_REQUEST_BREAKER_ERROR, refusal } from \"../../http/Error\";\nimport { HttpResponse, isHttpResponse } from \"../../http/HttpResponse\";\nimport { I18nRouter } from \"../../i18n/I18nRouter\";\nimport { type CarriedContext, RequestContext } from \"../../http/requestContext\";\nimport { ImageOptimizationRouter } from \"../image-optimization/ImageManager\";\nimport { LoggingRouter } from \"../logging/LoggingRouter\";\nimport { MiddlewareRegistry } from \"../middleware/MiddlewareRegistry\";\nimport { apiRouteConfigDefaults, type ApiRouteConfig } from \"./config\";\nimport { createFlatApiRoutes, type FlatApiRoutes } from \"./createFlatApiRoutes\";\nimport { ViewRouteDispatcher } from \"./ViewRouteDispatcher\";\nimport { Translator } from \"../../i18n/Translator\";\nimport { app } from \"../../foundation/app\";\nimport { markModelOriginated } from \"../../http/modelOriginated\";\nimport { setRequestDomain } from \"../../http/requestDomain\";\nimport { clientIp } from \"../../http/RateLimitMiddleware\";\nimport { ormContext } from \"../../orm/context\";\nimport { Log } from \"../../facades/Log\";\nimport { isPolicyDeniedError, isRecordNotFoundError } from \"../../orm/errors\";\nimport { apiPath } from \"./apiPath\";\nimport { notFoundResponse } from \"./notFound\";\nimport { policyDeniedResponse } from \"./policyDenied\";\n\nclass DebugRouter extends ApiRouter {\n routes = {\n \"/api-routes\": this.get(() => {\n const flatroutes = app(ApiRouteDispatcher).flatRoutes;\n const out = [];\n for (const [path, methods] of Object.entries(flatroutes)) {\n for (const [method, handler] of Object.entries(methods)) {\n const { exec, middleware } = handler;\n out.push({ path, method, middleware });\n }\n }\n return out;\n }),\n \"/view-routes\": this.get(() => {\n const flatroutes = app(ViewRouteDispatcher).flatViewRoutes;\n const out = [];\n for (const [path, { middleware, viewPath }] of Object.entries(flatroutes)) {\n out.push({ path, method: \"GET\", viewPath, middleware });\n }\n return out;\n }),\n };\n}\n\nexport type InProcessMethod = \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\";\n\n/**\n * Credentials of the app's own that a `dispatchAs` request carries beside\n * gemi's access token: a cookie an app middleware reads (an anonymous owner's\n * id), or a header the app signed for this call (a short-lived grant).\n *\n * A `null` or `undefined` value is skipped, so `req.cookies.get(\"x\")` can be\n * passed as it is. The values are sent as given — a cookie value is not\n * encoded, the same as `HttpRequest.cookies` reads it.\n */\nexport type DispatchCredentials = {\n headers?: Record<string, string | null | undefined>;\n cookies?: Record<string, string | null | undefined>;\n};\n\nexport type DispatchAsOptions = {\n credentials?: DispatchCredentials;\n};\n\n/**\n * Headers `credentials` may not set. Each one is either gemi's identity, which\n * stays the initiator's, or something `dispatchAs` writes itself: the body's\n * framing, the cookie jar it builds, the host the request is routed by, and\n * the agent a session is bound to. `x-forwarded-*` and `forwarded` are refused\n * as a prefix and a name: they are how a proxy describes a client, and the\n * synthetic request has no proxy in front of it.\n */\nconst RESERVED_HEADERS = new Set([\n ACCESS_TOKEN,\n \"cookie\",\n \"content-type\",\n \"content-length\",\n \"transfer-encoding\",\n \"connection\",\n \"host\",\n \"user-agent\",\n \"forwarded\",\n]);\n\n/** RFC 6265's cookie-name: an HTTP token. */\nconst COOKIE_NAME = /^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/;\n\n/** RFC 6265's cookie-octets: no control characters, whitespace, `\"`, `,`, `;` or a backslash. */\nconst COOKIE_VALUE = /^[\\x21\\x23-\\x2B\\x2D-\\x3A\\x3C-\\x5B\\x5D-\\x7E]*$/;\n\nfunction applyCredentials(headers: Headers, cookies: string[], credentials: DispatchCredentials) {\n for (const [name, value] of Object.entries(credentials.headers ?? {})) {\n if (value === undefined || value === null) continue;\n const lower = name.toLowerCase();\n if (RESERVED_HEADERS.has(lower) || lower.startsWith(\"x-forwarded-\")) {\n throw new Error(\n `dispatchAs: credentials may not set the \"${name}\" header. The access token stays the initiator's, and the request's framing is dispatchAs's own.`,\n );\n }\n headers.set(name, value);\n }\n for (const [name, value] of Object.entries(credentials.cookies ?? {})) {\n if (value === undefined || value === null) continue;\n if (name === ACCESS_TOKEN) {\n throw new Error(\n `dispatchAs: credentials may not set the \"${ACCESS_TOKEN}\" cookie. The access token stays the initiator's.`,\n );\n }\n if (!COOKIE_NAME.test(name) || !COOKIE_VALUE.test(value)) {\n throw new Error(`dispatchAs: \"${name}\" is not a cookie a Cookie header can carry.`);\n }\n cookies.push(`${name}=${value}`);\n }\n}\n\n/**\n * The same response, with a body that calls `end` once when it is read to the\n * end, errors, or is cancelled — Bun cancels it when the client disconnects.\n * Once, and not once per path: a cancel lands while a read is in flight, and\n * that read then finishes too.\n *\n * Status, status text and every header are carried over, `Set-Cookie`s the\n * context merged in included. A body nobody reads or cancels never ends; the\n * server always does one or the other, and the store is collected with it.\n */\nfunction endWhenBodyEnds(response: Response, end: () => void): Response {\n const reader = response.body!.getReader();\n let ended = false;\n const endOnce = () => {\n if (ended) {\n return;\n }\n ended = true;\n try {\n end();\n } catch (err) {\n // An `onRequestEnd` that throws here would error a body the client has\n // already read in full. Nobody is left to answer a 500 to.\n console.error(err);\n }\n };\n\n const body = new ReadableStream<Uint8Array>(\n {\n async pull(controller) {\n let chunk: Awaited<ReturnType<typeof reader.read>>;\n try {\n chunk = await reader.read();\n } catch (err) {\n endOnce();\n controller.error(err);\n return;\n }\n if (chunk.done) {\n // Synchronous when nothing is pending, so whoever reads to the end\n // finds `onRequestEnd` already run when they see `done`. The order\n // against close() does not decide that — the reader resumes in a\n // later microtask either way — the synchronous end does.\n endOnce();\n try {\n controller.close();\n } catch {\n // Already cancelled; the cancel path has ended it.\n }\n return;\n }\n try {\n controller.enqueue(chunk.value);\n } catch {\n // Cancelled while this read was in flight.\n }\n },\n async cancel(reason) {\n try {\n await reader.cancel(reason);\n } finally {\n endOnce();\n }\n },\n },\n // Read the handler's stream only as fast as the client does.\n { highWaterMark: 0 },\n );\n\n return new Response(body, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n}\n\n/**\n * A RequestBreakerError's `api` payload as a Response, from a middleware or a\n * handler.\n *\n * `no-store` unless the breaker says otherwise, as `policyDeniedResponse` does:\n * the context's headers fill this Response's gaps, and `cache` puts the route's\n * Cache-Control there for the success it expected. A 429, 401 or 403 that\n * inherited `public, max-age=864000` would let a shared cache answer one\n * client's rejection to everyone for ten days.\n */\nexport function breakResponse(payload: {\n status?: number;\n data?: unknown;\n headers?: Record<string, string>;\n}) {\n const { status = 400, data, headers: own } = payload;\n const headers = new Headers({ \"Content-Type\": \"application/json\", ...own });\n if (!headers.has(\"Cache-Control\")) {\n headers.set(\"Cache-Control\", \"no-store\");\n }\n return new Response(JSON.stringify(data), { status, headers });\n}\n\n/**\n * Copies request-context headers and cookies onto a Response a handler built\n * itself, or a middleware's break or policy 403, without disturbing what that\n * Response already set. Also what puts a global middleware's context on the\n * response a request ends with (`globalMiddleware.ts`).\n */\nexport function mergeContextIntoResponse(\n response: Response,\n headers: Headers,\n cookies: Set<string>,\n) {\n // Built with forEach rather than spread: the browser tsconfig's lib set\n // has DOM but not DOM.Iterable, so `Headers` has no [Symbol.iterator].\n const entries: [string, string][] = [];\n headers?.forEach((value, key) => entries.push([key, value]));\n const setCookies = [\n ...(typeof headers?.getSetCookie === \"function\" ? headers.getSetCookie() : []),\n ...Array.from(cookies ?? []),\n ];\n\n if (entries.length === 0 && setCookies.length === 0) {\n return response;\n }\n\n const apply = (target: Headers) => {\n for (const [key, value] of entries) {\n if (key.toLowerCase() === \"set-cookie\") {\n continue;\n }\n if (!target.has(key)) {\n target.set(key, value);\n }\n }\n for (const cookie of setCookies) {\n target.append(\"Set-Cookie\", cookie);\n }\n };\n\n try {\n // Mutating in place keeps the original Response object, and with it a\n // sized Blob body — rebuilding turns that into a stream, which costs the\n // Content-Length that Bun only emits for known-length bodies.\n apply(response.headers);\n return response;\n } catch {\n // A Response from fetch() — this.proxy() routes — has immutable headers.\n const merged = new Headers(response.headers);\n apply(merged);\n return new Response(response.body, {\n status: response.status,\n statusText: response.statusText,\n headers: merged,\n });\n }\n}\n\nexport class ApiRouteDispatcher {\n static token = \"router.api\";\n\n flatRoutes: FlatApiRoutes = {};\n\n private readonly onRequestStart: NonNullable<ApiRouteConfig[\"onRequestStart\"]>;\n private readonly onRequestEnd: NonNullable<ApiRouteConfig[\"onRequestEnd\"]>;\n private readonly onRequestFail: NonNullable<ApiRouteConfig[\"onRequestFail\"]>;\n\n constructor(config: ApiRouteConfig) {\n const defaults = apiRouteConfigDefaults();\n\n this.onRequestStart = config.onRequestStart ?? defaults.onRequestStart;\n this.onRequestEnd = config.onRequestEnd ?? defaults.onRequestEnd;\n this.onRequestFail = config.onRequestFail ?? defaults.onRequestFail;\n\n this.flatRoutes = createFlatApiRoutes({\n \"/\": config.rootRouter,\n \"/auth\": AuthApiRouter,\n \"/__gemi__/services/i18n\": I18nRouter,\n \"/__gemi__/services/logs\": LoggingRouter,\n \"/__gemi__/services/image\": ImageOptimizationRouter,\n \"/__gemi__/debug\": DebugRouter,\n });\n }\n\n public getRouteHandlerAndParams(req: Request) {\n const url = new URL(req.url);\n\n const routePath = apiPath(url.pathname);\n\n let params: Record<string, any> = {};\n let path: string;\n for (const [_path] of Object.entries(this.flatRoutes)) {\n try {\n const pattern = new URLPattern({ pathname: _path });\n if (pattern.test({ pathname: routePath })) {\n path = _path;\n params = pattern.exec({ pathname: routePath })?.pathname.groups!;\n break;\n }\n } catch (err) {\n console.error(err);\n // Do something\n }\n }\n return { params, path };\n }\n\n async runRouteMiddleware(path: string, httpRequest: HttpRequest) {\n const routeHandler = this.flatRoutes[path];\n const middlewares = routeHandler[httpRequest.rawRequest.method].middleware;\n try {\n await app(MiddlewareRegistry).runMiddleware(middlewares);\n } catch (err) {\n if (err.kind === GEMI_REQUEST_BREAKER_ERROR) {\n // Unconditionally: every request here is an api request, whatever its\n // url says. A break that returned nothing would let the handler run\n // after the middleware rejected the request.\n return breakResponse(err.payload.api);\n } else {\n // Before `onRequestFail`, for the reason a `RequestBreakerError` is:\n // the record not existing is the answer to the request, not a failure\n // of it. A middleware that loads the record the route is about — the\n // membership row, the tenant — asks the same question the handler does.\n if (isRecordNotFoundError(err)) {\n return notFoundResponse();\n }\n this.onRequestFail(httpRequest, err);\n console.error(err);\n // A middleware can load a policied model, a membership check say, and\n // its denial is the same refusal as the handler's.\n if (isPolicyDeniedError(err)) {\n return policyDeniedResponse();\n }\n throw err;\n }\n }\n }\n\n async getRouteData(path: string): Promise<any> {\n const routeHandler = this.flatRoutes[path];\n\n const ctx = RequestContext.getStore();\n const exec = routeHandler[ctx.req.rawRequest.method].exec ?? (() => Promise.resolve({}));\n\n let data = {};\n try {\n data = await exec();\n } catch (err) {\n if (err.kind === GEMI_REQUEST_BREAKER_ERROR) {\n return breakResponse(err.payload.api);\n }\n // Before `onRequestFail` and the log, unlike a policy denial below. A\n // route keyed on an id from the url answers this for every stale link\n // and every crawler, so reporting it would drown the failures that are\n // the server's. It is a 404 in the access log like any other.\n if (isRecordNotFoundError(err)) {\n return notFoundResponse();\n }\n this.onRequestFail(ctx.req, err);\n console.error(err);\n // Answered here rather than in `server/`, so an in-process `dispatchAs`\n // call gets the same 403 a client does. Left to throw, it became the\n // server's 500 with the policy's message as its body.\n if (isPolicyDeniedError(err)) {\n return policyDeniedResponse();\n }\n throw err;\n }\n\n return data;\n }\n\n /**\n * The matched route, not the URL: a query value that mentions `/__gemi__`\n * would otherwise keep an app route out of onRequestStart/End.\n */\n private isFrameworkRoute(path: string) {\n return path.startsWith(\"/__gemi__\");\n }\n\n /**\n * How every request that started ends: `onRequestEnd`, then `destroy()`.\n * One place, so an exit cannot answer without it — a break that skipped it\n * left request logging with a start and no end for exactly the rejected\n * requests. `ctx` is passed rather than read so a caller that ends the\n * request later, outside the request's async scope, can still reach it.\n *\n * Work handed to `ctx.waitUntil` — an agent run the client may have left —\n * holds both back until it settles. With none, the end is not deferred, as\n * it always was, so a plain JSON response has ended before it is returned.\n * The hold applies on every path, JSON included: a route that starts a run\n * and answers without waiting for it ends when the run does, so a duration\n * logged in `onRequestEnd` spans the run, not the response. That is the\n * point — the run's tools need the user — but it is not \"response sent\".\n *\n * The hook is awaited, since destroy() empties the store it reads from, and\n * a hook that fails is logged rather than thrown: it must not turn the\n * response it was told about into a 500, nor skip the destroy() after it.\n */\n private async endRequest(\n ctx: ReturnType<typeof RequestContext.getStore>,\n httpRequest: HttpRequest,\n path: string,\n ) {\n const end = async () => {\n try {\n if (!this.isFrameworkRoute(path)) {\n await this.onRequestEnd(httpRequest);\n }\n } catch (err) {\n Log.error(err?.message ?? 'Error in \"onRequestEnd\" event handler', {\n err: JSON.stringify(err),\n });\n } finally {\n // A hook that throws still releases the user, cookies and headers.\n ctx.destroy();\n }\n };\n if (!ctx.hasPendingWork()) {\n await end();\n return;\n }\n void ctx\n .whenIdle()\n .then(end)\n .catch((err) => {\n // The response is long gone; there is no one left to answer a 500 to.\n console.error(err);\n });\n }\n\n /**\n * Whether a handler's Response is still running code after it is returned.\n * A body with no declared length is: an SSE stream, an agent run, anything\n * built on a `ReadableStream`, all of which may read `req.ctx()` between\n * chunks. A declared `Content-Length` means the bytes were decided before\n * the handler returned — every sized file `this.stream()` serves has one —\n * and those are left alone, because wrapping a body costs it that header:\n * Bun sends any stream body chunked, and a file then loses its length and\n * the server's sendfile path. The only way to see a body end is to wrap it,\n * and Bun gives no way to tell a stream body from a string or a Blob, so a\n * handler's own `new Response(\"…\")` is wrapped too; its end then waits for\n * the body to be read.\n *\n * A HEAD response is never open-ended, whatever its body: Bun.serve drops\n * that body without reading or cancelling it, so a wrapped one would never\n * end, and the store would keep the user until it was collected. A stream\n * route answers HEAD, and its 404, a breaker's JSON or a handler's own\n * Response can all carry an unsized body there.\n *\n * `Content-Length` is checked before `response.body`, and the order matters:\n * on Bun 1.3.14 on Linux, reading `.body` of a Response built on a sliced\n * Blob — a `this.stream()` Range response — turns it into a stream that runs\n * past the slice's end, and Bun.serve then sends the rest of the object\n * under a 206 (#725).\n */\n private isOpenEndedBody(request: Request, response: Response) {\n return (\n request.method !== \"HEAD\" && !response.headers.has(\"Content-Length\") && response.body !== null\n );\n }\n\n async handleApiRequest(req: Request, carried?: CarriedContext | null) {\n const { params, path } = this.getRouteHandlerAndParams(req);\n\n const routeHandler = this.flatRoutes[path];\n\n if (!routeHandler || !routeHandler[req.method]) {\n return new Response(JSON.stringify({ error: refusal(\"not_found\", \"Not found\", 404) }), {\n status: 404,\n });\n }\n\n const httpRequest = new HttpRequest(req, params, \"api\", path);\n if (!this.isFrameworkRoute(path)) {\n this.onRequestStart(httpRequest);\n }\n return await RequestContext.run(httpRequest, async () => {\n const ctx = RequestContext.getStore();\n // Set once this request's end has run, been scheduled, or been handed to\n // a streaming body, so the throw path below never ends it twice.\n let endDecided = false;\n const end = async () => {\n endDecided = true;\n await this.endRequest(ctx, httpRequest, path);\n };\n\n try {\n const translator = app(Translator);\n if (translator.isEnabled) {\n const locale = translator.detectLocale(httpRequest);\n ctx.setLocale(locale);\n }\n\n ctx.setRequest(httpRequest);\n // Before the route's middleware, whose own `body-limit` replaces it.\n app(MiddlewareRegistry).applyDefaultBodyLimit(req);\n const middlewareResponse = await this.runRouteMiddleware(path, httpRequest);\n\n if (middlewareResponse instanceof Response) {\n // A breaker's or a policy denial's Response carries what the earlier\n // middleware put on the context, as a handler's does. Returned as is,\n // a 401 or 429 after `cors` had no CORS headers, so the browser\n // reported an opaque CORS failure instead of the status, and a\n // Set-Cookie set before the break was lost. Merged before the end,\n // which destroys the context's headers and cookies.\n const response = mergeContextIntoResponse(middlewareResponse, ctx.headers, ctx.cookies);\n await end();\n return response;\n }\n const data = await this.getRouteData(path);\n\n const headers = ctx.headers;\n const cookies = ctx.cookies;\n\n if (data instanceof Response) {\n // A handler owning its own Response — stream, file and proxy routes,\n // and the RequestBreakerError path in getRouteData — still has to carry\n // what the request context accumulated: headers set by middleware via\n // ctx.setHeaders (CORS, Cache-Control) and any Set-Cookie. The\n // response's own headers win; the context only fills gaps.\n const response = mergeContextIntoResponse(data, headers, cookies);\n if (this.isOpenEndedBody(req, response)) {\n // Ended by its body rather than here: a streaming agent route\n // returns before any of its tools run, and ending now would destroy\n // the `user` every one of them reads.\n const streamed = endWhenBodyEnds(response, () =>\n this.endRequest(ctx, httpRequest, path),\n );\n endDecided = true;\n return streamed;\n }\n await end();\n return response;\n }\n\n // A plain return is `HttpResponse.json(data)`: one path writes the\n // context's headers and cookies onto both, and an `HttpResponse` only\n // adds its status and headers on top of them.\n const response = (isHttpResponse(data) ? data : HttpResponse.json(data)).toResponse(\n headers,\n cookies,\n );\n\n await end();\n\n return response;\n } catch (err) {\n // A middleware or handler that throws something other than a break or\n // a policy denial has already run onRequestFail, and its error goes on\n // to the server's 500 (or back to a dispatchAs caller). A throw from\n // before the middleware, such as detectLocale, skips onRequestFail but\n // ends here all the same. Either way the request still ends: without\n // this, an app pairing onRequestStart with onRequestEnd saw a start and\n // no end for exactly the requests that crashed, and the store kept its\n // user and cookies until collected.\n if (!endDecided) {\n try {\n await end();\n } catch (endErr) {\n // A throwing onRequestEnd must not replace the error the server\n // renders; destroy() has run regardless.\n console.error(endErr);\n }\n }\n throw err;\n }\n }, carried);\n }\n\n /**\n * Runs an api route in-process, as the user who made `initiator`, through\n * exactly what a client's request to `path` would go through: route match,\n * `onRequestStart`, middleware, handler, `onRequestEnd`. Answers the\n * `Response` that client would get, and throws what `handleApiRequest` throws\n * — the server's 500 rendering lives in `server/`, not here.\n *\n * It must never reach for a flat route's `exec`, however much shorter that\n * is: `exec` is the handler alone, with no auth, no policies and no rate\n * limit, and a tool call that could do more than the same user's HTTP request\n * is the one thing the MCP router promises cannot happen.\n *\n * `initiator` is an argument rather than `RequestContext.getStore().req` so a\n * caller with no ambient gemi request — a remote MCP client — only has to\n * produce one to use this. Only its origin and credentials are read. Every\n * other header describes the initiator's own body and transport:\n * `content-type` would mis-parse this body, and a copied cookie jar would\n * hand the route state nobody decided to give it. `x-forwarded-for` is left\n * behind too: it is client-written, and copying it would pass it off as part\n * of a request the server built. The initiator's address is resolved here\n * with `clientIp` instead and carried beside the model-originated marker, so\n * a tool call spends the rate-limit budget of the user who started the run\n * rather than one `unknown:<route>` budget shared by every user's agent.\n *\n * `path` is the route's path as the app routes it, without `/api`, with its\n * params filled in and any query string attached — `/42/orders?status=open`.\n * A param from a model must be `encodeURIComponent`ed by the caller: a path\n * that URL parsing would rewrite — a `..` segment walking out of the route —\n * is refused rather than resolved, as is anything under `/__gemi__`, which\n * skips the lifecycle hooks and is not an app route. So is `/auth`: its\n * routes are the framework's, and a tool call that signed out the session\n * that started the run, or signed in to a cookie nobody keeps, is never what\n * a model meant.\n *\n * `options.credentials` adds the app's own credentials to the request — a\n * cookie or a signed header its middleware reads — beside the access token,\n * never instead of it. Nothing is copied from the initiator on the app's\n * behalf: the app names each value, so an app that wants a cookie of the\n * initiator's forwarded reads it and passes it. The names that would swap\n * the identity or the framing are refused with a throw (see\n * `RESERVED_HEADERS`). The app's middleware still decides what a credential\n * is worth, so this grants nothing a direct request carrying the same\n * values would not get.\n */\n async dispatchAs(\n initiator: HttpRequest<any, any>,\n method: InProcessMethod,\n path: string,\n body?: FormData | Record<string, unknown>,\n options?: DispatchAsOptions,\n ): Promise<Response> {\n const origin = new URL(initiator.rawRequest.url).origin;\n const url = new URL(`${origin}/api${path}`);\n const expectedPathname = `/api${path.split(/[?#]/)[0]}`;\n if (\n !path.startsWith(\"/\") ||\n url.origin !== origin ||\n url.pathname !== expectedPathname ||\n url.hash !== \"\" ||\n url.pathname.startsWith(\"/api/__gemi__\") ||\n url.pathname === \"/api/auth\" ||\n url.pathname.startsWith(\"/api/auth/\")\n ) {\n throw new Error(\n `dispatchAs: \"${path}\" is not an app api path. Pass the route's own path, without \"/api\", with every param encoded.`,\n );\n }\n\n // gemi's own token, on both transports, is the only identity carried. A\n // user the initiator's global middleware signed in some other way — an\n // SSO header, an API key — is not: no global middleware runs for this\n // request and nothing from the initiator's context crosses over, so its\n // `auth` routes refuse such a user, failing closed — unless the app passes\n // that credential itself as `options.credentials`, which is the app's\n // decision to make, value by value.\n const headers = new Headers();\n const cookies: string[] = [];\n const cookieToken = initiator.cookies.get(ACCESS_TOKEN);\n if (cookieToken) {\n cookies.push(`${ACCESS_TOKEN}=${cookieToken}`);\n }\n if (options?.credentials) {\n applyCredentials(headers, cookies, options.credentials);\n }\n if (cookies.length > 0) {\n headers.set(\"Cookie\", cookies.join(\"; \"));\n }\n const headerToken = initiator.headers.get(ACCESS_TOKEN);\n if (headerToken) {\n headers.set(ACCESS_TOKEN, headerToken);\n }\n // Not a credential, but `AuthManager.getSession` gets it beside the token,\n // so a user provider that binds a session to its agent sees the same one it\n // would for the user.\n const userAgent = initiator.headers.get(\"User-Agent\");\n if (userAgent) {\n headers.set(\"User-Agent\", userAgent);\n }\n\n let requestBody: BodyInit | undefined;\n if (body instanceof FormData) {\n // No content-type of our own: the runtime writes the multipart boundary.\n requestBody = body;\n } else if (body !== undefined) {\n headers.set(\"Content-Type\", \"application/json\");\n requestBody = JSON.stringify(body);\n }\n\n const req = new Request(url, { method, headers, body: requestBody });\n markModelOriginated(req, clientIp(initiator));\n // The tool call acts for the same tenant as the request that started it.\n if (initiator.domain) {\n setRequestDomain(req, initiator.domain);\n }\n\n // Started from outside the initiator's scopes, as the server's `fetch` is.\n // `handleApiRequest` opens a fresh request store of its own, but\n // `onRequestStart` runs before it does and would otherwise see the\n // initiator's. The ORM scope is the one that matters: inside an\n // `asSystem` block, or an `asUser` for someone else, the route's queries\n // would skip or swap the policies a client's request would meet. The\n // kernel scope is kept — it is the Application, not a caller.\n return RequestContext.exit(() =>\n ormContext.exit(() => this.handleApiRequest(req)),\n );\n }\n}\n",
|
|
84
85
|
"import { timingSafeEqual } from \"node:crypto\";\nimport type { CustomDomainConfig, DomainGroupConfig, DomainsConfig } from \"./config\";\n\n/** The group key the apex itself is served under. */\nexport const ROOT_GROUP = \"\";\n/** The group key of `custom.fallback`. */\nexport const FALLBACK_GROUP = \"*\";\n\n/** Which host group a request landed in, and what its host said. */\nexport interface ResolvedDomain {\n /** The request's hostname, lowercased and without the port. */\n host: string;\n /** `\"\"` for the apex, the group's `subdomain` otherwise, `\"*\"` for the fallback. */\n group: string;\n /** A param subdomain's value, or what `custom.resolve` returned. */\n params: Record<string, string>;\n /** Whether the host is outside `domains.root`, i.e. a custom domain. */\n custom: boolean;\n}\n\nconst DEFAULT_CACHE_TTL_MS = 60_000;\nconst MAX_CACHE_ENTRIES = 10_000;\nconst LABEL = /^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/;\nconst MIN_SECRET_LENGTH = 16;\n/** An RFC 9110 field name. */\nconst HEADER_NAME = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;\nconst DEFAULT_HOST_HEADER = \"x-forwarded-host\";\n\nfunction isParamSubdomain(subdomain: string) {\n return subdomain.startsWith(\":\");\n}\n\n/**\n * Compares in constant time, so a secret cannot be recovered a character at a\n * time. The length is compared first and leaks, which `timingSafeEqual`\n * requires and which tells an attacker nothing they can walk.\n */\nexport function secretMatches(given: string | null, expected: string): boolean {\n if (given === null) {\n return false;\n }\n const a = Buffer.from(given, \"utf8\");\n const b = Buffer.from(expected, \"utf8\");\n return a.length === b.length && timingSafeEqual(a, b);\n}\n\n/** `trustProxy` in one shape: which header, and the secret that unlocks it. */\ninterface HostTrust {\n header: string;\n secret: { header: string; value: string } | null;\n}\n\nfunction hostTrustOf(trustProxy: DomainsConfig[\"trustProxy\"]): HostTrust | null {\n if (!trustProxy) {\n return null;\n }\n if (trustProxy === true) {\n return { header: DEFAULT_HOST_HEADER, secret: null };\n }\n return {\n header: (trustProxy.hostHeader ?? DEFAULT_HOST_HEADER).toLowerCase(),\n secret: trustProxy.secret\n ? { header: trustProxy.secret.header.toLowerCase(), value: trustProxy.secret.value }\n : null,\n };\n}\n\nfunction assertValidTrustProxy(trustProxy: DomainsConfig[\"trustProxy\"]) {\n if (!trustProxy || trustProxy === true) {\n return;\n }\n const { hostHeader, secret } = trustProxy;\n // One header, not a list: every header gemi reads the host from is one a\n // client may have got through, so each has to be one the proxy overwrites.\n if (\n hostHeader !== undefined &&\n (typeof hostHeader !== \"string\" || !HEADER_NAME.test(hostHeader))\n ) {\n throw new Error(\n `\\`route.domains.trustProxy.hostHeader\\` must be a single header name, e.g. \"x-forwarded-host\". Got ${JSON.stringify(hostHeader)}.`,\n );\n }\n if (!secret) {\n return;\n }\n if (typeof secret.header !== \"string\" || !HEADER_NAME.test(secret.header)) {\n throw new Error(\n `\\`route.domains.trustProxy.secret.header\\` must be a header name. Got \"${secret.header}\".`,\n );\n }\n if (secret.header.toLowerCase() === (hostHeader ?? DEFAULT_HOST_HEADER).toLowerCase()) {\n throw new Error(\n \"`route.domains.trustProxy.secret.header` names the same header as `hostHeader`; the secret needs a header of its own.\",\n );\n }\n // An unset environment variable lands here as `undefined`, and has to fail\n // the boot rather than quietly trust nothing — or, worse, anything.\n if (typeof secret.value !== \"string\" || secret.value.length < MIN_SECRET_LENGTH) {\n throw new Error(\n `\\`route.domains.trustProxy.secret.value\\` must be at least ${MIN_SECRET_LENGTH} characters. A guessable one lets any client name its own host.`,\n );\n }\n}\n\n/** Lowercased hostname without port or trailing dot; `null` if unparseable. */\nexport function normalizeHost(host: string | null | undefined): string | null {\n if (!host) {\n return null;\n }\n try {\n return new URL(`http://${host.trim()}`).hostname.toLowerCase().replace(/\\.$/, \"\") || null;\n } catch {\n return null;\n }\n}\n\n/** The same, keeping the port — for rebuilding an origin. `null` if unparseable. */\nfunction hostAndPort(host: string): string | null {\n try {\n const url = new URL(`http://${host.trim()}`);\n // `url.host` keeps userinfo out; the hostname is re-read to drop a trailing\n // dot the way `normalizeHost` does.\n const name = url.hostname.toLowerCase().replace(/\\.$/, \"\");\n return name ? (url.port ? `${name}:${url.port}` : name) : null;\n } catch {\n return null;\n }\n}\n\n/**\n * Fails the boot on a `domains` config that could never route the way it\n * reads: an empty root, a subdomain declared twice, a malformed label, two\n * param groups competing for the same label, or a custom-domain target that\n * names no group.\n */\nexport function assertValidDomainsConfig(config: DomainsConfig) {\n const root = normalizeHost(config.root);\n // `normalizeHost` alone accepts far more than a hostname, and every one of\n // these booted cleanly and then matched no request at all:\n // `https://example.com` parses down to the host `https` — a valid label, so\n // checking the labels is not enough — while `.example.com` keeps its empty\n // first label, and `example.com:8080` quietly loses the port it was given.\n // So the labels have to be valid *and* nothing may have been dropped.\n const asGiven = config.root?.trim().toLowerCase().replace(/\\.$/, \"\");\n if (!root || root !== asGiven || !root.split(\".\").every((label) => LABEL.test(label))) {\n throw new Error(\n `\\`route.domains.root\\` must be a bare hostname, e.g. \"example.com\" — no scheme, port or path. Got \"${config.root}\".`,\n );\n }\n if (config.custom && (config.custom.cacheTtlMs ?? 0) < 0) {\n throw new Error(\n `\\`route.domains.custom.cacheTtlMs\\` is ${config.custom.cacheTtlMs}; it cannot be negative. Use 0 to disable the cache.`,\n );\n }\n if (config.ask && config.ask.secret.length < MIN_SECRET_LENGTH) {\n throw new Error(\n `\\`route.domains.ask.secret\\` must be at least ${MIN_SECRET_LENGTH} characters. A guessable one is worse than leaving \\`ask\\` out.`,\n );\n }\n assertValidTrustProxy(config.trustProxy);\n const seen = new Set<string>();\n let paramGroup: DomainGroupConfig | null = null;\n for (const group of config.groups ?? []) {\n const { subdomain } = group;\n if (seen.has(subdomain)) {\n throw new Error(`\\`route.domains\\` declares the subdomain \"${subdomain}\" twice.`);\n }\n seen.add(subdomain);\n if (isParamSubdomain(subdomain)) {\n if (!/^:[A-Za-z_][A-Za-z0-9_]*$/.test(subdomain)) {\n throw new Error(\n `\"${subdomain}\" is not a valid param subdomain. It must be a single \\`:name\\` label.`,\n );\n }\n if (paramGroup) {\n throw new Error(\n `\\`route.domains\\` declares two param subdomains, \"${paramGroup.subdomain}\" and \"${subdomain}\"; a host could match either.`,\n );\n }\n paramGroup = group;\n continue;\n }\n if (group.exists) {\n throw new Error(\n `The subdomain \"${subdomain}\" is fixed, so \\`exists\\` has no param to check. It only applies to a \\`:param\\` subdomain.`,\n );\n }\n if (!subdomain.split(\".\").every((label) => LABEL.test(label))) {\n throw new Error(`\"${subdomain}\" is not a valid subdomain.`);\n }\n }\n if (config.custom && !seen.has(config.custom.group)) {\n throw new Error(\n `\\`route.domains.custom.group\\` is \"${config.custom.group}\", but no group declares that subdomain.`,\n );\n }\n // Without `exists` the param group matches every label, so the ask endpoint\n // would approve a certificate for every name anyone connects with, and a\n // scripted walk would spend the certificate authority's rate limit for the\n // whole registered domain — after which no real tenant can get one either.\n if (config.ask && paramGroup && !paramGroup.exists) {\n throw new Error(\n `\\`route.domains.ask\\` is set, so \"${paramGroup.subdomain}\" needs an \\`exists\\` to say which tenants are real. Without one every host under the root would be approved for a certificate.`,\n );\n }\n}\n\n/**\n * Maps a request's host onto one of the `route.domains` groups. Pure apart from\n * the calls into `exists` and `custom.resolve`, and the cache in front of the\n * latter.\n */\nexport class DomainResolver {\n readonly root: string;\n private readonly hostTrust: HostTrust | null;\n private readonly fixed = new Map<string, DomainGroupConfig>();\n private readonly param: (DomainGroupConfig & { name: string }) | null = null;\n private readonly custom: CustomDomainConfig | null;\n private readonly cacheTtlMs: number;\n private readonly cache = new Map<\n string,\n { value: Record<string, string> | null; expiresAt: number }\n >();\n /** In-progress `custom.resolve` calls, so concurrent misses share one. */\n private readonly inFlight = new Map<string, Promise<Record<string, string> | null>>();\n /** The `ask` secret, or `null` when the endpoint is not served. */\n readonly askSecret: string | null;\n /** The header `trustProxy.secret` arrives in, or `null` when there is none. */\n readonly proxySecretHeader: string | null;\n\n constructor(config: DomainsConfig) {\n assertValidDomainsConfig(config);\n this.root = normalizeHost(config.root)!;\n this.hostTrust = hostTrustOf(config.trustProxy);\n for (const group of config.groups ?? []) {\n if (isParamSubdomain(group.subdomain)) {\n this.param = { ...group, name: group.subdomain.slice(1) };\n } else {\n this.fixed.set(group.subdomain.toLowerCase(), group);\n }\n }\n this.custom = config.custom ?? null;\n this.cacheTtlMs = this.custom?.cacheTtlMs ?? DEFAULT_CACHE_TTL_MS;\n this.askSecret = config.ask?.secret ?? null;\n this.proxySecretHeader = this.hostTrust?.secret?.header ?? null;\n }\n\n /**\n * The host the trusted proxy says the client addressed — the first entry of\n * `trustProxy`'s host header, as sent — or `null` when there is no trusted\n * proxy, its secret is missing or wrong, or it sent no host.\n *\n * A request without the secret is not refused, just routed by its own host:\n * that is a host the client could have sent anyway, so it gains nothing, and\n * the platform's health checks and its own domain for the app keep working.\n */\n private forwardedHost(req: Request): string | null {\n const trust = this.hostTrust;\n if (!trust) {\n return null;\n }\n if (trust.secret && !secretMatches(req.headers.get(trust.secret.header), trust.secret.value)) {\n return null;\n }\n return req.headers.get(trust.header)?.split(\",\")[0]?.trim() || null;\n }\n\n /** The hostname the request is addressed to, honouring `trustProxy`. */\n hostOf(req: Request): string | null {\n return normalizeHost(this.forwardedHost(req)) ?? normalizeHost(new URL(req.url).host);\n }\n\n /**\n * The origin the client addressed, port included — behind a trusted proxy,\n * the forwarded one rather than the one the proxy reached the app on.\n *\n * The scheme follows `X-Forwarded-Proto` whether or not `trustProxy` is set\n * and its secret matches, and the host only when both are. They are gated\n * differently because the hazards are: a forged host sends a link to\n * somewhere the attacker chose, while a forged scheme only spoils the\n * attacker's own links. TLS is almost always terminated by a proxy that\n * reaches the app over plain http, so reading the scheme is what keeps a\n * cross-host URL from coming out `http://` on an `https://` page.\n */\n publicOrigin(req: Request): string {\n const url = new URL(req.url);\n const forwardedProto = req.headers.get(\"x-forwarded-proto\")?.split(\",\")[0]?.trim();\n // An allowlist, not the header's text: it is spliced into an origin, and\n // `javascript` there would build a URL that is typed absolute but that\n // nothing treats as one.\n const proto =\n forwardedProto === \"http\" || forwardedProto === \"https\"\n ? forwardedProto\n : url.protocol.replace(/:$/, \"\");\n // Through `normalizeHost` so userinfo, whitespace and an unparseable header\n // cannot ride into the origin — and back through `URL` so the port\n // survives, which `normalizeHost` drops.\n const forwardedHost = this.forwardedHost(req);\n const host = forwardedHost && normalizeHost(forwardedHost) ? hostAndPort(forwardedHost) : null;\n return `${proto}://${host ?? url.host}`;\n }\n\n /** The group serving `req`, or `null` when no group, and no fallback, serves its host. */\n async resolve(req: Request): Promise<ResolvedDomain | null> {\n const host = this.hostOf(req);\n if (!host) {\n return null;\n }\n const match = await this.match(host, req);\n if (match) {\n return match;\n }\n if (this.custom?.fallback && !this.isUnderRoot(host)) {\n return { host, group: FALLBACK_GROUP, params: {}, custom: true };\n }\n return null;\n }\n\n /**\n * Whether `host` is one the app serves in its own right — what a TLS proxy\n * asks before issuing a certificate. The fallback group does not count: it\n * would otherwise approve every host on the internet.\n */\n async allows(host: string, req: Request): Promise<boolean> {\n const normalized = normalizeHost(host);\n return normalized ? (await this.match(normalized, req)) !== null : false;\n }\n\n private isUnderRoot(host: string) {\n return host === this.root || host.endsWith(`.${this.root}`);\n }\n\n private async match(host: string, req: Request): Promise<ResolvedDomain | null> {\n if (host === this.root) {\n return { host, group: ROOT_GROUP, params: {}, custom: false };\n }\n if (host.endsWith(`.${this.root}`)) {\n const sub = host.slice(0, -(this.root.length + 1));\n const fixed = this.fixed.get(sub);\n if (fixed) {\n return { host, group: fixed.subdomain, params: {}, custom: false };\n }\n if (this.param && LABEL.test(sub)) {\n const params = { [this.param.name]: sub };\n if (this.param.exists && !(await this.param.exists(params, req))) {\n return null;\n }\n return { host, group: this.param.subdomain, params, custom: false };\n }\n return null;\n }\n if (!this.custom) {\n return null;\n }\n const params = await this.resolveCustom(host);\n return params ? { host, group: this.custom.group, params, custom: true } : null;\n }\n\n private async resolveCustom(host: string) {\n const now = Date.now();\n const cached = this.cache.get(host);\n if (cached && cached.expiresAt > now) {\n // Re-insert to move it to the end: a Map iterates in insertion order, so\n // this is what makes the eviction below least-recently-*used* rather than\n // oldest-inserted. Without it a burst of unknown hosts evicts every real\n // customer, however often they are asked for.\n this.cache.delete(host);\n this.cache.set(host, cached);\n return cached.value;\n }\n // One call per host at a time. A cold host that a hundred requests arrive\n // for at once is one `resolve`, not a hundred — the difference between a\n // cache miss and a stampede against the database behind it.\n const inFlight = this.inFlight.get(host);\n if (inFlight) {\n return inFlight;\n }\n const pending = (async () => (await this.custom!.resolve(host)) ?? null)();\n this.inFlight.set(host, pending);\n let value: Record<string, string> | null;\n try {\n value = await pending;\n } finally {\n // Before the `set` below, so a throw leaves nothing cached and nothing\n // stuck: the next request retries.\n this.inFlight.delete(host);\n }\n if (this.cacheTtlMs > 0) {\n if (this.cache.size >= MAX_CACHE_ENTRIES) {\n this.cache.delete(this.cache.keys().next().value!);\n }\n this.cache.delete(host);\n this.cache.set(host, { value, expiresAt: Date.now() + this.cacheTtlMs });\n }\n return value;\n }\n\n /** Drops cached `custom.resolve` answers — one host, or all of them. */\n forget(host?: string) {\n if (host === undefined) {\n this.cache.clear();\n } else {\n const normalized = normalizeHost(host);\n if (normalized) {\n this.cache.delete(normalized);\n }\n }\n }\n}\n",
|
|
85
|
-
"import { ApiRouteDispatcher } from \"./ApiRouteDispatcher\";\nimport { ViewRouteDispatcher } from \"./ViewRouteDispatcher\";\nimport {\n DomainResolver,\n FALLBACK_GROUP,\n ROOT_GROUP,\n secretMatches,\n type ResolvedDomain,\n} from \"./DomainResolver\";\nimport type { ApiRouteConfig, DomainGroupRouters, DomainsConfig, ViewRouteConfig } from \"./config\";\nimport { setRequestDomain, withholdFromUpstream } from \"../../http/requestDomain\";\n\n/**\n * Where a TLS proxy asks whether to issue a certificate for a host — Caddy's\n * `on_demand_tls { ask ... }`. Answered before host resolution, since the\n * proxy calls it on whatever host it reaches the app by.\n */\nexport const DOMAIN_ASK_PATH = \"/__gemi__/domains/ask\";\n\nexport interface DomainDispatchers {\n api: ApiRouteDispatcher;\n view: ViewRouteDispatcher;\n}\n\n/**\n * One api/view dispatcher pair per `route.domains` group. A group that brings\n * no routers of its own shares the root's dispatcher for that side — the same\n * instance, not a copy — so a tenant subdomain running the root app costs\n * nothing extra and keeps the root's typed routes.\n */\nexport class DomainRouter {\n static token = \"router.domains\";\n\n /** `null` when the app declares no `route.domains`: every host is the root. */\n readonly resolver: DomainResolver | null;\n /** Whether hosts outside the root are served at all — `route.domains.custom` is set. */\n readonly acceptsCustomDomains: boolean;\n private readonly groups = new Map<string, DomainDispatchers>();\n\n constructor(\n root: DomainDispatchers,\n config: { api: ApiRouteConfig; view: ViewRouteConfig; domains?: DomainsConfig },\n ) {\n this.groups.set(ROOT_GROUP, root);\n const { domains } = config;\n this.acceptsCustomDomains = Boolean(domains?.custom);\n if (!domains) {\n this.resolver = null;\n return;\n }\n this.resolver = new DomainResolver(domains);\n\n const build = (routers: DomainGroupRouters): DomainDispatchers => ({\n api: routers.api ? new ApiRouteDispatcher({ ...config.api, ...routers.api }) : root.api,\n view: routers.view ? new ViewRouteDispatcher({ ...config.view, ...routers.view }) : root.view,\n });\n for (const group of domains.groups ?? []) {\n this.groups.set(group.subdomain, build(group));\n }\n if (domains.custom?.fallback) {\n this.groups.set(FALLBACK_GROUP, build(domains.custom.fallback));\n }\n }\n\n /**\n * Resolves `req`'s host group, records it for every `HttpRequest` built over\n * `req`, and returns that group's dispatchers — `null` when no group serves\n * the host. Lives here, not in `App.fetch`, because the request's domain\n * must be recorded by the app's copy of gemi, which is the one the handlers\n * read it back from (see the note at the top of `app/App.ts`).\n */\n async route(req: Request): Promise<DomainDispatchers | null> {\n if (!this.resolver) {\n return this.dispatchers(null);\n }\n // The proxy's secret is for this app alone; a `proxy()` route forwards the\n // client's headers upstream, and must not hand it to whoever is there.\n if (this.resolver.proxySecretHeader) {\n withholdFromUpstream(req, this.resolver.proxySecretHeader);\n }\n const domain = await this.resolver.resolve(req);\n if (!domain) {\n return null;\n }\n setRequestDomain(req, domain);\n return this.dispatchers(domain);\n }\n\n /**\n * Answers a TLS proxy's on-demand \"ask\": 200 when `?domain=` names a host\n * the app serves in its own right, 404 otherwise. `null` when `req` is not\n * an ask, the app declares no `route.domains`, or `route.domains.ask` is\n * not configured or its secret does not match.\n *\n * Falling through on a bad secret rather than answering 401 is deliberate:\n * the reply to a wrong guess is then whatever the app answers for any\n * unrouted path, so the endpoint cannot be found by probing for it. The\n * answer it gives is \"is this host a tenant of yours\", which is worth\n * guarding — and each one costs the app an `exists` or `resolve` call.\n */\n async ask(req: Request): Promise<Response | null> {\n if (!this.resolver?.askSecret || req.method !== \"GET\") {\n return null;\n }\n const url = new URL(req.url);\n if (url.pathname !== DOMAIN_ASK_PATH) {\n return null;\n }\n if (!secretMatches(url.searchParams.get(\"secret\"), this.resolver.askSecret)) {\n return null;\n }\n const host = url.searchParams.get(\"domain\");\n const allowed = host ? await this.resolver.allows(host, req) : false;\n return new Response(null, { status: allowed ? 200 : 404 });\n }\n\n /** The dispatchers of `domain`'s group; the root's for `null`. */\n dispatchers(domain: ResolvedDomain | null): DomainDispatchers {\n return this.groups.get(domain?.group ?? ROOT_GROUP)!;\n }\n\n /** Every distinct view dispatcher, the root's first — for anything that has to know every view. */\n viewDispatchers(): ViewRouteDispatcher[] {\n return Array.from(new Set(Array.from(this.groups.values(), (group) => group.view)));\n }\n}\n",
|
|
86
|
+
"import { ApiRouteDispatcher } from \"./ApiRouteDispatcher\";\nimport { ViewRouteDispatcher } from \"./ViewRouteDispatcher\";\nimport {\n DomainResolver,\n FALLBACK_GROUP,\n ROOT_GROUP,\n secretMatches,\n type ResolvedDomain,\n} from \"./DomainResolver\";\nimport type { ApiRouteConfig, DomainGroupRouters, DomainsConfig, ViewRouteConfig } from \"./config\";\nimport { setRequestDomain, withholdFromUpstream } from \"../../http/requestDomain\";\n\n/**\n * Where a TLS proxy asks whether to issue a certificate for a host — Caddy's\n * `on_demand_tls { ask ... }`. Answered before host resolution, since the\n * proxy calls it on whatever host it reaches the app by.\n */\nexport const DOMAIN_ASK_PATH = \"/__gemi__/domains/ask\";\n\nexport interface DomainDispatchers {\n api: ApiRouteDispatcher;\n view: ViewRouteDispatcher;\n}\n\n/**\n * One api/view dispatcher pair per `route.domains` group. A group that brings\n * no routers of its own shares the root's dispatcher for that side — the same\n * instance, not a copy — so a tenant subdomain running the root app costs\n * nothing extra and keeps the root's typed routes.\n */\nexport class DomainRouter {\n static token = \"router.domains\";\n\n /** `null` when the app declares no `route.domains`: every host is the root. */\n readonly resolver: DomainResolver | null;\n /** Whether hosts outside the root are served at all — `route.domains.custom` is set. */\n readonly acceptsCustomDomains: boolean;\n private readonly groups = new Map<string, DomainDispatchers>();\n\n constructor(\n root: DomainDispatchers,\n config: { api: ApiRouteConfig; view: ViewRouteConfig; domains?: DomainsConfig },\n ) {\n this.groups.set(ROOT_GROUP, root);\n const { domains } = config;\n this.acceptsCustomDomains = Boolean(domains?.custom);\n if (!domains) {\n this.resolver = null;\n return;\n }\n this.resolver = new DomainResolver(domains);\n\n const build = (routers: DomainGroupRouters): DomainDispatchers => ({\n api: routers.api ? new ApiRouteDispatcher({ ...config.api, ...routers.api }) : root.api,\n view: routers.view ? new ViewRouteDispatcher({ ...config.view, ...routers.view }) : root.view,\n });\n for (const group of domains.groups ?? []) {\n this.groups.set(group.subdomain, build(group));\n }\n if (domains.custom?.fallback) {\n this.groups.set(FALLBACK_GROUP, build(domains.custom.fallback));\n }\n }\n\n /**\n * Resolves `req`'s host group, records it for every `HttpRequest` built over\n * `req`, and returns that group's dispatchers — `null` when no group serves\n * the host. Lives here, not in `App.fetch`, because the request's domain\n * must be recorded by the app's copy of gemi, which is the one the handlers\n * read it back from (see the note at the top of `app/App.ts`).\n */\n async route(req: Request): Promise<DomainDispatchers | null> {\n if (!this.resolver) {\n return this.dispatchers(null);\n }\n // The proxy's secret is for this app alone; a `proxy()` route forwards the\n // client's headers upstream, and must not hand it to whoever is there.\n if (this.resolver.proxySecretHeader) {\n withholdFromUpstream(req, this.resolver.proxySecretHeader);\n }\n const domain = await this.resolver.resolve(req);\n if (!domain) {\n return null;\n }\n setRequestDomain(req, domain);\n return this.dispatchers(domain);\n }\n\n /**\n * Answers a TLS proxy's on-demand \"ask\": 200 when `?domain=` names a host\n * the app serves in its own right, 404 otherwise. `null` when `req` is not\n * an ask, the app declares no `route.domains`, or `route.domains.ask` is\n * not configured or its secret does not match.\n *\n * Falling through on a bad secret rather than answering 401 is deliberate:\n * the reply to a wrong guess is then whatever the app answers for any\n * unrouted path, so the endpoint cannot be found by probing for it. The\n * answer it gives is \"is this host a tenant of yours\", which is worth\n * guarding — and each one costs the app an `exists` or `resolve` call.\n */\n async ask(req: Request): Promise<Response | null> {\n if (!this.resolver?.askSecret || req.method !== \"GET\") {\n return null;\n }\n const url = new URL(req.url);\n if (url.pathname !== DOMAIN_ASK_PATH) {\n return null;\n }\n if (!secretMatches(url.searchParams.get(\"secret\"), this.resolver.askSecret)) {\n return null;\n }\n const host = url.searchParams.get(\"domain\");\n const allowed = host ? await this.resolver.allows(host, req) : false;\n return new Response(null, { status: allowed ? 200 : 404 });\n }\n\n /** The dispatchers of `domain`'s group; the root's for `null`. */\n dispatchers(domain: ResolvedDomain | null): DomainDispatchers {\n return this.groups.get(domain?.group ?? ROOT_GROUP)!;\n }\n\n /** Every distinct view dispatcher, the root's first — for anything that has to know every view. */\n viewDispatchers(): ViewRouteDispatcher[] {\n return Array.from(new Set(Array.from(this.groups.values(), (group) => group.view)));\n }\n\n /**\n * Every distinct view dispatcher with the group key it is first served\n * under (`\"\"` for the root, a subdomain, `\"*\"` for the custom fallback), the\n * root's first. A group that reuses the root's view routes is not repeated.\n * For tooling that reports per route (`gemi stats`).\n */\n viewGroups(): Array<{ group: string; view: ViewRouteDispatcher }> {\n const seen = new Set<ViewRouteDispatcher>();\n const groups: Array<{ group: string; view: ViewRouteDispatcher }> = [];\n for (const [group, dispatchers] of this.groups) {\n if (seen.has(dispatchers.view)) continue;\n seen.add(dispatchers.view);\n groups.push({ group, view: dispatchers.view });\n }\n return groups;\n }\n}\n",
|
|
86
87
|
"import { HttpRequest } from \"../http\";\nimport { AuthenticationError } from \"../http/errors\";\nimport { RequestContext } from \"../http/requestContext\";\nimport { isSessionToken, migratedSessionToken, mintSessionToken } from \"./sessionToken\";\nimport type { MagicLinkTokenRow, SessionWithUser } from \"./types\";\nimport {\n countCodeAttempt,\n hashOneTimeSecret,\n oneTimeSecretMatches,\n randomDigits,\n} from \"./oneTimeCode\";\nimport {\n authConfigDefaults,\n emailCodeDefaults,\n type AuthConfig,\n type LegacySessionMigrator,\n} from \"./config\";\nimport { UserProvider } from \"./UserProvider\";\nimport { withDefaults } from \"../support/withDefaults\";\nimport { app } from \"../foundation/app\";\nimport type { CreateCookieOptions } from \"../http/requestContext\";\nimport { DomainRouter } from \"../services/router/DomainRouter\";\nimport { normalizeHost } from \"../services/router/DomainResolver\";\n\n/**\n * A session's expiry in milliseconds, or `0` — already past — for a date the\n * provider could not give us.\n *\n * `new Date(undefined).getTime()` is `NaN`, and every comparison against\n * `NaN` is false, so a column that arrived missing read as a session that\n * never expires. A date this cannot make sense of is treated as spent, which\n * costs a re-authentication and never grants one.\n */\nfunction expiryMs(value: Date | string | number | null | undefined): number {\n const ms = new Date(value ?? 0).getTime();\n return Number.isFinite(ms) ? ms : 0;\n}\n\n/**\n * How long a converted pre-0.64 token keeps resolving to its new session: at\n * least this, at most twice it. See `convertLegacySession`.\n */\nconst LEGACY_TOKEN_GRACE_MS = 10 * 60_000;\n\n/**\n * The tokens a pre-0.64 `token` may have been converted to that it still\n * resolves to: this grace bucket's and the previous one's.\n */\nfunction legacyCandidates(token: string, bucket: number): string[] {\n return [migratedSessionToken(token, bucket), migratedSessionToken(token, bucket - 1)];\n}\n\nexport class AuthManager {\n static token = \"auth\";\n\n readonly config: Required<AuthConfig>;\n\n // `<any>`: a provider typed with its own session (see `sessionSelect`) is\n // still the provider this manager drives — it reads only the expiry and the\n // user off what comes back.\n private readonly provider: UserProvider<any>;\n\n /**\n * The provider is a constructor argument rather than a config field, and the\n * distinction is the point: it defaults to the ORM-backed `UserProvider`, so\n * an application configures nothing to get working authentication, while an\n * application that must change a query subclasses it and binds the result in\n * the container.\n *\n * Not a config field because `app/config/auth.ts` is data an app edits, and a\n * persistence implementation is not: routing it through config is what made\n * the old adapter seam a decision every new app had to make before it could\n * log anybody in.\n *\n * Defaulting eagerly is safe — `UserProvider` resolves its models lazily from\n * the registry, so this touches no application module at boot.\n */\n constructor(\n config: AuthConfig = {},\n provider: UserProvider<any> = new UserProvider(),\n ) {\n this.config = {\n ...withDefaults(authConfigDefaults(config), config),\n // Nested, so the shallow merge above would drop the defaults of every\n // key the app's `emailCode` leaves out.\n emailCode: emailCodeDefaults(config.emailCode),\n };\n this.provider = provider;\n }\n\n /**\n * Everything that reads and writes users, sessions and tokens. Mirrors\n * `Illuminate\\Contracts\\Auth\\UserProvider`.\n */\n get userProvider(): UserProvider {\n return this.provider;\n }\n\n /** How `access_token` is written for `req` — every write goes through here. */\n accessTokenCookieOptions(req: HttpRequest<any, any>, expires: Date): CreateCookieOptions {\n return {\n expires,\n // The scheme the client addressed, not whether the host reads as local.\n // A browser drops a `Secure` cookie from a plain-http origin, and\n // `localhost` is the only such origin it makes an exception for — so a\n // loopback root with subdomains, `acme.lvh.me`, is served over http, is\n // not `localhost`, and could not sign in.\n secure: this.publicOrigin(req).startsWith(\"https://\"),\n httpOnly: true,\n domain: this.cookieDomain(req),\n };\n }\n\n /**\n * The origin the client addressed, through the proxy in front if there is\n * one.\n *\n * `DomainRouter` is bound by `RouteServiceProvider`, which a test that\n * exercises auth against a database need not register — and writing a cookie\n * is no reason to demand the router exist. Without it the request's own\n * origin is the answer, since there is no proxy config to consult.\n */\n private publicOrigin(req: HttpRequest<any, any>): string {\n const resolver = app().bound(DomainRouter) ? app(DomainRouter).resolver : null;\n return resolver ? resolver.publicOrigin(req.rawRequest) : new URL(req.rawRequest.url).origin;\n }\n\n /** `config.cookieDomain` when `req`'s host falls under it, else nothing. */\n cookieDomain(req: HttpRequest<any, any>): string | undefined {\n const setting = this.config.cookieDomain;\n if (!setting) {\n return undefined;\n }\n const domain =\n setting === \"root\" ? app(DomainRouter).resolver?.root : normalizeHost(setting);\n if (!domain) {\n throw new Error(\n '`auth.cookieDomain` is \"root\", but `route.domains` is not configured.',\n );\n }\n const host = req.domain?.host ?? normalizeHost(new URL(req.rawRequest.url).host);\n return host === domain || host?.endsWith(`.${domain}`) ? domain : undefined;\n }\n\n /**\n * The session `token` names, or null when there is none or it has run out.\n *\n * **Expiry is enforced here.** `expiresAt` is the idle timeout and\n * `absoluteExpiresAt` the hard cap; either one past is no session, and the\n * row is deleted. Both used to exist only as the cookie's `Expires`, which a\n * client sending the `access_token` header never honoured, so its token was\n * good for as long as the row existed.\n *\n * **The idle timeout slides.** A session used after half of its window has\n * gone is pushed to `now + sessionExpiresInHours`, never past\n * `absoluteExpiresAt`, and the cookie is written again when this request is\n * the one that carried the token. Without that, enforcing `expiresAt` would\n * sign every user out `sessionExpiresInHours` after they signed in, however\n * active they were.\n *\n * **A token from before minted tokens is no session.** It was computable\n * (see `sessionToken.ts`), so it is refused before the lookup; its row is\n * left for the operator to delete. Its user signs in again — unless the app\n * set `auth.migrateLegacySession`, which converts it instead.\n */\n async getSession(token: string, userAgent: string) {\n // A caller may ask with no token at all; that is no session, not a lookup.\n if (!token) {\n return null;\n }\n if (!isSessionToken(token)) {\n return this.config.migrateLegacySession\n ? this.convertLegacySession(token, userAgent, this.config.migrateLegacySession)\n : null;\n }\n const session = await this.userProvider.findSession({\n token,\n userAgent,\n });\n if (!session?.user) {\n return null;\n }\n\n const now = Date.now();\n const expiresAt = expiryMs(session.expiresAt);\n const absoluteExpiresAt = expiryMs(session.absoluteExpiresAt);\n const expired = expiresAt <= now || absoluteExpiresAt <= now;\n\n if (expired) {\n await this.userProvider.deleteSession({ token });\n return null;\n }\n const current = await this.slideSession(session, now);\n\n current.user[\"extension\"] = await this.config.extendSession(current.user);\n return current;\n }\n\n /**\n * The session a pre-0.64 `token` converts to, or null. Only reached when the\n * app set `auth.migrateLegacySession`.\n *\n * **Single use.** The converted session is written under a new token and the\n * old row deleted, so the old token cannot convert twice or be handed to a\n * second client as a session of its own.\n *\n * **Only if the old row is still there to take.** The delete and the write\n * are one transaction under `withLegacySessionLock`, the lock `revokeSession`\n * takes too, and the new row is written only when this transaction is the\n * one that deleted the old. A sign-out that landed after the read above and\n * before that has already deleted it, and nothing is created (#638).\n *\n * **Concurrent requests converge.** The new token is derived from the old one\n * and the current `LEGACY_TOKEN_GRACE_MS` bucket (`migratedSessionToken`), not\n * random, so every request converting the same token at once computes the\n * same one. One of them takes the old row and writes the new; the others\n * find the old row gone and read the winner's back. A request that arrives\n * after the old row is gone looks for that row under this bucket's token and\n * the previous one's, so the old token keeps resolving to the new session for\n * between one and two buckets and grants nothing after that.\n *\n * **The lifetime is new.** Before 0.64 no expiry was enforced or extended on\n * use, so the old row's expiry says nothing about whether it is still in\n * use; the application's predicate decides what is too old to convert.\n */\n private async convertLegacySession(\n token: string,\n userAgent: string,\n migrate: LegacySessionMigrator,\n ) {\n // Without a response the client would never learn the new token, and the\n // old one stops working after the grace window.\n const req = RequestContext.getStore()?.req;\n if (!req) {\n return null;\n }\n const now = Date.now();\n const bucket = Math.floor(now / LEGACY_TOKEN_GRACE_MS);\n\n let converted: string | null = null;\n const legacy = await this.userProvider.findSession({ token, userAgent });\n if (legacy?.user) {\n if (!(await migrate(legacy, { token, req, userAgent }))) {\n return null;\n }\n const candidate = migratedSessionToken(token, bucket);\n const userId = legacy.user.id;\n const claimed = await this.userProvider.withLegacySessionLock(token, async () => {\n if (!(await this.userProvider.claimLegacySession({ token }))) {\n return false;\n }\n await this.userProvider.createSessionV2({\n token: candidate,\n userId,\n userAgent,\n ...this.freshLifetime(now),\n });\n return true;\n });\n if (claimed) {\n converted = candidate;\n }\n }\n // Converted before this request, or by one that took the old row between\n // this one's read and its claim — or signed out, and then there is nothing.\n if (!converted) {\n for (const candidate of legacyCandidates(token, bucket)) {\n if ((await this.userProvider.findSession({ token: candidate, userAgent }))?.user) {\n converted = candidate;\n break;\n }\n }\n }\n if (!converted) {\n return null;\n }\n\n const session = await this.getSession(converted, userAgent);\n if (session) {\n req\n .ctx()\n .setCookie(\n \"access_token\",\n converted,\n this.accessTokenCookieOptions(req, new Date(session.expiresAt)),\n );\n }\n return session;\n }\n\n /**\n * Signs `token` out: deletes the session it names and returns that session,\n * or null when there was none. What `AuthController.signOut` revokes with.\n *\n * Looked up with `findSession` rather than `getSession`, which would slide\n * the session and write the cookie that a sign-out is clearing.\n *\n * **A pre-0.64 token, when `auth.migrateLegacySession` is set**, also ends\n * the session it was converted to (#638). For the grace window the old token\n * still resolves to that session, so a client that never picked up the new\n * cookie — a second tab, a lost response — signs out with the old one, and\n * deleting only the old row, long gone, ended nothing. The converted tokens\n * deleted are the ones `getSession` would resolve it to — this bucket's and\n * the previous one's — so once the old token no longer grants the session\n * it no longer revokes it either.\n *\n * The lookup and the deletes run under `withLegacySessionLock`, the lock a\n * conversion of the same token takes, so the two cannot interleave: either\n * the conversion commits first and this deletes what it wrote, or this\n * deletes the old row first and the conversion writes nothing.\n *\n * Without the option, or for a `v2.` token, this is the lookup and delete it\n * always was.\n */\n async revokeSession(token: string | null | undefined, userAgent: string) {\n if (!token) {\n await this.userProvider.deleteSession({ token });\n return null;\n }\n if (isSessionToken(token) || !this.config.migrateLegacySession) {\n const session = await this.userProvider.findSession({ token, userAgent });\n await this.userProvider.deleteSession({ token });\n return session;\n }\n const bucket = Math.floor(Date.now() / LEGACY_TOKEN_GRACE_MS);\n const converted = legacyCandidates(token, bucket);\n return this.userProvider.withLegacySessionLock(token, async () => {\n let session = await this.userProvider.findSession({ token, userAgent });\n for (const candidate of converted) {\n if (session?.user) break;\n session = await this.userProvider.findSession({ token: candidate, userAgent });\n }\n await this.userProvider.deleteSession({ token });\n for (const candidate of converted) {\n await this.userProvider.deleteSession({ token: candidate });\n }\n return session;\n });\n }\n\n /** The current request, when `token` arrived as its `access_token` cookie. */\n private requestCarryingCookie(token: string): HttpRequest<any, any> | null {\n const req = RequestContext.getStore()?.req;\n return req?.cookies.get(\"access_token\") === token ? req : null;\n }\n\n /**\n * Pushes `session`'s idle expiry forward when half its window has gone.\n *\n * **The session returned is the one `findSession` built**, with only the new\n * `expiresAt` taken from the write. `findSession` is where a provider shapes\n * a session — orders `user.accounts`, drops a soft-deleted membership,\n * selects an extra field — and returning `updateSession`'s row instead\n * served a differently shaped session for the same token once it was old\n * enough to slide (#619). Merging the expiry also keeps the renewal to the\n * one write it already was; nothing is re-read.\n */\n private async slideSession(session: SessionWithUser, now: number) {\n const window = this.config.sessionExpiresInHours * 3_600_000;\n if (new Date(session.expiresAt).getTime() - now >= window / 2) {\n return session;\n }\n const expiresAt = new Date(\n Math.min(now + window, new Date(session.absoluteExpiresAt).getTime()),\n );\n const updated = await this.userProvider.updateSession({\n token: session.token,\n expiresAt,\n });\n const req = this.requestCarryingCookie(session.token);\n if (req) {\n req\n .ctx()\n .setCookie(\n \"access_token\",\n session.token,\n this.accessTokenCookieOptions(req, expiresAt),\n );\n }\n if (!updated) {\n return session;\n }\n return { ...session, expiresAt: updated.expiresAt ?? expiresAt };\n }\n\n private freshLifetime(now: number) {\n return {\n expiresAt: new Date(now + this.config.sessionExpiresInHours * 3_600_000),\n absoluteExpiresAt: new Date(\n now + this.config.sessionAbsoluteExpiresInHours * 3_600_000,\n ),\n };\n }\n\n async generateMagicLink(email: string) {}\n\n async upsertSession(params: { email: string; userAgent: string }) {\n await this.userProvider.findSession({ token: \"\", userAgent: \"\" });\n }\n\n async authenticate(email: string) {\n try {\n const user = await this.userProvider.findUserByEmailAddress(email, false);\n if (!user) {\n throw new Error(`User not found with email: ${email}`);\n }\n const session = await this.createOrUpdateSession({ email, id: user.id });\n const req = new HttpRequest();\n req\n .ctx()\n .setCookie(\n \"access_token\",\n session.token,\n this.accessTokenCookieOptions(req, session.expiresAt),\n );\n if (session?.user) {\n session.user[\"extension\"] = await this.config.extendSession(\n session.user,\n );\n }\n return session;\n } catch (err) {\n console.log(err);\n }\n }\n\n async createOrUpdateSessionV2(user: { email: string; id?: number }) {\n const session = await this.createOrUpdateSession(user);\n\n let sessionExtension = null;\n\n if (session?.user) {\n sessionExtension = await this.config.extendSession(session.user);\n session.user.extension = sessionExtension;\n }\n\n return session;\n }\n\n /**\n * A new session for `user`, on every sign-in.\n *\n * The name is historical: this used to derive the token from the email and\n * the User-Agent and, finding a row under it, extend that row — without\n * checking whose it was, so a user who took over a freed email address was\n * handed its previous owner's session. Every sign-in now mints its own token\n * and its own row, bound to the id of the user who just authenticated.\n *\n * **The session returned is read back through `findSession`**, so a sign-in\n * hands out the same shape every later request gets from `getSession`. The\n * row `createSessionV2` returns has the base select and none of a provider's\n * `findSession` shaping, and every sign-in path returns this to the client or\n * passes its `user` to `extendSession` (#619). One extra lookup by its unique\n * token, on sign-in only. Should the read come back empty — a `findSession`\n * that caught a database error, or one that filters more narrowly than the\n * row just written — the created row is returned rather than failing a\n * sign-in that has already succeeded.\n */\n async createOrUpdateSession(user: { email: string; id?: number }) {\n const req = new HttpRequest();\n\n const userId =\n user.id ??\n (await this.userProvider.findUserByEmailAddress(user.email, false))?.id;\n if (!userId) {\n throw new AuthenticationError();\n }\n\n const userAgent =\n process.env.NODE_ENV === \"development\"\n ? \"local\"\n : req.headers.get(\"User-Agent\");\n const token = mintSessionToken(userId);\n const created = await this.userProvider.createSessionV2({\n token,\n userId,\n userAgent,\n ...this.freshLifetime(Date.now()),\n });\n const found = await this.userProvider.findSession({\n token,\n userAgent: userAgent ?? \"\",\n });\n return found?.user ? found : created;\n }\n\n /**\n * Issues a magic link and PIN for an existing user, as `/auth/magic-link`\n * and `Auth.createMagicLink` always have, and returns them as issued for the\n * app to mail. An address with no user gets `{}` and nothing is written.\n *\n * Since 0.88 the stored row holds hashes of both (#708); the plain values\n * exist only in what this returns.\n */\n async createMagicLinkToken(email: string) {\n const user = await this.userProvider.findUserByEmailAddress(email, false);\n\n if (user) {\n const { pin, token } = await this.issueOneTimeCode(email, 6);\n return {\n user,\n email,\n pin,\n token,\n };\n }\n\n return {};\n }\n\n /**\n * Replaces any outstanding code for `email` with a new one and stores it\n * hashed. Writes whether or not a user has the address; callers decide that.\n */\n async issueOneTimeCode(email: string, length: number) {\n await this.userProvider.deleteMagicLinkToken(email);\n\n const token = await this.config.generateMagicLinkToken(email);\n const custom = await this.config.generateCode(email);\n const pin = typeof custom === \"string\" && custom !== \"\" ? custom : randomDigits(length);\n\n await this.userProvider.createMagicLinkToken({\n email,\n token: hashOneTimeSecret(\"link\", email, token),\n pin: hashOneTimeSecret(\"pin\", email, pin),\n });\n\n return { email, pin, token };\n }\n\n /**\n * Checks a typed code against the outstanding row for `email`, and on a\n * match deletes the row, so the code works once. Every guess counts against\n * `emailCode.maxAttempts`, the right one included, before the comparison;\n * the guess past the limit deletes the row. The comparison is of keyed\n * hashes, in constant time.\n *\n * `claim: false` leaves the row for the caller to claim (with\n * `userProvider.claimMagicLinkToken`) inside a transaction of its own.\n */\n async verifyOneTimeCode(\n email: string,\n code: unknown,\n options: { claim?: boolean } = {},\n ): Promise<\n | { status: \"ok\"; row: MagicLinkTokenRow }\n | { status: \"invalid\" | \"expired\" | \"too_many_attempts\" }\n > {\n const { expiresInMinutes, maxAttempts } = this.config.emailCode;\n const row = await this.userProvider.findMagicLinkTokenByEmail(email);\n if (!row) {\n // Hashed anyway, so an address with no code costs what a wrong code does.\n oneTimeSecretMatches(\"pin\", email, null, code);\n return { status: \"invalid\" };\n }\n\n const issuedAt = expiryMs(row.createdAt);\n if (issuedAt + expiresInMinutes * 60_000 <= Date.now()) {\n oneTimeSecretMatches(\"pin\", email, null, code);\n return { status: \"expired\" };\n }\n\n if (!(await countCodeAttempt(row.id, issuedAt, maxAttempts, expiresInMinutes))) {\n await this.userProvider.claimMagicLinkToken(row.id);\n return { status: \"too_many_attempts\" };\n }\n\n if (!oneTimeSecretMatches(\"pin\", email, row.pin, code)) {\n return { status: \"invalid\" };\n }\n\n if (options.claim !== false && !(await this.userProvider.claimMagicLinkToken(row.id))) {\n // A concurrent request with the same code got there first.\n return { status: \"invalid\" };\n }\n\n return { status: \"ok\", row };\n }\n\n /**\n * The link counterpart of `verifyOneTimeCode`, for\n * `/auth/sign-in/magic-link`: valid for `emailCode.linkExpiresInMinutes`,\n * single use. Not attempt-counted: a 256-bit token is not guessed.\n */\n async verifyMagicLinkToken(email: string, token: unknown): Promise<boolean> {\n const row = await this.userProvider.findMagicLinkTokenByEmail(email);\n const matches = oneTimeSecretMatches(\"link\", email, row?.token, token);\n if (!row || !matches) {\n return false;\n }\n const issuedAt = expiryMs(row.createdAt);\n if (issuedAt + this.config.emailCode.linkExpiresInMinutes * 60_000 <= Date.now()) {\n return false;\n }\n return await this.userProvider.claimMagicLinkToken(row.id);\n }\n}\n",
|
|
87
88
|
"import type { User } from \"../auth/types\";\nimport { AuthManager } from \"../auth/AuthManager\";\nimport { sessionUser } from \"../auth/accessToken\";\nimport { signInLocation } from \"../auth/signInRedirect\";\nimport { INTENDED_URL_PARAM, safeRedirectPath } from \"../utils/intendedUrl\";\nimport {\n AuthenticationError,\n InsufficientPermissionsError,\n} from \"../http/errors\";\nimport { RequestContext } from \"../http/requestContext\";\nimport { Facade } from \"./Facade\";\n\nexport class Auth extends Facade {\n static getFacadeAccessor() {\n return AuthManager;\n }\n\n /**\n * The signed-in user, or an `AuthenticationError` — a 401, and a redirect to\n * sign-in for a view.\n *\n * Agrees with the `auth` middleware on who that is, so a route with it and a\n * route without it see the same user:\n *\n * - **A user on the request context** is returned as it is: one a global\n * middleware or a route middleware put there, or one an earlier lookup\n * found. See \"Who counts as signed in\" in docs/middleware.md.\n * - **Otherwise the `access_token` cookie or header** is looked up, through\n * the same reader the middleware uses, and the user found is put on the\n * context for the rest of the request.\n */\n static async user(): Promise<User> {\n const requestContextStore = RequestContext.getStore();\n\n let user: User | null = requestContextStore?.user;\n\n if (!user) {\n user = await sessionUser(this.getFacadeRoot(), requestContextStore?.req);\n if (user) {\n requestContextStore?.setUser(user);\n }\n }\n\n if (user) {\n return user;\n }\n throw new AuthenticationError({\n redirectTo: signInLocation(\n requestContextStore?.req,\n this.getFacadeRoot().config.signInPath,\n ),\n });\n }\n\n /**\n * Where to send a user who has just signed in: the page they were turned\n * away from, which `AuthenticationMiddleware` put on the sign-in URL as\n * `?redirect=`, or `auth.redirectPath` when there is none.\n *\n * Reads the current request's query, so call it from the sign-in page's own\n * loader or from a controller the sign-in page posts to with its query\n * forwarded. Anything but a path on this origin is ignored — the parameter\n * is attacker-writable, and passing it on unchecked is an open redirect.\n *\n * ```ts\n * Redirect.to(Auth.intendedUrl() as any);\n * ```\n */\n static intendedUrl(fallback?: string): string {\n const req = RequestContext.getStore()?.req;\n return safeRedirectPath(\n req?.search.get(INTENDED_URL_PARAM),\n fallback ?? this.getFacadeRoot().config.redirectPath,\n );\n }\n\n static async guard(\n fn: (user: User) => Promise<boolean> | boolean,\n ): Promise<void> {\n // With no user this throws `AuthenticationError` (401, and a redirect to\n // sign-in for a view), before `fn` ever runs. Only a known user can be\n // refused with the 403 below.\n const user = await Auth.user();\n\n // An error thrown by `fn` propagates as itself. Turning it into a 403 would\n // report a database outage to the client as \"you may not do this\" and hide\n // it from `onRequestFail`; it still refuses the request either way.\n if (!(await fn(user))) {\n throw new InsufficientPermissionsError();\n }\n }\n\n static async guardSafe(\n fn: (user: User) => Promise<boolean> | boolean,\n ): Promise<boolean> {\n // Like `guard`, this throws `AuthenticationError` with no user; `false`\n // means a known user the predicate refused.\n const user = await Auth.user();\n\n try {\n return await fn(user);\n } catch (err) {\n return false;\n }\n }\n\n static async authenticate(email: string) {\n const container = this.getFacadeRoot();\n return await container.authenticate(email);\n }\n\n static async createMagicLink(email: string) {\n const container = this.getFacadeRoot();\n return await container.createMagicLinkToken(email);\n }\n}\n",
|
|
88
89
|
"import type { RPC } from \"../client/rpc\";\nimport type { UrlParser } from \"../client/types\";\nimport type { ApiRouterHandler } from \"../http/ApiRouter\";\nimport { RequestContext } from \"../http/requestContext\";\nimport { ServerQueryStore, type ServerQueryEntry } from \"../services/router/ServerQueryStore\";\nimport { createServerQueryFetcher } from \"../services/router/serverQueryFetcher\";\n\ntype GetRPC = {\n [K in keyof RPC as K extends `GET:${infer P}` ? P : never]: RPC[K];\n};\n\ntype Data<T extends keyof GetRPC> = GetRPC[T] extends ApiRouterHandler<\n any,\n infer Data,\n any\n>\n ? Awaited<Data>\n : never;\n\ntype QueryFacadeOptions<T extends keyof GetRPC> = {\n search?: Record<string, string | number | boolean | null>;\n params?: Partial<UrlParser<T>>;\n};\n\nexport class Query {\n private static ensure<T extends keyof GetRPC>(\n path: T,\n options: QueryFacadeOptions<T> = {},\n ): ServerQueryEntry {\n const ctx = RequestContext.getStore();\n\n if (ctx.req.kind === \"api\") {\n throw new Error(\"Query.prefetch() cannot be called from an API request\");\n }\n\n // The view router creates the store up front; this lazy fallback keeps the\n // facade usable anywhere else a view-kind request context exists.\n ctx.serverQueries ??= new ServerQueryStore(\n createServerQueryFetcher(ctx.req.rawRequest),\n );\n\n return ctx.serverQueries.ensure(path, options, \"prefetch\");\n }\n\n /**\n * Start the query AND wait for it — the response cannot begin until it\n * resolves, so its data is part of the first paint. Use for data the shell\n * itself needs; `prefetch` for everything that may stream.\n */\n static async instant<T extends keyof GetRPC>(\n path: T,\n ...args: [options?: QueryFacadeOptions<T>]\n ): Promise<Data<T>> {\n const entry = Query.ensure(path, args[0]);\n await entry.promise;\n if (entry.status === \"rejected\") {\n throw entry.error;\n }\n return entry.data as Data<T>;\n }\n\n /**\n * Start the query now, in parallel with everything else this request does,\n * without blocking the response on it. A `useQuery` for the same path and\n * search renders with this data the moment it lands — in the document\n * payload when it wins the render, streamed into the page when it doesn't.\n */\n static prefetch<T extends keyof GetRPC>(\n path: T,\n ...args: [options?: QueryFacadeOptions<T>]\n ) {\n Query.ensure(path, args[0]);\n }\n\n /**\n * Declare that this route primes nothing on purpose, silencing the dev-mode\n * late-discovery hints for the request. Priming is not free — prefetched\n * data is re-fetched and streamed into every client-navigation payload for\n * the route, even when the client already holds it — so a handler that\n * deliberately leaves a heavy query to `useQuery`'s cache-then-revalidate\n * can say so instead of being nagged.\n */\n static noPrefetch() {\n const ctx = RequestContext.getStore();\n\n if (ctx.req.kind === \"api\") {\n throw new Error(\"Query.noPrefetch() cannot be called from an API request\");\n }\n\n ctx.serverQueries ??= new ServerQueryStore(\n createServerQueryFetcher(ctx.req.rawRequest),\n );\n ctx.serverQueries.muteDiscoveryHints();\n }\n}\n",
|
|
@@ -96,7 +97,7 @@
|
|
|
96
97
|
"import type { FeatureKey } from \"../client/rpc\";\nimport type { FeatureSubject } from \"../services/features/context\";\nimport {\n FeatureManager,\n type FeatureScope,\n type FeatureSetOptions,\n} from \"../services/features/FeatureManager\";\nimport type { FeatureEvaluation, FeatureListing } from \"../services/features/types\";\nimport { Facade } from \"./Facade\";\n\n/**\n * Features on the server.\n *\n * Keys are typed against the application's `app/features` declarations, so a\n * typo is a compile error rather than a feature that is silently always off.\n *\n * ```ts\n * if (await Features.enabled(\"new-checkout\")) { ... }\n *\n * // In a job or cron tick, where there is no request to read a user from:\n * if (await Features.for({ user }).enabled(\"digest-v2\")) { ... }\n * ```\n *\n * ## Everything is async, and there is no sync variant\n *\n * After the boot-time warm-up every call settles in a microtask with no I/O —\n * the snapshot is in memory and refreshes behind the request. The promise is\n * kept anyway because the *first* call in a cold process does hit the database,\n * and because a source that is not the local table will too. A sync variant\n * would have to answer that case with \"off\", which is a feature silently\n * disappearing during exactly the window a deploy is rolling.\n *\n * ## The ambient user\n *\n * Read from the request store, not `Auth.user()` — features must be evaluable on\n * an anonymous page without throwing. On a route with no `auth` middleware,\n * where nothing has resolved a session, a `when` that reads `ctx.user` sees\n * `null`.\n */\nexport class Features extends Facade {\n static getFacadeAccessor() {\n return FeatureManager;\n }\n\n /** Whether the feature is on for this request. */\n static enabled(key: FeatureKey): Promise<boolean> {\n return this.getFacadeRoot().enabled(key as string);\n }\n\n /**\n * Every client-visible feature for this request. This is what the SSR payload\n * carries.\n */\n static all(): Promise<Record<string, boolean>> {\n return this.getFacadeRoot().forClient();\n }\n\n /**\n * Value plus why.\n *\n * **Server-side only.** `reason` distinguishes \"targeted by name\" from \"landed\n * in the rollout\", which is a fact about the viewer — never serialize it into\n * a response.\n */\n static explain(key: FeatureKey): Promise<FeatureEvaluation> {\n return this.getFacadeRoot().explain(key as string);\n }\n\n /** Evaluation against an explicit subject rather than the ambient request. */\n static for(subject: FeatureSubject): FeatureScope {\n return this.getFacadeRoot().for(subject);\n }\n\n /**\n * Every feature declared in the code, with its switch — the list an admin\n * screen renders.\n *\n * The declarations are what exists. A feature is here because `app/features`\n * declares it, never because a row was inserted; `active` is `undefined` for a\n * feature that has been deployed but never switched on, which is deliberately\n * distinct from a row that says `false`.\n *\n * Check `unavailable` before rendering `active`. It means no snapshot has ever\n * loaded, so the switches are unknown rather than absent.\n *\n * **Server-side only, and the route must be gated.** The listing includes\n * `serverOnly` features — whose keys are the thing `serverOnly` exists to keep\n * out of the payload — and every descriptor carries `rollout` and `targeted`,\n * which describe who is in an experiment.\n *\n * ```ts\n * // app/http/routes/api.ts\n * \"/admin/features\": this.get([AdminFeatureController, \"index\"]).middleware([\"admin\"]),\n *\n * // app/http/controllers/AdminFeatureController.ts\n * public async index() {\n * return await Features.list();\n * }\n * ```\n */\n static list(): Promise<FeatureListing> {\n return this.getFacadeRoot().list();\n }\n\n /**\n * Switches a feature on or off through the configured source, and\n * `invalidate()`s so this process sees it immediately.\n *\n * ```ts\n * public async update(\n * request: HttpRequest<{ active: boolean }, { key: string }>,\n * ) {\n * const input = await request.input();\n *\n * await Features.set(request.params.key, input.get(\"active\"), {\n * actor: await Auth.user(),\n * });\n *\n * return await Features.list();\n * }\n * ```\n *\n * The key accepts any `string`, unlike `enabled()`: the caller is almost\n * always an admin route whose key is a route param, and the declared keys\n * still autocomplete. A typo is caught at runtime instead, before anything is\n * written. Throws:\n *\n * - `UndeclaredFeatureError` for a key `app/features` does not declare. A row\n * for it would be ignored, so the write would create a switch that looks\n * live and does nothing.\n * - `TypeError` for an `active` that is not a boolean, or an `actor` that\n * identifies nobody.\n * - `FeatureSourceReadOnlyError` when the configured source has no `write()`.\n * - `FeatureReloadError` when the write landed and the reload did not — see\n * `invalidate()`.\n *\n * `actor` is recorded as the row's `updatedBy` — a string as given, a user by\n * `publicId` (falling back to `id`) — when the source keeps one. The database\n * source does when the model has the optional `updatedBy String?` column, and\n * `list()` then reports it on each descriptor. Without the column the write\n * still happens and the actor is dropped, with a warning logged once.\n *\n * **Process-local, like `invalidate()`.** Other instances converge within\n * `ttl`.\n */\n static set(\n key: FeatureKey | (string & {}),\n active: boolean,\n options?: FeatureSetOptions,\n ): Promise<void> {\n return this.getFacadeRoot().set(key, active, options);\n }\n\n /** Reloads this process's snapshot now, rather than waiting for the TTL. */\n static refresh(): Promise<void> {\n return this.getFacadeRoot().refresh();\n }\n\n /**\n * Call this after writing to the `FeatureFlag` table yourself. `set()` calls\n * it for you.\n *\n * ```ts\n * public async update(\n * request: HttpRequest<{ active: boolean }, { key: string }>,\n * ) {\n * const input = await request.input();\n *\n * await FeatureFlag.update({\n * where: { key: request.params.key },\n * data: { active: input.get(\"active\") },\n * });\n *\n * await Features.invalidate();\n * return await Features.list();\n * }\n * ```\n *\n * Unlike `refresh()` this never settles on a load that started before it was\n * called, so the `list()` above reflects the write that precedes it. It also\n * clears the request's evaluation memo, so a feature read earlier in the same\n * request is re-evaluated rather than answered from before the write.\n *\n * **Throws `FeatureReloadError` when the reload fails.** The write landed and\n * the cache did not follow, so the switches in memory may still predate it;\n * returning normally would present them as the result of the update. This is\n * the one call in the subsystem that fails loudly — everywhere else an outage\n * means \"keep serving what we have\", which is right for evaluation and wrong\n * for an operator watching their own change.\n *\n * **Process-local.** The other instances are still serving their own\n * snapshots and converge within `ttl` — there is no cross-instance\n * invalidation. What this fixes is the window that reads as a bug: the admin\n * who flips a switch and is told for the next thirty seconds that nothing\n * happened.\n */\n static invalidate(): Promise<void> {\n return this.getFacadeRoot().invalidate();\n }\n}\n",
|
|
97
98
|
"import type { SQL } from \"bun\";\nimport type { DatabaseConnection } from \"../database/Connection\";\nimport { DatabaseManager } from \"../database/DatabaseManager\";\nimport type { Dialect } from \"../database/dialect\";\nimport type { DatabaseSchema } from \"../database/introspect/types\";\nimport { app } from \"../foundation/app\";\nimport {\n assertConnectionUsable,\n currentConnectionName,\n currentTransaction,\n runOnConnection,\n withTransaction,\n} from \"../orm/context\";\nimport { dialectFor } from \"../orm/dialect\";\nimport { renderFragment, type SqlFragment } from \"../orm/sql\";\nimport { Facade } from \"./Facade\";\n\n/**\n * The raw-SQL surface, pointed at one connection.\n *\n * `DB` itself is one of these — the one that resolves the **ambient**\n * connection per call — and `DB.connection(name)` returns one bound to a name.\n * Written once rather than twice so the two cannot drift: a fragment run\n * through a named connection has to reach the driver by exactly the path\n * `DB.query` does, or the ambient transaction, the placeholder numbering and\n * the string refusal would each be a thing that works on one of them.\n *\n * Every method resolves the manager, the connection and the dialect **per\n * call** and captures none of them, which is the rule `Model.$exec` follows and\n * what keeps the connection swappable in tests.\n */\nexport class ConnectionQueries {\n /**\n * `undefined` means *whichever connection is ambient*, which is the default\n * one unless an enclosing transaction or `Model.on` named another. That is\n * the mode `DB`'s own statics use, and it is why an unqualified `DB.query`\n * inside `DB.connection(\"analytics\").transaction(...)` joins that transaction\n * instead of being refused by it.\n */\n constructor(private readonly bound?: string) {}\n\n /** The name this handle will use for the call happening now. */\n get name(): string {\n return this.bound ?? currentConnectionName();\n }\n\n /**\n * The Bun `SQL` client. Tagged-template queries go through here.\n *\n * **The pool, not the open transaction.** `DB.sql` has always been Bun's own\n * template and has never joined the ambient transaction — on Postgres it runs\n * on a pooled connection and survives a rollback — and a named handle does\n * not change that, only which pool it is. `query` and `execute` are the ones\n * that join; reach for them when the difference matters.\n *\n * **This getter throws where the methods reject**, and it cannot do\n * otherwise: an accessor has nowhere to put a rejection. So\n * `DB.connection(\"typo\").sql` throws `UnknownConnectionError` synchronously,\n * and reading it while a transaction is open on another connection throws\n * `CrossConnectionTransactionError` the same way. `query`, `execute` and\n * `transaction` are `async` precisely so a `.catch()` cannot miss those.\n */\n get sql(): SQL {\n return this.connection().sql;\n }\n\n /**\n * Which database is in use, inferred from the connection URL. Read this when\n * generating SQL that differs across databases (upserts, `RETURNING`,\n * autoincrement, boolean and timestamp types).\n *\n * Throws rather than rejects, for the reason given on `sql` above.\n */\n get dialect(): Dialect {\n return this.connection().dialect;\n }\n\n // Runs a composed fragment and returns its rows.\n //\n // const where = filters.length ? sql`where ${join(filters, \" and \")}` : empty\n // const rows = await DB.query(sql`select * from \"Product\" ${where}`)\n //\n // Two things it does that `DB.sql` does not, and they are the reason it\n // exists rather than being sugar:\n //\n // - It takes a **fragment**, so a predicate can be built as a value and\n // passed around. See `orm/sql.ts` for why that shape is the one raw SQL\n // actually needs.\n // - It runs on the **ambient transaction** when there is one. A raw statement\n // that quietly escapes `Model.transaction` and commits while its neighbours\n // roll back is worse than no raw statement at all — so this resolves the\n // handle exactly as `Model.$exec` does, through `currentTransaction()`.\n //\n // A plain string is refused. That is deliberate: accepting one would make an\n // interpolated template the path of least resistance, which is the injection\n // this whole mechanism exists to keep closed. `unsafeSql` is the door, and it\n // is named so that using it is a decision.\n //\n // `async` rather than returning the driver's promise directly, so that a\n // rejected fragment — a plain string, a parameter count over the ceiling —\n // *rejects* instead of throwing synchronously. An API that does one sometimes\n // and the other otherwise is a footgun: `DB.query(...).catch(…)` would miss\n // exactly the errors this refuses to run.\n async query<T = any>(fragment: SqlFragment): Promise<T[]> {\n return (await this.run(fragment, \"query\")) as T[];\n }\n\n // The same, for a statement whose answer is *how many rows it touched*.\n //\n // const won = await DB.execute(\n // sql`update \"Reservation\" set status = 'claimed'\n // where id = ${id} and status = 'reserved'`,\n // )\n // if (won === 0) { /* somebody else claimed it first */ }\n //\n // The count is the concurrency primitive there, not a diagnostic: 1 means this\n // caller won the compare-and-swap and 0 means it lost, and an API that\n // discarded it could not express that at all.\n //\n // **Where the number comes from.** Bun puts it on `count`, and leaves\n // `affectedRows` null — measured on both dialects rather than read from a\n // changelog, for `update`, `delete`, `insert`, a statement matching nothing,\n // and one with `returning`.\n //\n // `result.count` on what is otherwise an *array* reads like a bug, so: Bun\n // returns an array with `count`, `command` and `lastInsertRowid` hung off it,\n // on every statement including the ones that return no rows at all. A write\n // without `returning` is therefore a zero-length array whose `count` is the\n // number of rows it touched, and a write *with* one is an array of the rows\n // whose `count` matches their number. `compile/write.ts` records the same measurement\n // from the other side: the *ORM's* counts come from `RETURNING` instead,\n // because there the statement shape is ours to choose and an exact count that\n // depends on nothing undocumented is worth a key column per row. Here the\n // statement is the caller's, so there is nothing to add a `RETURNING` to.\n async execute(fragment: SqlFragment): Promise<number> {\n const result = await this.run(fragment, \"execute\");\n return Number((result as { count?: unknown })?.count ?? 0);\n }\n\n // Runs the callback inside a transaction, committing when it resolves and\n // rolling back if it throws. The callback still receives the raw handle, as\n // it always has.\n //\n // It goes through the ORM's `withTransaction` rather than straight to\n // `sql.begin` so that the two transaction systems are one: a `User.create`\n // inside a `DB.transaction` joins it instead of committing separately on a\n // pooled connection, and a `DB.transaction` nested inside a\n // `Model.transaction` becomes a savepoint instead of throwing (Bun refuses\n // `begin` inside a transaction). Two systems that silently ignored each other\n // would be worse than either alone — a rollback would leave half the work\n // committed.\n //\n // The slow-transaction threshold comes from the same `database` config as it\n // does for the ORM, so a `DB.transaction` holding a connection too long warns\n // exactly as a `Model.transaction` would. Same reason as above: one system.\n //\n // On a named connection the whole callback runs with that connection ambient,\n // so a `User.create` inside `DB.connection(\"analytics\").transaction(...)`\n // joins the transaction rather than opening a second one on the hot path.\n //\n // `async` so that a handle used inside a transaction on another connection\n // *rejects* rather than throwing synchronously — the same reason `query`\n // above is, and the same `.catch()` that would otherwise miss it.\n async transaction<T>(fn: (tx: SQL) => Promise<T>): Promise<T> {\n const name = this.name;\n const connection = this.connection(name);\n\n return withTransaction(\n connection.sql,\n (tx) => runOnConnection(name, () => fn(tx)),\n {\n slowTransactionThreshold: connection.config.slowTransactionThreshold,\n connection: name,\n },\n );\n }\n\n // The schema of the live database, read back from its own catalog: every\n // table, its columns and their types, its primary key, and the foreign keys\n // that relate it to the others.\n //\n // const { tables } = await DB.schema()\n // tables.find((t) => t.name === \"Post\")?.relations\n // // [{ columns: [\"authorId\"], referencedTable: \"User\", referencedColumns: [\"id\"], … }]\n //\n // **What the database says, not what the models say.** The ORM's schema is\n // generated from Prisma and never checked against the database; this is the\n // database's side of that, on every dialect including MySQL, where\n // `query` itself is not supported yet.\n //\n // The introspection code is loaded on the first call, not with the facade.\n // It is a diagnostic most apps never run, so nothing that imports `DB` pays\n // for it.\n //\n // On the ambient transaction when there is one, like `query`: a table created\n // earlier in the same transaction is in the answer. `async` for the same\n // reason as the others.\n async schema(): Promise<DatabaseSchema> {\n const db = this.connection();\n const { introspect } = await import(\"../database/introspect/index.js\");\n return introspect(this.handle() ?? db.sql, db.dialect);\n }\n\n private run(fragment: SqlFragment, operation: string) {\n const db = this.connection();\n // Per call, never captured: the same rule `Model.$exec` follows, and what\n // keeps the connection swappable in tests.\n const { text, values } = renderFragment(\n fragment,\n dialectFor(db.dialect),\n operation,\n );\n return (this.handle() ?? db.sql).unsafe(text, values);\n }\n\n /**\n * The open transaction, but only when it belongs to this handle's connection.\n *\n * `assertConnectionUsable` has already refused the case where they differ, so\n * reaching this with a mismatch is impossible — except for the unqualified\n * handle, whose name *is* the transaction's. The comparison is kept anyway\n * because it is what makes that reasoning local: nothing here has to know\n * which caller checked what.\n */\n private handle() {\n const tx = currentTransaction();\n if (tx === undefined) return undefined;\n return currentConnectionName() === this.name ? tx : undefined;\n }\n\n private connection(name = this.name): DatabaseConnection {\n assertConnectionUsable(name);\n return app(DatabaseManager).connection(name);\n }\n}\n\n/** The unqualified handle: whichever connection is ambient, per call. */\nconst ambient = new ConnectionQueries();\n\n// Access to the app's database connections. Bun's `SQL` client is a tagged\n// template, so queries read the same here as they do in Bun's own docs:\n//\n// const users = await DB.sql`select * from users where id = ${id}`\n//\n// Values interpolated into the template are bound as parameters, not\n// concatenated into the SQL string — `${id}` is a placeholder, so this is not a\n// SQL injection risk.\n//\n// Every static here works on the **ambient** connection: the default one,\n// unless an enclosing `DB.connection(name).transaction(...)` named another.\n// `DB.connection(name)` is the way to name one explicitly.\nexport class DB extends Facade {\n static getFacadeAccessor() {\n return DatabaseManager;\n }\n\n /**\n * The raw-SQL surface for a named connection.\n *\n * const rows = await DB.connection(\"analytics\").query(sql`…`)\n * await DB.connection(\"analytics\").transaction(async () => { … })\n *\n * The names are the keys of `connections` in `app/config/database.ts`, plus\n * `\"default\"` for the top-level `url`. An unknown one raises\n * `UnknownConnectionError` when the handle is used, listing what is\n * configured — never a silent fall back to the default, which would put the\n * query on precisely the pool the caller was trying to stay off.\n *\n * A transaction cannot span two connections. Using a named handle while a\n * transaction is open on another connection raises\n * `CrossConnectionTransactionError` rather than running the statement outside\n * that transaction, where it would survive the rollback.\n */\n // Built per call rather than memoised by name. A handle is one string and a\n // few methods that resolve everything else per call, so caching it saves an\n // allocation — and a `Map` keyed on the caller's string is a slow leak the\n // moment a name reaches it from a request, since an unknown name is not\n // rejected until the handle is *used*. Nothing is worth keeping here.\n static connection(name: string): ConnectionQueries {\n return new ConnectionQueries(name);\n }\n\n // The Bun `SQL` client. Tagged-template queries go through here.\n static get sql(): SQL {\n return ambient.sql;\n }\n\n // Which database is in use, inferred from the connection URL. Read this when\n // generating SQL that differs across databases (upserts, `RETURNING`,\n // autoincrement, boolean and timestamp types).\n static get dialect(): Dialect {\n return ambient.dialect;\n }\n\n // Runs a composed fragment and returns its rows, on the ambient transaction\n // when there is one. See `ConnectionQueries.query`, which is the whole of it.\n static query<T = any>(fragment: SqlFragment): Promise<T[]> {\n return ambient.query<T>(fragment);\n }\n\n // The same, for a statement whose answer is *how many rows it touched* — the\n // compare-and-swap primitive. See `ConnectionQueries.execute`.\n static execute(fragment: SqlFragment): Promise<number> {\n return ambient.execute(fragment);\n }\n\n // Runs the callback inside a transaction, committing when it resolves and\n // rolling back if it throws. One transaction system with the ORM's, so a\n // `User.create` inside this joins it. See `ConnectionQueries.transaction`.\n static transaction<T>(fn: (tx: SQL) => Promise<T>): Promise<T> {\n return ambient.transaction(fn);\n }\n\n // The schema of the live database: tables, columns and their types, primary\n // keys and foreign-key relations. Loads its code on first use. See\n // `ConnectionQueries.schema`.\n static schema(): Promise<DatabaseSchema> {\n return ambient.schema();\n }\n\n /** Closes every configured connection, not only the default one. */\n static close(): Promise<void> {\n return this.getFacadeRoot().close();\n }\n}\n"
|
|
98
99
|
],
|
|
99
|
-
"mappings": "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",
|
|
100
|
-
"debugId": "
|
|
100
|
+
"mappings": "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",
|
|
101
|
+
"debugId": "48421F6974C91AD564756E2164756E21",
|
|
101
102
|
"names": []
|
|
102
103
|
}
|