effect 4.0.6 → 4.0.7
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/dist/Arbitrary.d.ts +10 -2
- package/dist/Arbitrary.d.ts.map +1 -1
- package/dist/Arbitrary.js +2 -1
- package/dist/Arbitrary.js.map +1 -1
- package/dist/Channel.d.ts.map +1 -1
- package/dist/Channel.js +21 -6
- package/dist/Channel.js.map +1 -1
- package/dist/Data.d.ts +54 -235
- package/dist/Data.d.ts.map +1 -1
- package/dist/Data.js.map +1 -1
- package/dist/Effect.d.ts +1 -1
- package/dist/Effect.js +1 -1
- package/dist/Equal.d.ts.map +1 -1
- package/dist/Equal.js +8 -1
- package/dist/Equal.js.map +1 -1
- package/dist/Exit.d.ts +3 -3
- package/dist/Exit.d.ts.map +1 -1
- package/dist/Exit.js.map +1 -1
- package/dist/Formatter.d.ts.map +1 -1
- package/dist/Formatter.js +27 -13
- package/dist/Formatter.js.map +1 -1
- package/dist/Hash.d.ts.map +1 -1
- package/dist/Hash.js +4 -1
- package/dist/Hash.js.map +1 -1
- package/dist/JsonPatch.js +4 -0
- package/dist/JsonPatch.js.map +1 -1
- package/dist/JsonSchema.d.ts.map +1 -1
- package/dist/JsonSchema.js +13 -40
- package/dist/JsonSchema.js.map +1 -1
- package/dist/Metric.d.ts +3 -3
- package/dist/MutableList.d.ts +5 -2
- package/dist/MutableList.d.ts.map +1 -1
- package/dist/MutableList.js +7 -5
- package/dist/MutableList.js.map +1 -1
- package/dist/MutableRef.d.ts.map +1 -1
- package/dist/MutableRef.js +7 -0
- package/dist/MutableRef.js.map +1 -1
- package/dist/PartitionedSemaphore.d.ts +2 -1
- package/dist/PartitionedSemaphore.d.ts.map +1 -1
- package/dist/PartitionedSemaphore.js +22 -12
- package/dist/PartitionedSemaphore.js.map +1 -1
- package/dist/Pool.d.ts.map +1 -1
- package/dist/Pool.js +77 -27
- package/dist/Pool.js.map +1 -1
- package/dist/PubSub.d.ts.map +1 -1
- package/dist/PubSub.js +5 -6
- package/dist/PubSub.js.map +1 -1
- package/dist/Ref.d.ts.map +1 -1
- package/dist/Ref.js +8 -0
- package/dist/Ref.js.map +1 -1
- package/dist/Schedule.js +1 -1
- package/dist/Schedule.js.map +1 -1
- package/dist/Schema.d.ts +24 -8
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +37 -28
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaAST.d.ts +4 -2
- package/dist/SchemaAST.d.ts.map +1 -1
- package/dist/SchemaAST.js +14 -17
- package/dist/SchemaAST.js.map +1 -1
- package/dist/SchemaParser.d.ts.map +1 -1
- package/dist/SchemaParser.js +48 -22
- package/dist/SchemaParser.js.map +1 -1
- package/dist/SchemaRepresentation.d.ts +19 -10
- package/dist/SchemaRepresentation.d.ts.map +1 -1
- package/dist/SchemaRepresentation.js +23 -13
- package/dist/SchemaRepresentation.js.map +1 -1
- package/dist/SchemaTransformation.d.ts +4 -1
- package/dist/SchemaTransformation.d.ts.map +1 -1
- package/dist/SchemaTransformation.js +9 -2
- package/dist/SchemaTransformation.js.map +1 -1
- package/dist/Semaphore.d.ts.map +1 -1
- package/dist/Semaphore.js +54 -35
- package/dist/Semaphore.js.map +1 -1
- package/dist/Sink.d.ts.map +1 -1
- package/dist/Sink.js +7 -2
- package/dist/Sink.js.map +1 -1
- package/dist/Stream.d.ts.map +1 -1
- package/dist/Stream.js +22 -10
- package/dist/Stream.js.map +1 -1
- package/dist/String.d.ts +3 -0
- package/dist/String.d.ts.map +1 -1
- package/dist/String.js +3 -0
- package/dist/String.js.map +1 -1
- package/dist/Tracer.d.ts +11 -1
- package/dist/Tracer.d.ts.map +1 -1
- package/dist/Tracer.js +6 -1
- package/dist/Tracer.js.map +1 -1
- package/dist/ai/LanguageModel.d.ts.map +1 -1
- package/dist/ai/LanguageModel.js +9 -0
- package/dist/ai/LanguageModel.js.map +1 -1
- package/dist/ai/McpSchema.d.ts +110 -110
- package/dist/ai/McpSchema.d.ts.map +1 -1
- package/dist/ai/McpServer.d.ts.map +1 -1
- package/dist/ai/McpServer.js +21 -15
- package/dist/ai/McpServer.js.map +1 -1
- package/dist/ai/Prompt.d.ts +52 -0
- package/dist/ai/Prompt.d.ts.map +1 -1
- package/dist/ai/Prompt.js +38 -0
- package/dist/ai/Prompt.js.map +1 -1
- package/dist/ai/Response.d.ts +16 -3
- package/dist/ai/Response.d.ts.map +1 -1
- package/dist/ai/Response.js +4 -0
- package/dist/ai/Response.js.map +1 -1
- package/dist/ai/Tool.d.ts +24 -0
- package/dist/ai/Tool.d.ts.map +1 -1
- package/dist/ai/Tool.js +5 -2
- package/dist/ai/Tool.js.map +1 -1
- package/dist/ai/Toolkit.d.ts.map +1 -1
- package/dist/ai/Toolkit.js +8 -1
- package/dist/ai/Toolkit.js.map +1 -1
- package/dist/cli/Argument.d.ts +15 -0
- package/dist/cli/Argument.d.ts.map +1 -1
- package/dist/cli/Argument.js +5 -0
- package/dist/cli/Argument.js.map +1 -1
- package/dist/cli/CliError.d.ts +78 -0
- package/dist/cli/CliError.d.ts.map +1 -1
- package/dist/cli/CliError.js +65 -3
- package/dist/cli/CliError.js.map +1 -1
- package/dist/cli/CliOutput.d.ts +155 -6
- package/dist/cli/CliOutput.d.ts.map +1 -1
- package/dist/cli/CliOutput.js +62 -6
- package/dist/cli/CliOutput.js.map +1 -1
- package/dist/cli/Command.d.ts +24 -16
- package/dist/cli/Command.d.ts.map +1 -1
- package/dist/cli/Command.js +59 -29
- package/dist/cli/Command.js.map +1 -1
- package/dist/cli/Completions.d.ts +58 -0
- package/dist/cli/Completions.d.ts.map +1 -1
- package/dist/cli/Completions.js +49 -9
- package/dist/cli/Completions.js.map +1 -1
- package/dist/cli/Flag.d.ts +15 -0
- package/dist/cli/Flag.d.ts.map +1 -1
- package/dist/cli/Flag.js +5 -0
- package/dist/cli/Flag.js.map +1 -1
- package/dist/cli/GlobalFlag.d.ts.map +1 -1
- package/dist/cli/GlobalFlag.js +15 -7
- package/dist/cli/GlobalFlag.js.map +1 -1
- package/dist/cli/Param.d.ts +9 -0
- package/dist/cli/Param.d.ts.map +1 -1
- package/dist/cli/Param.js +21 -2
- package/dist/cli/Param.js.map +1 -1
- package/dist/cli/TerminalCapabilities.d.ts +3 -2
- package/dist/cli/TerminalCapabilities.d.ts.map +1 -1
- package/dist/cli/TerminalCapabilities.js +3 -1
- package/dist/cli/TerminalCapabilities.js.map +1 -1
- package/dist/cli/internal/completions/bash.js +73 -27
- package/dist/cli/internal/completions/bash.js.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.js +45 -10
- package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
- package/dist/cluster/MessageStorage.d.ts +23 -45
- package/dist/cluster/MessageStorage.d.ts.map +1 -1
- package/dist/cluster/MessageStorage.js +6 -7
- package/dist/cluster/MessageStorage.js.map +1 -1
- package/dist/cluster/Sharding.d.ts.map +1 -1
- package/dist/cluster/Sharding.js +61 -21
- package/dist/cluster/Sharding.js.map +1 -1
- package/dist/cluster/ShardingConfig.d.ts +10 -0
- package/dist/cluster/ShardingConfig.d.ts.map +1 -1
- package/dist/cluster/ShardingConfig.js.map +1 -1
- package/dist/cluster/Snowflake.d.ts.map +1 -1
- package/dist/cluster/Snowflake.js +3 -7
- package/dist/cluster/Snowflake.js.map +1 -1
- package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
- package/dist/cluster/SqlRunnerStorage.js +87 -39
- package/dist/cluster/SqlRunnerStorage.js.map +1 -1
- package/dist/cluster/internal/entityManager.js +54 -20
- package/dist/cluster/internal/entityManager.js.map +1 -1
- package/dist/devtools/DevToolsClient.d.ts.map +1 -1
- package/dist/devtools/DevToolsClient.js +2 -0
- package/dist/devtools/DevToolsClient.js.map +1 -1
- package/dist/encoding/Base64.js +36 -0
- package/dist/encoding/Base64.js.map +1 -1
- package/dist/encoding/Sse.d.ts.map +1 -1
- package/dist/encoding/Sse.js +3 -3
- package/dist/encoding/Sse.js.map +1 -1
- package/dist/encoding/Toml.d.ts.map +1 -1
- package/dist/encoding/Toml.js +21 -16
- package/dist/encoding/Toml.js.map +1 -1
- package/dist/eventlog/SqlEventJournal.d.ts.map +1 -1
- package/dist/eventlog/SqlEventJournal.js +47 -27
- package/dist/eventlog/SqlEventJournal.js.map +1 -1
- package/dist/eventlog/internal/conflicts.d.ts +0 -1
- package/dist/eventlog/internal/conflicts.d.ts.map +1 -1
- package/dist/eventlog/internal/conflicts.js +0 -3
- package/dist/eventlog/internal/conflicts.js.map +1 -1
- package/dist/http/Cookies.d.ts.map +1 -1
- package/dist/http/Cookies.js +10 -9
- package/dist/http/Cookies.js.map +1 -1
- package/dist/http/HttpClient.d.ts +423 -0
- package/dist/http/HttpClient.d.ts.map +1 -1
- package/dist/http/HttpClient.js +231 -7
- package/dist/http/HttpClient.js.map +1 -1
- package/dist/http/HttpClientError.d.ts +8 -1
- package/dist/http/HttpClientError.d.ts.map +1 -1
- package/dist/http/HttpClientError.js +37 -1
- package/dist/http/HttpClientError.js.map +1 -1
- package/dist/http/HttpClientRequest.d.ts.map +1 -1
- package/dist/http/HttpClientRequest.js +1 -1
- package/dist/http/HttpClientRequest.js.map +1 -1
- package/dist/http/HttpMiddleware.d.ts +1 -1
- package/dist/http/HttpMiddleware.d.ts.map +1 -1
- package/dist/http/HttpMiddleware.js +14 -16
- package/dist/http/HttpMiddleware.js.map +1 -1
- package/dist/http/HttpRouter.d.ts.map +1 -1
- package/dist/http/HttpRouter.js +2 -1
- package/dist/http/HttpRouter.js.map +1 -1
- package/dist/http/HttpServerError.js +2 -2
- package/dist/http/HttpServerError.js.map +1 -1
- package/dist/http/HttpServerRequest.d.ts +6 -1
- package/dist/http/HttpServerRequest.d.ts.map +1 -1
- package/dist/http/HttpServerRequest.js +73 -10
- package/dist/http/HttpServerRequest.js.map +1 -1
- package/dist/http/HttpStaticServer.d.ts.map +1 -1
- package/dist/http/HttpStaticServer.js +48 -21
- package/dist/http/HttpStaticServer.js.map +1 -1
- package/dist/http/MultipartParser/internal/contentType.js +3 -3
- package/dist/http/UrlParams.d.ts +3 -1
- package/dist/http/UrlParams.d.ts.map +1 -1
- package/dist/http/UrlParams.js +4 -2
- package/dist/http/UrlParams.js.map +1 -1
- package/dist/http/internal/compression.js +4 -5
- package/dist/http/internal/compression.js.map +1 -1
- package/dist/http/internal/decompression.js +3 -0
- package/dist/http/internal/decompression.js.map +1 -1
- package/dist/http/internal/httpBody.js +8 -1
- package/dist/http/internal/httpBody.js.map +1 -1
- package/dist/http/internal/urlParams.js +25 -0
- package/dist/http/internal/urlParams.js.map +1 -1
- package/dist/http-api/HttpApi.d.ts +3 -6
- package/dist/http-api/HttpApi.d.ts.map +1 -1
- package/dist/http-api/HttpApi.js +3 -6
- package/dist/http-api/HttpApi.js.map +1 -1
- package/dist/http-api/HttpApiBuilder.d.ts.map +1 -1
- package/dist/http-api/HttpApiBuilder.js +27 -11
- package/dist/http-api/HttpApiBuilder.js.map +1 -1
- package/dist/http-api/HttpApiClient.d.ts +77 -7
- package/dist/http-api/HttpApiClient.d.ts.map +1 -1
- package/dist/http-api/HttpApiClient.js +142 -44
- package/dist/http-api/HttpApiClient.js.map +1 -1
- package/dist/http-api/HttpApiEndpoint.d.ts +24 -7
- package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
- package/dist/http-api/HttpApiEndpoint.js +109 -27
- package/dist/http-api/HttpApiEndpoint.js.map +1 -1
- package/dist/http-api/HttpApiSchema.d.ts +76 -29
- package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
- package/dist/http-api/HttpApiSchema.js +70 -59
- package/dist/http-api/HttpApiSchema.js.map +1 -1
- package/dist/http-api/HttpApiTest.d.ts.map +1 -1
- package/dist/http-api/HttpApiTest.js +3 -2
- package/dist/http-api/HttpApiTest.js.map +1 -1
- package/dist/http-api/OpenApi.d.ts.map +1 -1
- package/dist/http-api/OpenApi.js +25 -16
- package/dist/http-api/OpenApi.js.map +1 -1
- package/dist/http-api/internal/toCodecHttpProperties.d.ts +2 -0
- package/dist/http-api/internal/toCodecHttpProperties.d.ts.map +1 -0
- package/dist/http-api/internal/toCodecHttpProperties.js +38 -0
- package/dist/http-api/internal/toCodecHttpProperties.js.map +1 -0
- package/dist/internal/arbitrary/runner.d.ts.map +1 -1
- package/dist/internal/arbitrary/runner.js +120 -44
- package/dist/internal/arbitrary/runner.js.map +1 -1
- package/dist/internal/core.js +2 -0
- package/dist/internal/core.js.map +1 -1
- package/dist/internal/effect.js +21 -13
- package/dist/internal/effect.js.map +1 -1
- package/dist/internal/equal.js +14 -0
- package/dist/internal/equal.js.map +1 -1
- package/dist/internal/jsonSchema.d.ts +2 -0
- package/dist/internal/jsonSchema.d.ts.map +1 -0
- package/dist/internal/jsonSchema.js +28 -0
- package/dist/internal/jsonSchema.js.map +1 -0
- package/dist/internal/matcher.js +1 -1
- package/dist/internal/matcher.js.map +1 -1
- package/dist/internal/schema/compilerRegistry.js +4 -1
- package/dist/internal/schema/compilerRegistry.js.map +1 -1
- package/dist/internal/schema/content.d.ts +2 -0
- package/dist/internal/schema/content.d.ts.map +1 -0
- package/dist/internal/schema/content.js +13 -0
- package/dist/internal/schema/content.js.map +1 -0
- package/dist/internal/schema/fromJsonSchemaDocument.js +173 -185
- package/dist/internal/schema/fromJsonSchemaDocument.js.map +1 -1
- package/dist/internal/schema/fromRepresentation.js +2 -1
- package/dist/internal/schema/fromRepresentation.js.map +1 -1
- package/dist/internal/schema/standardSchema.js +8 -2
- package/dist/internal/schema/standardSchema.js.map +1 -1
- package/dist/internal/schema/toCodeDocument.js +3 -3
- package/dist/internal/schema/toCodeDocument.js.map +1 -1
- package/dist/internal/schema/toCodec.js +21 -24
- package/dist/internal/schema/toCodec.js.map +1 -1
- package/dist/internal/schema/toJsonSchemaDocument.js +205 -140
- package/dist/internal/schema/toJsonSchemaDocument.js.map +1 -1
- package/dist/internal/schema/toRepresentation.js +107 -129
- package/dist/internal/schema/toRepresentation.js.map +1 -1
- package/dist/internal/sql.d.ts +2 -0
- package/dist/internal/sql.d.ts.map +1 -0
- package/dist/internal/sql.js +13 -0
- package/dist/internal/sql.js.map +1 -0
- package/dist/internal/version.js +1 -1
- package/dist/observability/OtlpProxy.d.ts +154 -0
- package/dist/observability/OtlpProxy.d.ts.map +1 -0
- package/dist/observability/OtlpProxy.js +235 -0
- package/dist/observability/OtlpProxy.js.map +1 -0
- package/dist/observability/OtlpTracer.d.ts.map +1 -1
- package/dist/observability/OtlpTracer.js +4 -0
- package/dist/observability/OtlpTracer.js.map +1 -1
- package/dist/observability/index.d.ts +5 -0
- package/dist/observability/index.d.ts.map +1 -1
- package/dist/observability/index.js +5 -0
- package/dist/observability/index.js.map +1 -1
- package/dist/persistence/CircuitBreaker.d.ts +897 -0
- package/dist/persistence/CircuitBreaker.d.ts.map +1 -0
- package/dist/persistence/CircuitBreaker.js +1165 -0
- package/dist/persistence/CircuitBreaker.js.map +1 -0
- package/dist/persistence/Redis.d.ts +78 -2
- package/dist/persistence/Redis.d.ts.map +1 -1
- package/dist/persistence/Redis.js +62 -7
- package/dist/persistence/Redis.js.map +1 -1
- package/dist/persistence/index.d.ts +5 -0
- package/dist/persistence/index.d.ts.map +1 -1
- package/dist/persistence/index.js +5 -0
- package/dist/persistence/index.js.map +1 -1
- package/dist/process/ChildProcess.d.ts +30 -4
- package/dist/process/ChildProcess.d.ts.map +1 -1
- package/dist/process/ChildProcess.js.map +1 -1
- package/dist/process/ChildProcessSpawner.d.ts +30 -0
- package/dist/process/ChildProcessSpawner.d.ts.map +1 -1
- package/dist/process/ChildProcessSpawner.js +5 -2
- package/dist/process/ChildProcessSpawner.js.map +1 -1
- package/dist/reactivity/AsyncResult.d.ts +1 -1
- package/dist/reactivity/AsyncResult.d.ts.map +1 -1
- package/dist/rpc/RpcClient.d.ts.map +1 -1
- package/dist/rpc/RpcClient.js +9 -8
- package/dist/rpc/RpcClient.js.map +1 -1
- package/dist/rpc/RpcSerialization.d.ts +14 -0
- package/dist/rpc/RpcSerialization.d.ts.map +1 -1
- package/dist/rpc/RpcSerialization.js +20 -8
- package/dist/rpc/RpcSerialization.js.map +1 -1
- package/dist/rpc/RpcServer.d.ts.map +1 -1
- package/dist/rpc/RpcServer.js +11 -1
- package/dist/rpc/RpcServer.js.map +1 -1
- package/dist/rpc/RpcTest.d.ts +1 -0
- package/dist/rpc/RpcTest.d.ts.map +1 -1
- package/dist/rpc/RpcTest.js +1 -0
- package/dist/rpc/RpcTest.js.map +1 -1
- package/dist/sql/Migrator.d.ts +2 -1
- package/dist/sql/Migrator.d.ts.map +1 -1
- package/dist/sql/Migrator.js +11 -8
- package/dist/sql/Migrator.js.map +1 -1
- package/dist/sql/SqlClient.d.ts +9 -4
- package/dist/sql/SqlClient.d.ts.map +1 -1
- package/dist/sql/SqlClient.js +8 -1
- package/dist/sql/SqlClient.js.map +1 -1
- package/dist/sql/SqlResolver.d.ts +4 -0
- package/dist/sql/SqlResolver.d.ts.map +1 -1
- package/dist/sql/SqlResolver.js +18 -4
- package/dist/sql/SqlResolver.js.map +1 -1
- package/dist/sql/Statement.d.ts +7 -0
- package/dist/sql/Statement.d.ts.map +1 -1
- package/dist/sql/Statement.js +21 -2
- package/dist/sql/Statement.js.map +1 -1
- package/dist/workflow/DurableDeferred.d.ts.map +1 -1
- package/dist/workflow/DurableDeferred.js +21 -2
- package/dist/workflow/DurableDeferred.js.map +1 -1
- package/package.json +1 -1
- package/src/Arbitrary.ts +10 -2
- package/src/Channel.ts +47 -18
- package/src/Data.ts +60 -265
- package/src/Effect.ts +1 -1
- package/src/Equal.ts +8 -1
- package/src/Exit.ts +3 -3
- package/src/Formatter.ts +28 -13
- package/src/Hash.ts +4 -1
- package/src/JsonPatch.ts +4 -0
- package/src/JsonSchema.ts +12 -40
- package/src/Metric.ts +3 -3
- package/src/MutableList.ts +7 -5
- package/src/MutableRef.ts +8 -1
- package/src/PartitionedSemaphore.ts +24 -13
- package/src/Pool.ts +109 -37
- package/src/PubSub.ts +5 -6
- package/src/Ref.ts +8 -0
- package/src/Schedule.ts +1 -1
- package/src/Schema.ts +48 -25
- package/src/SchemaAST.ts +20 -20
- package/src/SchemaParser.ts +51 -18
- package/src/SchemaRepresentation.ts +31 -34
- package/src/SchemaTransformation.ts +9 -2
- package/src/Semaphore.ts +67 -40
- package/src/Sink.ts +15 -2
- package/src/Stream.ts +33 -16
- package/src/String.ts +3 -0
- package/src/Tracer.ts +15 -1
- package/src/ai/LanguageModel.ts +9 -0
- package/src/ai/McpServer.ts +14 -13
- package/src/ai/Prompt.ts +65 -0
- package/src/ai/Response.ts +34 -9
- package/src/ai/Tool.ts +38 -2
- package/src/ai/Toolkit.ts +4 -1
- package/src/cli/Argument.ts +15 -0
- package/src/cli/CliError.ts +90 -3
- package/src/cli/CliOutput.ts +183 -6
- package/src/cli/Command.ts +53 -41
- package/src/cli/Completions.ts +51 -0
- package/src/cli/Flag.ts +15 -0
- package/src/cli/GlobalFlag.ts +6 -7
- package/src/cli/Param.ts +29 -6
- package/src/cli/TerminalCapabilities.ts +6 -3
- package/src/cli/internal/completions/bash.ts +79 -29
- package/src/cluster/ClusterWorkflowEngine.ts +46 -16
- package/src/cluster/MessageStorage.ts +19 -14
- package/src/cluster/Sharding.ts +83 -21
- package/src/cluster/ShardingConfig.ts +5 -0
- package/src/cluster/Snowflake.ts +3 -7
- package/src/cluster/SqlRunnerStorage.ts +110 -47
- package/src/cluster/internal/entityManager.ts +75 -22
- package/src/devtools/DevToolsClient.ts +2 -0
- package/src/encoding/Base64.ts +38 -0
- package/src/encoding/Sse.ts +4 -3
- package/src/encoding/Toml.ts +33 -16
- package/src/eventlog/SqlEventJournal.ts +68 -45
- package/src/eventlog/internal/conflicts.ts +0 -4
- package/src/http/Cookies.ts +10 -11
- package/src/http/HttpClient.ts +547 -7
- package/src/http/HttpClientError.ts +35 -1
- package/src/http/HttpClientRequest.ts +9 -1
- package/src/http/HttpMiddleware.ts +15 -18
- package/src/http/HttpRouter.ts +2 -1
- package/src/http/HttpServerError.ts +2 -2
- package/src/http/HttpServerRequest.ts +102 -16
- package/src/http/HttpStaticServer.ts +51 -22
- package/src/http/MultipartParser/internal/contentType.ts +3 -3
- package/src/http/UrlParams.ts +6 -1
- package/src/http/internal/compression.ts +4 -5
- package/src/http/internal/decompression.ts +6 -0
- package/src/http/internal/httpBody.ts +10 -2
- package/src/http/internal/urlParams.ts +29 -0
- package/src/http-api/HttpApi.ts +3 -6
- package/src/http-api/HttpApiBuilder.ts +45 -15
- package/src/http-api/HttpApiClient.ts +218 -72
- package/src/http-api/HttpApiEndpoint.ts +121 -30
- package/src/http-api/HttpApiSchema.ts +141 -48
- package/src/http-api/HttpApiTest.ts +3 -2
- package/src/http-api/OpenApi.ts +20 -17
- package/src/http-api/internal/toCodecHttpProperties.ts +56 -0
- package/src/internal/arbitrary/runner.ts +133 -36
- package/src/internal/core.ts +2 -0
- package/src/internal/effect.ts +24 -16
- package/src/internal/equal.ts +17 -0
- package/src/internal/jsonSchema.ts +27 -0
- package/src/internal/matcher.ts +1 -1
- package/src/internal/schema/compilerRegistry.ts +6 -1
- package/src/internal/schema/content.ts +18 -0
- package/src/internal/schema/fromJsonSchemaDocument.ts +228 -190
- package/src/internal/schema/fromRepresentation.ts +2 -1
- package/src/internal/schema/standardSchema.ts +2 -2
- package/src/internal/schema/toCodeDocument.ts +4 -4
- package/src/internal/schema/toCodec.ts +26 -22
- package/src/internal/schema/toJsonSchemaDocument.ts +189 -167
- package/src/internal/schema/toRepresentation.ts +122 -140
- package/src/internal/sql.ts +14 -0
- package/src/internal/version.ts +1 -1
- package/src/observability/OtlpProxy.ts +314 -0
- package/src/observability/OtlpTracer.ts +4 -0
- package/src/observability/index.ts +6 -0
- package/src/persistence/CircuitBreaker.ts +1678 -0
- package/src/persistence/Redis.ts +129 -8
- package/src/persistence/index.ts +6 -0
- package/src/process/ChildProcess.ts +30 -4
- package/src/process/ChildProcessSpawner.ts +41 -2
- package/src/reactivity/AsyncResult.ts +1 -1
- package/src/rpc/RpcClient.ts +13 -10
- package/src/rpc/RpcSerialization.ts +32 -9
- package/src/rpc/RpcServer.ts +16 -1
- package/src/rpc/RpcTest.ts +3 -0
- package/src/sql/Migrator.ts +12 -7
- package/src/sql/SqlClient.ts +11 -4
- package/src/sql/SqlResolver.ts +23 -9
- package/src/sql/Statement.ts +30 -2
- package/src/workflow/DurableDeferred.ts +23 -6
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proxies OTLP HTTP exports from browsers through an application's own HTTP
|
|
3
|
+
* server to an OpenTelemetry Collector or vendor endpoint.
|
|
4
|
+
*
|
|
5
|
+
* A browser exporting OTLP directly would need the vendor credentials in its
|
|
6
|
+
* bundle and a cross-origin collector. `OtlpProxy` mounts `POST /v1/traces`,
|
|
7
|
+
* `/v1/logs`, and `/v1/metrics` on an `HttpRouter`, adds the configured
|
|
8
|
+
* headers on the server, and forwards the payload unchanged. The browser can
|
|
9
|
+
* then use `Otlp.layer({ baseUrl: "/otlp" })` against its own origin.
|
|
10
|
+
*
|
|
11
|
+
* **Details**
|
|
12
|
+
*
|
|
13
|
+
* - The upstream URL comes only from configuration. The request path and query
|
|
14
|
+
* string never reach it.
|
|
15
|
+
* - Only `application/json` and `application/x-protobuf` bodies are accepted;
|
|
16
|
+
* other content types get `415`. Payloads are not decoded or validated.
|
|
17
|
+
* - Only `content-type` and `content-encoding` are forwarded from the client.
|
|
18
|
+
* Configured `headers` are applied last, so a client cannot override them.
|
|
19
|
+
* - Bodies are buffered up to `maxBodySize` and rejected with `413` beyond it.
|
|
20
|
+
* - Upstream requests send `accept-encoding: identity`, and the client's
|
|
21
|
+
* `accept-encoding` is never forwarded.
|
|
22
|
+
* - The upstream status and body are returned with only the `content-type` and
|
|
23
|
+
* `retry-after` headers, so client SDK back-off keeps working and upstream
|
|
24
|
+
* cookies are dropped. Transport failures return `502` and timeouts `504`.
|
|
25
|
+
* The proxy does not retry or batch.
|
|
26
|
+
*
|
|
27
|
+
* **Gotchas**
|
|
28
|
+
*
|
|
29
|
+
* - Anyone who can reach the routes can send telemetry with the configured
|
|
30
|
+
* credentials. Compose authentication, CORS, and rate limiting around the
|
|
31
|
+
* layer as the application requires.
|
|
32
|
+
* - The response body is returned as the `HttpClient` provides it, without a
|
|
33
|
+
* `content-encoding` header. Setting `accept-encoding` in `headers` can
|
|
34
|
+
* invalidate this, as can an upstream that compresses despite
|
|
35
|
+
* `accept-encoding: identity`: clients that do not decode responses, such as
|
|
36
|
+
* `NodeHttpClient.makeUndici`, then return compressed bytes.
|
|
37
|
+
* - Requests to the proxy routes are traced by the HTTP server like any other
|
|
38
|
+
* route. To suppress those spans, provide `HttpMiddleware.TracerDisabledWhen`
|
|
39
|
+
* with a predicate matching the routes, or use
|
|
40
|
+
* `HttpMiddleware.layerTracerDisabledForUrls`, which matches exact URLs, so
|
|
41
|
+
* list each route.
|
|
42
|
+
*
|
|
43
|
+
* @stability unstable
|
|
44
|
+
* @since 4.0.7
|
|
45
|
+
*/
|
|
46
|
+
import * as ByteSize from "../ByteSize.ts"
|
|
47
|
+
import * as Duration from "../Duration.ts"
|
|
48
|
+
import * as Effect from "../Effect.ts"
|
|
49
|
+
import { constTrue } from "../Function.ts"
|
|
50
|
+
import * as Headers from "../http/Headers.ts"
|
|
51
|
+
import * as HttpClient from "../http/HttpClient.ts"
|
|
52
|
+
import * as HttpClientRequest from "../http/HttpClientRequest.ts"
|
|
53
|
+
import type * as HttpClientResponse from "../http/HttpClientResponse.ts"
|
|
54
|
+
import * as HttpIncomingMessage from "../http/HttpIncomingMessage.ts"
|
|
55
|
+
import * as HttpRouter from "../http/HttpRouter.ts"
|
|
56
|
+
import * as HttpServerRequest from "../http/HttpServerRequest.ts"
|
|
57
|
+
import * as HttpServerRespondable from "../http/HttpServerRespondable.ts"
|
|
58
|
+
import * as HttpServerResponse from "../http/HttpServerResponse.ts"
|
|
59
|
+
import * as Layer from "../Layer.ts"
|
|
60
|
+
import * as OtlpEnv from "./internal/otlpEnv.ts"
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* OTLP signal type served by the proxy.
|
|
64
|
+
*
|
|
65
|
+
* @stability unstable
|
|
66
|
+
* @category models
|
|
67
|
+
* @since 4.0.7
|
|
68
|
+
*/
|
|
69
|
+
export type Signal = "traces" | "logs" | "metrics"
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Creates a record of request handlers, one for each OTLP signal, that forward
|
|
73
|
+
* to the configured upstream.
|
|
74
|
+
*
|
|
75
|
+
* **When to use**
|
|
76
|
+
*
|
|
77
|
+
* Use to mount the proxy on routes or a router other than the ones `layer`
|
|
78
|
+
* registers, such as an `HttpApi` endpoint.
|
|
79
|
+
*
|
|
80
|
+
* **Details**
|
|
81
|
+
*
|
|
82
|
+
* Each signal is sent to `urls[signal]` when set, otherwise to
|
|
83
|
+
* `/v1/<signal>` below `baseUrl`. `maxBodySize` defaults to the
|
|
84
|
+
* `HttpIncomingMessage.MaxBodySize` reference, then 10 MiB. `timeout` defaults
|
|
85
|
+
* to 10 seconds.
|
|
86
|
+
*
|
|
87
|
+
* @see {@link layer} for mounting the handlers on an `HttpRouter`.
|
|
88
|
+
* @stability unstable
|
|
89
|
+
* @category constructors
|
|
90
|
+
* @since 4.0.7
|
|
91
|
+
*/
|
|
92
|
+
export const make = (options: {
|
|
93
|
+
readonly baseUrl: string
|
|
94
|
+
readonly urls?: Partial<Record<Signal, string>> | undefined
|
|
95
|
+
readonly headers?: Headers.Input | undefined
|
|
96
|
+
readonly maxBodySize?: ByteSize.Input | undefined
|
|
97
|
+
readonly timeout?: Duration.Input | undefined
|
|
98
|
+
}): Effect.Effect<
|
|
99
|
+
Record<Signal, Effect.Effect<HttpServerResponse.HttpServerResponse, never, HttpServerRequest.HttpServerRequest>>,
|
|
100
|
+
never,
|
|
101
|
+
HttpClient.HttpClient
|
|
102
|
+
> =>
|
|
103
|
+
Effect.gen(function*() {
|
|
104
|
+
const client = yield* HttpClient.HttpClient
|
|
105
|
+
const base = HttpClientRequest.post(options.baseUrl)
|
|
106
|
+
const handlers = {} as Record<Signal, Handler>
|
|
107
|
+
for (const signal of allSignals) {
|
|
108
|
+
handlers[signal] = makeHandler(client, {
|
|
109
|
+
...options,
|
|
110
|
+
url: options.urls?.[signal] ?? HttpClientRequest.appendUrl(base, `/v1/${signal}`).url
|
|
111
|
+
})
|
|
112
|
+
}
|
|
113
|
+
return handlers
|
|
114
|
+
})
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Creates a layer that mounts the OTLP proxy routes on an `HttpRouter`.
|
|
118
|
+
*
|
|
119
|
+
* **Details**
|
|
120
|
+
*
|
|
121
|
+
* Registers `POST <prefix>/v1/<signal>` for each of `signals`, which defaults
|
|
122
|
+
* to traces, logs, and metrics. Without a `prefix` the routes are mounted at
|
|
123
|
+
* the router root.
|
|
124
|
+
*
|
|
125
|
+
* **Example** (Proxying browser telemetry to a vendor)
|
|
126
|
+
*
|
|
127
|
+
* ```ts import.meta.vitest
|
|
128
|
+
* import { Layer } from "effect"
|
|
129
|
+
* import { FetchHttpClient } from "effect/http"
|
|
130
|
+
* import { OtlpProxy } from "effect/observability"
|
|
131
|
+
*
|
|
132
|
+
* const OtlpProxyLayer = OtlpProxy.layer({
|
|
133
|
+
* baseUrl: "https://otlp.vendor.example",
|
|
134
|
+
* headers: { authorization: "Bearer server-side-key" },
|
|
135
|
+
* prefix: "/otlp"
|
|
136
|
+
* }).pipe(Layer.provide(FetchHttpClient.layer))
|
|
137
|
+
*
|
|
138
|
+
* Layer.isLayer(OtlpProxyLayer) // => true
|
|
139
|
+
* ```
|
|
140
|
+
*
|
|
141
|
+
* @see {@link layerFromConfig} for reading the upstream from OpenTelemetry environment variables.
|
|
142
|
+
* @stability unstable
|
|
143
|
+
* @category layers
|
|
144
|
+
* @since 4.0.7
|
|
145
|
+
*/
|
|
146
|
+
export const layer = (options: {
|
|
147
|
+
readonly baseUrl: string
|
|
148
|
+
readonly urls?: Partial<Record<Signal, string>> | undefined
|
|
149
|
+
readonly headers?: Headers.Input | undefined
|
|
150
|
+
readonly maxBodySize?: ByteSize.Input | undefined
|
|
151
|
+
readonly timeout?: Duration.Input | undefined
|
|
152
|
+
readonly prefix?: string | undefined
|
|
153
|
+
readonly signals?: ReadonlyArray<Signal> | undefined
|
|
154
|
+
}): Layer.Layer<never, never, HttpRouter.HttpRouter | HttpClient.HttpClient> =>
|
|
155
|
+
Layer.effectDiscard(Effect.gen(function*() {
|
|
156
|
+
const handlers = yield* make(options)
|
|
157
|
+
yield* addRoutes(
|
|
158
|
+
options.prefix,
|
|
159
|
+
(options.signals ?? allSignals).map((signal) => [signal, handlers[signal]] as const)
|
|
160
|
+
)
|
|
161
|
+
}))
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Creates a layer that mounts the OTLP proxy routes using the upstream from
|
|
165
|
+
* OpenTelemetry environment configuration.
|
|
166
|
+
*
|
|
167
|
+
* **Details**
|
|
168
|
+
*
|
|
169
|
+
* Each signal is sent to `OTEL_EXPORTER_OTLP_<SIGNAL>_ENDPOINT`, falling back
|
|
170
|
+
* to `/v1/<signal>` below `OTEL_EXPORTER_OTLP_ENDPOINT`, with headers from
|
|
171
|
+
* `OTEL_EXPORTER_OTLP_<SIGNAL>_HEADERS` or `OTEL_EXPORTER_OTLP_HEADERS`. The
|
|
172
|
+
* `headers` option replaces the configured headers. Signals without an
|
|
173
|
+
* endpoint get no route.
|
|
174
|
+
*
|
|
175
|
+
* @see {@link layer} for configuring the upstream directly.
|
|
176
|
+
* @stability unstable
|
|
177
|
+
* @category layers
|
|
178
|
+
* @since 4.0.7
|
|
179
|
+
*/
|
|
180
|
+
export const layerFromConfig = (options?: {
|
|
181
|
+
readonly headers?: Headers.Input | undefined
|
|
182
|
+
readonly maxBodySize?: ByteSize.Input | undefined
|
|
183
|
+
readonly timeout?: Duration.Input | undefined
|
|
184
|
+
readonly prefix?: string | undefined
|
|
185
|
+
readonly signals?: ReadonlyArray<Signal> | undefined
|
|
186
|
+
}): Layer.Layer<never, never, HttpRouter.HttpRouter | HttpClient.HttpClient> =>
|
|
187
|
+
Layer.effectDiscard(
|
|
188
|
+
Effect.gen(function*() {
|
|
189
|
+
const client = yield* HttpClient.HttpClient
|
|
190
|
+
const routes: Array<readonly [Signal, Handler]> = []
|
|
191
|
+
for (const signal of options?.signals ?? allSignals) {
|
|
192
|
+
const envSignal = signal.toUpperCase() as OtlpEnv.Signal
|
|
193
|
+
const url = yield* OtlpEnv.endpoint(envSignal)
|
|
194
|
+
if (url === undefined) continue
|
|
195
|
+
routes.push([
|
|
196
|
+
signal,
|
|
197
|
+
makeHandler(client, {
|
|
198
|
+
...options,
|
|
199
|
+
url: url.toString(),
|
|
200
|
+
headers: options?.headers ?? (yield* OtlpEnv.headers(envSignal))
|
|
201
|
+
})
|
|
202
|
+
])
|
|
203
|
+
}
|
|
204
|
+
yield* addRoutes(options?.prefix, routes)
|
|
205
|
+
}).pipe(Effect.orDie)
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
// internal
|
|
209
|
+
|
|
210
|
+
const allSignals: ReadonlyArray<Signal> = ["traces", "logs", "metrics"]
|
|
211
|
+
|
|
212
|
+
const contentTypes = new Set(["application/json", "application/x-protobuf"])
|
|
213
|
+
|
|
214
|
+
const defaultMaxBodySize = ByteSize.mebibytes(10)
|
|
215
|
+
|
|
216
|
+
type Handler = Effect.Effect<HttpServerResponse.HttpServerResponse, never, HttpServerRequest.HttpServerRequest>
|
|
217
|
+
|
|
218
|
+
const addRoutes = Effect.fnUntraced(function*(
|
|
219
|
+
prefix: string | undefined,
|
|
220
|
+
routes: Iterable<readonly [signal: Signal, handler: Handler]>
|
|
221
|
+
) {
|
|
222
|
+
const router = yield* HttpRouter.HttpRouter
|
|
223
|
+
const target = prefix === undefined ? router : router.prefixed(prefix)
|
|
224
|
+
for (const [signal, handler] of routes) {
|
|
225
|
+
yield* target.add("POST", `/v1/${signal}`, handler)
|
|
226
|
+
}
|
|
227
|
+
})
|
|
228
|
+
|
|
229
|
+
const makeHandler = (client: HttpClient.HttpClient, options: {
|
|
230
|
+
readonly url: string
|
|
231
|
+
readonly headers?: Headers.Input | undefined
|
|
232
|
+
readonly maxBodySize?: ByteSize.Input | undefined
|
|
233
|
+
readonly timeout?: Duration.Input | undefined
|
|
234
|
+
}): Handler => {
|
|
235
|
+
// Skips the outbound span and trace headers in one step.
|
|
236
|
+
const upstream = client.pipe(
|
|
237
|
+
HttpClient.transformResponse(Effect.provideService(HttpClient.TracerDisabledWhen, constTrue))
|
|
238
|
+
)
|
|
239
|
+
const headers = Headers.fromInput(options.headers)
|
|
240
|
+
const maxBodySize = options.maxBodySize === undefined ? undefined : ByteSize.fromInputUnsafe(options.maxBodySize)
|
|
241
|
+
const timeout = options.timeout ?? Duration.seconds(10)
|
|
242
|
+
|
|
243
|
+
return Effect.gen(function*() {
|
|
244
|
+
const request = yield* HttpServerRequest.HttpServerRequest
|
|
245
|
+
const contentType = request.headers["content-type"]
|
|
246
|
+
if (!isSupportedContentType(contentType)) {
|
|
247
|
+
return unsupportedMediaType
|
|
248
|
+
}
|
|
249
|
+
const limit = maxBodySize ?? (yield* HttpIncomingMessage.MaxBodySize) ?? defaultMaxBodySize
|
|
250
|
+
// Node's reader only counts bytes as they arrive, and would send
|
|
251
|
+
// 100 Continue first, so reject an over-limit declared length up front.
|
|
252
|
+
const contentLength = parseContentLength(request.headers["content-length"])
|
|
253
|
+
if (contentLength !== undefined && contentLength > Number(limit)) {
|
|
254
|
+
return contentTooLarge
|
|
255
|
+
}
|
|
256
|
+
const body = yield* request.arrayBuffer.pipe(
|
|
257
|
+
Effect.provideService(HttpIncomingMessage.MaxBodySize, limit),
|
|
258
|
+
Effect.catch(HttpServerRespondable.toResponse)
|
|
259
|
+
)
|
|
260
|
+
if (HttpServerResponse.isHttpServerResponse(body)) {
|
|
261
|
+
return body
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
let outbound = HttpClientRequest.bodyUint8Array(
|
|
265
|
+
HttpClientRequest.post(options.url),
|
|
266
|
+
new Uint8Array(body),
|
|
267
|
+
contentType
|
|
268
|
+
)
|
|
269
|
+
const contentEncoding = request.headers["content-encoding"]
|
|
270
|
+
if (contentEncoding !== undefined) {
|
|
271
|
+
outbound = HttpClientRequest.setHeader(outbound, "content-encoding", contentEncoding)
|
|
272
|
+
}
|
|
273
|
+
// The response is returned without content-encoding, so request it
|
|
274
|
+
// uncompressed. Configured headers can still override this.
|
|
275
|
+
outbound = HttpClientRequest.setHeader(outbound, "accept-encoding", "identity")
|
|
276
|
+
return yield* upstream.execute(HttpClientRequest.setHeaders(outbound, headers)).pipe(
|
|
277
|
+
Effect.flatMap((response) => Effect.map(response.arrayBuffer, (body) => toServerResponse(response, body))),
|
|
278
|
+
Effect.timeout(timeout),
|
|
279
|
+
Effect.catchTags({
|
|
280
|
+
TimeoutError: () => Effect.succeed(gatewayTimeout),
|
|
281
|
+
HttpClientError: () => Effect.succeed(badGateway)
|
|
282
|
+
})
|
|
283
|
+
)
|
|
284
|
+
})
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
const unsupportedMediaType = HttpServerResponse.empty({ status: 415 })
|
|
288
|
+
const contentTooLarge = HttpServerResponse.empty({ status: 413 })
|
|
289
|
+
const badGateway = HttpServerResponse.empty({ status: 502 })
|
|
290
|
+
const gatewayTimeout = HttpServerResponse.empty({ status: 504 })
|
|
291
|
+
|
|
292
|
+
const isSupportedContentType = (contentType: string | undefined): contentType is string =>
|
|
293
|
+
contentType !== undefined &&
|
|
294
|
+
(contentTypes.has(contentType) || contentTypes.has(contentType.split(";")[0].trim().toLowerCase()))
|
|
295
|
+
|
|
296
|
+
const parseContentLength = (contentLength: string | undefined): number | undefined =>
|
|
297
|
+
contentLength !== undefined && /^\d+$/.test(contentLength) ? Number(contentLength) : undefined
|
|
298
|
+
|
|
299
|
+
const toServerResponse = (
|
|
300
|
+
response: HttpClientResponse.HttpClientResponse,
|
|
301
|
+
body: ArrayBuffer
|
|
302
|
+
): HttpServerResponse.HttpServerResponse => {
|
|
303
|
+
const headers: Record<string, string> = {}
|
|
304
|
+
if (response.headers["retry-after"] !== undefined) {
|
|
305
|
+
headers["retry-after"] = response.headers["retry-after"]
|
|
306
|
+
}
|
|
307
|
+
return body.byteLength === 0
|
|
308
|
+
? HttpServerResponse.empty({ status: response.status, headers })
|
|
309
|
+
: HttpServerResponse.uint8Array(new Uint8Array(body), {
|
|
310
|
+
status: response.status,
|
|
311
|
+
headers,
|
|
312
|
+
contentType: response.headers["content-type"]
|
|
313
|
+
})
|
|
314
|
+
}
|
|
@@ -281,6 +281,7 @@ class SpanImpl implements Tracer.Span {
|
|
|
281
281
|
}
|
|
282
282
|
|
|
283
283
|
end(endTime: bigint, exit: Exit.Exit<unknown, unknown>): void {
|
|
284
|
+
if (this.status._tag === "Ended") return
|
|
284
285
|
this.status = {
|
|
285
286
|
_tag: "Ended",
|
|
286
287
|
startTime: this.status.startTime,
|
|
@@ -291,14 +292,17 @@ class SpanImpl implements Tracer.Span {
|
|
|
291
292
|
}
|
|
292
293
|
|
|
293
294
|
attribute(key: string, value: unknown): void {
|
|
295
|
+
if (this.status._tag === "Ended") return
|
|
294
296
|
this.attributes.set(key, value)
|
|
295
297
|
}
|
|
296
298
|
|
|
297
299
|
event(name: string, startTime: bigint, attributes?: Record<string, unknown>): void {
|
|
300
|
+
if (this.status._tag === "Ended") return
|
|
298
301
|
this.events.push([name, startTime, attributes])
|
|
299
302
|
}
|
|
300
303
|
|
|
301
304
|
addLinks(links: ReadonlyArray<Tracer.SpanLink>): void {
|
|
305
|
+
if (this.status._tag === "Ended") return
|
|
302
306
|
// oxlint-disable-next-line no-restricted-syntax
|
|
303
307
|
this.links.push(...links)
|
|
304
308
|
}
|
|
@@ -29,6 +29,12 @@ export * as OtlpLogger from "./OtlpLogger.ts"
|
|
|
29
29
|
*/
|
|
30
30
|
export * as OtlpMetrics from "./OtlpMetrics.ts"
|
|
31
31
|
|
|
32
|
+
/**
|
|
33
|
+
* @stability unstable
|
|
34
|
+
* @since 4.0.7
|
|
35
|
+
*/
|
|
36
|
+
export * as OtlpProxy from "./OtlpProxy.ts"
|
|
37
|
+
|
|
32
38
|
/**
|
|
33
39
|
* @stability unstable
|
|
34
40
|
* @since 4.0.0
|