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
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* @stability unstable
|
|
12
12
|
* @since 4.0.0
|
|
13
13
|
*/
|
|
14
|
+
import * as Arr from "../Array.ts"
|
|
14
15
|
import * as Cache from "../Cache.ts"
|
|
15
16
|
import * as Context from "../Context.ts"
|
|
16
17
|
import * as Data from "../Data.ts"
|
|
@@ -19,27 +20,38 @@ import * as Layer from "../Layer.ts"
|
|
|
19
20
|
import * as Predicate from "../Predicate.ts"
|
|
20
21
|
import * as Queue from "../Queue.ts"
|
|
21
22
|
import * as Redacted from "../Redacted.ts"
|
|
23
|
+
import * as Result from "../Result.ts"
|
|
22
24
|
import * as RpcClient from "../rpc/RpcClient.ts"
|
|
23
25
|
import type { RpcClientError } from "../rpc/RpcClientError.ts"
|
|
24
26
|
import type * as RpcGroup from "../rpc/RpcGroup.ts"
|
|
25
27
|
import type * as Schema from "../Schema.ts"
|
|
26
28
|
import type * as Scope from "../Scope.ts"
|
|
29
|
+
import * as Stream from "../Stream.ts"
|
|
27
30
|
import { type Entry, type EventJournal, type EventJournalError, RemoteEntry, type RemoteId } from "./EventJournal.ts"
|
|
28
31
|
import { type Identity, Registry } from "./EventLog.ts"
|
|
29
|
-
import { EventLogEncryption, layerSubtle } from "./EventLogEncryption.ts"
|
|
32
|
+
import { type EncryptedBatch, EventLogEncryption, layerSubtle } from "./EventLogEncryption.ts"
|
|
30
33
|
import {
|
|
31
34
|
Authenticate,
|
|
32
35
|
ChangesRpc,
|
|
33
36
|
ChunkedMessage,
|
|
37
|
+
type CompactionBeginResult,
|
|
38
|
+
type CompactionInputHeader,
|
|
39
|
+
CompactionInputRpc,
|
|
40
|
+
CompactionPartRpc,
|
|
41
|
+
type CompactionResult,
|
|
42
|
+
type CompactionStatus,
|
|
43
|
+
EventLogCompactionRpcs,
|
|
34
44
|
EventLogProtocolError,
|
|
35
45
|
EventLogRemoteRpcs,
|
|
36
46
|
type HelloResponse,
|
|
47
|
+
type SingleMessage,
|
|
37
48
|
type StoreId,
|
|
38
49
|
type WriteAck,
|
|
39
50
|
WriteEntries,
|
|
40
51
|
WriteEntriesUnencrypted
|
|
41
52
|
} from "./EventLogMessage.ts"
|
|
42
53
|
import { encodeSessionAuthPayload, signSessionAuthPayloadBytes } from "./EventLogSessionAuth.ts"
|
|
54
|
+
import { toBatches } from "./internal/batches.ts"
|
|
43
55
|
import { makeGetIdentityRootSecretMaterial } from "./internal/identityRootSecretDerivation.ts"
|
|
44
56
|
|
|
45
57
|
/**
|
|
@@ -87,8 +99,82 @@ export class EventLogRemote extends Context.Service<EventLogRemote, {
|
|
|
87
99
|
readonly whenAuthenticated: <A, E, R>(
|
|
88
100
|
effect: Effect.Effect<A, E, R>
|
|
89
101
|
) => Effect.Effect<A, E | EventLogRemoteError, R | Identity>
|
|
102
|
+
/**
|
|
103
|
+
* Encrypted remote compaction. Present when the remote advertises
|
|
104
|
+
* `HelloResponse.compaction` and the RPC client includes
|
|
105
|
+
* `EventLogCompactionRpcs`.
|
|
106
|
+
*/
|
|
107
|
+
readonly compaction?: EventLogRemoteCompaction | undefined
|
|
90
108
|
}>()("effect/eventlog/EventLogRemote") {}
|
|
91
109
|
|
|
110
|
+
/**
|
|
111
|
+
* A stage opened by `EventLogRemoteCompaction.begin`, with the identity and
|
|
112
|
+
* store it belongs to.
|
|
113
|
+
*
|
|
114
|
+
* @stability unstable
|
|
115
|
+
* @category models
|
|
116
|
+
* @since 4.0.0
|
|
117
|
+
*/
|
|
118
|
+
export interface CompactionStage {
|
|
119
|
+
readonly identity: Identity["Service"]
|
|
120
|
+
readonly storeId: StoreId
|
|
121
|
+
readonly stageId: string
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Client side of encrypted remote compaction.
|
|
126
|
+
*
|
|
127
|
+
* **Details**
|
|
128
|
+
*
|
|
129
|
+
* A run opens a stage with `begin`, reads its input headers with `input`,
|
|
130
|
+
* fetches the batches it needs with `fetch`, uploads the kept entries with
|
|
131
|
+
* `upload` and calls `commit`. `abort` releases a stage that won't be
|
|
132
|
+
* committed.
|
|
133
|
+
*
|
|
134
|
+
* @stability unstable
|
|
135
|
+
* @category models
|
|
136
|
+
* @since 4.0.0
|
|
137
|
+
*/
|
|
138
|
+
export interface EventLogRemoteCompaction {
|
|
139
|
+
readonly status: (options: {
|
|
140
|
+
readonly identity: Identity["Service"]
|
|
141
|
+
readonly storeId: StoreId
|
|
142
|
+
}) => Effect.Effect<CompactionStatus, EventLogRemoteError>
|
|
143
|
+
readonly begin: (options: {
|
|
144
|
+
readonly identity: Identity["Service"]
|
|
145
|
+
readonly storeId: StoreId
|
|
146
|
+
}) => Effect.Effect<CompactionBeginResult, EventLogRemoteError>
|
|
147
|
+
/**
|
|
148
|
+
* Streams the stage's input batch headers in input order.
|
|
149
|
+
*/
|
|
150
|
+
readonly input: (stage: CompactionStage) => Stream.Stream<CompactionInputHeader, EventLogRemoteError>
|
|
151
|
+
/**
|
|
152
|
+
* Fetches and decrypts the input batches at the given input sequences.
|
|
153
|
+
*/
|
|
154
|
+
readonly fetch: (
|
|
155
|
+
stage: CompactionStage,
|
|
156
|
+
sequences: ReadonlyArray<number>
|
|
157
|
+
) => Stream.Stream<RemoteEntry, EventLogRemoteError>
|
|
158
|
+
/**
|
|
159
|
+
* Encrypts the kept entries, in input-sequence order, and uploads them in
|
|
160
|
+
* segments of about `ChunkedMessage.chunkSize`. An oversized segment is
|
|
161
|
+
* split into pieces, and a segment is resent in full after a dropped
|
|
162
|
+
* connection.
|
|
163
|
+
*/
|
|
164
|
+
readonly upload: (
|
|
165
|
+
stage: CompactionStage,
|
|
166
|
+
entries: ReadonlyArray<Entry>
|
|
167
|
+
) => Effect.Effect<{ readonly segmentCount: number }, EventLogRemoteError>
|
|
168
|
+
readonly commit: (
|
|
169
|
+
stage: CompactionStage,
|
|
170
|
+
result: CompactionResult
|
|
171
|
+
) => Effect.Effect<"Committed" | "Superseded", EventLogRemoteError>
|
|
172
|
+
/**
|
|
173
|
+
* Releases the stage. Failures are ignored.
|
|
174
|
+
*/
|
|
175
|
+
readonly abort: (stage: CompactionStage) => Effect.Effect<void>
|
|
176
|
+
}
|
|
177
|
+
|
|
92
178
|
/**
|
|
93
179
|
* Error raised by `EventLogRemote` operations, recording the failed method and
|
|
94
180
|
* underlying cause.
|
|
@@ -112,7 +198,7 @@ export class EventLogRemoteError extends Data.TaggedError("EventLogRemoteError")
|
|
|
112
198
|
}
|
|
113
199
|
}
|
|
114
200
|
|
|
115
|
-
const getIdentityRootSecretMaterial = makeGetIdentityRootSecretMaterial(
|
|
201
|
+
const getIdentityRootSecretMaterial = makeGetIdentityRootSecretMaterial()
|
|
116
202
|
|
|
117
203
|
const makeAuthenticate = Effect.fnUntraced(function*(options: {
|
|
118
204
|
readonly identity: Identity["Service"]
|
|
@@ -146,24 +232,36 @@ const makeAuthenticate = Effect.fnUntraced(function*(options: {
|
|
|
146
232
|
* Use to provide the RPC client used by remote event-log replicas to
|
|
147
233
|
* authenticate, write entries, and subscribe to changes.
|
|
148
234
|
*
|
|
235
|
+
* **Details**
|
|
236
|
+
*
|
|
237
|
+
* The `EventLogCompactionRpcs` methods are optional. The encrypted remote
|
|
238
|
+
* offers compaction only when the client has them. `layer` builds the client
|
|
239
|
+
* from both groups.
|
|
240
|
+
*
|
|
149
241
|
* @stability unstable
|
|
150
242
|
* @category services
|
|
151
243
|
* @since 4.0.0
|
|
152
244
|
*/
|
|
153
245
|
export class EventLogRemoteClient extends Context.Service<
|
|
154
246
|
EventLogRemoteClient,
|
|
155
|
-
RpcClient.RpcClient<RpcGroup.Rpcs<typeof EventLogRemoteRpcs>, RpcClientError>
|
|
247
|
+
& RpcClient.RpcClient<RpcGroup.Rpcs<typeof EventLogRemoteRpcs>, RpcClientError>
|
|
248
|
+
& Partial<CompactionClient>
|
|
156
249
|
>()(
|
|
157
250
|
"effect/eventlog/EventLogRemote/EventLogRemoteClient"
|
|
158
251
|
) {
|
|
159
252
|
static readonly layer = Layer.effect(
|
|
160
253
|
EventLogRemoteClient,
|
|
161
|
-
RpcClient.make(EventLogRemoteRpcs, {
|
|
254
|
+
RpcClient.make(EventLogRemoteRpcs.merge(EventLogCompactionRpcs), {
|
|
162
255
|
disableTracing: true
|
|
163
256
|
})
|
|
164
257
|
)
|
|
165
258
|
}
|
|
166
259
|
|
|
260
|
+
type CompactionClient = RpcClient.RpcClient<RpcGroup.Rpcs<typeof EventLogCompactionRpcs>, RpcClientError>
|
|
261
|
+
|
|
262
|
+
const getCompactionClient = (client: EventLogRemoteClient["Service"]): CompactionClient | undefined =>
|
|
263
|
+
client["EventLog.CompactionStatus"] === undefined ? undefined : client as CompactionClient
|
|
264
|
+
|
|
167
265
|
/**
|
|
168
266
|
* Creates an `EventLogRemote` from custom write encoding and change decoding
|
|
169
267
|
* functions.
|
|
@@ -178,7 +276,7 @@ export class EventLogRemoteClient extends Context.Service<
|
|
|
178
276
|
* @category constructors
|
|
179
277
|
* @since 4.0.0
|
|
180
278
|
*/
|
|
181
|
-
export const makeWith =
|
|
279
|
+
export const makeWith = (options: {
|
|
182
280
|
readonly encodeWrite: (options: {
|
|
183
281
|
readonly identity: Identity["Service"]
|
|
184
282
|
readonly entries: ReadonlyArray<Entry>
|
|
@@ -190,6 +288,39 @@ export const makeWith = Effect.fnUntraced(function*({ encodeWrite, decodeChanges
|
|
|
190
288
|
data: Uint8Array<ArrayBuffer>,
|
|
191
289
|
knownEntries?: EventJournal["Service"]["entriesById"]
|
|
192
290
|
) => Effect.Effect<ReadonlyArray<RemoteEntry>, Schema.SchemaError | EventJournalError>
|
|
291
|
+
}): Effect.Effect<EventLogRemote["Service"], EventLogRemoteError, Scope.Scope | EventLogRemoteClient | Registry> =>
|
|
292
|
+
makeRemote(options)
|
|
293
|
+
|
|
294
|
+
interface RemoteSession {
|
|
295
|
+
readonly client: EventLogRemoteClient["Service"]
|
|
296
|
+
/** Authenticates, runs the request, and authenticates again after a refusal. */
|
|
297
|
+
readonly request: <A, E>(
|
|
298
|
+
method: string,
|
|
299
|
+
identity: Identity["Service"],
|
|
300
|
+
effect: Effect.Effect<A, E>
|
|
301
|
+
) => Effect.Effect<A, EventLogRemoteError>
|
|
302
|
+
/** Authenticates, then joins and decodes a framed response stream. */
|
|
303
|
+
readonly framed: <A, E, E2>(
|
|
304
|
+
method: string,
|
|
305
|
+
identity: Identity["Service"],
|
|
306
|
+
frames: () => Stream.Stream<SingleMessage | ChunkedMessage, E>,
|
|
307
|
+
decode: (data: Uint8Array<ArrayBuffer>) => Effect.Effect<Iterable<A>, E2>
|
|
308
|
+
) => Stream.Stream<A, EventLogRemoteError>
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
const makeRemote = Effect.fnUntraced(function*({ encodeWrite, decodeChanges, makeCompaction }: {
|
|
312
|
+
readonly encodeWrite: (options: {
|
|
313
|
+
readonly identity: Identity["Service"]
|
|
314
|
+
readonly entries: ReadonlyArray<Entry>
|
|
315
|
+
readonly storeId: StoreId
|
|
316
|
+
}) => Effect.Effect<Uint8Array<ArrayBuffer>, Schema.SchemaError>
|
|
317
|
+
readonly decodeChanges: (
|
|
318
|
+
identity: Identity["Service"],
|
|
319
|
+
storeId: StoreId,
|
|
320
|
+
data: Uint8Array<ArrayBuffer>,
|
|
321
|
+
knownEntries?: EventJournal["Service"]["entriesById"]
|
|
322
|
+
) => Effect.Effect<ReadonlyArray<RemoteEntry>, Schema.SchemaError | EventJournalError>
|
|
323
|
+
readonly makeCompaction?: ((session: RemoteSession) => EventLogRemoteCompaction | undefined) | undefined
|
|
193
324
|
}): Effect.fn.Return<EventLogRemote["Service"], EventLogRemoteError, Scope.Scope | EventLogRemoteClient | Registry> {
|
|
194
325
|
const client = yield* EventLogRemoteClient
|
|
195
326
|
const registry = yield* Registry
|
|
@@ -228,6 +359,12 @@ export const makeWith = Effect.fnUntraced(function*({ encodeWrite, decodeChanges
|
|
|
228
359
|
return Cache.get(authCache, identity.publicKey)
|
|
229
360
|
}
|
|
230
361
|
|
|
362
|
+
// The next request says hello and authenticates again.
|
|
363
|
+
const resetAuthentication = (identity: Identity["Service"]) => {
|
|
364
|
+
hello = null
|
|
365
|
+
return Cache.invalidate(authCache, identity.publicKey)
|
|
366
|
+
}
|
|
367
|
+
|
|
231
368
|
const retryForbidden = <A, E, R>(
|
|
232
369
|
effect: Effect.Effect<A, E, R>,
|
|
233
370
|
options: {
|
|
@@ -235,19 +372,47 @@ export const makeWith = Effect.fnUntraced(function*({ encodeWrite, decodeChanges
|
|
|
235
372
|
}
|
|
236
373
|
) =>
|
|
237
374
|
Effect.retry(effect, {
|
|
238
|
-
while(e)
|
|
239
|
-
hello = null
|
|
240
|
-
const error = EventLogRemoteError.is(e) && e.method === "authenticate"
|
|
241
|
-
? e.cause
|
|
242
|
-
: e
|
|
243
|
-
const isForbidden = EventLogProtocolError.is(error) && error.code === "Forbidden"
|
|
244
|
-
return Cache.invalidate(authCache, options.identity.publicKey).pipe(
|
|
245
|
-
Effect.as(isForbidden)
|
|
246
|
-
)
|
|
247
|
-
},
|
|
375
|
+
while: (e) => Effect.as(resetAuthentication(options.identity), isForbidden(e)),
|
|
248
376
|
times: 5
|
|
249
377
|
})
|
|
250
378
|
|
|
379
|
+
const toRemoteError = (method: string) => (cause: unknown) =>
|
|
380
|
+
EventLogRemoteError.is(cause) ? cause : new EventLogRemoteError({ method, cause })
|
|
381
|
+
|
|
382
|
+
const request = <A, E>(
|
|
383
|
+
method: string,
|
|
384
|
+
identity: Identity["Service"],
|
|
385
|
+
effect: Effect.Effect<A, E>
|
|
386
|
+
): Effect.Effect<A, EventLogRemoteError> =>
|
|
387
|
+
ensureAuthenticated(identity).pipe(
|
|
388
|
+
Effect.andThen(effect),
|
|
389
|
+
(effect) => retryForbidden(effect, { identity }),
|
|
390
|
+
Effect.mapError(toRemoteError(method))
|
|
391
|
+
)
|
|
392
|
+
|
|
393
|
+
// Not retried like `request`; a refused identity authenticates again on the
|
|
394
|
+
// next request.
|
|
395
|
+
const framed = <A, E, E2>(
|
|
396
|
+
method: string,
|
|
397
|
+
identity: Identity["Service"],
|
|
398
|
+
frames: () => Stream.Stream<SingleMessage | ChunkedMessage, E>,
|
|
399
|
+
decode: (data: Uint8Array<ArrayBuffer>) => Effect.Effect<Iterable<A>, E2>
|
|
400
|
+
): Stream.Stream<A, EventLogRemoteError> =>
|
|
401
|
+
Stream.unwrap(Effect.map(ensureAuthenticated(identity), () => {
|
|
402
|
+
const state = ChunkedMessage.initialJoinState()
|
|
403
|
+
return frames().pipe(
|
|
404
|
+
Stream.filterMap((frame) => {
|
|
405
|
+
const data = frame._tag === "Single" ? frame.data : ChunkedMessage.join(state, frame)
|
|
406
|
+
return data === undefined ? Result.failVoid : Result.succeed(data)
|
|
407
|
+
}),
|
|
408
|
+
Stream.mapEffect(decode),
|
|
409
|
+
Stream.flattenIterable
|
|
410
|
+
)
|
|
411
|
+
})).pipe(
|
|
412
|
+
Stream.tapError((error) => isForbidden(error) ? resetAuthentication(identity) : Effect.void),
|
|
413
|
+
Stream.mapError(toRemoteError(method))
|
|
414
|
+
)
|
|
415
|
+
|
|
251
416
|
let chunkedIdCounter = 0
|
|
252
417
|
|
|
253
418
|
const remote = EventLogRemote.of({
|
|
@@ -325,7 +490,8 @@ export const makeWith = Effect.fnUntraced(function*({ encodeWrite, decodeChanges
|
|
|
325
490
|
return outgoing
|
|
326
491
|
}),
|
|
327
492
|
whenAuthenticated: (effect) =>
|
|
328
|
-
IdentityService.use((identity) => Effect.flatMap(ensureAuthenticated(identity), () => effect))
|
|
493
|
+
IdentityService.use((identity) => Effect.flatMap(ensureAuthenticated(identity), () => effect)),
|
|
494
|
+
compaction: hello.compaction === true ? makeCompaction?.({ client, request, framed }) : undefined
|
|
329
495
|
})
|
|
330
496
|
|
|
331
497
|
yield* registry.registerRemote(remote)
|
|
@@ -333,6 +499,11 @@ export const makeWith = Effect.fnUntraced(function*({ encodeWrite, decodeChanges
|
|
|
333
499
|
return remote
|
|
334
500
|
})
|
|
335
501
|
|
|
502
|
+
const isForbidden = (e: unknown): boolean => {
|
|
503
|
+
const error = EventLogRemoteError.is(e) && e.method === "authenticate" ? e.cause : e
|
|
504
|
+
return EventLogProtocolError.is(error) && error.code === "Forbidden"
|
|
505
|
+
}
|
|
506
|
+
|
|
336
507
|
/** @effect-diagnostics-next-line classSelfMismatch:off */
|
|
337
508
|
class IdentityService extends Context.Service<Identity, Identity["Service"]>()(
|
|
338
509
|
"effect/eventlog/EventLog/Identity" satisfies Identity["key"]
|
|
@@ -342,11 +513,19 @@ class IdentityService extends Context.Service<Identity, Identity["Service"]>()(
|
|
|
342
513
|
* Creates an `EventLogRemote` that encrypts outgoing entries and decrypts
|
|
343
514
|
* incoming changes with `EventLogEncryption`.
|
|
344
515
|
*
|
|
516
|
+
* **Details**
|
|
517
|
+
*
|
|
518
|
+
* The remote has a `compaction` member when the server advertises compaction
|
|
519
|
+
* and the RPC client includes `EventLogCompactionRpcs`, unless built with
|
|
520
|
+
* `compaction: false`. Without it the client never calls the compaction RPCs.
|
|
521
|
+
*
|
|
345
522
|
* @stability unstable
|
|
346
523
|
* @category constructors
|
|
347
524
|
* @since 4.0.0
|
|
348
525
|
*/
|
|
349
|
-
export const
|
|
526
|
+
export const makeEncryptedWith = Effect.fnUntraced(function*(options: {
|
|
527
|
+
readonly compaction?: boolean | undefined
|
|
528
|
+
}): Effect.fn.Return<
|
|
350
529
|
EventLogRemote["Service"],
|
|
351
530
|
EventLogRemoteError,
|
|
352
531
|
Scope.Scope | EventLogRemoteClient | EventLogEncryption | Registry
|
|
@@ -385,7 +564,7 @@ export const makeEncrypted = Effect.gen(function*(): Effect.fn.Return<
|
|
|
385
564
|
})
|
|
386
565
|
})
|
|
387
566
|
|
|
388
|
-
return yield*
|
|
567
|
+
return yield* makeRemote({
|
|
389
568
|
encodeWrite: (options) =>
|
|
390
569
|
encryption.encrypt(options.identity, options.storeId, options.entries).pipe(
|
|
391
570
|
Effect.flatMap((batches) =>
|
|
@@ -396,10 +575,151 @@ export const makeEncrypted = Effect.gen(function*(): Effect.fn.Return<
|
|
|
396
575
|
}).encoded
|
|
397
576
|
)
|
|
398
577
|
),
|
|
399
|
-
decodeChanges
|
|
578
|
+
decodeChanges,
|
|
579
|
+
makeCompaction: options.compaction === false ? undefined : (session) => {
|
|
580
|
+
const client = getCompactionClient(session.client)
|
|
581
|
+
return client === undefined ? undefined : makeEncryptedCompaction({ session, client, encryption })
|
|
582
|
+
}
|
|
400
583
|
})
|
|
401
584
|
})
|
|
402
585
|
|
|
586
|
+
/**
|
|
587
|
+
* Creates an `EventLogRemote` that encrypts outgoing entries and decrypts
|
|
588
|
+
* incoming changes with `EventLogEncryption`.
|
|
589
|
+
*
|
|
590
|
+
* @see {@link makeEncryptedWith} for opting out of running compaction
|
|
591
|
+
*
|
|
592
|
+
* @stability unstable
|
|
593
|
+
* @category constructors
|
|
594
|
+
* @since 4.0.0
|
|
595
|
+
*/
|
|
596
|
+
export const makeEncrypted: Effect.Effect<
|
|
597
|
+
EventLogRemote["Service"],
|
|
598
|
+
EventLogRemoteError,
|
|
599
|
+
Scope.Scope | EventLogRemoteClient | EventLogEncryption | Registry
|
|
600
|
+
> = makeEncryptedWith({})
|
|
601
|
+
|
|
602
|
+
// How many times a segment is sent before a dropped connection, an
|
|
603
|
+
// `RpcClientError`, fails the upload.
|
|
604
|
+
const segmentAttempts = 3
|
|
605
|
+
|
|
606
|
+
const makeEncryptedCompaction = ({ client, encryption, session: { framed, request } }: {
|
|
607
|
+
readonly session: RemoteSession
|
|
608
|
+
readonly client: CompactionClient
|
|
609
|
+
readonly encryption: EventLogEncryption["Service"]
|
|
610
|
+
}): EventLogRemoteCompaction => {
|
|
611
|
+
const stageRequest = (stage: CompactionStage) => ({
|
|
612
|
+
publicKey: stage.identity.publicKey,
|
|
613
|
+
storeId: stage.storeId,
|
|
614
|
+
stageId: stage.stageId
|
|
615
|
+
})
|
|
616
|
+
|
|
617
|
+
return {
|
|
618
|
+
status: ({ identity, storeId }) =>
|
|
619
|
+
request(
|
|
620
|
+
"compactionStatus",
|
|
621
|
+
identity,
|
|
622
|
+
client["EventLog.CompactionStatus"]({ publicKey: identity.publicKey, storeId })
|
|
623
|
+
),
|
|
624
|
+
begin: ({ identity, storeId }) =>
|
|
625
|
+
request(
|
|
626
|
+
"compactionBegin",
|
|
627
|
+
identity,
|
|
628
|
+
client["EventLog.CompactionBegin"]({ publicKey: identity.publicKey, storeId })
|
|
629
|
+
),
|
|
630
|
+
input: (stage) =>
|
|
631
|
+
framed(
|
|
632
|
+
"compactionInput",
|
|
633
|
+
stage.identity,
|
|
634
|
+
() => client["EventLog.CompactionInput"](stageRequest(stage)),
|
|
635
|
+
CompactionInputRpc.decodeHeaders
|
|
636
|
+
),
|
|
637
|
+
fetch: (stage, sequences) =>
|
|
638
|
+
framed(
|
|
639
|
+
"compactionFetch",
|
|
640
|
+
stage.identity,
|
|
641
|
+
() => client["EventLog.CompactionFetch"]({ ...stageRequest(stage), batches: sequences }),
|
|
642
|
+
(data) =>
|
|
643
|
+
Effect.flatMap(
|
|
644
|
+
ChangesRpc.decodeEncrypted(data),
|
|
645
|
+
(batches) => encryption.decrypt(stage.identity, stage.storeId, batches)
|
|
646
|
+
)
|
|
647
|
+
),
|
|
648
|
+
upload: (stage, entries) =>
|
|
649
|
+
Effect.suspend(() => {
|
|
650
|
+
let segment: Array<EncryptedBatch> = []
|
|
651
|
+
let segmentBytes = 0
|
|
652
|
+
let segmentCount = 0
|
|
653
|
+
|
|
654
|
+
// The server forgets a segment's pieces when the connection drops, so a
|
|
655
|
+
// retry resends all of them.
|
|
656
|
+
const sendSegment = Effect.suspend(() => {
|
|
657
|
+
if (!Arr.isArrayNonEmpty(segment)) return Effect.void
|
|
658
|
+
const batches = segment
|
|
659
|
+
const id = segmentCount++
|
|
660
|
+
segment = []
|
|
661
|
+
segmentBytes = 0
|
|
662
|
+
return Effect.flatMap(CompactionPartRpc.encodeSegment(batches), (data) => {
|
|
663
|
+
const pieces = ChunkedMessage.split(id, data)
|
|
664
|
+
return request(
|
|
665
|
+
"compactionUpload",
|
|
666
|
+
stage.identity,
|
|
667
|
+
Effect.forEach(
|
|
668
|
+
pieces,
|
|
669
|
+
(chunk) => client["EventLog.CompactionPart"]({ ...stageRequest(stage), chunk }),
|
|
670
|
+
{ discard: true }
|
|
671
|
+
).pipe(
|
|
672
|
+
Effect.retry({ while: (error) => error._tag === "RpcClientError", times: segmentAttempts - 1 })
|
|
673
|
+
)
|
|
674
|
+
)
|
|
675
|
+
})
|
|
676
|
+
})
|
|
677
|
+
|
|
678
|
+
// Whole batches go into a segment until the next one would take it
|
|
679
|
+
// past `ChunkedMessage.chunkSize`.
|
|
680
|
+
const addBatch = (batch: Arr.NonEmptyArray<Entry>) =>
|
|
681
|
+
Effect.flatMap(encryption.encrypt(stage.identity, stage.storeId, batch), (encrypted) =>
|
|
682
|
+
Effect.forEach(encrypted, (batch) => {
|
|
683
|
+
const size = encodedBatchSize(batch)
|
|
684
|
+
const send = segment.length > 0 && segmentBytes + size > ChunkedMessage.chunkSize
|
|
685
|
+
? sendSegment
|
|
686
|
+
: Effect.void
|
|
687
|
+
return Effect.andThen(
|
|
688
|
+
send,
|
|
689
|
+
Effect.sync(() => {
|
|
690
|
+
segment.push(batch)
|
|
691
|
+
segmentBytes += size
|
|
692
|
+
})
|
|
693
|
+
)
|
|
694
|
+
}, { discard: true }))
|
|
695
|
+
|
|
696
|
+
return Effect.forEach(toBatches(entries), addBatch, { discard: true }).pipe(
|
|
697
|
+
Effect.andThen(sendSegment),
|
|
698
|
+
Effect.map(() => ({ segmentCount })),
|
|
699
|
+
Effect.mapError((cause) =>
|
|
700
|
+
EventLogRemoteError.is(cause) ? cause : new EventLogRemoteError({ method: "compactionUpload", cause })
|
|
701
|
+
)
|
|
702
|
+
)
|
|
703
|
+
}),
|
|
704
|
+
commit: (stage, result) =>
|
|
705
|
+
request(
|
|
706
|
+
"compactionCommit",
|
|
707
|
+
stage.identity,
|
|
708
|
+
client["EventLog.CompactionCommit"]({ ...stageRequest(stage), result })
|
|
709
|
+
),
|
|
710
|
+
abort: (stage) =>
|
|
711
|
+
request(
|
|
712
|
+
"compactionAbort",
|
|
713
|
+
stage.identity,
|
|
714
|
+
client["EventLog.CompactionAbort"](stageRequest(stage))
|
|
715
|
+
).pipe(Effect.ignore)
|
|
716
|
+
}
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
// Ignores the segment framing.
|
|
720
|
+
const encodedBatchSize = (batch: EncryptedBatch): number =>
|
|
721
|
+
batch.encryptedBatch.byteLength + batch.iv.byteLength + batch.entryIds.length * 16
|
|
722
|
+
|
|
403
723
|
/**
|
|
404
724
|
* Creates an `EventLogRemote` that sends and receives plaintext entry payloads.
|
|
405
725
|
*
|
|
@@ -425,6 +745,33 @@ export const makeUnencrypted: Effect.Effect<
|
|
|
425
745
|
* Provides an encrypted `EventLogRemote` using the remote RPC client and the
|
|
426
746
|
* default Web Crypto encryption layer.
|
|
427
747
|
*
|
|
748
|
+
* **Details**
|
|
749
|
+
*
|
|
750
|
+
* `compaction: false` leaves the remote without its `compaction` member, so
|
|
751
|
+
* this client never calls the compaction RPCs.
|
|
752
|
+
*
|
|
753
|
+
* @stability unstable
|
|
754
|
+
* @category layers
|
|
755
|
+
* @since 4.0.0
|
|
756
|
+
*/
|
|
757
|
+
export const layerEncryptedWith = (options: {
|
|
758
|
+
readonly compaction?: boolean | undefined
|
|
759
|
+
}): Layer.Layer<
|
|
760
|
+
EventLogRemote,
|
|
761
|
+
EventLogRemoteError,
|
|
762
|
+
RpcClient.Protocol | Registry
|
|
763
|
+
> =>
|
|
764
|
+
Layer.effect(EventLogRemote, makeEncryptedWith(options)).pipe(
|
|
765
|
+
Layer.provide(EventLogRemoteClient.layer),
|
|
766
|
+
Layer.provide(layerSubtle)
|
|
767
|
+
)
|
|
768
|
+
|
|
769
|
+
/**
|
|
770
|
+
* Provides an encrypted `EventLogRemote` using the remote RPC client and the
|
|
771
|
+
* default Web Crypto encryption layer.
|
|
772
|
+
*
|
|
773
|
+
* @see {@link layerEncryptedWith} for opting out of running compaction
|
|
774
|
+
*
|
|
428
775
|
* @stability unstable
|
|
429
776
|
* @category layers
|
|
430
777
|
* @since 4.0.0
|
|
@@ -433,10 +780,7 @@ export const layerEncrypted: Layer.Layer<
|
|
|
433
780
|
EventLogRemote,
|
|
434
781
|
EventLogRemoteError,
|
|
435
782
|
RpcClient.Protocol | Registry
|
|
436
|
-
> =
|
|
437
|
-
Layer.provide(EventLogRemoteClient.layer),
|
|
438
|
-
Layer.provide(layerSubtle)
|
|
439
|
-
)
|
|
783
|
+
> = layerEncryptedWith({})
|
|
440
784
|
|
|
441
785
|
/**
|
|
442
786
|
* Provides an unencrypted `EventLogRemote` using the remote RPC client.
|
|
@@ -78,6 +78,8 @@ export const layerAuthMiddleware: Layer.Layer<
|
|
|
78
78
|
*
|
|
79
79
|
* Use the connection's `ConnectionWrites.track` in `onWrite` and
|
|
80
80
|
* `ConnectionWrites.filter` in `changes` to suppress its own write echoes.
|
|
81
|
+
* `compaction` sets `HelloResponse.compaction`, advertising that the server
|
|
82
|
+
* also serves `EventLogCompactionRpcs`.
|
|
81
83
|
*
|
|
82
84
|
* @stability unstable
|
|
83
85
|
* @category layers
|
|
@@ -86,6 +88,7 @@ export const layerAuthMiddleware: Layer.Layer<
|
|
|
86
88
|
export const layerRpcHandlers = (options: {
|
|
87
89
|
readonly remoteId: RemoteId
|
|
88
90
|
readonly firstSequence?: number | undefined
|
|
91
|
+
readonly compaction?: boolean | undefined
|
|
89
92
|
readonly authorizeIdentity?: (publicKey: string) => Effect.Effect<void, EventLogProtocolError>
|
|
90
93
|
readonly getOrCreateSessionAuthBinding: (
|
|
91
94
|
publicKey: string,
|
|
@@ -111,7 +114,7 @@ export const layerRpcHandlers = (options: {
|
|
|
111
114
|
capacity: Number.MAX_SAFE_INTEGER,
|
|
112
115
|
timeToLive: EventLogSessionAuth.SessionAuthChallengeTimeToLiveMillis
|
|
113
116
|
})
|
|
114
|
-
|
|
117
|
+
const toFrames = makeFramer()
|
|
115
118
|
|
|
116
119
|
const persistedSigningPublicKeys = yield* Cache.makeWith(
|
|
117
120
|
(key: SessionAuthCacheKey) =>
|
|
@@ -139,7 +142,8 @@ export const layerRpcHandlers = (options: {
|
|
|
139
142
|
return new HelloResponse({
|
|
140
143
|
remoteId: options.remoteId,
|
|
141
144
|
challenge,
|
|
142
|
-
firstSequence: options.firstSequence
|
|
145
|
+
firstSequence: options.firstSequence,
|
|
146
|
+
compaction: options.compaction === true ? true : undefined
|
|
143
147
|
})
|
|
144
148
|
}),
|
|
145
149
|
"EventLog.Authenticate": Effect.fnUntraced(function*(request, { client }) {
|
|
@@ -229,12 +233,7 @@ export const layerRpcHandlers = (options: {
|
|
|
229
233
|
startSequence: request.startSequence,
|
|
230
234
|
writes: getConnectionWrites(client)
|
|
231
235
|
}).pipe(
|
|
232
|
-
Stream.mapArray(Arr.flatMap(
|
|
233
|
-
if (data.byteLength <= ChunkedMessage.chunkSize) {
|
|
234
|
-
return [new SingleMessage({ data })]
|
|
235
|
-
}
|
|
236
|
-
return ChunkedMessage.split(chunkedIdCounter++, data)
|
|
237
|
-
})),
|
|
236
|
+
Stream.mapArray(Arr.flatMap(toFrames)),
|
|
238
237
|
Stream.catchCause((_) =>
|
|
239
238
|
Stream.fail(
|
|
240
239
|
new EventLogProtocolError({
|
|
@@ -424,4 +423,20 @@ class SessionAuthCacheKey extends Data.Class<{
|
|
|
424
423
|
}
|
|
425
424
|
}
|
|
426
425
|
|
|
426
|
+
/**
|
|
427
|
+
* Frames one encoded message for a response stream: a `SingleMessage` when it
|
|
428
|
+
* fits, or the pieces of a `ChunkedMessage` with the next id otherwise.
|
|
429
|
+
*
|
|
430
|
+
* @internal
|
|
431
|
+
*/
|
|
432
|
+
export const makeFramer = (): (
|
|
433
|
+
data: Uint8Array<ArrayBuffer>
|
|
434
|
+
) => NonEmptyReadonlyArray<SingleMessage | ChunkedMessage> => {
|
|
435
|
+
let chunkedIdCounter = 0
|
|
436
|
+
return (data) =>
|
|
437
|
+
data.byteLength <= ChunkedMessage.chunkSize
|
|
438
|
+
? [new SingleMessage({ data })]
|
|
439
|
+
: ChunkedMessage.split(chunkedIdCounter++, data)
|
|
440
|
+
}
|
|
441
|
+
|
|
427
442
|
const constEmptyPrivateKey = Redacted.make(new Uint8Array(32))
|