effect 4.0.6 → 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/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/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 +30 -9
- 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/Data.d.ts +54 -235
- package/dist/Data.d.ts.map +1 -1
- package/dist/Data.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 +165 -8
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +12 -2
- package/dist/Effect.js.map +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/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/Formatter.d.ts.map +1 -1
- package/dist/Formatter.js +27 -13
- package/dist/Formatter.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/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/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/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 +51 -0
- package/dist/Pool.d.ts.map +1 -1
- package/dist/Pool.js +136 -36
- 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/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/Ref.d.ts.map +1 -1
- package/dist/Ref.js +8 -0
- package/dist/Ref.js.map +1 -1
- package/dist/Schedule.d.ts +18 -1
- package/dist/Schedule.d.ts.map +1 -1
- package/dist/Schedule.js +8 -3
- package/dist/Schedule.js.map +1 -1
- package/dist/Schema.d.ts +690 -49
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +687 -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/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/SchemaParser.d.ts.map +1 -1
- package/dist/SchemaParser.js +48 -22
- package/dist/SchemaParser.js.map +1 -1
- package/dist/SchemaRepresentation.d.ts +33 -10
- package/dist/SchemaRepresentation.d.ts.map +1 -1
- package/dist/SchemaRepresentation.js +39 -13
- package/dist/SchemaRepresentation.js.map +1 -1
- package/dist/SchemaTransformation.d.ts +12 -4
- package/dist/SchemaTransformation.d.ts.map +1 -1
- package/dist/SchemaTransformation.js +15 -5
- 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 +94 -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 +13 -4
- package/dist/Stream.d.ts.map +1 -1
- package/dist/Stream.js +31 -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/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/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/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/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 +630 -29
- package/dist/ai/McpServer.d.ts.map +1 -1
- package/dist/ai/McpServer.js +583 -131
- 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/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 +17 -28
- package/dist/ai/Response.d.ts.map +1 -1
- package/dist/ai/Response.js +5 -10
- package/dist/ai/Response.js.map +1 -1
- package/dist/ai/Tool.d.ts +43 -1
- 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/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 +21 -0
- package/dist/cli/Argument.d.ts.map +1 -1
- package/dist/cli/Argument.js +7 -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 +220 -7
- package/dist/cli/CliOutput.d.ts.map +1 -1
- package/dist/cli/CliOutput.js +156 -43
- package/dist/cli/CliOutput.js.map +1 -1
- package/dist/cli/Command.d.ts +47 -16
- package/dist/cli/Command.d.ts.map +1 -1
- package/dist/cli/Command.js +67 -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 +122 -0
- package/dist/cli/Flag.d.ts.map +1 -1
- package/dist/cli/Flag.js +42 -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/HelpDoc.d.ts +15 -1
- package/dist/cli/HelpDoc.d.ts.map +1 -1
- package/dist/cli/Param.d.ts +15 -0
- package/dist/cli/Param.d.ts.map +1 -1
- package/dist/cli/Param.js +23 -2
- 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/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/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/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 +151 -49
- package/dist/cluster/Sharding.js.map +1 -1
- package/dist/cluster/ShardingConfig.d.ts +76 -0
- 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/Snowflake.d.ts.map +1 -1
- package/dist/cluster/Snowflake.js +3 -7
- package/dist/cluster/Snowflake.js.map +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 +109 -46
- 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/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/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/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/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 +17 -3
- package/dist/encoding/Toml.d.ts.map +1 -1
- package/dist/encoding/Toml.js +124 -31
- 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.d.ts.map +1 -1
- package/dist/eventlog/SqlEventJournal.js +47 -27
- 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/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/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 +153 -10
- 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 +502 -8
- package/dist/http/HttpClient.d.ts.map +1 -1
- package/dist/http/HttpClient.js +296 -12
- 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 +9 -5
- package/dist/http/HttpClientRequest.d.ts.map +1 -1
- package/dist/http/HttpClientRequest.js +3 -4
- 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/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 +11 -3
- package/dist/http/HttpServerRequest.d.ts.map +1 -1
- package/dist/http/HttpServerRequest.js +77 -25
- 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/HttpStaticServer.d.ts.map +1 -1
- package/dist/http/HttpStaticServer.js +48 -21
- package/dist/http/HttpStaticServer.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/MultipartParser/internal/contentType.js +3 -3
- 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/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/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/compression.js +4 -5
- package/dist/http/internal/compression.js.map +1 -1
- package/dist/http/internal/decompression.js +6 -2
- 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 +33 -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 +43 -13
- package/dist/http-api/HttpApiBuilder.js.map +1 -1
- package/dist/http-api/HttpApiClient.d.ts +140 -7
- package/dist/http-api/HttpApiClient.d.ts.map +1 -1
- package/dist/http-api/HttpApiClient.js +193 -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 +123 -32
- 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 +142 -33
- package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
- package/dist/http-api/HttpApiSchema.js +123 -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/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/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 +46 -27
- 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/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/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 +11 -1
- 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/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 +9 -6
- 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/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/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/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/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/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/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 +237 -71
- 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 +35 -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/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/AsyncResult.d.ts +1 -1
- package/dist/reactivity/AsyncResult.d.ts.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 +59 -24
- 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 +14 -0
- package/dist/rpc/RpcSerialization.d.ts.map +1 -1
- package/dist/rpc/RpcSerialization.js +26 -8
- 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 -56
- 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/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 +2 -20
- package/dist/sql/Migrator.d.ts.map +1 -1
- package/dist/sql/Migrator.js +13 -55
- 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 +9 -4
- package/dist/sql/SqlClient.d.ts.map +1 -1
- package/dist/sql/SqlClient.js +13 -10
- 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 +27 -6
- package/dist/sql/Statement.d.ts.map +1 -1
- package/dist/sql/Statement.js +21 -15
- 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/DurableDeferred.d.ts.map +1 -1
- package/dist/workflow/DurableDeferred.js +21 -2
- package/dist/workflow/DurableDeferred.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/Arbitrary.ts +10 -2
- package/src/BigDecimal.ts +3 -0
- package/src/Channel.ts +64 -29
- package/src/Config.ts +7 -1
- package/src/Context.ts +34 -10
- package/src/Cron.ts +178 -29
- package/src/Data.ts +60 -265
- package/src/Duration.ts +140 -0
- package/src/Effect.ts +915 -86
- package/src/Equal.ts +8 -1
- package/src/Exit.ts +3 -3
- package/src/FileSystem.ts +65 -4
- package/src/Formatter.ts +28 -13
- package/src/Glob.ts +205 -0
- package/src/Hash.ts +4 -1
- package/src/JsonPatch.ts +4 -0
- package/src/JsonSchema.ts +12 -40
- package/src/Match.ts +127 -0
- 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 +182 -52
- package/src/PubSub.ts +5 -6
- package/src/Random.ts +3 -3
- package/src/RcMap.ts +5 -1
- package/src/Ref.ts +8 -0
- package/src/Schedule.ts +27 -4
- package/src/Schema.ts +1237 -87
- package/src/SchemaAST.ts +20 -20
- package/src/SchemaGetter.ts +27 -11
- package/src/SchemaParser.ts +51 -18
- package/src/SchemaRepresentation.ts +50 -34
- package/src/SchemaTransformation.ts +17 -5
- package/src/ScopedCache.ts +5 -9
- package/src/Semaphore.ts +208 -40
- package/src/Sink.ts +15 -2
- package/src/Stream.ts +48 -22
- package/src/String.ts +3 -0
- package/src/Terminal.ts +19 -1
- package/src/Tracer.ts +15 -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/LanguageModel.ts +9 -0
- package/src/ai/McpServer.ts +1283 -299
- package/src/ai/McpTest.ts +380 -0
- package/src/ai/Prompt.ts +65 -0
- package/src/ai/Response.ts +36 -31
- package/src/ai/Tool.ts +65 -10
- package/src/ai/Toolkit.ts +4 -1
- 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 +21 -0
- package/src/cli/CliError.ts +90 -3
- package/src/cli/CliOutput.ts +300 -55
- package/src/cli/Command.ts +76 -41
- package/src/cli/Completions.ts +51 -0
- package/src/cli/Flag.ts +122 -0
- package/src/cli/GlobalFlag.ts +6 -7
- package/src/cli/HelpDoc.ts +18 -1
- package/src/cli/Param.ts +35 -6
- package/src/cli/Primitive.ts +16 -1
- package/src/cli/Prompt.ts +1 -0
- package/src/cli/TerminalCapabilities.ts +6 -3
- package/src/cli/internal/completions/bash.ts +79 -29
- package/src/cli/internal/help.ts +21 -9
- package/src/cluster/ClusterWorkflowEngine.ts +46 -16
- package/src/cluster/MessageStorage.ts +19 -14
- package/src/cluster/Sharding.ts +176 -47
- package/src/cluster/ShardingConfig.ts +43 -0
- package/src/cluster/SingleRunner.ts +3 -3
- package/src/cluster/Snowflake.ts +3 -7
- package/src/cluster/SqlMessageStorage.ts +49 -17
- package/src/cluster/SqlRunnerStorage.ts +143 -70
- package/src/cluster/internal/entityManager.ts +75 -22
- 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/devtools/DevToolsClient.ts +2 -0
- package/src/encoding/Base64.ts +38 -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/Sse.ts +4 -3
- package/src/encoding/Toml.ts +117 -35
- 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 +68 -45
- 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/conflicts.ts +0 -4
- package/src/eventlog/internal/identityRootSecretDerivation.ts +93 -123
- package/src/eventlog/internal/remoteCompaction.ts +92 -0
- package/src/http/Cookies.ts +291 -12
- package/src/http/FetchHttpClient.ts +88 -16
- package/src/http/HttpClient.ts +636 -29
- package/src/http/HttpClientError.ts +35 -1
- package/src/http/HttpClientRequest.ts +21 -10
- package/src/http/HttpClientResponse.ts +3 -2
- package/src/http/HttpMethod.ts +10 -2
- 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 +101 -30
- package/src/http/HttpServerResponse.ts +3 -2
- package/src/http/HttpStaticServer.ts +51 -22
- package/src/http/HttpTraceContext.ts +7 -4
- package/src/http/MultipartParser/internal/contentType.ts +3 -3
- package/src/http/ProblemDetails.ts +149 -0
- package/src/http/UrlParams.ts +6 -1
- package/src/http/index.ts +6 -0
- package/src/http/internal/compression.ts +4 -5
- package/src/http/internal/decompression.ts +10 -4
- package/src/http/internal/httpBody.ts +10 -2
- package/src/http/internal/urlParams.ts +37 -0
- package/src/http-api/HttpApi.ts +3 -6
- package/src/http-api/HttpApiBuilder.ts +61 -19
- package/src/http-api/HttpApiClient.ts +284 -72
- package/src/http-api/HttpApiEndpoint.ts +135 -35
- package/src/http-api/HttpApiError.ts +250 -0
- package/src/http-api/HttpApiMiddleware.ts +95 -1
- package/src/http-api/HttpApiSchema.ts +236 -52
- 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/index.ts +6 -6
- package/src/internal/arbitrary/runner.ts +133 -36
- package/src/internal/core.ts +2 -0
- package/src/internal/effect.ts +58 -34
- package/src/internal/equal.ts +17 -0
- package/src/internal/glob.ts +736 -0
- package/src/internal/jsonSchema.ts +27 -0
- package/src/internal/matcher.ts +18 -1
- package/src/internal/persistence.ts +11 -0
- package/src/internal/rcRef.ts +4 -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 +11 -7
- 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/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/OtlpProxy.ts +314 -0
- package/src/observability/OtlpResource.ts +9 -1
- package/src/observability/OtlpTracer.ts +4 -0
- package/src/observability/index.ts +6 -0
- package/src/persistence/CircuitBreaker.ts +1678 -0
- package/src/persistence/KeyValueStore.ts +219 -22
- package/src/persistence/PersistedQueue.ts +128 -59
- package/src/persistence/Persistence.ts +20 -13
- package/src/persistence/Redis.ts +129 -8
- package/src/persistence/index.ts +6 -0
- package/src/process/ChildProcess.ts +285 -264
- package/src/process/ChildProcessSpawner.ts +46 -2
- package/src/process/CommandLine.ts +630 -0
- package/src/process/index.ts +6 -0
- package/src/reactivity/AsyncResult.ts +1 -1
- package/src/reactivity/Atom.ts +5 -5
- package/src/reactivity/AtomRegistry.ts +1 -1
- package/src/rpc/RpcClient.ts +75 -36
- package/src/rpc/RpcMessage.ts +10 -1
- package/src/rpc/RpcSerialization.ts +35 -9
- package/src/rpc/RpcServer.ts +176 -63
- package/src/rpc/RpcTest.ts +3 -0
- package/src/schema/Model.ts +26 -3
- package/src/sql/Migrator.ts +15 -69
- package/src/sql/MigratorFileSystem.ts +71 -0
- package/src/sql/SqlClient.ts +13 -20
- package/src/sql/SqlResolver.ts +23 -9
- package/src/sql/Statement.ts +38 -9
- package/src/sql/index.ts +1 -1
- package/src/testing/index.ts +0 -6
- package/src/workflow/DurableDeferred.ts +23 -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
|
@@ -121,7 +121,9 @@ export const make: (options: {
|
|
|
121
121
|
) => Effect.Effect<HttpServerResponse.HttpServerResponse, HttpServerError.HttpServerError> = Effect.fnUntraced(
|
|
122
122
|
function*(request, filePath, fileSize) {
|
|
123
123
|
const rangeHeader = request.method === "GET" ? request.headers["range"] : undefined
|
|
124
|
-
const shouldEvaluateConditionals = request.headers["if-
|
|
124
|
+
const shouldEvaluateConditionals = request.headers["if-match"] !== undefined ||
|
|
125
|
+
request.headers["if-unmodified-since"] !== undefined ||
|
|
126
|
+
request.headers["if-none-match"] !== undefined ||
|
|
125
127
|
request.headers["if-modified-since"] !== undefined
|
|
126
128
|
|
|
127
129
|
let fullResponse: HttpServerResponse.HttpServerResponse | undefined
|
|
@@ -446,6 +448,22 @@ const stripWeakEtagPrefix = (value: string): string => {
|
|
|
446
448
|
return /^w\//i.test(trimmed) ? trimmed.slice(2) : trimmed;
|
|
447
449
|
}
|
|
448
450
|
|
|
451
|
+
// If-Match uses strong comparison (RFC 9110 §13.1.1), so weak tags never
|
|
452
|
+
// match. Tags may contain commas, so the list is validated whole rather than
|
|
453
|
+
// split, and a malformed list matches nothing.
|
|
454
|
+
const entityTagList = /^[\s,]*(?:(?:W\/)?"[^"]*"\s*(?:,[\s,]*|$))*$/
|
|
455
|
+
const entityTag = /(?:W\/)?"[^"]*"/g
|
|
456
|
+
|
|
457
|
+
const matchesIfMatch = (ifMatch: string, etag: string | undefined): boolean => {
|
|
458
|
+
if (ifMatch.trim() === "*") {
|
|
459
|
+
return true
|
|
460
|
+
}
|
|
461
|
+
if (etag === undefined || !etag.startsWith("\"") || !entityTagList.test(ifMatch)) {
|
|
462
|
+
return false
|
|
463
|
+
}
|
|
464
|
+
return ifMatch.match(entityTag)?.includes(etag) ?? false
|
|
465
|
+
}
|
|
466
|
+
|
|
449
467
|
const matchesIfNoneMatch = (ifNoneMatch: string, etag: string | undefined): boolean => {
|
|
450
468
|
const normalizedEtag = etag === undefined ? undefined : stripWeakEtagPrefix(etag)
|
|
451
469
|
for (const candidate of ifNoneMatch.split(",")) {
|
|
@@ -463,18 +481,19 @@ const matchesIfNoneMatch = (ifNoneMatch: string, etag: string | undefined): bool
|
|
|
463
481
|
return false
|
|
464
482
|
}
|
|
465
483
|
|
|
466
|
-
// An invalid date on either side disables the precondition (RFC 9110 §13.1.3).
|
|
467
|
-
const
|
|
484
|
+
// An invalid date on either side disables the precondition (RFC 9110 §13.1.3–4).
|
|
485
|
+
const isModifiedSince = (since: string, lastModified: string | undefined): boolean | undefined => {
|
|
468
486
|
if (lastModified === undefined) {
|
|
469
|
-
return
|
|
487
|
+
return undefined
|
|
470
488
|
}
|
|
471
|
-
const
|
|
472
|
-
if (Result.isFailure(
|
|
473
|
-
return
|
|
489
|
+
const sinceDate = Headers.parseHttpDate(since)
|
|
490
|
+
if (Result.isFailure(sinceDate)) {
|
|
491
|
+
return undefined
|
|
474
492
|
}
|
|
475
493
|
const lastModifiedDate = Headers.parseHttpDate(lastModified)
|
|
476
|
-
return Result.isSuccess(lastModifiedDate)
|
|
477
|
-
DateTime.toEpochMillis(lastModifiedDate.success)
|
|
494
|
+
return Result.isSuccess(lastModifiedDate)
|
|
495
|
+
? DateTime.toEpochMillis(lastModifiedDate.success) > DateTime.toEpochMillis(sinceDate.success)
|
|
496
|
+
: undefined
|
|
478
497
|
}
|
|
479
498
|
|
|
480
499
|
// Only a strong entity-tag can match (RFC 9110 §13.1.5). Weak tags start
|
|
@@ -485,21 +504,18 @@ const matchesIfRange = (ifRange: string, etag: string | undefined): boolean => {
|
|
|
485
504
|
return value.startsWith("\"") && value === etag
|
|
486
505
|
}
|
|
487
506
|
|
|
507
|
+
// Headers a 304 must repeat from the 200 response (RFC 9110 §15.4.5), plus Last-Modified for revalidation.
|
|
508
|
+
const notModifiedHeaders = ["cache-control", "content-location", "date", "etag", "expires", "last-modified", "vary"]
|
|
509
|
+
|
|
488
510
|
const notModifiedResponse = (
|
|
489
511
|
response: HttpServerResponse.HttpServerResponse
|
|
490
512
|
): HttpServerResponse.HttpServerResponse => {
|
|
491
513
|
const headers: Record<string, string> = {}
|
|
492
|
-
const
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
if (cacheControl !== undefined) {
|
|
498
|
-
headers["Cache-Control"] = cacheControl
|
|
499
|
-
}
|
|
500
|
-
const lastModified = response.headers["last-modified"]
|
|
501
|
-
if (lastModified !== undefined) {
|
|
502
|
-
headers["Last-Modified"] = lastModified
|
|
514
|
+
for (const name of notModifiedHeaders) {
|
|
515
|
+
const value = response.headers[name]
|
|
516
|
+
if (value !== undefined) {
|
|
517
|
+
headers[name] = value
|
|
518
|
+
}
|
|
503
519
|
}
|
|
504
520
|
return HttpServerResponse.empty({
|
|
505
521
|
status: 304,
|
|
@@ -511,12 +527,25 @@ const evaluateConditionalRequest = (
|
|
|
511
527
|
request: HttpServerRequest.HttpServerRequest,
|
|
512
528
|
response: HttpServerResponse.HttpServerResponse
|
|
513
529
|
): HttpServerResponse.HttpServerResponse | undefined => {
|
|
530
|
+
const etag = response.headers["etag"]
|
|
531
|
+
const lastModified = response.headers["last-modified"]
|
|
532
|
+
const ifMatch = request.headers["if-match"]
|
|
533
|
+
if (ifMatch !== undefined) {
|
|
534
|
+
if (!matchesIfMatch(ifMatch, etag)) {
|
|
535
|
+
return HttpServerResponse.empty({ status: 412 })
|
|
536
|
+
}
|
|
537
|
+
} else {
|
|
538
|
+
const ifUnmodifiedSince = request.headers["if-unmodified-since"]
|
|
539
|
+
if (ifUnmodifiedSince !== undefined && isModifiedSince(ifUnmodifiedSince, lastModified) === true) {
|
|
540
|
+
return HttpServerResponse.empty({ status: 412 })
|
|
541
|
+
}
|
|
542
|
+
}
|
|
514
543
|
const ifNoneMatch = request.headers["if-none-match"]
|
|
515
544
|
if (ifNoneMatch !== undefined) {
|
|
516
|
-
return matchesIfNoneMatch(ifNoneMatch,
|
|
545
|
+
return matchesIfNoneMatch(ifNoneMatch, etag) ? notModifiedResponse(response) : undefined
|
|
517
546
|
}
|
|
518
547
|
const ifModifiedSince = request.headers["if-modified-since"]
|
|
519
|
-
if (ifModifiedSince !== undefined &&
|
|
548
|
+
if (ifModifiedSince !== undefined && isModifiedSince(ifModifiedSince, lastModified) === false) {
|
|
520
549
|
return notModifiedResponse(response)
|
|
521
550
|
}
|
|
522
551
|
return undefined
|
|
@@ -130,10 +130,11 @@ export const xb3: FromHeaders = (headers) => {
|
|
|
130
130
|
}))
|
|
131
131
|
}
|
|
132
132
|
|
|
133
|
-
const w3cTraceId = /^[0-9a-f]{32}$/
|
|
134
|
-
const w3cSpanId = /^[0-9a-f]{16}$/
|
|
133
|
+
const w3cTraceId = /^[0-9a-f]{32}$/
|
|
134
|
+
const w3cSpanId = /^[0-9a-f]{16}$/
|
|
135
|
+
const w3cTraceFlags = /^[0-9a-f]{2}$/
|
|
135
136
|
|
|
136
|
-
const b3TraceId = /^(?:[0-9a-f]{16}|[0-9a-f]{32})$/
|
|
137
|
+
const b3TraceId = /^(?:[0-9a-f]{16}|[0-9a-f]{32})$/
|
|
137
138
|
const isB3Ids = (traceId: string, spanId: string): boolean => b3TraceId.test(traceId) && w3cSpanId.test(spanId)
|
|
138
139
|
|
|
139
140
|
/**
|
|
@@ -141,7 +142,8 @@ const isB3Ids = (traceId: string, spanId: string): boolean => b3TraceId.test(tra
|
|
|
141
142
|
*
|
|
142
143
|
* **Details**
|
|
143
144
|
*
|
|
144
|
-
* Only version `00` headers with valid trace and span identifiers
|
|
145
|
+
* Only version `00` headers with valid trace and span identifiers and trace
|
|
146
|
+
* flags are accepted.
|
|
145
147
|
*
|
|
146
148
|
* @stability unstable
|
|
147
149
|
* @category decoding
|
|
@@ -160,6 +162,7 @@ export const w3c: FromHeaders = (headers) => {
|
|
|
160
162
|
case "00": {
|
|
161
163
|
if (
|
|
162
164
|
w3cTraceId.test(traceId) === false || w3cSpanId.test(spanId) === false ||
|
|
165
|
+
w3cTraceFlags.test(flags) === false ||
|
|
163
166
|
traceId === "00000000000000000000000000000000" || spanId === "0000000000000000"
|
|
164
167
|
) {
|
|
165
168
|
return Option.none()
|
|
@@ -16,14 +16,14 @@
|
|
|
16
16
|
* quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text )
|
|
17
17
|
*/
|
|
18
18
|
const paramRE =
|
|
19
|
-
/; *([!#$%&'*+.^\w`|~-]+)=("(?:[\
|
|
19
|
+
/; *([!#$%&'*+.^\w`|~-]+)=("(?:[\t\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u{10ffff}]|\\[\t\u0020-\u{10ffff}])*"|[!#$%&'*+.^\w`|~-]+) */gu
|
|
20
20
|
|
|
21
21
|
/**
|
|
22
22
|
* RegExp to match *( ";" disposition-parm ) in RFC 6266 sec 4.1, which allows
|
|
23
23
|
* optional whitespace around separators
|
|
24
24
|
*/
|
|
25
25
|
const dispositionParamRE =
|
|
26
|
-
/;[ \t]*([!#$%&'*+.^\w`|~-]+)[ \t]*=[ \t]*("(?:[\
|
|
26
|
+
/;[ \t]*([!#$%&'*+.^\w`|~-]+)[ \t]*=[ \t]*("(?:[\t\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u{10ffff}]|\\[\t\u0020-\u{10ffff}])*"|[!#$%&'*+.^\w`|~-]+)[ \t]*/gu
|
|
27
27
|
|
|
28
28
|
/**
|
|
29
29
|
* RegExp to match quoted-pair in RFC 7230 sec 3.2.6
|
|
@@ -31,7 +31,7 @@ const dispositionParamRE =
|
|
|
31
31
|
* quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text )
|
|
32
32
|
* obs-text = %x80-FF
|
|
33
33
|
*/
|
|
34
|
-
const quotedPairRE = /\\([\
|
|
34
|
+
const quotedPairRE = /\\([\t\u0020-\u{10ffff}])/gu
|
|
35
35
|
|
|
36
36
|
/**
|
|
37
37
|
* RegExp to match type in RFC 7231 sec 3.1.1.1
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RFC 9457 Problem Details values for HTTP responses.
|
|
3
|
+
*
|
|
4
|
+
* A problem details object is the `application/problem+json` body a server
|
|
5
|
+
* sends to describe an error. This module provides the reusable value shape,
|
|
6
|
+
* a lenient codec that follows the parsing rules of RFC 9457, and a response
|
|
7
|
+
* constructor. The `effect/http-api` modules build typed problem declarations,
|
|
8
|
+
* built-in error rendering and OpenAPI output on top of it.
|
|
9
|
+
*
|
|
10
|
+
* @stability unstable
|
|
11
|
+
* @since 4.0.6
|
|
12
|
+
*/
|
|
13
|
+
import * as Effect from "../Effect.ts"
|
|
14
|
+
import * as Schema_ from "../Schema.ts"
|
|
15
|
+
import * as HttpServerResponse from "./HttpServerResponse.ts"
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* The media type of a problem details response body.
|
|
19
|
+
*
|
|
20
|
+
* @stability unstable
|
|
21
|
+
* @category constants
|
|
22
|
+
* @since 4.0.6
|
|
23
|
+
*/
|
|
24
|
+
export const contentType = "application/problem+json"
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* The problem type URI RFC 9457 assigns to problems that only carry an HTTP
|
|
28
|
+
* status.
|
|
29
|
+
*
|
|
30
|
+
* @stability unstable
|
|
31
|
+
* @category constants
|
|
32
|
+
* @since 4.0.6
|
|
33
|
+
*/
|
|
34
|
+
export const blankType = "about:blank"
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* A decoded RFC 9457 problem details object.
|
|
38
|
+
*
|
|
39
|
+
* **Details**
|
|
40
|
+
*
|
|
41
|
+
* The standard members are `type`, `status`, `title`, `detail` and
|
|
42
|
+
* `instance`. Any other member is an extension and is kept as-is.
|
|
43
|
+
*
|
|
44
|
+
* @stability unstable
|
|
45
|
+
* @category models
|
|
46
|
+
* @since 4.0.6
|
|
47
|
+
*/
|
|
48
|
+
export interface ProblemDetails {
|
|
49
|
+
readonly type: string
|
|
50
|
+
readonly status?: number
|
|
51
|
+
readonly title?: string
|
|
52
|
+
readonly detail?: string
|
|
53
|
+
readonly instance?: string
|
|
54
|
+
readonly [extension: string]: unknown
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* The encoded form of a problem details object, where `type` may be omitted.
|
|
59
|
+
*
|
|
60
|
+
* @stability unstable
|
|
61
|
+
* @category models
|
|
62
|
+
* @since 4.0.6
|
|
63
|
+
*/
|
|
64
|
+
export interface ProblemDetailsEncoded {
|
|
65
|
+
readonly type?: string
|
|
66
|
+
readonly status?: number
|
|
67
|
+
readonly title?: string
|
|
68
|
+
readonly detail?: string
|
|
69
|
+
readonly instance?: string
|
|
70
|
+
readonly [extension: string]: unknown
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* A standard member that is dropped when it is missing or has the wrong JSON
|
|
75
|
+
* type, as RFC 9457 section 3.1 requires.
|
|
76
|
+
*
|
|
77
|
+
* @internal
|
|
78
|
+
*/
|
|
79
|
+
export const optionalMember = <S extends Schema_.Constraint>(schema: S) =>
|
|
80
|
+
Schema_.optionalKey(schema).pipe(Schema_.catchDecoding(() => Effect.succeedNone))
|
|
81
|
+
|
|
82
|
+
const withFallback = <S extends Schema_.Constraint>(
|
|
83
|
+
schema: S,
|
|
84
|
+
value: S["Encoded"] & S["Type"]
|
|
85
|
+
): Schema_.middlewareDecoding<Schema_.withDecodingDefaultKey<S>, S["DecodingServices"]> =>
|
|
86
|
+
Schema_.withDecodingDefaultKey<S>(Effect.succeed(value))(schema).pipe(
|
|
87
|
+
Schema_.catchDecoding(() => Effect.succeedSome(value))
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* A required member that decodes to a fixed value when it is missing or has
|
|
92
|
+
* the wrong JSON type. The value is also the constructor default.
|
|
93
|
+
*
|
|
94
|
+
* @internal
|
|
95
|
+
*/
|
|
96
|
+
export const fixedMember = <const L extends string | number>(value: L) => withFallback(Schema_.tag(value), value)
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* The lenient codec for problem details objects.
|
|
100
|
+
*
|
|
101
|
+
* **Details**
|
|
102
|
+
*
|
|
103
|
+
* Decoding follows RFC 9457: a missing `type` defaults to `about:blank`,
|
|
104
|
+
* standard members with the wrong JSON type are ignored, and unknown members
|
|
105
|
+
* are kept as extensions. Encoding always emits `type`.
|
|
106
|
+
*
|
|
107
|
+
* **Example** (Decoding a problem with an extension)
|
|
108
|
+
*
|
|
109
|
+
* ```ts import.meta.vitest
|
|
110
|
+
* import { Schema } from "effect"
|
|
111
|
+
* import { ProblemDetails } from "effect/http"
|
|
112
|
+
*
|
|
113
|
+
* const problem = Schema.decodeUnknownSync(ProblemDetails.Schema)({
|
|
114
|
+
* status: 404,
|
|
115
|
+
* detail: "No such user",
|
|
116
|
+
* traceId: "abc-123"
|
|
117
|
+
* })
|
|
118
|
+
* problem // => { type: "about:blank", status: 404, detail: "No such user", traceId: "abc-123" }
|
|
119
|
+
* ```
|
|
120
|
+
*
|
|
121
|
+
* @stability unstable
|
|
122
|
+
* @category schemas
|
|
123
|
+
* @since 4.0.6
|
|
124
|
+
*/
|
|
125
|
+
export const Schema: Schema_.Codec<ProblemDetails, ProblemDetailsEncoded> = Schema_.StructWithRest(
|
|
126
|
+
Schema_.Struct({
|
|
127
|
+
type: withFallback(Schema_.String, blankType),
|
|
128
|
+
status: optionalMember(Schema_.Number),
|
|
129
|
+
title: optionalMember(Schema_.String),
|
|
130
|
+
detail: optionalMember(Schema_.String),
|
|
131
|
+
instance: optionalMember(Schema_.String)
|
|
132
|
+
}),
|
|
133
|
+
[Schema_.Record(Schema_.String, Schema_.Unknown)]
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Renders a problem details object as an `application/problem+json` response.
|
|
138
|
+
*
|
|
139
|
+
* **Details**
|
|
140
|
+
*
|
|
141
|
+
* The response status is the problem's `status` member, or `500` when it is
|
|
142
|
+
* absent.
|
|
143
|
+
*
|
|
144
|
+
* @stability unstable
|
|
145
|
+
* @category constructors
|
|
146
|
+
* @since 4.0.6
|
|
147
|
+
*/
|
|
148
|
+
export const toResponse = (problem: ProblemDetails): HttpServerResponse.HttpServerResponse =>
|
|
149
|
+
HttpServerResponse.jsonUnsafe(problem, { status: problem.status ?? 500, contentType })
|
package/src/http/UrlParams.ts
CHANGED
|
@@ -870,7 +870,9 @@ const currentRedactedNames = (): ReadonlyArray<string | RegExp> =>
|
|
|
870
870
|
*
|
|
871
871
|
* **Details**
|
|
872
872
|
*
|
|
873
|
-
* Defaults
|
|
873
|
+
* Defaults match the OpenTelemetry `url.full` list: `X-Amz-Signature`,
|
|
874
|
+
* `X-Amz-Credential`, `X-Amz-Security-Token`, `AWSAccessKeyId`, `Signature`,
|
|
875
|
+
* `sig` and `X-Goog-Signature`.
|
|
874
876
|
* A custom list replaces the defaults. Matching uses `isRedactedName`.
|
|
875
877
|
* Redaction leaves request URLs and parameter values unchanged. `Redacted`
|
|
876
878
|
* values are redacted regardless of this list.
|
|
@@ -883,6 +885,9 @@ export const CurrentRedactedNames = Context.Reference<
|
|
|
883
885
|
ReadonlyArray<string | RegExp>
|
|
884
886
|
>("effect/http/UrlParams/CurrentRedactedNames", {
|
|
885
887
|
defaultValue: () => [
|
|
888
|
+
"X-Amz-Signature",
|
|
889
|
+
"X-Amz-Credential",
|
|
890
|
+
"X-Amz-Security-Token",
|
|
886
891
|
"AWSAccessKeyId",
|
|
887
892
|
"Signature",
|
|
888
893
|
"sig",
|
package/src/http/index.ts
CHANGED
|
@@ -167,6 +167,12 @@ export * as Multipart from "./Multipart.ts"
|
|
|
167
167
|
*/
|
|
168
168
|
export * as MultipartParser from "./MultipartParser.ts"
|
|
169
169
|
|
|
170
|
+
/**
|
|
171
|
+
* @stability unstable
|
|
172
|
+
* @since 4.0.6
|
|
173
|
+
*/
|
|
174
|
+
export * as ProblemDetails from "./ProblemDetails.ts"
|
|
175
|
+
|
|
170
176
|
/**
|
|
171
177
|
* @stability unstable
|
|
172
178
|
* @since 4.0.0
|
|
@@ -155,13 +155,12 @@ const acceptMember = /^([a-z0-9!#$%&'*+.^_`|~-]+)(?:;q=(0(?:\.[0-9]{0,3})?|1(?:\
|
|
|
155
155
|
* @internal
|
|
156
156
|
*/
|
|
157
157
|
export const parseAcceptEncoding = (header: string): ReadonlyMap<string, number> | undefined => {
|
|
158
|
-
const trimmed = header.trim()
|
|
159
|
-
if (trimmed === "") {
|
|
160
|
-
return undefined
|
|
161
|
-
}
|
|
162
158
|
const accepted = new Map<string, number>()
|
|
163
|
-
for (const part of
|
|
159
|
+
for (const part of header.split(",")) {
|
|
164
160
|
const member = part.trim().toLowerCase().replace(/[ \t]*;[ \t]*/g, ";")
|
|
161
|
+
if (member === "") {
|
|
162
|
+
continue
|
|
163
|
+
}
|
|
165
164
|
const match = acceptMember.exec(member)
|
|
166
165
|
if (match === null) {
|
|
167
166
|
return undefined
|
|
@@ -8,12 +8,12 @@ import type * as Socket from "../../socket/Socket.ts"
|
|
|
8
8
|
import * as Stream from "../../Stream.ts"
|
|
9
9
|
import * as Headers from "../Headers.ts"
|
|
10
10
|
import * as HttpIncomingMessage from "../HttpIncomingMessage.ts"
|
|
11
|
-
import type { HttpMethod } from "../HttpMethod.ts"
|
|
12
11
|
import { HttpServerError, RequestParseError } from "../HttpServerError.ts"
|
|
13
12
|
import * as HttpServerRequest from "../HttpServerRequest.ts"
|
|
14
13
|
import * as Multipart from "../Multipart.ts"
|
|
15
14
|
import * as UrlParams from "../UrlParams.ts"
|
|
16
15
|
import * as lazyStream from "./lazyStream.ts"
|
|
16
|
+
import * as internalUrlParams from "./urlParams.ts"
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* @internal
|
|
@@ -100,7 +100,7 @@ export class DecompressedRequest extends Inspectable.Class implements HttpServer
|
|
|
100
100
|
return this.inner.originalUrl
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
-
get method():
|
|
103
|
+
get method(): string {
|
|
104
104
|
return this.inner.method
|
|
105
105
|
}
|
|
106
106
|
|
|
@@ -124,6 +124,12 @@ export class DecompressedRequest extends Inspectable.Class implements HttpServer
|
|
|
124
124
|
return this.inner.upgrade
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
+
upgradeWith(
|
|
128
|
+
options: { readonly headers?: Headers.Input | undefined }
|
|
129
|
+
): Effect.Effect<Socket.Socket, HttpServerError> {
|
|
130
|
+
return this.inner.upgradeWith(options)
|
|
131
|
+
}
|
|
132
|
+
|
|
127
133
|
// Platform accessors such as `NodeHttpServerRequest.toServerResponse` read
|
|
128
134
|
// the response handle from the request.
|
|
129
135
|
get response(): unknown {
|
|
@@ -182,9 +188,9 @@ export class DecompressedRequest extends Inspectable.Class implements HttpServer
|
|
|
182
188
|
}
|
|
183
189
|
|
|
184
190
|
get urlParamsBody(): Effect.Effect<UrlParams.UrlParams, HttpServerError> {
|
|
185
|
-
return Effect.flatMap(this.
|
|
191
|
+
return Effect.flatMap(this.bytes, (bytes) =>
|
|
186
192
|
Effect.try({
|
|
187
|
-
try: () => UrlParams.fromInput(
|
|
193
|
+
try: () => UrlParams.fromInput(internalUrlParams.fromBody(bytes)),
|
|
188
194
|
catch: (cause) => this.parseError(cause)
|
|
189
195
|
}))
|
|
190
196
|
}
|
|
@@ -11,9 +11,17 @@ export const updateHeaders = (headers: Headers.Headers, body: HttpBody.HttpBody)
|
|
|
11
11
|
headers = body.contentType === undefined
|
|
12
12
|
? Headers.remove(headers, "content-type")
|
|
13
13
|
: Headers.set(headers, "content-type", body.contentType)
|
|
14
|
-
return body
|
|
14
|
+
return updateContentLength(headers, body)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @internal
|
|
19
|
+
*/
|
|
20
|
+
export const updateContentLength = (headers: Headers.Headers, body: HttpBody.HttpBody): Headers.Headers => {
|
|
21
|
+
const contentLength = body._tag === "Empty" || body._tag === "FormData" ? undefined : body.contentLength
|
|
22
|
+
return contentLength === undefined
|
|
15
23
|
? Headers.remove(headers, "content-length")
|
|
16
|
-
: Headers.set(headers, "content-length",
|
|
24
|
+
: Headers.set(headers, "content-length", contentLength.toString())
|
|
17
25
|
}
|
|
18
26
|
|
|
19
27
|
/**
|
|
@@ -3,3 +3,40 @@ import * as Redacted from "../../Redacted.ts"
|
|
|
3
3
|
/** @internal */
|
|
4
4
|
export const unwrap = (value: string | Redacted.Redacted): string =>
|
|
5
5
|
typeof value === "string" ? value : Redacted.value(value)
|
|
6
|
+
|
|
7
|
+
/** @internal */
|
|
8
|
+
export const stripSearchAndHash = (url: string): string => {
|
|
9
|
+
const queryIndex = url.indexOf("?")
|
|
10
|
+
const hashIndex = url.indexOf("#")
|
|
11
|
+
|
|
12
|
+
if (queryIndex === -1) {
|
|
13
|
+
return hashIndex === -1 ? url : url.slice(0, hashIndex)
|
|
14
|
+
}
|
|
15
|
+
if (hashIndex === -1) {
|
|
16
|
+
return url.slice(0, queryIndex)
|
|
17
|
+
}
|
|
18
|
+
return url.slice(0, Math.min(queryIndex, hashIndex))
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// URL-encoded bodies keep a leading U+FEFF as form data
|
|
22
|
+
const bodyDecoder = new TextDecoder("utf-8", { ignoreBOM: true })
|
|
23
|
+
|
|
24
|
+
/** @internal */
|
|
25
|
+
export const fromBody = (bytes: ArrayBuffer | Uint8Array): URLSearchParams =>
|
|
26
|
+
// A leading "?" is form data; URLSearchParams would drop it as a query prefix.
|
|
27
|
+
new URLSearchParams(bodyDecoder.decode(bytes).replace(/^\?/, "%3F"))
|
|
28
|
+
|
|
29
|
+
const originForm = /^\/(?![/\\])/
|
|
30
|
+
|
|
31
|
+
/** @internal */
|
|
32
|
+
export const toPath = (url: string): string => {
|
|
33
|
+
// Origin-form targets and "*" are already paths; absolute URLs can carry credentials.
|
|
34
|
+
if (url === "*" || originForm.test(url)) {
|
|
35
|
+
return stripSearchAndHash(url)
|
|
36
|
+
}
|
|
37
|
+
try {
|
|
38
|
+
return new URL(url, "http://localhost").pathname
|
|
39
|
+
} catch {
|
|
40
|
+
return "<invalid URL>"
|
|
41
|
+
}
|
|
42
|
+
}
|
package/src/http-api/HttpApi.ts
CHANGED
|
@@ -371,12 +371,9 @@ export class AdditionalSchemas extends Context.Service<
|
|
|
371
371
|
*
|
|
372
372
|
* Header codecs receive all HTTP headers, including undeclared transport
|
|
373
373
|
* headers such as `content-type`, `content-length`, `host`, `user-agent` and
|
|
374
|
-
* proxy headers. Without `HeadersParseOptions`, headers use `ParseOptions
|
|
375
|
-
*
|
|
376
|
-
*
|
|
377
|
-
* responses with transport headers.
|
|
378
|
-
* - `onExcessProperty: "preserve"` includes transport headers in the decoded
|
|
379
|
-
* value.
|
|
374
|
+
* proxy headers. Without `HeadersParseOptions`, headers use `ParseOptions`, so
|
|
375
|
+
* `onExcessProperty: "error"` rejects real requests and `WithHeaders` responses
|
|
376
|
+
* with transport headers.
|
|
380
377
|
*
|
|
381
378
|
* Set `HeadersParseOptions` to `{}` at the API level to use Schema defaults for
|
|
382
379
|
* headers, even if an endpoint sets `ParseOptions`.
|
|
@@ -90,19 +90,33 @@ export const layer = <Id extends string, Groups extends HttpApiGroup.Constraint>
|
|
|
90
90
|
| Path
|
|
91
91
|
>()
|
|
92
92
|
const routes: Array<HttpRouter.Route<any, any>> = []
|
|
93
|
+
const routeOwners = new Map<string, string>()
|
|
93
94
|
const availableGroups = Array.from(services.mapUnsafe.keys()).filter((key) =>
|
|
94
95
|
key.startsWith("effect/http-api/HttpApiGroup/")
|
|
95
96
|
)
|
|
96
97
|
const groups = Object.values(api.groups) as ReadonlyArray<HttpApiGroup.Top>
|
|
97
98
|
for (const group of groups) {
|
|
98
|
-
const
|
|
99
|
-
if (
|
|
99
|
+
const service = services.mapUnsafe.get(group.key) as GroupService | undefined
|
|
100
|
+
if (service === undefined) {
|
|
100
101
|
const available = availableGroups.length === 0 ? "none" : availableGroups.join(", ")
|
|
101
102
|
return yield* Effect.die(
|
|
102
103
|
`HttpApiGroup "${group.identifier}" not found (key: "${group.key}"). Did you forget to provide HttpApiBuilder.group(api, "${group.identifier}", ...)? Available groups: ${available}`
|
|
103
104
|
)
|
|
104
105
|
}
|
|
105
|
-
|
|
106
|
+
for (const { endpoint } of service.handlers.values()) {
|
|
107
|
+
const owner = `${group.identifier}.${endpoint.identifier}`
|
|
108
|
+
const key = `${endpoint.method} ${HttpApiPath.toRouterPath(endpoint.path, endpoint.params)}`
|
|
109
|
+
const existing = routeOwners.get(key)
|
|
110
|
+
if (existing !== undefined) {
|
|
111
|
+
return yield* Effect.die(
|
|
112
|
+
new Error(
|
|
113
|
+
`HttpApiEndpoint "${owner}" (${endpoint.method} ${endpoint.path}) has the same method and path as "${existing}". Declare one endpoint whose query, headers, payload or success schemas cover each variant instead.`
|
|
114
|
+
)
|
|
115
|
+
)
|
|
116
|
+
}
|
|
117
|
+
routeOwners.set(key, owner)
|
|
118
|
+
}
|
|
119
|
+
routes.push(...service.routes)
|
|
106
120
|
}
|
|
107
121
|
yield* (router.addAll(routes) as Effect.Effect<void>)
|
|
108
122
|
if (options?.openapiPath) {
|
|
@@ -159,12 +173,8 @@ export const group = <
|
|
|
159
173
|
for (const item of handlers.handlers.values()) {
|
|
160
174
|
routes.push(handlerToRoute(api, group as any, item, services))
|
|
161
175
|
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
routes,
|
|
165
|
-
handlers: handlers.handlers
|
|
166
|
-
}]])
|
|
167
|
-
)
|
|
176
|
+
const service: GroupService = { routes, handlers: handlers.handlers }
|
|
177
|
+
return Context.makeUnsafe(new Map([[group.key, service]]))
|
|
168
178
|
})) as any
|
|
169
179
|
|
|
170
180
|
/**
|
|
@@ -245,6 +255,14 @@ export interface HandlerRuntime {
|
|
|
245
255
|
readonly uninterruptible: boolean
|
|
246
256
|
}
|
|
247
257
|
|
|
258
|
+
/**
|
|
259
|
+
* @internal
|
|
260
|
+
*/
|
|
261
|
+
export interface GroupService {
|
|
262
|
+
readonly routes: Array<HttpRouter.Route<any, any>>
|
|
263
|
+
readonly handlers: Map<string, HandlerRuntime>
|
|
264
|
+
}
|
|
265
|
+
|
|
248
266
|
type HandleAllEntry<Endpoint extends HttpApiEndpoint.Constraint> =
|
|
249
267
|
| HttpApiEndpoint.Handler<
|
|
250
268
|
Endpoint,
|
|
@@ -939,6 +957,12 @@ function handlerToHttpEffect(
|
|
|
939
957
|
const encodeStream = makeStreamEncoder(endpoint, options.success)
|
|
940
958
|
const encodeWithHeaders = makeWithHeadersEncoder(endpoint, options.success, options.headers)
|
|
941
959
|
const upgrade = getUpgradeSuccessSchema(endpoint)
|
|
960
|
+
// The handler of a mixed endpoint may decline the upgrade and return one of the other successes.
|
|
961
|
+
const upgradeOnly = upgrade !== undefined && endpoint.success.size === 1
|
|
962
|
+
const encodeUpgradeHeaders = UndefinedOr.map(
|
|
963
|
+
upgrade?.headers,
|
|
964
|
+
(schema) => Schema.encodeUnknownEffect(schema, options.headers)
|
|
965
|
+
)
|
|
942
966
|
|
|
943
967
|
const shouldParsePayload = endpoint.payload.size > 0 && !isRaw
|
|
944
968
|
const payloadBy = shouldParsePayload ? buildPayloadDecoders(endpoint.payload, options.payload) : undefined
|
|
@@ -967,6 +991,24 @@ function handlerToHttpEffect(
|
|
|
967
991
|
if (decodeQuery) {
|
|
968
992
|
request.query = yield* HttpApiSchemaError.wrap("Query", decodeQuery(query))
|
|
969
993
|
}
|
|
994
|
+
let upgraded = false
|
|
995
|
+
if (upgrade !== undefined) {
|
|
996
|
+
if (!isUpgradeRequest(httpRequest, upgrade.protocol)) {
|
|
997
|
+
return upgradeRequired(upgrade.protocol)
|
|
998
|
+
}
|
|
999
|
+
request.upgrade = (options?: { readonly headers?: unknown }) =>
|
|
1000
|
+
Effect.suspend(() => {
|
|
1001
|
+
upgraded = true
|
|
1002
|
+
return Effect.orDie(
|
|
1003
|
+
encodeUpgradeHeaders === undefined
|
|
1004
|
+
? httpRequest.upgrade
|
|
1005
|
+
: Effect.flatMap(
|
|
1006
|
+
HttpApiSchemaError.wrap("ResponseHeaders", encodeUpgradeHeaders(options?.headers)),
|
|
1007
|
+
(headers) => httpRequest.upgradeWith({ headers: headers as Record<string, string> })
|
|
1008
|
+
)
|
|
1009
|
+
)
|
|
1010
|
+
})
|
|
1011
|
+
}
|
|
970
1012
|
if (payloadBy) {
|
|
971
1013
|
const result = decodePayload(payloadBy, httpRequest, query)
|
|
972
1014
|
if (Response.isHttpServerResponse(result)) {
|
|
@@ -976,17 +1018,14 @@ function handlerToHttpEffect(
|
|
|
976
1018
|
request.payload = yield* HttpApiSchemaError.wrap("Payload", result)
|
|
977
1019
|
}
|
|
978
1020
|
}
|
|
979
|
-
if (upgrade !== undefined) {
|
|
980
|
-
if (!isUpgradeRequest(httpRequest, upgrade.protocol)) {
|
|
981
|
-
return upgradeRequired(upgrade.protocol)
|
|
982
|
-
}
|
|
983
|
-
request.socket = yield* Effect.orDie(httpRequest.upgrade)
|
|
984
|
-
}
|
|
985
1021
|
let response = yield* handler(request)
|
|
986
1022
|
if (Response.isHttpServerResponse(response)) {
|
|
987
1023
|
return response
|
|
988
1024
|
}
|
|
989
|
-
if (
|
|
1025
|
+
if (upgradeOnly || upgraded) {
|
|
1026
|
+
if (response !== undefined && !upgradeOnly) {
|
|
1027
|
+
return yield* Effect.die(new Error("Cannot return a success value after calling upgrade()"))
|
|
1028
|
+
}
|
|
990
1029
|
// The server replaces this with the 101 once the connection is upgraded.
|
|
991
1030
|
return Response.empty()
|
|
992
1031
|
}
|
|
@@ -1337,9 +1376,12 @@ function makeSuccessSchema(
|
|
|
1337
1376
|
endpoint: HttpApiEndpoint.Top,
|
|
1338
1377
|
headersOptions: SchemaAST.ParseOptions | undefined
|
|
1339
1378
|
): Schema.ConstraintEncoder<HttpServerResponse, unknown> {
|
|
1340
|
-
const schemas =
|
|
1341
|
-
|
|
1342
|
-
|
|
1379
|
+
const schemas: Array<Schema.ConstraintEncoder<HttpServerResponse, unknown>> = []
|
|
1380
|
+
for (const schema of HttpApiEndpoint.getSuccessSchemas(endpoint)) {
|
|
1381
|
+
// The 101 is written by the transport, so the upgrade has no response encoder.
|
|
1382
|
+
if (HttpApiSchema.isUpgrade(schema)) continue
|
|
1383
|
+
schemas.push(toResponseSuccessSchema(schema, headersOptions))
|
|
1384
|
+
}
|
|
1343
1385
|
return schemas.length === 1 ? schemas[0] : Schema.Union(schemas)
|
|
1344
1386
|
}
|
|
1345
1387
|
|