@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
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The privacy-safe field catalog (H17): what a log line or a span may say about a request. Paths
|
|
3
|
+
* go without their query or fragment; cookies, credentials and bodies never appear at all.
|
|
4
|
+
*/
|
|
5
|
+
/** Every field a request-log line carries; nothing outside it is ever written. */
|
|
6
|
+
export const REQUEST_LOG_FIELDS = /* @__PURE__ */ Object.freeze([
|
|
7
|
+
"bytes",
|
|
8
|
+
"durationMs",
|
|
9
|
+
"kind",
|
|
10
|
+
"method",
|
|
11
|
+
"path",
|
|
12
|
+
"requestId",
|
|
13
|
+
"routeId",
|
|
14
|
+
"runtime",
|
|
15
|
+
"status",
|
|
16
|
+
]);
|
|
17
|
+
const SENSITIVE = /* @__PURE__ */ Object.freeze({
|
|
18
|
+
authorization: true,
|
|
19
|
+
cookie: true,
|
|
20
|
+
"proxy-authorization": true,
|
|
21
|
+
"set-cookie": true,
|
|
22
|
+
"x-api-key": true,
|
|
23
|
+
"x-auth-token": true,
|
|
24
|
+
"x-csrf-token": true,
|
|
25
|
+
"x-xsrf-token": true,
|
|
26
|
+
});
|
|
27
|
+
/* a name with a token, secret, API key, password or session as a whole dash-separated part */
|
|
28
|
+
const SENSITIVE_PART = /(?:^|-)(?:token|secret|api-?key|password|session)(?:$|-)/i;
|
|
29
|
+
/**
|
|
30
|
+
* A header whose value is a credential, a cookie or a session: never logged, never a span
|
|
31
|
+
* attribute. One definition for the request log, spans and curlLogger's redaction.
|
|
32
|
+
*/
|
|
33
|
+
export function isSensitiveHeader(name) {
|
|
34
|
+
return Object.hasOwn(SENSITIVE, name.toLowerCase()) || SENSITIVE_PART.test(name);
|
|
35
|
+
}
|
|
36
|
+
/** The path of `target` (a URL or a path) without its query or fragment; `/` when empty. */
|
|
37
|
+
export function pathOf(target) {
|
|
38
|
+
let start = 0;
|
|
39
|
+
const scheme = target.indexOf("://");
|
|
40
|
+
if (scheme !== -1) {
|
|
41
|
+
const slash = target.indexOf("/", scheme + 3);
|
|
42
|
+
const end = target.search(/[?#]/);
|
|
43
|
+
if (slash === -1 || (end !== -1 && end < slash))
|
|
44
|
+
return "/";
|
|
45
|
+
start = slash;
|
|
46
|
+
}
|
|
47
|
+
const cut = target.slice(start).search(/[?#]/);
|
|
48
|
+
const path = cut === -1 ? target.slice(start) : target.slice(start, start + cut);
|
|
49
|
+
return path === "" ? "/" : path;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* What a per-request logger binds: method, the path without its query, the route id, the request
|
|
53
|
+
* id when set, and the trace's ids when the request is traced (so a line joins its trace).
|
|
54
|
+
*/
|
|
55
|
+
export function requestBindings(method, path, routeId, { requestId, trace } = {}) {
|
|
56
|
+
const bindings = { method, path: pathOf(path), routeId };
|
|
57
|
+
if (requestId !== undefined)
|
|
58
|
+
bindings.requestId = requestId;
|
|
59
|
+
if (trace != null) {
|
|
60
|
+
bindings.trace_id = trace.traceId;
|
|
61
|
+
bindings.span_id = trace.spanId;
|
|
62
|
+
}
|
|
63
|
+
return bindings;
|
|
64
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A log record as one line: JSON (pino's shape, for production and log shippers) or pretty (for a
|
|
3
|
+
* developer's terminal). A value JSON cannot hold (a BigInt, a cycle) never fails the line.
|
|
4
|
+
*/
|
|
5
|
+
export type LogFormat = "json" | "pretty";
|
|
6
|
+
/** `record` as one line in `format`. */
|
|
7
|
+
export declare function formatLine(format: LogFormat, record: Record<string, unknown>): string;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A log record as one line: JSON (pino's shape, for production and log shippers) or pretty (for a
|
|
3
|
+
* developer's terminal). A value JSON cannot hold (a BigInt, a cycle) never fails the line.
|
|
4
|
+
*/
|
|
5
|
+
const NAMES = /* @__PURE__ */ Object.freeze({
|
|
6
|
+
10: "TRACE",
|
|
7
|
+
20: "DEBUG",
|
|
8
|
+
30: "INFO",
|
|
9
|
+
40: "WARN",
|
|
10
|
+
50: "ERROR",
|
|
11
|
+
60: "FATAL",
|
|
12
|
+
});
|
|
13
|
+
/** JSON.stringify that writes a BigInt as its digits and an object inside itself as "[Circular]". */
|
|
14
|
+
function stringify(value) {
|
|
15
|
+
/* the objects enclosing the one being written: only a true cycle is cut, a shared object is written each time */
|
|
16
|
+
const ancestors = [];
|
|
17
|
+
return JSON.stringify(value, function (_key, item) {
|
|
18
|
+
if (typeof item === "bigint")
|
|
19
|
+
return item.toString();
|
|
20
|
+
if (typeof item !== "object" || item === null)
|
|
21
|
+
return item;
|
|
22
|
+
while (ancestors.length > 0 && ancestors.at(-1) !== this)
|
|
23
|
+
ancestors.pop();
|
|
24
|
+
if (ancestors.includes(item))
|
|
25
|
+
return "[Circular]";
|
|
26
|
+
ancestors.push(item);
|
|
27
|
+
return item;
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
function clock(time) {
|
|
31
|
+
return new Date(time).toISOString().slice(11, 23);
|
|
32
|
+
}
|
|
33
|
+
function pretty(record) {
|
|
34
|
+
const { level, msg, time, ...fields } = record;
|
|
35
|
+
const head = `${clock(time)} ${(NAMES[level] ?? String(level)).padEnd(5)} ${String(msg)}`;
|
|
36
|
+
const err = fields.err;
|
|
37
|
+
const rest = Object.keys(fields).length > 0 ? ` ${stringify(fields)}` : "";
|
|
38
|
+
return typeof err?.stack === "string" ? `${head}${rest}\n${err.stack}` : `${head}${rest}`;
|
|
39
|
+
}
|
|
40
|
+
/** `record` as one line in `format`. */
|
|
41
|
+
export function formatLine(format, record) {
|
|
42
|
+
return format === "pretty" ? pretty(record) : stringify(record);
|
|
43
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type LogFormat } from "./log-format.ts";
|
|
2
|
+
export type LogLevel = "debug" | "error" | "fatal" | "info" | "silent" | "trace" | "warn";
|
|
3
|
+
/** pino's numeric levels; `silent` is above every one. */
|
|
4
|
+
export declare const LEVELS: Readonly<Record<LogLevel, number>>;
|
|
5
|
+
type LogFn = {
|
|
6
|
+
(msg: string): void;
|
|
7
|
+
(fields: Record<string, unknown>, msg?: string): void;
|
|
8
|
+
};
|
|
9
|
+
export type Logger = {
|
|
10
|
+
readonly level: LogLevel;
|
|
11
|
+
/** A logger that writes `bindings` into every line, over this one's. */
|
|
12
|
+
child(bindings: Record<string, unknown>): Logger;
|
|
13
|
+
debug: LogFn;
|
|
14
|
+
error: LogFn;
|
|
15
|
+
fatal: LogFn;
|
|
16
|
+
info: LogFn;
|
|
17
|
+
trace: LogFn;
|
|
18
|
+
warn: LogFn;
|
|
19
|
+
};
|
|
20
|
+
export type CreateLoggerOptions = {
|
|
21
|
+
/** Fields every line carries. */
|
|
22
|
+
base?: Record<string, unknown>;
|
|
23
|
+
/** Default: `pretty` when NODE_ENV is development, else `json`. */
|
|
24
|
+
format?: LogFormat;
|
|
25
|
+
/** Default: `debug` in development, `error` in test (an incident is never swallowed), else `info`. */
|
|
26
|
+
level?: LogLevel;
|
|
27
|
+
/** Where a line goes. Default: the console on Workers, stdout on Node and Bun. */
|
|
28
|
+
write?: (line: string) => void;
|
|
29
|
+
};
|
|
30
|
+
/** NODE_ENV where the runtime has a process environment; undefined where it has none (Workers). */
|
|
31
|
+
export declare function nodeEnv(): string | undefined;
|
|
32
|
+
/**
|
|
33
|
+
* The default level and format for a NODE_ENV. Unset, unreadable or unknown takes production's:
|
|
34
|
+
* forgetting NODE_ENV must never turn on debug output.
|
|
35
|
+
*/
|
|
36
|
+
export declare function defaultsFor(env: string | undefined): {
|
|
37
|
+
format: LogFormat;
|
|
38
|
+
level: LogLevel;
|
|
39
|
+
};
|
|
40
|
+
/** A logger. Unset level and format follow NODE_ENV, read now (`defaultsFor`). */
|
|
41
|
+
export declare function createLogger(options?: CreateLoggerOptions): Logger;
|
|
42
|
+
/** The logger that writes nothing: what `app.logger(false)` sets. Its children are itself. */
|
|
43
|
+
export declare const SILENT: Logger;
|
|
44
|
+
export {};
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The app logger (H17): pino-compatible levels and line shape, children that bind fields, and a
|
|
3
|
+
* sink. Every server-side line honey writes goes through one; `app.logger(value)` replaces the
|
|
4
|
+
* default, `app.logger(false)` silences it. Below the level nothing is built: no fields read, no
|
|
5
|
+
* clock read. A plain module: importing it registers nothing (H23).
|
|
6
|
+
*/
|
|
7
|
+
import { HoneyError } from "../errors/error.js";
|
|
8
|
+
import { formatLine } from "./log-format.js";
|
|
9
|
+
/** pino's numeric levels; `silent` is above every one. */
|
|
10
|
+
export const LEVELS = /* @__PURE__ */ Object.freeze({
|
|
11
|
+
debug: 20,
|
|
12
|
+
error: 50,
|
|
13
|
+
fatal: 60,
|
|
14
|
+
info: 30,
|
|
15
|
+
silent: Number.POSITIVE_INFINITY,
|
|
16
|
+
trace: 10,
|
|
17
|
+
warn: 40,
|
|
18
|
+
});
|
|
19
|
+
/** NODE_ENV where the runtime has a process environment; undefined where it has none (Workers). */
|
|
20
|
+
export function nodeEnv() {
|
|
21
|
+
return globalThis.process?.env?.NODE_ENV;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The default level and format for a NODE_ENV. Unset, unreadable or unknown takes production's:
|
|
25
|
+
* forgetting NODE_ENV must never turn on debug output.
|
|
26
|
+
*/
|
|
27
|
+
export function defaultsFor(env) {
|
|
28
|
+
if (env === "development")
|
|
29
|
+
return { format: "pretty", level: "debug" };
|
|
30
|
+
/* the runner sets NODE_ENV=test, not the author: a quiet test is worth having, a swallowed incident is not */
|
|
31
|
+
if (env === "test")
|
|
32
|
+
return { format: "json", level: "error" };
|
|
33
|
+
return { format: "json", level: "info" };
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Whether this runtime is Workers, by the same mark `detectRuntime` reads (never by calling it: that one throws
|
|
37
|
+
* where it cannot tell, and a logger must not throw as it is made).
|
|
38
|
+
*/
|
|
39
|
+
function onWorkers() {
|
|
40
|
+
const agent = globalThis.navigator?.userAgent ?? "";
|
|
41
|
+
return agent.startsWith("Cloudflare-Workers") || agent.startsWith("workerd");
|
|
42
|
+
}
|
|
43
|
+
function defaultSink() {
|
|
44
|
+
/* the console is where a worker's logs go, and `nodejs_compat` gives it a process.stdout that they do not:
|
|
45
|
+
the sink follows the runtime, not whichever globals happen to exist (bit 22 a) */
|
|
46
|
+
// oxlint-disable-next-line no-console
|
|
47
|
+
if (onWorkers())
|
|
48
|
+
return (line) => console.log(line);
|
|
49
|
+
const stdout = globalThis.process?.stdout;
|
|
50
|
+
if (typeof stdout?.write === "function")
|
|
51
|
+
return (line) => void stdout.write(`${line}\n`);
|
|
52
|
+
/* a runtime with neither: the console is the one sink left */
|
|
53
|
+
// oxlint-disable-next-line no-console
|
|
54
|
+
return (line) => console.log(line);
|
|
55
|
+
}
|
|
56
|
+
/** `fields` with each Error written as its name, message, stack and cause instead of `{}`. */
|
|
57
|
+
function withErrors(fields) {
|
|
58
|
+
let out = null;
|
|
59
|
+
for (const key in fields) {
|
|
60
|
+
const value = fields[key];
|
|
61
|
+
if (value instanceof Error) {
|
|
62
|
+
out ??= { ...fields };
|
|
63
|
+
out[key] = HoneyError.serialize(value);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return out ?? fields;
|
|
67
|
+
}
|
|
68
|
+
/* methods live on the prototype: a per-request child must not allocate a closure per level */
|
|
69
|
+
class LoggerImpl {
|
|
70
|
+
level;
|
|
71
|
+
#base;
|
|
72
|
+
#format;
|
|
73
|
+
#threshold;
|
|
74
|
+
#write;
|
|
75
|
+
constructor(level, format, write, base) {
|
|
76
|
+
this.level = level;
|
|
77
|
+
this.#base = base;
|
|
78
|
+
this.#format = format;
|
|
79
|
+
this.#threshold = LEVELS[level];
|
|
80
|
+
this.#write = write;
|
|
81
|
+
}
|
|
82
|
+
child(bindings) {
|
|
83
|
+
return new LoggerImpl(this.level, this.#format, this.#write, { ...this.#base, ...bindings });
|
|
84
|
+
}
|
|
85
|
+
trace(first, msg) {
|
|
86
|
+
this.#emit(10, first, msg);
|
|
87
|
+
}
|
|
88
|
+
debug(first, msg) {
|
|
89
|
+
this.#emit(20, first, msg);
|
|
90
|
+
}
|
|
91
|
+
info(first, msg) {
|
|
92
|
+
this.#emit(30, first, msg);
|
|
93
|
+
}
|
|
94
|
+
warn(first, msg) {
|
|
95
|
+
this.#emit(40, first, msg);
|
|
96
|
+
}
|
|
97
|
+
error(first, msg) {
|
|
98
|
+
this.#emit(50, first, msg);
|
|
99
|
+
}
|
|
100
|
+
fatal(first, msg) {
|
|
101
|
+
this.#emit(60, first, msg);
|
|
102
|
+
}
|
|
103
|
+
#emit(level, first, msg) {
|
|
104
|
+
if (level < this.#threshold)
|
|
105
|
+
return;
|
|
106
|
+
try {
|
|
107
|
+
const record = typeof first === "string"
|
|
108
|
+
? { ...this.#base, level, msg: first, time: Date.now() }
|
|
109
|
+
: { ...this.#base, ...withErrors(first), level, msg: msg ?? "", time: Date.now() };
|
|
110
|
+
this.#write(formatLine(this.#format, record));
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
/* a failing sink or a field that cannot be read: the logger is the last reporter, nothing is left to tell */
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/** A logger. Unset level and format follow NODE_ENV, read now (`defaultsFor`). */
|
|
118
|
+
export function createLogger(options = {}) {
|
|
119
|
+
const defaults = options.level === undefined || options.format === undefined ? defaultsFor(nodeEnv()) : null;
|
|
120
|
+
return new LoggerImpl(options.level ?? defaults.level, options.format ?? defaults.format, options.write ?? defaultSink(), options.base ?? {});
|
|
121
|
+
}
|
|
122
|
+
function noop() { }
|
|
123
|
+
function silentChild() {
|
|
124
|
+
return SILENT;
|
|
125
|
+
}
|
|
126
|
+
/** The logger that writes nothing: what `app.logger(false)` sets. Its children are itself. */
|
|
127
|
+
export const SILENT = /* @__PURE__ */ Object.freeze({
|
|
128
|
+
child: silentChild,
|
|
129
|
+
debug: noop,
|
|
130
|
+
error: noop,
|
|
131
|
+
fatal: noop,
|
|
132
|
+
info: noop,
|
|
133
|
+
level: "silent",
|
|
134
|
+
trace: noop,
|
|
135
|
+
warn: noop,
|
|
136
|
+
});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@lovrozagar/honey/telemetry`: `otelAdapter` and the types of the value `app.telemetry()` carries.
|
|
3
|
+
* A plain subpath for tree-shaking: honey imports no OpenTelemetry package.
|
|
4
|
+
*/
|
|
5
|
+
export { type OtelAdapterOptions, type OtelApi, otelAdapter } from "./otel.ts";
|
|
6
|
+
export type { Attributes, AttributeValue, Span, SpanOptions, Telemetry, TelemetryErrorReport, Tracer, } from "./request-trace.ts";
|
|
7
|
+
export type { RemoteContext } from "./traceparent.ts";
|
package/dist/telemetry/otel.d.ts
CHANGED
|
@@ -1,61 +1,54 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
/**
|
|
2
|
+
* `otelAdapter(api, options)`: the Telemetry value `app.telemetry()` carries, over the app's own
|
|
3
|
+
* OpenTelemetry API. Pass the `@opentelemetry/api` module itself; honey imports no OpenTelemetry
|
|
4
|
+
* package, so there is one shared instance and nothing to load. Only `trace` and `context` are used:
|
|
5
|
+
* honey parses `traceparent` itself (the trust gate validates what it continues), so no propagator
|
|
6
|
+
* has to be registered. Every span's parent is passed explicitly; `run` makes the handler's span the
|
|
7
|
+
* active one only so the app's own instrumentation nests under it.
|
|
8
|
+
*/
|
|
9
|
+
import type { InboundTrust } from "../middleware/request-id.ts";
|
|
10
|
+
import type { Attributes, Span, Telemetry, TelemetryErrorReport } from "./request-trace.ts";
|
|
11
|
+
/** OpenTelemetry's `TraceState`, as its spans carry one. */
|
|
12
|
+
type OtelTraceState = {
|
|
13
|
+
get(key: string): string | undefined;
|
|
14
|
+
serialize(): string;
|
|
15
|
+
set(key: string, value: string): OtelTraceState;
|
|
16
|
+
unset(key: string): OtelTraceState;
|
|
6
17
|
};
|
|
7
|
-
type
|
|
8
|
-
|
|
18
|
+
type OtelSpanContext = {
|
|
19
|
+
readonly isRemote?: boolean;
|
|
20
|
+
readonly spanId: string;
|
|
21
|
+
readonly traceFlags: number;
|
|
22
|
+
readonly traceId: string;
|
|
23
|
+
readonly traceState?: OtelTraceState;
|
|
9
24
|
};
|
|
10
|
-
type
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}): void;
|
|
17
|
-
onHandler?(ctx: {
|
|
18
|
-
duration: number;
|
|
19
|
-
method: string;
|
|
20
|
-
path: string;
|
|
21
|
-
route?: string;
|
|
22
|
-
status: number;
|
|
23
|
-
}): void;
|
|
24
|
-
onMethodNotAllowed?(ctx: {
|
|
25
|
-
allowed: string[];
|
|
26
|
-
method: string;
|
|
27
|
-
path: string;
|
|
28
|
-
req: Request;
|
|
29
|
-
}): void;
|
|
30
|
-
onMiddleware?(ctx: {
|
|
31
|
-
duration: number;
|
|
32
|
-
error?: unknown;
|
|
33
|
-
name: string;
|
|
34
|
-
}): void;
|
|
35
|
-
onNotFound?(ctx: {
|
|
36
|
-
method: string;
|
|
37
|
-
path: string;
|
|
38
|
-
req: Request;
|
|
39
|
-
}): void;
|
|
40
|
-
onRequest?(ctx: {
|
|
41
|
-
env: unknown;
|
|
42
|
-
req: Request;
|
|
43
|
-
}): void;
|
|
44
|
-
onResponse?(ctx: {
|
|
45
|
-
duration: number;
|
|
46
|
-
req: Request;
|
|
47
|
-
status: number;
|
|
48
|
-
}): void;
|
|
49
|
-
onRoute?(ctx: {
|
|
50
|
-
method: string;
|
|
51
|
-
params: Record<string, string>;
|
|
52
|
-
path: string;
|
|
53
|
-
req: Request;
|
|
54
|
-
route?: string;
|
|
55
|
-
}): void;
|
|
25
|
+
type OtelSpanOptions = {
|
|
26
|
+
readonly attributes?: Attributes;
|
|
27
|
+
readonly kind?: number;
|
|
28
|
+
readonly links?: {
|
|
29
|
+
readonly context: OtelSpanContext;
|
|
30
|
+
}[];
|
|
56
31
|
};
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
32
|
+
/** The part of `@opentelemetry/api` the adapter uses: pass the module itself. */
|
|
33
|
+
export type OtelApi = {
|
|
34
|
+
readonly context: {
|
|
35
|
+
active(): unknown;
|
|
36
|
+
with<T>(context: unknown, fn: () => T): T;
|
|
37
|
+
};
|
|
38
|
+
readonly trace: {
|
|
39
|
+
deleteSpan(context: unknown): unknown;
|
|
40
|
+
getTracer(name: string): {
|
|
41
|
+
startSpan(name: string, options?: OtelSpanOptions, context?: unknown): Span;
|
|
42
|
+
};
|
|
43
|
+
setSpan(context: unknown, span: Span): unknown;
|
|
44
|
+
setSpanContext(context: unknown, spanContext: OtelSpanContext): unknown;
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
export type OtelAdapterOptions = {
|
|
48
|
+
/** fire-and-forget error reporting: never awaited, never shapes the answer */
|
|
49
|
+
onError?: (report: TelemetryErrorReport) => unknown;
|
|
50
|
+
/** continue an inbound `traceparent` from this hop (else it is only linked); default `false` */
|
|
51
|
+
trustInbound?: InboundTrust;
|
|
52
|
+
};
|
|
53
|
+
export declare function otelAdapter(api: OtelApi, options?: OtelAdapterOptions): Telemetry;
|
|
60
54
|
export {};
|
|
61
|
-
//# sourceMappingURL=otel.d.ts.map
|
package/dist/telemetry/otel.js
CHANGED
|
@@ -1,135 +1,59 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
/** OpenTelemetry's `SpanKind`. */
|
|
2
|
+
const KIND = { client: 2, internal: 0, server: 1 };
|
|
3
|
+
/** W3C caps a tracestate at 32 members. */
|
|
4
|
+
const MAX_MEMBERS = 32;
|
|
5
|
+
/** A W3C tracestate: ordered members, an edited key moved to the front, immutable. */
|
|
6
|
+
class TraceState {
|
|
7
|
+
#members;
|
|
8
|
+
constructor(members) {
|
|
9
|
+
this.#members = members;
|
|
10
|
+
}
|
|
11
|
+
/** From a header `parseTracestate` already validated. */
|
|
12
|
+
static parse(header) {
|
|
13
|
+
return new TraceState(header.split(",").map((member) => {
|
|
14
|
+
const eq = member.indexOf("=");
|
|
15
|
+
return [member.slice(0, eq), member.slice(eq + 1)];
|
|
16
|
+
}));
|
|
17
|
+
}
|
|
18
|
+
get(key) {
|
|
19
|
+
return this.#members.find(([k]) => k === key)?.[1];
|
|
20
|
+
}
|
|
21
|
+
set(key, value) {
|
|
22
|
+
return new TraceState([[key, value], ...this.#members.filter(([k]) => k !== key)].slice(0, MAX_MEMBERS));
|
|
23
|
+
}
|
|
24
|
+
unset(key) {
|
|
25
|
+
return new TraceState(this.#members.filter(([k]) => k !== key));
|
|
26
|
+
}
|
|
27
|
+
serialize() {
|
|
28
|
+
return this.#members.map(([k, v]) => `${k}=${v}`).join(",");
|
|
29
|
+
}
|
|
10
30
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const scheme = bare.indexOf("//");
|
|
15
|
-
const start = scheme === -1 ? 0 : bare.indexOf("/", scheme + 2);
|
|
16
|
-
return start === -1 ? "/" : bare.slice(start);
|
|
31
|
+
function remoteContext(remote) {
|
|
32
|
+
const context = { isRemote: true, spanId: remote.spanId, traceFlags: remote.flags, traceId: remote.traceId };
|
|
33
|
+
return remote.state === undefined ? context : { ...context, traceState: TraceState.parse(remote.state) };
|
|
17
34
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
},
|
|
37
|
-
onHandler(ctx) {
|
|
38
|
-
try {
|
|
39
|
-
const span = options.tracer.startSpan("http.handler");
|
|
40
|
-
span.setAttribute("http.method", ctx.method);
|
|
41
|
-
/* the pattern, never the request path: one series per route, not per id */
|
|
42
|
-
if (ctx.route !== undefined && ctx.route !== "")
|
|
43
|
-
span.setAttribute("http.route", ctx.route);
|
|
44
|
-
span.setAttribute("http.status_code", ctx.status);
|
|
45
|
-
span.setAttribute("http.duration_ms", ctx.duration);
|
|
46
|
-
span.end();
|
|
47
|
-
}
|
|
48
|
-
catch {
|
|
49
|
-
/* swallow */
|
|
50
|
-
}
|
|
51
|
-
},
|
|
52
|
-
onMethodNotAllowed(ctx) {
|
|
53
|
-
try {
|
|
54
|
-
const span = spans.get(ctx.req);
|
|
55
|
-
if (span) {
|
|
56
|
-
span.addEvent("method_not_allowed", {
|
|
57
|
-
"http.allowed_methods": ctx.allowed.join(", "),
|
|
58
|
-
"http.method": ctx.method,
|
|
59
|
-
"url.path": ctx.path,
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
catch {
|
|
64
|
-
/* swallow */
|
|
65
|
-
}
|
|
66
|
-
},
|
|
67
|
-
onMiddleware(ctx) {
|
|
68
|
-
try {
|
|
69
|
-
const span = options.tracer.startSpan(`middleware.${ctx.name}`);
|
|
70
|
-
span.setAttribute("middleware.name", ctx.name);
|
|
71
|
-
span.setAttribute("middleware.duration_ms", ctx.duration);
|
|
72
|
-
if (ctx.error)
|
|
73
|
-
span.addEvent("error");
|
|
74
|
-
span.end();
|
|
75
|
-
}
|
|
76
|
-
catch {
|
|
77
|
-
/* swallow */
|
|
78
|
-
}
|
|
79
|
-
},
|
|
80
|
-
onNotFound(ctx) {
|
|
81
|
-
try {
|
|
82
|
-
const span = spans.get(ctx.req);
|
|
83
|
-
if (span) {
|
|
84
|
-
span.addEvent("not_found", {
|
|
85
|
-
"http.method": ctx.method,
|
|
86
|
-
"url.path": ctx.path,
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
catch {
|
|
91
|
-
/* swallow */
|
|
92
|
-
}
|
|
93
|
-
},
|
|
94
|
-
onRequest(ctx) {
|
|
95
|
-
try {
|
|
96
|
-
const span = options.tracer.startSpan("http.request");
|
|
97
|
-
span.setAttribute("http.method", ctx.req.method);
|
|
98
|
-
span.setAttribute("http.url", urlWithoutQuery(ctx.req.url));
|
|
99
|
-
span.setAttribute("url.path", pathOf(ctx.req.url));
|
|
100
|
-
spans.set(ctx.req, span);
|
|
101
|
-
}
|
|
102
|
-
catch {
|
|
103
|
-
/* swallow */
|
|
104
|
-
}
|
|
105
|
-
},
|
|
106
|
-
onResponse(ctx) {
|
|
107
|
-
try {
|
|
108
|
-
const span = spans.get(ctx.req);
|
|
109
|
-
if (span) {
|
|
110
|
-
span.setAttribute("http.status_code", ctx.status);
|
|
111
|
-
span.setAttribute("http.duration_ms", ctx.duration);
|
|
112
|
-
span.end();
|
|
113
|
-
spans.delete(ctx.req);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
catch {
|
|
117
|
-
/* swallow */
|
|
118
|
-
}
|
|
119
|
-
},
|
|
120
|
-
onRoute(ctx) {
|
|
121
|
-
try {
|
|
122
|
-
const span = spans.get(ctx.req);
|
|
123
|
-
if (span) {
|
|
124
|
-
span.setAttribute("http.method", ctx.method);
|
|
125
|
-
if (ctx.route !== undefined && ctx.route !== "")
|
|
126
|
-
span.setAttribute("http.route", ctx.route);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
catch {
|
|
130
|
-
/* swallow */
|
|
131
|
-
}
|
|
35
|
+
function isSpan(parent) {
|
|
36
|
+
return typeof parent.spanContext === "function";
|
|
37
|
+
}
|
|
38
|
+
export function otelAdapter(api, options = {}) {
|
|
39
|
+
const otel = api.trace.getTracer("@lovrozagar/honey");
|
|
40
|
+
const tracer = {
|
|
41
|
+
run: (span, fn) => api.context.with(api.trace.setSpan(api.context.active(), span), fn),
|
|
42
|
+
startSpan(name, { attributes, kind, links, parent }) {
|
|
43
|
+
/* the parent is explicit: whatever span the ambient context holds is not it */
|
|
44
|
+
const base = api.trace.deleteSpan(api.context.active());
|
|
45
|
+
const context = parent === null
|
|
46
|
+
? base
|
|
47
|
+
: isSpan(parent)
|
|
48
|
+
? api.trace.setSpan(base, parent)
|
|
49
|
+
: api.trace.setSpanContext(base, remoteContext(parent));
|
|
50
|
+
const linked = links.map((link) => ({ context: remoteContext(link) }));
|
|
51
|
+
return otel.startSpan(name, { attributes, kind: KIND[kind], links: linked }, context);
|
|
132
52
|
},
|
|
133
53
|
};
|
|
54
|
+
return Object.freeze({
|
|
55
|
+
onError: options.onError ?? null,
|
|
56
|
+
tracer: Object.freeze(tracer),
|
|
57
|
+
trustInbound: options.trustInbound ?? false,
|
|
58
|
+
});
|
|
134
59
|
}
|
|
135
|
-
//# sourceMappingURL=otel.js.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { FetchState } from "../routing/dispatch.ts";
|
|
2
|
+
import type { AppSettings } from "../routing/settings.ts";
|
|
3
|
+
import { detectRuntime } from "../runtime/detect-runtime.ts";
|
|
4
|
+
import type { RequestTrace } from "./request-trace.ts";
|
|
5
|
+
import type { BodyEnd } from "./span-lifecycle.ts";
|
|
6
|
+
/**
|
|
7
|
+
* One observed request: what came in, when, the state routing records so the line can name the
|
|
8
|
+
* route, and its spans when the app has telemetry.
|
|
9
|
+
*/
|
|
10
|
+
export type Seen = {
|
|
11
|
+
readonly request: Request;
|
|
12
|
+
readonly started: number;
|
|
13
|
+
state: FetchState | null;
|
|
14
|
+
readonly trace: RequestTrace | undefined;
|
|
15
|
+
};
|
|
16
|
+
/** The runtime `globals` belong to, or `unknown` for one serve() does not know. */
|
|
17
|
+
export declare function runtimeOf(globals?: Parameters<typeof detectRuntime>[0]): string;
|
|
18
|
+
/**
|
|
19
|
+
* The request log's line for the request `response` answers: what the body observer calls once the
|
|
20
|
+
* body ended (`ended`) or was cancelled, with the bytes it carried.
|
|
21
|
+
*/
|
|
22
|
+
export declare function requestLine(s: AppSettings<unknown>, seen: Seen, response: Response): BodyEnd;
|