@lovrozagar/honey 0.7.3 → 1.0.0-rc.3
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/LICENSE +21 -0
- package/README.md +930 -1664
- package/bin/honey.js +87 -27
- package/dist/adapters/bun/serve.d.ts +18 -0
- package/dist/adapters/bun/serve.js +89 -0
- package/dist/adapters/fetch-request.d.ts +20 -0
- package/dist/adapters/fetch-request.js +29 -0
- package/dist/adapters/node/headers.d.ts +27 -0
- package/dist/adapters/node/headers.js +86 -0
- package/dist/adapters/node/request.d.ts +16 -0
- package/dist/adapters/node/request.js +214 -0
- package/dist/adapters/node/response.d.ts +11 -0
- package/dist/adapters/node/response.js +126 -0
- package/dist/adapters/node/serve.d.ts +39 -0
- package/dist/adapters/node/serve.js +205 -0
- package/dist/adapters/node/url.d.ts +13 -0
- package/dist/adapters/node/url.js +87 -0
- package/dist/adapters/serve.d.ts +36 -0
- package/dist/adapters/serve.js +52 -0
- package/dist/build/artifacts.d.ts +34 -0
- package/dist/build/artifacts.js +123 -0
- package/dist/build/cli-args.d.ts +30 -0
- package/dist/build/cli-args.js +97 -0
- package/dist/build/cli.d.ts +11 -0
- package/dist/build/cli.js +150 -0
- package/dist/build/config.d.ts +102 -0
- package/dist/build/config.js +89 -0
- package/dist/build/generate.d.ts +19 -0
- package/dist/build/generate.js +80 -0
- package/dist/build/glob.d.ts +8 -0
- package/dist/build/glob.js +97 -0
- package/dist/build/index.d.ts +3 -58
- package/dist/build/index.js +3 -173
- package/dist/build/init.d.ts +3 -0
- package/dist/build/init.js +131 -0
- package/dist/build/loaders.d.ts +33 -0
- package/dist/build/loaders.js +105 -0
- package/dist/build/plugin.d.ts +52 -0
- package/dist/build/plugin.js +146 -0
- package/dist/build/source.d.ts +21 -0
- package/dist/build/source.js +100 -0
- package/dist/build/targets.d.ts +59 -0
- package/dist/build/targets.js +107 -0
- package/dist/context/context.d.ts +111 -0
- package/dist/context/context.js +213 -0
- package/dist/context/cookie-sign.d.ts +38 -0
- package/dist/context/cookie-sign.js +113 -0
- package/dist/context/cookie.d.ts +28 -0
- package/dist/context/cookie.js +142 -0
- package/dist/context/peer.d.ts +34 -0
- package/dist/context/peer.js +190 -0
- package/dist/errors/error.d.ts +60 -0
- package/dist/errors/error.js +84 -0
- package/dist/errors/errors.d.ts +45 -0
- package/dist/errors/errors.js +31 -0
- package/dist/errors/on-error.d.ts +10 -0
- package/dist/errors/on-error.js +204 -0
- package/dist/errors/problem-json.d.ts +14 -0
- package/dist/errors/problem-json.js +58 -0
- package/dist/errors/projector.d.ts +50 -0
- package/dist/errors/projector.js +107 -0
- package/dist/i18n/error-i18n.d.ts +26 -0
- package/dist/i18n/error-i18n.js +77 -0
- package/dist/i18n/i18n.d.ts +21 -0
- package/dist/i18n/i18n.js +40 -0
- package/dist/i18n/icu.d.ts +29 -0
- package/dist/i18n/icu.js +170 -0
- package/dist/i18n/index.d.ts +4 -0
- package/dist/i18n/index.js +3 -0
- package/dist/index.d.ts +30 -746
- package/dist/index.js +12 -2364
- package/dist/input/accepts.d.ts +5 -0
- package/dist/input/accepts.js +105 -0
- package/dist/input/binary.d.ts +20 -0
- package/dist/input/binary.js +40 -0
- package/dist/input/body-kind.d.ts +15 -0
- package/dist/input/body-kind.js +47 -0
- package/dist/input/body-limit.d.ts +21 -0
- package/dist/input/body-limit.js +99 -0
- package/dist/input/cookies.d.ts +7 -0
- package/dist/input/cookies.js +8 -0
- package/dist/input/form.d.ts +10 -0
- package/dist/input/form.js +24 -0
- package/dist/input/headers.d.ts +7 -0
- package/dist/input/headers.js +8 -0
- package/dist/input/input.d.ts +91 -0
- package/dist/input/input.js +88 -0
- package/dist/input/json.d.ts +10 -0
- package/dist/input/json.js +22 -0
- package/dist/input/params.d.ts +7 -0
- package/dist/input/params.js +8 -0
- package/dist/input/query.d.ts +10 -0
- package/dist/input/query.js +17 -0
- package/dist/mcp/mount.d.ts +116 -0
- package/dist/mcp/mount.js +45 -0
- package/dist/mcp/oauth.d.ts +14 -0
- package/dist/mcp/oauth.js +88 -0
- package/dist/mcp/uploads.d.ts +36 -0
- package/dist/mcp/uploads.js +171 -0
- package/dist/mcp/url-files.d.ts +32 -0
- package/dist/mcp/url-files.js +75 -0
- package/dist/meta/meta-spec-apply.d.ts +25 -0
- package/dist/meta/meta-spec-apply.js +83 -0
- package/dist/meta/meta-spec-merge.d.ts +103 -0
- package/dist/meta/meta-spec-merge.js +50 -0
- package/dist/meta/meta-spec-validate.d.ts +61 -0
- package/dist/meta/meta-spec-validate.js +166 -0
- package/dist/meta/meta-spec.d.ts +49 -0
- package/dist/meta/meta-spec.js +197 -0
- package/dist/middleware/compress.d.ts +15 -0
- package/dist/middleware/compress.js +93 -0
- package/dist/middleware/cors.d.ts +18 -0
- package/dist/middleware/cors.js +80 -0
- package/dist/middleware/csrf.d.ts +11 -0
- package/dist/middleware/csrf.js +65 -0
- package/dist/middleware/ip-restrict.d.ts +10 -0
- package/dist/middleware/ip-restrict.js +82 -0
- package/dist/middleware/middleware.d.ts +53 -0
- package/dist/middleware/middleware.js +112 -0
- package/dist/middleware/powered-by.d.ts +6 -0
- package/dist/middleware/powered-by.js +13 -0
- package/dist/middleware/rate-limit.d.ts +40 -0
- package/dist/middleware/rate-limit.js +90 -0
- package/dist/middleware/request-id.d.ts +25 -0
- package/dist/middleware/request-id.js +30 -0
- package/dist/middleware/secure-headers.d.ts +18 -0
- package/dist/middleware/secure-headers.js +36 -0
- package/dist/middleware/server-timing.d.ts +8 -0
- package/dist/middleware/server-timing.js +52 -0
- package/dist/middleware/timeout.d.ts +6 -0
- package/dist/middleware/timeout.js +29 -0
- package/dist/observability/curl-logger.d.ts +46 -0
- package/dist/observability/curl-logger.js +175 -0
- package/dist/observability/request-to-curl.d.ts +17 -0
- package/dist/observability/request-to-curl.js +47 -0
- package/dist/openapi/collect.d.ts +56 -18
- package/dist/openapi/collect.js +109 -23
- package/dist/openapi/components.d.ts +9 -0
- package/dist/openapi/components.js +90 -0
- package/dist/openapi/docs-page.d.ts +20 -18
- package/dist/openapi/docs-page.js +28 -46
- package/dist/openapi/document.d.ts +33 -26
- package/dist/openapi/document.js +21 -780
- package/dist/openapi/extract-schemas.d.ts +11 -0
- package/dist/openapi/extract-schemas.js +31 -0
- package/dist/openapi/generate.d.ts +47 -0
- package/dist/openapi/generate.js +180 -0
- package/dist/openapi/manifest.d.ts +41 -0
- package/dist/openapi/manifest.js +49 -0
- package/dist/openapi/output-keys.d.ts +6 -0
- package/dist/openapi/output-keys.js +24 -0
- package/dist/openapi/paths.d.ts +35 -0
- package/dist/openapi/paths.js +175 -0
- package/dist/openapi/register.d.ts +14 -3
- package/dist/openapi/register.js +13 -20
- package/dist/openapi/responses.d.ts +44 -0
- package/dist/openapi/responses.js +159 -0
- package/dist/openapi/scalar.d.ts +4 -14
- package/dist/openapi/scalar.js +5 -7
- package/dist/openapi/security.d.ts +4 -0
- package/dist/openapi/security.js +25 -0
- package/dist/openapi/serve.d.ts +25 -9
- package/dist/openapi/serve.js +108 -29
- package/dist/openapi/servers.d.ts +19 -0
- package/dist/openapi/servers.js +72 -0
- package/dist/openapi/swagger.d.ts +4 -14
- package/dist/openapi/swagger.js +5 -7
- package/dist/openapi/tags.d.ts +20 -0
- package/dist/openapi/tags.js +20 -0
- package/dist/openapi/webhooks.d.ts +19 -0
- package/dist/openapi/webhooks.js +70 -0
- package/dist/openapi/yaml.d.ts +8 -0
- package/dist/openapi/yaml.js +74 -0
- package/dist/proxy/headers.d.ts +30 -0
- package/dist/proxy/headers.js +86 -0
- package/dist/proxy/proxy.d.ts +39 -0
- package/dist/proxy/proxy.js +103 -0
- package/dist/proxy/upstream.d.ts +30 -0
- package/dist/proxy/upstream.js +116 -0
- package/dist/realtime/bus.d.ts +10 -13
- package/dist/realtime/bus.js +48 -93
- package/dist/realtime/invoke-user.d.ts +36 -0
- package/dist/realtime/invoke-user.js +103 -0
- package/dist/realtime/realtime.d.ts +7 -0
- package/dist/realtime/realtime.js +40 -0
- package/dist/realtime/route.d.ts +33 -27
- package/dist/realtime/route.js +27 -43
- package/dist/realtime/server.d.ts +24 -28
- package/dist/realtime/server.js +202 -225
- package/dist/response/binary.d.ts +18 -0
- package/dist/response/binary.js +10 -0
- package/dist/response/builder.d.ts +73 -0
- package/dist/response/builder.js +214 -0
- package/dist/response/cache-control.d.ts +30 -0
- package/dist/response/cache-control.js +74 -0
- package/dist/response/etag.d.ts +15 -0
- package/dist/response/etag.js +83 -0
- package/dist/response/media-type.d.ts +28 -0
- package/dist/response/media-type.js +97 -0
- package/dist/response/out-headers.d.ts +31 -0
- package/dist/response/out-headers.js +130 -0
- package/dist/response/pretty-json.d.ts +10 -0
- package/dist/response/pretty-json.js +44 -0
- package/dist/response/range.d.ts +19 -0
- package/dist/response/range.js +98 -0
- package/dist/response/response-headers.d.ts +11 -0
- package/dist/response/response-headers.js +21 -0
- package/dist/response/response.d.ts +69 -0
- package/dist/response/response.js +208 -0
- package/dist/response/sse.d.ts +41 -0
- package/dist/response/sse.js +73 -0
- package/dist/response/static.d.ts +20 -0
- package/dist/response/static.js +181 -0
- package/dist/response/status.d.ts +5 -0
- package/dist/response/status.js +68 -0
- package/dist/response/with-headers.d.ts +11 -0
- package/dist/response/with-headers.js +47 -0
- package/dist/routing/app-types.d.ts +175 -0
- package/dist/routing/app-types.js +1 -0
- package/dist/routing/app.d.ts +76 -0
- package/dist/routing/app.js +137 -0
- package/dist/routing/codegen-types.d.ts +17 -0
- package/dist/routing/codegen-types.js +1 -0
- package/dist/routing/delegate.d.ts +9 -0
- package/dist/routing/delegate.js +75 -0
- package/dist/routing/dispatch.d.ts +22 -0
- package/dist/routing/dispatch.js +255 -0
- package/dist/routing/finalize.d.ts +47 -0
- package/dist/routing/finalize.js +169 -0
- package/dist/routing/gateway-tree.d.ts +19 -0
- package/dist/routing/gateway-tree.js +74 -0
- package/dist/routing/invalidate-check.d.ts +58 -0
- package/dist/routing/invalidate-check.js +124 -0
- package/dist/routing/match.d.ts +22 -0
- package/dist/routing/match.js +108 -0
- package/dist/routing/meta-types.d.ts +34 -0
- package/dist/routing/meta-types.js +5 -0
- package/dist/routing/middleware-chain.d.ts +16 -0
- package/dist/routing/middleware-chain.js +41 -0
- package/dist/routing/output-types.d.ts +91 -0
- package/dist/routing/output-types.js +1 -0
- package/dist/routing/pattern.d.ts +55 -0
- package/dist/routing/pattern.js +219 -0
- package/dist/routing/record.d.ts +18 -0
- package/dist/routing/record.js +4 -0
- package/dist/routing/register.d.ts +135 -0
- package/dist/routing/register.js +155 -0
- package/dist/routing/request-path.d.ts +30 -0
- package/dist/routing/request-path.js +173 -0
- package/dist/routing/route-builder.d.ts +160 -0
- package/dist/routing/route-builder.js +86 -0
- package/dist/routing/route-tree.d.ts +18 -0
- package/dist/routing/route-tree.js +91 -0
- package/dist/routing/settings-chain.d.ts +75 -0
- package/dist/routing/settings-chain.js +137 -0
- package/dist/routing/settings.d.ts +90 -0
- package/dist/routing/settings.js +44 -0
- package/dist/routing/tap.d.ts +31 -0
- package/dist/routing/tap.js +77 -0
- package/dist/routing/tree-merge.d.ts +7 -0
- package/dist/routing/tree-merge.js +77 -0
- package/dist/routing/tree.d.ts +85 -0
- package/dist/routing/tree.js +196 -0
- package/dist/routing/types.d.ts +20 -0
- package/dist/routing/types.js +1 -0
- package/dist/routing/ws-builder.d.ts +62 -0
- package/dist/routing/ws-builder.js +109 -0
- package/dist/runtime/detect-runtime.d.ts +16 -0
- package/dist/runtime/detect-runtime.js +11 -0
- package/dist/runtime/optional-peer.d.ts +10 -0
- package/dist/runtime/optional-peer.js +19 -0
- package/dist/schema/arktype.d.ts +7 -0
- package/dist/schema/arktype.js +13 -0
- package/dist/schema/canonicalize.d.ts +8 -0
- package/dist/schema/canonicalize.js +19 -0
- package/dist/schema/effect.d.ts +7 -0
- package/dist/schema/effect.js +4 -0
- package/dist/schema/naming.d.ts +31 -0
- package/dist/schema/naming.js +116 -0
- package/dist/schema/sanitize-spec.d.ts +15 -0
- package/dist/schema/sanitize-spec.js +43 -0
- package/dist/schema/slots.d.ts +15 -0
- package/dist/schema/slots.js +179 -0
- package/dist/schema/to-json-schema.d.ts +34 -0
- package/dist/schema/to-json-schema.js +94 -0
- package/dist/schema/valibot.d.ts +4 -0
- package/dist/schema/valibot.js +153 -0
- package/dist/schema/yup.d.ts +3 -0
- package/dist/schema/yup.js +57 -0
- package/dist/schema/zod.d.ts +6 -0
- package/dist/schema/zod.js +192 -0
- package/dist/security/crypto.d.ts +7 -0
- package/dist/security/crypto.js +30 -0
- package/dist/streaming/producer-stream.d.ts +45 -0
- package/dist/streaming/producer-stream.js +251 -0
- package/dist/telemetry/fields.d.ts +43 -0
- package/dist/telemetry/fields.js +64 -0
- package/dist/telemetry/log-format.d.ts +7 -0
- package/dist/telemetry/log-format.js +43 -0
- package/dist/telemetry/logger.d.ts +44 -0
- package/dist/telemetry/logger.js +136 -0
- package/dist/telemetry/otel-subpath.d.ts +7 -0
- package/dist/telemetry/otel-subpath.js +5 -0
- package/dist/telemetry/otel.d.ts +50 -57
- package/dist/telemetry/otel.js +54 -130
- package/dist/telemetry/request-log.d.ts +22 -0
- package/dist/telemetry/request-log.js +83 -0
- package/dist/telemetry/request-trace.d.ts +123 -0
- package/dist/telemetry/request-trace.js +199 -0
- package/dist/telemetry/span-lifecycle.d.ts +11 -0
- package/dist/telemetry/span-lifecycle.js +114 -0
- package/dist/telemetry/traceparent.d.ts +40 -0
- package/dist/telemetry/traceparent.js +73 -0
- package/dist/testing/testing.d.ts +42 -0
- package/dist/testing/testing.js +101 -0
- package/dist/validation/content-type.d.ts +21 -0
- package/dist/validation/content-type.js +42 -0
- package/dist/validation/standard-schema.d.ts +41 -0
- package/dist/validation/standard-schema.js +5 -0
- package/dist/validation/validate-input.d.ts +45 -0
- package/dist/validation/validate-input.js +174 -0
- package/dist/validation/validate-output.d.ts +34 -0
- package/dist/validation/validate-output.js +107 -0
- package/dist/ws/bun.d.ts +30 -25
- package/dist/ws/bun.js +42 -46
- package/dist/ws/cloudflare.d.ts +6 -75
- package/dist/ws/cloudflare.js +37 -104
- package/dist/ws/contract.d.ts +74 -0
- package/dist/ws/contract.js +83 -0
- package/dist/ws/node.d.ts +12 -21
- package/dist/ws/node.js +103 -151
- package/dist/ws/origin.d.ts +23 -0
- package/dist/ws/origin.js +48 -0
- package/dist/ws/route.d.ts +14 -0
- package/dist/ws/route.js +5 -0
- package/dist/ws/session.d.ts +15 -6
- package/dist/ws/session.js +22 -23
- package/dist/ws/shared.d.ts +23 -33
- package/dist/ws/shared.js +53 -39
- package/package.json +169 -251
- package/dist/accepts.d.ts +0 -12
- package/dist/accepts.d.ts.map +0 -1
- package/dist/accepts.js +0 -126
- package/dist/accepts.js.map +0 -1
- package/dist/body-kind.d.ts +0 -26
- package/dist/body-kind.d.ts.map +0 -1
- package/dist/body-kind.js +0 -70
- package/dist/body-kind.js.map +0 -1
- package/dist/body-limit.d.ts +0 -26
- package/dist/body-limit.d.ts.map +0 -1
- package/dist/body-limit.js +0 -126
- package/dist/body-limit.js.map +0 -1
- package/dist/build/index.d.ts.map +0 -1
- package/dist/build/index.js.map +0 -1
- package/dist/cli-args.d.ts +0 -33
- package/dist/cli-args.d.ts.map +0 -1
- package/dist/cli-args.js +0 -102
- package/dist/cli-args.js.map +0 -1
- package/dist/cli-go/auth.go +0 -26
- package/dist/cli-go/config.go +0 -192
- package/dist/cli-go/errors.go +0 -75
- package/dist/cli-go/multipart.go +0 -79
- package/dist/cli-go/output.go +0 -163
- package/dist/cli-go/root.go +0 -30
- package/dist/cli-go/stream.go +0 -88
- package/dist/cli-go/version.go +0 -5
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -209
- package/dist/cli.js.map +0 -1
- package/dist/client/defaults.d.ts +0 -12
- package/dist/client/defaults.d.ts.map +0 -1
- package/dist/client/defaults.js +0 -48
- package/dist/client/defaults.js.map +0 -1
- package/dist/client/error.d.ts +0 -49
- package/dist/client/error.d.ts.map +0 -1
- package/dist/client/error.js +0 -71
- package/dist/client/error.js.map +0 -1
- package/dist/client/http.d.ts +0 -155
- package/dist/client/http.d.ts.map +0 -1
- package/dist/client/http.js +0 -571
- package/dist/client/http.js.map +0 -1
- package/dist/client/index.d.ts +0 -23
- package/dist/client/index.d.ts.map +0 -1
- package/dist/client/index.js +0 -95
- package/dist/client/index.js.map +0 -1
- package/dist/client/path.d.ts +0 -26
- package/dist/client/path.d.ts.map +0 -1
- package/dist/client/path.js +0 -163
- package/dist/client/path.js.map +0 -1
- package/dist/client/redirect-policy.d.ts +0 -12
- package/dist/client/redirect-policy.d.ts.map +0 -1
- package/dist/client/redirect-policy.js +0 -20
- package/dist/client/redirect-policy.js.map +0 -1
- package/dist/client/sdk.d.ts +0 -70
- package/dist/client/sdk.d.ts.map +0 -1
- package/dist/client/sdk.js +0 -292
- package/dist/client/sdk.js.map +0 -1
- package/dist/client/sse.d.ts +0 -23
- package/dist/client/sse.d.ts.map +0 -1
- package/dist/client/sse.js +0 -129
- package/dist/client/sse.js.map +0 -1
- package/dist/client/types.d.ts +0 -124
- package/dist/client/types.d.ts.map +0 -1
- package/dist/client/types.js +0 -2
- package/dist/client/types.js.map +0 -1
- package/dist/client/ws.d.ts +0 -22
- package/dist/client/ws.d.ts.map +0 -1
- package/dist/client/ws.js +0 -112
- package/dist/client/ws.js.map +0 -1
- package/dist/client-go/errors.go +0 -236
- package/dist/client-go/export.go +0 -44
- package/dist/client-go/invalidation.go +0 -371
- package/dist/client-go/nullable.go +0 -62
- package/dist/client-go/realtime.go +0 -354
- package/dist/client-go/result.go +0 -20
- package/dist/client-go/runtime.go +0 -975
- package/dist/client-go/sse.go +0 -159
- package/dist/client-go/transport.go +0 -495
- package/dist/client-go/ws.go +0 -128
- package/dist/client-info.d.ts +0 -36
- package/dist/client-info.d.ts.map +0 -1
- package/dist/client-info.js +0 -53
- package/dist/client-info.js.map +0 -1
- package/dist/client-mcp/README.md +0 -10
- package/dist/client-mcp/server.ts +0 -221
- package/dist/client-mcp/types.ts +0 -19
- package/dist/client-python/_errors.py +0 -115
- package/dist/client-python/_invalidation.py +0 -494
- package/dist/client-python/_realtime.py +0 -179
- package/dist/client-python/_runtime.py +0 -860
- package/dist/client-python/_sse.py +0 -155
- package/dist/client-python/_transport.py +0 -366
- package/dist/client-python/_ws.py +0 -159
- package/dist/client-python/py.typed +0 -0
- package/dist/client-rust/errors.rs +0 -220
- package/dist/client-rust/invalidation.rs +0 -412
- package/dist/client-rust/invalidation_sync.rs +0 -93
- package/dist/client-rust/nullable.rs +0 -17
- package/dist/client-rust/realtime.rs +0 -702
- package/dist/client-rust/result.rs +0 -22
- package/dist/client-rust/runtime.rs +0 -980
- package/dist/client-rust/runtime_sync.rs +0 -484
- package/dist/client-rust/sse.rs +0 -188
- package/dist/client-rust/ws.rs +0 -167
- package/dist/codegen-go-cli.d.ts +0 -22
- package/dist/codegen-go-cli.d.ts.map +0 -1
- package/dist/codegen-go-cli.js +0 -964
- package/dist/codegen-go-cli.js.map +0 -1
- package/dist/codegen-go.d.ts +0 -41
- package/dist/codegen-go.d.ts.map +0 -1
- package/dist/codegen-go.js +0 -872
- package/dist/codegen-go.js.map +0 -1
- package/dist/codegen-hash.d.ts +0 -3
- package/dist/codegen-hash.d.ts.map +0 -1
- package/dist/codegen-hash.js +0 -9
- package/dist/codegen-hash.js.map +0 -1
- package/dist/codegen-ir.d.ts +0 -190
- package/dist/codegen-ir.d.ts.map +0 -1
- package/dist/codegen-ir.js +0 -661
- package/dist/codegen-ir.js.map +0 -1
- package/dist/codegen-lang.d.ts +0 -65
- package/dist/codegen-lang.d.ts.map +0 -1
- package/dist/codegen-lang.js +0 -526
- package/dist/codegen-lang.js.map +0 -1
- package/dist/codegen-load.d.ts +0 -31
- package/dist/codegen-load.d.ts.map +0 -1
- package/dist/codegen-load.js +0 -138
- package/dist/codegen-load.js.map +0 -1
- package/dist/codegen-loaders.d.ts +0 -12
- package/dist/codegen-loaders.d.ts.map +0 -1
- package/dist/codegen-loaders.js +0 -55
- package/dist/codegen-loaders.js.map +0 -1
- package/dist/codegen-mcp.d.ts +0 -13
- package/dist/codegen-mcp.d.ts.map +0 -1
- package/dist/codegen-mcp.js +0 -368
- package/dist/codegen-mcp.js.map +0 -1
- package/dist/codegen-python.d.ts +0 -33
- package/dist/codegen-python.d.ts.map +0 -1
- package/dist/codegen-python.js +0 -828
- package/dist/codegen-python.js.map +0 -1
- package/dist/codegen-route-tree-intern.d.ts +0 -40
- package/dist/codegen-route-tree-intern.d.ts.map +0 -1
- package/dist/codegen-route-tree-intern.js +0 -221
- package/dist/codegen-route-tree-intern.js.map +0 -1
- package/dist/codegen-rust.d.ts +0 -18
- package/dist/codegen-rust.d.ts.map +0 -1
- package/dist/codegen-rust.js +0 -1293
- package/dist/codegen-rust.js.map +0 -1
- package/dist/codegen-sanitize.d.ts +0 -3
- package/dist/codegen-sanitize.d.ts.map +0 -1
- package/dist/codegen-sanitize.js +0 -56
- package/dist/codegen-sanitize.js.map +0 -1
- package/dist/codegen-schema-naming.d.ts +0 -27
- package/dist/codegen-schema-naming.d.ts.map +0 -1
- package/dist/codegen-schema-naming.js +0 -150
- package/dist/codegen-schema-naming.js.map +0 -1
- package/dist/codegen-sdk-model.d.ts +0 -71
- package/dist/codegen-sdk-model.d.ts.map +0 -1
- package/dist/codegen-sdk-model.js +0 -179
- package/dist/codegen-sdk-model.js.map +0 -1
- package/dist/codegen.d.ts +0 -187
- package/dist/codegen.d.ts.map +0 -1
- package/dist/codegen.js +0 -4619
- package/dist/codegen.js.map +0 -1
- package/dist/context.d.ts +0 -86
- package/dist/context.d.ts.map +0 -1
- package/dist/context.js +0 -242
- package/dist/context.js.map +0 -1
- package/dist/cookie-sign.d.ts +0 -17
- package/dist/cookie-sign.d.ts.map +0 -1
- package/dist/cookie-sign.js +0 -104
- package/dist/cookie-sign.js.map +0 -1
- package/dist/cookie.d.ts +0 -24
- package/dist/cookie.d.ts.map +0 -1
- package/dist/cookie.js +0 -138
- package/dist/cookie.js.map +0 -1
- package/dist/cors.d.ts +0 -14
- package/dist/cors.d.ts.map +0 -1
- package/dist/cors.js +0 -87
- package/dist/cors.js.map +0 -1
- package/dist/crypto.d.ts +0 -7
- package/dist/crypto.d.ts.map +0 -1
- package/dist/crypto.js +0 -38
- package/dist/crypto.js.map +0 -1
- package/dist/csrf.d.ts +0 -28
- package/dist/csrf.d.ts.map +0 -1
- package/dist/csrf.js +0 -79
- package/dist/csrf.js.map +0 -1
- package/dist/curl-logger.d.ts +0 -44
- package/dist/curl-logger.d.ts.map +0 -1
- package/dist/curl-logger.js +0 -199
- package/dist/curl-logger.js.map +0 -1
- package/dist/detect-runtime.d.ts +0 -16
- package/dist/detect-runtime.d.ts.map +0 -1
- package/dist/detect-runtime.js +0 -13
- package/dist/detect-runtime.js.map +0 -1
- package/dist/dict.d.ts +0 -11
- package/dist/dict.d.ts.map +0 -1
- package/dist/dict.js +0 -13
- package/dist/dict.js.map +0 -1
- package/dist/error.d.ts +0 -21
- package/dist/error.d.ts.map +0 -1
- package/dist/error.js +0 -44
- package/dist/error.js.map +0 -1
- package/dist/errors.d.ts +0 -40
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js +0 -39
- package/dist/errors.js.map +0 -1
- package/dist/etag.d.ts +0 -11
- package/dist/etag.d.ts.map +0 -1
- package/dist/etag.js +0 -82
- package/dist/etag.js.map +0 -1
- package/dist/feature-detect.d.ts +0 -25
- package/dist/feature-detect.d.ts.map +0 -1
- package/dist/feature-detect.js +0 -144
- package/dist/feature-detect.js.map +0 -1
- package/dist/feature-load.d.ts +0 -3
- package/dist/feature-load.d.ts.map +0 -1
- package/dist/feature-load.js +0 -36
- package/dist/feature-load.js.map +0 -1
- package/dist/feature-slots.d.ts +0 -44
- package/dist/feature-slots.d.ts.map +0 -1
- package/dist/feature-slots.js +0 -48
- package/dist/feature-slots.js.map +0 -1
- package/dist/fetch-request.d.ts +0 -10
- package/dist/fetch-request.d.ts.map +0 -1
- package/dist/fetch-request.js +0 -13
- package/dist/fetch-request.js.map +0 -1
- package/dist/gen-process.d.ts +0 -15
- package/dist/gen-process.d.ts.map +0 -1
- package/dist/gen-process.js +0 -43
- package/dist/gen-process.js.map +0 -1
- package/dist/gen-write.d.ts +0 -19
- package/dist/gen-write.d.ts.map +0 -1
- package/dist/gen-write.js +0 -120
- package/dist/gen-write.js.map +0 -1
- package/dist/glob.d.ts +0 -21
- package/dist/glob.d.ts.map +0 -1
- package/dist/glob.js +0 -115
- package/dist/glob.js.map +0 -1
- package/dist/go-type-emitter.d.ts +0 -47
- package/dist/go-type-emitter.d.ts.map +0 -1
- package/dist/go-type-emitter.js +0 -594
- package/dist/go-type-emitter.js.map +0 -1
- package/dist/honey-response.d.ts +0 -82
- package/dist/honey-response.d.ts.map +0 -1
- package/dist/honey-response.js +0 -338
- package/dist/honey-response.js.map +0 -1
- package/dist/i18n-slot.d.ts +0 -15
- package/dist/i18n-slot.d.ts.map +0 -1
- package/dist/i18n-slot.js +0 -14
- package/dist/i18n-slot.js.map +0 -1
- package/dist/i18n.d.ts +0 -29
- package/dist/i18n.d.ts.map +0 -1
- package/dist/i18n.js +0 -250
- package/dist/i18n.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/init.d.ts +0 -5
- package/dist/init.d.ts.map +0 -1
- package/dist/init.js +0 -140
- package/dist/init.js.map +0 -1
- package/dist/input.d.ts +0 -6
- package/dist/input.d.ts.map +0 -1
- package/dist/input.js +0 -4
- package/dist/input.js.map +0 -1
- package/dist/invalidate-check.d.ts +0 -61
- package/dist/invalidate-check.d.ts.map +0 -1
- package/dist/invalidate-check.js +0 -163
- package/dist/invalidate-check.js.map +0 -1
- package/dist/invoke-user.d.ts +0 -35
- package/dist/invoke-user.d.ts.map +0 -1
- package/dist/invoke-user.js +0 -73
- package/dist/invoke-user.js.map +0 -1
- package/dist/ip-restrict.d.ts +0 -24
- package/dist/ip-restrict.d.ts.map +0 -1
- package/dist/ip-restrict.js +0 -60
- package/dist/ip-restrict.js.map +0 -1
- package/dist/ip.d.ts +0 -39
- package/dist/ip.d.ts.map +0 -1
- package/dist/ip.js +0 -209
- package/dist/ip.js.map +0 -1
- package/dist/logger.d.ts +0 -45
- package/dist/logger.d.ts.map +0 -1
- package/dist/logger.js +0 -113
- package/dist/logger.js.map +0 -1
- package/dist/media-type.d.ts +0 -30
- package/dist/media-type.d.ts.map +0 -1
- package/dist/media-type.js +0 -97
- package/dist/media-type.js.map +0 -1
- package/dist/meta-spec-merge.d.ts +0 -32
- package/dist/meta-spec-merge.d.ts.map +0 -1
- package/dist/meta-spec-merge.js +0 -68
- package/dist/meta-spec-merge.js.map +0 -1
- package/dist/meta-spec.d.ts +0 -94
- package/dist/meta-spec.d.ts.map +0 -1
- package/dist/meta-spec.js +0 -535
- package/dist/meta-spec.js.map +0 -1
- package/dist/middleware.d.ts +0 -77
- package/dist/middleware.d.ts.map +0 -1
- package/dist/middleware.js +0 -253
- package/dist/middleware.js.map +0 -1
- package/dist/node-request.d.ts +0 -104
- package/dist/node-request.d.ts.map +0 -1
- package/dist/node-request.js +0 -407
- package/dist/node-request.js.map +0 -1
- package/dist/node.d.ts +0 -30
- package/dist/node.d.ts.map +0 -1
- package/dist/node.js +0 -396
- package/dist/node.js.map +0 -1
- package/dist/openapi/collect.d.ts.map +0 -1
- package/dist/openapi/collect.js.map +0 -1
- package/dist/openapi/docs-page.d.ts.map +0 -1
- package/dist/openapi/docs-page.js.map +0 -1
- package/dist/openapi/document.d.ts.map +0 -1
- package/dist/openapi/document.js.map +0 -1
- package/dist/openapi/json-schema-slot.d.ts +0 -12
- package/dist/openapi/json-schema-slot.d.ts.map +0 -1
- package/dist/openapi/json-schema-slot.js +0 -38
- package/dist/openapi/json-schema-slot.js.map +0 -1
- package/dist/openapi/register.d.ts.map +0 -1
- package/dist/openapi/register.js.map +0 -1
- package/dist/openapi/scalar.d.ts.map +0 -1
- package/dist/openapi/scalar.js.map +0 -1
- package/dist/openapi/serve.d.ts.map +0 -1
- package/dist/openapi/serve.js.map +0 -1
- package/dist/openapi/spec-factory.d.ts +0 -65
- package/dist/openapi/spec-factory.d.ts.map +0 -1
- package/dist/openapi/spec-factory.js +0 -52
- package/dist/openapi/spec-factory.js.map +0 -1
- package/dist/openapi/spec.d.ts +0 -29
- package/dist/openapi/spec.d.ts.map +0 -1
- package/dist/openapi/spec.js +0 -50
- package/dist/openapi/spec.js.map +0 -1
- package/dist/openapi/swagger.d.ts.map +0 -1
- package/dist/openapi/swagger.js.map +0 -1
- package/dist/pattern.d.ts +0 -71
- package/dist/pattern.d.ts.map +0 -1
- package/dist/pattern.js +0 -239
- package/dist/pattern.js.map +0 -1
- package/dist/peer.d.ts +0 -17
- package/dist/peer.d.ts.map +0 -1
- package/dist/peer.js +0 -50
- package/dist/peer.js.map +0 -1
- package/dist/plugin.d.ts +0 -228
- package/dist/plugin.d.ts.map +0 -1
- package/dist/plugin.js +0 -666
- package/dist/plugin.js.map +0 -1
- package/dist/powered-by.d.ts +0 -7
- package/dist/powered-by.d.ts.map +0 -1
- package/dist/powered-by.js +0 -11
- package/dist/powered-by.js.map +0 -1
- package/dist/pretty-json.d.ts +0 -10
- package/dist/pretty-json.d.ts.map +0 -1
- package/dist/pretty-json.js +0 -47
- package/dist/pretty-json.js.map +0 -1
- package/dist/producer-stream.d.ts +0 -47
- package/dist/producer-stream.d.ts.map +0 -1
- package/dist/producer-stream.js +0 -267
- package/dist/producer-stream.js.map +0 -1
- package/dist/proxy.d.ts +0 -90
- package/dist/proxy.d.ts.map +0 -1
- package/dist/proxy.js +0 -274
- package/dist/proxy.js.map +0 -1
- package/dist/python-type-emitter.d.ts +0 -24
- package/dist/python-type-emitter.d.ts.map +0 -1
- package/dist/python-type-emitter.js +0 -157
- package/dist/python-type-emitter.js.map +0 -1
- package/dist/realtime/bus.d.ts.map +0 -1
- package/dist/realtime/bus.js.map +0 -1
- package/dist/realtime/register.d.ts +0 -3
- package/dist/realtime/register.d.ts.map +0 -1
- package/dist/realtime/register.js +0 -10
- package/dist/realtime/register.js.map +0 -1
- package/dist/realtime/route.d.ts.map +0 -1
- package/dist/realtime/route.js.map +0 -1
- package/dist/realtime/server.d.ts.map +0 -1
- package/dist/realtime/server.js.map +0 -1
- package/dist/request-id.d.ts +0 -19
- package/dist/request-id.d.ts.map +0 -1
- package/dist/request-id.js +0 -16
- package/dist/request-id.js.map +0 -1
- package/dist/request-limits.d.ts +0 -3
- package/dist/request-limits.d.ts.map +0 -1
- package/dist/request-limits.js +0 -3
- package/dist/request-limits.js.map +0 -1
- package/dist/request-path.d.ts +0 -33
- package/dist/request-path.d.ts.map +0 -1
- package/dist/request-path.js +0 -178
- package/dist/request-path.js.map +0 -1
- package/dist/request-to-curl.d.ts +0 -15
- package/dist/request-to-curl.d.ts.map +0 -1
- package/dist/request-to-curl.js +0 -48
- package/dist/request-to-curl.js.map +0 -1
- package/dist/response.d.ts +0 -86
- package/dist/response.d.ts.map +0 -1
- package/dist/response.js +0 -313
- package/dist/response.js.map +0 -1
- package/dist/rust-type-emitter.d.ts +0 -44
- package/dist/rust-type-emitter.d.ts.map +0 -1
- package/dist/rust-type-emitter.js +0 -463
- package/dist/rust-type-emitter.js.map +0 -1
- package/dist/secure-headers.d.ts +0 -16
- package/dist/secure-headers.d.ts.map +0 -1
- package/dist/secure-headers.js +0 -53
- package/dist/secure-headers.js.map +0 -1
- package/dist/serve-register.d.ts +0 -6
- package/dist/serve-register.d.ts.map +0 -1
- package/dist/serve-register.js +0 -9
- package/dist/serve-register.js.map +0 -1
- package/dist/serve-slot.d.ts +0 -9
- package/dist/serve-slot.d.ts.map +0 -1
- package/dist/serve-slot.js +0 -52
- package/dist/serve-slot.js.map +0 -1
- package/dist/serve.d.ts +0 -38
- package/dist/serve.d.ts.map +0 -1
- package/dist/serve.js +0 -157
- package/dist/serve.js.map +0 -1
- package/dist/server-timing.d.ts +0 -9
- package/dist/server-timing.d.ts.map +0 -1
- package/dist/server-timing.js +0 -51
- package/dist/server-timing.js.map +0 -1
- package/dist/static.d.ts +0 -21
- package/dist/static.d.ts.map +0 -1
- package/dist/static.js +0 -102
- package/dist/static.js.map +0 -1
- package/dist/telemetry/otel.d.ts.map +0 -1
- package/dist/telemetry/otel.js.map +0 -1
- package/dist/testing.d.ts +0 -36
- package/dist/testing.d.ts.map +0 -1
- package/dist/testing.js +0 -124
- package/dist/testing.js.map +0 -1
- package/dist/timeout.d.ts +0 -13
- package/dist/timeout.d.ts.map +0 -1
- package/dist/timeout.js +0 -36
- package/dist/timeout.js.map +0 -1
- package/dist/tree.d.ts +0 -197
- package/dist/tree.d.ts.map +0 -1
- package/dist/tree.js +0 -437
- package/dist/tree.js.map +0 -1
- package/dist/trust.d.ts +0 -21
- package/dist/trust.d.ts.map +0 -1
- package/dist/trust.js +0 -100
- package/dist/trust.js.map +0 -1
- package/dist/ts-type-emitter.d.ts +0 -8
- package/dist/ts-type-emitter.d.ts.map +0 -1
- package/dist/ts-type-emitter.js +0 -150
- package/dist/ts-type-emitter.js.map +0 -1
- package/dist/type-emitter.d.ts +0 -36
- package/dist/type-emitter.d.ts.map +0 -1
- package/dist/type-emitter.js +0 -729
- package/dist/type-emitter.js.map +0 -1
- package/dist/type-extractor.d.ts +0 -43
- package/dist/type-extractor.d.ts.map +0 -1
- package/dist/type-extractor.js +0 -819
- package/dist/type-extractor.js.map +0 -1
- package/dist/types.d.ts +0 -467
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -96
- package/dist/types.js.map +0 -1
- package/dist/validation.d.ts +0 -31
- package/dist/validation.d.ts.map +0 -1
- package/dist/validation.js +0 -335
- package/dist/validation.js.map +0 -1
- package/dist/with-headers.d.ts +0 -15
- package/dist/with-headers.d.ts.map +0 -1
- package/dist/with-headers.js +0 -45
- package/dist/with-headers.js.map +0 -1
- package/dist/ws/bun.d.ts.map +0 -1
- package/dist/ws/bun.js.map +0 -1
- package/dist/ws/cloudflare.d.ts.map +0 -1
- package/dist/ws/cloudflare.js.map +0 -1
- package/dist/ws/deno.d.ts +0 -13
- package/dist/ws/deno.d.ts.map +0 -1
- package/dist/ws/deno.js +0 -133
- package/dist/ws/deno.js.map +0 -1
- package/dist/ws/node.d.ts.map +0 -1
- package/dist/ws/node.js.map +0 -1
- package/dist/ws/session.d.ts.map +0 -1
- package/dist/ws/session.js.map +0 -1
- package/dist/ws/shared.d.ts.map +0 -1
- package/dist/ws/shared.js.map +0 -1
- package/dist/ws-origin.d.ts +0 -20
- package/dist/ws-origin.d.ts.map +0 -1
- package/dist/ws-origin.js +0 -41
- package/dist/ws-origin.js.map +0 -1
- package/dist/yaml.d.ts +0 -18
- package/dist/yaml.d.ts.map +0 -1
- package/dist/yaml.js +0 -101
- package/dist/yaml.js.map +0 -1
- package/docs/api-ref/go.md +0 -399
- package/docs/api-ref/python.md +0 -399
- package/docs/api-ref/rust.md +0 -399
- package/docs/api-ref/typescript.md +0 -399
- package/docs/invalidate-spec.md +0 -333
- package/docs/meta-spec.md +0 -555
- package/docs/packaging.md +0 -104
- package/docs/regression-matrix/README.md +0 -32
- package/docs/regression-matrix/review.md +0 -44
- package/docs/regression-matrix/ws1-3.md +0 -97
- package/docs/regression-matrix/ws4-8.md +0 -107
- package/docs/regression-matrix/ws9-12.md +0 -266
- package/docs/sdk.md +0 -798
- package/src/accepts.ts +0 -136
- package/src/body-kind.ts +0 -67
- package/src/body-limit.ts +0 -152
- package/src/build/index.ts +0 -217
- package/src/cli-args.ts +0 -123
- package/src/cli-go/auth.go +0 -26
- package/src/cli-go/config.go +0 -192
- package/src/cli-go/errors.go +0 -75
- package/src/cli-go/multipart.go +0 -79
- package/src/cli-go/output.go +0 -163
- package/src/cli-go/root.go +0 -30
- package/src/cli-go/stream.go +0 -88
- package/src/cli-go/version.go +0 -5
- package/src/cli.ts +0 -209
- package/src/client/defaults.ts +0 -47
- package/src/client/error.ts +0 -82
- package/src/client/http.ts +0 -737
- package/src/client/index.ts +0 -157
- package/src/client/path.ts +0 -169
- package/src/client/redirect-policy.ts +0 -19
- package/src/client/sdk.ts +0 -351
- package/src/client/sse.ts +0 -128
- package/src/client/types.ts +0 -206
- package/src/client/ws.ts +0 -149
- package/src/client-go/errors.go +0 -236
- package/src/client-go/export.go +0 -44
- package/src/client-go/invalidation.go +0 -371
- package/src/client-go/nullable.go +0 -62
- package/src/client-go/realtime.go +0 -354
- package/src/client-go/result.go +0 -20
- package/src/client-go/runtime.go +0 -975
- package/src/client-go/sse.go +0 -159
- package/src/client-go/transport.go +0 -495
- package/src/client-go/ws.go +0 -128
- package/src/client-info.ts +0 -79
- package/src/client-mcp/README.md +0 -10
- package/src/client-mcp/server.ts +0 -221
- package/src/client-mcp/types.ts +0 -19
- package/src/client-python/_errors.py +0 -115
- package/src/client-python/_invalidation.py +0 -494
- package/src/client-python/_realtime.py +0 -179
- package/src/client-python/_runtime.py +0 -860
- package/src/client-python/_sse.py +0 -155
- package/src/client-python/_transport.py +0 -366
- package/src/client-python/_ws.py +0 -159
- package/src/client-python/py.typed +0 -0
- package/src/client-rust/errors.rs +0 -220
- package/src/client-rust/invalidation.rs +0 -412
- package/src/client-rust/invalidation_sync.rs +0 -93
- package/src/client-rust/nullable.rs +0 -17
- package/src/client-rust/realtime.rs +0 -702
- package/src/client-rust/result.rs +0 -22
- package/src/client-rust/runtime.rs +0 -980
- package/src/client-rust/runtime_sync.rs +0 -484
- package/src/client-rust/sse.rs +0 -188
- package/src/client-rust/ws.rs +0 -167
- package/src/codegen-go-cli.ts +0 -1066
- package/src/codegen-go.ts +0 -970
- package/src/codegen-hash.ts +0 -8
- package/src/codegen-ir.ts +0 -812
- package/src/codegen-lang.ts +0 -517
- package/src/codegen-load.ts +0 -150
- package/src/codegen-loaders.ts +0 -50
- package/src/codegen-mcp.ts +0 -445
- package/src/codegen-python.ts +0 -916
- package/src/codegen-route-tree-intern.ts +0 -198
- package/src/codegen-rust.ts +0 -1402
- package/src/codegen-sanitize.ts +0 -57
- package/src/codegen-schema-naming.ts +0 -165
- package/src/codegen-sdk-model.ts +0 -228
- package/src/codegen.ts +0 -5089
- package/src/context.ts +0 -325
- package/src/cookie-sign.ts +0 -119
- package/src/cookie.ts +0 -143
- package/src/cors.ts +0 -95
- package/src/crypto.ts +0 -38
- package/src/csrf.ts +0 -86
- package/src/curl-logger.ts +0 -258
- package/src/detect-runtime.ts +0 -17
- package/src/dict.ts +0 -12
- package/src/error.ts +0 -55
- package/src/errors.ts +0 -85
- package/src/etag.ts +0 -97
- package/src/feature-detect.ts +0 -147
- package/src/feature-load.ts +0 -23
- package/src/feature-slots.ts +0 -70
- package/src/fetch-request.ts +0 -13
- package/src/gen-process.ts +0 -42
- package/src/gen-write.ts +0 -127
- package/src/glob.ts +0 -109
- package/src/go-type-emitter.ts +0 -660
- package/src/honey-response.ts +0 -379
- package/src/i18n-slot.ts +0 -30
- package/src/i18n.ts +0 -300
- package/src/index.ts +0 -3829
- package/src/init.ts +0 -161
- package/src/input.ts +0 -8
- package/src/invalidate-check.ts +0 -205
- package/src/invoke-user.ts +0 -95
- package/src/ip-restrict.ts +0 -79
- package/src/ip.ts +0 -194
- package/src/logger.ts +0 -178
- package/src/media-type.ts +0 -104
- package/src/meta-spec-merge.ts +0 -80
- package/src/meta-spec.ts +0 -718
- package/src/middleware.ts +0 -331
- package/src/node-request.ts +0 -431
- package/src/node.ts +0 -454
- package/src/openapi/collect.ts +0 -50
- package/src/openapi/docs-page.ts +0 -89
- package/src/openapi/document.ts +0 -902
- package/src/openapi/json-schema-slot.ts +0 -53
- package/src/openapi/register.ts +0 -23
- package/src/openapi/scalar.ts +0 -34
- package/src/openapi/serve.ts +0 -39
- package/src/openapi/spec-factory.ts +0 -100
- package/src/openapi/spec.ts +0 -74
- package/src/openapi/swagger.ts +0 -35
- package/src/pattern.ts +0 -245
- package/src/peer.ts +0 -53
- package/src/plugin.ts +0 -864
- package/src/powered-by.ts +0 -18
- package/src/pretty-json.ts +0 -56
- package/src/producer-stream.ts +0 -296
- package/src/proxy.ts +0 -370
- package/src/python-type-emitter.ts +0 -181
- package/src/realtime/bus.ts +0 -140
- package/src/realtime/register.ts +0 -13
- package/src/realtime/route.ts +0 -153
- package/src/realtime/server.ts +0 -298
- package/src/request-id.ts +0 -32
- package/src/request-limits.ts +0 -2
- package/src/request-path.ts +0 -165
- package/src/request-to-curl.ts +0 -52
- package/src/response.ts +0 -411
- package/src/rust-type-emitter.ts +0 -548
- package/src/secure-headers.ts +0 -74
- package/src/serve-register.ts +0 -12
- package/src/serve-slot.ts +0 -58
- package/src/serve.ts +0 -220
- package/src/server-timing.ts +0 -71
- package/src/static.ts +0 -112
- package/src/telemetry/otel.ts +0 -156
- package/src/testing.ts +0 -167
- package/src/timeout.ts +0 -45
- package/src/tree.ts +0 -558
- package/src/trust.ts +0 -117
- package/src/ts-type-emitter.ts +0 -168
- package/src/type-emitter.ts +0 -760
- package/src/type-extractor.ts +0 -855
- package/src/types.ts +0 -756
- package/src/validation.ts +0 -413
- package/src/with-headers.ts +0 -45
- package/src/ws/bun.ts +0 -120
- package/src/ws/cloudflare.ts +0 -192
- package/src/ws/deno.ts +0 -188
- package/src/ws/node.ts +0 -240
- package/src/ws/session.ts +0 -73
- package/src/ws/shared.ts +0 -140
- package/src/ws-origin.ts +0 -53
- package/src/yaml.ts +0 -103
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# Regression matrix
|
|
2
|
-
|
|
3
|
-
The deep review of `packages/core/src` at `3ab88ce` (v0.6.8) produced a list of findings. The
|
|
4
|
-
files here map each finding to a test that reproduces its scenario, and record whether that test
|
|
5
|
-
fails on `3ab88ce`. A test that passes on the old code guards nothing, so each one was checked
|
|
6
|
-
against it. Each test carries its finding id in its name or in a `// regression: <id>` comment, so
|
|
7
|
-
`grep -r "H12" packages/core/tests` finds the guard for H12.
|
|
8
|
-
|
|
9
|
-
| Workstreams | Matrix |
|
|
10
|
-
| --------------------------------------------------------------- | ---------------------- |
|
|
11
|
-
| 1–3: route model, middleware finalize, request normalization | [ws1-3.md](ws1-3.md) |
|
|
12
|
-
| 4–8: streaming, Node/WS, realtime bus, security middleware, I/O | [ws4-8.md](ws4-8.md) |
|
|
13
|
-
| 9–12: OpenAPI, codegen, client runtimes, tooling | [ws9-12.md](ws9-12.md) |
|
|
14
|
-
| Code review of the rework (`3ab88ce..HEAD`), R1–R8 | [review.md](review.md) |
|
|
15
|
-
|
|
16
|
-
## Re-verify against 3ab88ce
|
|
17
|
-
|
|
18
|
-
The regression tests use only APIs that already existed at `3ab88ce` where the scenario allows,
|
|
19
|
-
so they run unchanged against the old source:
|
|
20
|
-
|
|
21
|
-
```sh
|
|
22
|
-
OLD=$(mktemp -d)
|
|
23
|
-
git archive 3ab88ce packages/core | tar -x -C "$OLD"
|
|
24
|
-
ln -s "$PWD/node_modules" "$OLD/node_modules"
|
|
25
|
-
mkdir -p "$OLD/packages/core/tests/regression"
|
|
26
|
-
cp packages/core/tests/regression/<file>.regression.test.ts "$OLD/packages/core/tests/regression/"
|
|
27
|
-
(cd "$OLD/packages/core" && "$OLDPWD/node_modules/.bin/vitest" run tests/regression)
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
Every test listed as failing on `3ab88ce` must fail there, for the reason its finding describes.
|
|
31
|
-
Import the package by relative path in these tests: in the extracted tree, `@lovrozagar/honey`
|
|
32
|
-
resolves to the workspace (current) package.
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
# Regression matrix: code review of 3ab88ce..HEAD
|
|
2
|
-
|
|
3
|
-
Findings from `/code-review high 3ab88ce..HEAD`. Unlike the other matrices, these bugs were
|
|
4
|
-
introduced by the rework itself, so "fails before the fix" means on HEAD before the fix commit,
|
|
5
|
-
not on `3ab88ce`. Each test was written first and committed red (`it.fails`, `2e82ee1`), then
|
|
6
|
-
flipped to `it` in its fix commit. Tests live in `tests/regression/review.regression.test.ts`;
|
|
7
|
-
R8 runs in `tests/regression/ws9-12/polyglot.regression.test.ts` (`test:harness`).
|
|
8
|
-
|
|
9
|
-
| Id | Severity | Bug | Test | Failed before the fix | Fix |
|
|
10
|
-
| --- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | --------- |
|
|
11
|
-
| R1 | High (auth bypass) | A scope over a non-ASCII literal compared the decoded request segment with the still-encoded literal, so `/%c3%a9` skipped `use("/é", auth)` and reached a `/:slug` route | "R1: a scope over a non-ASCII literal guards lowercase percent-escapes too", "R1: a route literal written with lowercase escapes is covered by the scope" | `/%c3%a9: expected 200 to be 401` | `27d5fb0` |
|
|
12
|
-
| R2 | Medium | A mounted realtime route kept the sub's default namespace, so `/v1/chat`, `/v2/chat` and a parent `/chat` shared topics | "R2: one sub-app mounted twice keeps two realtime namespaces", "R2: a mounted realtime route does not share topics with the parent's route…" | the other route's client received the message | `6ce2a34` |
|
|
13
|
-
| R3 | Medium | The logger's request line was written outside the try, so a throwing sink turned every request into a 500 | "R3: a log sink that throws on the request line never fails the request" | `expected 500 to be 200` | `73e830a` |
|
|
14
|
-
| R4 | Medium | A parameterized Accept range outranked the plain range without comparing parameters (`application/json;v=2;q=0, application/json` → 406) | "R4: a parameterized range does not override the plain range…"; keep-green: "R4: a parameterized range still applies to a supported type with matching parameters" | `expected null to be 'application/json'` | `73e830a` |
|
|
15
|
-
| R5 | Medium | A gateway whose every own route shadowed a downstream route passed generation (the self-merge check counted routes) | "R5: a gateway whose every own route shadows a downstream route fails generation"; keep-green: "R5: a merge source built from the gateway app itself is still accepted" | `expected [Function] to throw an error` | `6ce2a34` |
|
|
16
|
-
| R6 | Low | A realtime frame that arrived before the socket opened was delivered after frames that arrived later | "R6: a realtime frame that beat the open is delivered before frames that arrive later" | `expected [ 'B', 'A', 'C' ] to deeply equal [ 'A', 'B', 'C' ]` | `fc9e353` |
|
|
17
|
-
| R7 | Low | Output cleanup hit ENOENT on a stale manifest entry whose directory the user had deleted, aborting `honey generate` | "R7: a stale manifest entry whose directory the user deleted does not abort generation" | `ENOENT: no such file or directory, scandir '…/models'` | `6d986e4` |
|
|
18
|
-
| R8 | Low | The Python SDK sent no body and no Content-Type for a multipart call with every field empty | "R8: a multipart operation called with no fields still sends an empty multipart body" | `expected '' to match /^multipart\/form-data; boundary=/` | `da43730` |
|
|
19
|
-
|
|
20
|
-
The two duplication findings (D1: the proxy's copy of `searchOfUrl` and trust's copy of
|
|
21
|
-
`resolveClient`; D2: the realtime server's copies of the `ws/shared.ts` helpers) are refactors with
|
|
22
|
-
no behavioral red state; the existing suites guard them (`f0d4c2f`, `e66658d`).
|
|
23
|
-
|
|
24
|
-
## Second pass
|
|
25
|
-
|
|
26
|
-
Findings from the second pass (codegen, SDK runtimes, OpenAPI, tooling). Same method: each test
|
|
27
|
-
was committed red (`it.fails`, `6041355`) and flipped in its fix commit. Tests live in
|
|
28
|
-
`tests/regression/review2.regression.test.ts`; S3 and S4 run in
|
|
29
|
-
`tests/regression/ws9-12/polyglot.regression.test.ts` (`test:harness`).
|
|
30
|
-
|
|
31
|
-
| Id | Severity | Bug | Test | Failed before the fix | Fix |
|
|
32
|
-
| --- | ---------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | --------- |
|
|
33
|
-
| S1 | High (credential leak) | Under `redirect: "follow"` a cross-origin hop carried per-call, function-form config and `onRequest` headers, in both TS runtimes | "createClient (function-form config.headers, per-call headers, onRequest)", "the generated TypeScript SDK (…)" | `x-api-key: expected 'secret' to be undefined` | `a98452c` |
|
|
34
|
-
| S2 | Medium | The SDK and Go CLI passes ignored `codegen.invalidate` | "S2: codegen.invalidate "off" also covers the SDK and Go CLI passes", "S2: the missing-invalidate warning prints once …" | `[honey:metaSpec] 1 policy error(s)`; 3 reports instead of 1 | `ecc120f` |
|
|
35
|
-
| S3 | Medium | A Python param named `uuid` or `str` shadowed names the method body calls | poly "S3: a Python path param named uuid or str …"; guard "every global the emitted bodies evaluate is reserved" | `AttributeError: 'str' object has no attribute 'uuid4'` | `44a9de0` |
|
|
36
|
-
| S4 | Medium | NUL, controls and BOM in spec text broke generated Go, Go CLI and Python comments | poly "S4: NUL, BEL and BOM in spec text keep the generated … compiling" (Go SDK, Python SDK, Go CLI; Rust is a plain guard) | `unexpected NUL in input`; `source code string cannot contain null bytes` | `1e94711` |
|
|
37
|
-
| S5 | Low | The Vite plugin did not ignore atomic-write `.tmp` files, so each save under a watched output generated twice | "S5: a temp file from an atomic write never schedules a generation" | `expected 1 to be +0` | `a7542bb` |
|
|
38
|
-
| S6 | Low | An `openApi.path` ending in `.yml`/`.yaml` got JSON content or a JSON write before the YAML | "S6: … .yml holds YAML and no sibling appears", "S6: … .yaml is written once, as YAML" | `expected true to be false`; JSON written to `openapi.yaml` | `e765833` |
|
|
39
|
-
| S7 | Low | `buildStart` in two environments ran two generations | "S7: buildStart in two environments runs one generation" | `expected 2 to be 1` | `a993559` |
|
|
40
|
-
| S8 | Low (perf) | One generation built the unfiltered document up to three times | "S8: openApi + sdk + cli build the unfiltered document once" | called 3 times instead of 2 | `ecc120f` |
|
|
41
|
-
|
|
42
|
-
S9 (the generated TS runtime's hand-copied redirect rules) is closed by S1: both runtimes take the
|
|
43
|
-
cross-origin allowlist from `client/redirect-policy.ts`. S10 (watch globs recompiled per call) is a
|
|
44
|
-
refactor with no behavioral red state; the glob and plugin suites guard it (`094176a`).
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
# Workstreams 1–3: route model, middleware finalize, request normalization
|
|
2
|
-
|
|
3
|
-
Findings from the `3ab88ce` review (workstreams 1–3) mapped to their guards. "Fails on
|
|
4
|
-
3ab88ce" was checked by running the same test file against the extracted `3ab88ce` source (see
|
|
5
|
-
[README.md](README.md)); every "yes" failed there with the symptom the finding describes. Test
|
|
6
|
-
files are under `packages/core/tests/regression/`:
|
|
7
|
-
|
|
8
|
-
- `ws1-route-model.regression.test.ts` (WS1)
|
|
9
|
-
- `ws2-middleware.regression.test.ts` (WS2)
|
|
10
|
-
- `ws3-request.regression.test.ts` (WS3)
|
|
11
|
-
|
|
12
|
-
## Regression found while building this matrix (fixed)
|
|
13
|
-
|
|
14
|
-
**GW-OWN-ROUTES (high, fixed).** A gateway booted from a `codegen.mergeTree` tree that registers
|
|
15
|
-
routes of its own threw `Route tree out of date — regenerate it` on every request: the plugin
|
|
16
|
-
wrote the tree from the `mergeTree` source alone. Generation now builds the gateway's tree from
|
|
17
|
-
the merged downstream tree plus the gateway app's own routes (`_gatewayTree`); its root
|
|
18
|
-
wildcards stay out of the tree as the catch-all the downstream leaves delegate to, and an own
|
|
19
|
-
route that is also a downstream route fails generation by name. Guarded by
|
|
20
|
-
`gw-own-routes.regression.test.ts`, which runs the real `generateAndWrite` over a downstream-only
|
|
21
|
-
`routes.gen.ts` (what such a gateway has committed) and fails before the fix with the error
|
|
22
|
-
above; the e2e gateway app (`e2e/apps/gateway`) now has this shape on every runtime.
|
|
23
|
-
|
|
24
|
-
## WS1 — one route model, one dispatcher
|
|
25
|
-
|
|
26
|
-
| Finding | Sev | Bug | Guard (`ws1-route-model.regression.test.ts`) | Fails on 3ab88ce | Notes |
|
|
27
|
-
| -------------------- | --- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ | ----------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
28
|
-
| C1 | C | Scoped middleware skipped for every route with a loaded `routeTree` | `C1: path-scoped middleware still guards routes…` | yes (200, want 401) | Also `tests/unit/route-tree/route-model.test.ts`, `e2e/apps/differential.ts` |
|
|
29
|
-
| NEW (shared tree) | H | Apps loading one generated tree share handler objects | `NEW-H shared-tree: two apps loading one generated tree…` | yes (A served B) | |
|
|
30
|
-
| NEW (stale meta) | M | Patch mode never refreshes `mt`/`ek` | `NEW-M stale-meta: a loaded tree serves the registered route's meta…` | yes (`old`, want `new`) | |
|
|
31
|
-
| H17 | H | Literal `/users/:id` request hits the param handler with `id` undefined | `H17: a literal /users/:id request binds the param…` | yes (`null`, want `:id`) | |
|
|
32
|
-
| H18 | H | Shared empty-children sentinel: a runtime insert is reachable under every leaf | `H18: a route missing from the tree never becomes reachable…` | yes (`/health/secret` 200) | HEAD fails loudly (stale tree) |
|
|
33
|
-
| H19 | H | `.on([GET, POST])` patches only the first method | `H19: .on([GET, POST]) serves every method with a loaded tree` | yes (POST 404) | |
|
|
34
|
-
| H20 | H | Internal routes (spec, docs, manifest) baked as ordinary handlers, 404 with a tree | — | not re-verified | Covered by `tests/unit/openapi/serve-endpoints.test.ts` and the e2e apps booting with `routeTree`; the spec routes are covered under workstream 9 |
|
|
35
|
-
| H21 (now M) | M | Selectors rebuilt from the tree throw `Duplicate route` for `/opt/:id?`, `/files/*`, `/a/:id/:b?` | `M-H21: optional, wildcard and trailing-slash routes boot…` | yes (`Duplicate route`) | |
|
|
36
|
-
| H22 | H | App's own root wildcard treated as unknown-path catch-all with a tree | `H22: the app's own root wildcard (SPA fallback)…` | yes (GET 404) | |
|
|
37
|
-
| M (HEAD catch-all) | M | HEAD bypasses the unknown-path guard for non-`ALL` catch-alls | `M-HEAD-catchall: HEAD and GET agree…` | yes (HEAD 200, GET 404) | |
|
|
38
|
-
| backtrack (was M) | H | `matchRoute` never backtracks | `H-backtrack: the router backtracks…` | yes (404 for `/users/me/profile`) | Also `tests/unit/fuzz/router-encoding.fuzz.test.ts` (reference matcher) |
|
|
39
|
-
| M (gateway `/:slug`) | M | `fn:null` fallthrough breaks with a root `/:slug`; taps read the catch-all's meta | `gw-own-routes.regression.test.ts`: `M-gateway-slug…` | fails on the pre-fix HEAD (generation throws); 3ab88ce answered `{}`, want `worker` | Runs through the real generation path. `M-gateway-catchall` guards the catch-all-only shape (passes on both) |
|
|
40
|
-
| M (round trip) | M | `toRouteTree()` → `routeTree()` drops scoped middleware | `M-roundtrip: toRouteTree() → routeTree() keeps scoped middleware` | yes (200) | |
|
|
41
|
-
| M (mergeInto) | M | `mergeInto` shares nodes and handlers between parents | `M-mergeInto: two parents mounting one sub…` | yes (p2 serves p1's route) | |
|
|
42
|
-
| M (normalize) | M | `basePath("/api/")`, `//admin/b` never match their scope | `M-normalize: non-normalized route and basePath strings…` | yes (200) | |
|
|
43
|
-
| M (merge conflict) | M | `.route(sub)` on an app booted from the full app's tree throws | `M-merge-conflict: mounting a sub on an app booted…` | yes (`Merge conflict`) | |
|
|
44
|
-
| M (proto segments) | M | Segments named `constructor`, `toString`, … crash tree codegen | `M-proto-segments: tree codegen handles segments…` | yes (TypeError) | |
|
|
45
|
-
| M (intern) | M | Meta interning merges `NaN`/`null`, drops `Date`, `RegExp` | `M-intern: tree codegen rejects non-JSON meta…` | yes (no throw; values merged) | HEAD rejects non-JSON meta |
|
|
46
|
-
| L (late routeTree) | L | `routeTree()` after routes are registered serves a mix, no error | `L-late-routeTree: routeTree() after routes are registered fails loudly` | yes | |
|
|
47
|
-
| L (perf) | L | `matchWsRoute` on every non-upgrade request | — | — | Perf; `bun run bench:hotpath` gates the request hot path |
|
|
48
|
-
|
|
49
|
-
## WS2 — resolve middleware once, at finalize
|
|
50
|
-
|
|
51
|
-
| Finding | Sev | Bug | Guard (`ws2-middleware.regression.test.ts`) | Fails on 3ab88ce | Notes |
|
|
52
|
-
| ------------------- | --- | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------- | ----------------------------------- | --------------------------------------------------------------------------- |
|
|
53
|
-
| H10 | H | `_compiled` cached on the shared handler: serving the sub first skips the parent's auth | `H10: serving a sub on its own first…` | yes (200) | Also `tests/unit/middleware/finalized-chain.test.ts` |
|
|
54
|
-
| H11 | H | Chain middleware applied to `.get()` but not to `.route(sub)` | `H11: routes mounted through an authed chain handle…` | yes (200) | |
|
|
55
|
-
| H12 | H | Scopes match the registered pattern string, not request paths | `H12: scopes guard request paths…` | yes (200) | |
|
|
56
|
-
| H13 | H | Chain/scoped order inverts when the sub is mounted | `H13: chain middleware runs before scoped middleware…` | yes (500: `ctx.user` undefined) | |
|
|
57
|
-
| H14 (now M) | M | 404/405 contexts lack `ctx.errors`; `ctx.path` is `""` | `M-H14: 404 runs middleware with ctx.errors and the real ctx.path` | yes (404, want 401) | |
|
|
58
|
-
| H15 | H | Chain middleware runs twice for routes registered before a later `.use()` | `H15: a route registered before a later use()…` | yes (`a, auth, a`) | |
|
|
59
|
-
| H16 | H | Errors thrown by middleware skip outer post-`next()` code | `H16: outer middleware post-next code runs…` | yes (no `x-outer`) | Also `tests/unit/middleware/ctx-error.test.ts` |
|
|
60
|
-
| M (sub config) | M | Mounted subs lose `errorFactory` and `.context()` values | `M-sub-config: a mounted sub keeps its errorFactory and context values` | yes (`{}`) | Pin `tests/unit/core/context.test.ts:179` reversed |
|
|
61
|
-
| preflight (was M) | H | Preflight ignores scoped `cors` and uses the GET route's chain | `H-preflight: a preflight runs the scoped cors…` | yes (no ACAO) | |
|
|
62
|
-
| M (preflight twice) | M | A non-short-circuited preflight runs the chain twice | `M-preflight-twice…` | yes (2 runs) | |
|
|
63
|
-
| M (forbidden key) | M | csrf/ipRestrict 403 becomes 500 under `errorFactory().defaultErrors()` | `M-forbidden: csrf rejection under errorFactory().defaultErrors() is 403` | yes (500) | |
|
|
64
|
-
| M (chain errors) | M | Chain-level `.use(mw)` never adds `mw.errors` | `M-chain-errors: chain-level use(mw) contributes…` | yes (500) | |
|
|
65
|
-
| M (default keys) | M | Internal routes alias the default error set; scoped back-fill mutates it | `M-default-keys: a scoped middleware's errors never leak…` | yes (`/public` documents 403) | |
|
|
66
|
-
| M (perf, mount) | M | `route()` re-walks the whole tree per scoped entry per mount | `M-mount-perf: mounting 200 sub-apps…` | yes (5.6 s, bound 3 s; HEAD ~50 ms) | |
|
|
67
|
-
| bare `use` (was M) | H | `app.use(mw)` as a statement installs nothing | `H-bare-use: a bare app.use(mw) statement never leaves…` | yes (200) | HEAD throws at finalize |
|
|
68
|
-
| M (mw meta) | M | Middleware meta missing on mounted routes | `M-mw-meta: meta contributed by the mounting chain…` | yes (`null`) | |
|
|
69
|
-
| NEW (WS order) | H | WS routes run scoped before chain | `NEW-H ws-order: WS routes run chain before scoped middleware` | yes (`scoped, chain`) | |
|
|
70
|
-
| L (telemetry) | L | `onResponse` fires twice for handler-thrown errors | `L-telemetry: onResponse fires once…` | yes (2) | |
|
|
71
|
-
| L (reserved keys) | L | `context({ searchAll })` breaks every request; `path`/`meta` silently overridden | `L-reserved: context() with a framework key is rejected…` | yes | |
|
|
72
|
-
| L (status key) | L | Unknown status key answers 200 | `L-status-key: an unknown status key never answers 200` | yes | |
|
|
73
|
-
| L (no handler) | L | A route builder without `.handler()` registers nothing silently | `L-no-handler: a route builder without .handler() is reported` | yes | |
|
|
74
|
-
| L (perf ×3) | L | Scoped entry disables compiled chains; per-request `errorFactory` subset; `.input()` routes uncompiled | — | — | `bench:hotpath` scenario "route under 51 scopes"; `finalized-chain.test.ts` |
|
|
75
|
-
|
|
76
|
-
## WS3 — request normalization and trust boundary
|
|
77
|
-
|
|
78
|
-
| Finding | Sev | Bug | Guard (`ws3-request.regression.test.ts`) | Fails on 3ab88ce | Notes |
|
|
79
|
-
| -------------------- | --- | --------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
|
|
80
|
-
| M (`ctx.path`) | M | Router normalizes but `ctx.path` stays raw (`//admin/secret`) | `M-ctx-path: ctx.path is the normalized path the router matched` | yes (200, guard bypassed) | Also `tests/integration/request-target/` (Node, Bun, Deno) |
|
|
81
|
-
| Node URL (was M) | H | Node builds the URL by concatenating `Host`; routes on `Host` | `H-node-host: Node routes on the request target…` (4 tests: Host injection, absolute form, malformed Host, dot segments) | yes (all four) | Also `tests/unit/request/node-request-url.test.ts` |
|
|
82
|
-
| M (redirect) | M | Trailing-slash 308 builds an absolute `Location` from the request URL | `M-redirect: trailing-slash redirects send a relative Location` | yes | |
|
|
83
|
-
| M (proto query) | M | `?__proto__=` and friends make `ctx.search` throw → 500 | `M-proto-query: prototype-named query keys never turn into 500s` | yes (500) | Also `tests/unit/request/prototype-keys.test.ts` |
|
|
84
|
-
| L (validated search) | L | `?__proto__=x` replaces the validated search object's prototype | `L-proto-validated…` | yes (400 `validation_failed` on a valid query) | |
|
|
85
|
-
| L (issue path) | L | A validation issue on a prototype-named field turns 400 into 500 | `L-proto-issue…` | yes (500) | |
|
|
86
|
-
| L (header view) | L | `HoneyOutHeaders.get("constructor")` returns a function | `L-proto-headers…` (through Node `serve()`) | yes (`function`) | |
|
|
87
|
-
| L (i18n keys) | L | i18n `select` on `constructor`, `fe.path` set to a function | — | not re-verified | `tests/unit/request/prototype-keys.test.ts` ("field-name translation…", "errorI18n with a prototype-named query…") |
|
|
88
|
-
|
|
89
|
-
## Decisions and WS13 items in scope
|
|
90
|
-
|
|
91
|
-
- Registration after finalize (epoch): guarded by `L-late-routeTree` and by
|
|
92
|
-
`tests/unit/route-tree/route-model.test.ts`.
|
|
93
|
-
- `use()` semantics: `H-bare-use`, `H11`, `H15`.
|
|
94
|
-
- Scope semantics: `H12`, `M-normalize`.
|
|
95
|
-
- Error conversion at `next()`: `H16`.
|
|
96
|
-
- WS13 gaps "scoped middleware with routeTree", "two apps from one tree", "middleware order on WS
|
|
97
|
-
routes": `C1`, `NEW-H shared-tree`, `NEW-H ws-order`.
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
# Regression matrix: workstreams 4–8
|
|
2
|
-
|
|
3
|
-
Streaming, Node adapter and WebSockets, the realtime bus, security middleware, input and output.
|
|
4
|
-
Tests live in `packages/core/tests/regression/ws4-8/`:
|
|
5
|
-
|
|
6
|
-
- `node-adapter.regression.test.ts` drives `node-fixture.ts` under plain `node` through the real
|
|
7
|
-
Node adapter (`serve()`). Crash findings assert that the fixture process is still alive.
|
|
8
|
-
- `in-process.regression.test.ts` runs through `app.fetch`, or a Node server inside the test
|
|
9
|
-
process, and a real `node:http` upstream for the proxy findings.
|
|
10
|
-
|
|
11
|
-
Every test below fails on `3ab88ce` and passes on HEAD; each was run against both trees. Where a test
|
|
12
|
-
bundles several sub-cases of one finding, each sub-case was checked against `3ab88ce` on its own.
|
|
13
|
-
To re-run them against `3ab88ce`, copy the whole `ws4-8/` directory (the fixture and the harness
|
|
14
|
-
come with it), following the [README](README.md).
|
|
15
|
-
|
|
16
|
-
Scope: Critical, High and Medium findings, plus one cheap Low. Findings in the unexported realtime
|
|
17
|
-
protocol modules were deleted with those modules under the realtime decision and are out of scope.
|
|
18
|
-
|
|
19
|
-
`in-process` = `in-process.regression.test.ts`, `node` = `node-adapter.regression.test.ts`.
|
|
20
|
-
|
|
21
|
-
## Workstream 4: streaming and cancellation
|
|
22
|
-
|
|
23
|
-
| Finding | Sev | Bug | Test | Fails on 3ab88ce? | Notes |
|
|
24
|
-
| ------- | --- | --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------- |
|
|
25
|
-
| H3 | H | Unawaited SSE `writer.close()`: the README `finally { s.close() }` crashes Node on disconnect | node: "H3: the README `finally { s.close() }` SSE shape survives a client disconnect" | Yes: the fixture process exits, and the next fetch fails | The `defaultRetry` half was never reproduced (TODO marks it [P]) |
|
|
26
|
-
| H7 | H | HEAD falls back to GET and drops the body without cancelling; producers run forever | in-process: "H7: HEAD on an SSE route leaves no producer running" | Yes: 5 producers started, 0 finished | |
|
|
27
|
-
| NEW | L | HEAD on Node drops `Content-Length` | node: "NEW (L): HEAD keeps Content-Length on Node" | Yes: `content-length` is null | |
|
|
28
|
-
| H8 | H | `etag()` buffers SSE and `generate()` bodies, so an endless stream never answers | in-process: "H8: etag() answers an SSE route instead of buffering the endless body" | Yes: times out | |
|
|
29
|
-
| H9 | H | Node buffers a text-type body of unknown length | node: "H9: a text/plain generate() of unknown length streams its first chunk without buffering" | Yes: first byte after about 1.5 s | |
|
|
30
|
-
| H26 | H | Header middleware sets headers in place on immutable responses, giving a 500 | in-process: "H26: header middleware over an immutable Response.redirect() does not 500" | Yes: 500 for each of `secureHeaders`, `requestId`, `poweredBy`, `serverTiming` | The `static.ts` half is covered by the WS7 staticFiles tests; the README proxy example is a doc item |
|
|
31
|
-
| M | M | `res.stream()` hangs when the callback throws while holding the writer (`response.ts:287-303`) | in-process: "M: res.stream() settles when the callback throws while holding the writer" | Yes: times out | |
|
|
32
|
-
| M | M | `generate()` has no `cancel()`, and a mid-stream throw becomes a clean EOF (`response.ts:261-285`) | in-process: "M: generate() runs the generator's finally on cancel and errors the body on a throw" | Yes, both halves: `finally` does not run, and the body resolves | |
|
|
33
|
-
| M | M | `etag()` returns a consumed Response for a zero-length body (`etag.ts:45-46`) | in-process: "M: etag() over a zero-length body answers 200 (it returned a consumed Response)" | Yes: "Body has already been read" | Reproduces under Node too, not only on Bun |
|
|
34
|
-
| M | M | The request signal is wired only to `'aborted'`, so a disconnect after the body was read never aborts (`node-request.ts:134-140`) | node: "M: a disconnect after the body was read aborts the request signal" | Yes: `postAborted` is 0 | |
|
|
35
|
-
|
|
36
|
-
## Workstream 5: Node adapter and WebSockets
|
|
37
|
-
|
|
38
|
-
| Finding | Sev | Bug | Test | Fails on 3ab88ce? | Notes |
|
|
39
|
-
| ------- | --- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
40
|
-
| C2 | C | No `'error'` listener on the upgrade socket: a TCP reset while the app awaits crashes Node | node: "C2: a reset upgrade socket while the handler awaits does not crash the process" | Yes: `Error: read ECONNRESET`, and the process exits | Covers `Upgrade: x` on an HTTP route and a WS route behind an async middleware. Also covered by `tests/integration/hostile-client/` |
|
|
41
|
-
| H1 | H | Realtime callbacks are neither awaited nor caught | node: "H1: a rejecting realtime message handler does not crash the process" | Yes: the process exits on `TypeError … 'trim'` | The TODO's exact handler and frame |
|
|
42
|
-
| H2 | H | WS `onOpen` / `onClose` are called without await or catch | node: "H2: a rejecting async onOpen and a throwing onClose do not crash the process" | Yes: the process exits on "onOpen rejects" | |
|
|
43
|
-
| H5 | H | An SSE route reached with `Upgrade: x` is drained with `text()`; the client gets 0 bytes | node: "H5: an SSE route reached with `Upgrade: x` streams instead of buffering forever" | Yes: nothing is received | |
|
|
44
|
-
| H6 | H | The hand-rolled upgrade writer drops headers and forces a JSON content type | node: "H6: a non-WebSocket upgrade keeps the route's status, headers and content type" | Yes: `HTTP/1.1 200 \r\ncontent-type: application/json` | |
|
|
45
|
-
| H29 | H | `cors()` rebuilds 101 responses, so a 500 is written into an upgraded socket | node: "H29: cors() in front of a WebSocket route lets the socket open and exchange frames" | Yes: client error "Invalid WebSocket frame: RSV1 must be clear" | Listed under WS4 in the TODO |
|
|
46
|
-
| NEW | M | A sync throw in `onOpen` makes the adapter write a raw `HTTP/1.1 500` after the 101 | node: "NEW (M): a sync throw in onOpen never writes an HTTP 500 onto the upgraded socket" | Yes: `HTTP/1.1 500` after the handshake | |
|
|
47
|
-
| M | M | `WSRouteBuilder.input()` is stored but never validated (`index.ts:3626-3633`) | node: "M: WS `.input()` is validated before the upgrade" | Yes: the socket opens without a token | |
|
|
48
|
-
| M | M | No `maxPayload`, so a 100 MiB default lets a 64 MiB frame through (`ws/node.ts:52`) | node: "M: a WebSocket frame over the default maxPayload is refused, not delivered" | Yes: a 2 MiB frame is delivered, with no 1009 | |
|
|
49
|
-
| H | H | `Origin` is never checked on WS upgrades (cross-site WebSocket hijacking) | node: "H: a cross-origin WebSocket upgrade carrying cookies is refused" | Yes: the socket opens | |
|
|
50
|
-
| M | M | No backpressure handling on WS and realtime sends | `tests/unit/ws/ws-containment.test.ts`: "over the backpressure limit: closes with 1013, or drops" | Old API cannot express it | 3ab88ce has no `backpressureLimit` / `backpressurePolicy` |
|
|
51
|
-
| M | M | Shutdown: WebSockets survive `close()`, and an idle keep-alive client stalls it (`node.ts:188-208`) | in-process: "M: shutdown closes open WebSockets and does not wait on idle keep-alive clients" | Yes: the WebSocket never closes | |
|
|
52
|
-
| M | M | `startHoneyServer` replaces a user-set `wsAdapter` (`serve.ts:56,78,110`) | in-process: "M: startHoneyServer keeps a user-set wsAdapter" | Yes: the user's adapter is never called | |
|
|
53
|
-
| M | M | `ws` is not a declared dependency (`ws/node.ts:50`) | in-process: "M: `ws` is declared as an optional peer dependency" | Yes: no `peerDependencies.ws` | The "clear error when missing" half: `tests/unit/ws/ws-missing.test.ts` (old API cannot express) |
|
|
54
|
-
| M | M | NodeRequest: empty `json()` returns null, a second `text()` returns `""`, `headers.get("authorization")` changes after iteration, and `req.body` is locked after `clone()` | node: "M: NodeRequest follows Fetch: clone() does not lock, a second read throws, empty json() throws" | Yes, each sub-case on its own | `new Request(ctx.req)` / `fetch(ctx.req)` became `toFetchRequest()`; the old API cannot express it. Covered by `tests/unit/node/request-conformance.test.ts` |
|
|
55
|
-
| M | M | `curlLogger({ body: true })` before `bodyLimit` gives a 500 on Node | node: "M: curlLogger({ body: true }) before bodyLimit answers the POST instead of 500" | Yes: 500 | |
|
|
56
|
-
|
|
57
|
-
## Workstream 6: realtime bus (the shipped bus only)
|
|
58
|
-
|
|
59
|
-
| Finding | Sev | Bug | Test | Fails on 3ab88ce? | Notes |
|
|
60
|
-
| ------- | --- | ---------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------ |
|
|
61
|
-
| M | M | Documented no-ops: `reconnectBuffer` is stored and never read | in-process: "M: the documented-but-ignored reconnectBuffer option is rejected, not silently accepted" | Yes: no throw | `conn.userId` through `identify()` is new API (old API cannot express it); covered in `tests/unit/realtime/` |
|
|
62
|
-
| M | M | Wire format is asymmetric: inbound must be `{t:"msg",data}` | node: "M: the wire format is symmetric — a client sends the payload itself and gets JSON back" | Yes: no reply | |
|
|
63
|
-
| M | M | A realtime route shadows the HTTP route on the same path with 426 (`index.ts:1902-1907`) | in-process: "M: a realtime route does not shadow an HTTP route on the same path" | Yes: 426 | |
|
|
64
|
-
| M | M | A throwing close handler skips `unsubscribeAll`, leaving a ghost in `presence()` | node: "M: a throwing close handler still unsubscribes the connection (no ghost in presence)" | Yes | On 3ab88ce the throwing close handler crashes the Node process (the H2 class) before presence can be read |
|
|
65
|
-
|
|
66
|
-
## Workstream 7: security middleware
|
|
67
|
-
|
|
68
|
-
| Finding | Sev | Bug | Test | Fails on 3ab88ce? | Notes |
|
|
69
|
-
| ------- | --- | ------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
|
|
70
|
-
| C3 | C | `ipRestrict` trusts a client-sent `cf-connecting-ip`, and a deny-only config is bypassed by omitting it | in-process: "C3: ipRestrict does not trust a client-sent cf-connecting-ip, and deny-only fails closed" | Yes: 200 for both | |
|
|
71
|
-
| H23 | H | CSRF check skipped when Content-Type is absent | in-process: "H23: csrf rejects a cross-site POST that has no Content-Type" | Yes: 200 | |
|
|
72
|
-
| H24 | H | `credentials: true` with a wildcard or undefined origin reflects any Origin, including `null` | in-process: "H24: credentialed CORS never reflects an arbitrary or null Origin" | Yes, for both configs and both origins | |
|
|
73
|
-
| H27 | H | A decoded upstream body is returned with the upstream `content-encoding`; on Node, a stale `content-length` desyncs keep-alive | node: "H27: a gzip upstream body over 256 KB arrives intact and the keep-alive socket stays in sync" | Yes: `TypeError: terminated` | Real gzip upstream, 400 KB body. Also covered by `tests/integration/proxy-upstream/` |
|
|
74
|
-
| H28 | H | Hop-by-hop headers are not stripped; both `transfer-encoding` and `content-length` reach the client | node: "H28: hop-by-hop upstream headers are stripped and never sent with both framings" | Yes | |
|
|
75
|
-
| H4 | H | `curlLogger` starts `buildCurlLogData()` before `next()`; a downstream throw leaves a floating rejection | in-process: "H4: curlLogger never leaves a floating rejection when a downstream middleware throws" | Yes: unhandled "redact failed" | |
|
|
76
|
-
| NEW | M | `curlLogger` with a malformed `Host` on Node turns every request into a 500 | node: "NEW (M): curlLogger on Node with a malformed Host never turns the request into a 500" | Yes: 500 | HEAD answers 400 at the adapter |
|
|
77
|
-
| M | M | Proxy timeout stays armed for the whole response body (`proxy.ts:130`) | in-process: "M: proxy timeout covers the wait for headers, not the whole streamed body" | Yes: the SSE body is cut off | |
|
|
78
|
-
| M | M | Proxy drops bodies for methods other than POST, PUT and PATCH (`proxy.ts:4,124`) | in-process: "M: proxy forwards the body of a DELETE" | Yes: the upstream receives an empty body | |
|
|
79
|
-
| M | M | Client `Expect` / `Upgrade` headers give a 502 on Node (`proxy.ts:100-107`) | in-process: "M: proxy does not fail on client `Expect` / `Upgrade` headers (502 on Node)" | Yes: 502 | The client-`Host`-on-Bun half is Bun-only; covered by `tests/unit/proxy/proxy-security.test.ts` |
|
|
80
|
-
| M | M | WebSocket detection is case-sensitive (`proxy.ts:87`) | in-process: "M: proxy detects a WebSocket upgrade case-insensitively" | Yes: `connection` is dropped | |
|
|
81
|
-
| M | M | `destination` can receive `//host`, and `..%2f` is forwarded verbatim (`proxy.ts:95-97`) | in-process: "M: destination never receives a `//host` URL or an encoded traversal" | Yes: got `//evil.example/x` and `/..%2f..%2fadmin` | |
|
|
82
|
-
| M | M | `ipRestrict` does no canonicalization: v4-mapped, case, port, `10.0.0.1abc`, `/33`, `allowList: []` | in-process: "M: ipRestrict canonicalizes addresses and rejects invalid rules" | Yes, each sub-case on its own | |
|
|
83
|
-
| M | M | `staticFiles` prefix match has no segment boundary (`static.ts:34-37`) | in-process: "M: staticFiles matches its prefix on a segment boundary" | Yes: resolve got `-private/secret.txt` | |
|
|
84
|
-
| M | M | `staticFiles` traversal guard only matches `../`, and resolve gets the undecoded path (`static.ts:11,40-44`) | in-process: "M: staticFiles never hands resolve a path with a `..` segment" | Yes: `..%5c..%5csecret` reaches resolve | A raw-target Node variant passed on 3ab88ce (its Node adapter normalized through WHATWG URL), so it was dropped |
|
|
85
|
-
| M | M | `curlLogger` logs `authorization`, `cookie` and token query params verbatim | in-process: "M: curlLogger redacts credentials and token query params by default" | Yes | The method-quoting half: `tests/unit/request-to-curl/request-to-curl.test.ts` |
|
|
86
|
-
| M | M | No `Vary: Origin` when the origin is disallowed or absent (`cors.ts:36-45`) | in-process: "M: cors adds Vary: Origin when the Origin is disallowed or absent" | Yes, both cases | |
|
|
87
|
-
| M | M | otel: the root span never ends on preflight, `http.route` is the raw path, and `http.url` includes the query | in-process: "M: otel ends the root span on short-circuited preflights and records the route pattern without the query" | Yes: a span is left un-ended | |
|
|
88
|
-
| M | M | Docs UIs load unpinned CDN scripts with no SRI, CSP or `nosniff` | in-process: "M: the Swagger docs page pins its assets with SRI and sends CSP + nosniff" | Yes | Scalar: `tests/unit/openapi/docs-ui-security.test.ts` |
|
|
89
|
-
|
|
90
|
-
## Workstream 8: input and output
|
|
91
|
-
|
|
92
|
-
| Finding | Sev | Bug | Test | Fails on 3ab88ce? | Notes |
|
|
93
|
-
| ------- | --- | ------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------- | --------------------------------- | ---------------------------------------------------- |
|
|
94
|
-
| H30 | H | Malformed JSON or multipart gives a 500 | in-process: "H30: malformed JSON is a 400, not a 500" | Yes: 500 | |
|
|
95
|
-
| M | M | A declared `json` / `form` schema is skipped for DELETE (`validation.ts:49,251`) | in-process: "M: a declared json schema is validated on DELETE" | Yes: 200, and the handler runs | |
|
|
96
|
-
| M | M | Content-type matching is case-sensitive and prefix-based (`validation.ts:39-45,268`) | in-process: "M: content-type matching is case-insensitive, accepts +json, and is not a prefix match" | Yes, each of the three types | |
|
|
97
|
-
| M | M | Cookie values with `%` do not round-trip (`cookie.ts:16-33`) | in-process: "M: cookie values containing `%` round-trip" | Yes: `%41` → `A`, `a%2Fb` → `a/b` | The `100%` sub-case already round-tripped on 3ab88ce |
|
|
98
|
-
| M | M | `verify()` throws on a malformed signature (`cookie-sign.ts:19-27,41`) | in-process: "M: verify() returns null for a malformed signature instead of throwing" | Yes: `InvalidCharacterError` | |
|
|
99
|
-
| M | M | Form duplicates collapse to the last value (`validation.ts:195-212`) | in-process: "M: form duplicates give a scalar field its first value" | Yes: `admin` | |
|
|
100
|
-
|
|
101
|
-
## Counts
|
|
102
|
-
|
|
103
|
-
54 tests in this file, all newly written and all failing on `3ab88ce`. Three findings point instead
|
|
104
|
-
to existing tests, because the old API cannot express them: backpressure, the missing-`ws` error,
|
|
105
|
-
and `toFetchRequest` / `identify`.
|
|
106
|
-
|
|
107
|
-
Findings not fixed on HEAD: none found. Every scenario above passes on HEAD.
|