@lovrozagar/honey 0.6.8 → 0.7.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/README.md +514 -192
- package/bin/honey.js +25 -0
- package/dist/accepts.d.ts +7 -1
- package/dist/accepts.d.ts.map +1 -1
- package/dist/accepts.js +126 -0
- package/dist/accepts.js.map +1 -0
- package/dist/body-kind.d.ts +26 -0
- package/dist/body-kind.d.ts.map +1 -0
- package/dist/body-kind.js +70 -0
- package/dist/body-kind.js.map +1 -0
- package/dist/body-limit.d.ts +5 -1
- package/dist/body-limit.d.ts.map +1 -1
- package/dist/body-limit.js +126 -0
- package/dist/body-limit.js.map +1 -0
- package/dist/build/index.d.ts +19 -3
- package/dist/build/index.d.ts.map +1 -1
- package/dist/build/index.js +173 -0
- package/dist/build/index.js.map +1 -0
- package/dist/cli-args.d.ts +33 -0
- package/dist/cli-args.d.ts.map +1 -0
- package/dist/cli-args.js +102 -0
- package/dist/cli-args.js.map +1 -0
- package/dist/cli-go/auth.go +26 -0
- package/dist/cli-go/config.go +192 -0
- package/dist/cli-go/errors.go +75 -0
- package/dist/cli-go/multipart.go +79 -0
- package/dist/cli-go/output.go +163 -0
- package/dist/cli-go/root.go +30 -0
- package/dist/cli-go/stream.go +88 -0
- package/dist/cli-go/version.go +5 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +209 -0
- package/dist/cli.js.map +1 -0
- package/dist/client/defaults.js +48 -0
- package/dist/client/defaults.js.map +1 -0
- package/dist/client/error.d.ts +35 -0
- package/dist/client/error.d.ts.map +1 -1
- package/dist/client/error.js +71 -0
- package/dist/client/error.js.map +1 -0
- package/dist/client/http.d.ts +67 -8
- package/dist/client/http.d.ts.map +1 -1
- package/dist/client/http.js +571 -0
- package/dist/client/http.js.map +1 -0
- package/dist/client/index.d.ts +3 -2
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +95 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/path.d.ts +26 -0
- package/dist/client/path.d.ts.map +1 -0
- package/dist/client/path.js +163 -0
- package/dist/client/path.js.map +1 -0
- package/dist/client/redirect-policy.d.ts +12 -0
- package/dist/client/redirect-policy.d.ts.map +1 -0
- package/dist/client/redirect-policy.js +20 -0
- package/dist/client/redirect-policy.js.map +1 -0
- package/dist/client/sdk.d.ts +36 -0
- package/dist/client/sdk.d.ts.map +1 -1
- package/dist/client/sdk.js +292 -0
- package/dist/client/sdk.js.map +1 -0
- package/dist/client/sse.d.ts +13 -0
- package/dist/client/sse.d.ts.map +1 -1
- package/dist/client/sse.js +129 -0
- package/dist/client/sse.js.map +1 -0
- package/dist/client/types.js +2 -0
- package/dist/client/types.js.map +1 -0
- package/dist/client/ws.d.ts +9 -2
- package/dist/client/ws.d.ts.map +1 -1
- package/dist/client/ws.js +112 -0
- package/dist/client/ws.js.map +1 -0
- package/dist/client-go/errors.go +236 -0
- package/dist/client-go/export.go +44 -0
- package/dist/client-go/invalidation.go +371 -0
- package/dist/client-go/nullable.go +62 -0
- package/dist/client-go/realtime.go +354 -0
- package/dist/client-go/result.go +20 -0
- package/dist/client-go/runtime.go +975 -0
- package/dist/client-go/sse.go +159 -0
- package/dist/client-go/transport.go +495 -0
- package/dist/client-go/ws.go +128 -0
- package/dist/client-info.d.ts +36 -0
- package/dist/client-info.d.ts.map +1 -0
- package/dist/client-info.js +53 -0
- package/dist/client-info.js.map +1 -0
- package/dist/client-mcp/README.md +10 -0
- package/dist/client-mcp/server.ts +221 -0
- package/dist/client-mcp/types.ts +19 -0
- package/dist/client-python/_errors.py +115 -0
- package/dist/client-python/_invalidation.py +494 -0
- package/dist/client-python/_realtime.py +179 -0
- package/dist/client-python/_runtime.py +860 -0
- package/dist/client-python/_sse.py +155 -0
- package/dist/client-python/_transport.py +366 -0
- package/dist/client-python/_ws.py +159 -0
- package/dist/client-python/py.typed +0 -0
- package/dist/client-rust/errors.rs +220 -0
- package/dist/client-rust/invalidation.rs +412 -0
- package/dist/client-rust/invalidation_sync.rs +93 -0
- package/dist/client-rust/nullable.rs +17 -0
- package/dist/client-rust/realtime.rs +702 -0
- package/dist/client-rust/result.rs +22 -0
- package/dist/client-rust/runtime.rs +980 -0
- package/dist/client-rust/runtime_sync.rs +484 -0
- package/dist/client-rust/sse.rs +188 -0
- package/dist/client-rust/ws.rs +167 -0
- package/dist/codegen-go-cli.d.ts.map +1 -1
- package/dist/codegen-go-cli.js +964 -0
- package/dist/codegen-go-cli.js.map +1 -0
- package/dist/codegen-go.d.ts +15 -3
- package/dist/codegen-go.d.ts.map +1 -1
- package/dist/codegen-go.js +872 -0
- package/dist/codegen-go.js.map +1 -0
- package/dist/codegen-hash.js +9 -0
- package/dist/codegen-hash.js.map +1 -0
- package/dist/codegen-ir.d.ts +69 -2
- package/dist/codegen-ir.d.ts.map +1 -1
- package/dist/codegen-ir.js +661 -0
- package/dist/codegen-ir.js.map +1 -0
- package/dist/codegen-lang.d.ts +65 -0
- package/dist/codegen-lang.d.ts.map +1 -0
- package/dist/codegen-lang.js +526 -0
- package/dist/codegen-lang.js.map +1 -0
- package/dist/codegen-load.d.ts +31 -0
- package/dist/codegen-load.d.ts.map +1 -0
- package/dist/codegen-load.js +138 -0
- package/dist/codegen-load.js.map +1 -0
- package/dist/codegen-loaders.js +55 -0
- package/dist/codegen-loaders.js.map +1 -0
- package/dist/codegen-mcp.d.ts.map +1 -1
- package/dist/codegen-mcp.js +368 -0
- package/dist/codegen-mcp.js.map +1 -0
- package/dist/codegen-python.d.ts +13 -1
- package/dist/codegen-python.d.ts.map +1 -1
- package/dist/codegen-python.js +828 -0
- package/dist/codegen-python.js.map +1 -0
- package/dist/codegen-route-tree-intern.d.ts +15 -5
- package/dist/codegen-route-tree-intern.d.ts.map +1 -1
- package/dist/codegen-route-tree-intern.js +221 -0
- package/dist/codegen-route-tree-intern.js.map +1 -0
- package/dist/codegen-rust.d.ts.map +1 -1
- package/dist/codegen-rust.js +1293 -0
- package/dist/codegen-rust.js.map +1 -0
- package/dist/codegen-sanitize.d.ts.map +1 -1
- package/dist/codegen-sanitize.js +56 -0
- package/dist/codegen-sanitize.js.map +1 -0
- package/dist/codegen-schema-naming.d.ts +5 -0
- package/dist/codegen-schema-naming.d.ts.map +1 -1
- package/dist/codegen-schema-naming.js +150 -0
- package/dist/codegen-schema-naming.js.map +1 -0
- package/dist/codegen-sdk-model.d.ts +71 -0
- package/dist/codegen-sdk-model.d.ts.map +1 -0
- package/dist/codegen-sdk-model.js +179 -0
- package/dist/codegen-sdk-model.js.map +1 -0
- package/dist/codegen.d.ts +41 -23
- package/dist/codegen.d.ts.map +1 -1
- package/dist/codegen.js +4610 -0
- package/dist/codegen.js.map +1 -0
- package/dist/context.d.ts +36 -6
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +242 -0
- package/dist/context.js.map +1 -0
- package/dist/cookie-sign.d.ts +16 -2
- package/dist/cookie-sign.d.ts.map +1 -1
- package/dist/cookie-sign.js +104 -0
- package/dist/cookie-sign.js.map +1 -0
- package/dist/cookie.d.ts +12 -0
- package/dist/cookie.d.ts.map +1 -1
- package/dist/cookie.js +138 -0
- package/dist/cookie.js.map +1 -0
- package/dist/cors.d.ts +1 -0
- package/dist/cors.d.ts.map +1 -1
- package/dist/cors.js +87 -0
- package/dist/cors.js.map +1 -0
- package/dist/crypto.d.ts +6 -1
- package/dist/crypto.d.ts.map +1 -1
- package/dist/crypto.js +38 -0
- package/dist/crypto.js.map +1 -0
- package/dist/csrf.d.ts +19 -0
- package/dist/csrf.d.ts.map +1 -1
- package/dist/csrf.js +79 -0
- package/dist/csrf.js.map +1 -0
- package/dist/curl-logger.d.ts +14 -3
- package/dist/curl-logger.d.ts.map +1 -1
- package/dist/curl-logger.js +199 -0
- package/dist/curl-logger.js.map +1 -0
- package/dist/detect-runtime.js +13 -0
- package/dist/detect-runtime.js.map +1 -0
- package/dist/dict.d.ts +11 -0
- package/dist/dict.d.ts.map +1 -0
- package/dist/dict.js +13 -0
- package/dist/dict.js.map +1 -0
- package/dist/error.d.ts.map +1 -1
- package/dist/error.js +44 -0
- package/dist/error.js.map +1 -0
- package/dist/errors.js +39 -0
- package/dist/errors.js.map +1 -0
- package/dist/etag.d.ts +2 -0
- package/dist/etag.d.ts.map +1 -1
- package/dist/etag.js +82 -0
- package/dist/etag.js.map +1 -0
- package/dist/feature-detect.d.ts +25 -0
- package/dist/feature-detect.d.ts.map +1 -0
- package/dist/feature-detect.js +144 -0
- package/dist/feature-detect.js.map +1 -0
- package/dist/feature-load.js +36 -0
- package/dist/feature-load.js.map +1 -0
- package/dist/feature-slots.d.ts +44 -0
- package/dist/feature-slots.d.ts.map +1 -0
- package/dist/feature-slots.js +48 -0
- package/dist/feature-slots.js.map +1 -0
- package/dist/fetch-request.d.ts +10 -0
- package/dist/fetch-request.d.ts.map +1 -0
- package/dist/fetch-request.js +13 -0
- package/dist/fetch-request.js.map +1 -0
- package/dist/gen-process.d.ts +15 -0
- package/dist/gen-process.d.ts.map +1 -0
- package/dist/gen-process.js +43 -0
- package/dist/gen-process.js.map +1 -0
- package/dist/gen-write.d.ts +19 -0
- package/dist/gen-write.d.ts.map +1 -0
- package/dist/gen-write.js +120 -0
- package/dist/gen-write.js.map +1 -0
- package/dist/glob.d.ts +21 -0
- package/dist/glob.d.ts.map +1 -0
- package/dist/glob.js +115 -0
- package/dist/glob.js.map +1 -0
- package/dist/go-type-emitter.d.ts +18 -4
- package/dist/go-type-emitter.d.ts.map +1 -1
- package/dist/go-type-emitter.js +594 -0
- package/dist/go-type-emitter.js.map +1 -0
- package/dist/honey-response.d.ts.map +1 -1
- package/dist/honey-response.js +338 -0
- package/dist/honey-response.js.map +1 -0
- package/dist/i18n-slot.d.ts +8 -0
- package/dist/i18n-slot.d.ts.map +1 -1
- package/dist/i18n-slot.js +14 -0
- package/dist/i18n-slot.js.map +1 -0
- package/dist/i18n.d.ts +3 -0
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js +250 -0
- package/dist/i18n.js.map +1 -0
- package/dist/index.d.ts +408 -148
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2324 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +3 -5
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +140 -0
- package/dist/init.js.map +1 -0
- package/dist/input.js +4 -0
- package/dist/input.js.map +1 -0
- package/dist/invalidate-check.d.ts +11 -0
- package/dist/invalidate-check.d.ts.map +1 -1
- package/dist/invalidate-check.js +163 -0
- package/dist/invalidate-check.js.map +1 -0
- package/dist/invoke-user.d.ts +35 -0
- package/dist/invoke-user.d.ts.map +1 -0
- package/dist/invoke-user.js +73 -0
- package/dist/invoke-user.js.map +1 -0
- package/dist/ip-restrict.d.ts +13 -1
- package/dist/ip-restrict.d.ts.map +1 -1
- package/dist/ip-restrict.js +60 -0
- package/dist/ip-restrict.js.map +1 -0
- package/dist/ip.d.ts +39 -0
- package/dist/ip.d.ts.map +1 -0
- package/dist/ip.js +209 -0
- package/dist/ip.js.map +1 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +113 -0
- package/dist/logger.js.map +1 -0
- package/dist/media-type.d.ts +30 -0
- package/dist/media-type.d.ts.map +1 -0
- package/dist/media-type.js +97 -0
- package/dist/media-type.js.map +1 -0
- package/dist/meta-spec-merge.d.ts +32 -0
- package/dist/meta-spec-merge.d.ts.map +1 -0
- package/dist/meta-spec-merge.js +68 -0
- package/dist/meta-spec-merge.js.map +1 -0
- package/dist/meta-spec.d.ts +16 -3
- package/dist/meta-spec.d.ts.map +1 -1
- package/dist/meta-spec.js +535 -0
- package/dist/meta-spec.js.map +1 -0
- package/dist/middleware.d.ts +23 -6
- package/dist/middleware.d.ts.map +1 -1
- package/dist/middleware.js +253 -0
- package/dist/middleware.js.map +1 -0
- package/dist/node-request.d.ts +57 -12
- package/dist/node-request.d.ts.map +1 -1
- package/dist/node-request.js +407 -0
- package/dist/node-request.js.map +1 -0
- package/dist/node.d.ts +20 -3
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +396 -0
- package/dist/node.js.map +1 -0
- package/dist/openapi/collect.d.ts +6 -3
- package/dist/openapi/collect.d.ts.map +1 -1
- package/dist/openapi/collect.js +30 -0
- package/dist/openapi/collect.js.map +1 -0
- package/dist/openapi/docs-page.d.ts +42 -0
- package/dist/openapi/docs-page.d.ts.map +1 -0
- package/dist/openapi/docs-page.js +80 -0
- package/dist/openapi/docs-page.js.map +1 -0
- package/dist/openapi/document.d.ts +4 -0
- package/dist/openapi/document.d.ts.map +1 -1
- package/dist/openapi/document.js +785 -0
- package/dist/openapi/document.js.map +1 -0
- package/dist/openapi/json-schema-slot.d.ts +7 -0
- package/dist/openapi/json-schema-slot.d.ts.map +1 -1
- package/dist/openapi/json-schema-slot.js +38 -0
- package/dist/openapi/json-schema-slot.js.map +1 -0
- package/dist/openapi/register.d.ts.map +1 -1
- package/dist/openapi/register.js +20 -0
- package/dist/openapi/register.js.map +1 -0
- package/dist/openapi/scalar.d.ts +3 -1
- package/dist/openapi/scalar.d.ts.map +1 -1
- package/dist/openapi/scalar.js +21 -0
- package/dist/openapi/scalar.js.map +1 -0
- package/dist/openapi/serve.d.ts +9 -0
- package/dist/openapi/serve.d.ts.map +1 -0
- package/dist/openapi/serve.js +36 -0
- package/dist/openapi/serve.js.map +1 -0
- package/dist/openapi/spec-factory.d.ts +30 -1
- package/dist/openapi/spec-factory.d.ts.map +1 -1
- package/dist/openapi/spec-factory.js +52 -0
- package/dist/openapi/spec-factory.js.map +1 -0
- package/dist/openapi/spec.d.ts +14 -5
- package/dist/openapi/spec.d.ts.map +1 -1
- package/dist/openapi/spec.js +50 -0
- package/dist/openapi/spec.js.map +1 -0
- package/dist/openapi/swagger.d.ts +3 -1
- package/dist/openapi/swagger.d.ts.map +1 -1
- package/dist/openapi/swagger.js +22 -0
- package/dist/openapi/swagger.js.map +1 -0
- package/dist/pattern.d.ts +71 -0
- package/dist/pattern.d.ts.map +1 -0
- package/dist/pattern.js +239 -0
- package/dist/pattern.js.map +1 -0
- package/dist/peer.d.ts +17 -0
- package/dist/peer.d.ts.map +1 -0
- package/dist/peer.js +50 -0
- package/dist/peer.js.map +1 -0
- package/dist/plugin.d.ts +67 -16
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +649 -0
- package/dist/plugin.js.map +1 -0
- package/dist/powered-by.d.ts.map +1 -1
- package/dist/powered-by.js +11 -0
- package/dist/powered-by.js.map +1 -0
- package/dist/pretty-json.d.ts.map +1 -1
- package/dist/pretty-json.js +47 -0
- package/dist/pretty-json.js.map +1 -0
- package/dist/producer-stream.d.ts +47 -0
- package/dist/producer-stream.d.ts.map +1 -0
- package/dist/producer-stream.js +267 -0
- package/dist/producer-stream.js.map +1 -0
- package/dist/proxy.d.ts +47 -8
- package/dist/proxy.d.ts.map +1 -1
- package/dist/proxy.js +274 -0
- package/dist/proxy.js.map +1 -0
- package/dist/python-type-emitter.d.ts +14 -1
- package/dist/python-type-emitter.d.ts.map +1 -1
- package/dist/python-type-emitter.js +157 -0
- package/dist/python-type-emitter.js.map +1 -0
- package/dist/realtime/bus.d.ts +17 -1
- package/dist/realtime/bus.d.ts.map +1 -1
- package/dist/realtime/bus.js +112 -0
- package/dist/realtime/bus.js.map +1 -0
- package/dist/realtime/register.d.ts +3 -0
- package/dist/realtime/register.d.ts.map +1 -0
- package/dist/realtime/register.js +10 -0
- package/dist/realtime/register.js.map +1 -0
- package/dist/realtime/route.d.ts +65 -26
- package/dist/realtime/route.d.ts.map +1 -1
- package/dist/realtime/route.js +72 -0
- package/dist/realtime/route.js.map +1 -0
- package/dist/realtime/server.d.ts +43 -0
- package/dist/realtime/server.d.ts.map +1 -0
- package/dist/realtime/server.js +255 -0
- package/dist/realtime/server.js.map +1 -0
- package/dist/request-id.d.ts +7 -0
- package/dist/request-id.d.ts.map +1 -1
- package/dist/request-id.js +16 -0
- package/dist/request-id.js.map +1 -0
- package/dist/request-limits.d.ts +3 -0
- package/dist/request-limits.d.ts.map +1 -0
- package/dist/request-limits.js +3 -0
- package/dist/request-limits.js.map +1 -0
- package/dist/request-path.d.ts +33 -0
- package/dist/request-path.d.ts.map +1 -0
- package/dist/request-path.js +178 -0
- package/dist/request-path.js.map +1 -0
- package/dist/request-to-curl.d.ts +7 -1
- package/dist/request-to-curl.d.ts.map +1 -1
- package/dist/request-to-curl.js +48 -0
- package/dist/request-to-curl.js.map +1 -0
- package/dist/response.d.ts +25 -2
- package/dist/response.d.ts.map +1 -1
- package/dist/response.js +313 -0
- package/dist/response.js.map +1 -0
- package/dist/rust-type-emitter.d.ts +14 -2
- package/dist/rust-type-emitter.d.ts.map +1 -1
- package/dist/rust-type-emitter.js +463 -0
- package/dist/rust-type-emitter.js.map +1 -0
- package/dist/secure-headers.d.ts.map +1 -1
- package/dist/secure-headers.js +53 -0
- package/dist/secure-headers.js.map +1 -0
- package/dist/serve-register.d.ts +4 -0
- package/dist/serve-register.d.ts.map +1 -1
- package/dist/serve-register.js +9 -0
- package/dist/serve-register.js.map +1 -0
- package/dist/serve-slot.d.ts +3 -0
- package/dist/serve-slot.d.ts.map +1 -1
- package/dist/serve-slot.js +52 -0
- package/dist/serve-slot.js.map +1 -0
- package/dist/serve.d.ts +18 -1
- package/dist/serve.d.ts.map +1 -1
- package/dist/serve.js +157 -0
- package/dist/serve.js.map +1 -0
- package/dist/server-timing.d.ts.map +1 -1
- package/dist/server-timing.js +51 -0
- package/dist/server-timing.js.map +1 -0
- package/dist/static.d.ts +9 -0
- package/dist/static.d.ts.map +1 -1
- package/dist/static.js +102 -0
- package/dist/static.js.map +1 -0
- package/dist/telemetry/otel.d.ts +2 -0
- package/dist/telemetry/otel.d.ts.map +1 -1
- package/dist/telemetry/otel.js +135 -0
- package/dist/telemetry/otel.js.map +1 -0
- package/dist/testing.d.ts +12 -0
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +124 -0
- package/dist/testing.js.map +1 -0
- package/dist/timeout.d.ts +6 -0
- package/dist/timeout.d.ts.map +1 -1
- package/dist/timeout.js +36 -0
- package/dist/timeout.js.map +1 -0
- package/dist/tree.d.ts +133 -36
- package/dist/tree.d.ts.map +1 -1
- package/dist/tree.js +437 -0
- package/dist/tree.js.map +1 -0
- package/dist/trust.d.ts +21 -0
- package/dist/trust.d.ts.map +1 -0
- package/dist/trust.js +100 -0
- package/dist/trust.js.map +1 -0
- package/dist/ts-type-emitter.d.ts.map +1 -1
- package/dist/ts-type-emitter.js +150 -0
- package/dist/ts-type-emitter.js.map +1 -0
- package/dist/type-emitter.d.ts +16 -2
- package/dist/type-emitter.d.ts.map +1 -1
- package/dist/type-emitter.js +729 -0
- package/dist/type-emitter.js.map +1 -0
- package/dist/type-extractor.d.ts +8 -4
- package/dist/type-extractor.d.ts.map +1 -1
- package/dist/type-extractor.js +776 -0
- package/dist/type-extractor.js.map +1 -0
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +96 -0
- package/dist/types.js.map +1 -0
- package/dist/validation.d.ts +14 -2
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +335 -0
- package/dist/validation.js.map +1 -0
- package/dist/with-headers.d.ts +15 -0
- package/dist/with-headers.d.ts.map +1 -0
- package/dist/with-headers.js +45 -0
- package/dist/with-headers.js.map +1 -0
- package/dist/ws/bun.d.ts +11 -5
- package/dist/ws/bun.d.ts.map +1 -1
- package/dist/ws/bun.js +82 -0
- package/dist/ws/bun.js.map +1 -0
- package/dist/ws/cloudflare.d.ts +25 -3
- package/dist/ws/cloudflare.d.ts.map +1 -1
- package/dist/ws/cloudflare.js +117 -0
- package/dist/ws/cloudflare.js.map +1 -0
- package/dist/ws/deno.d.ts +4 -4
- package/dist/ws/deno.d.ts.map +1 -1
- package/dist/ws/deno.js +133 -0
- package/dist/ws/deno.js.map +1 -0
- package/dist/ws/node.d.ts +20 -3
- package/dist/ws/node.d.ts.map +1 -1
- package/dist/ws/node.js +173 -0
- package/dist/ws/node.js.map +1 -0
- package/dist/ws/session.d.ts +11 -0
- package/dist/ws/session.d.ts.map +1 -0
- package/dist/ws/session.js +60 -0
- package/dist/ws/session.js.map +1 -0
- package/dist/ws/shared.d.ts +65 -0
- package/dist/ws/shared.d.ts.map +1 -0
- package/dist/ws/shared.js +103 -0
- package/dist/ws/shared.js.map +1 -0
- package/dist/ws-origin.d.ts +20 -0
- package/dist/ws-origin.d.ts.map +1 -0
- package/dist/ws-origin.js +41 -0
- package/dist/ws-origin.js.map +1 -0
- package/dist/yaml.d.ts +15 -1
- package/dist/yaml.d.ts.map +1 -1
- package/dist/yaml.js +101 -0
- package/dist/yaml.js.map +1 -0
- package/docs/invalidate-spec.md +13 -1
- package/docs/meta-spec.md +36 -12
- package/docs/packaging.md +43 -24
- package/docs/regression-matrix/README.md +32 -0
- package/docs/regression-matrix/review.md +44 -0
- package/docs/regression-matrix/ws1-3.md +97 -0
- package/docs/regression-matrix/ws4-8.md +107 -0
- package/docs/regression-matrix/ws9-12.md +266 -0
- package/docs/sdk.md +102 -52
- package/package.json +183 -52
- package/src/accepts.ts +91 -33
- package/src/body-kind.ts +67 -0
- package/src/body-limit.ts +102 -87
- package/src/build/index.ts +104 -54
- package/src/cli-args.ts +123 -0
- package/src/cli-go/auth.go +12 -1
- package/src/cli-go/config.go +29 -2
- package/src/cli-go/errors.go +28 -10
- package/src/cli-go/multipart.go +51 -27
- package/src/cli-go/output.go +58 -4
- package/src/cli-go/root.go +1 -1
- package/src/cli-go/version.go +2 -2
- package/src/cli.ts +154 -148
- package/src/client/error.ts +56 -1
- package/src/client/http.ts +479 -256
- package/src/client/index.ts +55 -17
- package/src/client/path.ts +169 -0
- package/src/client/redirect-policy.ts +19 -0
- package/src/client/sdk.ts +180 -101
- package/src/client/sse.ts +92 -66
- package/src/client/ws.ts +67 -31
- package/src/client-go/errors.go +41 -12
- package/src/client-go/export.go +44 -0
- package/src/client-go/invalidation.go +52 -54
- package/src/client-go/nullable.go +62 -0
- package/src/client-go/realtime.go +147 -110
- package/src/client-go/runtime.go +646 -88
- package/src/client-go/sse.go +104 -94
- package/src/client-go/transport.go +67 -27
- package/src/client-go/ws.go +49 -25
- package/src/client-info.ts +79 -0
- package/src/client-mcp/server.ts +133 -3
- package/src/client-python/_invalidation.py +207 -291
- package/src/client-python/_realtime.py +63 -40
- package/src/client-python/_runtime.py +501 -119
- package/src/client-python/_sse.py +130 -74
- package/src/client-python/_transport.py +37 -9
- package/src/client-python/_ws.py +50 -22
- package/src/client-rust/errors.rs +21 -1
- package/src/client-rust/invalidation.rs +202 -231
- package/src/client-rust/invalidation_sync.rs +16 -229
- package/src/client-rust/nullable.rs +17 -0
- package/src/client-rust/realtime.rs +217 -217
- package/src/client-rust/runtime.rs +602 -177
- package/src/client-rust/runtime_sync.rs +169 -145
- package/src/client-rust/sse.rs +142 -121
- package/src/client-rust/ws.rs +61 -37
- package/src/codegen-go-cli.ts +607 -728
- package/src/codegen-go.ts +710 -770
- package/src/codegen-ir.ts +381 -75
- package/src/codegen-lang.ts +517 -0
- package/src/codegen-load.ts +150 -0
- package/src/codegen-mcp.ts +207 -108
- package/src/codegen-python.ts +684 -816
- package/src/codegen-route-tree-intern.ts +51 -25
- package/src/codegen-rust.ts +946 -1240
- package/src/codegen-sanitize.ts +0 -4
- package/src/codegen-schema-naming.ts +19 -6
- package/src/codegen-sdk-model.ts +228 -0
- package/src/codegen.ts +1488 -1140
- package/src/context.ts +130 -11
- package/src/cookie-sign.ts +85 -16
- package/src/cookie.ts +66 -11
- package/src/cors.ts +55 -54
- package/src/crypto.ts +27 -5
- package/src/csrf.ts +57 -25
- package/src/curl-logger.ts +155 -114
- package/src/dict.ts +12 -0
- package/src/error.ts +4 -2
- package/src/etag.ts +58 -34
- package/src/feature-detect.ts +147 -0
- package/src/feature-slots.ts +70 -0
- package/src/fetch-request.ts +13 -0
- package/src/gen-process.ts +42 -0
- package/src/gen-write.ts +127 -0
- package/src/glob.ts +109 -0
- package/src/go-type-emitter.ts +406 -155
- package/src/honey-response.ts +36 -9
- package/src/i18n-slot.ts +10 -0
- package/src/i18n.ts +98 -23
- package/src/index.ts +1887 -1756
- package/src/init.ts +40 -28
- package/src/invalidate-check.ts +42 -4
- package/src/invoke-user.ts +95 -0
- package/src/ip-restrict.ts +47 -161
- package/src/ip.ts +194 -0
- package/src/logger.ts +65 -36
- package/src/media-type.ts +104 -0
- package/src/meta-spec-merge.ts +80 -0
- package/src/meta-spec.ts +0 -0
- package/src/middleware.ts +112 -12
- package/src/node-request.ts +242 -52
- package/src/node.ts +318 -75
- package/src/openapi/collect.ts +19 -44
- package/src/openapi/docs-page.ts +89 -0
- package/src/openapi/document.ts +503 -224
- package/src/openapi/json-schema-slot.ts +40 -0
- package/src/openapi/register.ts +7 -2
- package/src/openapi/scalar.ts +11 -10
- package/src/openapi/serve.ts +39 -0
- package/src/openapi/spec-factory.ts +50 -1
- package/src/openapi/spec.ts +53 -30
- package/src/openapi/swagger.ts +12 -11
- package/src/pattern.ts +245 -0
- package/src/peer.ts +53 -0
- package/src/plugin.ts +270 -185
- package/src/powered-by.ts +2 -2
- package/src/pretty-json.ts +25 -9
- package/src/producer-stream.ts +296 -0
- package/src/proxy.ts +253 -55
- package/src/python-type-emitter.ts +68 -56
- package/src/realtime/bus.ts +56 -9
- package/src/realtime/register.ts +13 -0
- package/src/realtime/route.ts +129 -80
- package/src/realtime/server.ts +298 -0
- package/src/request-id.ts +13 -3
- package/src/request-limits.ts +2 -0
- package/src/request-path.ts +165 -0
- package/src/request-to-curl.ts +28 -7
- package/src/response.ts +143 -103
- package/src/rust-type-emitter.ts +265 -170
- package/src/secure-headers.ts +8 -4
- package/src/serve-register.ts +4 -0
- package/src/serve-slot.ts +38 -0
- package/src/serve.ts +113 -25
- package/src/server-timing.ts +11 -7
- package/src/static.ts +85 -32
- package/src/telemetry/otel.ts +29 -7
- package/src/testing.ts +76 -14
- package/src/timeout.ts +15 -7
- package/src/tree.ts +405 -333
- package/src/trust.ts +117 -0
- package/src/ts-type-emitter.ts +18 -12
- package/src/type-emitter.ts +227 -89
- package/src/type-extractor.ts +562 -424
- package/src/types.ts +8 -0
- package/src/validation.ts +221 -96
- package/src/with-headers.ts +45 -0
- package/src/ws/bun.ts +53 -15
- package/src/ws/cloudflare.ts +81 -19
- package/src/ws/deno.ts +124 -36
- package/src/ws/node.ts +173 -79
- package/src/ws/session.ts +73 -0
- package/src/ws/shared.ts +140 -0
- package/src/ws-origin.ts +53 -0
- package/src/yaml.ts +45 -22
- package/dist/client-mcp/server.d.ts +0 -10
- package/dist/client-mcp/server.d.ts.map +0 -1
- package/dist/client-mcp/types.d.ts +0 -16
- package/dist/client-mcp/types.d.ts.map +0 -1
- package/dist/cloudflare/realtime.d.ts +0 -30
- package/dist/cloudflare/realtime.d.ts.map +0 -1
- package/dist/realtime/buffer.d.ts +0 -18
- package/dist/realtime/buffer.d.ts.map +0 -1
- package/dist/realtime/longpoll.d.ts +0 -23
- package/dist/realtime/longpoll.d.ts.map +0 -1
- package/dist/realtime/protocol.d.ts +0 -50
- package/dist/realtime/protocol.d.ts.map +0 -1
- package/dist/realtime/runtime.d.ts +0 -74
- package/dist/realtime/runtime.d.ts.map +0 -1
- package/src/cloudflare/realtime.ts +0 -234
- package/src/realtime/buffer.ts +0 -101
- package/src/realtime/longpoll.ts +0 -148
- package/src/realtime/protocol.ts +0 -128
- package/src/realtime/runtime.ts +0 -427
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Options every WebSocket adapter takes, with the same meaning and defaults on Node, Bun, Deno
|
|
3
|
+
* and Workers. Each adapter enforces what its runtime does not.
|
|
4
|
+
*/
|
|
5
|
+
export type WSAdapterOptions = {
|
|
6
|
+
/**
|
|
7
|
+
* Largest inbound message in bytes. A bigger one closes the connection with 1009.
|
|
8
|
+
* Default 1 MiB.
|
|
9
|
+
*/
|
|
10
|
+
maxPayload?: number;
|
|
11
|
+
/**
|
|
12
|
+
* Outbound bytes a socket may hold unsent before `backpressurePolicy` applies to the next
|
|
13
|
+
* `send()`. Default 8 MiB.
|
|
14
|
+
*/
|
|
15
|
+
backpressureLimit?: number;
|
|
16
|
+
/**
|
|
17
|
+
* Over `backpressureLimit`: `"close"` closes the connection with 1013 (try again later),
|
|
18
|
+
* `"drop"` discards the message. Default `"close"`.
|
|
19
|
+
*/
|
|
20
|
+
backpressurePolicy?: "close" | "drop";
|
|
21
|
+
/**
|
|
22
|
+
* Close a connection that has received nothing (no message, no pong) for this many
|
|
23
|
+
* milliseconds. Idle peers are pinged first where the runtime allows it. `0` disables.
|
|
24
|
+
* Default 120 000 (Bun's default). Deno and Bun take whole seconds.
|
|
25
|
+
*/
|
|
26
|
+
idleTimeout?: number;
|
|
27
|
+
/**
|
|
28
|
+
* Choose the subprotocol from the ones the client offered (`Sec-WebSocket-Protocol`).
|
|
29
|
+
* Return `null` or `undefined` for none. Default: the first one offered.
|
|
30
|
+
*/
|
|
31
|
+
protocol?: (offered: string[], req: Request) => string | null | undefined;
|
|
32
|
+
};
|
|
33
|
+
export type ResolvedWSOptions = {
|
|
34
|
+
backpressureLimit: number;
|
|
35
|
+
backpressurePolicy: "close" | "drop";
|
|
36
|
+
idleTimeout: number;
|
|
37
|
+
maxPayload: number;
|
|
38
|
+
protocol: (offered: string[], req: Request) => string | null | undefined;
|
|
39
|
+
};
|
|
40
|
+
export declare const DEFAULT_MAX_PAYLOAD: number;
|
|
41
|
+
export declare const DEFAULT_BACKPRESSURE_LIMIT: number;
|
|
42
|
+
export declare const DEFAULT_IDLE_TIMEOUT = 120000;
|
|
43
|
+
/** Close codes the adapters and the realtime server use. */
|
|
44
|
+
export declare const CLOSE_NORMAL = 1000;
|
|
45
|
+
export declare const CLOSE_GOING_AWAY = 1001;
|
|
46
|
+
export declare const CLOSE_POLICY = 1008;
|
|
47
|
+
export declare const CLOSE_TOO_BIG = 1009;
|
|
48
|
+
export declare const CLOSE_INTERNAL = 1011;
|
|
49
|
+
export declare const CLOSE_TRY_AGAIN = 1013;
|
|
50
|
+
/** Longest close reason a frame can carry (125-byte control payload minus the 2-byte code). */
|
|
51
|
+
export declare const MAX_CLOSE_REASON = 123;
|
|
52
|
+
export declare function resolveWSOptions(opts: WSAdapterOptions | undefined): ResolvedWSOptions;
|
|
53
|
+
/** The subprotocols the client offered, in order. */
|
|
54
|
+
export declare function offeredProtocols(req: Request): string[];
|
|
55
|
+
/** The subprotocol to answer with, or `null`. A choice the client did not offer is ignored. */
|
|
56
|
+
export declare function selectProtocol(req: Request, opts: ResolvedWSOptions): string | null;
|
|
57
|
+
/** Outbound bytes the runtime holds for this socket, when it reports them. */
|
|
58
|
+
export declare function bufferedAmountOf(raw: unknown): number;
|
|
59
|
+
/** Whether an inbound message is larger than `limit` bytes. */
|
|
60
|
+
export declare function exceedsPayload(data: ArrayBuffer | ArrayBufferView | Blob | string, limit: number): boolean;
|
|
61
|
+
/** `data` as an `ArrayBuffer` holding exactly its bytes (a pooled Buffer's backing store is larger). */
|
|
62
|
+
export declare function toArrayBuffer(data: ArrayBuffer | ArrayBufferView): ArrayBuffer;
|
|
63
|
+
/** A close code a server may send: 1000, 1001-1014 except the reserved ones, or 3000-4999. */
|
|
64
|
+
export declare function sendableCloseCode(code: number | undefined): number;
|
|
65
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/ws/shared.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC9B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IACrC;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;CACzE,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC/B,iBAAiB,EAAE,MAAM,CAAA;IACzB,kBAAkB,EAAE,OAAO,GAAG,MAAM,CAAA;IACpC,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;CACxE,CAAA;AAED,eAAO,MAAM,mBAAmB,QAAc,CAAA;AAC9C,eAAO,MAAM,0BAA0B,QAAkB,CAAA;AACzD,eAAO,MAAM,oBAAoB,SAAU,CAAA;AAE3C,4DAA4D;AAC5D,eAAO,MAAM,YAAY,OAAO,CAAA;AAChC,eAAO,MAAM,gBAAgB,OAAO,CAAA;AACpC,eAAO,MAAM,YAAY,OAAO,CAAA;AAChC,eAAO,MAAM,aAAa,OAAO,CAAA;AACjC,eAAO,MAAM,cAAc,OAAO,CAAA;AAClC,eAAO,MAAM,eAAe,OAAO,CAAA;AAEnC,+FAA+F;AAC/F,eAAO,MAAM,gBAAgB,MAAM,CAAA;AAYnC,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,GAAG,SAAS,GAAG,iBAAiB,CActF;AAED,qDAAqD;AACrD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,CASvD;AAED,+FAA+F;AAC/F,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,GAAG,MAAM,GAAG,IAAI,CAKnF;AAED,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAQrD;AAED,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,eAAe,GAAG,IAAI,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAS1G;AAED,wGAAwG;AACxG,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,eAAe,GAAG,WAAW,CAK9E;AAED,8FAA8F;AAC9F,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAKlE"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
export const DEFAULT_MAX_PAYLOAD = 1024 * 1024;
|
|
2
|
+
export const DEFAULT_BACKPRESSURE_LIMIT = 8 * 1024 * 1024;
|
|
3
|
+
export const DEFAULT_IDLE_TIMEOUT = 120_000;
|
|
4
|
+
/** Close codes the adapters and the realtime server use. */
|
|
5
|
+
export const CLOSE_NORMAL = 1000;
|
|
6
|
+
export const CLOSE_GOING_AWAY = 1001;
|
|
7
|
+
export const CLOSE_POLICY = 1008;
|
|
8
|
+
export const CLOSE_TOO_BIG = 1009;
|
|
9
|
+
export const CLOSE_INTERNAL = 1011;
|
|
10
|
+
export const CLOSE_TRY_AGAIN = 1013;
|
|
11
|
+
/** Longest close reason a frame can carry (125-byte control payload minus the 2-byte code). */
|
|
12
|
+
export const MAX_CLOSE_REASON = 123;
|
|
13
|
+
const firstOffered = (offered) => offered[0] ?? null;
|
|
14
|
+
function nonNegative(name, value, fallback) {
|
|
15
|
+
if (value === undefined)
|
|
16
|
+
return fallback;
|
|
17
|
+
if (typeof value !== "number" || !Number.isFinite(value) || value < 0) {
|
|
18
|
+
throw new TypeError(`WebSocket adapter: ${name} must be a non-negative number`);
|
|
19
|
+
}
|
|
20
|
+
return value;
|
|
21
|
+
}
|
|
22
|
+
export function resolveWSOptions(opts) {
|
|
23
|
+
const policy = opts?.backpressurePolicy ?? "close";
|
|
24
|
+
if (policy !== "close" && policy !== "drop") {
|
|
25
|
+
throw new TypeError('WebSocket adapter: backpressurePolicy must be "close" or "drop"');
|
|
26
|
+
}
|
|
27
|
+
const maxPayload = nonNegative("maxPayload", opts?.maxPayload, DEFAULT_MAX_PAYLOAD);
|
|
28
|
+
if (maxPayload === 0)
|
|
29
|
+
throw new TypeError("WebSocket adapter: maxPayload must be positive");
|
|
30
|
+
return {
|
|
31
|
+
backpressureLimit: nonNegative("backpressureLimit", opts?.backpressureLimit, DEFAULT_BACKPRESSURE_LIMIT),
|
|
32
|
+
backpressurePolicy: policy,
|
|
33
|
+
idleTimeout: nonNegative("idleTimeout", opts?.idleTimeout, DEFAULT_IDLE_TIMEOUT),
|
|
34
|
+
maxPayload,
|
|
35
|
+
protocol: opts?.protocol ?? firstOffered,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/** The subprotocols the client offered, in order. */
|
|
39
|
+
export function offeredProtocols(req) {
|
|
40
|
+
const raw = req.headers.get("sec-websocket-protocol");
|
|
41
|
+
if (raw === null)
|
|
42
|
+
return [];
|
|
43
|
+
const out = [];
|
|
44
|
+
for (const part of raw.split(",")) {
|
|
45
|
+
const p = part.trim();
|
|
46
|
+
if (p !== "")
|
|
47
|
+
out.push(p);
|
|
48
|
+
}
|
|
49
|
+
return out;
|
|
50
|
+
}
|
|
51
|
+
/** The subprotocol to answer with, or `null`. A choice the client did not offer is ignored. */
|
|
52
|
+
export function selectProtocol(req, opts) {
|
|
53
|
+
const offered = offeredProtocols(req);
|
|
54
|
+
if (offered.length === 0)
|
|
55
|
+
return null;
|
|
56
|
+
const chosen = opts.protocol(offered, req);
|
|
57
|
+
return typeof chosen === "string" && offered.includes(chosen) ? chosen : null;
|
|
58
|
+
}
|
|
59
|
+
/** Outbound bytes the runtime holds for this socket, when it reports them. */
|
|
60
|
+
export function bufferedAmountOf(raw) {
|
|
61
|
+
if (raw === null || typeof raw !== "object")
|
|
62
|
+
return 0;
|
|
63
|
+
const r = raw;
|
|
64
|
+
if (typeof r.getBufferedAmount === "function") {
|
|
65
|
+
const n = r.getBufferedAmount();
|
|
66
|
+
return typeof n === "number" ? n : 0;
|
|
67
|
+
}
|
|
68
|
+
return typeof r.bufferedAmount === "number" ? r.bufferedAmount : 0;
|
|
69
|
+
}
|
|
70
|
+
/** Whether an inbound message is larger than `limit` bytes. */
|
|
71
|
+
export function exceedsPayload(data, limit) {
|
|
72
|
+
if (typeof data === "string") {
|
|
73
|
+
if (data.length > limit)
|
|
74
|
+
return true;
|
|
75
|
+
/* a UTF-16 unit is at most 3 UTF-8 bytes, so most strings need no encode */
|
|
76
|
+
if (data.length * 3 <= limit)
|
|
77
|
+
return false;
|
|
78
|
+
return new TextEncoder().encode(data).byteLength > limit;
|
|
79
|
+
}
|
|
80
|
+
if (typeof Blob !== "undefined" && data instanceof Blob)
|
|
81
|
+
return data.size > limit;
|
|
82
|
+
return data.byteLength > limit;
|
|
83
|
+
}
|
|
84
|
+
/** `data` as an `ArrayBuffer` holding exactly its bytes (a pooled Buffer's backing store is larger). */
|
|
85
|
+
export function toArrayBuffer(data) {
|
|
86
|
+
if (data instanceof ArrayBuffer)
|
|
87
|
+
return data;
|
|
88
|
+
const { buffer, byteLength, byteOffset } = data;
|
|
89
|
+
if (byteOffset === 0 && byteLength === buffer.byteLength && buffer instanceof ArrayBuffer)
|
|
90
|
+
return buffer;
|
|
91
|
+
return buffer.slice(byteOffset, byteOffset + byteLength);
|
|
92
|
+
}
|
|
93
|
+
/** A close code a server may send: 1000, 1001-1014 except the reserved ones, or 3000-4999. */
|
|
94
|
+
export function sendableCloseCode(code) {
|
|
95
|
+
if (code === undefined)
|
|
96
|
+
return 1000;
|
|
97
|
+
if (code === 1000 || (code >= 3000 && code <= 4999))
|
|
98
|
+
return code;
|
|
99
|
+
if (code >= 1001 && code <= 1014 && code !== 1004 && code !== 1005 && code !== 1006)
|
|
100
|
+
return code;
|
|
101
|
+
return 1000;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/ws/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which browser origins may open a WebSocket. A browser lets any page open a socket to any host
|
|
3
|
+
* and sends that host's cookies with it, so a cookie-authenticated socket is open to cross-site
|
|
4
|
+
* hijacking unless the server checks `Origin`.
|
|
5
|
+
*
|
|
6
|
+
* - `"*"`: every origin.
|
|
7
|
+
* - a list: those exact origins (`https://app.example.com`), plus same-origin.
|
|
8
|
+
* - a function: called with the `Origin` value; same-origin always passes.
|
|
9
|
+
* - unset (the default): same-origin always passes; a cross-origin upgrade is rejected when it
|
|
10
|
+
* carries credentials (`Cookie` or `Authorization`), since that is what hijacking needs. A
|
|
11
|
+
* request without `Origin` (not a browser) passes.
|
|
12
|
+
*/
|
|
13
|
+
export type WSOriginPolicy = "*" | readonly string[] | ((origin: string) => boolean);
|
|
14
|
+
export declare function validateOriginPolicy(policy: unknown): WSOriginPolicy;
|
|
15
|
+
/**
|
|
16
|
+
* Whether an upgrade from `origin` may proceed. `host` is the host the client asked for
|
|
17
|
+
* (`clientInfo(ctx).host`, which follows `trustProxy`).
|
|
18
|
+
*/
|
|
19
|
+
export declare function originAllowed(policy: WSOriginPolicy | null, origin: string | null, host: string | null, hasCredentials: boolean): boolean;
|
|
20
|
+
//# sourceMappingURL=ws-origin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws-origin.d.ts","sourceRoot":"","sources":["../src/ws-origin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,cAAc,GAAG,GAAG,GAAG,SAAS,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,CAAA;AAWpF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,cAAc,CAUpE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC5B,MAAM,EAAE,cAAc,GAAG,IAAI,EAC7B,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,cAAc,EAAE,OAAO,GACrB,OAAO,CAQT"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
function originHost(origin) {
|
|
2
|
+
if (origin === "null")
|
|
3
|
+
return null;
|
|
4
|
+
try {
|
|
5
|
+
return new URL(origin).host.toLowerCase();
|
|
6
|
+
}
|
|
7
|
+
catch {
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export function validateOriginPolicy(policy) {
|
|
12
|
+
if (policy === "*" || typeof policy === "function")
|
|
13
|
+
return policy;
|
|
14
|
+
if (Array.isArray(policy) && policy.every((o) => typeof o === "string")) {
|
|
15
|
+
for (const o of policy) {
|
|
16
|
+
if (originHost(o) === null)
|
|
17
|
+
throw new TypeError(`allowedOrigins: "${o}" is not an origin like https://example.com`);
|
|
18
|
+
}
|
|
19
|
+
return Object.freeze([...policy]);
|
|
20
|
+
}
|
|
21
|
+
throw new TypeError('allowedOrigins must be "*", a list of origins, or a function');
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Whether an upgrade from `origin` may proceed. `host` is the host the client asked for
|
|
25
|
+
* (`clientInfo(ctx).host`, which follows `trustProxy`).
|
|
26
|
+
*/
|
|
27
|
+
export function originAllowed(policy, origin, host, hasCredentials) {
|
|
28
|
+
if (policy === "*")
|
|
29
|
+
return true;
|
|
30
|
+
if (origin === null)
|
|
31
|
+
return true;
|
|
32
|
+
const oh = originHost(origin);
|
|
33
|
+
if (oh !== null && host !== null && oh === host.toLowerCase())
|
|
34
|
+
return true;
|
|
35
|
+
if (policy === null)
|
|
36
|
+
return !hasCredentials;
|
|
37
|
+
if (typeof policy === "function")
|
|
38
|
+
return policy(origin) === true;
|
|
39
|
+
return policy.includes(origin);
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=ws-origin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws-origin.js","sourceRoot":"","sources":["../src/ws-origin.ts"],"names":[],"mappings":"AAcA,SAAS,UAAU,CAAC,MAAc;IACjC,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,IAAI,CAAA;IAClC,IAAI,CAAC;QACJ,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA;IAC1C,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAA;IACZ,CAAC;AACF,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAe;IACnD,IAAI,MAAM,KAAK,GAAG,IAAI,OAAO,MAAM,KAAK,UAAU;QAAE,OAAO,MAAwB,CAAA;IACnF,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;QACzE,KAAK,MAAM,CAAC,IAAI,MAAkB,EAAE,CAAC;YACpC,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI;gBACzB,MAAM,IAAI,SAAS,CAAC,oBAAoB,CAAC,6CAA6C,CAAC,CAAA;QACzF,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAI,MAAmB,CAAC,CAAC,CAAA;IAChD,CAAC;IACD,MAAM,IAAI,SAAS,CAAC,8DAA8D,CAAC,CAAA;AACpF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC5B,MAA6B,EAC7B,MAAqB,EACrB,IAAmB,EACnB,cAAuB;IAEvB,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,IAAI,CAAA;IAC/B,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IAChC,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;IAC7B,IAAI,EAAE,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE;QAAE,OAAO,IAAI,CAAA;IAC1E,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,CAAC,cAAc,CAAA;IAC3C,IAAI,OAAO,MAAM,KAAK,UAAU;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,CAAA;IAChE,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;AAC/B,CAAC"}
|
package/dist/yaml.d.ts
CHANGED
|
@@ -1,4 +1,18 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* JSON-compatible YAML 1.2 emitter: the same document as `JSON.stringify`, in a
|
|
3
|
+
* different encoding. Input is first normalized through JSON (so `undefined` keys
|
|
4
|
+
* are skipped, `Date` becomes its ISO string, `NaN` becomes `null`), then every
|
|
5
|
+
* string that is not plainly safe is written as a double-quoted scalar, which
|
|
6
|
+
* also reads the same under YAML 1.1 parsers.
|
|
7
|
+
*/
|
|
2
8
|
export declare function yamlSiblingPath(jsonPath: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* Where an OpenAPI output configured at `path` is written. A `.yaml`/`.yml` path is that YAML file
|
|
11
|
+
* alone; any other path is JSON there plus its YAML sibling.
|
|
12
|
+
*/
|
|
13
|
+
export declare function openApiOutputPaths(path: string): {
|
|
14
|
+
json: string | null;
|
|
15
|
+
yaml: string;
|
|
16
|
+
};
|
|
3
17
|
export declare function toYaml(value: unknown): string;
|
|
4
18
|
//# sourceMappingURL=yaml.d.ts.map
|
package/dist/yaml.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yaml.d.ts","sourceRoot":"","sources":["../src/yaml.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"yaml.d.ts","sourceRoot":"","sources":["../src/yaml.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAGtF;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAK7C"}
|
package/dist/yaml.js
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON-compatible YAML 1.2 emitter: the same document as `JSON.stringify`, in a
|
|
3
|
+
* different encoding. Input is first normalized through JSON (so `undefined` keys
|
|
4
|
+
* are skipped, `Date` becomes its ISO string, `NaN` becomes `null`), then every
|
|
5
|
+
* string that is not plainly safe is written as a double-quoted scalar, which
|
|
6
|
+
* also reads the same under YAML 1.1 parsers.
|
|
7
|
+
*/
|
|
8
|
+
const INDENT = " ";
|
|
9
|
+
export function yamlSiblingPath(jsonPath) {
|
|
10
|
+
if (jsonPath.endsWith(".yaml") || jsonPath.endsWith(".yml"))
|
|
11
|
+
return jsonPath.replace(/\.yml$/, ".yaml");
|
|
12
|
+
return jsonPath.endsWith(".json") ? `${jsonPath.slice(0, -5)}.yaml` : `${jsonPath}.yaml`;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Where an OpenAPI output configured at `path` is written. A `.yaml`/`.yml` path is that YAML file
|
|
16
|
+
* alone; any other path is JSON there plus its YAML sibling.
|
|
17
|
+
*/
|
|
18
|
+
export function openApiOutputPaths(path) {
|
|
19
|
+
if (path.endsWith(".yaml") || path.endsWith(".yml"))
|
|
20
|
+
return { json: null, yaml: path };
|
|
21
|
+
return { json: path, yaml: yamlSiblingPath(path) };
|
|
22
|
+
}
|
|
23
|
+
export function toYaml(value) {
|
|
24
|
+
const json = JSON.stringify(value);
|
|
25
|
+
/* JSON.stringify(undefined) is undefined; emit the JSON equivalent of "nothing". */
|
|
26
|
+
const normalized = json === undefined ? null : JSON.parse(json);
|
|
27
|
+
return `${emit(normalized, 0)}\n`;
|
|
28
|
+
}
|
|
29
|
+
function emit(value, indent) {
|
|
30
|
+
if (value === null)
|
|
31
|
+
return "null";
|
|
32
|
+
if (typeof value === "boolean")
|
|
33
|
+
return value ? "true" : "false";
|
|
34
|
+
if (typeof value === "number")
|
|
35
|
+
return String(value);
|
|
36
|
+
if (typeof value === "string")
|
|
37
|
+
return emitString(value);
|
|
38
|
+
if (Array.isArray(value))
|
|
39
|
+
return emitArray(value, indent);
|
|
40
|
+
return emitObject(value, indent);
|
|
41
|
+
}
|
|
42
|
+
/*
|
|
43
|
+
* A plain scalar is used only for a conservative shape: starts with a letter,
|
|
44
|
+
* `_`, `/` or `$`; contains only word characters, `.`, `/`, `$`, `-`, `+`,
|
|
45
|
+
* `{}`, `()` and inner spaces. That excludes every indicator, `: `, ` #`,
|
|
46
|
+
* leading digits (numbers, YAML 1.1 octal and sexagesimal), and `.inf`/`.nan`.
|
|
47
|
+
*/
|
|
48
|
+
const PLAIN_RE = /^[A-Za-z_/$](?:[\w./${}()+-]| (?! ))*$/;
|
|
49
|
+
/* Words YAML 1.1 or 1.2 resolves to null or a boolean. */
|
|
50
|
+
const RESERVED_RE = /^(?:y|n|yes|no|on|off|true|false|null|~)$/i;
|
|
51
|
+
function emitString(value) {
|
|
52
|
+
if (PLAIN_RE.test(value) && !value.endsWith(" ") && !RESERVED_RE.test(value))
|
|
53
|
+
return value;
|
|
54
|
+
return quote(value);
|
|
55
|
+
}
|
|
56
|
+
/*
|
|
57
|
+
* JSON string syntax is a valid YAML double-quoted scalar, except that YAML
|
|
58
|
+
* forbids raw DEL, C1 controls (other than NEL) and the BOM/non-characters.
|
|
59
|
+
*/
|
|
60
|
+
function quote(value) {
|
|
61
|
+
return JSON.stringify(value).replace(/[\u007f-\u0084\u0086-\u009f]/g, (ch) => `\\u${ch.charCodeAt(0).toString(16).padStart(4, "0")}`);
|
|
62
|
+
}
|
|
63
|
+
function isNonEmptyCollection(value) {
|
|
64
|
+
if (Array.isArray(value))
|
|
65
|
+
return value.length > 0;
|
|
66
|
+
return value !== null && typeof value === "object" && Object.keys(value).length > 0;
|
|
67
|
+
}
|
|
68
|
+
function emitArray(value, indent) {
|
|
69
|
+
if (value.length === 0)
|
|
70
|
+
return "[]";
|
|
71
|
+
const pad = INDENT.repeat(indent);
|
|
72
|
+
const childPad = INDENT.repeat(indent + 1);
|
|
73
|
+
return value
|
|
74
|
+
.map((item) => {
|
|
75
|
+
if (isNonEmptyCollection(item)) {
|
|
76
|
+
const inner = emit(item, indent + 1);
|
|
77
|
+
const lines = inner.split("\n");
|
|
78
|
+
const first = lines[0]?.startsWith(childPad) ? lines[0].slice(childPad.length) : (lines[0] ?? "");
|
|
79
|
+
return [`${pad}- ${first}`, ...lines.slice(1)].join("\n");
|
|
80
|
+
}
|
|
81
|
+
return `${pad}- ${emit(item, 0)}`;
|
|
82
|
+
})
|
|
83
|
+
.join("\n");
|
|
84
|
+
}
|
|
85
|
+
function emitObject(value, indent) {
|
|
86
|
+
const keys = Object.keys(value);
|
|
87
|
+
if (keys.length === 0)
|
|
88
|
+
return "{}";
|
|
89
|
+
const pad = INDENT.repeat(indent);
|
|
90
|
+
return keys
|
|
91
|
+
.map((key) => {
|
|
92
|
+
const child = value[key];
|
|
93
|
+
const renderedKey = emitString(key);
|
|
94
|
+
if (isNonEmptyCollection(child)) {
|
|
95
|
+
return `${pad}${renderedKey}:\n${emit(child, indent + 1)}`;
|
|
96
|
+
}
|
|
97
|
+
return `${pad}${renderedKey}: ${emit(child, 0)}`;
|
|
98
|
+
})
|
|
99
|
+
.join("\n");
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=yaml.js.map
|
package/dist/yaml.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yaml.js","sourceRoot":"","sources":["../src/yaml.ts"],"names":[],"mappings":"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"}
|
package/docs/invalidate-spec.md
CHANGED
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
## Status
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Implemented. Generated route types narrow `invalidate` to the selector union, and generation
|
|
6
|
+
validates every authored selector against the route graph (a selector that names no route fails
|
|
7
|
+
`honey generate`; duplicates are removed). See "Validation Rules".
|
|
6
8
|
|
|
7
9
|
## Goal
|
|
8
10
|
|
|
@@ -74,6 +76,8 @@ Reason:
|
|
|
74
76
|
|
|
75
77
|
### Mutation Invalidating Collection Read
|
|
76
78
|
|
|
79
|
+
<!-- snippet:skip -->
|
|
80
|
+
|
|
77
81
|
```ts
|
|
78
82
|
.meta({
|
|
79
83
|
operationId: "project.create",
|
|
@@ -83,6 +87,8 @@ Reason:
|
|
|
83
87
|
|
|
84
88
|
### Mutation Invalidating Collection And Entity Reads
|
|
85
89
|
|
|
90
|
+
<!-- snippet:skip -->
|
|
91
|
+
|
|
86
92
|
```ts
|
|
87
93
|
.meta({
|
|
88
94
|
operationId: "project.update",
|
|
@@ -95,6 +101,8 @@ Reason:
|
|
|
95
101
|
|
|
96
102
|
### Mutation Invalidating Query-Like POST Reads
|
|
97
103
|
|
|
104
|
+
<!-- snippet:skip -->
|
|
105
|
+
|
|
98
106
|
```ts
|
|
99
107
|
.meta({
|
|
100
108
|
operationId: "project.import",
|
|
@@ -148,12 +156,16 @@ type GeneratedInvalidateRoute =
|
|
|
148
156
|
|
|
149
157
|
Then the generated meta type becomes effectively:
|
|
150
158
|
|
|
159
|
+
<!-- snippet:skip -->
|
|
160
|
+
|
|
151
161
|
```ts
|
|
152
162
|
invalidate?: readonly GeneratedInvalidateRoute[] | null
|
|
153
163
|
```
|
|
154
164
|
|
|
155
165
|
If generated route-aware types are unavailable, the type falls back to:
|
|
156
166
|
|
|
167
|
+
<!-- snippet:skip -->
|
|
168
|
+
|
|
157
169
|
```ts
|
|
158
170
|
readonly string[] | null
|
|
159
171
|
```
|
package/docs/meta-spec.md
CHANGED
|
@@ -7,6 +7,8 @@ Status: implemented in `@lovrozagar/honey` (tree of record: `packages/core`).
|
|
|
7
7
|
Before this feature, `generateOpenApi` mapped route meta onto the operation object with a
|
|
8
8
|
hardcoded allowlist of eight fields:
|
|
9
9
|
|
|
10
|
+
<!-- snippet:skip -->
|
|
11
|
+
|
|
10
12
|
```ts
|
|
11
13
|
summary, description, tags, deprecated, operationId, security, invalidate → x-invalidate, mcp → x-mcp
|
|
12
14
|
```
|
|
@@ -141,6 +143,8 @@ response, the query descriptor on the search input.
|
|
|
141
143
|
`read` plus `match` expresses that. Several entries read one key and are told apart by the union's
|
|
142
144
|
discriminant:
|
|
143
145
|
|
|
146
|
+
<!-- snippet:skip -->
|
|
147
|
+
|
|
144
148
|
```ts
|
|
145
149
|
schema: {
|
|
146
150
|
entityFacts: {
|
|
@@ -202,6 +206,8 @@ design assumes.
|
|
|
202
206
|
|
|
203
207
|
### 2.4 Profiles (multi-document)
|
|
204
208
|
|
|
209
|
+
<!-- snippet:skip -->
|
|
210
|
+
|
|
205
211
|
```ts
|
|
206
212
|
profiles: {
|
|
207
213
|
public: { include: ["x-entity", "x-query"] }, // default-deny — preferred
|
|
@@ -224,6 +230,8 @@ things to withhold is genuinely shorter than the list to publish.
|
|
|
224
230
|
|
|
225
231
|
- A document selects a profile:
|
|
226
232
|
|
|
233
|
+
<!-- snippet:skip -->
|
|
234
|
+
|
|
227
235
|
```ts
|
|
228
236
|
codegen: {
|
|
229
237
|
openApi: [
|
|
@@ -245,6 +253,8 @@ covers "never, anywhere".
|
|
|
245
253
|
|
|
246
254
|
`OpenApiMeta` now carries:
|
|
247
255
|
|
|
256
|
+
<!-- snippet:skip -->
|
|
257
|
+
|
|
248
258
|
```ts
|
|
249
259
|
extensions?: Record<`x-${string}`, unknown>
|
|
250
260
|
```
|
|
@@ -263,6 +273,8 @@ separation, and fails on nothing.
|
|
|
263
273
|
A fact enforced by middleware should not be retyped on every route it protects. Middleware can
|
|
264
274
|
contribute meta to every route that mounts it:
|
|
265
275
|
|
|
276
|
+
<!-- snippet:skip -->
|
|
277
|
+
|
|
266
278
|
```ts
|
|
267
279
|
export const shard = createMiddleware(fn, { meta: { tenant: "project_id" } })
|
|
268
280
|
// or: defineMiddleware({ fn, errors: […], meta: { tenant: "project_id" } })
|
|
@@ -279,26 +291,26 @@ one, because it makes a consumer confident about the wrong parameter.
|
|
|
279
291
|
Rules:
|
|
280
292
|
|
|
281
293
|
- **Explicit always wins.** Chain `.meta()` and route `.meta()` both outrank a contributed value.
|
|
282
|
-
Among middleware, later
|
|
294
|
+
Among middleware, the one that runs later wins: chain, then scoped, then route level.
|
|
283
295
|
- **Contributed meta is real meta.** It lands in the route's `mt`, so it appears on `ctx.meta`, in
|
|
284
296
|
the manifest, and — critically — it is subject to the policy. A middleware cannot smuggle an
|
|
285
297
|
untagged fact into the document: with `strict: "error"`, contributing `sla` with no policy entry
|
|
286
298
|
fails the build exactly as writing it on a route would.
|
|
287
|
-
- **A scoped middleware registered after its routes still reaches them.**
|
|
288
|
-
|
|
289
|
-
|
|
299
|
+
- **A scoped middleware registered after its routes still reaches them.** Meta is resolved from
|
|
300
|
+
the chain each route runs when the app finalizes, so registration order does not matter, and a
|
|
301
|
+
route mounted with `.route(sub)` gets the meta of the chain it is mounted on. A tag missing where
|
|
302
|
+
enforcement happens is the failure direction that matters.
|
|
290
303
|
- **`internal` may not be contributed.** It controls whether a route appears in generated artifacts
|
|
291
304
|
at all; a middleware that removed 104 routes from the document would be invisible in both the
|
|
292
305
|
route and the middleware. `createMiddleware` throws.
|
|
293
306
|
|
|
294
|
-
### Why it is resolved at
|
|
307
|
+
### Why it is resolved at finalize, not per request
|
|
295
308
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
remove. The usual contract applies: change what a middleware contributes, regenerate.
|
|
309
|
+
Contributed meta is collected once, when the app finalizes (first request, `toRouteTree()` or
|
|
310
|
+
codegen), from the same resolved chain the route runs — so the request path, `ctx.meta`, the
|
|
311
|
+
manifest and the document cannot disagree, with or without a loaded route tree. A lazily-derived
|
|
312
|
+
value per request would make the served meta depend on timing. The generated `routes.gen.ts` carries
|
|
313
|
+
the meta of the generating build; change what a middleware contributes, then regenerate.
|
|
302
314
|
|
|
303
315
|
### Two things to put in a release note
|
|
304
316
|
|
|
@@ -326,6 +338,8 @@ stamped with `searchable: null` or `tenantColumn: null` means _"I don't know"_,
|
|
|
326
338
|
straight through publishes `"x-searchable": null`, which a consumer reads as _"nothing is
|
|
327
339
|
searchable"_ — a confident wrong answer, worse than silence. Normalize in the policy:
|
|
328
340
|
|
|
341
|
+
<!-- snippet:skip -->
|
|
342
|
+
|
|
329
343
|
```ts
|
|
330
344
|
expand: (e) => ({
|
|
331
345
|
"x-entity": e.table,
|
|
@@ -423,6 +437,8 @@ Every message carries `method`, `path`, source key and target key.
|
|
|
423
437
|
|
|
424
438
|
## 6. Validating what is emitted
|
|
425
439
|
|
|
440
|
+
<!-- snippet:skip -->
|
|
441
|
+
|
|
426
442
|
```ts
|
|
427
443
|
rateLimit: {
|
|
428
444
|
key: "x-rate-limit",
|
|
@@ -451,9 +467,17 @@ eight mappings, unchanged, with the same truthiness gates and the same emit orde
|
|
|
451
467
|
| `security` | `security` (normalized) | truthy | ✓ | — |
|
|
452
468
|
| `invalidate` | `x-invalidate` | array, non-empty | ✓ | — |
|
|
453
469
|
| `mcp` | `x-mcp` | `=== true` | ✓ | — |
|
|
454
|
-
| `internal` |
|
|
470
|
+
| `internal` | _route left out_ | `=== true` | — | — |
|
|
455
471
|
| `extensions` | verbatim passthrough | — | ✓ | ✓ |
|
|
456
472
|
|
|
473
|
+
A route with `internal: true` is left out of the served and generated OpenAPI document and the
|
|
474
|
+
served `/manifest.json`; it still serves requests and still appears in `types.gen.d.ts`, so
|
|
475
|
+
services can type against it. `security` must be a scheme name, a list of names, a list of name
|
|
476
|
+
groups, or standard requirement objects — anything else fails generation instead of documenting the
|
|
477
|
+
route as public — and every scheme it names must be in `securitySchemes`. `invalidate` selectors
|
|
478
|
+
must name a registered route (`"GET /users/:id"`); a selector that names nothing fails generation
|
|
479
|
+
unless the document is generated with `invalidate: "off"`.
|
|
480
|
+
|
|
457
481
|
The WS column reproduces the previous WS mapping exactly (it was a strict subset). App entries
|
|
458
482
|
default to `on: "both"`; the asymmetry is preserved only for the built-ins.
|
|
459
483
|
|