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
package/src/rpc/RpcServer.ts
CHANGED
|
@@ -89,6 +89,15 @@ export interface RpcServer<A extends Rpc.Any> {
|
|
|
89
89
|
* the request fails with that cause. `onFromServer` is assumed to have already
|
|
90
90
|
* answered the client and reported it, so nothing else is sent or reported.
|
|
91
91
|
*
|
|
92
|
+
* A request with `isNotification` set runs like any other, but no `Exit`,
|
|
93
|
+
* `Chunk` or `Defect` is sent for it. Its failures are still reported.
|
|
94
|
+
*
|
|
95
|
+
* A request with `discard` set is acknowledged with a successful `Exit` once
|
|
96
|
+
* its handler starts, after the concurrency permit is taken and the
|
|
97
|
+
* middleware has run. Nothing else is sent for it after that, and its
|
|
98
|
+
* failures are only reported. A failure before the acknowledgement is sent as
|
|
99
|
+
* a failed `Exit` for that request.
|
|
100
|
+
*
|
|
92
101
|
* @stability unstable
|
|
93
102
|
* @category constructors
|
|
94
103
|
* @since 4.0.0
|
|
@@ -255,16 +264,23 @@ export const makeNoSerialization: <Rpcs extends Rpc.Any>(
|
|
|
255
264
|
if (client.fibers.has(request.id)) {
|
|
256
265
|
return Effect.interrupt
|
|
257
266
|
}
|
|
267
|
+
const isNotification = request.isNotification === true
|
|
268
|
+
const isDiscard = !isNotification && request.discard === true
|
|
269
|
+
let acknowledged = false
|
|
270
|
+
// a notification, or a discarded call once it has been acknowledged, gets
|
|
271
|
+
// no reply of any kind
|
|
272
|
+
const respond = (exit: Exit.Exit<any, any>): Effect.Effect<void> =>
|
|
273
|
+
isNotification || acknowledged ? Effect.void : options.onFromServer({
|
|
274
|
+
_tag: "Exit",
|
|
275
|
+
clientId: client.id,
|
|
276
|
+
requestId: request.id,
|
|
277
|
+
exit
|
|
278
|
+
})
|
|
258
279
|
const rpc = group.requests.get(request.tag) as any as Rpc.AnyWithProps
|
|
259
280
|
const entry = Context.getOrUndefinedUnsafe(services, rpc?.key) as Rpc.Handler<Rpcs["_tag"]>
|
|
260
281
|
if (!rpc || !entry) {
|
|
261
282
|
const write = Effect.catchDefect(
|
|
262
|
-
|
|
263
|
-
_tag: "Exit",
|
|
264
|
-
clientId: client.id,
|
|
265
|
-
requestId: request.id,
|
|
266
|
-
exit: Exit.die(`Unknown request tag: ${request.tag}`)
|
|
267
|
-
}),
|
|
283
|
+
respond(Exit.die(`Unknown request tag: ${request.tag}`)),
|
|
268
284
|
(defect) => sendDefect(client, defect)
|
|
269
285
|
)
|
|
270
286
|
if (!client.ended || client.fibers.size > 0) return write
|
|
@@ -278,7 +294,18 @@ export const makeNoSerialization: <Rpcs extends Rpc.Any>(
|
|
|
278
294
|
headers: request.headers,
|
|
279
295
|
payload: request.payload
|
|
280
296
|
}
|
|
281
|
-
|
|
297
|
+
let handlerResult: ReturnType<typeof entry.handler>
|
|
298
|
+
// a handler that throws while being constructed never starts, so it is
|
|
299
|
+
// neither streamed nor acknowledged
|
|
300
|
+
let constructionFailed = false
|
|
301
|
+
try {
|
|
302
|
+
handlerResult = entry.handler(request.payload, metadata)
|
|
303
|
+
} catch (defect) {
|
|
304
|
+
handlerResult = Effect.die(defect)
|
|
305
|
+
constructionFailed = true
|
|
306
|
+
}
|
|
307
|
+
// a const, so that the narrowing below can be aliased
|
|
308
|
+
const result = handlerResult
|
|
282
309
|
|
|
283
310
|
// if the handler requested forking, then we skip the concurrency control
|
|
284
311
|
const isWrapper = Rpc.isWrapper(result)
|
|
@@ -288,11 +315,23 @@ export const makeNoSerialization: <Rpcs extends Rpc.Any>(
|
|
|
288
315
|
const streamOrEffect = isWrapper ? result.value : result
|
|
289
316
|
// set when a chunk could not be written; the writer has already responded
|
|
290
317
|
let writeFailure: Cause.Cause<never> | undefined
|
|
291
|
-
|
|
318
|
+
let handler = isStream && !constructionFailed
|
|
292
319
|
? (streamEffect(client, request, streamOrEffect, (cause) => {
|
|
293
320
|
writeFailure = cause
|
|
294
321
|
}) as Effect.Effect<{} | Deferred.Deferred<any, any>>)
|
|
295
322
|
: (streamOrEffect as Effect.Effect<{} | Deferred.Deferred<any, any>>)
|
|
323
|
+
if (isDiscard && !constructionFailed) {
|
|
324
|
+
// the acknowledgement runs inside the middleware, so it is only sent
|
|
325
|
+
// once the permit is held and the middleware has started the handler
|
|
326
|
+
handler = Effect.andThen(
|
|
327
|
+
Effect.suspend(() => {
|
|
328
|
+
const ack = respond(Exit.void)
|
|
329
|
+
acknowledged = true
|
|
330
|
+
return ack
|
|
331
|
+
}),
|
|
332
|
+
handler
|
|
333
|
+
)
|
|
334
|
+
}
|
|
296
335
|
|
|
297
336
|
const withMiddleware = rpc.middlewares.size === 0
|
|
298
337
|
? handler
|
|
@@ -314,29 +353,22 @@ export const makeNoSerialization: <Rpcs extends Rpc.Any>(
|
|
|
314
353
|
deferred = exit.value
|
|
315
354
|
write = Effect.void
|
|
316
355
|
} else {
|
|
317
|
-
write =
|
|
318
|
-
_tag: "Exit",
|
|
319
|
-
clientId: client.id,
|
|
320
|
-
requestId: request.id,
|
|
321
|
-
exit: exit as any
|
|
322
|
-
})
|
|
356
|
+
write = respond(exit)
|
|
323
357
|
}
|
|
324
358
|
} else if (writeFailure) {
|
|
325
359
|
// onFromServer has already answered the client and reported the failure
|
|
326
360
|
return Scope.closeUnsafe(scope, exit) ?? Effect.void
|
|
327
361
|
} else if (
|
|
328
362
|
!disableFatalDefects &&
|
|
363
|
+
// a notification or a discarded call only ever fails itself
|
|
364
|
+
!isNotification &&
|
|
365
|
+
!isDiscard &&
|
|
329
366
|
Cause.hasDies(exit.cause) &&
|
|
330
367
|
!Cause.hasInterrupts(exit.cause)
|
|
331
368
|
) {
|
|
332
369
|
write = sendDefect(client, Cause.squash(exit.cause))
|
|
333
370
|
} else {
|
|
334
|
-
write =
|
|
335
|
-
_tag: "Exit",
|
|
336
|
-
clientId: client.id,
|
|
337
|
-
requestId: request.id,
|
|
338
|
-
exit: exit as any
|
|
339
|
-
})
|
|
371
|
+
write = respond(exit)
|
|
340
372
|
}
|
|
341
373
|
const close = Scope.closeUnsafe(scope, exit)
|
|
342
374
|
if (exit._tag === "Failure") {
|
|
@@ -391,29 +423,24 @@ export const makeNoSerialization: <Rpcs extends Rpc.Any>(
|
|
|
391
423
|
)
|
|
392
424
|
fiber.addObserver(function onExit(exit: Exit.Exit<any, any>): void {
|
|
393
425
|
if (deferred) {
|
|
394
|
-
const fiber = trackFiber(
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
426
|
+
const fiber = trackFiber(
|
|
427
|
+
runFork(
|
|
428
|
+
Effect.onExit(Deferred.await(deferred), (exit) => {
|
|
429
|
+
// a failure with no reply to carry it is only reported
|
|
430
|
+
if (exit._tag === "Failure" && (isNotification || acknowledged)) {
|
|
431
|
+
reportCauseUnsafe(Fiber.getCurrent()!, exit.cause)
|
|
432
|
+
}
|
|
433
|
+
return respond(exit)
|
|
434
|
+
})
|
|
435
|
+
)
|
|
436
|
+
)
|
|
401
437
|
client.fibers.set(request.id, fiber)
|
|
402
438
|
deferred = undefined
|
|
403
439
|
fiber.addObserver(onExit)
|
|
404
440
|
return
|
|
405
441
|
}
|
|
406
|
-
if (!responded && exit._tag === "Failure") {
|
|
407
|
-
trackFiber(
|
|
408
|
-
runFork(
|
|
409
|
-
options.onFromServer({
|
|
410
|
-
_tag: "Exit",
|
|
411
|
-
clientId: client.id,
|
|
412
|
-
requestId: request.id,
|
|
413
|
-
exit: Exit.interrupt()
|
|
414
|
-
})
|
|
415
|
-
)
|
|
416
|
-
)
|
|
442
|
+
if (!responded && !isNotification && !acknowledged && exit._tag === "Failure") {
|
|
443
|
+
trackFiber(runFork(respond(Exit.interrupt())))
|
|
417
444
|
}
|
|
418
445
|
client.fibers.delete(request.id)
|
|
419
446
|
client.latches?.delete(request.id)
|
|
@@ -432,8 +459,11 @@ export const makeNoSerialization: <Rpcs extends Rpc.Any>(
|
|
|
432
459
|
| Effect.Effect<Queue.Dequeue<any, any>, any, Scope.Scope>,
|
|
433
460
|
onWriteFailure: (cause: Cause.Cause<never>) => void
|
|
434
461
|
) => {
|
|
462
|
+
// the chunks of a notification or a discarded call have no reader, so they
|
|
463
|
+
// are neither sent nor acknowledged
|
|
464
|
+
const silent = request.isNotification === true || request.discard === true
|
|
435
465
|
const writeChunk = (values: NonEmptyReadonlyArray<any>) =>
|
|
436
|
-
Effect.onError(
|
|
466
|
+
silent ? Effect.void : Effect.onError(
|
|
437
467
|
options.onFromServer({ _tag: "Chunk", clientId: client.id, requestId: request.id, values }),
|
|
438
468
|
(cause) => {
|
|
439
469
|
if (!Cause.hasInterruptsOnly(cause)) onWriteFailure(cause)
|
|
@@ -441,7 +471,7 @@ export const makeNoSerialization: <Rpcs extends Rpc.Any>(
|
|
|
441
471
|
}
|
|
442
472
|
)
|
|
443
473
|
let latch: Latch.Latch | undefined
|
|
444
|
-
if (supportsAck) {
|
|
474
|
+
if (supportsAck && !silent) {
|
|
445
475
|
client.latches ??= new Map()
|
|
446
476
|
latch = client.latches.get(request.id)
|
|
447
477
|
if (!latch) {
|
|
@@ -598,6 +628,23 @@ const applyMiddleware = <A, E, R>(
|
|
|
598
628
|
* requests, invoking handlers, encoding responses, and managing in-flight
|
|
599
629
|
* request lifetime.
|
|
600
630
|
*
|
|
631
|
+
* **Details**
|
|
632
|
+
*
|
|
633
|
+
* The server consumes `Protocol.disconnects` to interrupt a disconnected
|
|
634
|
+
* client's requests, so use the `onDisconnect` option to observe disconnects
|
|
635
|
+
* instead of taking from that queue.
|
|
636
|
+
*
|
|
637
|
+
* `onDisconnect` is called for each disconnect reported by the `Protocol`,
|
|
638
|
+
* after the server has requested interruption of that client's in-flight
|
|
639
|
+
* requests. It does not wait for those requests to finish. It is not called
|
|
640
|
+
* when a client ends its input normally, or for clients still connected when
|
|
641
|
+
* the server stops.
|
|
642
|
+
*
|
|
643
|
+
* Each callback runs in its own fiber, so a slow callback does not delay
|
|
644
|
+
* cleanup for other clients, and callbacks may run concurrently. Pending
|
|
645
|
+
* callbacks are interrupted when the server stops. Failures are ignored and
|
|
646
|
+
* logged at `References.UnhandledLogLevel`.
|
|
647
|
+
*
|
|
601
648
|
* @stability unstable
|
|
602
649
|
* @category running
|
|
603
650
|
* @since 4.0.0
|
|
@@ -611,6 +658,7 @@ export const make: <Rpcs extends Rpc.Any>(
|
|
|
611
658
|
readonly spanAttributes?: Record<string, unknown> | undefined
|
|
612
659
|
readonly concurrency?: number | "unbounded" | undefined
|
|
613
660
|
readonly disableFatalDefects?: boolean | undefined
|
|
661
|
+
readonly onDisconnect?: ((clientId: number) => Effect.Effect<void>) | undefined
|
|
614
662
|
}
|
|
615
663
|
| undefined
|
|
616
664
|
) => Effect.Effect<
|
|
@@ -628,6 +676,7 @@ export const make: <Rpcs extends Rpc.Any>(
|
|
|
628
676
|
readonly spanAttributes?: Record<string, unknown> | undefined
|
|
629
677
|
readonly concurrency?: number | "unbounded" | undefined
|
|
630
678
|
readonly disableFatalDefects?: boolean | undefined
|
|
679
|
+
readonly onDisconnect?: ((clientId: number) => Effect.Effect<void>) | undefined
|
|
631
680
|
}
|
|
632
681
|
) {
|
|
633
682
|
const {
|
|
@@ -687,13 +736,24 @@ export const make: <Rpcs extends Rpc.Any>(
|
|
|
687
736
|
}).pipe(Scope.provide(scope))
|
|
688
737
|
|
|
689
738
|
// handle disconnects
|
|
739
|
+
const onDisconnect = options?.onDisconnect
|
|
740
|
+
const handleDisconnect = onDisconnect
|
|
741
|
+
? (clientId: number) =>
|
|
742
|
+
Effect.andThen(
|
|
743
|
+
server.disconnect(clientId),
|
|
744
|
+
Effect.ignoreCause(Effect.suspend(() => onDisconnect(clientId)), {
|
|
745
|
+
log: "Unhandled",
|
|
746
|
+
message: "RpcServer onDisconnect hook failed"
|
|
747
|
+
}).pipe(Effect.forkIn(scope))
|
|
748
|
+
)
|
|
749
|
+
: server.disconnect
|
|
690
750
|
yield* Effect.forkChild(
|
|
691
751
|
Effect.whileLoop({
|
|
692
752
|
while: constTrue,
|
|
693
753
|
body: constant(
|
|
694
754
|
Effect.flatMap(Queue.take(disconnects), (clientId) => {
|
|
695
755
|
clients.delete(clientId)
|
|
696
|
-
return
|
|
756
|
+
return handleDisconnect(clientId)
|
|
697
757
|
})
|
|
698
758
|
),
|
|
699
759
|
step: constVoid
|
|
@@ -726,6 +786,25 @@ export const make: <Rpcs extends Rpc.Any>(
|
|
|
726
786
|
return schemas
|
|
727
787
|
}
|
|
728
788
|
|
|
789
|
+
// The only successful Exit sent for a discarded call is its acknowledgement,
|
|
790
|
+
// which carries no value, so its Exits are encoded with a void success.
|
|
791
|
+
const discardSchemasCache = new WeakMap<any, Schemas>()
|
|
792
|
+
const getDiscardSchemas = (rpc: Rpc.AnyWithProps, schemas: Schemas) => {
|
|
793
|
+
let discardSchemas = discardSchemasCache.get(rpc)
|
|
794
|
+
if (!discardSchemas) {
|
|
795
|
+
const exitSchema = Rpc.exitSchema(rpc as any)
|
|
796
|
+
discardSchemas = {
|
|
797
|
+
...schemas,
|
|
798
|
+
encodeExit: Schema.encodeUnknownEffect(
|
|
799
|
+
codecFor(Schema.Exit(Schema.Void, exitSchema.error, exitSchema.defect)),
|
|
800
|
+
Context.get(rpc.annotations, Rpc.ParseOptions)
|
|
801
|
+
) as any
|
|
802
|
+
}
|
|
803
|
+
discardSchemasCache.set(rpc, discardSchemas)
|
|
804
|
+
}
|
|
805
|
+
return discardSchemas
|
|
806
|
+
}
|
|
807
|
+
|
|
729
808
|
type Client = {
|
|
730
809
|
readonly id: number
|
|
731
810
|
readonly schemas: Map<RequestId, Schemas>
|
|
@@ -809,6 +888,13 @@ export const make: <Rpcs extends Rpc.Any>(
|
|
|
809
888
|
})
|
|
810
889
|
)
|
|
811
890
|
|
|
891
|
+
// a notification has no reply to carry the error, so it is only logged
|
|
892
|
+
const dropNotification = (reason: string) =>
|
|
893
|
+
Effect.annotateLogs(Effect.logDebug(`Dropped RPC notification: ${reason}`), {
|
|
894
|
+
module: "RpcServer",
|
|
895
|
+
method: "dropNotification"
|
|
896
|
+
})
|
|
897
|
+
|
|
812
898
|
const writeDecodedRequest = (
|
|
813
899
|
client: Client,
|
|
814
900
|
requestId: RequestId,
|
|
@@ -816,15 +902,18 @@ export const make: <Rpcs extends Rpc.Any>(
|
|
|
816
902
|
request: RequestEncoded,
|
|
817
903
|
payload: unknown
|
|
818
904
|
) => {
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
905
|
+
// nothing is encoded for a notification, and only a reply would remove its schemas
|
|
906
|
+
if (request.isNotification !== true) {
|
|
907
|
+
client.schemas.set(
|
|
908
|
+
requestId,
|
|
909
|
+
supportsTransferables
|
|
910
|
+
? {
|
|
911
|
+
...schemas,
|
|
912
|
+
collector: Transferable.makeCollectorUnsafe()
|
|
913
|
+
}
|
|
914
|
+
: schemas
|
|
915
|
+
)
|
|
916
|
+
}
|
|
828
917
|
// the envelope is owned by this protocol loop, so it is decoded in place
|
|
829
918
|
// instead of copied for every request
|
|
830
919
|
const decoded = request as Types.Mutable<RequestEncoded>
|
|
@@ -834,6 +923,8 @@ export const make: <Rpcs extends Rpc.Any>(
|
|
|
834
923
|
return server.write(client.id, decoded as any)
|
|
835
924
|
}
|
|
836
925
|
|
|
926
|
+
let notificationCount = 0
|
|
927
|
+
|
|
837
928
|
// main server loop
|
|
838
929
|
return yield* run((clientId, request) => {
|
|
839
930
|
let client = clients.get(clientId)
|
|
@@ -848,35 +939,51 @@ export const make: <Rpcs extends Rpc.Any>(
|
|
|
848
939
|
switch (request._tag) {
|
|
849
940
|
case "Request": {
|
|
850
941
|
const tag = Object.hasOwn(request, "tag") ? (request.tag as string) : ""
|
|
942
|
+
const isNotification = request.isNotification === true
|
|
851
943
|
let requestId: RequestId
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
944
|
+
if (isNotification) {
|
|
945
|
+
// JSON-RPC notifications share an empty id, and no reply ever names one
|
|
946
|
+
requestId = RequestId(`@effect/rpc/notification/${notificationCount++}`)
|
|
947
|
+
} else {
|
|
948
|
+
switch (typeof request.id) {
|
|
949
|
+
case "number":
|
|
950
|
+
case "string": {
|
|
951
|
+
requestId = RequestId(request.id)
|
|
952
|
+
break
|
|
953
|
+
}
|
|
954
|
+
default: {
|
|
955
|
+
return sendDefect(client, `Invalid request id: ${request.id}`)
|
|
956
|
+
}
|
|
860
957
|
}
|
|
861
958
|
}
|
|
862
959
|
const rpc = group.requests.get(tag)
|
|
863
960
|
if (!rpc) {
|
|
864
|
-
|
|
961
|
+
const reason = `Unknown request tag: ${tag}`
|
|
962
|
+
return isNotification
|
|
963
|
+
? dropNotification(reason)
|
|
964
|
+
: sendRequestDefect(client, requestId, encodeUnknownRequestExit, reason)
|
|
865
965
|
}
|
|
866
966
|
const schemas = getSchemas(rpc as any)
|
|
967
|
+
const replySchemas = !isNotification && request.discard === true
|
|
968
|
+
? getDiscardSchemas(rpc as any, schemas)
|
|
969
|
+
: schemas
|
|
867
970
|
const decoded = schemas.decode(request.payload)
|
|
868
971
|
// The schema decoders evaluate eagerly, so a decode that needs no
|
|
869
972
|
// services is already a resolved success and can skip the effect
|
|
870
973
|
// wrappers.
|
|
871
974
|
if (Exit.isExit(decoded) && Exit.isSuccess(decoded)) {
|
|
872
|
-
return writeDecodedRequest(client, requestId,
|
|
975
|
+
return writeDecodedRequest(client, requestId, replySchemas, request, decoded.value)
|
|
873
976
|
}
|
|
874
977
|
return Effect.matchEffect(
|
|
875
978
|
Effect.provideContext(decoded, schemas.context),
|
|
876
979
|
{
|
|
877
|
-
onFailure: (error) =>
|
|
878
|
-
|
|
879
|
-
|
|
980
|
+
onFailure: (error) => {
|
|
981
|
+
const reason = SchemaIssue.defaultFormatter(error.issue)
|
|
982
|
+
return isNotification
|
|
983
|
+
? dropNotification(reason)
|
|
984
|
+
: sendRequestDefect(client, requestId, replySchemas.encodeExit, reason)
|
|
985
|
+
},
|
|
986
|
+
onSuccess: (payload) => writeDecodedRequest(client, requestId, replySchemas, request, payload)
|
|
880
987
|
}
|
|
881
988
|
)
|
|
882
989
|
}
|
|
@@ -924,6 +1031,7 @@ export const layer = <Rpcs extends Rpc.Any>(
|
|
|
924
1031
|
readonly spanAttributes?: Record<string, unknown> | undefined
|
|
925
1032
|
readonly concurrency?: number | "unbounded" | undefined
|
|
926
1033
|
readonly disableFatalDefects?: boolean | undefined
|
|
1034
|
+
readonly onDisconnect?: ((clientId: number) => Effect.Effect<void>) | undefined
|
|
927
1035
|
}
|
|
928
1036
|
): Layer.Layer<
|
|
929
1037
|
never,
|
|
@@ -955,6 +1063,7 @@ export const layerHttp = <Rpcs extends Rpc.Any>(options: {
|
|
|
955
1063
|
readonly spanAttributes?: Record<string, unknown> | undefined
|
|
956
1064
|
readonly concurrency?: number | "unbounded" | undefined
|
|
957
1065
|
readonly disableFatalDefects?: boolean | undefined
|
|
1066
|
+
readonly onDisconnect?: ((clientId: number) => Effect.Effect<void>) | undefined
|
|
958
1067
|
readonly streamBufferSize?: number | "unbounded" | undefined
|
|
959
1068
|
}): Layer.Layer<
|
|
960
1069
|
never,
|
|
@@ -1358,6 +1467,7 @@ export const toHttpEffect: <Rpcs extends Rpc.Any>(
|
|
|
1358
1467
|
readonly spanPrefix?: string | undefined
|
|
1359
1468
|
readonly spanAttributes?: Record<string, unknown> | undefined
|
|
1360
1469
|
readonly disableFatalDefects?: boolean | undefined
|
|
1470
|
+
readonly onDisconnect?: ((clientId: number) => Effect.Effect<void>) | undefined
|
|
1361
1471
|
readonly streamBufferSize?: number | "unbounded" | undefined
|
|
1362
1472
|
} | undefined
|
|
1363
1473
|
) => Effect.Effect<
|
|
@@ -1375,6 +1485,7 @@ export const toHttpEffect: <Rpcs extends Rpc.Any>(
|
|
|
1375
1485
|
readonly spanPrefix?: string | undefined
|
|
1376
1486
|
readonly spanAttributes?: Record<string, unknown> | undefined
|
|
1377
1487
|
readonly disableFatalDefects?: boolean | undefined
|
|
1488
|
+
readonly onDisconnect?: ((clientId: number) => Effect.Effect<void>) | undefined
|
|
1378
1489
|
readonly streamBufferSize?: number | "unbounded" | undefined
|
|
1379
1490
|
}
|
|
1380
1491
|
) {
|
|
@@ -1402,6 +1513,7 @@ export const toHttpEffectWebsocket: <Rpcs extends Rpc.Any>(
|
|
|
1402
1513
|
readonly spanPrefix?: string | undefined
|
|
1403
1514
|
readonly spanAttributes?: Record<string, unknown> | undefined
|
|
1404
1515
|
readonly disableFatalDefects?: boolean | undefined
|
|
1516
|
+
readonly onDisconnect?: ((clientId: number) => Effect.Effect<void>) | undefined
|
|
1405
1517
|
} | undefined
|
|
1406
1518
|
) => Effect.Effect<
|
|
1407
1519
|
Effect.Effect<HttpServerResponse.HttpServerResponse, never, Scope.Scope | HttpServerRequest.HttpServerRequest>,
|
|
@@ -1418,6 +1530,7 @@ export const toHttpEffectWebsocket: <Rpcs extends Rpc.Any>(
|
|
|
1418
1530
|
readonly spanPrefix?: string | undefined
|
|
1419
1531
|
readonly spanAttributes?: Record<string, unknown> | undefined
|
|
1420
1532
|
readonly disableFatalDefects?: boolean | undefined
|
|
1533
|
+
readonly onDisconnect?: ((clientId: number) => Effect.Effect<void>) | undefined
|
|
1421
1534
|
}
|
|
1422
1535
|
) {
|
|
1423
1536
|
const { httpEffect, protocol } = yield* makeProtocolWithHttpEffectWebsocket
|
package/src/rpc/RpcTest.ts
CHANGED
|
@@ -29,6 +29,7 @@ export const makeClient: <Rpcs extends Rpc.Any, const Flatten extends boolean =
|
|
|
29
29
|
group: RpcGroup.RpcGroup<Rpcs>,
|
|
30
30
|
options?: {
|
|
31
31
|
readonly flatten?: Flatten | undefined
|
|
32
|
+
readonly disableFatalDefects?: boolean | undefined
|
|
32
33
|
}
|
|
33
34
|
) => Effect.Effect<
|
|
34
35
|
Flatten extends true ? RpcClient.RpcClient.Flat<Rpcs> : RpcClient.RpcClient<Rpcs>,
|
|
@@ -38,11 +39,13 @@ export const makeClient: <Rpcs extends Rpc.Any, const Flatten extends boolean =
|
|
|
38
39
|
group: RpcGroup.RpcGroup<Rpcs>,
|
|
39
40
|
options?: {
|
|
40
41
|
readonly flatten?: Flatten | undefined
|
|
42
|
+
readonly disableFatalDefects?: boolean | undefined
|
|
41
43
|
}
|
|
42
44
|
) {
|
|
43
45
|
// oxlint-disable-next-line prefer-const
|
|
44
46
|
let client!: Effect.Success<ReturnType<typeof RpcClient.makeNoSerialization<Rpcs, never, Flatten>>>
|
|
45
47
|
const server = yield* RpcServer.makeNoSerialization(group, {
|
|
48
|
+
disableFatalDefects: options?.disableFatalDefects,
|
|
46
49
|
onFromServer(response) {
|
|
47
50
|
return client.write(response)
|
|
48
51
|
}
|
package/src/schema/Model.ts
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* @since 4.0.0
|
|
14
14
|
*/
|
|
15
15
|
import type { Brand } from "../Brand.ts"
|
|
16
|
+
import * as SecureRandom from "../crypto/SecureRandom.ts"
|
|
16
17
|
import * as DateTime from "../DateTime.ts"
|
|
17
18
|
import * as Effect from "../Effect.ts"
|
|
18
19
|
import * as Uuid from "../internal/uuid.ts"
|
|
@@ -808,7 +809,11 @@ export const Uint8Array: Schema.instanceOf<Uint8Array<ArrayBuffer>> = Schema.Uin
|
|
|
808
809
|
export const UuidV4BytesWithGenerate = <B extends string>(
|
|
809
810
|
schema: Schema.brand<Schema.instanceOf<Uint8Array<ArrayBuffer>>, B>
|
|
810
811
|
): Schema.withConstructorDefault<Schema.brand<Schema.instanceOf<Uint8Array<ArrayBuffer>>, B>> =>
|
|
811
|
-
schema.pipe(
|
|
812
|
+
schema.pipe(
|
|
813
|
+
Schema.withConstructorDefault(
|
|
814
|
+
Effect.sync(() => Uuid.v4Bytes(SecureRandom.randomBytesUnsafe(16) as Uint8Array<ArrayBuffer>))
|
|
815
|
+
)
|
|
816
|
+
)
|
|
812
817
|
|
|
813
818
|
/**
|
|
814
819
|
* A field that represents a binary UUID v4 that is generated on inserts.
|
|
@@ -854,7 +859,7 @@ export interface UuidV4Insert<B extends string> extends
|
|
|
854
859
|
export const UuidV4WithGenerate = <B extends string>(
|
|
855
860
|
schema: Schema.brand<Schema.String, B>
|
|
856
861
|
): Schema.withConstructorDefault<Schema.brand<Schema.String, B>> =>
|
|
857
|
-
schema.pipe(Schema.withConstructorDefault(Effect.sync(Uuid.v4String)))
|
|
862
|
+
schema.pipe(Schema.withConstructorDefault(Effect.sync(() => Uuid.v4String(SecureRandom.randomBytesUnsafe(16)))))
|
|
858
863
|
|
|
859
864
|
/**
|
|
860
865
|
* A field that represents a string UUID v4 that is generated on inserts.
|
|
@@ -893,6 +898,20 @@ export interface UuidV7Insert<B extends string> extends
|
|
|
893
898
|
/**
|
|
894
899
|
* Adds a constructor default that generates a string UUID v7.
|
|
895
900
|
*
|
|
901
|
+
* **Details**
|
|
902
|
+
*
|
|
903
|
+
* The UUID takes its timestamp from the `Clock`, and shares its ordering with
|
|
904
|
+
* `SecureRandom.uuidV7Unsafe` and every other `Model.UuidV7WithGenerate` in the
|
|
905
|
+
* JS realm, so below the maximum timestamp each UUID sorts after the previous
|
|
906
|
+
* one.
|
|
907
|
+
*
|
|
908
|
+
* **Gotchas**
|
|
909
|
+
*
|
|
910
|
+
* The shared ordering never moves the timestamp back, so a `Clock` behind the
|
|
911
|
+
* realm's latest timestamp, such as a `TestClock` after `Date.now()`-based
|
|
912
|
+
* UUIDs were generated, produces UUIDs with that latest timestamp rather than
|
|
913
|
+
* the `Clock` time.
|
|
914
|
+
*
|
|
896
915
|
* @stability unstable
|
|
897
916
|
* @category schemas
|
|
898
917
|
* @since 4.0.0
|
|
@@ -902,7 +921,11 @@ export const UuidV7WithGenerate = <B extends string>(
|
|
|
902
921
|
): Schema.withConstructorDefault<Schema.brand<Schema.String, B>> =>
|
|
903
922
|
schema.pipe(
|
|
904
923
|
Schema.withConstructorDefault(
|
|
905
|
-
Effect.clockWith((clock) =>
|
|
924
|
+
Effect.clockWith((clock) =>
|
|
925
|
+
Effect.succeed(
|
|
926
|
+
Uuid.stringify(Uuid.v7Monotonic(clock.currentTimeMillisUnsafe(), SecureRandom.randomBytesUnsafe(16)))
|
|
927
|
+
)
|
|
928
|
+
)
|
|
906
929
|
)
|
|
907
930
|
)
|
|
908
931
|
|
package/src/sql/Migrator.ts
CHANGED
|
@@ -12,11 +12,9 @@
|
|
|
12
12
|
import * as Arr from "../Array.ts"
|
|
13
13
|
import * as Data from "../Data.ts"
|
|
14
14
|
import * as Effect from "../Effect.ts"
|
|
15
|
-
import { FileSystem } from "../FileSystem.ts"
|
|
16
15
|
import { pipe } from "../Function.ts"
|
|
17
16
|
import * as Option from "../Option.ts"
|
|
18
17
|
import * as Order from "../Order.ts"
|
|
19
|
-
import { Path } from "../Path.ts"
|
|
20
18
|
import * as Client from "./SqlClient.ts"
|
|
21
19
|
import type { SqlError } from "./SqlError.ts"
|
|
22
20
|
|
|
@@ -98,7 +96,8 @@ export class MigrationError extends Data.TaggedError("MigrationError")<{
|
|
|
98
96
|
/**
|
|
99
97
|
* Creates a migrator that ensures the migrations table exists, runs pending
|
|
100
98
|
* migrations in a transaction, and optionally dumps the schema after successful
|
|
101
|
-
* migrations.
|
|
99
|
+
* migrations. ClickHouse runs without a transaction and records each migration
|
|
100
|
+
* only after it succeeds.
|
|
102
101
|
*
|
|
103
102
|
* @stability unstable
|
|
104
103
|
* @category constructors
|
|
@@ -173,11 +172,11 @@ ORDER BY migration_id`,
|
|
|
173
172
|
})
|
|
174
173
|
|
|
175
174
|
const insertMigrations = (
|
|
176
|
-
rows:
|
|
175
|
+
rows: Arr.NonEmptyReadonlyArray<[id: number, name: string]>
|
|
177
176
|
) =>
|
|
178
177
|
sql`INSERT INTO ${sql(table)} ${
|
|
179
178
|
sql.insert(
|
|
180
|
-
|
|
179
|
+
Arr.map(rows, ([migration_id, name]) => ({ migration_id, name }))
|
|
181
180
|
)
|
|
182
181
|
}`.withoutTransform
|
|
183
182
|
|
|
@@ -240,6 +239,12 @@ ORDER BY migration_id`,
|
|
|
240
239
|
|
|
241
240
|
// === run
|
|
242
241
|
|
|
242
|
+
// BEGIN is still experimental on clickhouse
|
|
243
|
+
const transactional = sql.onDialectOrElse({
|
|
244
|
+
clickhouse: () => false,
|
|
245
|
+
orElse: () => true
|
|
246
|
+
})
|
|
247
|
+
|
|
243
248
|
const run = Effect.gen(function*() {
|
|
244
249
|
yield* sql.onDialectOrElse({
|
|
245
250
|
pg: () => sql`LOCK TABLE ${sql(table)} IN ACCESS EXCLUSIVE MODE`,
|
|
@@ -279,9 +284,10 @@ ORDER BY migration_id`,
|
|
|
279
284
|
])
|
|
280
285
|
}
|
|
281
286
|
|
|
282
|
-
|
|
287
|
+
// rows recorded up front are only rolled back inside a transaction
|
|
288
|
+
if (transactional && Arr.isArrayNonEmpty(required)) {
|
|
283
289
|
yield* pipe(
|
|
284
|
-
insertMigrations(
|
|
290
|
+
insertMigrations(Arr.map(required, ([id, name]) => [id, name])),
|
|
285
291
|
Effect.mapError((error): MigrationError | SqlError =>
|
|
286
292
|
isConstraintConflict(error)
|
|
287
293
|
? new MigrationError({
|
|
@@ -298,6 +304,7 @@ ORDER BY migration_id`,
|
|
|
298
304
|
([id, name, effect]) =>
|
|
299
305
|
Effect.logDebug(`Running migration`).pipe(
|
|
300
306
|
Effect.flatMap(() => runMigration(id, name, effect)),
|
|
307
|
+
Effect.andThen(transactional ? Effect.void : insertMigrations([[id, name]])),
|
|
301
308
|
Effect.annotateLogs("migration_id", String(id)),
|
|
302
309
|
Effect.annotateLogs("migration_name", name),
|
|
303
310
|
Effect.withSpan(`Migrator ${id}_${name}`)
|
|
@@ -325,11 +332,7 @@ ORDER BY migration_id`,
|
|
|
325
332
|
yield* ensureMigrationsTable
|
|
326
333
|
|
|
327
334
|
const completed = yield* pipe(
|
|
328
|
-
sql.
|
|
329
|
-
// BEGIN is still experimental on clickhouse
|
|
330
|
-
clickhouse: () => run,
|
|
331
|
-
orElse: () => sql.withTransaction(run)
|
|
332
|
-
}),
|
|
335
|
+
transactional ? sql.withTransaction(run) : run,
|
|
333
336
|
Effect.catchTag("MigrationError", (_) =>
|
|
334
337
|
_.kind === "Locked"
|
|
335
338
|
? Effect.as(Effect.logDebug(_.message), [])
|
|
@@ -431,60 +434,3 @@ export const fromRecord = (migrations: Record<string, Effect.Effect<void, unknow
|
|
|
431
434
|
Arr.sort(migrationOrder),
|
|
432
435
|
Effect.succeed
|
|
433
436
|
)
|
|
434
|
-
|
|
435
|
-
/**
|
|
436
|
-
* Creates a migration loader that reads a directory with `FileSystem`, imports
|
|
437
|
-
* files named `<id>_<name>.js`, `<id>_<name>.ts`,
|
|
438
|
-
* `<id>_<name>.mjs`, or `<id>_<name>.mts`, and sorts migrations by id.
|
|
439
|
-
*
|
|
440
|
-
* **Details**
|
|
441
|
-
*
|
|
442
|
-
* Requires a `Path` service appropriate for the migration directory's path
|
|
443
|
-
* syntax. On Windows, prefer a platform-aware implementation such as
|
|
444
|
-
* `NodePath.layer`; the core `Path.layer` uses POSIX semantics and does not
|
|
445
|
-
* preserve Windows drive-letter paths.
|
|
446
|
-
*
|
|
447
|
-
* @stability unstable
|
|
448
|
-
* @category loaders
|
|
449
|
-
* @since 4.0.0
|
|
450
|
-
*/
|
|
451
|
-
export const fromFileSystem: (directory: string) => Loader<FileSystem | Path> = Effect.fnUntraced(function*(directory) {
|
|
452
|
-
const Fs = yield* FileSystem
|
|
453
|
-
const path = yield* Path
|
|
454
|
-
const files = yield* Effect.mapError(
|
|
455
|
-
Fs.readDirectory(directory),
|
|
456
|
-
(cause) =>
|
|
457
|
-
new MigrationError({
|
|
458
|
-
kind: "Failed",
|
|
459
|
-
cause,
|
|
460
|
-
message: "Failed to read migrations directory"
|
|
461
|
-
})
|
|
462
|
-
)
|
|
463
|
-
return files
|
|
464
|
-
.map((file) => Option.fromNullishOr(file.match(/^(?:.*\/)?(\d+)_([^.]+)\.(js|ts|mjs|mts)$/)))
|
|
465
|
-
.flatMap(
|
|
466
|
-
Option.match({
|
|
467
|
-
onNone: () => [],
|
|
468
|
-
onSome: ([basename, id, name]): ReadonlyArray<ResolvedMigration> =>
|
|
469
|
-
[
|
|
470
|
-
[
|
|
471
|
-
Number(id),
|
|
472
|
-
name,
|
|
473
|
-
// `import` needs a file URL: on Windows an absolute path such as
|
|
474
|
-
// `D:\migrations\1_init.ts` is rejected by the ESM loader. `orDie` keeps the
|
|
475
|
-
// failure a defect so `loadMigration` reports it as an import error.
|
|
476
|
-
Effect.flatMap(Effect.orDie(path.toFileUrl(path.join(directory, basename))), (url) =>
|
|
477
|
-
Effect.promise(
|
|
478
|
-
() =>
|
|
479
|
-
import(
|
|
480
|
-
/* @vite-ignore */
|
|
481
|
-
/* webpackIgnore: true */
|
|
482
|
-
url.href
|
|
483
|
-
)
|
|
484
|
-
))
|
|
485
|
-
]
|
|
486
|
-
] as const
|
|
487
|
-
})
|
|
488
|
-
)
|
|
489
|
-
.sort(([a], [b]) => a - b);
|
|
490
|
-
})
|