@lovrozagar/honey 0.6.5 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +514 -192
- package/bin/honey.js +25 -0
- package/dist/accepts.d.ts +7 -1
- package/dist/accepts.d.ts.map +1 -1
- package/dist/accepts.js +126 -0
- package/dist/accepts.js.map +1 -0
- package/dist/body-kind.d.ts +26 -0
- package/dist/body-kind.d.ts.map +1 -0
- package/dist/body-kind.js +70 -0
- package/dist/body-kind.js.map +1 -0
- package/dist/body-limit.d.ts +5 -1
- package/dist/body-limit.d.ts.map +1 -1
- package/dist/body-limit.js +126 -0
- package/dist/body-limit.js.map +1 -0
- package/dist/build/index.d.ts +19 -3
- package/dist/build/index.d.ts.map +1 -1
- package/dist/build/index.js +173 -0
- package/dist/build/index.js.map +1 -0
- package/dist/cli-args.d.ts +33 -0
- package/dist/cli-args.d.ts.map +1 -0
- package/dist/cli-args.js +102 -0
- package/dist/cli-args.js.map +1 -0
- package/dist/cli-go/auth.go +26 -0
- package/dist/cli-go/config.go +192 -0
- package/dist/cli-go/errors.go +75 -0
- package/dist/cli-go/multipart.go +79 -0
- package/dist/cli-go/output.go +163 -0
- package/dist/cli-go/root.go +30 -0
- package/dist/cli-go/stream.go +88 -0
- package/dist/cli-go/version.go +5 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +209 -0
- package/dist/cli.js.map +1 -0
- package/dist/client/defaults.js +48 -0
- package/dist/client/defaults.js.map +1 -0
- package/dist/client/error.d.ts +35 -0
- package/dist/client/error.d.ts.map +1 -1
- package/dist/client/error.js +71 -0
- package/dist/client/error.js.map +1 -0
- package/dist/client/http.d.ts +67 -8
- package/dist/client/http.d.ts.map +1 -1
- package/dist/client/http.js +571 -0
- package/dist/client/http.js.map +1 -0
- package/dist/client/index.d.ts +3 -2
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +95 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/path.d.ts +26 -0
- package/dist/client/path.d.ts.map +1 -0
- package/dist/client/path.js +163 -0
- package/dist/client/path.js.map +1 -0
- package/dist/client/redirect-policy.d.ts +12 -0
- package/dist/client/redirect-policy.d.ts.map +1 -0
- package/dist/client/redirect-policy.js +20 -0
- package/dist/client/redirect-policy.js.map +1 -0
- package/dist/client/sdk.d.ts +36 -0
- package/dist/client/sdk.d.ts.map +1 -1
- package/dist/client/sdk.js +292 -0
- package/dist/client/sdk.js.map +1 -0
- package/dist/client/sse.d.ts +13 -0
- package/dist/client/sse.d.ts.map +1 -1
- package/dist/client/sse.js +129 -0
- package/dist/client/sse.js.map +1 -0
- package/dist/client/types.js +2 -0
- package/dist/client/types.js.map +1 -0
- package/dist/client/ws.d.ts +9 -2
- package/dist/client/ws.d.ts.map +1 -1
- package/dist/client/ws.js +112 -0
- package/dist/client/ws.js.map +1 -0
- package/dist/client-go/errors.go +236 -0
- package/dist/client-go/export.go +44 -0
- package/dist/client-go/invalidation.go +371 -0
- package/dist/client-go/nullable.go +62 -0
- package/dist/client-go/realtime.go +354 -0
- package/dist/client-go/result.go +20 -0
- package/dist/client-go/runtime.go +975 -0
- package/dist/client-go/sse.go +159 -0
- package/dist/client-go/transport.go +495 -0
- package/dist/client-go/ws.go +128 -0
- package/dist/client-info.d.ts +36 -0
- package/dist/client-info.d.ts.map +1 -0
- package/dist/client-info.js +53 -0
- package/dist/client-info.js.map +1 -0
- package/dist/client-mcp/README.md +10 -0
- package/dist/client-mcp/server.ts +221 -0
- package/dist/client-mcp/types.ts +19 -0
- package/dist/client-python/_errors.py +115 -0
- package/dist/client-python/_invalidation.py +494 -0
- package/dist/client-python/_realtime.py +179 -0
- package/dist/client-python/_runtime.py +860 -0
- package/dist/client-python/_sse.py +155 -0
- package/dist/client-python/_transport.py +366 -0
- package/dist/client-python/_ws.py +159 -0
- package/dist/client-python/py.typed +0 -0
- package/dist/client-rust/errors.rs +220 -0
- package/dist/client-rust/invalidation.rs +412 -0
- package/dist/client-rust/invalidation_sync.rs +93 -0
- package/dist/client-rust/nullable.rs +17 -0
- package/dist/client-rust/realtime.rs +702 -0
- package/dist/client-rust/result.rs +22 -0
- package/dist/client-rust/runtime.rs +980 -0
- package/dist/client-rust/runtime_sync.rs +484 -0
- package/dist/client-rust/sse.rs +188 -0
- package/dist/client-rust/ws.rs +167 -0
- package/dist/codegen-go-cli.d.ts.map +1 -1
- package/dist/codegen-go-cli.js +964 -0
- package/dist/codegen-go-cli.js.map +1 -0
- package/dist/codegen-go.d.ts +15 -3
- package/dist/codegen-go.d.ts.map +1 -1
- package/dist/codegen-go.js +872 -0
- package/dist/codegen-go.js.map +1 -0
- package/dist/codegen-hash.js +9 -0
- package/dist/codegen-hash.js.map +1 -0
- package/dist/codegen-ir.d.ts +69 -2
- package/dist/codegen-ir.d.ts.map +1 -1
- package/dist/codegen-ir.js +661 -0
- package/dist/codegen-ir.js.map +1 -0
- package/dist/codegen-lang.d.ts +65 -0
- package/dist/codegen-lang.d.ts.map +1 -0
- package/dist/codegen-lang.js +526 -0
- package/dist/codegen-lang.js.map +1 -0
- package/dist/codegen-load.d.ts +31 -0
- package/dist/codegen-load.d.ts.map +1 -0
- package/dist/codegen-load.js +138 -0
- package/dist/codegen-load.js.map +1 -0
- package/dist/codegen-loaders.js +55 -0
- package/dist/codegen-loaders.js.map +1 -0
- package/dist/codegen-mcp.d.ts.map +1 -1
- package/dist/codegen-mcp.js +368 -0
- package/dist/codegen-mcp.js.map +1 -0
- package/dist/codegen-python.d.ts +13 -1
- package/dist/codegen-python.d.ts.map +1 -1
- package/dist/codegen-python.js +828 -0
- package/dist/codegen-python.js.map +1 -0
- package/dist/codegen-route-tree-intern.d.ts +15 -5
- package/dist/codegen-route-tree-intern.d.ts.map +1 -1
- package/dist/codegen-route-tree-intern.js +221 -0
- package/dist/codegen-route-tree-intern.js.map +1 -0
- package/dist/codegen-rust.d.ts.map +1 -1
- package/dist/codegen-rust.js +1293 -0
- package/dist/codegen-rust.js.map +1 -0
- package/dist/codegen-sanitize.d.ts.map +1 -1
- package/dist/codegen-sanitize.js +56 -0
- package/dist/codegen-sanitize.js.map +1 -0
- package/dist/codegen-schema-naming.d.ts +5 -0
- package/dist/codegen-schema-naming.d.ts.map +1 -1
- package/dist/codegen-schema-naming.js +150 -0
- package/dist/codegen-schema-naming.js.map +1 -0
- package/dist/codegen-sdk-model.d.ts +71 -0
- package/dist/codegen-sdk-model.d.ts.map +1 -0
- package/dist/codegen-sdk-model.js +179 -0
- package/dist/codegen-sdk-model.js.map +1 -0
- package/dist/codegen.d.ts +41 -23
- package/dist/codegen.d.ts.map +1 -1
- package/dist/codegen.js +4610 -0
- package/dist/codegen.js.map +1 -0
- package/dist/context.d.ts +36 -6
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +242 -0
- package/dist/context.js.map +1 -0
- package/dist/cookie-sign.d.ts +16 -2
- package/dist/cookie-sign.d.ts.map +1 -1
- package/dist/cookie-sign.js +104 -0
- package/dist/cookie-sign.js.map +1 -0
- package/dist/cookie.d.ts +12 -0
- package/dist/cookie.d.ts.map +1 -1
- package/dist/cookie.js +138 -0
- package/dist/cookie.js.map +1 -0
- package/dist/cors.d.ts +1 -0
- package/dist/cors.d.ts.map +1 -1
- package/dist/cors.js +87 -0
- package/dist/cors.js.map +1 -0
- package/dist/crypto.d.ts +6 -1
- package/dist/crypto.d.ts.map +1 -1
- package/dist/crypto.js +38 -0
- package/dist/crypto.js.map +1 -0
- package/dist/csrf.d.ts +19 -0
- package/dist/csrf.d.ts.map +1 -1
- package/dist/csrf.js +79 -0
- package/dist/csrf.js.map +1 -0
- package/dist/curl-logger.d.ts +14 -3
- package/dist/curl-logger.d.ts.map +1 -1
- package/dist/curl-logger.js +199 -0
- package/dist/curl-logger.js.map +1 -0
- package/dist/detect-runtime.js +13 -0
- package/dist/detect-runtime.js.map +1 -0
- package/dist/dict.d.ts +11 -0
- package/dist/dict.d.ts.map +1 -0
- package/dist/dict.js +13 -0
- package/dist/dict.js.map +1 -0
- package/dist/error.d.ts.map +1 -1
- package/dist/error.js +44 -0
- package/dist/error.js.map +1 -0
- package/dist/errors.js +39 -0
- package/dist/errors.js.map +1 -0
- package/dist/etag.d.ts +2 -0
- package/dist/etag.d.ts.map +1 -1
- package/dist/etag.js +82 -0
- package/dist/etag.js.map +1 -0
- package/dist/feature-detect.d.ts +25 -0
- package/dist/feature-detect.d.ts.map +1 -0
- package/dist/feature-detect.js +144 -0
- package/dist/feature-detect.js.map +1 -0
- package/dist/feature-load.js +36 -0
- package/dist/feature-load.js.map +1 -0
- package/dist/feature-slots.d.ts +44 -0
- package/dist/feature-slots.d.ts.map +1 -0
- package/dist/feature-slots.js +48 -0
- package/dist/feature-slots.js.map +1 -0
- package/dist/fetch-request.d.ts +10 -0
- package/dist/fetch-request.d.ts.map +1 -0
- package/dist/fetch-request.js +13 -0
- package/dist/fetch-request.js.map +1 -0
- package/dist/gen-process.d.ts +15 -0
- package/dist/gen-process.d.ts.map +1 -0
- package/dist/gen-process.js +43 -0
- package/dist/gen-process.js.map +1 -0
- package/dist/gen-write.d.ts +19 -0
- package/dist/gen-write.d.ts.map +1 -0
- package/dist/gen-write.js +120 -0
- package/dist/gen-write.js.map +1 -0
- package/dist/glob.d.ts +21 -0
- package/dist/glob.d.ts.map +1 -0
- package/dist/glob.js +115 -0
- package/dist/glob.js.map +1 -0
- package/dist/go-type-emitter.d.ts +18 -4
- package/dist/go-type-emitter.d.ts.map +1 -1
- package/dist/go-type-emitter.js +594 -0
- package/dist/go-type-emitter.js.map +1 -0
- package/dist/honey-response.d.ts.map +1 -1
- package/dist/honey-response.js +338 -0
- package/dist/honey-response.js.map +1 -0
- package/dist/i18n-slot.d.ts +8 -0
- package/dist/i18n-slot.d.ts.map +1 -1
- package/dist/i18n-slot.js +14 -0
- package/dist/i18n-slot.js.map +1 -0
- package/dist/i18n.d.ts +3 -0
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js +250 -0
- package/dist/i18n.js.map +1 -0
- package/dist/index.d.ts +410 -149
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2324 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +3 -5
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +140 -0
- package/dist/init.js.map +1 -0
- package/dist/input.js +4 -0
- package/dist/input.js.map +1 -0
- package/dist/invalidate-check.d.ts +11 -0
- package/dist/invalidate-check.d.ts.map +1 -1
- package/dist/invalidate-check.js +163 -0
- package/dist/invalidate-check.js.map +1 -0
- package/dist/invoke-user.d.ts +35 -0
- package/dist/invoke-user.d.ts.map +1 -0
- package/dist/invoke-user.js +73 -0
- package/dist/invoke-user.js.map +1 -0
- package/dist/ip-restrict.d.ts +13 -1
- package/dist/ip-restrict.d.ts.map +1 -1
- package/dist/ip-restrict.js +60 -0
- package/dist/ip-restrict.js.map +1 -0
- package/dist/ip.d.ts +39 -0
- package/dist/ip.d.ts.map +1 -0
- package/dist/ip.js +209 -0
- package/dist/ip.js.map +1 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +113 -0
- package/dist/logger.js.map +1 -0
- package/dist/media-type.d.ts +30 -0
- package/dist/media-type.d.ts.map +1 -0
- package/dist/media-type.js +97 -0
- package/dist/media-type.js.map +1 -0
- package/dist/meta-spec-merge.d.ts +32 -0
- package/dist/meta-spec-merge.d.ts.map +1 -0
- package/dist/meta-spec-merge.js +68 -0
- package/dist/meta-spec-merge.js.map +1 -0
- package/dist/meta-spec.d.ts +16 -3
- package/dist/meta-spec.d.ts.map +1 -1
- package/dist/meta-spec.js +535 -0
- package/dist/meta-spec.js.map +1 -0
- package/dist/middleware.d.ts +23 -6
- package/dist/middleware.d.ts.map +1 -1
- package/dist/middleware.js +253 -0
- package/dist/middleware.js.map +1 -0
- package/dist/node-request.d.ts +57 -12
- package/dist/node-request.d.ts.map +1 -1
- package/dist/node-request.js +407 -0
- package/dist/node-request.js.map +1 -0
- package/dist/node.d.ts +20 -3
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +396 -0
- package/dist/node.js.map +1 -0
- package/dist/openapi/collect.d.ts +6 -3
- package/dist/openapi/collect.d.ts.map +1 -1
- package/dist/openapi/collect.js +30 -0
- package/dist/openapi/collect.js.map +1 -0
- package/dist/openapi/docs-page.d.ts +42 -0
- package/dist/openapi/docs-page.d.ts.map +1 -0
- package/dist/openapi/docs-page.js +80 -0
- package/dist/openapi/docs-page.js.map +1 -0
- package/dist/openapi/document.d.ts +4 -0
- package/dist/openapi/document.d.ts.map +1 -1
- package/dist/openapi/document.js +785 -0
- package/dist/openapi/document.js.map +1 -0
- package/dist/openapi/json-schema-slot.d.ts +7 -0
- package/dist/openapi/json-schema-slot.d.ts.map +1 -1
- package/dist/openapi/json-schema-slot.js +38 -0
- package/dist/openapi/json-schema-slot.js.map +1 -0
- package/dist/openapi/register.d.ts.map +1 -1
- package/dist/openapi/register.js +20 -0
- package/dist/openapi/register.js.map +1 -0
- package/dist/openapi/scalar.d.ts +3 -1
- package/dist/openapi/scalar.d.ts.map +1 -1
- package/dist/openapi/scalar.js +21 -0
- package/dist/openapi/scalar.js.map +1 -0
- package/dist/openapi/serve.d.ts +9 -0
- package/dist/openapi/serve.d.ts.map +1 -0
- package/dist/openapi/serve.js +36 -0
- package/dist/openapi/serve.js.map +1 -0
- package/dist/openapi/spec-factory.d.ts +30 -1
- package/dist/openapi/spec-factory.d.ts.map +1 -1
- package/dist/openapi/spec-factory.js +52 -0
- package/dist/openapi/spec-factory.js.map +1 -0
- package/dist/openapi/spec.d.ts +14 -5
- package/dist/openapi/spec.d.ts.map +1 -1
- package/dist/openapi/spec.js +50 -0
- package/dist/openapi/spec.js.map +1 -0
- package/dist/openapi/swagger.d.ts +3 -1
- package/dist/openapi/swagger.d.ts.map +1 -1
- package/dist/openapi/swagger.js +22 -0
- package/dist/openapi/swagger.js.map +1 -0
- package/dist/pattern.d.ts +71 -0
- package/dist/pattern.d.ts.map +1 -0
- package/dist/pattern.js +239 -0
- package/dist/pattern.js.map +1 -0
- package/dist/peer.d.ts +17 -0
- package/dist/peer.d.ts.map +1 -0
- package/dist/peer.js +50 -0
- package/dist/peer.js.map +1 -0
- package/dist/plugin.d.ts +67 -16
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +649 -0
- package/dist/plugin.js.map +1 -0
- package/dist/powered-by.d.ts.map +1 -1
- package/dist/powered-by.js +11 -0
- package/dist/powered-by.js.map +1 -0
- package/dist/pretty-json.d.ts.map +1 -1
- package/dist/pretty-json.js +47 -0
- package/dist/pretty-json.js.map +1 -0
- package/dist/producer-stream.d.ts +47 -0
- package/dist/producer-stream.d.ts.map +1 -0
- package/dist/producer-stream.js +267 -0
- package/dist/producer-stream.js.map +1 -0
- package/dist/proxy.d.ts +47 -8
- package/dist/proxy.d.ts.map +1 -1
- package/dist/proxy.js +274 -0
- package/dist/proxy.js.map +1 -0
- package/dist/python-type-emitter.d.ts +14 -1
- package/dist/python-type-emitter.d.ts.map +1 -1
- package/dist/python-type-emitter.js +157 -0
- package/dist/python-type-emitter.js.map +1 -0
- package/dist/realtime/bus.d.ts +17 -1
- package/dist/realtime/bus.d.ts.map +1 -1
- package/dist/realtime/bus.js +112 -0
- package/dist/realtime/bus.js.map +1 -0
- package/dist/realtime/register.d.ts +3 -0
- package/dist/realtime/register.d.ts.map +1 -0
- package/dist/realtime/register.js +10 -0
- package/dist/realtime/register.js.map +1 -0
- package/dist/realtime/route.d.ts +65 -26
- package/dist/realtime/route.d.ts.map +1 -1
- package/dist/realtime/route.js +72 -0
- package/dist/realtime/route.js.map +1 -0
- package/dist/realtime/server.d.ts +43 -0
- package/dist/realtime/server.d.ts.map +1 -0
- package/dist/realtime/server.js +255 -0
- package/dist/realtime/server.js.map +1 -0
- package/dist/request-id.d.ts +7 -0
- package/dist/request-id.d.ts.map +1 -1
- package/dist/request-id.js +16 -0
- package/dist/request-id.js.map +1 -0
- package/dist/request-limits.d.ts +3 -0
- package/dist/request-limits.d.ts.map +1 -0
- package/dist/request-limits.js +3 -0
- package/dist/request-limits.js.map +1 -0
- package/dist/request-path.d.ts +33 -0
- package/dist/request-path.d.ts.map +1 -0
- package/dist/request-path.js +178 -0
- package/dist/request-path.js.map +1 -0
- package/dist/request-to-curl.d.ts +7 -1
- package/dist/request-to-curl.d.ts.map +1 -1
- package/dist/request-to-curl.js +48 -0
- package/dist/request-to-curl.js.map +1 -0
- package/dist/response.d.ts +25 -2
- package/dist/response.d.ts.map +1 -1
- package/dist/response.js +313 -0
- package/dist/response.js.map +1 -0
- package/dist/rust-type-emitter.d.ts +14 -2
- package/dist/rust-type-emitter.d.ts.map +1 -1
- package/dist/rust-type-emitter.js +463 -0
- package/dist/rust-type-emitter.js.map +1 -0
- package/dist/secure-headers.d.ts.map +1 -1
- package/dist/secure-headers.js +53 -0
- package/dist/secure-headers.js.map +1 -0
- package/dist/serve-register.d.ts +4 -0
- package/dist/serve-register.d.ts.map +1 -1
- package/dist/serve-register.js +9 -0
- package/dist/serve-register.js.map +1 -0
- package/dist/serve-slot.d.ts +3 -0
- package/dist/serve-slot.d.ts.map +1 -1
- package/dist/serve-slot.js +52 -0
- package/dist/serve-slot.js.map +1 -0
- package/dist/serve.d.ts +18 -1
- package/dist/serve.d.ts.map +1 -1
- package/dist/serve.js +157 -0
- package/dist/serve.js.map +1 -0
- package/dist/server-timing.d.ts.map +1 -1
- package/dist/server-timing.js +51 -0
- package/dist/server-timing.js.map +1 -0
- package/dist/static.d.ts +9 -0
- package/dist/static.d.ts.map +1 -1
- package/dist/static.js +102 -0
- package/dist/static.js.map +1 -0
- package/dist/telemetry/otel.d.ts +2 -0
- package/dist/telemetry/otel.d.ts.map +1 -1
- package/dist/telemetry/otel.js +135 -0
- package/dist/telemetry/otel.js.map +1 -0
- package/dist/testing.d.ts +12 -0
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +124 -0
- package/dist/testing.js.map +1 -0
- package/dist/timeout.d.ts +6 -0
- package/dist/timeout.d.ts.map +1 -1
- package/dist/timeout.js +36 -0
- package/dist/timeout.js.map +1 -0
- package/dist/tree.d.ts +133 -36
- package/dist/tree.d.ts.map +1 -1
- package/dist/tree.js +437 -0
- package/dist/tree.js.map +1 -0
- package/dist/trust.d.ts +21 -0
- package/dist/trust.d.ts.map +1 -0
- package/dist/trust.js +100 -0
- package/dist/trust.js.map +1 -0
- package/dist/ts-type-emitter.d.ts.map +1 -1
- package/dist/ts-type-emitter.js +150 -0
- package/dist/ts-type-emitter.js.map +1 -0
- package/dist/type-emitter.d.ts +16 -2
- package/dist/type-emitter.d.ts.map +1 -1
- package/dist/type-emitter.js +729 -0
- package/dist/type-emitter.js.map +1 -0
- package/dist/type-extractor.d.ts +8 -4
- package/dist/type-extractor.d.ts.map +1 -1
- package/dist/type-extractor.js +776 -0
- package/dist/type-extractor.js.map +1 -0
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +96 -0
- package/dist/types.js.map +1 -0
- package/dist/validation.d.ts +14 -2
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +335 -0
- package/dist/validation.js.map +1 -0
- package/dist/with-headers.d.ts +15 -0
- package/dist/with-headers.d.ts.map +1 -0
- package/dist/with-headers.js +45 -0
- package/dist/with-headers.js.map +1 -0
- package/dist/ws/bun.d.ts +11 -5
- package/dist/ws/bun.d.ts.map +1 -1
- package/dist/ws/bun.js +82 -0
- package/dist/ws/bun.js.map +1 -0
- package/dist/ws/cloudflare.d.ts +25 -3
- package/dist/ws/cloudflare.d.ts.map +1 -1
- package/dist/ws/cloudflare.js +117 -0
- package/dist/ws/cloudflare.js.map +1 -0
- package/dist/ws/deno.d.ts +4 -4
- package/dist/ws/deno.d.ts.map +1 -1
- package/dist/ws/deno.js +133 -0
- package/dist/ws/deno.js.map +1 -0
- package/dist/ws/node.d.ts +20 -3
- package/dist/ws/node.d.ts.map +1 -1
- package/dist/ws/node.js +173 -0
- package/dist/ws/node.js.map +1 -0
- package/dist/ws/session.d.ts +11 -0
- package/dist/ws/session.d.ts.map +1 -0
- package/dist/ws/session.js +60 -0
- package/dist/ws/session.js.map +1 -0
- package/dist/ws/shared.d.ts +65 -0
- package/dist/ws/shared.d.ts.map +1 -0
- package/dist/ws/shared.js +103 -0
- package/dist/ws/shared.js.map +1 -0
- package/dist/ws-origin.d.ts +20 -0
- package/dist/ws-origin.d.ts.map +1 -0
- package/dist/ws-origin.js +41 -0
- package/dist/ws-origin.js.map +1 -0
- package/dist/yaml.d.ts +15 -1
- package/dist/yaml.d.ts.map +1 -1
- package/dist/yaml.js +101 -0
- package/dist/yaml.js.map +1 -0
- package/docs/invalidate-spec.md +13 -1
- package/docs/meta-spec.md +36 -12
- package/docs/packaging.md +43 -24
- package/docs/regression-matrix/README.md +32 -0
- package/docs/regression-matrix/review.md +44 -0
- package/docs/regression-matrix/ws1-3.md +97 -0
- package/docs/regression-matrix/ws4-8.md +107 -0
- package/docs/regression-matrix/ws9-12.md +266 -0
- package/docs/sdk.md +102 -52
- package/package.json +183 -52
- package/src/accepts.ts +91 -33
- package/src/body-kind.ts +67 -0
- package/src/body-limit.ts +102 -87
- package/src/build/index.ts +104 -54
- package/src/cli-args.ts +123 -0
- package/src/cli-go/auth.go +12 -1
- package/src/cli-go/config.go +29 -2
- package/src/cli-go/errors.go +28 -10
- package/src/cli-go/multipart.go +51 -27
- package/src/cli-go/output.go +58 -4
- package/src/cli-go/root.go +1 -1
- package/src/cli-go/version.go +2 -2
- package/src/cli.ts +154 -148
- package/src/client/error.ts +56 -1
- package/src/client/http.ts +479 -256
- package/src/client/index.ts +55 -17
- package/src/client/path.ts +169 -0
- package/src/client/redirect-policy.ts +19 -0
- package/src/client/sdk.ts +180 -101
- package/src/client/sse.ts +92 -66
- package/src/client/ws.ts +67 -31
- package/src/client-go/errors.go +41 -12
- package/src/client-go/export.go +44 -0
- package/src/client-go/invalidation.go +52 -54
- package/src/client-go/nullable.go +62 -0
- package/src/client-go/realtime.go +147 -110
- package/src/client-go/runtime.go +646 -88
- package/src/client-go/sse.go +104 -94
- package/src/client-go/transport.go +67 -27
- package/src/client-go/ws.go +49 -25
- package/src/client-info.ts +79 -0
- package/src/client-mcp/server.ts +133 -3
- package/src/client-python/_invalidation.py +207 -291
- package/src/client-python/_realtime.py +63 -40
- package/src/client-python/_runtime.py +501 -119
- package/src/client-python/_sse.py +130 -74
- package/src/client-python/_transport.py +37 -9
- package/src/client-python/_ws.py +50 -22
- package/src/client-rust/errors.rs +21 -1
- package/src/client-rust/invalidation.rs +202 -231
- package/src/client-rust/invalidation_sync.rs +16 -229
- package/src/client-rust/nullable.rs +17 -0
- package/src/client-rust/realtime.rs +217 -217
- package/src/client-rust/runtime.rs +602 -177
- package/src/client-rust/runtime_sync.rs +169 -145
- package/src/client-rust/sse.rs +142 -121
- package/src/client-rust/ws.rs +61 -37
- package/src/codegen-go-cli.ts +607 -728
- package/src/codegen-go.ts +710 -770
- package/src/codegen-ir.ts +381 -75
- package/src/codegen-lang.ts +517 -0
- package/src/codegen-load.ts +150 -0
- package/src/codegen-mcp.ts +207 -108
- package/src/codegen-python.ts +684 -816
- package/src/codegen-route-tree-intern.ts +51 -25
- package/src/codegen-rust.ts +946 -1240
- package/src/codegen-sanitize.ts +0 -4
- package/src/codegen-schema-naming.ts +19 -6
- package/src/codegen-sdk-model.ts +228 -0
- package/src/codegen.ts +1488 -1140
- package/src/context.ts +130 -11
- package/src/cookie-sign.ts +85 -16
- package/src/cookie.ts +66 -11
- package/src/cors.ts +55 -54
- package/src/crypto.ts +27 -5
- package/src/csrf.ts +57 -25
- package/src/curl-logger.ts +155 -114
- package/src/dict.ts +12 -0
- package/src/error.ts +4 -2
- package/src/etag.ts +58 -34
- package/src/feature-detect.ts +147 -0
- package/src/feature-slots.ts +70 -0
- package/src/fetch-request.ts +13 -0
- package/src/gen-process.ts +42 -0
- package/src/gen-write.ts +127 -0
- package/src/glob.ts +109 -0
- package/src/go-type-emitter.ts +406 -155
- package/src/honey-response.ts +36 -9
- package/src/i18n-slot.ts +10 -0
- package/src/i18n.ts +98 -23
- package/src/index.ts +1893 -1761
- package/src/init.ts +40 -28
- package/src/invalidate-check.ts +42 -4
- package/src/invoke-user.ts +95 -0
- package/src/ip-restrict.ts +47 -161
- package/src/ip.ts +194 -0
- package/src/logger.ts +65 -36
- package/src/media-type.ts +104 -0
- package/src/meta-spec-merge.ts +80 -0
- package/src/meta-spec.ts +0 -0
- package/src/middleware.ts +112 -12
- package/src/node-request.ts +242 -52
- package/src/node.ts +318 -75
- package/src/openapi/collect.ts +19 -44
- package/src/openapi/docs-page.ts +89 -0
- package/src/openapi/document.ts +503 -224
- package/src/openapi/json-schema-slot.ts +40 -0
- package/src/openapi/register.ts +7 -2
- package/src/openapi/scalar.ts +11 -10
- package/src/openapi/serve.ts +39 -0
- package/src/openapi/spec-factory.ts +50 -1
- package/src/openapi/spec.ts +53 -30
- package/src/openapi/swagger.ts +12 -11
- package/src/pattern.ts +245 -0
- package/src/peer.ts +53 -0
- package/src/plugin.ts +270 -185
- package/src/powered-by.ts +2 -2
- package/src/pretty-json.ts +25 -9
- package/src/producer-stream.ts +296 -0
- package/src/proxy.ts +271 -55
- package/src/python-type-emitter.ts +68 -56
- package/src/realtime/bus.ts +56 -9
- package/src/realtime/register.ts +13 -0
- package/src/realtime/route.ts +129 -80
- package/src/realtime/server.ts +298 -0
- package/src/request-id.ts +13 -3
- package/src/request-limits.ts +2 -0
- package/src/request-path.ts +165 -0
- package/src/request-to-curl.ts +28 -7
- package/src/response.ts +143 -103
- package/src/rust-type-emitter.ts +265 -170
- package/src/secure-headers.ts +8 -4
- package/src/serve-register.ts +4 -0
- package/src/serve-slot.ts +38 -0
- package/src/serve.ts +113 -25
- package/src/server-timing.ts +11 -7
- package/src/static.ts +85 -32
- package/src/telemetry/otel.ts +29 -7
- package/src/testing.ts +76 -14
- package/src/timeout.ts +15 -7
- package/src/tree.ts +405 -333
- package/src/trust.ts +117 -0
- package/src/ts-type-emitter.ts +18 -12
- package/src/type-emitter.ts +227 -89
- package/src/type-extractor.ts +562 -424
- package/src/types.ts +8 -0
- package/src/validation.ts +221 -96
- package/src/with-headers.ts +45 -0
- package/src/ws/bun.ts +53 -15
- package/src/ws/cloudflare.ts +81 -19
- package/src/ws/deno.ts +124 -36
- package/src/ws/node.ts +173 -79
- package/src/ws/session.ts +73 -0
- package/src/ws/shared.ts +140 -0
- package/src/ws-origin.ts +53 -0
- package/src/yaml.ts +45 -22
- package/dist/client-mcp/server.d.ts +0 -10
- package/dist/client-mcp/server.d.ts.map +0 -1
- package/dist/client-mcp/types.d.ts +0 -16
- package/dist/client-mcp/types.d.ts.map +0 -1
- package/dist/cloudflare/realtime.d.ts +0 -30
- package/dist/cloudflare/realtime.d.ts.map +0 -1
- package/dist/realtime/buffer.d.ts +0 -18
- package/dist/realtime/buffer.d.ts.map +0 -1
- package/dist/realtime/longpoll.d.ts +0 -23
- package/dist/realtime/longpoll.d.ts.map +0 -1
- package/dist/realtime/protocol.d.ts +0 -50
- package/dist/realtime/protocol.d.ts.map +0 -1
- package/dist/realtime/runtime.d.ts +0 -74
- package/dist/realtime/runtime.d.ts.map +0 -1
- package/src/cloudflare/realtime.ts +0 -234
- package/src/realtime/buffer.ts +0 -101
- package/src/realtime/longpoll.ts +0 -148
- package/src/realtime/protocol.ts +0 -128
- package/src/realtime/runtime.ts +0 -427
package/docs/sdk.md
CHANGED
|
@@ -92,7 +92,7 @@ client := sdk.NewClient(sdk.Config{
|
|
|
92
92
|
OnRequest: []func(*sdk.RequestContext) error{addTrace, addApp},
|
|
93
93
|
OnResponse: []func(*sdk.ResponseContext) error{inspect5xx},
|
|
94
94
|
OnLog: func(e sdk.LogEntry) { fmt.Println(e.Event, e.Operation, e.DurationMs, e.Status) },
|
|
95
|
-
Invalidation: sdk.InvalidationConfig{StaleTime:
|
|
95
|
+
Invalidation: &sdk.InvalidationConfig{StaleTime: 5000}, // milliseconds
|
|
96
96
|
Timeout: 10 * time.Second,
|
|
97
97
|
})
|
|
98
98
|
```
|
|
@@ -101,11 +101,11 @@ client := sdk.NewClient(sdk.Config{
|
|
|
101
101
|
let client = Client::new(ClientConfig {
|
|
102
102
|
base_url,
|
|
103
103
|
bearer_token: Some("expired-token".into()),
|
|
104
|
-
on_auth_expired: Some(Arc::new(|| Box::pin(async { Ok(
|
|
104
|
+
on_auth_expired: Some(Arc::new(|| Box::pin(async { Ok("valid-token".to_string()) }))),
|
|
105
105
|
on_log: Some(Arc::new(|e: LogEntry| println!("{} {} {}", e.event, e.operation, e.duration_ms))),
|
|
106
106
|
on_request: vec![trace_hook, app_hook],
|
|
107
107
|
on_response: vec![inspect_hook],
|
|
108
|
-
invalidation: InvalidationConfig {
|
|
108
|
+
invalidation: Some(InvalidationConfig { stale_time: 5_000, ..Default::default() }),
|
|
109
109
|
timeout: Some(Duration::from_secs(10)),
|
|
110
110
|
..Default::default()
|
|
111
111
|
});
|
|
@@ -121,7 +121,7 @@ console.log(user.id, user.name)
|
|
|
121
121
|
```
|
|
122
122
|
|
|
123
123
|
```py
|
|
124
|
-
user = await sdk.
|
|
124
|
+
user = await sdk.create_user(body={"name": "Alice", "email": "a@b.com"})
|
|
125
125
|
print(user["id"], user["name"])
|
|
126
126
|
```
|
|
127
127
|
|
|
@@ -162,7 +162,7 @@ try {
|
|
|
162
162
|
|
|
163
163
|
```py
|
|
164
164
|
try:
|
|
165
|
-
await sdk.
|
|
165
|
+
await sdk.create_user(body=input)
|
|
166
166
|
except BadRequestError as e:
|
|
167
167
|
print("400", e.status)
|
|
168
168
|
except UnauthorizedError:
|
|
@@ -223,7 +223,7 @@ try {
|
|
|
223
223
|
|
|
224
224
|
```py
|
|
225
225
|
try:
|
|
226
|
-
await sdk.
|
|
226
|
+
await sdk.create_user(body=bad)
|
|
227
227
|
except BadRequestError as e:
|
|
228
228
|
print("400 data:", e.data, "body:", e.body)
|
|
229
229
|
```
|
|
@@ -264,7 +264,7 @@ OnAuthExpired: func(ctx context.Context) (string, error) {
|
|
|
264
264
|
|
|
265
265
|
```rust
|
|
266
266
|
on_auth_expired: Some(Arc::new(|| Box::pin(async {
|
|
267
|
-
Ok(
|
|
267
|
+
Ok("valid-token".to_string()) // an empty string gives up and returns the 401
|
|
268
268
|
}))),
|
|
269
269
|
```
|
|
270
270
|
|
|
@@ -295,7 +295,7 @@ except asyncio.CancelledError:
|
|
|
295
295
|
```go
|
|
296
296
|
cancelCtx, cancel := context.WithTimeout(ctx, 25*time.Millisecond)
|
|
297
297
|
defer cancel()
|
|
298
|
-
_, err := client.Slow(cancelCtx, &sdk.SlowOpts{Ms: 500})
|
|
298
|
+
_, err := client.Slow(cancelCtx, &sdk.SlowOpts{Ms: ptr(int64(500))})
|
|
299
299
|
if err != nil {
|
|
300
300
|
fmt.Println("cancelled:", err)
|
|
301
301
|
}
|
|
@@ -326,7 +326,10 @@ await sdk.slow(ms=200, timeout=0.05)
|
|
|
326
326
|
```
|
|
327
327
|
|
|
328
328
|
```go
|
|
329
|
-
|
|
329
|
+
// Go's per-call timeout is a context deadline; Config.Timeout (default 30s) applies to every call
|
|
330
|
+
slowCtx, cancel := context.WithTimeout(ctx, 50*time.Millisecond)
|
|
331
|
+
defer cancel()
|
|
332
|
+
_, err := client.Slow(slowCtx, &sdk.SlowOpts{Ms: ptr(int64(200))})
|
|
330
333
|
```
|
|
331
334
|
|
|
332
335
|
```rust
|
|
@@ -353,7 +356,7 @@ await sdk.getUser({
|
|
|
353
356
|
```
|
|
354
357
|
|
|
355
358
|
```py
|
|
356
|
-
await sdk.
|
|
359
|
+
await sdk.get_user("u1", headers={"X-Both": "call-wins"})
|
|
357
360
|
```
|
|
358
361
|
|
|
359
362
|
```go
|
|
@@ -464,7 +467,7 @@ console.log("users/u1 stale?", stale)
|
|
|
464
467
|
```
|
|
465
468
|
|
|
466
469
|
```py
|
|
467
|
-
await sdk.
|
|
470
|
+
await sdk.update_user("u1", body={"name": "Alice2"})
|
|
468
471
|
print("users/u1 stale?", await sdk.is_stale("GET", "/users/u1"))
|
|
469
472
|
```
|
|
470
473
|
|
|
@@ -496,26 +499,28 @@ for await (const ev of sdk.streamEvents()) {
|
|
|
496
499
|
```
|
|
497
500
|
|
|
498
501
|
```py
|
|
499
|
-
async for ev in sdk.
|
|
502
|
+
async for ev in sdk.stream_events():
|
|
500
503
|
print("sse event:", ev)
|
|
501
504
|
break
|
|
502
505
|
```
|
|
503
506
|
|
|
504
507
|
```go
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
fmt.Println("sse
|
|
508
|
+
// an iter.Seq2; breaking out of the loop closes the stream
|
|
509
|
+
for ev, err := range client.StreamEvents(ctx, nil) {
|
|
510
|
+
if err != nil {
|
|
511
|
+
fmt.Println("sse error:", err)
|
|
509
512
|
break
|
|
510
513
|
}
|
|
511
|
-
|
|
514
|
+
fmt.Println("sse event:", ev.Data)
|
|
515
|
+
break
|
|
512
516
|
}
|
|
513
517
|
```
|
|
514
518
|
|
|
515
519
|
```rust
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
520
|
+
// a Stream: the call itself is not awaited
|
|
521
|
+
let mut sse = std::pin::pin!(client.stream_events(&StreamEventsOpts::default()));
|
|
522
|
+
if let Some(Ok(ev)) = sse.next().await {
|
|
523
|
+
println!("sse event: {}", ev.data);
|
|
519
524
|
}
|
|
520
525
|
```
|
|
521
526
|
|
|
@@ -536,7 +541,7 @@ ws.send("hello")
|
|
|
536
541
|
```
|
|
537
542
|
|
|
538
543
|
```py
|
|
539
|
-
async with sdk.
|
|
544
|
+
async with sdk.connect_ws() as ws:
|
|
540
545
|
await ws.send("hello")
|
|
541
546
|
async for msg in ws:
|
|
542
547
|
print("ws recv:", msg)
|
|
@@ -547,25 +552,26 @@ async with sdk.connectWs() as ws:
|
|
|
547
552
|
```go
|
|
548
553
|
ws, err := client.ConnectWs(ctx, nil)
|
|
549
554
|
if err == nil {
|
|
550
|
-
_ = ws.Send("hello")
|
|
551
|
-
msg, _ := ws.
|
|
552
|
-
fmt.Println("ws recv:", msg)
|
|
553
|
-
_ = ws.Close(
|
|
555
|
+
_ = ws.Send(ctx, "hello")
|
|
556
|
+
msg, _ := ws.Read(ctx)
|
|
557
|
+
fmt.Println("ws recv:", string(msg))
|
|
558
|
+
_ = ws.Close(sdk.WSStatusNormalClosure, "done")
|
|
554
559
|
}
|
|
555
560
|
```
|
|
556
561
|
|
|
557
562
|
```rust
|
|
558
563
|
let mut ws = client.connect_ws(&ConnectWsOpts::default()).await?;
|
|
559
|
-
ws.
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
}
|
|
564
|
+
ws.send_text("hello").await?;
|
|
565
|
+
let msg = ws.read().await?;
|
|
566
|
+
println!("ws recv: {}", String::from_utf8_lossy(&msg));
|
|
563
567
|
ws.close(1000, "done").await?;
|
|
564
568
|
```
|
|
565
569
|
|
|
566
570
|
### §14 — Realtime with custom adapter
|
|
567
571
|
|
|
568
|
-
`x-realtime: true` opens a `ResumableConnection` with a pluggable `TransportAdapter`,
|
|
572
|
+
`x-realtime: true` opens a `ResumableConnection` with a pluggable `TransportAdapter`, a fallback chain (`[ws, sse, longpoll]` by default), and proven-transport memoization. The generated method always uses the default chain; to reorder, drop, or inject custom transports, construct the connection directly with your own list (as below). The config's headers and auth reach every transport. A dropped connection reconnects with exponential backoff and jitter (capped at 30 s; default 5 consecutive attempts, 1 s first delay), and a message resets the count.
|
|
573
|
+
|
|
574
|
+
Not implemented yet: the resume protocol (`ready` frames, resume tokens, ping/liveness, replay). Honey's shipped realtime server is a topic bus over WebSocket; the SSE and long-poll transports only work against servers that speak them.
|
|
569
575
|
|
|
570
576
|
```ts
|
|
571
577
|
function makeCustomAdapter(): TransportAdapter {
|
|
@@ -619,39 +625,37 @@ await rc.close()
|
|
|
619
625
|
```
|
|
620
626
|
|
|
621
627
|
```go
|
|
622
|
-
|
|
623
|
-
|
|
628
|
+
// the generated method (client.ConnectRealtime) uses the default chain;
|
|
629
|
+
// NewResumableConnection takes a custom one
|
|
630
|
+
rc := sdk.NewResumableConnection(baseURL+"/rt", []sdk.Transport{&tickTransport{}}, &sdk.TransportOpts{
|
|
624
631
|
MaxReconnectAttempts: 5,
|
|
625
632
|
ReconnectDelayMs: 100,
|
|
626
633
|
})
|
|
627
|
-
if err == nil {
|
|
634
|
+
if err := rc.Connect(ctx); err == nil {
|
|
628
635
|
for ev := range rc.Events() {
|
|
629
636
|
fmt.Println("rt event:", ev)
|
|
630
637
|
break
|
|
631
638
|
}
|
|
632
|
-
rc.Close()
|
|
639
|
+
_ = rc.Close()
|
|
633
640
|
}
|
|
634
641
|
```
|
|
635
642
|
|
|
636
643
|
```rust
|
|
637
|
-
|
|
638
|
-
let mut rc =
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
println!("rt event: {:?}", ev);
|
|
648
|
-
}
|
|
649
|
-
rc.close().await;
|
|
644
|
+
// the generated method uses the default chain; ResumableConnection::connect takes a custom one
|
|
645
|
+
let mut rc = ResumableConnection::<serde_json::Value, serde_json::Value>::connect(
|
|
646
|
+
format!("{}/rt", base_url),
|
|
647
|
+
ResumableConnectionOpts { max_reconnect_attempts: Some(5), reconnect_delay_ms: Some(100), ..Default::default() },
|
|
648
|
+
vec![Box::new(TickAdapter)],
|
|
649
|
+
)
|
|
650
|
+
.await?;
|
|
651
|
+
let ev = rc.recv().await?;
|
|
652
|
+
println!("rt event: {:?}", ev);
|
|
653
|
+
rc.close().await?;
|
|
650
654
|
```
|
|
651
655
|
|
|
652
656
|
### §15 — Streaming upload
|
|
653
657
|
|
|
654
|
-
|
|
658
|
+
`application/octet-stream` bodies flow as a stream: the SDK pipes the source into the HTTP client without buffering (critical on memory-bounded runtimes like CF Workers), and does not retry them after an auth refresh. Multipart and urlencoded bodies are supported in all four languages: TS takes a `FormData`/object, Python a dict whose file parts are bytes, a file object or `(filename, content[, content_type])`, Go a generated `<Op>Body` struct with `sdk.FilePart` fields (read into memory so the request can be retried), Rust a `reqwest::multipart::Form`.
|
|
655
659
|
|
|
656
660
|
```ts
|
|
657
661
|
const stream = new ReadableStream<Uint8Array>({
|
|
@@ -674,7 +678,7 @@ async def gen() -> AsyncIterator[bytes]:
|
|
|
674
678
|
for off in range(0, TOTAL, CHUNK):
|
|
675
679
|
yield buf[off:off + CHUNK]
|
|
676
680
|
|
|
677
|
-
uploaded = await sdk.
|
|
681
|
+
uploaded = await sdk.upload_blob(gen())
|
|
678
682
|
print("uploaded:", uploaded["size"], uploaded["hash"])
|
|
679
683
|
```
|
|
680
684
|
|
|
@@ -703,9 +707,9 @@ const viaHeader = await sdk.idempotentCreate({ headers: { "Idempotency-Key": "he
|
|
|
703
707
|
```
|
|
704
708
|
|
|
705
709
|
```py
|
|
706
|
-
auto = await sdk.
|
|
707
|
-
explicit = await sdk.
|
|
708
|
-
via_header = await sdk.
|
|
710
|
+
auto = await sdk.idempotent_create()
|
|
711
|
+
explicit = await sdk.idempotent_create(idempotency_key="user-supplied-123")
|
|
712
|
+
via_header = await sdk.idempotent_create(headers={"Idempotency-Key": "header-wins-456"})
|
|
709
713
|
```
|
|
710
714
|
|
|
711
715
|
```go
|
|
@@ -732,6 +736,52 @@ let via_header = client
|
|
|
732
736
|
.await?;
|
|
733
737
|
```
|
|
734
738
|
|
|
739
|
+
## Runtime behavior
|
|
740
|
+
|
|
741
|
+
The Go, Python and Rust runtimes follow one behavior spec. The shared vectors in
|
|
742
|
+
`tests/conformance/vectors/` (URL building, SSE) are run by every runtime, and one operation
|
|
743
|
+
is sent by each generated SDK to the same capture server and compared byte for byte
|
|
744
|
+
(`tests/integration/sdk-harness/polyglot-conformance.test.ts`).
|
|
745
|
+
|
|
746
|
+
- **Path params.** Templates accept `{name}` anywhere in a segment, `:name` / `:name?` for a
|
|
747
|
+
whole segment and a trailing `*name`. Values are encoded like `encodeURIComponent`. `""`,
|
|
748
|
+
`.` and `..` are rejected before sending (`PathParamError` in Go and Python, `Error::Other`
|
|
749
|
+
in Rust), so a value can never retarget a request to a parent resource or another host.
|
|
750
|
+
- **Base URL.** The base path and base query are kept: `https://host/v1` + `/users` is
|
|
751
|
+
`https://host/v1/users`.
|
|
752
|
+
- **Query.** Encoded like `URLSearchParams` (space is `+`). Arrays repeat the key, `null`
|
|
753
|
+
and unset optionals are omitted, booleans are `true`/`false`, numbers use JavaScript's
|
|
754
|
+
formatting (`100`, `1e+21`).
|
|
755
|
+
- **Headers.** Config headers, then per-call headers, then auth; merged case-insensitively,
|
|
756
|
+
so exactly one of each is sent.
|
|
757
|
+
- **Timeouts.** The config timeout (default 30 s) bounds a whole regular request including
|
|
758
|
+
the body. SSE, WebSocket and realtime streams are not bounded by it.
|
|
759
|
+
- **Redirects.** The default HTTP client follows redirects only to the same origin; any other
|
|
760
|
+
redirect is returned as an error, so custom auth headers never leave the origin.
|
|
761
|
+
- **Auth refresh.** A 401 calls `onAuthExpired` once; concurrent 401s share one refresh; the
|
|
762
|
+
new token is kept for later calls; an empty token (or `None`) gives up. Streamed bodies
|
|
763
|
+
are not retried.
|
|
764
|
+
- **Errors.** Every non-2xx (3xx included) is a typed error carrying status, raw body and
|
|
765
|
+
parsed data. Messages prefer the body's `message` field, drop control characters and are
|
|
766
|
+
capped at 512 characters.
|
|
767
|
+
- **SSE.** WHATWG parsing: CR, LF and CRLF line endings (U+2028 is data), one leading space
|
|
768
|
+
stripped, the id is sticky, `retry` needs digits, a final event without its blank line is
|
|
769
|
+
discarded, lines are capped at 1 MiB.
|
|
770
|
+
- **Operations without `operationId`** get a derived name (`GET /users/{id}` → `getUsersById`)
|
|
771
|
+
in every SDK, the TypeScript one and MCP tools included, instead of being dropped.
|
|
772
|
+
- **Optional nullable fields** are tri-state, so "leave it", "clear it" and "set it" are three
|
|
773
|
+
different requests:
|
|
774
|
+
|
|
775
|
+
| | absent | `null` | value |
|
|
776
|
+
| ------------------------------ | ------------ | ----------------- | --------------- |
|
|
777
|
+
| TypeScript | omit the key | `null` | `v` |
|
|
778
|
+
| Python (`TypedDict`) | omit the key | `None` | `v` |
|
|
779
|
+
| Go (`Nullable[T]`, `omitzero`) | zero value | `sdk.NullOf[T]()` | `sdk.Some(v)` |
|
|
780
|
+
| Rust (`Option<Option<T>>`) | `None` | `Some(None)` | `Some(Some(v))` |
|
|
781
|
+
|
|
782
|
+
Decoding keeps the distinction (`IsNull()` / `Get()` in Go). A required array or map left
|
|
783
|
+
empty is sent as `[]` / `{}`, never `null`.
|
|
784
|
+
|
|
735
785
|
## Links
|
|
736
786
|
|
|
737
787
|
- **End-to-end examples** — full per-lang files with every capability §1–16 in context:
|