@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
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
// Code generated by honey. DO NOT EDIT.
|
|
2
|
+
|
|
3
|
+
package sdk
|
|
4
|
+
|
|
5
|
+
import (
|
|
6
|
+
"context"
|
|
7
|
+
"encoding/json"
|
|
8
|
+
"errors"
|
|
9
|
+
"sync"
|
|
10
|
+
|
|
11
|
+
"nhooyr.io/websocket"
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
// WSStatusNormalClosure is the normal close code (1000).
|
|
15
|
+
const WSStatusNormalClosure = websocket.StatusNormalClosure
|
|
16
|
+
|
|
17
|
+
// WSStatusGoingAway is the going away close code (1001).
|
|
18
|
+
const WSStatusGoingAway = websocket.StatusGoingAway
|
|
19
|
+
|
|
20
|
+
// WSStatusProtocolError is the protocol error close code (1002).
|
|
21
|
+
const WSStatusProtocolError = websocket.StatusProtocolError
|
|
22
|
+
|
|
23
|
+
// defaultWSReadLimit replaces nhooyr's 32 KiB default, which closes the
|
|
24
|
+
// connection on any larger frame.
|
|
25
|
+
const defaultWSReadLimit = 16 << 20
|
|
26
|
+
|
|
27
|
+
// TypedWebSocket wraps a nhooyr.io/websocket connection with an event fanout
|
|
28
|
+
// system that mirrors the TS client's .on() escape hatch.
|
|
29
|
+
type TypedWebSocket struct {
|
|
30
|
+
conn *websocket.Conn
|
|
31
|
+
mu sync.Mutex
|
|
32
|
+
handlers map[string][]func(data []byte)
|
|
33
|
+
closed bool
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// newTypedWebSocket constructs a TypedWebSocket from an already-dialled conn.
|
|
37
|
+
func newTypedWebSocket(conn *websocket.Conn) *TypedWebSocket {
|
|
38
|
+
conn.SetReadLimit(defaultWSReadLimit)
|
|
39
|
+
return &TypedWebSocket{
|
|
40
|
+
conn: conn,
|
|
41
|
+
handlers: make(map[string][]func(data []byte)),
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// SetReadLimit sets the largest inbound message, in bytes (default 16 MiB).
|
|
46
|
+
func (w *TypedWebSocket) SetReadLimit(n int64) {
|
|
47
|
+
w.conn.SetReadLimit(n)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Send serialises data to JSON when it is a struct or map, and passes []byte
|
|
51
|
+
// (binary frame) and string (text frame) through as-is.
|
|
52
|
+
func (w *TypedWebSocket) Send(ctx context.Context, data interface{}) error {
|
|
53
|
+
switch v := data.(type) {
|
|
54
|
+
case []byte:
|
|
55
|
+
return w.conn.Write(ctx, websocket.MessageBinary, v)
|
|
56
|
+
case string:
|
|
57
|
+
return w.conn.Write(ctx, websocket.MessageText, []byte(v))
|
|
58
|
+
default:
|
|
59
|
+
encoded, err := json.Marshal(v)
|
|
60
|
+
if err != nil {
|
|
61
|
+
return err
|
|
62
|
+
}
|
|
63
|
+
return w.conn.Write(ctx, websocket.MessageText, encoded)
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Close sends a WebSocket close frame with the given status code and reason.
|
|
68
|
+
// A reason over 123 bytes is truncated to fit the frame.
|
|
69
|
+
func (w *TypedWebSocket) Close(code websocket.StatusCode, reason string) error {
|
|
70
|
+
if len(reason) > 123 {
|
|
71
|
+
reason = reason[:123]
|
|
72
|
+
}
|
|
73
|
+
err := w.conn.Close(code, reason)
|
|
74
|
+
w.fireClose(int(code), reason)
|
|
75
|
+
return err
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Read reads the next message from the connection. On a close frame it fires
|
|
79
|
+
// "close" handlers (data is the close reason); on any other failure it fires
|
|
80
|
+
// "error" handlers (data is the error text).
|
|
81
|
+
func (w *TypedWebSocket) Read(ctx context.Context) ([]byte, error) {
|
|
82
|
+
_, msg, err := w.conn.Read(ctx)
|
|
83
|
+
if err != nil {
|
|
84
|
+
var ce websocket.CloseError
|
|
85
|
+
if errors.As(err, &ce) {
|
|
86
|
+
w.fireClose(int(ce.Code), ce.Reason)
|
|
87
|
+
} else {
|
|
88
|
+
w.fanout("error", []byte(err.Error()))
|
|
89
|
+
}
|
|
90
|
+
return nil, err
|
|
91
|
+
}
|
|
92
|
+
w.fanout("message", msg)
|
|
93
|
+
return msg, nil
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// On registers an event handler. Supported events: "message", "close", "error".
|
|
97
|
+
// The handler receives the raw message bytes; callers unmarshal as needed.
|
|
98
|
+
// This is an escape hatch — prefer ranging over Read for typed message dispatch.
|
|
99
|
+
func (w *TypedWebSocket) On(event string, handler func(data []byte)) {
|
|
100
|
+
w.mu.Lock()
|
|
101
|
+
defer w.mu.Unlock()
|
|
102
|
+
w.handlers[event] = append(w.handlers[event], handler)
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
func (w *TypedWebSocket) fireClose(code int, reason string) {
|
|
106
|
+
w.mu.Lock()
|
|
107
|
+
if w.closed {
|
|
108
|
+
w.mu.Unlock()
|
|
109
|
+
return
|
|
110
|
+
}
|
|
111
|
+
w.closed = true
|
|
112
|
+
w.mu.Unlock()
|
|
113
|
+
_ = code
|
|
114
|
+
w.fanout("close", []byte(reason))
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
func (w *TypedWebSocket) fanout(event string, data []byte) {
|
|
118
|
+
w.mu.Lock()
|
|
119
|
+
handlers := append([]func([]byte){}, w.handlers[event]...)
|
|
120
|
+
w.mu.Unlock()
|
|
121
|
+
for _, h := range handlers {
|
|
122
|
+
h(data)
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// DialOptions exposes nhooyr.io/websocket DialOptions for consumer configuration.
|
|
127
|
+
// Set Subprotocols here before Dial.
|
|
128
|
+
type DialOptions = websocket.DialOptions
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Who sent a request, and over what, as the core sees it without `app.trustProxy()`: the peer
|
|
3
|
+
* the runtime reports is the client, and forwarding headers are client-controlled text. Trusting
|
|
4
|
+
* reverse proxies (hop counts, CIDR lists) lives in `trust.ts`, which `trustProxy()` loads.
|
|
5
|
+
*/
|
|
6
|
+
export type ClientInfo = {
|
|
7
|
+
/** Canonical client address, or `null` when it is unknown or a trusted header holds garbage. */
|
|
8
|
+
ip: string | null;
|
|
9
|
+
/** Host the client asked for (`host[:port]`), or `null`. */
|
|
10
|
+
host: string | null;
|
|
11
|
+
protocol: "http" | "https";
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* The app's compiled `trustProxy()` setting. Anything but `off` carries its own resolver, so
|
|
15
|
+
* the core never imports the hop and range logic.
|
|
16
|
+
*/
|
|
17
|
+
export type TrustSetting = {
|
|
18
|
+
readonly kind: "off";
|
|
19
|
+
} | {
|
|
20
|
+
readonly kind: "hops" | "ranges";
|
|
21
|
+
readonly resolve: (req: Request, peer: string | null) => ClientInfo;
|
|
22
|
+
};
|
|
23
|
+
export declare const TRUST_OFF: TrustSetting;
|
|
24
|
+
/** `host[:port]` as RFC 9110 allows it in `Host`; nothing that could change a URL's meaning. */
|
|
25
|
+
export declare function isValidHost(host: string): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Bun before 1.4 builds `request.url` by concatenating `Host` and the request target, so a
|
|
28
|
+
* `Host: x/admin?` picks the routed path. Later versions hand over the target alone.
|
|
29
|
+
*/
|
|
30
|
+
export declare const BUN_URL_FROM_HOST: boolean;
|
|
31
|
+
/** `false` when the request carries a `Host` header that is not `host[:port]`. */
|
|
32
|
+
export declare function hasValidHost(req: Request): boolean;
|
|
33
|
+
/** The client as the connection shows it: the peer, the URL's host, the transport's scheme. */
|
|
34
|
+
export declare function directClientInfo(req: Request, peer: string | null): ClientInfo;
|
|
35
|
+
export declare function resolveClient(trust: TrustSetting, req: Request, peer: string | null): ClientInfo;
|
|
36
|
+
//# sourceMappingURL=client-info.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-info.d.ts","sourceRoot":"","sources":["../src/client-info.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG;IACxB,gGAAgG;IAChG,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;IACjB,4DAA4D;IAC5D,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAA;CAC1B,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,GACrB;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAA;CAAE,GACxB;IACA,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAA;IAChC,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,UAAU,CAAA;CAClE,CAAA;AAEJ,eAAO,MAAM,SAAS,EAAE,YAA6C,CAAA;AAIrE,gGAAgG;AAChG,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQjD;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,OAK5B,CAAA;AAEJ,kFAAkF;AAClF,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAGlD;AAWD,+FAA+F;AAC/F,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,UAAU,CAM9E;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,UAAU,CAEhG"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { canonicalIp } from "./ip.js";
|
|
2
|
+
export const TRUST_OFF = Object.freeze({ kind: "off" });
|
|
3
|
+
const HOST = /^(?:\[[0-9A-Fa-f:.]+\]|[A-Za-z0-9](?:[A-Za-z0-9.-]*[A-Za-z0-9])?\.?)(?::\d{1,5})?$/;
|
|
4
|
+
/** `host[:port]` as RFC 9110 allows it in `Host`; nothing that could change a URL's meaning. */
|
|
5
|
+
export function isValidHost(host) {
|
|
6
|
+
if (!HOST.test(host))
|
|
7
|
+
return false;
|
|
8
|
+
const colon = host.lastIndexOf(":");
|
|
9
|
+
if (colon !== -1 && host.lastIndexOf("]") < colon) {
|
|
10
|
+
const port = Number(host.slice(colon + 1));
|
|
11
|
+
if (port > 65535)
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Bun before 1.4 builds `request.url` by concatenating `Host` and the request target, so a
|
|
18
|
+
* `Host: x/admin?` picks the routed path. Later versions hand over the target alone.
|
|
19
|
+
*/
|
|
20
|
+
export const BUN_URL_FROM_HOST = (() => {
|
|
21
|
+
const version = globalThis.Bun?.version;
|
|
22
|
+
if (version === undefined)
|
|
23
|
+
return false;
|
|
24
|
+
const [major = 0, minor = 0] = version.split(".").map(Number);
|
|
25
|
+
return major < 1 || (major === 1 && minor < 4);
|
|
26
|
+
})();
|
|
27
|
+
/** `false` when the request carries a `Host` header that is not `host[:port]`. */
|
|
28
|
+
export function hasValidHost(req) {
|
|
29
|
+
const host = req.headers.get("host");
|
|
30
|
+
return host === null || isValidHost(host);
|
|
31
|
+
}
|
|
32
|
+
function hostOfUrl(url) {
|
|
33
|
+
const start = url.indexOf("//");
|
|
34
|
+
if (start === -1)
|
|
35
|
+
return null;
|
|
36
|
+
let end = url.indexOf("/", start + 2);
|
|
37
|
+
if (end === -1)
|
|
38
|
+
end = url.length;
|
|
39
|
+
const host = url.slice(start + 2, end);
|
|
40
|
+
return host === "" ? null : host;
|
|
41
|
+
}
|
|
42
|
+
/** The client as the connection shows it: the peer, the URL's host, the transport's scheme. */
|
|
43
|
+
export function directClientInfo(req, peer) {
|
|
44
|
+
return {
|
|
45
|
+
host: hostOfUrl(req.url),
|
|
46
|
+
ip: peer === null ? null : canonicalIp(peer),
|
|
47
|
+
protocol: req.url.startsWith("https:") ? "https" : "http",
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export function resolveClient(trust, req, peer) {
|
|
51
|
+
return trust.kind === "off" ? directClientInfo(req, peer) : trust.resolve(req, peer);
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=client-info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-info.js","sourceRoot":"","sources":["../src/client-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AA0BrC,MAAM,CAAC,MAAM,SAAS,GAAiB,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;AAErE,MAAM,IAAI,GAAG,oFAAoF,CAAA;AAEjG,gGAAgG;AAChG,MAAM,UAAU,WAAW,CAAC,IAAY;IACvC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAA;IAClC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IACnC,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAA;QAC1C,IAAI,IAAI,GAAG,KAAK;YAAE,OAAO,KAAK,CAAA;IAC/B,CAAC;IACD,OAAO,IAAI,CAAA;AACZ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAY,CAAC,GAAG,EAAE;IAC/C,MAAM,OAAO,GAAI,UAA6C,CAAC,GAAG,EAAE,OAAO,CAAA;IAC3E,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,KAAK,CAAA;IACvC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAC7D,OAAO,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAA;AAC/C,CAAC,CAAC,EAAE,CAAA;AAEJ,kFAAkF;AAClF,MAAM,UAAU,YAAY,CAAC,GAAY;IACxC,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACpC,OAAO,IAAI,KAAK,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,CAAA;AAC1C,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC7B,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/B,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IAC7B,IAAI,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;IACrC,IAAI,GAAG,KAAK,CAAC,CAAC;QAAE,GAAG,GAAG,GAAG,CAAC,MAAM,CAAA;IAChC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,CAAA;IACtC,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;AACjC,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,gBAAgB,CAAC,GAAY,EAAE,IAAmB;IACjE,OAAO;QACN,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;QACxB,EAAE,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;QAC5C,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;KACzD,CAAA;AACF,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAmB,EAAE,GAAY,EAAE,IAAmB;IACnF,OAAO,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;AACrF,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# client-mcp/
|
|
2
|
+
|
|
3
|
+
Static MCP runtime templates. Files `server.ts` + `types.ts` are copied
|
|
4
|
+
verbatim into emitted `@{project}/mcp-server` packages by
|
|
5
|
+
`codegen-mcp.ts` at codegen time via `readFileSync(new URL(..., import.meta.url))`.
|
|
6
|
+
|
|
7
|
+
Changes here propagate to every emitted MCP server on next regen.
|
|
8
|
+
|
|
9
|
+
Do not import from this directory in honey/core runtime code — it only
|
|
10
|
+
exists as a template source for the emitter.
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/* Static MCP stdio runtime — copied verbatim into emitted packages by codegen-mcp.ts.
|
|
2
|
+
* Consumes a Tool[] array + SDK instance. Wires MCP low-level Server class to
|
|
3
|
+
* stdio JSON-RPC. Maps SDK client errors -> { isError: true, content: [...] }.
|
|
4
|
+
*
|
|
5
|
+
* Intentional choice of low-level `Server` over `McpServer`: tool inputSchema is
|
|
6
|
+
* already JSON Schema (emitted from OpenAPI). `McpServer.registerTool` requires
|
|
7
|
+
* zod; switching would mean carrying json-schema-to-zod at runtime for zero gain.
|
|
8
|
+
* `Server` is marked @deprecated but the SDK's own guidance says to use it for
|
|
9
|
+
* advanced/codegen cases — keep until SDK exposes a JSON-Schema-native path. */
|
|
10
|
+
|
|
11
|
+
/* eslint-disable @typescript-eslint/no-deprecated */
|
|
12
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js"
|
|
13
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
|
|
14
|
+
import { CallToolRequestSchema, ListToolsRequestSchema } from "@modelcontextprotocol/sdk/types.js"
|
|
15
|
+
import type { Tool, ToolResult } from "./types.ts"
|
|
16
|
+
|
|
17
|
+
type ServerError = Error & { status?: number; body?: unknown; data?: unknown }
|
|
18
|
+
|
|
19
|
+
/** Per argument group, the keys a tool may forward (`true`: the whole JSON body). */
|
|
20
|
+
export type AllowedArgs = { headers?: string[]; json?: true; params?: string[]; search?: string[] }
|
|
21
|
+
|
|
22
|
+
/* Tool results go into a model's context: cap them. */
|
|
23
|
+
const MAX_RESULT_CHARS = 100_000
|
|
24
|
+
|
|
25
|
+
function errorResult(message: string, extra: Record<string, unknown> = {}): ToolResult {
|
|
26
|
+
return { content: [{ text: JSON.stringify({ message, ...extra }), type: "text" }], isError: true }
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function typeOf(value: unknown): string {
|
|
30
|
+
if (value === null) return "null"
|
|
31
|
+
if (Array.isArray(value)) return "array"
|
|
32
|
+
if (typeof value === "number") return Number.isInteger(value) ? "integer" : "number"
|
|
33
|
+
return typeof value
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function matchesType(value: unknown, type: unknown): boolean {
|
|
37
|
+
if (type === undefined) return true
|
|
38
|
+
const types = Array.isArray(type) ? type : [type]
|
|
39
|
+
const actual = typeOf(value)
|
|
40
|
+
return types.some((t) => t === actual || (t === "number" && actual === "integer"))
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* The subset of JSON Schema that OpenAPI-derived tool schemas use: type, required,
|
|
45
|
+
* properties, items, enum, const, nullable. Enough to reject malformed arguments before
|
|
46
|
+
* they reach the API; the server validates the rest.
|
|
47
|
+
*/
|
|
48
|
+
export function validateArgs(schema: Record<string, unknown>, value: unknown, path = "arguments"): string[] {
|
|
49
|
+
const errors: string[] = []
|
|
50
|
+
if (value === null && schema.nullable === true) return errors
|
|
51
|
+
if (!matchesType(value, schema.type)) {
|
|
52
|
+
errors.push(`${path}: expected ${JSON.stringify(schema.type)}, got ${typeOf(value)}`)
|
|
53
|
+
return errors
|
|
54
|
+
}
|
|
55
|
+
if (Array.isArray(schema.enum) && !schema.enum.some((e) => JSON.stringify(e) === JSON.stringify(value))) {
|
|
56
|
+
errors.push(`${path}: must be one of ${JSON.stringify(schema.enum)}`)
|
|
57
|
+
}
|
|
58
|
+
if ("const" in schema && JSON.stringify(schema.const) !== JSON.stringify(value)) {
|
|
59
|
+
errors.push(`${path}: must be ${JSON.stringify(schema.const)}`)
|
|
60
|
+
}
|
|
61
|
+
if (typeOf(value) === "object") {
|
|
62
|
+
const obj = value as Record<string, unknown>
|
|
63
|
+
const props = (schema.properties ?? {}) as Record<string, Record<string, unknown>>
|
|
64
|
+
for (const key of (schema.required ?? []) as string[]) {
|
|
65
|
+
if (!Object.hasOwn(obj, key) || obj[key] === undefined) errors.push(`${path}.${key}: required`)
|
|
66
|
+
}
|
|
67
|
+
for (const [key, sub] of Object.entries(props)) {
|
|
68
|
+
if (Object.hasOwn(obj, key) && obj[key] !== undefined)
|
|
69
|
+
errors.push(...validateArgs(sub, obj[key], `${path}.${key}`))
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (Array.isArray(value) && schema.items && typeof schema.items === "object") {
|
|
73
|
+
value.forEach((item, i) =>
|
|
74
|
+
errors.push(...validateArgs(schema.items as Record<string, unknown>, item, `${path}[${i}]`)),
|
|
75
|
+
)
|
|
76
|
+
}
|
|
77
|
+
return errors
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function pick(source: unknown, keys: string[]): Record<string, unknown> | undefined {
|
|
81
|
+
if (source === null || typeof source !== "object" || Array.isArray(source)) return undefined
|
|
82
|
+
const out: Record<string, unknown> = {}
|
|
83
|
+
for (const key of keys) {
|
|
84
|
+
if (Object.hasOwn(source, key) && (source as Record<string, unknown>)[key] !== undefined) {
|
|
85
|
+
out[key] = (source as Record<string, unknown>)[key]
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return Object.keys(out).length > 0 ? out : undefined
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function formatResult(result: unknown): ToolResult {
|
|
92
|
+
let text: string
|
|
93
|
+
if (typeof result === "string") text = result
|
|
94
|
+
else if (result instanceof ArrayBuffer || ArrayBuffer.isView(result)) {
|
|
95
|
+
const bytes = result instanceof ArrayBuffer ? result.byteLength : result.byteLength
|
|
96
|
+
text = JSON.stringify({ binary: true, bytes, message: "binary response not shown" })
|
|
97
|
+
} else if (typeof Blob !== "undefined" && result instanceof Blob) {
|
|
98
|
+
text = JSON.stringify({ binary: true, bytes: result.size, message: "binary response not shown", type: result.type })
|
|
99
|
+
} else text = JSON.stringify(result ?? null)
|
|
100
|
+
if (text.length > MAX_RESULT_CHARS) {
|
|
101
|
+
text = `${text.slice(0, MAX_RESULT_CHARS)}\n[truncated: ${text.length} characters, showing ${MAX_RESULT_CHARS}]`
|
|
102
|
+
}
|
|
103
|
+
return { content: [{ text, type: "text" }] }
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Run one tool call: validate `args` against the tool's input schema, forward only the keys
|
|
108
|
+
* the operation declares (never extra headers, cookies or a raw body), refuse path params that
|
|
109
|
+
* would change the request path, and call the SDK method at `segments`.
|
|
110
|
+
*/
|
|
111
|
+
export async function callTool(
|
|
112
|
+
sdk: unknown,
|
|
113
|
+
segments: string[],
|
|
114
|
+
args: Record<string, unknown>,
|
|
115
|
+
inputSchema: Record<string, unknown>,
|
|
116
|
+
allowed: AllowedArgs,
|
|
117
|
+
): Promise<ToolResult> {
|
|
118
|
+
const errors = validateArgs(inputSchema, args ?? {})
|
|
119
|
+
if (errors.length > 0) return errorResult("Invalid tool arguments", { errors: errors.slice(0, 20) })
|
|
120
|
+
|
|
121
|
+
const input: Record<string, unknown> = {}
|
|
122
|
+
for (const group of ["params", "search", "headers"] as const) {
|
|
123
|
+
const keys = allowed[group]
|
|
124
|
+
if (!keys) continue
|
|
125
|
+
const picked = pick(args[group], keys)
|
|
126
|
+
if (picked) input[group] = picked
|
|
127
|
+
}
|
|
128
|
+
if (allowed.json && args.json !== undefined) input.json = args.json
|
|
129
|
+
|
|
130
|
+
const params = input.params as Record<string, unknown> | undefined
|
|
131
|
+
for (const [key, value] of Object.entries(params ?? {})) {
|
|
132
|
+
const text = String(value)
|
|
133
|
+
if (text === "" || text === "." || text === "..") {
|
|
134
|
+
return errorResult(`Invalid path parameter ${JSON.stringify(key)}: ${JSON.stringify(text)}`)
|
|
135
|
+
}
|
|
136
|
+
params![key] = text
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
let method: unknown = sdk
|
|
140
|
+
let owner: unknown = sdk
|
|
141
|
+
for (const seg of segments) {
|
|
142
|
+
owner = method
|
|
143
|
+
method = method !== null && typeof method === "object" ? (method as Record<string, unknown>)[seg] : undefined
|
|
144
|
+
}
|
|
145
|
+
if (typeof method !== "function") return errorResult(`SDK missing method ${segments.join(".")}`)
|
|
146
|
+
return formatResult(await (method as (input: unknown) => Promise<unknown>).call(owner, input))
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
function formatError(err: unknown): ToolResult {
|
|
150
|
+
if (err instanceof Error) {
|
|
151
|
+
const e = err as ServerError
|
|
152
|
+
const status = typeof e.status === "number" ? e.status : 0
|
|
153
|
+
const payload: Record<string, unknown> = {
|
|
154
|
+
message: e.message,
|
|
155
|
+
name: e.name,
|
|
156
|
+
}
|
|
157
|
+
if (status > 0) payload.status = status
|
|
158
|
+
if (e.data !== undefined) payload.data = e.data
|
|
159
|
+
else if (e.body !== undefined) payload.data = e.body
|
|
160
|
+
const text = JSON.stringify(payload)
|
|
161
|
+
return {
|
|
162
|
+
content: [{ text: text.length > MAX_RESULT_CHARS ? `${text.slice(0, MAX_RESULT_CHARS)}…` : text, type: "text" }],
|
|
163
|
+
isError: true,
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return {
|
|
167
|
+
content: [{ text: JSON.stringify({ message: String(err) }), type: "text" }],
|
|
168
|
+
isError: true,
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
export async function createMCPServer(options: {
|
|
173
|
+
tools: Tool[]
|
|
174
|
+
sdk: unknown
|
|
175
|
+
serverInfo: { name: string; version: string }
|
|
176
|
+
}): Promise<void> {
|
|
177
|
+
const { tools, sdk, serverInfo } = options
|
|
178
|
+
|
|
179
|
+
const server = new Server(serverInfo, {
|
|
180
|
+
capabilities: { tools: {} },
|
|
181
|
+
})
|
|
182
|
+
|
|
183
|
+
server.setRequestHandler(ListToolsRequestSchema, () => {
|
|
184
|
+
return {
|
|
185
|
+
tools: tools.map((t) => ({
|
|
186
|
+
description: t.description,
|
|
187
|
+
inputSchema: t.inputSchema,
|
|
188
|
+
name: t.name,
|
|
189
|
+
})),
|
|
190
|
+
}
|
|
191
|
+
})
|
|
192
|
+
|
|
193
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
194
|
+
const { name, arguments: args } = request.params
|
|
195
|
+
const tool = tools.find((t) => t.name === name)
|
|
196
|
+
if (!tool) {
|
|
197
|
+
return {
|
|
198
|
+
content: [{ text: JSON.stringify({ message: `Unknown tool: ${name}` }), type: "text" }],
|
|
199
|
+
isError: true,
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
try {
|
|
203
|
+
return await tool.handler((args ?? {}) as Record<string, unknown>, sdk)
|
|
204
|
+
} catch (err: unknown) {
|
|
205
|
+
return formatError(err)
|
|
206
|
+
}
|
|
207
|
+
})
|
|
208
|
+
|
|
209
|
+
const transport = new StdioServerTransport()
|
|
210
|
+
|
|
211
|
+
/* graceful shutdown on SIGTERM / stdin close — stdio transport closes on stdin EOF,
|
|
212
|
+
* Server.close() flushes pending responses, process.exit(0) per MCP conventions. */
|
|
213
|
+
const shutdown = (): void => {
|
|
214
|
+
void server.close().finally(() => process.exit(0))
|
|
215
|
+
}
|
|
216
|
+
process.on("SIGTERM", shutdown)
|
|
217
|
+
process.on("SIGINT", shutdown)
|
|
218
|
+
process.stdin.on("end", shutdown)
|
|
219
|
+
|
|
220
|
+
await server.connect(transport)
|
|
221
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/* Static MCP runtime types — copied verbatim into emitted packages by codegen-mcp.ts.
|
|
2
|
+
* No @modelcontextprotocol/sdk imports here: keeps type surface decoupled from the
|
|
3
|
+
* SDK so callers (tool authors) only depend on this shared shape. */
|
|
4
|
+
|
|
5
|
+
export type ToolContent = { type: "text"; text: string }
|
|
6
|
+
|
|
7
|
+
export type ToolResult = {
|
|
8
|
+
content: ToolContent[]
|
|
9
|
+
isError?: boolean
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export type ToolHandler = (args: Record<string, unknown>, sdk: unknown) => Promise<ToolResult>
|
|
13
|
+
|
|
14
|
+
export type Tool = {
|
|
15
|
+
name: string
|
|
16
|
+
description?: string
|
|
17
|
+
inputSchema: Record<string, unknown>
|
|
18
|
+
handler: ToolHandler
|
|
19
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
5
|
+
import httpx
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class APIError(Exception):
|
|
9
|
+
"""Base class for all API errors."""
|
|
10
|
+
|
|
11
|
+
status: int
|
|
12
|
+
body: Any
|
|
13
|
+
data: Any
|
|
14
|
+
response: httpx.Response
|
|
15
|
+
message: str
|
|
16
|
+
|
|
17
|
+
def __init__(
|
|
18
|
+
self,
|
|
19
|
+
*,
|
|
20
|
+
status: int,
|
|
21
|
+
body: Any,
|
|
22
|
+
data: Any,
|
|
23
|
+
response: httpx.Response,
|
|
24
|
+
message: str,
|
|
25
|
+
) -> None:
|
|
26
|
+
super().__init__(message)
|
|
27
|
+
self.status = status
|
|
28
|
+
self.body = body
|
|
29
|
+
self.data = data
|
|
30
|
+
self.response = response
|
|
31
|
+
self.message = message
|
|
32
|
+
|
|
33
|
+
def __repr__(self) -> str:
|
|
34
|
+
cls = self.__class__.__name__
|
|
35
|
+
return f"{cls}(status={self.status}, message={self.message!r})"
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class BadRequestError(APIError):
|
|
39
|
+
"""HTTP 400 Bad Request."""
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class UnauthorizedError(APIError):
|
|
43
|
+
"""HTTP 401 Unauthorized."""
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class ForbiddenError(APIError):
|
|
47
|
+
"""HTTP 403 Forbidden."""
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class NotFoundError(APIError):
|
|
51
|
+
"""HTTP 404 Not Found."""
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class ConflictError(APIError):
|
|
55
|
+
"""HTTP 409 Conflict."""
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
class UnprocessableEntityError(APIError):
|
|
59
|
+
"""HTTP 422 Unprocessable Entity."""
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class RateLimitError(APIError):
|
|
63
|
+
"""HTTP 429 Too Many Requests."""
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class InternalServerError(APIError):
|
|
67
|
+
"""HTTP 500 Internal Server Error."""
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
class BadGatewayError(APIError):
|
|
71
|
+
"""HTTP 502 Bad Gateway."""
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
class ServiceUnavailableError(APIError):
|
|
75
|
+
"""HTTP 503 Service Unavailable."""
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
class GatewayTimeoutError(APIError):
|
|
79
|
+
"""HTTP 504 Gateway Timeout."""
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
class APIStatusError(APIError):
|
|
83
|
+
"""Fallback for any 4xx/5xx status not covered by a named subclass."""
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
_STATUS_ERROR_MAP: dict[int, type[APIError]] = {
|
|
87
|
+
400: BadRequestError,
|
|
88
|
+
401: UnauthorizedError,
|
|
89
|
+
403: ForbiddenError,
|
|
90
|
+
404: NotFoundError,
|
|
91
|
+
409: ConflictError,
|
|
92
|
+
422: UnprocessableEntityError,
|
|
93
|
+
429: RateLimitError,
|
|
94
|
+
500: InternalServerError,
|
|
95
|
+
502: BadGatewayError,
|
|
96
|
+
503: ServiceUnavailableError,
|
|
97
|
+
504: GatewayTimeoutError,
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
__all__ = [
|
|
101
|
+
"APIError",
|
|
102
|
+
"APIStatusError",
|
|
103
|
+
"BadGatewayError",
|
|
104
|
+
"BadRequestError",
|
|
105
|
+
"ConflictError",
|
|
106
|
+
"ForbiddenError",
|
|
107
|
+
"GatewayTimeoutError",
|
|
108
|
+
"InternalServerError",
|
|
109
|
+
"NotFoundError",
|
|
110
|
+
"RateLimitError",
|
|
111
|
+
"ServiceUnavailableError",
|
|
112
|
+
"UnauthorizedError",
|
|
113
|
+
"UnprocessableEntityError",
|
|
114
|
+
"_STATUS_ERROR_MAP",
|
|
115
|
+
]
|