effect 4.0.5 → 4.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ai-docs/package.json +1 -1
- package/ai-docs/src/06_schedule/10_schedules.ts +5 -4
- package/ai-docs/tsconfig.json +3 -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/Array.d.ts +117 -52
- package/dist/Array.d.ts.map +1 -1
- package/dist/Array.js +41 -20
- package/dist/Array.js.map +1 -1
- package/dist/Bytes.d.ts +79 -0
- package/dist/Bytes.d.ts.map +1 -0
- package/dist/Bytes.js +109 -0
- package/dist/Bytes.js.map +1 -0
- package/dist/Channel.d.ts +181 -13
- package/dist/Channel.d.ts.map +1 -1
- package/dist/Channel.js +144 -34
- package/dist/Channel.js.map +1 -1
- package/dist/ChannelSchema.d.ts.map +1 -1
- package/dist/ChannelSchema.js.map +1 -1
- package/dist/Chunk.d.ts +39 -21
- package/dist/Chunk.d.ts.map +1 -1
- package/dist/Chunk.js +26 -17
- package/dist/Chunk.js.map +1 -1
- package/dist/Config.d.ts.map +1 -1
- package/dist/Config.js +8 -3
- package/dist/Config.js.map +1 -1
- package/dist/ConfigProvider.d.ts.map +1 -1
- package/dist/ConfigProvider.js +2 -1
- package/dist/ConfigProvider.js.map +1 -1
- package/dist/Cron.d.ts +2 -2
- package/dist/Cron.d.ts.map +1 -1
- package/dist/Cron.js +6 -3
- 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.map +1 -1
- package/dist/Duration.js +56 -16
- package/dist/Duration.js.map +1 -1
- package/dist/Effect.d.ts +488 -164
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +204 -38
- 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/Equivalence.d.ts +2 -1
- package/dist/Equivalence.d.ts.map +1 -1
- package/dist/Equivalence.js +12 -8
- package/dist/Equivalence.js.map +1 -1
- package/dist/Exit.d.ts +27 -12
- package/dist/Exit.d.ts.map +1 -1
- package/dist/Exit.js +8 -3
- package/dist/Exit.js.map +1 -1
- package/dist/FiberHandle.d.ts +2 -0
- package/dist/FiberHandle.d.ts.map +1 -1
- package/dist/FiberHandle.js +9 -4
- package/dist/FiberHandle.js.map +1 -1
- package/dist/FiberMap.d.ts +2 -0
- package/dist/FiberMap.d.ts.map +1 -1
- package/dist/FiberMap.js +5 -2
- package/dist/FiberMap.js.map +1 -1
- package/dist/FileSystem.d.ts +5 -0
- package/dist/FileSystem.d.ts.map +1 -1
- package/dist/FileSystem.js +3 -0
- 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/Graph.d.ts.map +1 -1
- package/dist/Graph.js.map +1 -1
- package/dist/Hash.d.ts.map +1 -1
- package/dist/Hash.js +4 -1
- package/dist/Hash.js.map +1 -1
- package/dist/HashSet.d.ts.map +1 -1
- package/dist/HashSet.js.map +1 -1
- package/dist/Iterable.d.ts.map +1 -1
- package/dist/Iterable.js +18 -17
- package/dist/Iterable.js.map +1 -1
- package/dist/JsonPatch.js +4 -0
- package/dist/JsonPatch.js.map +1 -1
- package/dist/JsonSchema.d.ts +9 -3
- package/dist/JsonSchema.d.ts.map +1 -1
- package/dist/JsonSchema.js +32 -43
- package/dist/JsonSchema.js.map +1 -1
- package/dist/Layer.d.ts.map +1 -1
- package/dist/Layer.js +2 -2
- package/dist/Layer.js.map +1 -1
- package/dist/ManagedRuntime.d.ts +19 -1
- package/dist/ManagedRuntime.d.ts.map +1 -1
- package/dist/ManagedRuntime.js +62 -6
- package/dist/ManagedRuntime.js.map +1 -1
- package/dist/Metric.d.ts +135 -3
- package/dist/Metric.d.ts.map +1 -1
- package/dist/Metric.js +197 -25
- package/dist/Metric.js.map +1 -1
- package/dist/MutableHashMap.d.ts.map +1 -1
- package/dist/MutableHashMap.js.map +1 -1
- 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/Number.js +2 -2
- package/dist/Number.js.map +1 -1
- package/dist/Optic.d.ts.map +1 -1
- package/dist/Optic.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/Path.d.ts.map +1 -1
- package/dist/Path.js +8 -1
- package/dist/Path.js.map +1 -1
- package/dist/Pool.d.ts.map +1 -1
- package/dist/Pool.js +77 -27
- package/dist/Pool.js.map +1 -1
- package/dist/PubSub.d.ts.map +1 -1
- package/dist/PubSub.js +17 -13
- package/dist/PubSub.js.map +1 -1
- package/dist/Queue.d.ts +4 -1
- package/dist/Queue.d.ts.map +1 -1
- package/dist/Queue.js +4 -1
- package/dist/Queue.js.map +1 -1
- package/dist/Random.d.ts.map +1 -1
- package/dist/Random.js +1 -1
- package/dist/Random.js.map +1 -1
- package/dist/RcMap.d.ts +12 -7
- package/dist/RcMap.d.ts.map +1 -1
- package/dist/RcMap.js +9 -6
- package/dist/RcMap.js.map +1 -1
- package/dist/Record.d.ts +51 -0
- package/dist/Record.d.ts.map +1 -1
- package/dist/Record.js +17 -0
- package/dist/Record.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/References.d.ts +5 -4
- package/dist/References.d.ts.map +1 -1
- package/dist/References.js +5 -4
- package/dist/References.js.map +1 -1
- package/dist/RequestResolver.d.ts +31 -1
- package/dist/RequestResolver.d.ts.map +1 -1
- package/dist/RequestResolver.js +39 -4
- package/dist/RequestResolver.js.map +1 -1
- package/dist/Resource.js +1 -1
- package/dist/Resource.js.map +1 -1
- package/dist/Runtime.d.ts +3 -3
- package/dist/Runtime.d.ts.map +1 -1
- package/dist/Runtime.js +18 -15
- package/dist/Runtime.js.map +1 -1
- package/dist/Schedule.d.ts.map +1 -1
- package/dist/Schedule.js +1 -1
- package/dist/Schedule.js.map +1 -1
- package/dist/Schema.d.ts +408 -340
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +370 -47
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaAST.d.ts +9 -7
- package/dist/SchemaAST.d.ts.map +1 -1
- package/dist/SchemaAST.js +38 -25
- package/dist/SchemaAST.js.map +1 -1
- package/dist/SchemaGetter.d.ts +8 -3
- package/dist/SchemaGetter.d.ts.map +1 -1
- package/dist/SchemaGetter.js +15 -5
- package/dist/SchemaGetter.js.map +1 -1
- package/dist/SchemaIssue.d.ts +4 -4
- package/dist/SchemaIssue.d.ts.map +1 -1
- package/dist/SchemaIssue.js +29 -51
- package/dist/SchemaIssue.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 +75 -11
- package/dist/SchemaRepresentation.d.ts.map +1 -1
- package/dist/SchemaRepresentation.js +41 -13
- package/dist/SchemaRepresentation.js.map +1 -1
- package/dist/SchemaTransformation.d.ts +5 -2
- package/dist/SchemaTransformation.d.ts.map +1 -1
- package/dist/SchemaTransformation.js +10 -3
- package/dist/SchemaTransformation.js.map +1 -1
- package/dist/Scope.d.ts +12 -2
- package/dist/Scope.d.ts.map +1 -1
- package/dist/Scope.js +5 -0
- package/dist/Scope.js.map +1 -1
- package/dist/ScopedCache.d.ts +10 -7
- package/dist/ScopedCache.d.ts.map +1 -1
- package/dist/ScopedCache.js +9 -5
- package/dist/ScopedCache.js.map +1 -1
- package/dist/SemVer.d.ts +1196 -0
- package/dist/SemVer.d.ts.map +1 -0
- package/dist/SemVer.js +756 -0
- package/dist/SemVer.js.map +1 -0
- package/dist/SemVerRange.d.ts +559 -0
- package/dist/SemVerRange.d.ts.map +1 -0
- package/dist/SemVerRange.js +551 -0
- package/dist/SemVerRange.js.map +1 -0
- package/dist/Semaphore.d.ts.map +1 -1
- package/dist/Semaphore.js +54 -35
- package/dist/Semaphore.js.map +1 -1
- package/dist/Sink.d.ts.map +1 -1
- package/dist/Sink.js +13 -4
- package/dist/Sink.js.map +1 -1
- package/dist/Stream.d.ts +235 -8
- package/dist/Stream.d.ts.map +1 -1
- package/dist/Stream.js +167 -70
- package/dist/Stream.js.map +1 -1
- package/dist/String.d.ts +7 -2
- package/dist/String.d.ts.map +1 -1
- package/dist/String.js +11 -6
- package/dist/String.js.map +1 -1
- package/dist/TextDiff.d.ts +399 -0
- package/dist/TextDiff.d.ts.map +1 -0
- package/dist/TextDiff.js +634 -0
- package/dist/TextDiff.js.map +1 -0
- 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/TxHashMap.d.ts.map +1 -1
- package/dist/TxHashMap.js.map +1 -1
- package/dist/TxHashSet.d.ts.map +1 -1
- package/dist/TxHashSet.js.map +1 -1
- package/dist/ai/AiError.d.ts +68 -4
- package/dist/ai/AiError.d.ts.map +1 -1
- package/dist/ai/AiError.js +50 -2
- package/dist/ai/AiError.js.map +1 -1
- package/dist/ai/Chat.d.ts +1 -2
- package/dist/ai/Chat.d.ts.map +1 -1
- package/dist/ai/Chat.js +6 -3
- package/dist/ai/Chat.js.map +1 -1
- package/dist/ai/Decision.d.ts +46 -1
- package/dist/ai/Decision.d.ts.map +1 -1
- package/dist/ai/Decision.js.map +1 -1
- package/dist/ai/DecisionModel.d.ts +129 -11
- package/dist/ai/DecisionModel.d.ts.map +1 -1
- package/dist/ai/DecisionModel.js +182 -94
- package/dist/ai/DecisionModel.js.map +1 -1
- package/dist/ai/EmbeddingModel.d.ts +10 -0
- package/dist/ai/EmbeddingModel.d.ts.map +1 -1
- package/dist/ai/EmbeddingModel.js +21 -7
- package/dist/ai/EmbeddingModel.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/McpClient.d.ts +289 -0
- package/dist/ai/McpClient.d.ts.map +1 -0
- package/dist/ai/McpClient.js +819 -0
- package/dist/ai/McpClient.js.map +1 -0
- package/dist/ai/McpClientError.d.ts +254 -0
- package/dist/ai/McpClientError.d.ts.map +1 -0
- package/dist/ai/McpClientError.js +260 -0
- package/dist/ai/McpClientError.js.map +1 -0
- package/dist/ai/McpProtocol.d.ts +2 -2
- package/dist/ai/McpProtocol.d.ts.map +1 -1
- package/dist/ai/McpSchema.d.ts +258 -125
- package/dist/ai/McpSchema.d.ts.map +1 -1
- package/dist/ai/McpSchema.js +94 -24
- package/dist/ai/McpSchema.js.map +1 -1
- package/dist/ai/McpServer.d.ts.map +1 -1
- package/dist/ai/McpServer.js +46 -37
- package/dist/ai/McpServer.js.map +1 -1
- package/dist/ai/Prompt.d.ts +74 -20
- package/dist/ai/Prompt.d.ts.map +1 -1
- package/dist/ai/Prompt.js +61 -1
- package/dist/ai/Prompt.js.map +1 -1
- package/dist/ai/Response.d.ts +160 -3
- package/dist/ai/Response.d.ts.map +1 -1
- package/dist/ai/Response.js +39 -37
- package/dist/ai/Response.js.map +1 -1
- package/dist/ai/Tool.d.ts +36 -4
- 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 +48 -1
- package/dist/ai/Toolkit.d.ts.map +1 -1
- package/dist/ai/Toolkit.js +73 -13
- package/dist/ai/Toolkit.js.map +1 -1
- package/dist/ai/index.d.ts +10 -0
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +10 -0
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/internal/mcpCore.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2024_11_05.js +1 -1
- package/dist/ai/internal/mcpProtocol/v2024_11_05.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_03_26.js +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_03_26.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_06_18.js +2 -2
- package/dist/ai/internal/mcpProtocol/v2025_06_18.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_11_25.js +2 -2
- package/dist/ai/internal/mcpProtocol/v2025_11_25.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js +4 -7
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
- package/dist/ai/internal/mcpProtocol.js +16 -2
- package/dist/ai/internal/mcpProtocol.js.map +1 -1
- package/dist/ai/internal/mcpRuntime.js +3 -4
- package/dist/ai/internal/mcpRuntime.js.map +1 -1
- package/dist/ai/internal/mcpSchema/v2024_11_05.js +19 -13
- package/dist/ai/internal/mcpSchema/v2024_11_05.js.map +1 -1
- package/dist/ai/internal/mcpSchema/v2025_03_26.js +3 -2
- package/dist/ai/internal/mcpSchema/v2025_03_26.js.map +1 -1
- package/dist/ai/internal/mcpSchema/v2025_06_18.js +7 -7
- package/dist/ai/internal/mcpSchema/v2025_06_18.js.map +1 -1
- package/dist/ai/internal/mcpSchema/v2025_11_25.js +8 -8
- package/dist/ai/internal/mcpSchema/v2025_11_25.js.map +1 -1
- package/dist/ai/internal/mcpSchema/v2026_07_28.js +43 -42
- package/dist/ai/internal/mcpSchema/v2026_07_28.js.map +1 -1
- package/dist/cli/Argument.d.ts +15 -0
- package/dist/cli/Argument.d.ts.map +1 -1
- package/dist/cli/Argument.js +5 -0
- package/dist/cli/Argument.js.map +1 -1
- package/dist/cli/CliError.d.ts +120 -2
- package/dist/cli/CliError.d.ts.map +1 -1
- package/dist/cli/CliError.js +106 -5
- package/dist/cli/CliError.js.map +1 -1
- package/dist/cli/CliOutput.d.ts +155 -6
- package/dist/cli/CliOutput.d.ts.map +1 -1
- package/dist/cli/CliOutput.js +62 -6
- package/dist/cli/CliOutput.js.map +1 -1
- package/dist/cli/Command.d.ts +310 -18
- package/dist/cli/Command.d.ts.map +1 -1
- package/dist/cli/Command.js +164 -33
- package/dist/cli/Command.js.map +1 -1
- package/dist/cli/Completions.d.ts +63 -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 +130 -0
- package/dist/cli/Flag.d.ts.map +1 -1
- package/dist/cli/Flag.js +61 -0
- package/dist/cli/Flag.js.map +1 -1
- package/dist/cli/GlobalFlag.d.ts.map +1 -1
- package/dist/cli/GlobalFlag.js +14 -6
- package/dist/cli/GlobalFlag.js.map +1 -1
- package/dist/cli/Param.d.ts +116 -0
- package/dist/cli/Param.d.ts.map +1 -1
- package/dist/cli/Param.js +77 -2
- package/dist/cli/Param.js.map +1 -1
- package/dist/cli/TerminalCapabilities.d.ts +85 -0
- package/dist/cli/TerminalCapabilities.d.ts.map +1 -0
- package/dist/cli/TerminalCapabilities.js +124 -0
- package/dist/cli/TerminalCapabilities.js.map +1 -0
- package/dist/cli/index.d.ts +5 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +5 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/internal/command.d.ts +2 -1
- package/dist/cli/internal/command.d.ts.map +1 -1
- package/dist/cli/internal/command.js +5 -2
- package/dist/cli/internal/command.js.map +1 -1
- package/dist/cli/internal/completions/bash.js +77 -30
- package/dist/cli/internal/completions/bash.js.map +1 -1
- package/dist/cli/internal/completions/descriptor.js +9 -1
- package/dist/cli/internal/completions/descriptor.js.map +1 -1
- package/dist/cli/internal/completions/fish.js +10 -8
- package/dist/cli/internal/completions/fish.js.map +1 -1
- package/dist/cli/internal/completions/powershell.js +18 -9
- package/dist/cli/internal/completions/powershell.js.map +1 -1
- package/dist/cli/internal/completions/zsh.js +8 -5
- package/dist/cli/internal/completions/zsh.js.map +1 -1
- package/dist/cli/internal/formatter.d.ts +2 -0
- package/dist/cli/internal/formatter.d.ts.map +1 -0
- package/dist/cli/internal/formatter.js +15 -0
- package/dist/cli/internal/formatter.js.map +1 -0
- package/dist/cli/internal/lexer.js +24 -10
- package/dist/cli/internal/lexer.js.map +1 -1
- package/dist/cli/internal/parser.js +24 -12
- package/dist/cli/internal/parser.js.map +1 -1
- package/dist/cluster/ClusterCron.d.ts +29 -1
- package/dist/cluster/ClusterCron.d.ts.map +1 -1
- package/dist/cluster/ClusterCron.js +64 -32
- package/dist/cluster/ClusterCron.js.map +1 -1
- package/dist/cluster/ClusterMetrics.d.ts +143 -7
- package/dist/cluster/ClusterMetrics.d.ts.map +1 -1
- package/dist/cluster/ClusterMetrics.js +151 -7
- package/dist/cluster/ClusterMetrics.js.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.d.ts +1 -1
- package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.js +82 -21
- package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
- package/dist/cluster/Entity.d.ts +2 -0
- package/dist/cluster/Entity.d.ts.map +1 -1
- package/dist/cluster/Entity.js.map +1 -1
- package/dist/cluster/MessageStorage.d.ts +44 -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/Runners.d.ts.map +1 -1
- package/dist/cluster/Runners.js +54 -15
- package/dist/cluster/Runners.js.map +1 -1
- package/dist/cluster/Sharding.d.ts +1 -0
- package/dist/cluster/Sharding.d.ts.map +1 -1
- package/dist/cluster/Sharding.js +155 -52
- package/dist/cluster/Sharding.js.map +1 -1
- package/dist/cluster/ShardingConfig.d.ts +30 -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/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.map +1 -1
- package/dist/cluster/SqlMessageStorage.js +40 -50
- package/dist/cluster/SqlMessageStorage.js.map +1 -1
- package/dist/cluster/SqlRunnerStorage.d.ts +2 -2
- package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
- package/dist/cluster/SqlRunnerStorage.js +97 -43
- package/dist/cluster/SqlRunnerStorage.js.map +1 -1
- package/dist/cluster/internal/entityManager.js +119 -28
- package/dist/cluster/internal/entityManager.js.map +1 -1
- package/dist/devtools/DevTools.d.ts +3 -2
- package/dist/devtools/DevTools.d.ts.map +1 -1
- package/dist/devtools/DevTools.js +3 -2
- package/dist/devtools/DevTools.js.map +1 -1
- package/dist/devtools/DevToolsClient.d.ts +11 -0
- package/dist/devtools/DevToolsClient.d.ts.map +1 -1
- package/dist/devtools/DevToolsClient.js +33 -4
- 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 +29 -0
- package/dist/encoding/Base64Url.d.ts.map +1 -1
- package/dist/encoding/Base64Url.js +29 -0
- package/dist/encoding/Base64Url.js.map +1 -1
- package/dist/encoding/Ini.d.ts.map +1 -1
- package/dist/encoding/Ini.js +3 -0
- package/dist/encoding/Ini.js.map +1 -1
- package/dist/encoding/JsonArray.d.ts +270 -0
- package/dist/encoding/JsonArray.d.ts.map +1 -0
- package/dist/encoding/JsonArray.js +691 -0
- package/dist/encoding/JsonArray.js.map +1 -0
- package/dist/encoding/Ndjson.d.ts +43 -4
- package/dist/encoding/Ndjson.d.ts.map +1 -1
- package/dist/encoding/Ndjson.js +169 -18
- package/dist/encoding/Ndjson.js.map +1 -1
- package/dist/encoding/SchemaBinary.d.ts +9 -1
- package/dist/encoding/SchemaBinary.d.ts.map +1 -1
- package/dist/encoding/SchemaBinary.js +12 -19
- 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/Tar.d.ts +309 -0
- package/dist/encoding/Tar.d.ts.map +1 -0
- package/dist/encoding/Tar.js +1182 -0
- package/dist/encoding/Tar.js.map +1 -0
- package/dist/encoding/Toml.d.ts.map +1 -1
- package/dist/encoding/Toml.js +24 -19
- package/dist/encoding/Toml.js.map +1 -1
- package/dist/encoding/Xml.d.ts +464 -0
- package/dist/encoding/Xml.d.ts.map +1 -0
- package/dist/encoding/Xml.js +1619 -0
- package/dist/encoding/Xml.js.map +1 -0
- package/dist/encoding/Yaml.d.ts +6 -2
- package/dist/encoding/Yaml.d.ts.map +1 -1
- package/dist/encoding/Yaml.js +97 -34
- package/dist/encoding/Yaml.js.map +1 -1
- package/dist/encoding/Zip.d.ts +413 -0
- package/dist/encoding/Zip.d.ts.map +1 -0
- package/dist/encoding/Zip.js +1255 -0
- package/dist/encoding/Zip.js.map +1 -0
- package/dist/encoding/index.d.ts +20 -0
- package/dist/encoding/index.d.ts.map +1 -1
- package/dist/encoding/index.js +20 -0
- package/dist/encoding/index.js.map +1 -1
- package/dist/eventlog/EventJournal.d.ts +90 -5
- package/dist/eventlog/EventJournal.d.ts.map +1 -1
- package/dist/eventlog/EventJournal.js +488 -228
- package/dist/eventlog/EventJournal.js.map +1 -1
- package/dist/eventlog/EventLog.d.ts +180 -12
- package/dist/eventlog/EventLog.d.ts.map +1 -1
- package/dist/eventlog/EventLog.js +394 -146
- package/dist/eventlog/EventLog.js.map +1 -1
- package/dist/eventlog/EventLogEncryption.d.ts +36 -30
- package/dist/eventlog/EventLogEncryption.d.ts.map +1 -1
- package/dist/eventlog/EventLogEncryption.js +97 -38
- package/dist/eventlog/EventLogEncryption.js.map +1 -1
- package/dist/eventlog/EventLogMessage.d.ts +74 -34
- package/dist/eventlog/EventLogMessage.d.ts.map +1 -1
- package/dist/eventlog/EventLogMessage.js +45 -11
- package/dist/eventlog/EventLogMessage.js.map +1 -1
- package/dist/eventlog/EventLogRemote.d.ts +45 -8
- package/dist/eventlog/EventLogRemote.d.ts.map +1 -1
- package/dist/eventlog/EventLogRemote.js +51 -14
- package/dist/eventlog/EventLogRemote.js.map +1 -1
- package/dist/eventlog/EventLogServer.d.ts +46 -3
- package/dist/eventlog/EventLogServer.d.ts.map +1 -1
- package/dist/eventlog/EventLogServer.js +119 -19
- package/dist/eventlog/EventLogServer.js.map +1 -1
- package/dist/eventlog/EventLogServerEncrypted.d.ts +23 -33
- package/dist/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
- package/dist/eventlog/EventLogServerEncrypted.js +97 -70
- package/dist/eventlog/EventLogServerEncrypted.js.map +1 -1
- package/dist/eventlog/EventLogServerUnencrypted.d.ts +39 -5
- package/dist/eventlog/EventLogServerUnencrypted.d.ts.map +1 -1
- package/dist/eventlog/EventLogServerUnencrypted.js +151 -69
- package/dist/eventlog/EventLogServerUnencrypted.js.map +1 -1
- package/dist/eventlog/EventRow.d.ts +288 -0
- package/dist/eventlog/EventRow.d.ts.map +1 -0
- package/dist/eventlog/EventRow.js +435 -0
- package/dist/eventlog/EventRow.js.map +1 -0
- package/dist/eventlog/SqlEventJournal.d.ts +18 -18
- package/dist/eventlog/SqlEventJournal.d.ts.map +1 -1
- package/dist/eventlog/SqlEventJournal.js +417 -169
- package/dist/eventlog/SqlEventJournal.js.map +1 -1
- package/dist/eventlog/SqlEventLogServerEncrypted.d.ts +10 -18
- package/dist/eventlog/SqlEventLogServerEncrypted.d.ts.map +1 -1
- package/dist/eventlog/SqlEventLogServerEncrypted.js +179 -69
- package/dist/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
- package/dist/eventlog/SqlEventLogServerUnencrypted.d.ts +23 -3
- package/dist/eventlog/SqlEventLogServerUnencrypted.d.ts.map +1 -1
- package/dist/eventlog/SqlEventLogServerUnencrypted.js +102 -51
- package/dist/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
- package/dist/eventlog/index.d.ts +5 -0
- package/dist/eventlog/index.d.ts.map +1 -1
- package/dist/eventlog/index.js +5 -0
- package/dist/eventlog/index.js.map +1 -1
- package/dist/eventlog/internal/conflicts.d.ts +46 -0
- package/dist/eventlog/internal/conflicts.d.ts.map +1 -0
- package/dist/eventlog/internal/conflicts.js +89 -0
- package/dist/eventlog/internal/conflicts.js.map +1 -0
- package/dist/graphql/GraphQLClientError.d.ts +2 -2
- package/dist/graphql/GraphQLClientError.d.ts.map +1 -1
- package/dist/graphql/GraphQLClientError.js +4 -18
- package/dist/graphql/GraphQLClientError.js.map +1 -1
- package/dist/graphql/GraphQLProtocol.d.ts +12 -9
- package/dist/graphql/GraphQLProtocol.d.ts.map +1 -1
- package/dist/graphql/GraphQLProtocol.js +4 -3
- package/dist/graphql/GraphQLProtocol.js.map +1 -1
- package/dist/graphql/GraphQLResolver.d.ts +2 -0
- package/dist/graphql/GraphQLResolver.d.ts.map +1 -1
- package/dist/graphql/GraphQLResolver.js +74 -32
- package/dist/graphql/GraphQLResolver.js.map +1 -1
- package/dist/http/Cookies.d.ts.map +1 -1
- package/dist/http/Cookies.js +10 -9
- package/dist/http/Cookies.js.map +1 -1
- package/dist/http/FetchHttpClient.d.ts +8 -1
- package/dist/http/FetchHttpClient.d.ts.map +1 -1
- package/dist/http/FetchHttpClient.js +51 -4
- package/dist/http/FetchHttpClient.js.map +1 -1
- package/dist/http/FindMyWay/internal/router.js +10 -0
- package/dist/http/FindMyWay/internal/router.js.map +1 -1
- package/dist/http/Headers.d.ts +227 -0
- package/dist/http/Headers.d.ts.map +1 -1
- package/dist/http/Headers.js +261 -0
- package/dist/http/Headers.js.map +1 -1
- package/dist/http/HttpClient.d.ts +516 -0
- package/dist/http/HttpClient.d.ts.map +1 -1
- package/dist/http/HttpClient.js +286 -23
- 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 +127 -3
- package/dist/http/HttpClientRequest.d.ts.map +1 -1
- package/dist/http/HttpClientRequest.js +45 -3
- package/dist/http/HttpClientRequest.js.map +1 -1
- package/dist/http/HttpClientResponse.d.ts +53 -0
- package/dist/http/HttpClientResponse.d.ts.map +1 -1
- package/dist/http/HttpClientResponse.js +47 -0
- package/dist/http/HttpClientResponse.js.map +1 -1
- package/dist/http/HttpEffect.d.ts +6 -2
- package/dist/http/HttpEffect.d.ts.map +1 -1
- package/dist/http/HttpEffect.js +21 -17
- package/dist/http/HttpEffect.js.map +1 -1
- package/dist/http/HttpIncomingMessage.d.ts +2 -1
- package/dist/http/HttpIncomingMessage.d.ts.map +1 -1
- package/dist/http/HttpIncomingMessage.js +3 -23
- package/dist/http/HttpIncomingMessage.js.map +1 -1
- package/dist/http/HttpMiddleware.d.ts +119 -2
- package/dist/http/HttpMiddleware.d.ts.map +1 -1
- package/dist/http/HttpMiddleware.js +173 -29
- package/dist/http/HttpMiddleware.js.map +1 -1
- package/dist/http/HttpRouter.d.ts.map +1 -1
- package/dist/http/HttpRouter.js +9 -3
- package/dist/http/HttpRouter.js.map +1 -1
- package/dist/http/HttpServerError.d.ts +5 -2
- package/dist/http/HttpServerError.d.ts.map +1 -1
- package/dist/http/HttpServerError.js +7 -5
- package/dist/http/HttpServerError.js.map +1 -1
- package/dist/http/HttpServerRequest.d.ts +30 -5
- package/dist/http/HttpServerRequest.d.ts.map +1 -1
- package/dist/http/HttpServerRequest.js +109 -20
- package/dist/http/HttpServerRequest.js.map +1 -1
- package/dist/http/HttpServerResponse.d.ts +17 -8
- package/dist/http/HttpServerResponse.d.ts.map +1 -1
- package/dist/http/HttpServerResponse.js +37 -21
- package/dist/http/HttpServerResponse.js.map +1 -1
- package/dist/http/HttpStaticServer.d.ts +0 -12
- package/dist/http/HttpStaticServer.d.ts.map +1 -1
- package/dist/http/HttpStaticServer.js +65 -24
- package/dist/http/HttpStaticServer.js.map +1 -1
- package/dist/http/MultipartParser/internal/contentType.d.ts +15 -1
- package/dist/http/MultipartParser/internal/contentType.d.ts.map +1 -1
- package/dist/http/MultipartParser/internal/contentType.js +89 -7
- package/dist/http/MultipartParser/internal/contentType.js.map +1 -1
- package/dist/http/MultipartParser/internal/headers.d.ts.map +1 -1
- package/dist/http/MultipartParser/internal/headers.js +4 -12
- package/dist/http/MultipartParser/internal/headers.js.map +1 -1
- package/dist/http/MultipartParser/internal/multipart.d.ts.map +1 -1
- package/dist/http/MultipartParser/internal/multipart.js +6 -27
- package/dist/http/MultipartParser/internal/multipart.js.map +1 -1
- package/dist/http/Url.d.ts.map +1 -1
- package/dist/http/Url.js +6 -1
- package/dist/http/Url.js.map +1 -1
- package/dist/http/UrlParams.d.ts +3 -1
- package/dist/http/UrlParams.d.ts.map +1 -1
- package/dist/http/UrlParams.js +4 -2
- package/dist/http/UrlParams.js.map +1 -1
- package/dist/http/internal/compression.js +4 -5
- package/dist/http/internal/compression.js.map +1 -1
- package/dist/http/internal/decompression.js +20 -11
- 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/lazyStream.d.ts +2 -0
- package/dist/http/internal/lazyStream.d.ts.map +1 -0
- package/dist/http/internal/lazyStream.js +18 -0
- package/dist/http/internal/lazyStream.js.map +1 -0
- package/dist/http/internal/requestState.d.ts +2 -0
- package/dist/http/internal/requestState.d.ts.map +1 -0
- package/dist/http/internal/requestState.js +28 -0
- package/dist/http/internal/requestState.js.map +1 -0
- package/dist/http/internal/urlParams.js +25 -0
- package/dist/http/internal/urlParams.js.map +1 -1
- package/dist/http/internal/webResponse.d.ts +2 -0
- package/dist/http/internal/webResponse.d.ts.map +1 -0
- package/dist/http/internal/webResponse.js +12 -0
- package/dist/http/internal/webResponse.js.map +1 -0
- 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 +4 -7
- 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 +142 -23
- package/dist/http-api/HttpApiBuilder.js.map +1 -1
- package/dist/http-api/HttpApiClient.d.ts +99 -4
- package/dist/http-api/HttpApiClient.d.ts.map +1 -1
- package/dist/http-api/HttpApiClient.js +218 -60
- package/dist/http-api/HttpApiClient.js.map +1 -1
- package/dist/http-api/HttpApiEndpoint.d.ts +72 -29
- package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
- package/dist/http-api/HttpApiEndpoint.js +140 -14
- package/dist/http-api/HttpApiEndpoint.js.map +1 -1
- package/dist/http-api/HttpApiError.d.ts +58 -0
- package/dist/http-api/HttpApiError.d.ts.map +1 -1
- package/dist/http-api/HttpApiError.js +38 -12
- package/dist/http-api/HttpApiError.js.map +1 -1
- package/dist/http-api/HttpApiScalar.d.ts +2 -1
- package/dist/http-api/HttpApiScalar.d.ts.map +1 -1
- package/dist/http-api/HttpApiScalar.js +6 -3
- package/dist/http-api/HttpApiScalar.js.map +1 -1
- package/dist/http-api/HttpApiSchema.d.ts +242 -13
- package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
- package/dist/http-api/HttpApiSchema.js +149 -5
- package/dist/http-api/HttpApiSchema.js.map +1 -1
- package/dist/http-api/HttpApiSwagger.d.ts +5 -0
- package/dist/http-api/HttpApiSwagger.d.ts.map +1 -1
- package/dist/http-api/HttpApiSwagger.js +14 -4
- package/dist/http-api/HttpApiSwagger.js.map +1 -1
- package/dist/http-api/HttpApiTest.d.ts +13 -2
- package/dist/http-api/HttpApiTest.d.ts.map +1 -1
- package/dist/http-api/HttpApiTest.js +33 -11
- package/dist/http-api/HttpApiTest.js.map +1 -1
- package/dist/http-api/OpenApi.d.ts +17 -3
- package/dist/http-api/OpenApi.d.ts.map +1 -1
- package/dist/http-api/OpenApi.js +81 -47
- package/dist/http-api/OpenApi.js.map +1 -1
- package/dist/http-api/internal/path.js +35 -10
- package/dist/http-api/internal/path.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 +20 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -0
- 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 +3 -1
- package/dist/internal/core.js.map +1 -1
- package/dist/internal/dateTime.js +19 -7
- package/dist/internal/dateTime.js.map +1 -1
- package/dist/internal/effect.js +106 -87
- 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/hashMap.js +2 -2
- package/dist/internal/hashMap.js.map +1 -1
- package/dist/internal/hydration.d.ts +2 -0
- package/dist/internal/hydration.d.ts.map +1 -0
- package/dist/internal/hydration.js +15 -0
- package/dist/internal/hydration.js.map +1 -0
- package/dist/internal/inflate.d.ts +2 -0
- package/dist/internal/inflate.d.ts.map +1 -0
- package/dist/internal/inflate.js +680 -0
- package/dist/internal/inflate.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 +1 -1
- package/dist/internal/matcher.js.map +1 -1
- package/dist/internal/record.js +6 -0
- package/dist/internal/record.js.map +1 -1
- package/dist/internal/request.js +20 -7
- package/dist/internal/request.js.map +1 -1
- package/dist/internal/schedule.js +17 -22
- package/dist/internal/schedule.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 +253 -255
- 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/interpreter.js +51 -36
- package/dist/internal/schema/interpreter.js.map +1 -1
- package/dist/internal/schema/standardSchema.js +42 -35
- package/dist/internal/schema/standardSchema.js.map +1 -1
- package/dist/internal/schema/toCodeDocument.js +10 -5
- package/dist/internal/schema/toCodeDocument.js.map +1 -1
- package/dist/internal/schema/toCodec.js +99 -17
- package/dist/internal/schema/toCodec.js.map +1 -1
- package/dist/internal/schema/toFormatter.js +5 -5
- package/dist/internal/schema/toFormatter.js.map +1 -1
- package/dist/internal/schema/toJsonSchemaDocument.js +257 -170
- 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 +1 -3
- package/dist/internal/trie.js.map +1 -1
- package/dist/internal/uuid.js +7 -3
- package/dist/internal/uuid.js.map +1 -1
- package/dist/internal/version.js +1 -1
- package/dist/net/NetAddress.d.ts.map +1 -1
- package/dist/net/NetAddress.js +2 -8
- package/dist/net/NetAddress.js.map +1 -1
- package/dist/observability/OtlpExporter.d.ts.map +1 -1
- package/dist/observability/OtlpExporter.js +5 -12
- package/dist/observability/OtlpExporter.js.map +1 -1
- package/dist/observability/OtlpMetrics.d.ts.map +1 -1
- package/dist/observability/OtlpMetrics.js +5 -3
- package/dist/observability/OtlpMetrics.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 +3 -1
- package/dist/observability/OtlpResource.d.ts.map +1 -1
- package/dist/observability/OtlpResource.js +11 -4
- package/dist/observability/OtlpResource.js.map +1 -1
- package/dist/observability/OtlpSerialization.d.ts +5 -0
- package/dist/observability/OtlpSerialization.d.ts.map +1 -1
- package/dist/observability/OtlpSerialization.js +14 -3
- package/dist/observability/OtlpSerialization.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/observability/internal/protobuf.d.ts +0 -9
- package/dist/observability/internal/protobuf.d.ts.map +1 -1
- package/dist/observability/internal/protobuf.js +2 -10
- package/dist/observability/internal/protobuf.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/PersistedCache.d.ts.map +1 -1
- package/dist/persistence/PersistedCache.js +1 -1
- package/dist/persistence/PersistedCache.js.map +1 -1
- package/dist/persistence/PersistedQueue.d.ts +6 -2
- package/dist/persistence/PersistedQueue.d.ts.map +1 -1
- package/dist/persistence/PersistedQueue.js +162 -84
- package/dist/persistence/PersistedQueue.js.map +1 -1
- package/dist/persistence/Persistence.d.ts +28 -0
- package/dist/persistence/Persistence.d.ts.map +1 -1
- package/dist/persistence/Persistence.js +36 -8
- package/dist/persistence/Persistence.js.map +1 -1
- package/dist/persistence/RateLimiter.d.ts.map +1 -1
- package/dist/persistence/RateLimiter.js +8 -12
- package/dist/persistence/RateLimiter.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/UserDirectories.d.ts +129 -0
- package/dist/persistence/UserDirectories.d.ts.map +1 -0
- package/dist/persistence/UserDirectories.js +178 -0
- package/dist/persistence/UserDirectories.js.map +1 -0
- package/dist/persistence/index.d.ts +10 -0
- package/dist/persistence/index.d.ts.map +1 -1
- package/dist/persistence/index.js +10 -0
- package/dist/persistence/index.js.map +1 -1
- package/dist/process/ChildProcess.d.ts +32 -5
- package/dist/process/ChildProcess.d.ts.map +1 -1
- package/dist/process/ChildProcess.js.map +1 -1
- package/dist/process/ChildProcessSpawner.d.ts +30 -0
- package/dist/process/ChildProcessSpawner.d.ts.map +1 -1
- package/dist/process/ChildProcessSpawner.js +5 -2
- package/dist/process/ChildProcessSpawner.js.map +1 -1
- package/dist/reactivity/AsyncResult.d.ts +1 -1
- package/dist/reactivity/AsyncResult.d.ts.map +1 -1
- package/dist/reactivity/AsyncResult.js +1 -1
- package/dist/reactivity/AsyncResult.js.map +1 -1
- package/dist/reactivity/Atom.d.ts +69 -30
- package/dist/reactivity/Atom.d.ts.map +1 -1
- package/dist/reactivity/Atom.js +40 -15
- package/dist/reactivity/Atom.js.map +1 -1
- package/dist/reactivity/AtomHttpApi.d.ts +5 -5
- package/dist/reactivity/AtomHttpApi.d.ts.map +1 -1
- package/dist/reactivity/AtomHttpApi.js +1 -1
- package/dist/reactivity/AtomHttpApi.js.map +1 -1
- package/dist/reactivity/AtomRegistry.d.ts +2 -2
- package/dist/reactivity/AtomRegistry.d.ts.map +1 -1
- package/dist/reactivity/AtomRegistry.js +44 -9
- package/dist/reactivity/AtomRegistry.js.map +1 -1
- package/dist/reactivity/AtomRpc.d.ts +3 -3
- package/dist/reactivity/AtomRpc.d.ts.map +1 -1
- package/dist/reactivity/AtomRpc.js +1 -1
- package/dist/reactivity/AtomRpc.js.map +1 -1
- package/dist/reactivity/Hydration.d.ts.map +1 -1
- package/dist/reactivity/Hydration.js +46 -12
- package/dist/reactivity/Hydration.js.map +1 -1
- package/dist/reactivity/Reactivity.d.ts +71 -7
- package/dist/reactivity/Reactivity.d.ts.map +1 -1
- package/dist/reactivity/Reactivity.js +21 -12
- package/dist/reactivity/Reactivity.js.map +1 -1
- package/dist/rpc/Rpc.d.ts +18 -0
- package/dist/rpc/Rpc.d.ts.map +1 -1
- package/dist/rpc/Rpc.js +20 -0
- package/dist/rpc/Rpc.js.map +1 -1
- package/dist/rpc/RpcClient.d.ts +26 -2
- package/dist/rpc/RpcClient.d.ts.map +1 -1
- package/dist/rpc/RpcClient.js +198 -61
- package/dist/rpc/RpcClient.js.map +1 -1
- package/dist/rpc/RpcSerialization.d.ts +29 -0
- package/dist/rpc/RpcSerialization.d.ts.map +1 -1
- package/dist/rpc/RpcSerialization.js +41 -13
- package/dist/rpc/RpcSerialization.js.map +1 -1
- package/dist/rpc/RpcServer.d.ts.map +1 -1
- package/dist/rpc/RpcServer.js +20 -19
- 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 +1 -1
- package/dist/schema/VariantSchema.d.ts +22 -3
- package/dist/schema/VariantSchema.d.ts.map +1 -1
- package/dist/schema/VariantSchema.js +32 -18
- package/dist/schema/VariantSchema.js.map +1 -1
- package/dist/socket/Socket.d.ts +23 -1
- package/dist/socket/Socket.d.ts.map +1 -1
- package/dist/socket/Socket.js +36 -3
- package/dist/socket/Socket.js.map +1 -1
- package/dist/sql/Migrator.d.ts +2 -1
- package/dist/sql/Migrator.d.ts.map +1 -1
- package/dist/sql/Migrator.js +21 -6
- package/dist/sql/Migrator.js.map +1 -1
- package/dist/sql/SqlClient.d.ts +148 -5
- package/dist/sql/SqlClient.d.ts.map +1 -1
- package/dist/sql/SqlClient.js +155 -27
- package/dist/sql/SqlClient.js.map +1 -1
- package/dist/sql/SqlResolver.d.ts +13 -0
- package/dist/sql/SqlResolver.d.ts.map +1 -1
- package/dist/sql/SqlResolver.js +27 -4
- package/dist/sql/SqlResolver.js.map +1 -1
- package/dist/sql/Statement.d.ts +10 -1
- package/dist/sql/Statement.d.ts.map +1 -1
- package/dist/sql/Statement.js +45 -7
- package/dist/sql/Statement.js.map +1 -1
- package/dist/testing/TestClock.d.ts.map +1 -1
- package/dist/testing/TestClock.js +4 -2
- package/dist/testing/TestClock.js.map +1 -1
- package/dist/testing/TestSchema.d.ts +7 -1
- package/dist/testing/TestSchema.d.ts.map +1 -1
- package/dist/testing/TestSchema.js +9 -3
- package/dist/testing/TestSchema.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/WorkflowEngine.d.ts.map +1 -1
- package/dist/workflow/WorkflowEngine.js +18 -4
- package/dist/workflow/WorkflowEngine.js.map +1 -1
- package/package.json +13 -3
- package/src/Arbitrary.ts +10 -2
- package/src/Array.ts +128 -55
- package/src/Bytes.ts +111 -0
- package/src/Channel.ts +308 -452
- package/src/ChannelSchema.ts +1 -49
- package/src/Chunk.ts +55 -61
- package/src/Config.ts +12 -86
- package/src/ConfigProvider.ts +2 -1
- package/src/Cron.ts +6 -3
- package/src/Data.ts +60 -265
- package/src/Duration.ts +66 -16
- package/src/Effect.ts +503 -168
- package/src/Equal.ts +8 -1
- package/src/Equivalence.ts +7 -4
- package/src/Exit.ts +27 -12
- package/src/FiberHandle.ts +10 -9
- package/src/FiberMap.ts +13 -66
- package/src/FileSystem.ts +10 -0
- package/src/Formatter.ts +28 -13
- package/src/Graph.ts +171 -1263
- package/src/Hash.ts +4 -1
- package/src/HashSet.ts +0 -60
- package/src/Iterable.ts +15 -14
- package/src/JsonPatch.ts +4 -0
- package/src/JsonSchema.ts +40 -43
- package/src/Layer.ts +2 -2
- package/src/ManagedRuntime.ts +72 -6
- package/src/Metric.ts +252 -510
- package/src/MutableHashMap.ts +4 -473
- package/src/MutableList.ts +7 -5
- package/src/MutableRef.ts +8 -1
- package/src/Number.ts +2 -2
- package/src/Optic.ts +17 -332
- package/src/PartitionedSemaphore.ts +24 -13
- package/src/Path.ts +9 -1
- package/src/Pool.ts +109 -37
- package/src/PubSub.ts +17 -13
- package/src/Queue.ts +5 -37
- package/src/Random.ts +1 -1
- package/src/RcMap.ts +14 -8
- package/src/Record.ts +51 -0
- package/src/Ref.ts +15 -104
- package/src/References.ts +5 -4
- package/src/RequestResolver.ts +46 -87
- package/src/Resource.ts +1 -1
- package/src/Runtime.ts +19 -18
- package/src/Schedule.ts +3 -95
- package/src/Schema.ts +639 -381
- package/src/SchemaAST.ts +40 -29
- package/src/SchemaGetter.ts +22 -5
- package/src/SchemaIssue.ts +44 -53
- package/src/SchemaParser.ts +51 -18
- package/src/SchemaRepresentation.ts +95 -35
- package/src/SchemaTransformation.ts +10 -3
- package/src/Scope.ts +12 -2
- package/src/ScopedCache.ts +17 -142
- package/src/SemVer.ts +1528 -0
- package/src/SemVerRange.ts +883 -0
- package/src/Semaphore.ts +67 -40
- package/src/Sink.ts +21 -4
- package/src/Stream.ts +367 -1027
- package/src/String.ts +11 -8
- package/src/TextDiff.ts +766 -0
- package/src/Tracer.ts +15 -1
- package/src/TxHashMap.ts +1 -103
- package/src/TxHashSet.ts +48 -753
- package/src/ai/AiError.ts +66 -4
- package/src/ai/Chat.ts +10 -5
- package/src/ai/Decision.ts +49 -1
- package/src/ai/DecisionModel.ts +264 -108
- package/src/ai/EmbeddingModel.ts +25 -13
- package/src/ai/LanguageModel.ts +9 -0
- package/src/ai/McpClient.ts +1211 -0
- package/src/ai/McpClientError.ts +329 -0
- package/src/ai/McpProtocol.ts +2 -2
- package/src/ai/McpSchema.ts +153 -35
- package/src/ai/McpServer.ts +231 -233
- package/src/ai/Prompt.ts +114 -35
- package/src/ai/Response.ts +220 -65
- package/src/ai/Tool.ts +50 -6
- package/src/ai/Toolkit.ts +82 -11
- package/src/ai/index.ts +12 -0
- package/src/ai/internal/mcpCore.ts +13 -14
- package/src/ai/internal/mcpProtocol/v2024_11_05.ts +1 -1
- package/src/ai/internal/mcpProtocol/v2025_03_26.ts +1 -1
- package/src/ai/internal/mcpProtocol/v2025_06_18.ts +3 -3
- package/src/ai/internal/mcpProtocol/v2025_11_25.ts +3 -3
- package/src/ai/internal/mcpProtocol/v2026_07_28.ts +12 -14
- package/src/ai/internal/mcpProtocol.ts +22 -2
- package/src/ai/internal/mcpRuntime.ts +3 -4
- package/src/ai/internal/mcpSchema/v2024_11_05.ts +20 -13
- package/src/ai/internal/mcpSchema/v2025_03_26.ts +4 -2
- package/src/ai/internal/mcpSchema/v2025_06_18.ts +7 -7
- package/src/ai/internal/mcpSchema/v2025_11_25.ts +8 -8
- package/src/ai/internal/mcpSchema/v2026_07_28.ts +44 -42
- package/src/cli/Argument.ts +15 -0
- package/src/cli/CliError.ts +136 -4
- package/src/cli/CliOutput.ts +183 -6
- package/src/cli/Command.ts +367 -48
- package/src/cli/Completions.ts +56 -0
- package/src/cli/Flag.ts +132 -0
- package/src/cli/GlobalFlag.ts +5 -6
- package/src/cli/Param.ts +151 -6
- package/src/cli/TerminalCapabilities.ts +159 -0
- package/src/cli/index.ts +6 -0
- package/src/cli/internal/command.ts +8 -3
- package/src/cli/internal/completions/bash.ts +83 -32
- package/src/cli/internal/completions/descriptor.ts +11 -1
- package/src/cli/internal/completions/fish.ts +10 -8
- package/src/cli/internal/completions/powershell.ts +23 -14
- package/src/cli/internal/completions/zsh.ts +8 -5
- package/src/cli/internal/formatter.ts +18 -0
- package/src/cli/internal/lexer.ts +12 -5
- package/src/cli/internal/parser.ts +31 -11
- package/src/cluster/ClusterCron.ts +94 -35
- package/src/cluster/ClusterMetrics.ts +149 -7
- package/src/cluster/ClusterWorkflowEngine.ts +130 -57
- package/src/cluster/Entity.ts +4 -0
- package/src/cluster/MessageStorage.ts +26 -14
- package/src/cluster/Runners.ts +76 -25
- package/src/cluster/Sharding.ts +200 -58
- package/src/cluster/ShardingConfig.ts +20 -0
- package/src/cluster/Snowflake.ts +3 -7
- package/src/cluster/SqlMessageStorage.ts +58 -55
- package/src/cluster/SqlRunnerStorage.ts +120 -51
- package/src/cluster/internal/entityManager.ts +155 -32
- package/src/devtools/DevTools.ts +3 -2
- package/src/devtools/DevToolsClient.ts +29 -10
- package/src/encoding/Base64.ts +38 -0
- package/src/encoding/Base64Url.ts +31 -0
- package/src/encoding/Ini.ts +3 -0
- package/src/encoding/JsonArray.ts +849 -0
- package/src/encoding/Ndjson.ts +211 -20
- package/src/encoding/SchemaBinary.ts +14 -48
- package/src/encoding/Sse.ts +4 -3
- package/src/encoding/Tar.ts +1417 -0
- package/src/encoding/Toml.ts +36 -19
- package/src/encoding/Xml.ts +2037 -0
- package/src/encoding/Yaml.ts +108 -36
- package/src/encoding/Zip.ts +1558 -0
- package/src/encoding/index.ts +24 -0
- package/src/eventlog/EventJournal.ts +611 -227
- package/src/eventlog/EventLog.ts +496 -196
- package/src/eventlog/EventLogEncryption.ts +128 -43
- package/src/eventlog/EventLogMessage.ts +62 -11
- package/src/eventlog/EventLogRemote.ts +77 -21
- package/src/eventlog/EventLogServer.ts +162 -20
- package/src/eventlog/EventLogServerEncrypted.ts +121 -80
- package/src/eventlog/EventLogServerUnencrypted.ts +180 -77
- package/src/eventlog/EventRow.ts +706 -0
- package/src/eventlog/SqlEventJournal.ts +496 -193
- package/src/eventlog/SqlEventLogServerEncrypted.ts +212 -83
- package/src/eventlog/SqlEventLogServerUnencrypted.ts +141 -62
- package/src/eventlog/index.ts +6 -0
- package/src/eventlog/internal/conflicts.ts +119 -0
- package/src/graphql/GraphQLClientError.ts +5 -12
- package/src/graphql/GraphQLProtocol.ts +12 -9
- package/src/graphql/GraphQLResolver.ts +90 -239
- package/src/http/Cookies.ts +10 -11
- package/src/http/FetchHttpClient.ts +56 -6
- package/src/http/FindMyWay/internal/router.ts +11 -0
- package/src/http/Headers.ts +337 -154
- package/src/http/HttpClient.ts +673 -142
- package/src/http/HttpClientError.ts +35 -1
- package/src/http/HttpClientRequest.ts +151 -5
- package/src/http/HttpClientResponse.ts +71 -0
- package/src/http/HttpEffect.ts +25 -33
- package/src/http/HttpIncomingMessage.ts +3 -23
- package/src/http/HttpMiddleware.ts +194 -40
- package/src/http/HttpRouter.ts +10 -3
- package/src/http/HttpServerError.ts +8 -5
- package/src/http/HttpServerRequest.ts +172 -27
- package/src/http/HttpServerResponse.ts +49 -23
- package/src/http/HttpStaticServer.ts +71 -26
- package/src/http/MultipartParser/internal/contentType.ts +109 -8
- package/src/http/MultipartParser/internal/headers.ts +4 -16
- package/src/http/MultipartParser/internal/multipart.ts +10 -32
- package/src/http/Url.ts +6 -1
- package/src/http/UrlParams.ts +6 -1
- package/src/http/internal/compression.ts +4 -5
- package/src/http/internal/decompression.ts +32 -17
- package/src/http/internal/httpBody.ts +10 -2
- package/src/http/internal/lazyStream.ts +25 -0
- package/src/http/internal/requestState.ts +33 -0
- package/src/http/internal/urlParams.ts +29 -0
- package/src/http/internal/webResponse.ts +20 -0
- package/src/http-api/HttpApi.ts +4 -7
- package/src/http-api/HttpApiBuilder.ts +190 -32
- package/src/http-api/HttpApiClient.ts +364 -90
- package/src/http-api/HttpApiEndpoint.ts +248 -46
- package/src/http-api/HttpApiError.ts +55 -0
- package/src/http-api/HttpApiScalar.ts +4 -3
- package/src/http-api/HttpApiSchema.ts +373 -18
- package/src/http-api/HttpApiSwagger.ts +11 -4
- package/src/http-api/HttpApiTest.ts +36 -11
- package/src/http-api/OpenApi.ts +103 -58
- package/src/http-api/internal/path.ts +40 -12
- package/src/http-api/internal/toCodecHttpProperties.ts +56 -0
- package/src/index.ts +24 -0
- package/src/internal/arbitrary/runner.ts +133 -36
- package/src/internal/core.ts +3 -1
- package/src/internal/dateTime.ts +20 -7
- package/src/internal/effect.ts +144 -100
- package/src/internal/equal.ts +17 -0
- package/src/internal/hashMap.ts +2 -2
- package/src/internal/hydration.ts +15 -0
- package/src/internal/inflate.ts +710 -0
- package/src/internal/jsonSchema.ts +27 -0
- package/src/internal/matcher.ts +1 -1
- package/src/internal/record.ts +6 -0
- package/src/internal/request.ts +21 -6
- package/src/internal/schedule.ts +20 -39
- package/src/internal/schema/compilerRegistry.ts +6 -1
- package/src/internal/schema/content.ts +18 -0
- package/src/internal/schema/fromJsonSchemaDocument.ts +458 -351
- package/src/internal/schema/fromRepresentation.ts +2 -1
- package/src/internal/schema/interpreter.ts +58 -45
- package/src/internal/schema/standardSchema.ts +34 -32
- package/src/internal/schema/toCodeDocument.ts +12 -7
- package/src/internal/schema/toCodec.ts +134 -15
- package/src/internal/schema/toFormatter.ts +6 -6
- package/src/internal/schema/toJsonSchemaDocument.ts +246 -194
- package/src/internal/schema/toRepresentation.ts +122 -140
- package/src/internal/sql.ts +14 -0
- package/src/internal/trie.ts +1 -3
- package/src/internal/uuid.ts +15 -10
- package/src/internal/version.ts +1 -1
- package/src/net/NetAddress.ts +2 -9
- package/src/observability/OtlpExporter.ts +5 -12
- package/src/observability/OtlpMetrics.ts +5 -3
- package/src/observability/OtlpProxy.ts +314 -0
- package/src/observability/OtlpResource.ts +16 -6
- package/src/observability/OtlpSerialization.ts +17 -3
- package/src/observability/OtlpTracer.ts +4 -0
- package/src/observability/index.ts +6 -0
- package/src/observability/internal/protobuf.ts +2 -10
- package/src/persistence/CircuitBreaker.ts +1678 -0
- package/src/persistence/PersistedCache.ts +3 -1
- package/src/persistence/PersistedQueue.ts +223 -153
- package/src/persistence/Persistence.ts +64 -30
- package/src/persistence/RateLimiter.ts +18 -21
- package/src/persistence/Redis.ts +129 -8
- package/src/persistence/UserDirectories.ts +273 -0
- package/src/persistence/index.ts +12 -0
- package/src/process/ChildProcess.ts +32 -5
- package/src/process/ChildProcessSpawner.ts +41 -2
- package/src/reactivity/AsyncResult.ts +5 -39
- package/src/reactivity/Atom.ts +134 -166
- package/src/reactivity/AtomHttpApi.ts +10 -16
- package/src/reactivity/AtomRegistry.ts +50 -29
- package/src/reactivity/AtomRpc.ts +6 -22
- package/src/reactivity/Hydration.ts +53 -12
- package/src/reactivity/Reactivity.ts +97 -39
- package/src/rpc/Rpc.ts +21 -0
- package/src/rpc/RpcClient.ts +283 -104
- package/src/rpc/RpcSerialization.ts +53 -14
- package/src/rpc/RpcServer.ts +27 -21
- package/src/rpc/RpcTest.ts +3 -0
- package/src/schema/VariantSchema.ts +86 -22
- package/src/socket/Socket.ts +45 -20
- package/src/sql/Migrator.ts +26 -11
- package/src/sql/SqlClient.ts +273 -29
- package/src/sql/SqlResolver.ts +32 -9
- package/src/sql/Statement.ts +65 -10
- package/src/testing/TestClock.ts +4 -1
- package/src/testing/TestSchema.ts +9 -3
- package/src/workflow/DurableDeferred.ts +23 -6
- package/src/workflow/WorkflowEngine.ts +34 -10
- package/dist/http/internal/preResponseHandler.d.ts +0 -2
- package/dist/http/internal/preResponseHandler.d.ts.map +0 -1
- package/dist/http/internal/preResponseHandler.js +0 -14
- package/dist/http/internal/preResponseHandler.js.map +0 -1
- package/src/http/internal/preResponseHandler.ts +0 -19
|
@@ -9,62 +9,131 @@
|
|
|
9
9
|
* @stability unstable
|
|
10
10
|
* @since 4.0.0
|
|
11
11
|
*/
|
|
12
|
+
import type { NonEmptyArray } from "../Array.ts"
|
|
12
13
|
import * as Context from "../Context.ts"
|
|
13
14
|
import * as Effect from "../Effect.ts"
|
|
15
|
+
import * as SchemaBinary from "../encoding/SchemaBinary.ts"
|
|
14
16
|
import * as Layer from "../Layer.ts"
|
|
15
17
|
import * as Redacted from "../Redacted.ts"
|
|
16
18
|
import * as Schema from "../Schema.ts"
|
|
17
19
|
import * as Transferable from "../workers/Transferable.ts"
|
|
18
|
-
import { Entry, EntryId, RemoteEntry } from "./EventJournal.ts"
|
|
20
|
+
import { type Entry, EntryFields, entryFromFields, EntryId, RemoteEntry } from "./EventJournal.ts"
|
|
19
21
|
import type { Identity } from "./EventLog.ts"
|
|
20
22
|
import { makeGetIdentityRootSecretMaterial } from "./internal/identityRootSecretDerivation.ts"
|
|
21
23
|
|
|
22
24
|
/**
|
|
23
|
-
* Schema for
|
|
24
|
-
*
|
|
25
|
+
* Schema for a batch of journal entries encrypted as one AES-GCM message.
|
|
26
|
+
*
|
|
27
|
+
* **Details**
|
|
28
|
+
*
|
|
29
|
+
* `entryIds` lists the ids of the encrypted entries in order. It is sent in
|
|
30
|
+
* plaintext so the server can deduplicate batches, and it is authenticated
|
|
31
|
+
* together with the store id, so a server cannot alter it or move the batch to
|
|
32
|
+
* another store.
|
|
25
33
|
*
|
|
26
34
|
* @stability unstable
|
|
27
35
|
* @category models
|
|
28
36
|
* @since 4.0.0
|
|
29
37
|
*/
|
|
30
|
-
export const
|
|
31
|
-
|
|
38
|
+
export const EncryptedBatch = Schema.Struct({
|
|
39
|
+
entryIds: Schema.NonEmptyArray(EntryId),
|
|
32
40
|
iv: Transferable.Uint8Array,
|
|
33
|
-
|
|
41
|
+
encryptedBatch: Transferable.Uint8Array
|
|
34
42
|
})
|
|
35
43
|
|
|
36
44
|
/**
|
|
37
|
-
* Type of an encrypted
|
|
38
|
-
* initialization vector, entry id, and encrypted entry bytes.
|
|
45
|
+
* Type of an encrypted batch.
|
|
39
46
|
*
|
|
40
47
|
* @stability unstable
|
|
41
48
|
* @category models
|
|
42
49
|
* @since 4.0.0
|
|
43
50
|
*/
|
|
44
|
-
export interface
|
|
51
|
+
export interface EncryptedBatch extends Schema.Schema.Type<typeof EncryptedBatch> {}
|
|
45
52
|
|
|
46
53
|
/**
|
|
47
|
-
*
|
|
54
|
+
* Type of an encrypted batch stored by a remote server, including the remote
|
|
55
|
+
* sequence of its first entry.
|
|
48
56
|
*
|
|
49
57
|
* @stability unstable
|
|
50
58
|
* @category models
|
|
51
59
|
* @since 4.0.0
|
|
52
60
|
*/
|
|
53
|
-
export
|
|
61
|
+
export interface EncryptedRemoteBatch extends Schema.Schema.Type<typeof EncryptedRemoteBatch> {}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Schema for encrypted batches exchanged with a remote event-log server.
|
|
65
|
+
*
|
|
66
|
+
* **Details**
|
|
67
|
+
*
|
|
68
|
+
* The entries of a batch have consecutive remote sequences starting at
|
|
69
|
+
* `sequence`.
|
|
70
|
+
*
|
|
71
|
+
* @stability unstable
|
|
72
|
+
* @category models
|
|
73
|
+
* @since 4.0.0
|
|
74
|
+
*/
|
|
75
|
+
export const EncryptedRemoteBatch = Schema.Struct({
|
|
54
76
|
sequence: Schema.Natural,
|
|
55
|
-
|
|
56
|
-
entryId: EntryId,
|
|
57
|
-
encryptedEntry: Transferable.Uint8Array
|
|
77
|
+
...EncryptedBatch.fields
|
|
58
78
|
})
|
|
59
79
|
|
|
80
|
+
const maxBatchEntries = 100
|
|
81
|
+
const maxBatchPayloadBytes = 256 * 1024
|
|
82
|
+
|
|
83
|
+
// A batch holds at most `maxBatchEntries` entries or `maxBatchPayloadBytes` of
|
|
84
|
+
// payload, whichever comes first. A single larger entry is a batch on its own.
|
|
85
|
+
const toBatches = (entries: ReadonlyArray<Entry>): Array<NonEmptyArray<Entry>> => {
|
|
86
|
+
const batches: Array<NonEmptyArray<Entry>> = []
|
|
87
|
+
let current: Array<Entry> = []
|
|
88
|
+
let bytes = 0
|
|
89
|
+
for (const entry of entries) {
|
|
90
|
+
const size = entry.payload.byteLength
|
|
91
|
+
if (current.length > 0 && (current.length === maxBatchEntries || bytes + size > maxBatchPayloadBytes)) {
|
|
92
|
+
batches.push(current as NonEmptyArray<Entry>)
|
|
93
|
+
current = []
|
|
94
|
+
bytes = 0
|
|
95
|
+
}
|
|
96
|
+
current.push(entry)
|
|
97
|
+
bytes += size
|
|
98
|
+
}
|
|
99
|
+
if (current.length > 0) batches.push(current as NonEmptyArray<Entry>)
|
|
100
|
+
return batches
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const textEncoder = new TextEncoder()
|
|
104
|
+
|
|
105
|
+
// The store id is length-prefixed, followed by the 16-byte entry ids.
|
|
106
|
+
const additionalData = (storeId: string, entryIds: ReadonlyArray<EntryId>): Uint8Array<ArrayBuffer> => {
|
|
107
|
+
const store = textEncoder.encode(storeId)
|
|
108
|
+
const data = new Uint8Array(4 + store.byteLength + entryIds.length * 16)
|
|
109
|
+
new DataView(data.buffer).setUint32(0, store.byteLength)
|
|
110
|
+
data.set(store, 4)
|
|
111
|
+
let offset = 4 + store.byteLength
|
|
112
|
+
for (const id of entryIds) {
|
|
113
|
+
data.set(id, offset)
|
|
114
|
+
offset += 16
|
|
115
|
+
}
|
|
116
|
+
return data
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const equalBytes = (a: Uint8Array, b: Uint8Array): boolean => {
|
|
120
|
+
if (a.byteLength !== b.byteLength) return false
|
|
121
|
+
for (let i = 0; i < a.byteLength; i++) {
|
|
122
|
+
if (a[i] !== b[i]) return false
|
|
123
|
+
}
|
|
124
|
+
return true
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
const BatchFromSchemaBinary = SchemaBinary.toCodec(Schema.NonEmptyArray(EntryFields))
|
|
128
|
+
const encodeBatch = Schema.encodeEffect(BatchFromSchemaBinary)
|
|
129
|
+
const decodeBatch = Schema.decodeEffect(BatchFromSchemaBinary)
|
|
130
|
+
|
|
60
131
|
const toArrayBuffer = (data: Uint8Array): ArrayBuffer => {
|
|
61
132
|
const buffer = new ArrayBuffer(data.byteLength)
|
|
62
133
|
new Uint8Array(buffer).set(data)
|
|
63
134
|
return buffer
|
|
64
135
|
}
|
|
65
136
|
|
|
66
|
-
const toBufferSource = (data: Uint8Array): ArrayBufferView<ArrayBuffer> => new Uint8Array(toArrayBuffer(data))
|
|
67
|
-
|
|
68
137
|
/**
|
|
69
138
|
* Service that provides identity generation, entry
|
|
70
139
|
* encryption and decryption, and SHA-256 hashing for event-log replication.
|
|
@@ -81,16 +150,13 @@ const toBufferSource = (data: Uint8Array): ArrayBufferView<ArrayBuffer> => new U
|
|
|
81
150
|
export class EventLogEncryption extends Context.Service<EventLogEncryption, {
|
|
82
151
|
readonly encrypt: (
|
|
83
152
|
identity: Identity["Service"],
|
|
153
|
+
storeId: string,
|
|
84
154
|
entries: ReadonlyArray<Entry>
|
|
85
|
-
) => Effect.Effect<
|
|
86
|
-
ReadonlyArray<{
|
|
87
|
-
readonly iv: Uint8Array<ArrayBuffer>
|
|
88
|
-
readonly encryptedEntry: Uint8Array<ArrayBuffer>
|
|
89
|
-
}>
|
|
90
|
-
>
|
|
155
|
+
) => Effect.Effect<Array<EncryptedBatch>>
|
|
91
156
|
readonly decrypt: (
|
|
92
157
|
identity: Identity["Service"],
|
|
93
|
-
|
|
158
|
+
storeId: string,
|
|
159
|
+
batches: ReadonlyArray<EncryptedRemoteBatch>
|
|
94
160
|
) => Effect.Effect<Array<RemoteEntry>>
|
|
95
161
|
readonly sha256String: (data: Uint8Array) => Effect.Effect<string>
|
|
96
162
|
readonly sha256: (data: Uint8Array) => Effect.Effect<Uint8Array>
|
|
@@ -110,35 +176,54 @@ export const makeEncryptionSubtle = (crypto: Crypto): Effect.Effect<EventLogEncr
|
|
|
110
176
|
const getIdentityRootSecretMaterial = makeGetIdentityRootSecretMaterial(crypto)
|
|
111
177
|
|
|
112
178
|
return EventLogEncryption.of({
|
|
113
|
-
encrypt: Effect.fnUntraced(function*(identity, entries) {
|
|
114
|
-
const data = yield* Effect.orDie(Entry.encodeArray(entries))
|
|
179
|
+
encrypt: Effect.fnUntraced(function*(identity, storeId, entries) {
|
|
115
180
|
const key = (yield* getIdentityRootSecretMaterial(identity)).encryptionKey
|
|
181
|
+
const batches = toBatches(entries)
|
|
182
|
+
const data = yield* Effect.orDie(Effect.forEach(batches, (batch) => encodeBatch(batch)))
|
|
116
183
|
return yield* Effect.promise(() =>
|
|
117
|
-
Promise.all(
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
)
|
|
184
|
+
Promise.all(batches.map((batch, i) => {
|
|
185
|
+
const entryIds = batch.map((entry) => entry.id) as NonEmptyArray<EntryId>
|
|
186
|
+
const iv = crypto.getRandomValues(new Uint8Array(12))
|
|
187
|
+
return crypto.subtle.encrypt(
|
|
188
|
+
{ name: "AES-GCM", iv, additionalData: additionalData(storeId, entryIds), tagLength: 128 },
|
|
189
|
+
key,
|
|
190
|
+
data[i]
|
|
191
|
+
).then((encryptedBatch) => ({ entryIds, iv, encryptedBatch: new Uint8Array(encryptedBatch) }))
|
|
192
|
+
}))
|
|
127
193
|
)
|
|
128
194
|
}),
|
|
129
|
-
decrypt: Effect.fnUntraced(function*(identity,
|
|
195
|
+
decrypt: Effect.fnUntraced(function*(identity, storeId, batches) {
|
|
130
196
|
const key = (yield* getIdentityRootSecretMaterial(identity)).encryptionKey
|
|
131
|
-
const
|
|
132
|
-
Promise.all(
|
|
197
|
+
const decrypted = yield* Effect.promise(() =>
|
|
198
|
+
Promise.all(batches.map((batch) =>
|
|
133
199
|
crypto.subtle.decrypt(
|
|
134
|
-
{
|
|
200
|
+
{
|
|
201
|
+
name: "AES-GCM",
|
|
202
|
+
iv: batch.iv,
|
|
203
|
+
additionalData: additionalData(storeId, batch.entryIds),
|
|
204
|
+
tagLength: 128
|
|
205
|
+
},
|
|
135
206
|
key,
|
|
136
|
-
|
|
207
|
+
batch.encryptedBatch
|
|
137
208
|
)
|
|
138
209
|
))
|
|
139
|
-
)
|
|
140
|
-
const
|
|
141
|
-
|
|
210
|
+
)
|
|
211
|
+
const result: Array<RemoteEntry> = []
|
|
212
|
+
for (let i = 0; i < batches.length; i++) {
|
|
213
|
+
const batch = batches[i]
|
|
214
|
+
const fields = yield* Effect.orDie(decodeBatch(new Uint8Array(decrypted[i])))
|
|
215
|
+
const entries = fields.map(entryFromFields)
|
|
216
|
+
if (
|
|
217
|
+
entries.length !== batch.entryIds.length ||
|
|
218
|
+
entries.some((entry, j) => !equalBytes(entry.id, batch.entryIds[j]))
|
|
219
|
+
) {
|
|
220
|
+
return yield* Effect.die(new Error("Encrypted batch entries do not match its entry ids"))
|
|
221
|
+
}
|
|
222
|
+
for (let j = 0; j < entries.length; j++) {
|
|
223
|
+
result.push(new RemoteEntry({ remoteSequence: batch.sequence + j, entry: entries[j] }))
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return result
|
|
142
227
|
}),
|
|
143
228
|
sha256: (data) =>
|
|
144
229
|
Effect.promise(() => crypto.subtle.digest("SHA-256", toArrayBuffer(data))).pipe(
|
|
@@ -11,16 +11,18 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import type { NonEmptyArray, NonEmptyReadonlyArray } from "../Array.ts"
|
|
13
13
|
import type { Brand } from "../Brand.ts"
|
|
14
|
+
import * as Effect from "../Effect.ts"
|
|
14
15
|
import * as SchemaBinary from "../encoding/SchemaBinary.ts"
|
|
15
16
|
import * as Predicate from "../Predicate.ts"
|
|
16
17
|
import * as Rpc from "../rpc/Rpc.ts"
|
|
17
18
|
import * as RpcGroup from "../rpc/RpcGroup.ts"
|
|
18
19
|
import * as RpcMiddleware from "../rpc/RpcMiddleware.ts"
|
|
19
20
|
import * as Schema from "../Schema.ts"
|
|
21
|
+
import type * as SchemaAST from "../SchemaAST.ts"
|
|
20
22
|
import * as Transferable from "../workers/Transferable.ts"
|
|
21
|
-
import { Entry, RemoteEntry, RemoteId } from "./EventJournal.ts"
|
|
23
|
+
import { Entry, EntryFields, entryFromFields, EntryId, RemoteEntry, RemoteId } from "./EventJournal.ts"
|
|
22
24
|
import type { Identity } from "./EventLog.ts"
|
|
23
|
-
import {
|
|
25
|
+
import { EncryptedBatch, EncryptedRemoteBatch } from "./EventLogEncryption.ts"
|
|
24
26
|
|
|
25
27
|
/**
|
|
26
28
|
* Type-level identifier used to brand event-log store ids.
|
|
@@ -109,8 +111,8 @@ export class EventLogAuthentication extends RpcMiddleware.Service<EventLogAuthen
|
|
|
109
111
|
*
|
|
110
112
|
* **Details**
|
|
111
113
|
*
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
+
* Contains the remote id, a challenge for the client to sign, and the lowest
|
|
115
|
+
* assigned sequence (default 0) for initializing acknowledgement cursors.
|
|
114
116
|
*
|
|
115
117
|
* @stability unstable
|
|
116
118
|
* @category protocols
|
|
@@ -118,7 +120,8 @@ export class EventLogAuthentication extends RpcMiddleware.Service<EventLogAuthen
|
|
|
118
120
|
*/
|
|
119
121
|
export class HelloResponse extends Schema.Class<HelloResponse>("effect/eventlog/EventLogRemote/HelloResponse")({
|
|
120
122
|
remoteId: RemoteId,
|
|
121
|
-
challenge: Transferable.Uint8Array
|
|
123
|
+
challenge: Transferable.Uint8Array,
|
|
124
|
+
firstSequence: Schema.optional(Schema.Natural)
|
|
122
125
|
}) {}
|
|
123
126
|
|
|
124
127
|
/**
|
|
@@ -271,15 +274,45 @@ export class ChunkedMessage
|
|
|
271
274
|
}
|
|
272
275
|
}
|
|
273
276
|
|
|
277
|
+
/**
|
|
278
|
+
* Schema for a written entry's id and a sequence at which the server stores
|
|
279
|
+
* it. Entries the server already held keep their stored sequence. When a write
|
|
280
|
+
* stores an entry again, as part of a partly known batch, it is acknowledged at
|
|
281
|
+
* its new position.
|
|
282
|
+
*
|
|
283
|
+
* @stability unstable
|
|
284
|
+
* @category protocols
|
|
285
|
+
* @since 4.0.6
|
|
286
|
+
*/
|
|
287
|
+
export const WriteAck = Schema.Struct({
|
|
288
|
+
entryId: EntryId,
|
|
289
|
+
sequence: Schema.Natural
|
|
290
|
+
})
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Acknowledgement of one written entry.
|
|
294
|
+
*
|
|
295
|
+
* @stability unstable
|
|
296
|
+
* @category protocols
|
|
297
|
+
* @since 4.0.6
|
|
298
|
+
*/
|
|
299
|
+
export type WriteAck = typeof WriteAck.Type
|
|
300
|
+
|
|
274
301
|
/**
|
|
275
302
|
* RPC used to send one chunk of a large encoded write payload.
|
|
276
303
|
*
|
|
304
|
+
* **Details**
|
|
305
|
+
*
|
|
306
|
+
* The completing chunk returns acknowledgements in request order; earlier
|
|
307
|
+
* chunks return an empty array.
|
|
308
|
+
*
|
|
277
309
|
* @stability unstable
|
|
278
310
|
* @category protocols
|
|
279
311
|
* @since 4.0.0
|
|
280
312
|
*/
|
|
281
313
|
export class WriteChunkedRpc extends Rpc.make("EventLog.WriteChunked", {
|
|
282
314
|
payload: ChunkedMessage,
|
|
315
|
+
success: Schema.Array(WriteAck),
|
|
283
316
|
error: EventLogProtocolError
|
|
284
317
|
}).middleware(EventLogAuthentication) {}
|
|
285
318
|
|
|
@@ -288,8 +321,8 @@ export class WriteChunkedRpc extends Rpc.make("EventLog.WriteChunked", {
|
|
|
288
321
|
*
|
|
289
322
|
* **Details**
|
|
290
323
|
*
|
|
291
|
-
* It includes the client public key, target store id, and
|
|
292
|
-
*
|
|
324
|
+
* It includes the client public key, target store id, and the entries
|
|
325
|
+
* encrypted as batches.
|
|
293
326
|
*
|
|
294
327
|
* @stability unstable
|
|
295
328
|
* @category protocols
|
|
@@ -298,7 +331,7 @@ export class WriteChunkedRpc extends Rpc.make("EventLog.WriteChunked", {
|
|
|
298
331
|
export class WriteEntries extends Schema.Class<WriteEntries>("effect/eventlog/EventLogRemote/WriteEntries")({
|
|
299
332
|
publicKey: Schema.String,
|
|
300
333
|
storeId: StoreId,
|
|
301
|
-
|
|
334
|
+
batches: Schema.Array(EncryptedBatch)
|
|
302
335
|
}) {
|
|
303
336
|
static FromSchemaBinary = SchemaBinary.toCodec(WriteEntries)
|
|
304
337
|
static encode = Schema.encodeEffect(this.FromSchemaBinary)
|
|
@@ -324,15 +357,32 @@ export class WriteEntriesUnencrypted
|
|
|
324
357
|
{
|
|
325
358
|
static FromSchemaBinary = SchemaBinary.toCodec(WriteEntriesUnencrypted)
|
|
326
359
|
static encode = Schema.encodeEffect(this.FromSchemaBinary)
|
|
327
|
-
static decode =
|
|
360
|
+
static decode = (
|
|
361
|
+
data: Uint8Array<ArrayBuffer>,
|
|
362
|
+
options?: SchemaAST.ParseOptions
|
|
363
|
+
): Effect.Effect<WriteEntriesUnencrypted, Schema.SchemaError> =>
|
|
364
|
+
Effect.map(
|
|
365
|
+
decodeWriteEntriesUnencryptedFields(data, options),
|
|
366
|
+
(fields) =>
|
|
367
|
+
Schema.makeClassTrusted(WriteEntriesUnencrypted, { ...fields, entries: fields.entries.map(entryFromFields) })
|
|
368
|
+
)
|
|
328
369
|
get encoded() {
|
|
329
370
|
return WriteEntriesUnencrypted.encode(this)
|
|
330
371
|
}
|
|
331
372
|
}
|
|
332
373
|
|
|
374
|
+
const decodeWriteEntriesUnencryptedFields = Schema.decodeEffect(SchemaBinary.toCodec(Schema.Struct({
|
|
375
|
+
...WriteEntriesUnencrypted.fields,
|
|
376
|
+
entries: Schema.Array(EntryFields)
|
|
377
|
+
})))
|
|
378
|
+
|
|
333
379
|
/**
|
|
334
380
|
* RPC used to send an encoded write payload that fits in one message.
|
|
335
381
|
*
|
|
382
|
+
* **Details**
|
|
383
|
+
*
|
|
384
|
+
* The response acknowledges every written entry, in request order.
|
|
385
|
+
*
|
|
336
386
|
* @stability unstable
|
|
337
387
|
* @category protocols
|
|
338
388
|
* @since 4.0.0
|
|
@@ -341,6 +391,7 @@ export class WriteSingleRpc extends Rpc.make("EventLog.WriteSingle", {
|
|
|
341
391
|
payload: {
|
|
342
392
|
data: Transferable.Uint8Array
|
|
343
393
|
},
|
|
394
|
+
success: Schema.Array(WriteAck),
|
|
344
395
|
error: EventLogProtocolError
|
|
345
396
|
}).middleware(EventLogAuthentication) {}
|
|
346
397
|
|
|
@@ -351,7 +402,7 @@ export class WriteSingleRpc extends Rpc.make("EventLog.WriteSingle", {
|
|
|
351
402
|
* **Details**
|
|
352
403
|
*
|
|
353
404
|
* Responses are encoded as either `SingleMessage` values or `ChunkedMessage`
|
|
354
|
-
* parts.
|
|
405
|
+
* parts. Entries written on this connection are acknowledged, not echoed.
|
|
355
406
|
*
|
|
356
407
|
* @stability unstable
|
|
357
408
|
* @category protocols
|
|
@@ -367,7 +418,7 @@ export class ChangesRpc extends Rpc.make("EventLog.Changes", {
|
|
|
367
418
|
error: EventLogProtocolError,
|
|
368
419
|
stream: true
|
|
369
420
|
}).middleware(EventLogAuthentication) {
|
|
370
|
-
static EncryptedFromSchemaBinary = SchemaBinary.toCodec(Schema.NonEmptyArray(
|
|
421
|
+
static EncryptedFromSchemaBinary = SchemaBinary.toCodec(Schema.NonEmptyArray(EncryptedRemoteBatch))
|
|
371
422
|
static UnencryptedFromSchemaBinary = SchemaBinary.toCodec(Schema.NonEmptyArray(RemoteEntry))
|
|
372
423
|
static encodeEncrypted = Schema.encodeEffect(ChangesRpc.EncryptedFromSchemaBinary)
|
|
373
424
|
static decodeEncrypted = Schema.decodeEffect(ChangesRpc.EncryptedFromSchemaBinary)
|
|
@@ -24,7 +24,7 @@ import type { RpcClientError } from "../rpc/RpcClientError.ts"
|
|
|
24
24
|
import type * as RpcGroup from "../rpc/RpcGroup.ts"
|
|
25
25
|
import type * as Schema from "../Schema.ts"
|
|
26
26
|
import type * as Scope from "../Scope.ts"
|
|
27
|
-
import type
|
|
27
|
+
import { type Entry, type EventJournal, type EventJournalError, RemoteEntry, type RemoteId } from "./EventJournal.ts"
|
|
28
28
|
import { type Identity, Registry } from "./EventLog.ts"
|
|
29
29
|
import { EventLogEncryption, layerSubtle } from "./EventLogEncryption.ts"
|
|
30
30
|
import {
|
|
@@ -35,6 +35,7 @@ import {
|
|
|
35
35
|
EventLogRemoteRpcs,
|
|
36
36
|
type HelloResponse,
|
|
37
37
|
type StoreId,
|
|
38
|
+
type WriteAck,
|
|
38
39
|
WriteEntries,
|
|
39
40
|
WriteEntriesUnencrypted
|
|
40
41
|
} from "./EventLogMessage.ts"
|
|
@@ -54,22 +55,35 @@ import { makeGetIdentityRootSecretMaterial } from "./internal/identityRootSecret
|
|
|
54
55
|
* It can write local entries to the remote, stream remote changes from a sequence
|
|
55
56
|
* number, and run effects only after the supplied identity has authenticated.
|
|
56
57
|
*
|
|
58
|
+
* Built-in remotes acknowledge writes instead of echoing them through `changes`.
|
|
59
|
+
* Custom remotes may return `void` from `write` to confirm uploads through
|
|
60
|
+
* `changes` instead.
|
|
61
|
+
*
|
|
57
62
|
* @stability unstable
|
|
58
63
|
* @category services
|
|
59
64
|
* @since 4.0.0
|
|
60
65
|
*/
|
|
61
66
|
export class EventLogRemote extends Context.Service<EventLogRemote, {
|
|
62
67
|
readonly id: RemoteId
|
|
68
|
+
/**
|
|
69
|
+
* The lowest sequence the remote assigns, or 0 when omitted.
|
|
70
|
+
*/
|
|
71
|
+
readonly firstSequence?: number | undefined
|
|
63
72
|
readonly changes: (options: {
|
|
64
73
|
readonly identity: Identity["Service"]
|
|
65
74
|
readonly storeId: StoreId
|
|
66
75
|
readonly startSequence: number
|
|
76
|
+
/**
|
|
77
|
+
* Looks up locally stored entries by id, so the remote can reuse them
|
|
78
|
+
* instead of decoding the matching changes.
|
|
79
|
+
*/
|
|
80
|
+
readonly knownEntries?: EventJournal["Service"]["entriesById"] | undefined
|
|
67
81
|
}) => Effect.Effect<Queue.Dequeue<RemoteEntry, EventLogRemoteError>, never, Scope.Scope>
|
|
68
82
|
readonly write: (options: {
|
|
69
83
|
readonly identity: Identity["Service"]
|
|
70
84
|
readonly storeId: StoreId
|
|
71
85
|
readonly entries: ReadonlyArray<Entry>
|
|
72
|
-
}) => Effect.Effect<void, EventLogRemoteError>
|
|
86
|
+
}) => Effect.Effect<ReadonlyArray<WriteAck> | void, EventLogRemoteError>
|
|
73
87
|
readonly whenAuthenticated: <A, E, R>(
|
|
74
88
|
effect: Effect.Effect<A, E, R>
|
|
75
89
|
) => Effect.Effect<A, E | EventLogRemoteError, R | Identity>
|
|
@@ -172,8 +186,10 @@ export const makeWith = Effect.fnUntraced(function*({ encodeWrite, decodeChanges
|
|
|
172
186
|
}) => Effect.Effect<Uint8Array<ArrayBuffer>, Schema.SchemaError>
|
|
173
187
|
readonly decodeChanges: (
|
|
174
188
|
identity: Identity["Service"],
|
|
175
|
-
|
|
176
|
-
|
|
189
|
+
storeId: StoreId,
|
|
190
|
+
data: Uint8Array<ArrayBuffer>,
|
|
191
|
+
knownEntries?: EventJournal["Service"]["entriesById"]
|
|
192
|
+
) => Effect.Effect<ReadonlyArray<RemoteEntry>, Schema.SchemaError | EventJournalError>
|
|
177
193
|
}): Effect.fn.Return<EventLogRemote["Service"], EventLogRemoteError, Scope.Scope | EventLogRemoteClient | Registry> {
|
|
178
194
|
const client = yield* EventLogRemoteClient
|
|
179
195
|
const registry = yield* Registry
|
|
@@ -236,6 +252,7 @@ export const makeWith = Effect.fnUntraced(function*({ encodeWrite, decodeChanges
|
|
|
236
252
|
|
|
237
253
|
const remote = EventLogRemote.of({
|
|
238
254
|
id: hello.remoteId,
|
|
255
|
+
firstSequence: hello.firstSequence,
|
|
239
256
|
write: Effect.fnUntraced(
|
|
240
257
|
function*(options) {
|
|
241
258
|
yield* ensureAuthenticated(options.identity)
|
|
@@ -243,9 +260,13 @@ export const makeWith = Effect.fnUntraced(function*({ encodeWrite, decodeChanges
|
|
|
243
260
|
if (encoded.byteLength <= ChunkedMessage.chunkSize) {
|
|
244
261
|
return yield* client["EventLog.WriteSingle"]({ data: encoded })
|
|
245
262
|
}
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
263
|
+
// Only the part the server receives last carries acknowledgements.
|
|
264
|
+
const acks = yield* Effect.forEach(
|
|
265
|
+
ChunkedMessage.split(chunkedIdCounter++, encoded),
|
|
266
|
+
(part) => client["EventLog.WriteChunked"](part),
|
|
267
|
+
{ concurrency: 4 }
|
|
268
|
+
)
|
|
269
|
+
return acks.flat()
|
|
249
270
|
},
|
|
250
271
|
retryForbidden,
|
|
251
272
|
Effect.mapError((cause) => new EventLogRemoteError({ method: "write", cause }))
|
|
@@ -263,20 +284,30 @@ export const makeWith = Effect.fnUntraced(function*({ encodeWrite, decodeChanges
|
|
|
263
284
|
startSequence: options.startSequence
|
|
264
285
|
}, { asQueue: true })
|
|
265
286
|
|
|
287
|
+
// A batch can start before `startSequence`; its earlier entries are dropped.
|
|
288
|
+
const offer = Effect.fnUntraced(function*(data: Uint8Array<ArrayBuffer>) {
|
|
289
|
+
const entries = yield* decodeChanges(options.identity, options.storeId, data, options.knownEntries)
|
|
290
|
+
const first = entries.findIndex((entry) => entry.remoteSequence >= options.startSequence)
|
|
291
|
+
if (first === -1) return
|
|
292
|
+
yield* Queue.offerAll(outgoing, entries.slice(first))
|
|
293
|
+
})
|
|
294
|
+
|
|
266
295
|
while (true) {
|
|
267
296
|
const parts = yield* Queue.takeAll(incoming)
|
|
268
297
|
for (let i = 0; i < parts.length; i++) {
|
|
269
298
|
const part = parts[i]
|
|
270
299
|
if (part._tag === "Single") {
|
|
271
|
-
yield*
|
|
300
|
+
yield* offer(part.data)
|
|
272
301
|
continue
|
|
273
302
|
}
|
|
274
303
|
const data = ChunkedMessage.join(chunkedState, part)
|
|
275
304
|
if (!data) continue
|
|
276
|
-
yield*
|
|
305
|
+
yield* offer(data)
|
|
277
306
|
}
|
|
278
307
|
}
|
|
279
308
|
}).pipe(
|
|
309
|
+
// Forbidden retries resubscribe with the same `startSequence`. Other failures
|
|
310
|
+
// propagate to EventLog, which reconnects from the journal's committed sequence.
|
|
280
311
|
(effect) => retryForbidden(effect, options),
|
|
281
312
|
Effect.mapError((cause) => {
|
|
282
313
|
if (cause._tag === "EventLogRemoteError") {
|
|
@@ -322,25 +353,50 @@ export const makeEncrypted = Effect.gen(function*(): Effect.fn.Return<
|
|
|
322
353
|
> {
|
|
323
354
|
const encryption = yield* EventLogEncryption
|
|
324
355
|
|
|
356
|
+
// Skip decryption only when every entry in a batch is already stored.
|
|
357
|
+
const decodeChanges = Effect.fnUntraced(function*(
|
|
358
|
+
identity: Identity["Service"],
|
|
359
|
+
storeId: StoreId,
|
|
360
|
+
data: Uint8Array<ArrayBuffer>,
|
|
361
|
+
knownEntries?: EventJournal["Service"]["entriesById"]
|
|
362
|
+
) {
|
|
363
|
+
const batches = yield* ChangesRpc.decodeEncrypted(data)
|
|
364
|
+
if (knownEntries === undefined) return yield* encryption.decrypt(identity, storeId, batches)
|
|
365
|
+
const stored = yield* knownEntries(batches.flatMap((batch) => batch.entryIds))
|
|
366
|
+
let offset = 0
|
|
367
|
+
const knownBatches = batches.map((batch) => {
|
|
368
|
+
const entries = stored.slice(offset, offset + batch.entryIds.length)
|
|
369
|
+
offset += batch.entryIds.length
|
|
370
|
+
return entries.every((entry): entry is Entry => entry !== undefined) ? entries : undefined
|
|
371
|
+
})
|
|
372
|
+
const decrypted = yield* encryption.decrypt(
|
|
373
|
+
identity,
|
|
374
|
+
storeId,
|
|
375
|
+
batches.filter((_, i) => knownBatches[i] === undefined)
|
|
376
|
+
)
|
|
377
|
+
let next = 0
|
|
378
|
+
return batches.flatMap((batch, i) => {
|
|
379
|
+
const entries = knownBatches[i]
|
|
380
|
+
return entries === undefined
|
|
381
|
+
? batch.entryIds.map(() => decrypted[next++])
|
|
382
|
+
: entries.map((entry, j) =>
|
|
383
|
+
new RemoteEntry({ remoteSequence: batch.sequence + j, entry }, { disableChecks: true })
|
|
384
|
+
)
|
|
385
|
+
})
|
|
386
|
+
})
|
|
387
|
+
|
|
325
388
|
return yield* makeWith({
|
|
326
389
|
encodeWrite: (options) =>
|
|
327
|
-
encryption.encrypt(options.identity, options.entries).pipe(
|
|
328
|
-
Effect.flatMap((
|
|
390
|
+
encryption.encrypt(options.identity, options.storeId, options.entries).pipe(
|
|
391
|
+
Effect.flatMap((batches) =>
|
|
329
392
|
new WriteEntries({
|
|
330
393
|
publicKey: options.identity.publicKey,
|
|
331
394
|
storeId: options.storeId,
|
|
332
|
-
|
|
333
|
-
entryId: options.entries[i].id,
|
|
334
|
-
iv: entry.iv,
|
|
335
|
-
encryptedEntry: entry.encryptedEntry
|
|
336
|
-
}))
|
|
395
|
+
batches
|
|
337
396
|
}).encoded
|
|
338
397
|
)
|
|
339
398
|
),
|
|
340
|
-
decodeChanges
|
|
341
|
-
ChangesRpc.decodeEncrypted(data).pipe(
|
|
342
|
-
Effect.flatMap((entries) => encryption.decrypt(identity, entries))
|
|
343
|
-
)
|
|
399
|
+
decodeChanges
|
|
344
400
|
})
|
|
345
401
|
})
|
|
346
402
|
|
|
@@ -362,7 +418,7 @@ export const makeUnencrypted: Effect.Effect<
|
|
|
362
418
|
storeId: options.storeId,
|
|
363
419
|
entries: options.entries
|
|
364
420
|
}).encoded,
|
|
365
|
-
decodeChanges: (_identity, data) => ChangesRpc.decodeUnencrypted(data)
|
|
421
|
+
decodeChanges: (_identity, _storeId, data) => ChangesRpc.decodeUnencrypted(data)
|
|
366
422
|
})
|
|
367
423
|
|
|
368
424
|
/**
|