effect 4.0.7 → 4.1.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 +1 -1
- package/dist/BigDecimal.d.ts.map +1 -1
- package/dist/BigDecimal.js +3 -0
- package/dist/BigDecimal.js.map +1 -1
- package/dist/Channel.d.ts +12 -6
- package/dist/Channel.d.ts.map +1 -1
- package/dist/Channel.js +9 -3
- package/dist/Channel.js.map +1 -1
- package/dist/Config.d.ts +7 -1
- package/dist/Config.d.ts.map +1 -1
- package/dist/Config.js.map +1 -1
- package/dist/Context.d.ts +18 -1
- package/dist/Context.d.ts.map +1 -1
- package/dist/Context.js +27 -8
- package/dist/Context.js.map +1 -1
- package/dist/Cron.d.ts +81 -11
- package/dist/Cron.d.ts.map +1 -1
- package/dist/Cron.js +101 -26
- package/dist/Cron.js.map +1 -1
- package/dist/Duration.d.ts +78 -0
- package/dist/Duration.d.ts.map +1 -1
- package/dist/Duration.js +123 -0
- package/dist/Duration.js.map +1 -1
- package/dist/Effect.d.ts +164 -7
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +11 -1
- package/dist/Effect.js.map +1 -1
- package/dist/FileSystem.d.ts +59 -4
- package/dist/FileSystem.d.ts.map +1 -1
- package/dist/FileSystem.js +9 -2
- package/dist/FileSystem.js.map +1 -1
- package/dist/Glob.d.ts +165 -0
- package/dist/Glob.d.ts.map +1 -0
- package/dist/Glob.js +127 -0
- package/dist/Glob.js.map +1 -0
- package/dist/Match.d.ts +86 -0
- package/dist/Match.d.ts.map +1 -1
- package/dist/Match.js +72 -0
- package/dist/Match.js.map +1 -1
- package/dist/Pool.d.ts +51 -0
- package/dist/Pool.d.ts.map +1 -1
- package/dist/Pool.js +59 -9
- package/dist/Pool.js.map +1 -1
- package/dist/Random.d.ts.map +1 -1
- package/dist/Random.js +3 -3
- package/dist/Random.js.map +1 -1
- package/dist/RcMap.d.ts.map +1 -1
- package/dist/RcMap.js +8 -2
- package/dist/RcMap.js.map +1 -1
- package/dist/Schedule.d.ts +18 -1
- package/dist/Schedule.d.ts.map +1 -1
- package/dist/Schedule.js +7 -2
- package/dist/Schedule.js.map +1 -1
- package/dist/Schema.d.ts +666 -41
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +650 -0
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaGetter.d.ts +6 -1
- package/dist/SchemaGetter.d.ts.map +1 -1
- package/dist/SchemaGetter.js +22 -11
- package/dist/SchemaGetter.js.map +1 -1
- package/dist/SchemaRepresentation.d.ts +14 -0
- package/dist/SchemaRepresentation.d.ts.map +1 -1
- package/dist/SchemaRepresentation.js +16 -0
- package/dist/SchemaRepresentation.js.map +1 -1
- package/dist/SchemaTransformation.d.ts +8 -3
- package/dist/SchemaTransformation.d.ts.map +1 -1
- package/dist/SchemaTransformation.js +6 -3
- package/dist/SchemaTransformation.js.map +1 -1
- package/dist/ScopedCache.d.ts.map +1 -1
- package/dist/ScopedCache.js +5 -7
- package/dist/ScopedCache.js.map +1 -1
- package/dist/Semaphore.d.ts +130 -0
- package/dist/Semaphore.d.ts.map +1 -1
- package/dist/Semaphore.js +40 -0
- package/dist/Semaphore.js.map +1 -1
- package/dist/Stream.d.ts +13 -4
- package/dist/Stream.d.ts.map +1 -1
- package/dist/Stream.js +9 -0
- package/dist/Stream.js.map +1 -1
- package/dist/Terminal.d.ts +18 -1
- package/dist/Terminal.d.ts.map +1 -1
- package/dist/Terminal.js +1 -1
- package/dist/Terminal.js.map +1 -1
- package/dist/ai/AiError.d.ts +43 -116
- package/dist/ai/AiError.d.ts.map +1 -1
- package/dist/ai/AiError.js +53 -72
- package/dist/ai/AiError.js.map +1 -1
- package/dist/ai/Decision.d.ts +196 -15
- package/dist/ai/Decision.d.ts.map +1 -1
- package/dist/ai/Decision.js +130 -0
- package/dist/ai/Decision.js.map +1 -1
- package/dist/ai/DecisionModel.d.ts +54 -13
- package/dist/ai/DecisionModel.d.ts.map +1 -1
- package/dist/ai/DecisionModel.js +123 -12
- package/dist/ai/DecisionModel.js.map +1 -1
- package/dist/ai/McpServer.d.ts +630 -29
- package/dist/ai/McpServer.d.ts.map +1 -1
- package/dist/ai/McpServer.js +562 -116
- package/dist/ai/McpServer.js.map +1 -1
- package/dist/ai/McpTest.d.ts +130 -0
- package/dist/ai/McpTest.d.ts.map +1 -0
- package/dist/ai/McpTest.js +237 -0
- package/dist/ai/McpTest.js.map +1 -0
- package/dist/ai/Response.d.ts +1 -25
- package/dist/ai/Response.d.ts.map +1 -1
- package/dist/ai/Response.js +1 -10
- package/dist/ai/Response.js.map +1 -1
- package/dist/ai/Tool.d.ts +19 -1
- package/dist/ai/Tool.d.ts.map +1 -1
- package/dist/ai/Tool.js.map +1 -1
- package/dist/ai/index.d.ts +5 -0
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +5 -0
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/internal/mcpCore.js +17 -12
- package/dist/ai/internal/mcpCore.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2024_11_05.js +4 -5
- package/dist/ai/internal/mcpProtocol/v2024_11_05.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_03_26.js +4 -5
- package/dist/ai/internal/mcpProtocol/v2025_03_26.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_06_18.js +4 -5
- package/dist/ai/internal/mcpProtocol/v2025_06_18.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_11_25.js +4 -5
- package/dist/ai/internal/mcpProtocol/v2025_11_25.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js +18 -10
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
- package/dist/ai/internal/mcpProtocol.js +13 -0
- package/dist/ai/internal/mcpProtocol.js.map +1 -1
- package/dist/ai/internal/mcpRuntime.js +5 -3
- package/dist/ai/internal/mcpRuntime.js.map +1 -1
- package/dist/ai/internal/mcpStatefulRuntime.js +6 -1
- package/dist/ai/internal/mcpStatefulRuntime.js.map +1 -1
- package/dist/cli/Argument.d.ts +6 -0
- package/dist/cli/Argument.d.ts.map +1 -1
- package/dist/cli/Argument.js +2 -0
- package/dist/cli/Argument.js.map +1 -1
- package/dist/cli/CliOutput.d.ts +65 -1
- package/dist/cli/CliOutput.d.ts.map +1 -1
- package/dist/cli/CliOutput.js +94 -37
- package/dist/cli/CliOutput.js.map +1 -1
- package/dist/cli/Command.d.ts +23 -0
- package/dist/cli/Command.d.ts.map +1 -1
- package/dist/cli/Command.js +8 -0
- package/dist/cli/Command.js.map +1 -1
- package/dist/cli/Flag.d.ts +107 -0
- package/dist/cli/Flag.d.ts.map +1 -1
- package/dist/cli/Flag.js +37 -0
- package/dist/cli/Flag.js.map +1 -1
- package/dist/cli/HelpDoc.d.ts +15 -1
- package/dist/cli/HelpDoc.d.ts.map +1 -1
- package/dist/cli/Param.d.ts +6 -0
- package/dist/cli/Param.d.ts.map +1 -1
- package/dist/cli/Param.js +2 -0
- package/dist/cli/Param.js.map +1 -1
- package/dist/cli/Primitive.d.ts +14 -0
- package/dist/cli/Primitive.d.ts.map +1 -1
- package/dist/cli/Primitive.js +15 -1
- package/dist/cli/Primitive.js.map +1 -1
- package/dist/cli/Prompt.d.ts +1 -0
- package/dist/cli/Prompt.d.ts.map +1 -1
- package/dist/cli/Prompt.js +1 -0
- package/dist/cli/Prompt.js.map +1 -1
- package/dist/cli/internal/help.d.ts.map +1 -1
- package/dist/cli/internal/help.js +17 -10
- package/dist/cli/internal/help.js.map +1 -1
- package/dist/cluster/Sharding.d.ts.map +1 -1
- package/dist/cluster/Sharding.js +90 -28
- package/dist/cluster/Sharding.js.map +1 -1
- package/dist/cluster/ShardingConfig.d.ts +72 -6
- package/dist/cluster/ShardingConfig.d.ts.map +1 -1
- package/dist/cluster/ShardingConfig.js +4 -0
- package/dist/cluster/ShardingConfig.js.map +1 -1
- package/dist/cluster/SingleRunner.d.ts +3 -3
- package/dist/cluster/SingleRunner.d.ts.map +1 -1
- package/dist/cluster/SingleRunner.js +1 -1
- package/dist/cluster/SqlMessageStorage.d.ts +37 -6
- package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
- package/dist/cluster/SqlMessageStorage.js +34 -7
- package/dist/cluster/SqlMessageStorage.js.map +1 -1
- package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
- package/dist/cluster/SqlRunnerStorage.js +23 -8
- package/dist/cluster/SqlRunnerStorage.js.map +1 -1
- package/dist/crypto/Aead.d.ts +322 -0
- package/dist/crypto/Aead.d.ts.map +1 -0
- package/dist/crypto/Aead.js +331 -0
- package/dist/crypto/Aead.js.map +1 -0
- package/dist/crypto/Cipher.d.ts +235 -0
- package/dist/crypto/Cipher.d.ts.map +1 -0
- package/dist/crypto/Cipher.js +233 -0
- package/dist/crypto/Cipher.js.map +1 -0
- package/dist/crypto/CryptoError.d.ts +212 -0
- package/dist/crypto/CryptoError.d.ts.map +1 -0
- package/dist/crypto/CryptoError.js +202 -0
- package/dist/crypto/CryptoError.js.map +1 -0
- package/dist/crypto/Digest.d.ts +143 -0
- package/dist/crypto/Digest.d.ts.map +1 -0
- package/dist/crypto/Digest.js +146 -0
- package/dist/crypto/Digest.js.map +1 -0
- package/dist/crypto/Kdf.d.ts +220 -0
- package/dist/crypto/Kdf.d.ts.map +1 -0
- package/dist/crypto/Kdf.js +212 -0
- package/dist/crypto/Kdf.js.map +1 -0
- package/dist/crypto/KeyAgreement.d.ts +323 -0
- package/dist/crypto/KeyAgreement.d.ts.map +1 -0
- package/dist/crypto/KeyAgreement.js +303 -0
- package/dist/crypto/KeyAgreement.js.map +1 -0
- package/dist/crypto/KeyFormat.d.ts +309 -0
- package/dist/crypto/KeyFormat.d.ts.map +1 -0
- package/dist/crypto/KeyFormat.js +556 -0
- package/dist/crypto/KeyFormat.js.map +1 -0
- package/dist/crypto/KeyWrap.d.ts +389 -0
- package/dist/crypto/KeyWrap.d.ts.map +1 -0
- package/dist/crypto/KeyWrap.js +381 -0
- package/dist/crypto/KeyWrap.js.map +1 -0
- package/dist/crypto/Mac.d.ts +277 -0
- package/dist/crypto/Mac.d.ts.map +1 -0
- package/dist/crypto/Mac.js +288 -0
- package/dist/crypto/Mac.js.map +1 -0
- package/dist/crypto/SecureRandom.d.ts +340 -0
- package/dist/crypto/SecureRandom.d.ts.map +1 -0
- package/dist/crypto/SecureRandom.js +257 -0
- package/dist/crypto/SecureRandom.js.map +1 -0
- package/dist/crypto/Signature.d.ts +448 -0
- package/dist/crypto/Signature.d.ts.map +1 -0
- package/dist/crypto/Signature.js +484 -0
- package/dist/crypto/Signature.js.map +1 -0
- package/dist/crypto/WebCrypto.d.ts +61 -0
- package/dist/crypto/WebCrypto.d.ts.map +1 -0
- package/dist/crypto/WebCrypto.js +63 -0
- package/dist/crypto/WebCrypto.js.map +1 -0
- package/dist/crypto/index.d.ts +65 -0
- package/dist/crypto/index.d.ts.map +1 -0
- package/dist/crypto/index.js +66 -0
- package/dist/crypto/index.js.map +1 -0
- package/dist/crypto/internal/asymmetric.d.ts +2 -0
- package/dist/crypto/internal/asymmetric.d.ts.map +1 -0
- package/dist/crypto/internal/asymmetric.js +210 -0
- package/dist/crypto/internal/asymmetric.js.map +1 -0
- package/dist/crypto/internal/chacha.d.ts +46 -0
- package/dist/crypto/internal/chacha.d.ts.map +1 -0
- package/dist/crypto/internal/chacha.js +885 -0
- package/dist/crypto/internal/chacha.js.map +1 -0
- package/dist/crypto/internal/der.d.ts +6 -0
- package/dist/crypto/internal/der.d.ts.map +1 -0
- package/dist/crypto/internal/der.js +86 -0
- package/dist/crypto/internal/der.js.map +1 -0
- package/dist/crypto/internal/digest.d.ts +2 -0
- package/dist/crypto/internal/digest.d.ts.map +1 -0
- package/dist/crypto/internal/digest.js +15 -0
- package/dist/crypto/internal/digest.js.map +1 -0
- package/dist/crypto/internal/key.d.ts +2 -0
- package/dist/crypto/internal/key.d.ts.map +1 -0
- package/dist/crypto/internal/key.js +170 -0
- package/dist/crypto/internal/key.js.map +1 -0
- package/dist/crypto/internal/md5.d.ts +39 -0
- package/dist/crypto/internal/md5.d.ts.map +1 -0
- package/dist/crypto/internal/md5.js +179 -0
- package/dist/crypto/internal/md5.js.map +1 -0
- package/dist/crypto/internal/webCrypto.d.ts +2 -0
- package/dist/crypto/internal/webCrypto.d.ts.map +1 -0
- package/dist/crypto/internal/webCrypto.js +111 -0
- package/dist/crypto/internal/webCrypto.js.map +1 -0
- package/dist/encoding/Base64Url.d.ts.map +1 -1
- package/dist/encoding/Base64Url.js +3 -2
- package/dist/encoding/Base64Url.js.map +1 -1
- package/dist/encoding/Csv.d.ts +608 -0
- package/dist/encoding/Csv.d.ts.map +1 -0
- package/dist/encoding/Csv.js +718 -0
- package/dist/encoding/Csv.js.map +1 -0
- package/dist/encoding/Hex.d.ts +3 -2
- package/dist/encoding/Hex.d.ts.map +1 -1
- package/dist/encoding/Hex.js +3 -2
- package/dist/encoding/Hex.js.map +1 -1
- package/dist/encoding/SchemaBinary.d.ts.map +1 -1
- package/dist/encoding/SchemaBinary.js +42 -4
- package/dist/encoding/SchemaBinary.js.map +1 -1
- package/dist/encoding/Toml.d.ts +17 -3
- package/dist/encoding/Toml.d.ts.map +1 -1
- package/dist/encoding/Toml.js +104 -16
- package/dist/encoding/Toml.js.map +1 -1
- package/dist/encoding/Yaml.d.ts +8 -1
- package/dist/encoding/Yaml.d.ts.map +1 -1
- package/dist/encoding/Yaml.js +54 -18
- package/dist/encoding/Yaml.js.map +1 -1
- package/dist/encoding/index.d.ts +5 -0
- package/dist/encoding/index.d.ts.map +1 -1
- package/dist/encoding/index.js +5 -0
- package/dist/encoding/index.js.map +1 -1
- package/dist/eventlog/EventJournal.d.ts.map +1 -1
- package/dist/eventlog/EventJournal.js +6 -3
- package/dist/eventlog/EventJournal.js.map +1 -1
- package/dist/eventlog/EventLog.d.ts +119 -4
- package/dist/eventlog/EventLog.d.ts.map +1 -1
- package/dist/eventlog/EventLog.js +200 -12
- package/dist/eventlog/EventLog.js.map +1 -1
- package/dist/eventlog/EventLogEncryption.d.ts +41 -4
- package/dist/eventlog/EventLogEncryption.d.ts.map +1 -1
- package/dist/eventlog/EventLogEncryption.js +83 -64
- package/dist/eventlog/EventLogEncryption.js.map +1 -1
- package/dist/eventlog/EventLogMessage.d.ts +279 -0
- package/dist/eventlog/EventLogMessage.d.ts.map +1 -1
- package/dist/eventlog/EventLogMessage.js +217 -1
- package/dist/eventlog/EventLogMessage.js.map +1 -1
- package/dist/eventlog/EventLogRemote.d.ts +200 -28
- package/dist/eventlog/EventLogRemote.d.ts.map +1 -1
- package/dist/eventlog/EventLogRemote.js +186 -16
- package/dist/eventlog/EventLogRemote.js.map +1 -1
- package/dist/eventlog/EventLogServer.d.ts +3 -0
- package/dist/eventlog/EventLogServer.d.ts.map +1 -1
- package/dist/eventlog/EventLogServer.js +18 -10
- package/dist/eventlog/EventLogServer.js.map +1 -1
- package/dist/eventlog/EventLogServerEncrypted.d.ts +326 -5
- package/dist/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
- package/dist/eventlog/EventLogServerEncrypted.js +769 -14
- package/dist/eventlog/EventLogServerEncrypted.js.map +1 -1
- package/dist/eventlog/EventLogSessionAuth.d.ts +5 -3
- package/dist/eventlog/EventLogSessionAuth.d.ts.map +1 -1
- package/dist/eventlog/EventLogSessionAuth.js +41 -64
- package/dist/eventlog/EventLogSessionAuth.js.map +1 -1
- package/dist/eventlog/EventRow.d.ts +4 -0
- package/dist/eventlog/EventRow.d.ts.map +1 -1
- package/dist/eventlog/EventRow.js +12 -2
- package/dist/eventlog/EventRow.js.map +1 -1
- package/dist/eventlog/SqlEventJournal.js +2 -2
- package/dist/eventlog/SqlEventJournal.js.map +1 -1
- package/dist/eventlog/SqlEventLogServerEncrypted.d.ts +21 -5
- package/dist/eventlog/SqlEventLogServerEncrypted.d.ts.map +1 -1
- package/dist/eventlog/SqlEventLogServerEncrypted.js +1048 -113
- package/dist/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
- package/dist/eventlog/SqlEventLogServerUnencrypted.js +2 -2
- package/dist/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
- package/dist/eventlog/internal/batches.d.ts +12 -0
- package/dist/eventlog/internal/batches.d.ts.map +1 -0
- package/dist/eventlog/internal/batches.js +26 -0
- package/dist/eventlog/internal/batches.js.map +1 -0
- package/dist/eventlog/internal/compaction.d.ts +38 -0
- package/dist/eventlog/internal/compaction.d.ts.map +1 -0
- package/dist/eventlog/internal/compaction.js +33 -0
- package/dist/eventlog/internal/compaction.js.map +1 -0
- package/dist/eventlog/internal/identityRootSecretDerivation.js +66 -67
- package/dist/eventlog/internal/identityRootSecretDerivation.js.map +1 -1
- package/dist/eventlog/internal/remoteCompaction.d.ts +31 -0
- package/dist/eventlog/internal/remoteCompaction.d.ts.map +1 -0
- package/dist/eventlog/internal/remoteCompaction.js +76 -0
- package/dist/eventlog/internal/remoteCompaction.js.map +1 -0
- package/dist/http/Cookies.d.ts +172 -0
- package/dist/http/Cookies.d.ts.map +1 -1
- package/dist/http/Cookies.js +143 -1
- package/dist/http/Cookies.js.map +1 -1
- package/dist/http/FetchHttpClient.d.ts +26 -2
- package/dist/http/FetchHttpClient.d.ts.map +1 -1
- package/dist/http/FetchHttpClient.js +78 -15
- package/dist/http/FetchHttpClient.js.map +1 -1
- package/dist/http/HttpClient.d.ts +79 -8
- package/dist/http/HttpClient.d.ts.map +1 -1
- package/dist/http/HttpClient.js +65 -5
- package/dist/http/HttpClient.js.map +1 -1
- package/dist/http/HttpClientRequest.d.ts +9 -5
- package/dist/http/HttpClientRequest.d.ts.map +1 -1
- package/dist/http/HttpClientRequest.js +2 -3
- package/dist/http/HttpClientRequest.js.map +1 -1
- package/dist/http/HttpClientResponse.d.ts.map +1 -1
- package/dist/http/HttpClientResponse.js +3 -2
- package/dist/http/HttpClientResponse.js.map +1 -1
- package/dist/http/HttpMethod.d.ts +7 -1
- package/dist/http/HttpMethod.d.ts.map +1 -1
- package/dist/http/HttpMethod.js +3 -8
- package/dist/http/HttpMethod.js.map +1 -1
- package/dist/http/HttpServerRequest.d.ts +5 -2
- package/dist/http/HttpServerRequest.d.ts.map +1 -1
- package/dist/http/HttpServerRequest.js +6 -17
- package/dist/http/HttpServerRequest.js.map +1 -1
- package/dist/http/HttpServerResponse.d.ts.map +1 -1
- package/dist/http/HttpServerResponse.js +3 -2
- package/dist/http/HttpServerResponse.js.map +1 -1
- package/dist/http/HttpTraceContext.d.ts +2 -1
- package/dist/http/HttpTraceContext.d.ts.map +1 -1
- package/dist/http/HttpTraceContext.js +7 -5
- package/dist/http/HttpTraceContext.js.map +1 -1
- package/dist/http/ProblemDetails.d.ts +96 -0
- package/dist/http/ProblemDetails.d.ts.map +1 -0
- package/dist/http/ProblemDetails.js +98 -0
- package/dist/http/ProblemDetails.js.map +1 -0
- package/dist/http/index.d.ts +5 -0
- package/dist/http/index.d.ts.map +1 -1
- package/dist/http/index.js +5 -0
- package/dist/http/index.js.map +1 -1
- package/dist/http/internal/decompression.js +3 -2
- package/dist/http/internal/decompression.js.map +1 -1
- package/dist/http/internal/urlParams.js +8 -0
- package/dist/http/internal/urlParams.js.map +1 -1
- package/dist/http-api/HttpApiBuilder.js +19 -5
- package/dist/http-api/HttpApiBuilder.js.map +1 -1
- package/dist/http-api/HttpApiClient.d.ts +63 -0
- package/dist/http-api/HttpApiClient.d.ts.map +1 -1
- package/dist/http-api/HttpApiClient.js +51 -0
- package/dist/http-api/HttpApiClient.js.map +1 -1
- package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
- package/dist/http-api/HttpApiEndpoint.js +14 -5
- package/dist/http-api/HttpApiEndpoint.js.map +1 -1
- package/dist/http-api/HttpApiError.d.ts +185 -13
- package/dist/http-api/HttpApiError.d.ts.map +1 -1
- package/dist/http-api/HttpApiError.js +128 -0
- package/dist/http-api/HttpApiError.js.map +1 -1
- package/dist/http-api/HttpApiMiddleware.d.ts +64 -17
- package/dist/http-api/HttpApiMiddleware.d.ts.map +1 -1
- package/dist/http-api/HttpApiMiddleware.js +85 -1
- package/dist/http-api/HttpApiMiddleware.js.map +1 -1
- package/dist/http-api/HttpApiSchema.d.ts +76 -14
- package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
- package/dist/http-api/HttpApiSchema.js +53 -0
- package/dist/http-api/HttpApiSchema.js.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/internal/effect.js +25 -14
- package/dist/internal/effect.js.map +1 -1
- package/dist/internal/glob.d.ts +2 -0
- package/dist/internal/glob.d.ts.map +1 -0
- package/dist/internal/glob.js +630 -0
- package/dist/internal/glob.js.map +1 -0
- package/dist/internal/matcher.js +10 -0
- package/dist/internal/matcher.js.map +1 -1
- package/dist/internal/persistence.js +9 -0
- package/dist/internal/persistence.js.map +1 -1
- package/dist/internal/rcRef.js +4 -1
- package/dist/internal/rcRef.js.map +1 -1
- package/dist/internal/schema/toCodeDocument.js +6 -3
- package/dist/internal/schema/toCodeDocument.js.map +1 -1
- package/dist/internal/trie.js +42 -13
- package/dist/internal/trie.js.map +1 -1
- package/dist/internal/ulid.js +41 -0
- package/dist/internal/ulid.js.map +1 -1
- package/dist/internal/uuid.js +52 -8
- package/dist/internal/uuid.js.map +1 -1
- package/dist/internal/version.js +1 -1
- package/dist/observability/Otlp.d.ts +15 -4
- package/dist/observability/Otlp.d.ts.map +1 -1
- package/dist/observability/Otlp.js +10 -0
- package/dist/observability/Otlp.js.map +1 -1
- package/dist/observability/OtlpResource.d.ts +7 -0
- package/dist/observability/OtlpResource.d.ts.map +1 -1
- package/dist/observability/OtlpResource.js +11 -1
- package/dist/observability/OtlpResource.js.map +1 -1
- package/dist/persistence/KeyValueStore.d.ts +47 -2
- package/dist/persistence/KeyValueStore.d.ts.map +1 -1
- package/dist/persistence/KeyValueStore.js +129 -18
- package/dist/persistence/KeyValueStore.js.map +1 -1
- package/dist/persistence/PersistedQueue.d.ts +9 -0
- package/dist/persistence/PersistedQueue.d.ts.map +1 -1
- package/dist/persistence/PersistedQueue.js +94 -52
- package/dist/persistence/PersistedQueue.js.map +1 -1
- package/dist/persistence/Persistence.d.ts +10 -4
- package/dist/persistence/Persistence.d.ts.map +1 -1
- package/dist/persistence/Persistence.js +18 -11
- package/dist/persistence/Persistence.js.map +1 -1
- package/dist/process/ChildProcess.d.ts +207 -67
- package/dist/process/ChildProcess.d.ts.map +1 -1
- package/dist/process/ChildProcess.js +56 -158
- package/dist/process/ChildProcess.js.map +1 -1
- package/dist/process/ChildProcessSpawner.d.ts +5 -0
- package/dist/process/ChildProcessSpawner.d.ts.map +1 -1
- package/dist/process/ChildProcessSpawner.js.map +1 -1
- package/dist/process/CommandLine.d.ts +294 -0
- package/dist/process/CommandLine.d.ts.map +1 -0
- package/dist/process/CommandLine.js +481 -0
- package/dist/process/CommandLine.js.map +1 -0
- package/dist/process/index.d.ts +5 -0
- package/dist/process/index.d.ts.map +1 -1
- package/dist/process/index.js +5 -0
- package/dist/process/index.js.map +1 -1
- package/dist/reactivity/Atom.d.ts +2 -1
- package/dist/reactivity/Atom.d.ts.map +1 -1
- package/dist/reactivity/Atom.js +3 -4
- package/dist/reactivity/Atom.js.map +1 -1
- package/dist/reactivity/AtomRegistry.js.map +1 -1
- package/dist/rpc/RpcClient.d.ts +16 -1
- package/dist/rpc/RpcClient.d.ts.map +1 -1
- package/dist/rpc/RpcClient.js +50 -16
- package/dist/rpc/RpcClient.js.map +1 -1
- package/dist/rpc/RpcMessage.d.ts +10 -1
- package/dist/rpc/RpcMessage.d.ts.map +1 -1
- package/dist/rpc/RpcMessage.js +1 -0
- package/dist/rpc/RpcMessage.js.map +1 -1
- package/dist/rpc/RpcSerialization.d.ts.map +1 -1
- package/dist/rpc/RpcSerialization.js +6 -0
- package/dist/rpc/RpcSerialization.js.map +1 -1
- package/dist/rpc/RpcServer.d.ts +31 -0
- package/dist/rpc/RpcServer.d.ts.map +1 -1
- package/dist/rpc/RpcServer.js +139 -66
- package/dist/rpc/RpcServer.js.map +1 -1
- package/dist/schema/Model.d.ts +14 -0
- package/dist/schema/Model.d.ts.map +1 -1
- package/dist/schema/Model.js +18 -3
- package/dist/schema/Model.js.map +1 -1
- package/dist/sql/Migrator.d.ts +0 -19
- package/dist/sql/Migrator.d.ts.map +1 -1
- package/dist/sql/Migrator.js +3 -48
- package/dist/sql/Migrator.js.map +1 -1
- package/dist/sql/MigratorFileSystem.d.ts +21 -0
- package/dist/sql/MigratorFileSystem.d.ts.map +1 -0
- package/dist/sql/MigratorFileSystem.js +57 -0
- package/dist/sql/MigratorFileSystem.js.map +1 -0
- package/dist/sql/SqlClient.d.ts.map +1 -1
- package/dist/sql/SqlClient.js +5 -9
- package/dist/sql/SqlClient.js.map +1 -1
- package/dist/sql/Statement.d.ts +20 -6
- package/dist/sql/Statement.d.ts.map +1 -1
- package/dist/sql/Statement.js +0 -13
- package/dist/sql/Statement.js.map +1 -1
- package/dist/sql/index.js +1 -1
- package/dist/testing/index.d.ts +0 -5
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +0 -5
- package/dist/testing/index.js.map +1 -1
- package/dist/workflow/internal/crypto.js +9 -8
- package/dist/workflow/internal/crypto.js.map +1 -1
- package/package.json +3 -1
- package/src/BigDecimal.ts +3 -0
- package/src/Channel.ts +17 -11
- package/src/Config.ts +7 -1
- package/src/Context.ts +34 -10
- package/src/Cron.ts +178 -29
- package/src/Duration.ts +140 -0
- package/src/Effect.ts +914 -85
- package/src/FileSystem.ts +65 -4
- package/src/Glob.ts +205 -0
- package/src/Match.ts +127 -0
- package/src/Pool.ts +73 -15
- package/src/Random.ts +3 -3
- package/src/RcMap.ts +5 -1
- package/src/Schedule.ts +26 -3
- package/src/Schema.ts +1189 -62
- package/src/SchemaGetter.ts +27 -11
- package/src/SchemaRepresentation.ts +19 -0
- package/src/SchemaTransformation.ts +8 -3
- package/src/ScopedCache.ts +5 -9
- package/src/Semaphore.ts +141 -0
- package/src/Stream.ts +15 -6
- package/src/Terminal.ts +19 -1
- package/src/ai/AiError.ts +56 -80
- package/src/ai/Decision.ts +257 -6
- package/src/ai/DecisionModel.ts +171 -28
- package/src/ai/McpServer.ts +1269 -286
- package/src/ai/McpTest.ts +380 -0
- package/src/ai/Response.ts +2 -22
- package/src/ai/Tool.ts +27 -8
- package/src/ai/index.ts +6 -0
- package/src/ai/internal/mcpCore.ts +78 -44
- package/src/ai/internal/mcpProtocol/v2024_11_05.ts +4 -7
- package/src/ai/internal/mcpProtocol/v2025_03_26.ts +4 -7
- package/src/ai/internal/mcpProtocol/v2025_06_18.ts +4 -7
- package/src/ai/internal/mcpProtocol/v2025_11_25.ts +4 -7
- package/src/ai/internal/mcpProtocol/v2026_07_28.ts +15 -10
- package/src/ai/internal/mcpProtocol.ts +29 -0
- package/src/ai/internal/mcpRuntime.ts +9 -5
- package/src/ai/internal/mcpStatefulRuntime.ts +14 -2
- package/src/cli/Argument.ts +6 -0
- package/src/cli/CliOutput.ts +117 -49
- package/src/cli/Command.ts +23 -0
- package/src/cli/Flag.ts +107 -0
- package/src/cli/HelpDoc.ts +18 -1
- package/src/cli/Param.ts +6 -0
- package/src/cli/Primitive.ts +16 -1
- package/src/cli/Prompt.ts +1 -0
- package/src/cli/internal/help.ts +21 -9
- package/src/cluster/Sharding.ts +93 -26
- package/src/cluster/ShardingConfig.ts +41 -3
- package/src/cluster/SingleRunner.ts +3 -3
- package/src/cluster/SqlMessageStorage.ts +49 -17
- package/src/cluster/SqlRunnerStorage.ts +37 -27
- package/src/crypto/Aead.ts +517 -0
- package/src/crypto/Cipher.ts +326 -0
- package/src/crypto/CryptoError.ts +242 -0
- package/src/crypto/Digest.ts +167 -0
- package/src/crypto/Kdf.ts +315 -0
- package/src/crypto/KeyAgreement.ts +489 -0
- package/src/crypto/KeyFormat.ts +712 -0
- package/src/crypto/KeyWrap.ts +639 -0
- package/src/crypto/Mac.ts +386 -0
- package/src/crypto/SecureRandom.ts +459 -0
- package/src/crypto/Signature.ts +673 -0
- package/src/crypto/WebCrypto.ts +64 -0
- package/src/crypto/index.ts +78 -0
- package/src/crypto/internal/asymmetric.ts +329 -0
- package/src/crypto/internal/chacha.ts +1088 -0
- package/src/crypto/internal/der.ts +110 -0
- package/src/crypto/internal/digest.ts +16 -0
- package/src/crypto/internal/key.ts +235 -0
- package/src/crypto/internal/md5.ts +170 -0
- package/src/crypto/internal/webCrypto.ts +150 -0
- package/src/encoding/Base64Url.ts +5 -2
- package/src/encoding/Csv.ts +1298 -0
- package/src/encoding/Hex.ts +3 -2
- package/src/encoding/SchemaBinary.ts +40 -4
- package/src/encoding/Toml.ts +85 -20
- package/src/encoding/Yaml.ts +61 -18
- package/src/encoding/index.ts +6 -0
- package/src/eventlog/EventJournal.ts +4 -3
- package/src/eventlog/EventLog.ts +340 -15
- package/src/eventlog/EventLogEncryption.ts +118 -110
- package/src/eventlog/EventLogMessage.ts +273 -1
- package/src/eventlog/EventLogRemote.ts +367 -23
- package/src/eventlog/EventLogServer.ts +23 -8
- package/src/eventlog/EventLogServerEncrypted.ts +1130 -67
- package/src/eventlog/EventLogSessionAuth.ts +56 -70
- package/src/eventlog/EventRow.ts +12 -3
- package/src/eventlog/SqlEventJournal.ts +2 -2
- package/src/eventlog/SqlEventLogServerEncrypted.ts +1244 -136
- package/src/eventlog/SqlEventLogServerUnencrypted.ts +2 -2
- package/src/eventlog/internal/batches.ts +30 -0
- package/src/eventlog/internal/compaction.ts +64 -0
- package/src/eventlog/internal/identityRootSecretDerivation.ts +93 -123
- package/src/eventlog/internal/remoteCompaction.ts +92 -0
- package/src/http/Cookies.ts +281 -1
- package/src/http/FetchHttpClient.ts +88 -16
- package/src/http/HttpClient.ts +89 -22
- package/src/http/HttpClientRequest.ts +12 -9
- package/src/http/HttpClientResponse.ts +3 -2
- package/src/http/HttpMethod.ts +10 -2
- package/src/http/HttpServerRequest.ts +15 -30
- package/src/http/HttpServerResponse.ts +3 -2
- package/src/http/HttpTraceContext.ts +7 -4
- package/src/http/ProblemDetails.ts +149 -0
- package/src/http/index.ts +6 -0
- package/src/http/internal/decompression.ts +4 -4
- package/src/http/internal/urlParams.ts +8 -0
- package/src/http-api/HttpApiBuilder.ts +24 -12
- package/src/http-api/HttpApiClient.ts +67 -1
- package/src/http-api/HttpApiEndpoint.ts +14 -5
- package/src/http-api/HttpApiError.ts +250 -0
- package/src/http-api/HttpApiMiddleware.ts +95 -1
- package/src/http-api/HttpApiSchema.ts +105 -14
- package/src/index.ts +6 -6
- package/src/internal/effect.ts +34 -18
- package/src/internal/glob.ts +736 -0
- package/src/internal/matcher.ts +17 -0
- package/src/internal/persistence.ts +11 -0
- package/src/internal/rcRef.ts +4 -1
- package/src/internal/schema/toCodeDocument.ts +7 -3
- package/src/internal/trie.ts +43 -14
- package/src/internal/ulid.ts +44 -0
- package/src/internal/uuid.ts +57 -16
- package/src/internal/version.ts +1 -1
- package/src/observability/Otlp.ts +21 -4
- package/src/observability/OtlpResource.ts +9 -1
- package/src/persistence/KeyValueStore.ts +219 -22
- package/src/persistence/PersistedQueue.ts +128 -59
- package/src/persistence/Persistence.ts +20 -13
- package/src/process/ChildProcess.ts +255 -260
- package/src/process/ChildProcessSpawner.ts +5 -0
- package/src/process/CommandLine.ts +630 -0
- package/src/process/index.ts +6 -0
- package/src/reactivity/Atom.ts +5 -5
- package/src/reactivity/AtomRegistry.ts +1 -1
- package/src/rpc/RpcClient.ts +62 -26
- package/src/rpc/RpcMessage.ts +10 -1
- package/src/rpc/RpcSerialization.ts +3 -0
- package/src/rpc/RpcServer.ts +176 -78
- package/src/schema/Model.ts +26 -3
- package/src/sql/Migrator.ts +4 -63
- package/src/sql/MigratorFileSystem.ts +71 -0
- package/src/sql/SqlClient.ts +2 -16
- package/src/sql/Statement.ts +8 -7
- package/src/sql/index.ts +1 -1
- package/src/testing/index.ts +0 -6
- package/src/workflow/internal/crypto.ts +15 -11
- package/dist/Crypto.d.ts +0 -244
- package/dist/Crypto.d.ts.map +0 -1
- package/dist/Crypto.js +0 -139
- package/dist/Crypto.js.map +0 -1
- package/dist/testing/TestCrypto.d.ts +0 -73
- package/dist/testing/TestCrypto.d.ts.map +0 -1
- package/dist/testing/TestCrypto.js +0 -87
- package/dist/testing/TestCrypto.js.map +0 -1
- package/src/Crypto.ts +0 -347
- package/src/testing/TestCrypto.ts +0 -94
|
@@ -11,13 +11,16 @@
|
|
|
11
11
|
* @since 4.0.0
|
|
12
12
|
*/
|
|
13
13
|
import type * as ByteSize from "../ByteSize.ts"
|
|
14
|
+
import type * as Cause from "../Cause.ts"
|
|
14
15
|
import * as Data from "../Data.ts"
|
|
15
16
|
import * as Effect from "../Effect.ts"
|
|
16
17
|
import * as ErrorReporter from "../ErrorReporter.ts"
|
|
17
18
|
import * as HttpServerRespondable from "../http/HttpServerRespondable.ts"
|
|
18
19
|
import * as HttpServerResponse from "../http/HttpServerResponse.ts"
|
|
20
|
+
import * as ProblemDetails from "../http/ProblemDetails.ts"
|
|
19
21
|
import { hasProperty } from "../Predicate.ts"
|
|
20
22
|
import * as Schema from "../Schema.ts"
|
|
23
|
+
import type { Simplify } from "../Struct.ts"
|
|
21
24
|
import * as HttpApiSchema from "./HttpApiSchema.ts"
|
|
22
25
|
|
|
23
26
|
const badRequestResponse = HttpServerResponse.empty({ status: 400 })
|
|
@@ -449,6 +452,253 @@ export const ServiceUnavailableNoContent = ServiceUnavailable.pipe(HttpApiSchema
|
|
|
449
452
|
decode: () => new ServiceUnavailable({})
|
|
450
453
|
}))
|
|
451
454
|
|
|
455
|
+
/**
|
|
456
|
+
* The constant members of a typed problem declaration.
|
|
457
|
+
*
|
|
458
|
+
* @stability unstable
|
|
459
|
+
* @category models
|
|
460
|
+
* @since 4.0.6
|
|
461
|
+
*/
|
|
462
|
+
export interface ProblemDeclaration<Type extends string, Status extends number> {
|
|
463
|
+
/**
|
|
464
|
+
* The problem type URI. It is the discriminator between problem classes that
|
|
465
|
+
* share a status.
|
|
466
|
+
*/
|
|
467
|
+
readonly type: Type
|
|
468
|
+
/**
|
|
469
|
+
* The HTTP status of the response.
|
|
470
|
+
*/
|
|
471
|
+
readonly status: Status
|
|
472
|
+
/**
|
|
473
|
+
* The short human-readable summary of the problem type.
|
|
474
|
+
*/
|
|
475
|
+
readonly title: string
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
/**
|
|
479
|
+
* The standard problem members of a typed problem class.
|
|
480
|
+
*
|
|
481
|
+
* **Details**
|
|
482
|
+
*
|
|
483
|
+
* `type`, `status` and `title` are fixed by the declaration and are constructor
|
|
484
|
+
* defaults that are always encoded. `type` is the discriminator: a body with a
|
|
485
|
+
* different `type` is rejected. `status` and `title` decode to the declared
|
|
486
|
+
* value whatever the body carries, so the HTTP status stays authoritative.
|
|
487
|
+
* `detail` and `instance` are optional per-instance members that declared
|
|
488
|
+
* fields may replace.
|
|
489
|
+
*
|
|
490
|
+
* @stability unstable
|
|
491
|
+
* @category models
|
|
492
|
+
* @since 4.0.6
|
|
493
|
+
*/
|
|
494
|
+
export interface ProblemMembers<Type extends string, Status extends number> {
|
|
495
|
+
readonly type: Schema.tag<Type>
|
|
496
|
+
readonly status: FixedMember<Status>
|
|
497
|
+
readonly title: FixedMember<string>
|
|
498
|
+
readonly detail: OptionalMember<Schema.String>
|
|
499
|
+
readonly instance: OptionalMember<Schema.String>
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
type FixedMember<L extends string | number> = Schema.middlewareDecoding<
|
|
503
|
+
Schema.withDecodingDefaultKey<Schema.tag<L>>,
|
|
504
|
+
never
|
|
505
|
+
>
|
|
506
|
+
|
|
507
|
+
type OptionalMember<S extends Schema.Constraint> = Schema.middlewareDecoding<Schema.optionalKey<S>, never>
|
|
508
|
+
|
|
509
|
+
/**
|
|
510
|
+
* The fields of a typed problem class: the standard members plus the declared
|
|
511
|
+
* extension fields.
|
|
512
|
+
*
|
|
513
|
+
* @stability unstable
|
|
514
|
+
* @category models
|
|
515
|
+
* @since 4.0.6
|
|
516
|
+
*/
|
|
517
|
+
export type ProblemFields<Type extends string, Status extends number, Fields extends Schema.Struct.Fields> = Simplify<
|
|
518
|
+
Omit<ProblemMembers<Type, Status>, keyof Fields> & Fields
|
|
519
|
+
>
|
|
520
|
+
|
|
521
|
+
/**
|
|
522
|
+
* The extension fields a typed problem may declare. The fixed members `type`,
|
|
523
|
+
* `status` and `title` are reserved.
|
|
524
|
+
*
|
|
525
|
+
* @stability unstable
|
|
526
|
+
* @category models
|
|
527
|
+
* @since 4.0.6
|
|
528
|
+
*/
|
|
529
|
+
export type ProblemExtensionFields = Schema.Struct.Fields & {
|
|
530
|
+
readonly type?: never
|
|
531
|
+
readonly status?: never
|
|
532
|
+
readonly title?: never
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
const problemEncoding: HttpApiSchema.ResponseEncoding = { _tag: "Json", contentType: ProblemDetails.contentType }
|
|
536
|
+
|
|
537
|
+
/**
|
|
538
|
+
* The class returned by {@link Problem}.
|
|
539
|
+
*
|
|
540
|
+
* @stability unstable
|
|
541
|
+
* @category models
|
|
542
|
+
* @since 4.0.6
|
|
543
|
+
*/
|
|
544
|
+
export interface ProblemClass<
|
|
545
|
+
Self,
|
|
546
|
+
Tag extends string,
|
|
547
|
+
Type extends string,
|
|
548
|
+
Status extends number,
|
|
549
|
+
Fields extends Schema.Struct.Fields,
|
|
550
|
+
Brand
|
|
551
|
+
> extends
|
|
552
|
+
Schema.Class<
|
|
553
|
+
Self,
|
|
554
|
+
Schema.Struct<ProblemFields<Type, Status, Fields>>,
|
|
555
|
+
Cause.YieldableError & HttpServerRespondable.Respondable & Brand & { readonly _tag: Tag }
|
|
556
|
+
>
|
|
557
|
+
{}
|
|
558
|
+
|
|
559
|
+
type MissingSelfGeneric = "Missing `Self` generic - use `class Self extends HttpApiError.Problem<Self>()(...)`"
|
|
560
|
+
|
|
561
|
+
/**
|
|
562
|
+
* Declares a typed RFC 9457 problem as a yieldable error class.
|
|
563
|
+
*
|
|
564
|
+
* **Details**
|
|
565
|
+
*
|
|
566
|
+
* The class is a `Schema.Error` whose `_tag` is the given tag, so `Effect.catchTag`
|
|
567
|
+
* works without `_tag` on the wire. It carries the `httpApiStatus` and
|
|
568
|
+
* `application/problem+json` annotations, so endpoints that declare it as an
|
|
569
|
+
* error render, document and decode it as a problem. Problem classes that
|
|
570
|
+
* share a status are told apart by `type`. The extension fields are validated
|
|
571
|
+
* on both sides and cannot replace `type`, `status` or `title`; unknown
|
|
572
|
+
* extensions are not kept. An undeclared instance still renders as a problem
|
|
573
|
+
* through `HttpServerRespondable`.
|
|
574
|
+
*
|
|
575
|
+
* **Example** (Declaring and using a typed problem)
|
|
576
|
+
*
|
|
577
|
+
* ```ts
|
|
578
|
+
* import { Effect, Schema } from "effect"
|
|
579
|
+
* import { HttpApiEndpoint, HttpApiError } from "effect/http-api"
|
|
580
|
+
*
|
|
581
|
+
* class OutOfCredit extends HttpApiError.Problem<OutOfCredit>()("OutOfCredit", {
|
|
582
|
+
* type: "https://example.com/probs/out-of-credit",
|
|
583
|
+
* status: 403,
|
|
584
|
+
* title: "You do not have enough credit."
|
|
585
|
+
* }, {
|
|
586
|
+
* balance: Schema.Number
|
|
587
|
+
* }) {}
|
|
588
|
+
*
|
|
589
|
+
* const buy = HttpApiEndpoint.post("buy", "/buy", { error: OutOfCredit })
|
|
590
|
+
*
|
|
591
|
+
* const failing = Effect.fail(new OutOfCredit({ balance: 30 }))
|
|
592
|
+
* // Responds with 403 and { "type": "https://example.com/probs/out-of-credit",
|
|
593
|
+
* // "status": 403, "title": "You do not have enough credit.", "balance": 30 }
|
|
594
|
+
* ```
|
|
595
|
+
*
|
|
596
|
+
* @stability unstable
|
|
597
|
+
* @category constructors
|
|
598
|
+
* @since 4.0.6
|
|
599
|
+
*/
|
|
600
|
+
export const Problem = <Self = never, Brand = {}>() =>
|
|
601
|
+
<
|
|
602
|
+
const Tag extends string,
|
|
603
|
+
const Type extends string,
|
|
604
|
+
const Status extends number,
|
|
605
|
+
const Fields extends ProblemExtensionFields = {}
|
|
606
|
+
>(
|
|
607
|
+
tag: Tag,
|
|
608
|
+
declaration: ProblemDeclaration<Type, Status>,
|
|
609
|
+
fields?: Fields,
|
|
610
|
+
annotations?: Schema.Annotations.Declaration<Self, readonly [Schema.Struct<ProblemFields<Type, Status, Fields>>]>
|
|
611
|
+
): [Self] extends [never] ? MissingSelfGeneric
|
|
612
|
+
: ProblemClass<Self, Tag, Type, Status, Fields, Brand> =>
|
|
613
|
+
{
|
|
614
|
+
const struct = Schema.Struct({
|
|
615
|
+
detail: ProblemDetails.optionalMember(Schema.String),
|
|
616
|
+
instance: ProblemDetails.optionalMember(Schema.String),
|
|
617
|
+
...fields,
|
|
618
|
+
type: Schema.tag(declaration.type),
|
|
619
|
+
status: ProblemDetails.fixedMember(declaration.status),
|
|
620
|
+
title: ProblemDetails.fixedMember(declaration.title)
|
|
621
|
+
})
|
|
622
|
+
const encode = Schema.encodeUnknownEffect(struct)
|
|
623
|
+
const Base = Schema.Error<any, {}>(tag)(struct, {
|
|
624
|
+
description: declaration.title,
|
|
625
|
+
httpApiStatus: declaration.status,
|
|
626
|
+
"~httpApiEncoding": problemEncoding,
|
|
627
|
+
...annotations as {}
|
|
628
|
+
})
|
|
629
|
+
Object.assign(Base.prototype, {
|
|
630
|
+
_tag: tag,
|
|
631
|
+
[ErrorReporter.ignore]: declaration.status < 500,
|
|
632
|
+
[HttpServerRespondable.symbol](this: object) {
|
|
633
|
+
return Effect.map(
|
|
634
|
+
encode(this),
|
|
635
|
+
(body) =>
|
|
636
|
+
HttpServerResponse.jsonUnsafe(body, { status: declaration.status, contentType: ProblemDetails.contentType })
|
|
637
|
+
)
|
|
638
|
+
}
|
|
639
|
+
})
|
|
640
|
+
Object.defineProperty(Base.prototype, "message", {
|
|
641
|
+
get(this: { readonly detail?: string }) {
|
|
642
|
+
return this.detail ?? declaration.title
|
|
643
|
+
},
|
|
644
|
+
configurable: true
|
|
645
|
+
})
|
|
646
|
+
return Base as any
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
/**
|
|
650
|
+
* One entry of `BadRequestProblem.errors`: the location of a request value
|
|
651
|
+
* that failed decoding and the reason.
|
|
652
|
+
*
|
|
653
|
+
* **Details**
|
|
654
|
+
*
|
|
655
|
+
* The first path segment names the request slot (`params`, `headers`, `query`
|
|
656
|
+
* or `payload`).
|
|
657
|
+
*
|
|
658
|
+
* @stability unstable
|
|
659
|
+
* @category schemas
|
|
660
|
+
* @since 4.0.6
|
|
661
|
+
*/
|
|
662
|
+
export const ProblemIssue = Schema.Struct({
|
|
663
|
+
path: Schema.Array(Schema.Union([Schema.String, Schema.Number])),
|
|
664
|
+
message: Schema.String
|
|
665
|
+
})
|
|
666
|
+
|
|
667
|
+
/**
|
|
668
|
+
* The problem rendered by `HttpApiMiddleware.layerProblemDetails` when a
|
|
669
|
+
* request fails decoding.
|
|
670
|
+
*
|
|
671
|
+
* **Details**
|
|
672
|
+
*
|
|
673
|
+
* The body is generic by default. `errors` is only filled when the layer is
|
|
674
|
+
* built with `includeDetails: true`.
|
|
675
|
+
*
|
|
676
|
+
* @stability unstable
|
|
677
|
+
* @category errors
|
|
678
|
+
* @since 4.0.6
|
|
679
|
+
*/
|
|
680
|
+
export class BadRequestProblem extends Problem<BadRequestProblem>()("BadRequestProblem", {
|
|
681
|
+
type: ProblemDetails.blankType,
|
|
682
|
+
status: 400,
|
|
683
|
+
title: "Bad Request"
|
|
684
|
+
}, {
|
|
685
|
+
errors: Schema.optionalKey(Schema.Array(ProblemIssue))
|
|
686
|
+
}) {}
|
|
687
|
+
|
|
688
|
+
/**
|
|
689
|
+
* The problem rendered by `HttpApiMiddleware.layerProblemDetails` when a
|
|
690
|
+
* response fails encoding.
|
|
691
|
+
*
|
|
692
|
+
* @stability unstable
|
|
693
|
+
* @category errors
|
|
694
|
+
* @since 4.0.6
|
|
695
|
+
*/
|
|
696
|
+
export class InternalServerErrorProblem extends Problem<InternalServerErrorProblem>()("InternalServerErrorProblem", {
|
|
697
|
+
type: ProblemDetails.blankType,
|
|
698
|
+
status: 500,
|
|
699
|
+
title: "Internal Server Error"
|
|
700
|
+
}) {}
|
|
701
|
+
|
|
452
702
|
/**
|
|
453
703
|
* Type-level identifier used to mark `HttpApiSchemaError` values.
|
|
454
704
|
*
|
|
@@ -14,21 +14,25 @@
|
|
|
14
14
|
*/
|
|
15
15
|
/** @effect-diagnostics floatingEffect:skip-file */
|
|
16
16
|
/** @effect-diagnostics classSelfMismatch:off */
|
|
17
|
+
import * as Cause from "../Cause.ts"
|
|
17
18
|
import * as Context from "../Context.ts"
|
|
18
19
|
import * as Effect from "../Effect.ts"
|
|
20
|
+
import * as ErrorReporter from "../ErrorReporter.ts"
|
|
19
21
|
import type * as HttpClientError from "../http/HttpClientError.ts"
|
|
20
22
|
import type * as HttpClientRequest from "../http/HttpClientRequest.ts"
|
|
21
23
|
import type * as HttpClientResponse from "../http/HttpClientResponse.ts"
|
|
22
24
|
import type * as HttpRouter from "../http/HttpRouter.ts"
|
|
25
|
+
import * as HttpServerRespondable from "../http/HttpServerRespondable.ts"
|
|
23
26
|
import type { HttpServerResponse } from "../http/HttpServerResponse.ts"
|
|
24
27
|
import { getStackTraceLimit, setStackTraceLimit } from "../internal/stackTraceLimit.ts"
|
|
25
28
|
import * as Layer from "../Layer.ts"
|
|
26
29
|
import { hasProperty } from "../Predicate.ts"
|
|
27
30
|
import type * as Schema from "../Schema.ts"
|
|
31
|
+
import * as SchemaIssue from "../SchemaIssue.ts"
|
|
28
32
|
import { Scope } from "../Scope.ts"
|
|
29
33
|
import type { unhandled } from "../Types.ts"
|
|
30
34
|
import type * as HttpApiEndpoint from "./HttpApiEndpoint.ts"
|
|
31
|
-
import { HttpApiSchemaError } from "./HttpApiError.ts"
|
|
35
|
+
import { BadRequestProblem, HttpApiSchemaError, InternalServerErrorProblem } from "./HttpApiError.ts"
|
|
32
36
|
import type * as HttpApiGroup from "./HttpApiGroup.ts"
|
|
33
37
|
import type * as HttpApiSecurity from "./HttpApiSecurity.ts"
|
|
34
38
|
|
|
@@ -513,6 +517,96 @@ export const layerSchemaErrorTransform = <Id, E extends ErrorConstraint, Require
|
|
|
513
517
|
)
|
|
514
518
|
)
|
|
515
519
|
|
|
520
|
+
/**
|
|
521
|
+
* Middleware that renders request decoding and response encoding failures as
|
|
522
|
+
* RFC 9457 problems.
|
|
523
|
+
*
|
|
524
|
+
* **Details**
|
|
525
|
+
*
|
|
526
|
+
* It declares `HttpApiError.BadRequestProblem` at 400 and
|
|
527
|
+
* `HttpApiError.InternalServerErrorProblem` at 500, so the OpenAPI document and
|
|
528
|
+
* generated clients of an API using it know both responses. Provide it with
|
|
529
|
+
* {@link layerProblemDetails}.
|
|
530
|
+
*
|
|
531
|
+
* **Example** (Opting in to problem details)
|
|
532
|
+
*
|
|
533
|
+
* ```ts
|
|
534
|
+
* import { Layer, Schema } from "effect"
|
|
535
|
+
* import { HttpApi, HttpApiBuilder, HttpApiEndpoint, HttpApiGroup, HttpApiMiddleware } from "effect/http-api"
|
|
536
|
+
*
|
|
537
|
+
* const Users = HttpApiGroup.make("users").add(
|
|
538
|
+
* HttpApiEndpoint.get("list", "/users", { query: { page: Schema.Number } })
|
|
539
|
+
* )
|
|
540
|
+
* const Api = HttpApi.make("api").add(Users).middleware(HttpApiMiddleware.ProblemDetails)
|
|
541
|
+
*
|
|
542
|
+
* // A request whose query fails decoding now responds with 400 and
|
|
543
|
+
* // { "type": "about:blank", "title": "Bad Request", "status": 400, "detail": "Request validation failed" }
|
|
544
|
+
* const ServerLive = HttpApiBuilder.layer(Api).pipe(
|
|
545
|
+
* Layer.provide(HttpApiMiddleware.layerProblemDetails())
|
|
546
|
+
* )
|
|
547
|
+
* ```
|
|
548
|
+
*
|
|
549
|
+
* @stability unstable
|
|
550
|
+
* @category services
|
|
551
|
+
* @since 4.0.6
|
|
552
|
+
*/
|
|
553
|
+
export class ProblemDetails extends Service<ProblemDetails>()("effect/http-api/HttpApiMiddleware/ProblemDetails", {
|
|
554
|
+
error: [BadRequestProblem, InternalServerErrorProblem]
|
|
555
|
+
}) {}
|
|
556
|
+
|
|
557
|
+
const formatIssues = SchemaIssue.makeFormatterStandardSchemaV1()
|
|
558
|
+
|
|
559
|
+
const toPathSegment = (segment: PropertyKey | { readonly key: PropertyKey }): string | number => {
|
|
560
|
+
const key = typeof segment === "object" ? segment.key : segment
|
|
561
|
+
return typeof key === "number" ? key : String(key)
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
const toProblemIssues = (error: HttpApiSchemaError) => {
|
|
565
|
+
const slot = error.kind.toLowerCase()
|
|
566
|
+
return formatIssues(error.cause.issue).issues.map((issue) => ({
|
|
567
|
+
path: [slot, ...(issue.path ?? []).map(toPathSegment)],
|
|
568
|
+
message: issue.message
|
|
569
|
+
}))
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
/**
|
|
573
|
+
* Provides the {@link ProblemDetails} middleware.
|
|
574
|
+
*
|
|
575
|
+
* **Details**
|
|
576
|
+
*
|
|
577
|
+
* A request decoding failure becomes a `400` problem with a generic `detail`
|
|
578
|
+
* and no information about the request or the schema. With
|
|
579
|
+
* `includeDetails: true` the problem also carries `errors`, one entry per
|
|
580
|
+
* issue with the path of the offending value prefixed by its request slot and
|
|
581
|
+
* the issue message. A response encoding failure is reported to the configured
|
|
582
|
+
* error reporters, as it is without the middleware, and becomes a `500`
|
|
583
|
+
* problem with no detail.
|
|
584
|
+
*
|
|
585
|
+
* @stability unstable
|
|
586
|
+
* @category layers
|
|
587
|
+
* @since 4.0.6
|
|
588
|
+
*/
|
|
589
|
+
export const layerProblemDetails = (options?: {
|
|
590
|
+
readonly includeDetails?: boolean | undefined
|
|
591
|
+
}): Layer.Layer<ProblemDetails> => {
|
|
592
|
+
const includeDetails = options?.includeDetails === true
|
|
593
|
+
return layerSchemaErrorTransform(ProblemDetails, (error) => {
|
|
594
|
+
if (error.kind === "Body" || error.kind === "ResponseHeaders") {
|
|
595
|
+
return Effect.andThen(
|
|
596
|
+
ErrorReporter.report(Cause.fail(error)),
|
|
597
|
+
HttpServerRespondable.toResponse(new InternalServerErrorProblem())
|
|
598
|
+
)
|
|
599
|
+
}
|
|
600
|
+
return Effect.fail(
|
|
601
|
+
new BadRequestProblem(
|
|
602
|
+
includeDetails ? { ...requestValidationFailed, errors: toProblemIssues(error) } : requestValidationFailed
|
|
603
|
+
)
|
|
604
|
+
)
|
|
605
|
+
})
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
const requestValidationFailed = { detail: "Request validation failed" }
|
|
609
|
+
|
|
516
610
|
/**
|
|
517
611
|
* Provides a client-side middleware implementation for a middleware that is required by generated clients.
|
|
518
612
|
*
|
|
@@ -17,6 +17,7 @@ import { constVoid, type LazyArg } from "../Function.ts"
|
|
|
17
17
|
import { hasBody, type HttpMethod } from "../http/HttpMethod.ts"
|
|
18
18
|
import * as HttpStatus from "../http/HttpStatus.ts"
|
|
19
19
|
import type * as Multipart_ from "../http/Multipart.ts"
|
|
20
|
+
import * as ProblemDetails from "../http/ProblemDetails.ts"
|
|
20
21
|
import * as Predicate from "../Predicate.ts"
|
|
21
22
|
import * as Schema from "../Schema.ts"
|
|
22
23
|
import * as SchemaAST from "../SchemaAST.ts"
|
|
@@ -264,6 +265,85 @@ export function asNoContent<S extends Schema.Constraint>(options: {
|
|
|
264
265
|
}
|
|
265
266
|
}
|
|
266
267
|
|
|
268
|
+
/**
|
|
269
|
+
* Schema type returned by `asProblem`, encoding as a problem details body
|
|
270
|
+
* while decoding to the original schema type.
|
|
271
|
+
*
|
|
272
|
+
* @stability unstable
|
|
273
|
+
* @category schemas
|
|
274
|
+
* @since 4.0.6
|
|
275
|
+
*/
|
|
276
|
+
export interface asProblem<S extends Schema.Constraint> extends
|
|
277
|
+
Schema.decodeTo<
|
|
278
|
+
Schema.toType<S>,
|
|
279
|
+
Schema.Struct<{
|
|
280
|
+
readonly type: Schema.tag<string>
|
|
281
|
+
readonly status: Schema.middlewareDecoding<Schema.withDecodingDefaultKey<Schema.tag<number>>, never>
|
|
282
|
+
readonly title: Schema.middlewareDecoding<Schema.withDecodingDefaultKey<Schema.tag<string>>, never>
|
|
283
|
+
}>
|
|
284
|
+
>
|
|
285
|
+
{}
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* Renders an error class as an RFC 9457 problem.
|
|
289
|
+
*
|
|
290
|
+
* **Details**
|
|
291
|
+
*
|
|
292
|
+
* The server encodes the error as an `application/problem+json` body carrying
|
|
293
|
+
* `type`, `title` and the status of the class. Generated clients decode a body
|
|
294
|
+
* with the same `type` back into an instance by calling `decode`, which
|
|
295
|
+
* defaults to constructing the class without arguments; a body with a
|
|
296
|
+
* different `type` is rejected.
|
|
297
|
+
*
|
|
298
|
+
* **Example** (A built-in error as a problem)
|
|
299
|
+
*
|
|
300
|
+
* ```ts
|
|
301
|
+
* import { HttpApiEndpoint, HttpApiError, HttpApiSchema } from "effect/http-api"
|
|
302
|
+
*
|
|
303
|
+
* const user = HttpApiEndpoint.get("user", "/user", {
|
|
304
|
+
* error: HttpApiError.NotFound.pipe(HttpApiSchema.asProblem({ title: "Not Found" }))
|
|
305
|
+
* })
|
|
306
|
+
* // A NotFound failure responds with 404 and
|
|
307
|
+
* // { "type": "about:blank", "title": "Not Found", "status": 404 }
|
|
308
|
+
* ```
|
|
309
|
+
*
|
|
310
|
+
* @see {@link asNoContent} for the empty-body equivalent.
|
|
311
|
+
*
|
|
312
|
+
* @stability unstable
|
|
313
|
+
* @category encoding
|
|
314
|
+
* @since 4.0.6
|
|
315
|
+
*/
|
|
316
|
+
export function asProblem<S extends Schema.Constraint & (new() => S["Type"])>(options: {
|
|
317
|
+
/**
|
|
318
|
+
* The problem type URI. Defaults to `about:blank`.
|
|
319
|
+
*/
|
|
320
|
+
readonly type?: string | undefined
|
|
321
|
+
readonly title: string
|
|
322
|
+
readonly decode?: LazyArg<S["Type"]> | undefined
|
|
323
|
+
}) {
|
|
324
|
+
return (self: S): asProblem<S> => {
|
|
325
|
+
const status = getStatusError(self.ast)
|
|
326
|
+
const type = options.type ?? ProblemDetails.blankType
|
|
327
|
+
const body = { type, status, title: options.title }
|
|
328
|
+
const decode = options.decode ?? (() => new self())
|
|
329
|
+
const problem = Schema.Struct({
|
|
330
|
+
type: Schema.tag(type),
|
|
331
|
+
status: ProblemDetails.fixedMember(status),
|
|
332
|
+
title: ProblemDetails.fixedMember(options.title)
|
|
333
|
+
})
|
|
334
|
+
return problem.pipe(
|
|
335
|
+
Schema.decodeTo(
|
|
336
|
+
Schema.toType(self),
|
|
337
|
+
SchemaTransformation.transform({
|
|
338
|
+
decode,
|
|
339
|
+
encode: () => body
|
|
340
|
+
})
|
|
341
|
+
),
|
|
342
|
+
asJson({ contentType: ProblemDetails.contentType })
|
|
343
|
+
)
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
|
|
267
347
|
type StreamMode = "sse" | "uint8array" | "ndjson"
|
|
268
348
|
|
|
269
349
|
/**
|
|
@@ -678,10 +758,9 @@ const upgradeSchema = Schema.declare(Socket.isSocket).pipe(status(101))
|
|
|
678
758
|
*
|
|
679
759
|
* **When to use**
|
|
680
760
|
*
|
|
681
|
-
* Use
|
|
682
|
-
*
|
|
683
|
-
*
|
|
684
|
-
* connect with `Socket.makeWebSocket` instead.
|
|
761
|
+
* Use when an endpoint hands over its connection as a raw byte stream after
|
|
762
|
+
* `101 Switching Protocols`. For WebSocket, upgrade the request with
|
|
763
|
+
* `HttpServerRequest.upgrade` and connect with `Socket.makeWebSocket` instead.
|
|
685
764
|
*
|
|
686
765
|
* **Details**
|
|
687
766
|
*
|
|
@@ -698,9 +777,17 @@ const upgradeSchema = Schema.declare(Socket.isSocket).pipe(status(101))
|
|
|
698
777
|
* The endpoint may declare a buffered payload, which is decoded before the
|
|
699
778
|
* handler runs. Streaming payloads are rejected.
|
|
700
779
|
*
|
|
780
|
+
* The endpoint may also declare buffered or no-content successes at statuses
|
|
781
|
+
* other than `101`, for a server that declines the upgrade (RFC 9110 §7.8).
|
|
782
|
+
* The handler then either calls `upgrade` and returns nothing, or returns one
|
|
783
|
+
* of those successes without calling it. An endpoint declares at most one
|
|
784
|
+
* upgrade, and streaming successes cannot be combined with it.
|
|
785
|
+
*
|
|
701
786
|
* The client sends `Connection: Upgrade` and `Upgrade: protocol`, and returns
|
|
702
787
|
* the response headers with the connection, decoded with `headers` when
|
|
703
|
-
* declared.
|
|
788
|
+
* declared. Ordinary success responses are decoded as usual, and
|
|
789
|
+
* `HttpApiClient.isUpgraded` tells the two apart. Other responses are decoded
|
|
790
|
+
* as the endpoint's errors.
|
|
704
791
|
*
|
|
705
792
|
* **Example** (Declaring an exec start endpoint)
|
|
706
793
|
*
|
|
@@ -711,15 +798,19 @@ const upgradeSchema = Schema.declare(Socket.isSocket).pipe(status(101))
|
|
|
711
798
|
* const start = HttpApiEndpoint.post("start", "/exec/:id/start", {
|
|
712
799
|
* params: { id: Schema.String },
|
|
713
800
|
* payload: Schema.Struct({ Detach: Schema.Boolean, Tty: Schema.Boolean }),
|
|
714
|
-
* success:
|
|
715
|
-
*
|
|
716
|
-
*
|
|
717
|
-
*
|
|
718
|
-
* "
|
|
719
|
-
*
|
|
720
|
-
*
|
|
721
|
-
*
|
|
722
|
-
*
|
|
801
|
+
* success: [
|
|
802
|
+
* HttpApiSchema.Upgrade({
|
|
803
|
+
* protocol: "tcp",
|
|
804
|
+
* headers: {
|
|
805
|
+
* "content-type": Schema.Literals([
|
|
806
|
+
* "application/vnd.docker.raw-stream",
|
|
807
|
+
* "application/vnd.docker.multiplexed-stream"
|
|
808
|
+
* ])
|
|
809
|
+
* }
|
|
810
|
+
* }),
|
|
811
|
+
* // a detached exec answers with an empty 200 instead
|
|
812
|
+
* HttpApiSchema.Empty(200)
|
|
813
|
+
* ]
|
|
723
814
|
* })
|
|
724
815
|
* ```
|
|
725
816
|
*
|
package/src/index.ts
CHANGED
|
@@ -164,12 +164,6 @@ export * as Context from "./Context.ts"
|
|
|
164
164
|
*/
|
|
165
165
|
export * as Cron from "./Cron.ts"
|
|
166
166
|
|
|
167
|
-
/**
|
|
168
|
-
* @stability unstable
|
|
169
|
-
* @since 4.0.0
|
|
170
|
-
*/
|
|
171
|
-
export * as Crypto from "./Crypto.ts"
|
|
172
|
-
|
|
173
167
|
/**
|
|
174
168
|
* @stability stable
|
|
175
169
|
* @since 2.0.0
|
|
@@ -290,6 +284,12 @@ export * as Formatter from "./Formatter.ts"
|
|
|
290
284
|
*/
|
|
291
285
|
export * as Function from "./Function.ts"
|
|
292
286
|
|
|
287
|
+
/**
|
|
288
|
+
* @stability experimental
|
|
289
|
+
* @since 4.0.0
|
|
290
|
+
*/
|
|
291
|
+
export * as Glob from "./Glob.ts"
|
|
292
|
+
|
|
293
293
|
/**
|
|
294
294
|
* @stability unstable
|
|
295
295
|
* @since 4.0.0
|