@lovrozagar/honey 0.7.3 → 1.0.0-rc.1
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 +36 -1969
- 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 +181 -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/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 +122 -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
package/dist/ws/node.js
CHANGED
|
@@ -1,173 +1,125 @@
|
|
|
1
|
-
export { WSContextImpl, } from "./cloudflare.js";
|
|
2
|
-
import { fireHandler, WSContextImpl } from "./cloudflare.js";
|
|
3
|
-
import { resolveWSOptions, selectProtocol, toArrayBuffer, } from "./shared.js";
|
|
4
|
-
const WS_MISSING = 'WebSocket routes on Node need the "ws" package, which is an optional peer dependency of honey. Install it: npm install ws';
|
|
5
1
|
/**
|
|
6
|
-
* Node
|
|
7
|
-
*
|
|
2
|
+
* The Node WebSocket adapter, on the `ws` package (an optional peer dependency, loaded on the first
|
|
3
|
+
* upgrade). The Node bridge's `'upgrade'` listener puts the raw socket on the request view under
|
|
4
|
+
* `NODE_UPGRADE`; the adapter hands it to `ws`, which writes the 101 itself, so the handshake
|
|
5
|
+
* never goes through the Fetch body writer. Keepalive pings and the idle timeout run here.
|
|
8
6
|
*/
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
import { optionalPeer } from "../runtime/optional-peer.js";
|
|
8
|
+
import { fireHandler, switchingProtocols, WSContextImpl } from "./contract.js";
|
|
9
|
+
import { resolveWSOptions, selectProtocol } from "./shared.js";
|
|
10
|
+
export const NODE_UPGRADE = /* @__PURE__ */ Symbol("honey.nodeUpgrade");
|
|
11
|
+
/** Ping a quiet peer and end one that stays quiet: the keepalive and the idle timeout. */
|
|
12
|
+
function watch(ws, options, keepalive) {
|
|
13
|
+
let lastSeen = Date.now();
|
|
14
|
+
let pongDue;
|
|
15
|
+
const timers = [];
|
|
16
|
+
const seen = () => {
|
|
17
|
+
lastSeen = Date.now();
|
|
18
|
+
};
|
|
19
|
+
ws.on("pong", () => {
|
|
20
|
+
seen();
|
|
21
|
+
clearTimeout(pongDue);
|
|
22
|
+
pongDue = undefined;
|
|
23
|
+
});
|
|
24
|
+
ws.on("ping", seen);
|
|
25
|
+
ws.on("message", seen);
|
|
26
|
+
if (keepalive !== undefined) {
|
|
27
|
+
timers.push(setInterval(() => {
|
|
28
|
+
/* one pong outstanding at a time: a slow pong never stacks timers */
|
|
29
|
+
if (ws.readyState !== 1 || pongDue !== undefined)
|
|
30
|
+
return;
|
|
31
|
+
ws.ping();
|
|
32
|
+
pongDue = setTimeout(() => ws.terminate(), keepalive.timeout);
|
|
33
|
+
}, keepalive.interval));
|
|
34
|
+
}
|
|
35
|
+
const idle = options.idleTimeout;
|
|
36
|
+
if (idle > 0) {
|
|
37
|
+
const tick = Math.max(Math.floor(idle / 2), 1);
|
|
38
|
+
timers.push(setInterval(() => {
|
|
39
|
+
const quiet = Date.now() - lastSeen;
|
|
40
|
+
if (quiet >= idle)
|
|
41
|
+
ws.terminate();
|
|
42
|
+
else if (quiet >= tick)
|
|
43
|
+
ws.ping();
|
|
44
|
+
}, tick));
|
|
45
|
+
}
|
|
46
|
+
ws.on("close", () => {
|
|
47
|
+
for (const timer of timers)
|
|
48
|
+
clearInterval(timer);
|
|
49
|
+
clearTimeout(pongDue);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/** Wire one accepted socket to `handler`. Text frames arrive as strings, binary as exactly their bytes. */
|
|
53
|
+
function wire(ws, socket, handler, open) {
|
|
54
|
+
ws.on("message", (data, isBinary) => {
|
|
55
|
+
const message = isBinary ? data : Buffer.from(data).toString("utf8");
|
|
56
|
+
fireHandler("message", () => handler.onMessage?.(undefined, socket, message));
|
|
57
|
+
});
|
|
58
|
+
ws.on("close", (code, reason) => {
|
|
59
|
+
open.delete(ws);
|
|
60
|
+
fireHandler("close", () => handler.onClose?.(undefined, socket, code, reason.toString()));
|
|
61
|
+
});
|
|
62
|
+
ws.on("error", (error) => {
|
|
63
|
+
fireHandler("error", () => handler.onError?.(undefined, socket, error));
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
export function nodeWebSocket(options) {
|
|
67
|
+
const resolved = resolveWSOptions(options);
|
|
68
|
+
const keepalive = options?.keepalive;
|
|
12
69
|
if (keepalive !== undefined && !(keepalive.interval > 0 && keepalive.timeout > 0)) {
|
|
13
70
|
throw new TypeError("nodeWebSocket: keepalive.interval and keepalive.timeout must be positive");
|
|
14
71
|
}
|
|
15
|
-
|
|
16
|
-
let wssReady = null;
|
|
72
|
+
const loadWs = optionalPeer("ws", "WebSocket routes on Node", () => import("ws"));
|
|
17
73
|
const open = new Set();
|
|
18
|
-
|
|
74
|
+
let server = null;
|
|
75
|
+
/* the request being upgraded, for the protocol choice: ws asks synchronously within handleUpgrade */
|
|
19
76
|
let upgrading = null;
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
return selectProtocol(upgrading, options) ?? false;
|
|
31
|
-
},
|
|
32
|
-
maxPayload: options.maxPayload,
|
|
33
|
-
noServer: true,
|
|
34
|
-
perMessageDeflate: false,
|
|
35
|
-
});
|
|
36
|
-
return wss;
|
|
37
|
-
}, (err) => {
|
|
38
|
-
/* not cached: installing ws later works without a restart */
|
|
39
|
-
wssReady = null;
|
|
40
|
-
throw new Error(WS_MISSING, { cause: err });
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
return wssReady;
|
|
44
|
-
};
|
|
45
|
-
const watch = (ws) => {
|
|
46
|
-
let pingTimer;
|
|
47
|
-
let pongTimeout;
|
|
48
|
-
let idleTimer;
|
|
49
|
-
let lastSeen = Date.now();
|
|
50
|
-
const seen = () => {
|
|
51
|
-
lastSeen = Date.now();
|
|
52
|
-
};
|
|
53
|
-
ws.on("pong", () => {
|
|
54
|
-
seen();
|
|
55
|
-
if (pongTimeout !== undefined) {
|
|
56
|
-
clearTimeout(pongTimeout);
|
|
57
|
-
pongTimeout = undefined;
|
|
58
|
-
}
|
|
77
|
+
const serverOf = async () => {
|
|
78
|
+
/* ws's ESM entry, or its CommonJS one under default: what Node resolves a retry to once ws was installed */
|
|
79
|
+
const ws = (await loadWs());
|
|
80
|
+
const { WebSocketServer } = "WebSocketServer" in ws ? ws : ws.default;
|
|
81
|
+
server ??= new WebSocketServer({
|
|
82
|
+
/* asked only within handleUpgrade, so the request is the one being upgraded */
|
|
83
|
+
handleProtocols: () => selectProtocol(upgrading, resolved) ?? false,
|
|
84
|
+
maxPayload: resolved.maxPayload,
|
|
85
|
+
noServer: true,
|
|
86
|
+
perMessageDeflate: false,
|
|
59
87
|
});
|
|
60
|
-
|
|
61
|
-
if (keepalive) {
|
|
62
|
-
pingTimer = setInterval(() => {
|
|
63
|
-
if (ws.readyState !== 1)
|
|
64
|
-
return;
|
|
65
|
-
/* one pong outstanding at a time: a slow pong must not stack timers */
|
|
66
|
-
if (pongTimeout !== undefined)
|
|
67
|
-
return;
|
|
68
|
-
ws.ping();
|
|
69
|
-
pongTimeout = setTimeout(() => ws.terminate(), keepalive.timeout);
|
|
70
|
-
}, keepalive.interval);
|
|
71
|
-
}
|
|
72
|
-
const idle = options.idleTimeout;
|
|
73
|
-
if (idle > 0) {
|
|
74
|
-
const tick = Math.max(Math.floor(idle / 2), 1);
|
|
75
|
-
idleTimer = setInterval(() => {
|
|
76
|
-
if (ws.readyState !== 1)
|
|
77
|
-
return;
|
|
78
|
-
const quiet = Date.now() - lastSeen;
|
|
79
|
-
if (quiet >= idle)
|
|
80
|
-
ws.terminate();
|
|
81
|
-
else if (quiet >= tick)
|
|
82
|
-
ws.ping();
|
|
83
|
-
}, tick);
|
|
84
|
-
}
|
|
85
|
-
const stop = () => {
|
|
86
|
-
if (pingTimer !== undefined)
|
|
87
|
-
clearInterval(pingTimer);
|
|
88
|
-
if (pongTimeout !== undefined)
|
|
89
|
-
clearTimeout(pongTimeout);
|
|
90
|
-
if (idleTimer !== undefined)
|
|
91
|
-
clearInterval(idleTimer);
|
|
92
|
-
pingTimer = pongTimeout = idleTimer = undefined;
|
|
93
|
-
};
|
|
94
|
-
ws.on("close", stop);
|
|
95
|
-
ws.on("error", stop);
|
|
88
|
+
return server;
|
|
96
89
|
};
|
|
97
90
|
return {
|
|
98
91
|
closeAll(code, reason) {
|
|
99
|
-
for (const ws of open)
|
|
100
|
-
|
|
101
|
-
ws.close(code, reason);
|
|
102
|
-
}
|
|
103
|
-
catch {
|
|
104
|
-
ws.terminate();
|
|
105
|
-
}
|
|
106
|
-
}
|
|
92
|
+
for (const ws of open)
|
|
93
|
+
ws.close(code, reason);
|
|
107
94
|
},
|
|
108
|
-
options,
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
const upgrade =
|
|
112
|
-
if (upgrade === undefined)
|
|
113
|
-
throw new Error("nodeWebSocket
|
|
114
|
-
|
|
95
|
+
options: resolved,
|
|
96
|
+
runtime: "node",
|
|
97
|
+
async upgrade(req, _env, handler) {
|
|
98
|
+
const upgrade = req[NODE_UPGRADE];
|
|
99
|
+
if (upgrade === undefined)
|
|
100
|
+
throw new Error("nodeWebSocket needs the upgrade socket: serve the app with serve(app) on Node");
|
|
101
|
+
const wss = await serverOf();
|
|
115
102
|
return new Promise((resolve, reject) => {
|
|
116
103
|
/* ws answers a malformed handshake itself and never calls back: fail instead of hanging */
|
|
117
|
-
|
|
118
|
-
|
|
104
|
+
;
|
|
105
|
+
upgrade.socket.once("close", () => {
|
|
119
106
|
if (!upgrade.upgraded)
|
|
120
107
|
reject(new Error("WebSocket handshake failed"));
|
|
121
108
|
});
|
|
122
109
|
upgrading = req;
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
: data instanceof ArrayBuffer
|
|
136
|
-
? Buffer.from(data).toString("utf-8")
|
|
137
|
-
: Buffer.concat(data).toString("utf-8");
|
|
138
|
-
}
|
|
139
|
-
else if (data instanceof ArrayBuffer) {
|
|
140
|
-
payload = data;
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
payload = toArrayBuffer(Array.isArray(data) ? Buffer.concat(data) : data);
|
|
144
|
-
}
|
|
145
|
-
fireHandler("message", () => handler.onMessage?.(undefined, socket, payload));
|
|
146
|
-
});
|
|
147
|
-
watch(ws);
|
|
148
|
-
ws.on("close", (code, reason) => {
|
|
149
|
-
open.delete(ws);
|
|
150
|
-
fireHandler("close", () => handler.onClose?.(undefined, socket, code, reason.toString()));
|
|
151
|
-
});
|
|
152
|
-
ws.on("error", (err) => {
|
|
153
|
-
fireHandler("error", () => handler.onError?.(undefined, socket, err));
|
|
154
|
-
});
|
|
155
|
-
fireHandler("open", () => handler.onOpen?.(undefined, socket));
|
|
156
|
-
/* Node's Response rejects status 101 (Fetch spec: 200-599 only).
|
|
157
|
-
Create a valid Response and override status for the sentinel check. */
|
|
158
|
-
const resp = new Response(null);
|
|
159
|
-
Object.defineProperty(resp, "status", { value: 101 });
|
|
160
|
-
resolve({ response: resp, socket });
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
catch (err) {
|
|
164
|
-
reject(err);
|
|
165
|
-
}
|
|
166
|
-
finally {
|
|
167
|
-
upgrading = null;
|
|
168
|
-
}
|
|
110
|
+
wss.handleUpgrade(upgrade.req, upgrade.socket, upgrade.head, (ws) => {
|
|
111
|
+
/* from here the socket is the WebSocket's: the bridge must never write HTTP on it */
|
|
112
|
+
upgrade.upgraded = true;
|
|
113
|
+
ws.binaryType = "arraybuffer";
|
|
114
|
+
open.add(ws);
|
|
115
|
+
const socket = new WSContextImpl(ws, resolved);
|
|
116
|
+
wire(ws, socket, handler, open);
|
|
117
|
+
watch(ws, resolved, keepalive);
|
|
118
|
+
fireHandler("open", () => handler.onOpen?.(undefined, socket));
|
|
119
|
+
resolve({ response: switchingProtocols({ upgrade: "websocket" }), socket });
|
|
120
|
+
});
|
|
121
|
+
upgrading = null;
|
|
169
122
|
});
|
|
170
123
|
},
|
|
171
124
|
};
|
|
172
125
|
}
|
|
173
|
-
//# sourceMappingURL=node.js.map
|
|
@@ -0,0 +1,23 @@
|
|
|
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 (scheme, host and port), plus same-origin.
|
|
8
|
+
* - a function: called with the `Origin` value; same-origin always passes.
|
|
9
|
+
* - unset (the default): same-origin passes; a cross-origin upgrade carrying credentials (`Cookie`
|
|
10
|
+
* or `Authorization`, what hijacking needs) is rejected. A request without `Origin` (not a
|
|
11
|
+
* browser) passes.
|
|
12
|
+
*
|
|
13
|
+
* Same-origin is the full origin (H18.12): an `http://` page is not same-origin to an `https`
|
|
14
|
+
* server. Behind a TLS terminator the server sees plain http, so the shortcut fails closed there:
|
|
15
|
+
* such an app lists its origins.
|
|
16
|
+
*/
|
|
17
|
+
export type WSOriginPolicy = "*" | readonly string[] | ((origin: string) => boolean);
|
|
18
|
+
export declare function validateOriginPolicy(policy: unknown): WSOriginPolicy;
|
|
19
|
+
/**
|
|
20
|
+
* Whether an upgrade from `origin` (the `Origin` header, `null` when absent) may proceed against a
|
|
21
|
+
* server whose own origin is `serverOrigin` (`new URL(req.url).origin`).
|
|
22
|
+
*/
|
|
23
|
+
export declare function originAllowed(policy: WSOriginPolicy | null, origin: string | null, serverOrigin: string, hasCredentials: boolean): boolean;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/** `URL.parse` without it: Node 20 lacks it. */
|
|
2
|
+
function parseUrl(text) {
|
|
3
|
+
try {
|
|
4
|
+
return new URL(text);
|
|
5
|
+
}
|
|
6
|
+
catch {
|
|
7
|
+
/* not a URL: an Origin no policy can match, which the caller refuses */
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
/** An origin's canonical spelling (lowercase, default port dropped), or `null` for `"null"` or a non-URL. */
|
|
12
|
+
function canonicalOrigin(text) {
|
|
13
|
+
const origin = parseUrl(text)?.origin;
|
|
14
|
+
return origin === undefined || origin === "null" ? null : origin;
|
|
15
|
+
}
|
|
16
|
+
/** A list entry: exactly an origin, normalized. A path, query or fragment means it is not one. */
|
|
17
|
+
function listedOrigin(entry) {
|
|
18
|
+
const url = parseUrl(entry);
|
|
19
|
+
const origin = url === null || url.origin === "null" ? null : url.origin;
|
|
20
|
+
if (origin === null || url?.pathname !== "/" || url.search !== "" || url.hash !== "") {
|
|
21
|
+
throw new TypeError(`allowedOrigins: "${entry}" is not an origin like https://example.com`);
|
|
22
|
+
}
|
|
23
|
+
return origin;
|
|
24
|
+
}
|
|
25
|
+
export function validateOriginPolicy(policy) {
|
|
26
|
+
if (policy === "*" || typeof policy === "function")
|
|
27
|
+
return policy;
|
|
28
|
+
if (Array.isArray(policy) && policy.every((entry) => typeof entry === "string")) {
|
|
29
|
+
return Object.freeze(policy.map(listedOrigin));
|
|
30
|
+
}
|
|
31
|
+
throw new TypeError('allowedOrigins must be "*", a list of origins, or a function');
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Whether an upgrade from `origin` (the `Origin` header, `null` when absent) may proceed against a
|
|
35
|
+
* server whose own origin is `serverOrigin` (`new URL(req.url).origin`).
|
|
36
|
+
*/
|
|
37
|
+
export function originAllowed(policy, origin, serverOrigin, hasCredentials) {
|
|
38
|
+
if (policy === "*" || origin === null)
|
|
39
|
+
return true;
|
|
40
|
+
const canonical = canonicalOrigin(origin);
|
|
41
|
+
if (canonical === serverOrigin)
|
|
42
|
+
return true;
|
|
43
|
+
if (policy === null)
|
|
44
|
+
return !hasCredentials;
|
|
45
|
+
if (typeof policy === "function")
|
|
46
|
+
return policy(origin) === true;
|
|
47
|
+
return canonical !== null && policy.includes(canonical);
|
|
48
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ws(app, path)`: a WebSocket route on `app`'s handle, `.handler({ onOpen, onMessage, onClose, … })`
|
|
3
|
+
* registers it. A plain function the app module imports (`@lovrozagar/honey/ws`), not a `Honey`
|
|
4
|
+
* method, so an app that never opens a socket bundles none of the route builder (H23).
|
|
5
|
+
*/
|
|
6
|
+
import type { Honey } from "../routing/app.ts";
|
|
7
|
+
import type { ApplyScoped, ScopedMwEntry } from "../routing/app-types.ts";
|
|
8
|
+
import type { MergePath } from "../routing/types.ts";
|
|
9
|
+
import { type WSRouteBuilder } from "../routing/ws-builder.ts";
|
|
10
|
+
/** Any app handle: a `honey()` app or a handle its `use()`, `basePath()`, `context()` or `meta()` returned. */
|
|
11
|
+
export type AnyHoneyHandle = Honey<any, any, any, any, any, any, any, any, any>;
|
|
12
|
+
/** The builder `ws(app, path)` returns: the handle's ctx with the scopes over the route, at the joined path. */
|
|
13
|
+
export type WsRouteOf<TApp, TPath extends string> = TApp extends Honey<any, infer TCtx, any, any, any, any, infer TBase, any, infer TScoped extends readonly ScopedMwEntry[]> ? WSRouteBuilder<TCtx & ApplyScoped<TScoped, MergePath<TBase, TPath>>, MergePath<TBase, TPath>, TApp> : never;
|
|
14
|
+
export declare function ws<TApp extends AnyHoneyHandle, const TPath extends string>(app: TApp, path: TPath): WsRouteOf<TApp, TPath>;
|
package/dist/ws/route.js
ADDED
package/dist/ws/session.d.ts
CHANGED
|
@@ -1,11 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
/**
|
|
2
|
+
* The server side of one ws route connection: the route's callbacks run on one ordered lane (open,
|
|
3
|
+
* then messages, then close), each contained, with a cap on messages waiting for the handler.
|
|
4
|
+
* A plain module: importing it registers nothing (H23).
|
|
5
|
+
*/
|
|
6
|
+
import { type InvokeLogger } from "../realtime/invoke-user.ts";
|
|
7
|
+
import type { WSHandler } from "./contract.ts";
|
|
8
|
+
/** Messages one connection may have waiting for its handler; more close it with 1008. */
|
|
9
|
+
export declare const WS_PENDING_MAX = 1024;
|
|
10
|
+
export type WsSessionOptions = {
|
|
11
|
+
/** The route's own callbacks; each receives the route's request context first. */
|
|
5
12
|
callbacks: WSHandler<unknown>;
|
|
6
13
|
ctx: unknown;
|
|
7
14
|
log: InvokeLogger | null;
|
|
15
|
+
/** The client's `reconnect_token`: `onReconnect` runs in place of `onOpen` when both exist. */
|
|
8
16
|
reconnectToken: string | null;
|
|
9
17
|
route: string;
|
|
10
|
-
}
|
|
11
|
-
|
|
18
|
+
};
|
|
19
|
+
/** The adapter-facing handler for one connection. */
|
|
20
|
+
export declare function createWsSession(options: WsSessionOptions): WSHandler<unknown>;
|
package/dist/ws/session.js
CHANGED
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The server side of one
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* for an app without websockets.
|
|
2
|
+
* The server side of one ws route connection: the route's callbacks run on one ordered lane (open,
|
|
3
|
+
* then messages, then close), each contained, with a cap on messages waiting for the handler.
|
|
4
|
+
* A plain module: importing it registers nothing (H23).
|
|
6
5
|
*/
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const { callbacks, ctx, log, reconnectToken, route } = opts;
|
|
6
|
+
import { createEventQueue, invokeUser } from "../realtime/invoke-user.js";
|
|
7
|
+
import { CLOSE_POLICY } from "./shared.js";
|
|
8
|
+
/** Messages one connection may have waiting for its handler; more close it with 1008. */
|
|
9
|
+
export const WS_PENDING_MAX = 1024;
|
|
10
|
+
/** The adapter-facing handler for one connection. */
|
|
11
|
+
export function createWsSession(options) {
|
|
12
|
+
const { callbacks, ctx, log, reconnectToken, route } = options;
|
|
15
13
|
const { onClose, onError, onMessage, onOpen, onReconnect } = callbacks;
|
|
16
14
|
const queue = createEventQueue();
|
|
17
15
|
let pending = 0;
|
|
16
|
+
const handled = () => {
|
|
17
|
+
pending--;
|
|
18
|
+
};
|
|
18
19
|
const run = (phase, ws, fn) => invokeUser(fn, {
|
|
19
20
|
fields: { route },
|
|
20
21
|
log,
|
|
21
|
-
onError: onError ? (
|
|
22
|
+
onError: onError ? (error) => onError(ctx, ws, error) : null,
|
|
22
23
|
phase: `websocket ${phase}`,
|
|
23
24
|
});
|
|
24
25
|
return {
|
|
@@ -26,7 +27,7 @@ export function createWsSession(opts) {
|
|
|
26
27
|
if (onClose)
|
|
27
28
|
void queue.push(() => run("close", ws, () => onClose(ctx, ws, code, reason)));
|
|
28
29
|
},
|
|
29
|
-
/* a transport error:
|
|
30
|
+
/* a transport error: onError hears it once; without one, it is logged */
|
|
30
31
|
onError: (_ctx, ws, error) => {
|
|
31
32
|
void queue.push(() => invokeUser(() => (onError ? onError(ctx, ws, error) : Promise.reject(error)), {
|
|
32
33
|
fields: { route },
|
|
@@ -37,16 +38,16 @@ export function createWsSession(opts) {
|
|
|
37
38
|
onMessage: (_ctx, ws, data) => {
|
|
38
39
|
if (!onMessage)
|
|
39
40
|
return;
|
|
40
|
-
if (pending >= WS_PENDING_MAX)
|
|
41
|
-
ws.close(
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
41
|
+
if (pending >= WS_PENDING_MAX)
|
|
42
|
+
return ws.close(CLOSE_POLICY, "too many pending messages");
|
|
44
43
|
pending++;
|
|
45
|
-
void queue.push(() =>
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
void queue.push(() => {
|
|
45
|
+
const ran = run("message", ws, () => onMessage(ctx, ws, data));
|
|
46
|
+
return typeof ran === "boolean" ? handled() : ran.then(handled);
|
|
47
|
+
});
|
|
48
48
|
},
|
|
49
49
|
onOpen: (_ctx, ws) => {
|
|
50
|
+
/* an empty token is no token */
|
|
50
51
|
if (reconnectToken && onReconnect) {
|
|
51
52
|
void queue.push(() => run("open", ws, () => onReconnect(ctx, ws, reconnectToken)));
|
|
52
53
|
}
|
|
@@ -56,5 +57,3 @@ export function createWsSession(opts) {
|
|
|
56
57
|
},
|
|
57
58
|
};
|
|
58
59
|
}
|
|
59
|
-
registerFeature("ws", { createWsSession, originAllowed });
|
|
60
|
-
//# sourceMappingURL=session.js.map
|
package/dist/ws/shared.d.ts
CHANGED
|
@@ -1,65 +1,55 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* and Workers
|
|
2
|
+
* What every WebSocket adapter shares: the options with one meaning and one default on Node, Bun
|
|
3
|
+
* and Workers, subprotocol choice, payload and close-frame rules, and close-reason truncation.
|
|
4
4
|
*/
|
|
5
5
|
export type WSAdapterOptions = {
|
|
6
6
|
/**
|
|
7
|
-
* Largest inbound message in bytes
|
|
8
|
-
* Default 1 MiB.
|
|
7
|
+
* Largest inbound message in bytes; a bigger one closes the connection with 1009 (on Bun, 1006:
|
|
8
|
+
* Bun enforces the limit itself and force-closes without a close frame). Default 1 MiB.
|
|
9
9
|
*/
|
|
10
10
|
maxPayload?: number;
|
|
11
|
-
/**
|
|
12
|
-
* Outbound bytes a socket may hold unsent before `backpressurePolicy` applies to the next
|
|
13
|
-
* `send()`. Default 8 MiB.
|
|
14
|
-
*/
|
|
11
|
+
/** Outbound bytes a socket may hold unsent before `backpressurePolicy` applies to the next `send()`. Default 8 MiB. */
|
|
15
12
|
backpressureLimit?: number;
|
|
16
|
-
/**
|
|
17
|
-
* Over `backpressureLimit`: `"close"` closes the connection with 1013 (try again later),
|
|
18
|
-
* `"drop"` discards the message. Default `"close"`.
|
|
19
|
-
*/
|
|
13
|
+
/** Over `backpressureLimit`: `"close"` closes with 1013 (try again later), `"drop"` discards the message. Default `"close"`. */
|
|
20
14
|
backpressurePolicy?: "close" | "drop";
|
|
21
15
|
/**
|
|
22
|
-
* Close a connection that
|
|
23
|
-
*
|
|
24
|
-
* Default 120 000 (Bun's default). Deno and Bun take whole seconds.
|
|
16
|
+
* Close a connection that received nothing (no message, no pong) for this many ms. Idle peers
|
|
17
|
+
* are pinged first where the runtime allows it. `0` disables. Default 120 000; Bun takes whole seconds.
|
|
25
18
|
*/
|
|
26
19
|
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
|
-
*/
|
|
20
|
+
/** Choose the subprotocol from the ones the client offered; `null` or `undefined` for none. Default: the first offered. */
|
|
31
21
|
protocol?: (offered: string[], req: Request) => string | null | undefined;
|
|
32
22
|
};
|
|
33
23
|
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;
|
|
24
|
+
readonly backpressureLimit: number;
|
|
25
|
+
readonly backpressurePolicy: "close" | "drop";
|
|
26
|
+
readonly idleTimeout: number;
|
|
27
|
+
readonly maxPayload: number;
|
|
28
|
+
readonly protocol: (offered: string[], req: Request) => string | null | undefined;
|
|
39
29
|
};
|
|
40
30
|
export declare const DEFAULT_MAX_PAYLOAD: number;
|
|
41
31
|
export declare const DEFAULT_BACKPRESSURE_LIMIT: number;
|
|
42
32
|
export declare const DEFAULT_IDLE_TIMEOUT = 120000;
|
|
43
|
-
/** Close codes the adapters and the realtime server use. */
|
|
44
33
|
export declare const CLOSE_NORMAL = 1000;
|
|
45
34
|
export declare const CLOSE_GOING_AWAY = 1001;
|
|
46
35
|
export declare const CLOSE_POLICY = 1008;
|
|
47
36
|
export declare const CLOSE_TOO_BIG = 1009;
|
|
48
37
|
export declare const CLOSE_INTERNAL = 1011;
|
|
49
38
|
export declare const CLOSE_TRY_AGAIN = 1013;
|
|
50
|
-
/** Longest close reason a frame
|
|
39
|
+
/** Longest close reason a frame carries: a 125-byte control payload minus the 2-byte code. */
|
|
51
40
|
export declare const MAX_CLOSE_REASON = 123;
|
|
52
|
-
export declare function resolveWSOptions(
|
|
41
|
+
export declare function resolveWSOptions(options: WSAdapterOptions | undefined): ResolvedWSOptions;
|
|
53
42
|
/** The subprotocols the client offered, in order. */
|
|
54
43
|
export declare function offeredProtocols(req: Request): string[];
|
|
55
|
-
/** The subprotocol to answer with, or `null
|
|
56
|
-
export declare function selectProtocol(req: Request,
|
|
57
|
-
/** Outbound bytes the runtime holds for this socket, when it reports them. */
|
|
44
|
+
/** The subprotocol to answer with, or `null`; a choice the client did not offer is ignored. */
|
|
45
|
+
export declare function selectProtocol(req: Request, options: ResolvedWSOptions): string | null;
|
|
46
|
+
/** Outbound bytes the runtime holds for this socket, when it reports them (Bun's method, the DOM property). */
|
|
58
47
|
export declare function bufferedAmountOf(raw: unknown): number;
|
|
59
48
|
/** Whether an inbound message is larger than `limit` bytes. */
|
|
60
49
|
export declare function exceedsPayload(data: ArrayBuffer | ArrayBufferView | Blob | string, limit: number): boolean;
|
|
61
|
-
/** `data` as an
|
|
50
|
+
/** `data` as an ArrayBuffer holding exactly its bytes (a pooled Buffer's backing store is larger). */
|
|
62
51
|
export declare function toArrayBuffer(data: ArrayBuffer | ArrayBufferView): ArrayBuffer;
|
|
63
|
-
/** A close code a server may send: 1000, 1001
|
|
52
|
+
/** A close code a server may send (RFC 6455 §7.4): 1000, 1001–1014 but the reserved ones, or 3000–4999; else 1000. */
|
|
64
53
|
export declare function sendableCloseCode(code: number | undefined): number;
|
|
65
|
-
|
|
54
|
+
/** `reason` cut to at most `max` UTF-8 bytes without splitting a code point. */
|
|
55
|
+
export declare function truncateUtf8(reason: string, max: number): string;
|