effect 4.0.5 → 4.0.6
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/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 +125 -30
- 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/Duration.d.ts.map +1 -1
- package/dist/Duration.js +56 -16
- package/dist/Duration.js.map +1 -1
- package/dist/Effect.d.ts +487 -163
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +203 -37
- package/dist/Effect.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 +24 -9
- 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/Graph.d.ts.map +1 -1
- package/dist/Graph.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/JsonSchema.d.ts +9 -3
- package/dist/JsonSchema.d.ts.map +1 -1
- package/dist/JsonSchema.js +19 -3
- 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 +132 -0
- 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/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/Path.d.ts.map +1 -1
- package/dist/Path.js +8 -1
- package/dist/Path.js.map +1 -1
- package/dist/PubSub.d.ts.map +1 -1
- package/dist/PubSub.js +12 -7
- 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.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.map +1 -1
- package/dist/Schema.d.ts +384 -332
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +333 -19
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaAST.d.ts +5 -5
- package/dist/SchemaAST.d.ts.map +1 -1
- package/dist/SchemaAST.js +24 -8
- 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/SchemaRepresentation.d.ts +56 -1
- package/dist/SchemaRepresentation.d.ts.map +1 -1
- package/dist/SchemaRepresentation.js +18 -0
- package/dist/SchemaRepresentation.js.map +1 -1
- package/dist/SchemaTransformation.d.ts +1 -1
- package/dist/SchemaTransformation.js +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/Sink.d.ts.map +1 -1
- package/dist/Sink.js +6 -2
- 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 +145 -60
- package/dist/Stream.js.map +1 -1
- package/dist/String.d.ts +4 -2
- package/dist/String.d.ts.map +1 -1
- package/dist/String.js +8 -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/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/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 +368 -235
- 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 +25 -22
- package/dist/ai/McpServer.js.map +1 -1
- package/dist/ai/Prompt.d.ts +22 -20
- package/dist/ai/Prompt.d.ts.map +1 -1
- package/dist/ai/Prompt.js +23 -1
- package/dist/ai/Prompt.js.map +1 -1
- package/dist/ai/Response.d.ts +147 -3
- package/dist/ai/Response.d.ts.map +1 -1
- package/dist/ai/Response.js +35 -37
- package/dist/ai/Response.js.map +1 -1
- package/dist/ai/Tool.d.ts +12 -4
- package/dist/ai/Tool.d.ts.map +1 -1
- 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 +65 -12
- 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/CliError.d.ts +42 -2
- package/dist/cli/CliError.d.ts.map +1 -1
- package/dist/cli/CliError.js +44 -5
- package/dist/cli/CliError.js.map +1 -1
- package/dist/cli/Command.d.ts +286 -2
- package/dist/cli/Command.d.ts.map +1 -1
- package/dist/cli/Command.js +107 -6
- package/dist/cli/Command.js.map +1 -1
- package/dist/cli/Completions.d.ts +5 -0
- package/dist/cli/Completions.d.ts.map +1 -1
- package/dist/cli/Completions.js.map +1 -1
- package/dist/cli/Flag.d.ts +115 -0
- package/dist/cli/Flag.d.ts.map +1 -1
- package/dist/cli/Flag.js +56 -0
- package/dist/cli/Flag.js.map +1 -1
- package/dist/cli/GlobalFlag.d.ts.map +1 -1
- package/dist/cli/GlobalFlag.js +3 -3
- package/dist/cli/GlobalFlag.js.map +1 -1
- package/dist/cli/Param.d.ts +107 -0
- package/dist/cli/Param.d.ts.map +1 -1
- package/dist/cli/Param.js +56 -0
- package/dist/cli/Param.js.map +1 -1
- package/dist/cli/TerminalCapabilities.d.ts +84 -0
- package/dist/cli/TerminalCapabilities.d.ts.map +1 -0
- package/dist/cli/TerminalCapabilities.js +122 -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 +4 -3
- 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 +37 -11
- 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 +21 -0
- package/dist/cluster/MessageStorage.d.ts.map +1 -1
- 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 +95 -32
- package/dist/cluster/Sharding.js.map +1 -1
- package/dist/cluster/ShardingConfig.d.ts +20 -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/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 +10 -4
- package/dist/cluster/SqlRunnerStorage.js.map +1 -1
- package/dist/cluster/internal/entityManager.js +65 -8
- 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 +31 -4
- package/dist/devtools/DevToolsClient.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/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.js +3 -3
- 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 +387 -159
- 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 +47 -0
- package/dist/eventlog/internal/conflicts.d.ts.map +1 -0
- package/dist/eventlog/internal/conflicts.js +92 -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/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 +93 -0
- package/dist/http/HttpClient.d.ts.map +1 -1
- package/dist/http/HttpClient.js +55 -16
- package/dist/http/HttpClient.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 +44 -2
- 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 +159 -13
- package/dist/http/HttpMiddleware.js.map +1 -1
- package/dist/http/HttpRouter.d.ts.map +1 -1
- package/dist/http/HttpRouter.js +7 -2
- 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 +5 -3
- package/dist/http/HttpServerError.js.map +1 -1
- package/dist/http/HttpServerRequest.d.ts +25 -5
- package/dist/http/HttpServerRequest.d.ts.map +1 -1
- package/dist/http/HttpServerRequest.js +36 -10
- 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 +21 -7
- 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 +87 -5
- 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/internal/decompression.js +17 -11
- package/dist/http/internal/decompression.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/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.js +1 -1
- 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 +121 -18
- package/dist/http-api/HttpApiBuilder.js.map +1 -1
- package/dist/http-api/HttpApiClient.d.ts +29 -4
- package/dist/http-api/HttpApiClient.d.ts.map +1 -1
- package/dist/http-api/HttpApiClient.js +83 -23
- package/dist/http-api/HttpApiClient.js.map +1 -1
- package/dist/http-api/HttpApiEndpoint.d.ts +55 -29
- package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
- package/dist/http-api/HttpApiEndpoint.js +49 -5
- 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 +191 -9
- package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
- package/dist/http-api/HttpApiSchema.js +137 -4
- 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 +30 -9
- 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 +57 -32
- 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/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/core.js +1 -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 +85 -74
- package/dist/internal/effect.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/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/fromJsonSchemaDocument.js +136 -126
- package/dist/internal/schema/fromJsonSchemaDocument.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 +34 -33
- package/dist/internal/schema/standardSchema.js.map +1 -1
- package/dist/internal/schema/toCodeDocument.js +7 -2
- package/dist/internal/schema/toCodeDocument.js.map +1 -1
- package/dist/internal/schema/toCodec.js +86 -1
- 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 +60 -38
- package/dist/internal/schema/toJsonSchemaDocument.js.map +1 -1
- 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/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/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/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/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 +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 +2 -1
- package/dist/process/ChildProcess.d.ts.map +1 -1
- package/dist/process/ChildProcess.js.map +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 +196 -60
- package/dist/rpc/RpcClient.js.map +1 -1
- package/dist/rpc/RpcSerialization.d.ts +15 -0
- package/dist/rpc/RpcSerialization.d.ts.map +1 -1
- package/dist/rpc/RpcSerialization.js +21 -5
- package/dist/rpc/RpcSerialization.js.map +1 -1
- package/dist/rpc/RpcServer.d.ts.map +1 -1
- package/dist/rpc/RpcServer.js +9 -18
- package/dist/rpc/RpcServer.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.map +1 -1
- package/dist/sql/Migrator.js +15 -3
- package/dist/sql/Migrator.js.map +1 -1
- package/dist/sql/SqlClient.d.ts +143 -5
- package/dist/sql/SqlClient.d.ts.map +1 -1
- package/dist/sql/SqlClient.js +148 -27
- package/dist/sql/SqlClient.js.map +1 -1
- package/dist/sql/SqlResolver.d.ts +9 -0
- package/dist/sql/SqlResolver.d.ts.map +1 -1
- package/dist/sql/SqlResolver.js +9 -0
- package/dist/sql/SqlResolver.js.map +1 -1
- package/dist/sql/Statement.d.ts +3 -1
- package/dist/sql/Statement.d.ts.map +1 -1
- package/dist/sql/Statement.js +24 -5
- 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/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/Array.ts +128 -55
- package/src/Bytes.ts +111 -0
- package/src/Channel.ts +263 -436
- 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/Duration.ts +66 -16
- package/src/Effect.ts +502 -167
- package/src/Equivalence.ts +7 -4
- package/src/Exit.ts +24 -9
- package/src/FiberHandle.ts +10 -9
- package/src/FiberMap.ts +13 -66
- package/src/FileSystem.ts +10 -0
- package/src/Graph.ts +171 -1263
- package/src/HashSet.ts +0 -60
- package/src/Iterable.ts +15 -14
- package/src/JsonSchema.ts +28 -3
- package/src/Layer.ts +2 -2
- package/src/ManagedRuntime.ts +72 -6
- package/src/Metric.ts +249 -507
- package/src/MutableHashMap.ts +4 -473
- package/src/Number.ts +2 -2
- package/src/Optic.ts +17 -332
- package/src/Path.ts +9 -1
- package/src/PubSub.ts +12 -7
- 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 +7 -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 +2 -94
- package/src/Schema.ts +591 -356
- package/src/SchemaAST.ts +20 -9
- package/src/SchemaGetter.ts +22 -5
- package/src/SchemaIssue.ts +44 -53
- package/src/SchemaRepresentation.ts +64 -1
- package/src/SchemaTransformation.ts +1 -1
- 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/Sink.ts +6 -2
- package/src/Stream.ts +334 -1011
- package/src/String.ts +8 -8
- package/src/TextDiff.ts +766 -0
- 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/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 +217 -220
- package/src/ai/Prompt.ts +49 -35
- package/src/ai/Response.ts +195 -65
- package/src/ai/Tool.ts +12 -4
- package/src/ai/Toolkit.ts +78 -10
- 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/CliError.ts +49 -4
- package/src/cli/Command.ts +316 -9
- package/src/cli/Completions.ts +5 -0
- package/src/cli/Flag.ts +117 -0
- package/src/cli/GlobalFlag.ts +3 -3
- package/src/cli/Param.ts +122 -0
- package/src/cli/TerminalCapabilities.ts +156 -0
- package/src/cli/index.ts +6 -0
- package/src/cli/internal/command.ts +8 -3
- package/src/cli/internal/completions/bash.ts +4 -3
- 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 +84 -41
- package/src/cluster/Entity.ts +4 -0
- package/src/cluster/MessageStorage.ts +7 -0
- package/src/cluster/Runners.ts +76 -25
- package/src/cluster/Sharding.ts +118 -38
- package/src/cluster/ShardingConfig.ts +15 -0
- package/src/cluster/SqlMessageStorage.ts +58 -55
- package/src/cluster/SqlRunnerStorage.ts +10 -4
- package/src/cluster/internal/entityManager.ts +80 -10
- package/src/devtools/DevTools.ts +3 -2
- package/src/devtools/DevToolsClient.ts +27 -10
- 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/Tar.ts +1417 -0
- package/src/encoding/Toml.ts +3 -3
- 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 +453 -173
- 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 +123 -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/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 +126 -135
- package/src/http/HttpClientRequest.ts +142 -4
- 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 +180 -23
- package/src/http/HttpRouter.ts +8 -2
- package/src/http/HttpServerError.ts +6 -3
- package/src/http/HttpServerRequest.ts +71 -12
- package/src/http/HttpServerResponse.ts +49 -23
- package/src/http/HttpStaticServer.ts +25 -9
- package/src/http/MultipartParser/internal/contentType.ts +107 -6
- 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/internal/decompression.ts +26 -17
- package/src/http/internal/lazyStream.ts +25 -0
- package/src/http/internal/requestState.ts +33 -0
- package/src/http/internal/webResponse.ts +20 -0
- package/src/http-api/HttpApi.ts +1 -1
- package/src/http-api/HttpApiBuilder.ts +151 -23
- package/src/http-api/HttpApiClient.ts +158 -30
- package/src/http-api/HttpApiEndpoint.ts +144 -33
- package/src/http-api/HttpApiError.ts +55 -0
- package/src/http-api/HttpApiScalar.ts +4 -3
- package/src/http-api/HttpApiSchema.ts +275 -13
- package/src/http-api/HttpApiSwagger.ts +11 -4
- package/src/http-api/HttpApiTest.ts +33 -9
- package/src/http-api/OpenApi.ts +84 -42
- package/src/http-api/internal/path.ts +40 -12
- package/src/index.ts +24 -0
- package/src/internal/core.ts +1 -1
- package/src/internal/dateTime.ts +20 -7
- package/src/internal/effect.ts +120 -84
- package/src/internal/hashMap.ts +2 -2
- package/src/internal/hydration.ts +15 -0
- package/src/internal/inflate.ts +710 -0
- 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/fromJsonSchemaDocument.ts +262 -193
- package/src/internal/schema/interpreter.ts +58 -45
- package/src/internal/schema/standardSchema.ts +32 -30
- package/src/internal/schema/toCodeDocument.ts +8 -3
- package/src/internal/schema/toCodec.ts +116 -1
- package/src/internal/schema/toFormatter.ts +6 -6
- package/src/internal/schema/toJsonSchemaDocument.ts +69 -39
- 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/OtlpResource.ts +16 -6
- package/src/observability/OtlpSerialization.ts +17 -3
- package/src/observability/internal/protobuf.ts +2 -10
- 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/UserDirectories.ts +273 -0
- package/src/persistence/index.ts +6 -0
- package/src/process/ChildProcess.ts +2 -1
- package/src/reactivity/AsyncResult.ts +4 -38
- 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 +279 -103
- package/src/rpc/RpcSerialization.ts +21 -5
- package/src/rpc/RpcServer.ts +11 -20
- package/src/schema/VariantSchema.ts +86 -22
- package/src/socket/Socket.ts +45 -20
- package/src/sql/Migrator.ts +19 -9
- package/src/sql/SqlClient.ts +266 -29
- package/src/sql/SqlResolver.ts +9 -0
- package/src/sql/Statement.ts +35 -8
- package/src/testing/TestClock.ts +4 -1
- package/src/testing/TestSchema.ts +9 -3
- 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
|
@@ -14,16 +14,19 @@ import * as Arr from "../Array.ts"
|
|
|
14
14
|
import * as Cache from "../Cache.ts"
|
|
15
15
|
import * as Context from "../Context.ts"
|
|
16
16
|
import * as Data from "../Data.ts"
|
|
17
|
+
import * as Duration from "../Duration.ts"
|
|
17
18
|
import * as Effect from "../Effect.ts"
|
|
18
19
|
import * as Equal from "../Equal.ts"
|
|
20
|
+
import * as Exit from "../Exit.ts"
|
|
19
21
|
import * as Hash from "../Hash.ts"
|
|
22
|
+
import * as Uuid from "../internal/uuid.ts"
|
|
20
23
|
import * as Layer from "../Layer.ts"
|
|
21
24
|
import * as Option from "../Option.ts"
|
|
22
25
|
import * as Redacted from "../Redacted.ts"
|
|
23
26
|
import type * as Rpc from "../rpc/Rpc.ts"
|
|
24
27
|
import type * as RpcGroup from "../rpc/RpcGroup.ts"
|
|
25
28
|
import * as Stream from "../Stream.ts"
|
|
26
|
-
import type { RemoteId } from "./EventJournal.ts"
|
|
29
|
+
import type { EntryId, RemoteId } from "./EventJournal.ts"
|
|
27
30
|
import * as EventLog from "./EventLog.ts"
|
|
28
31
|
import {
|
|
29
32
|
ChunkedMessage,
|
|
@@ -32,7 +35,8 @@ import {
|
|
|
32
35
|
EventLogRemoteRpcs,
|
|
33
36
|
HelloResponse,
|
|
34
37
|
SingleMessage,
|
|
35
|
-
type StoreId
|
|
38
|
+
type StoreId,
|
|
39
|
+
type WriteAck
|
|
36
40
|
} from "./EventLogMessage.ts"
|
|
37
41
|
import * as EventLogSessionAuth from "./EventLogSessionAuth.ts"
|
|
38
42
|
|
|
@@ -72,12 +76,16 @@ export const layerAuthMiddleware: Layer.Layer<
|
|
|
72
76
|
* chunked writes, delegates write and change handling to the supplied callbacks,
|
|
73
77
|
* and frames large change payloads into chunks.
|
|
74
78
|
*
|
|
79
|
+
* Use the connection's `ConnectionWrites.track` in `onWrite` and
|
|
80
|
+
* `ConnectionWrites.filter` in `changes` to suppress its own write echoes.
|
|
81
|
+
*
|
|
75
82
|
* @stability unstable
|
|
76
83
|
* @category layers
|
|
77
84
|
* @since 4.0.0
|
|
78
85
|
*/
|
|
79
86
|
export const layerRpcHandlers = (options: {
|
|
80
87
|
readonly remoteId: RemoteId
|
|
88
|
+
readonly firstSequence?: number | undefined
|
|
81
89
|
readonly authorizeIdentity?: (publicKey: string) => Effect.Effect<void, EventLogProtocolError>
|
|
82
90
|
readonly getOrCreateSessionAuthBinding: (
|
|
83
91
|
publicKey: string,
|
|
@@ -85,12 +93,14 @@ export const layerRpcHandlers = (options: {
|
|
|
85
93
|
) => Effect.Effect<Uint8Array<ArrayBuffer>>
|
|
86
94
|
readonly onWrite: (
|
|
87
95
|
data: Uint8Array<ArrayBuffer>,
|
|
88
|
-
authenticatedPublicKeys: ReadonlySet<string
|
|
89
|
-
|
|
96
|
+
authenticatedPublicKeys: ReadonlySet<string>,
|
|
97
|
+
writes: ConnectionWrites
|
|
98
|
+
) => Effect.Effect<ReadonlyArray<WriteAck>, EventLogProtocolError>
|
|
90
99
|
readonly changes: (options: {
|
|
91
100
|
readonly publicKey: string
|
|
92
101
|
readonly storeId: StoreId
|
|
93
102
|
readonly startSequence: number
|
|
103
|
+
readonly writes: ConnectionWrites
|
|
94
104
|
}) => Stream.Stream<Uint8Array<ArrayBuffer>, unknown>
|
|
95
105
|
}): Layer.Layer<
|
|
96
106
|
Rpc.ToHandler<RpcGroup.Rpcs<typeof EventLogRemoteRpcs>> | EventLogAuthentication
|
|
@@ -103,8 +113,8 @@ export const layerRpcHandlers = (options: {
|
|
|
103
113
|
})
|
|
104
114
|
let chunkedIdCounter = 0
|
|
105
115
|
|
|
106
|
-
const persistedSigningPublicKeys = yield* Cache.
|
|
107
|
-
|
|
116
|
+
const persistedSigningPublicKeys = yield* Cache.makeWith(
|
|
117
|
+
(key: SessionAuthCacheKey) =>
|
|
108
118
|
options.getOrCreateSessionAuthBinding(key.publicKey, key.signingPublicKey).pipe(
|
|
109
119
|
Effect.catchCause((_) =>
|
|
110
120
|
Effect.fail(
|
|
@@ -117,15 +127,19 @@ export const layerRpcHandlers = (options: {
|
|
|
117
127
|
)
|
|
118
128
|
)
|
|
119
129
|
),
|
|
120
|
-
|
|
121
|
-
|
|
130
|
+
{
|
|
131
|
+
capacity: 4096,
|
|
132
|
+
timeToLive: (exit) => Exit.isSuccess(exit) ? Duration.infinity : Duration.zero
|
|
133
|
+
}
|
|
134
|
+
)
|
|
122
135
|
|
|
123
136
|
return EventLogRemoteRpcs.of({
|
|
124
137
|
"EventLog.Hello": Effect.fnUntraced(function*(_, { client }) {
|
|
125
138
|
const challenge = yield* Cache.get(clientChallenges, client.id)
|
|
126
139
|
return new HelloResponse({
|
|
127
140
|
remoteId: options.remoteId,
|
|
128
|
-
challenge
|
|
141
|
+
challenge,
|
|
142
|
+
firstSequence: options.firstSequence
|
|
129
143
|
})
|
|
130
144
|
}),
|
|
131
145
|
"EventLog.Authenticate": Effect.fnUntraced(function*(request, { client }) {
|
|
@@ -181,21 +195,22 @@ export const layerRpcHandlers = (options: {
|
|
|
181
195
|
.annotate(AuthenticatedIdentities, authenticatedIdentities)
|
|
182
196
|
.annotate(ChunkedMessageState, new Map())
|
|
183
197
|
}),
|
|
184
|
-
"EventLog.WriteSingle":
|
|
185
|
-
|
|
198
|
+
"EventLog.WriteSingle": (request, { client }) =>
|
|
199
|
+
options.onWrite(
|
|
186
200
|
request.data,
|
|
187
|
-
Context.getOrUndefined(client.annotations, AuthenticatedIdentities) ?? new Set()
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
"EventLog.WriteChunked":
|
|
201
|
+
Context.getOrUndefined(client.annotations, AuthenticatedIdentities) ?? new Set(),
|
|
202
|
+
getConnectionWrites(client)
|
|
203
|
+
),
|
|
204
|
+
"EventLog.WriteChunked": (request, { client }) => {
|
|
191
205
|
const state = Context.get(client.annotations, ChunkedMessageState)
|
|
192
206
|
const data = ChunkedMessage.join(state, request)
|
|
193
|
-
if (!data) return
|
|
194
|
-
|
|
207
|
+
if (!data) return Effect.succeed([])
|
|
208
|
+
return options.onWrite(
|
|
195
209
|
data,
|
|
196
|
-
Context.getOrUndefined(client.annotations, AuthenticatedIdentities) ?? new Set()
|
|
210
|
+
Context.getOrUndefined(client.annotations, AuthenticatedIdentities) ?? new Set(),
|
|
211
|
+
getConnectionWrites(client)
|
|
197
212
|
)
|
|
198
|
-
}
|
|
213
|
+
},
|
|
199
214
|
"EventLog.Changes": (request, { client }) => {
|
|
200
215
|
const authenticatedIdentities = Context.getOrUndefined(client.annotations, AuthenticatedIdentities)
|
|
201
216
|
if (!authenticatedIdentities?.has(request.publicKey)) {
|
|
@@ -211,7 +226,8 @@ export const layerRpcHandlers = (options: {
|
|
|
211
226
|
return options.changes({
|
|
212
227
|
publicKey: request.publicKey,
|
|
213
228
|
storeId: request.storeId,
|
|
214
|
-
startSequence: request.startSequence
|
|
229
|
+
startSequence: request.startSequence,
|
|
230
|
+
writes: getConnectionWrites(client)
|
|
215
231
|
}).pipe(
|
|
216
232
|
Stream.mapArray(Arr.flatMap((data): NonEmptyReadonlyArray<SingleMessage | ChunkedMessage> => {
|
|
217
233
|
if (data.byteLength <= ChunkedMessage.chunkSize) {
|
|
@@ -259,6 +275,132 @@ export class ChunkedMessageState extends Context.Reference<
|
|
|
259
275
|
defaultValue: () => new Map()
|
|
260
276
|
}) {}
|
|
261
277
|
|
|
278
|
+
/**
|
|
279
|
+
* Tracks writes to suppress their echoes on the same RPC connection.
|
|
280
|
+
*
|
|
281
|
+
* **Details**
|
|
282
|
+
*
|
|
283
|
+
* Only tracks entries for stores with an open change stream.
|
|
284
|
+
*
|
|
285
|
+
* @stability unstable
|
|
286
|
+
* @category models
|
|
287
|
+
* @since 4.0.6
|
|
288
|
+
*/
|
|
289
|
+
export class ConnectionWrites {
|
|
290
|
+
private readonly streams = new Map<string, Set<ConnectionStream>>()
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Runs a storage write while suppressing its entries on this connection's streams.
|
|
294
|
+
*
|
|
295
|
+
* @stability unstable
|
|
296
|
+
* @since 4.0.6
|
|
297
|
+
*/
|
|
298
|
+
track<E, R>(
|
|
299
|
+
options: {
|
|
300
|
+
readonly publicKey: string
|
|
301
|
+
readonly storeId: StoreId
|
|
302
|
+
readonly entryIds: ReadonlyArray<EntryId>
|
|
303
|
+
},
|
|
304
|
+
write: Effect.Effect<ReadonlyArray<WriteAck>, E, R>
|
|
305
|
+
): Effect.Effect<ReadonlyArray<WriteAck>, E, R> {
|
|
306
|
+
const open = this.streams.get(makeStreamKey(options.publicKey, options.storeId))
|
|
307
|
+
if (open === undefined || options.entryIds.length === 0) return write
|
|
308
|
+
const streams = Array.from(open)
|
|
309
|
+
const started = streams.map((stream) => stream.position)
|
|
310
|
+
const ids = options.entryIds.map(Uuid.stringify)
|
|
311
|
+
// Track before writing: storage can publish an entry before the write
|
|
312
|
+
// returns. Each occurrence is counted, as an id can be stored more than once.
|
|
313
|
+
for (const stream of streams) {
|
|
314
|
+
for (const id of ids) stream.ids.set(id, (stream.ids.get(id) ?? 0) + 1)
|
|
315
|
+
}
|
|
316
|
+
return Effect.onExit(write, (exit) =>
|
|
317
|
+
Effect.sync(() => {
|
|
318
|
+
for (let i = 0; i < streams.length; i++) {
|
|
319
|
+
const stream = streams[i]
|
|
320
|
+
if (exit._tag === "Failure") {
|
|
321
|
+
for (const id of ids) release(stream.ids, id)
|
|
322
|
+
continue
|
|
323
|
+
}
|
|
324
|
+
// Release occurrences the stream had already passed when the write began.
|
|
325
|
+
for (const ack of exit.value) {
|
|
326
|
+
if (ack.sequence <= started[i]) release(stream.ids, Uuid.stringify(ack.entryId))
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}))
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* Filters this connection's writes from a store's change stream. An item can
|
|
334
|
+
* hold several entries; `sequence` returns its highest one.
|
|
335
|
+
*
|
|
336
|
+
* @stability unstable
|
|
337
|
+
* @since 4.0.6
|
|
338
|
+
*/
|
|
339
|
+
filter<A, E, R>(
|
|
340
|
+
options: {
|
|
341
|
+
readonly publicKey: string
|
|
342
|
+
readonly storeId: StoreId
|
|
343
|
+
readonly entryIds: (item: A) => ReadonlyArray<EntryId>
|
|
344
|
+
readonly sequence: (item: A) => number
|
|
345
|
+
},
|
|
346
|
+
stream: Stream.Stream<A, E, R>
|
|
347
|
+
): Stream.Stream<A, E, R> {
|
|
348
|
+
return Stream.suspend(() => {
|
|
349
|
+
const key = makeStreamKey(options.publicKey, options.storeId)
|
|
350
|
+
const state: ConnectionStream = { ids: new Map(), position: -1 }
|
|
351
|
+
let open = this.streams.get(key)
|
|
352
|
+
if (open === undefined) {
|
|
353
|
+
open = new Set()
|
|
354
|
+
this.streams.set(key, open)
|
|
355
|
+
}
|
|
356
|
+
open.add(state)
|
|
357
|
+
return stream.pipe(
|
|
358
|
+
Stream.filter((item) => {
|
|
359
|
+
const sequence = options.sequence(item)
|
|
360
|
+
if (sequence > state.position) state.position = sequence
|
|
361
|
+
if (state.ids.size === 0) return true
|
|
362
|
+
// An item is written by one request, so it is either all or none of ours.
|
|
363
|
+
const ids = options.entryIds(item).map(Uuid.stringify)
|
|
364
|
+
if (!ids.every((id) => state.ids.has(id))) return true
|
|
365
|
+
for (const id of ids) release(state.ids, id)
|
|
366
|
+
return false
|
|
367
|
+
}),
|
|
368
|
+
Stream.ensuring(Effect.sync(() => {
|
|
369
|
+
open.delete(state)
|
|
370
|
+
if (open.size === 0) this.streams.delete(key)
|
|
371
|
+
}))
|
|
372
|
+
)
|
|
373
|
+
})
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
interface ConnectionStream {
|
|
378
|
+
// Outstanding occurrences of this connection's writes, by entry id.
|
|
379
|
+
readonly ids: Map<string, number>
|
|
380
|
+
position: number
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
const release = (ids: Map<string, number>, id: string): void => {
|
|
384
|
+
const count = ids.get(id)
|
|
385
|
+
if (count === undefined) return
|
|
386
|
+
if (count <= 1) ids.delete(id)
|
|
387
|
+
else ids.set(id, count - 1)
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
const makeStreamKey = (publicKey: string, storeId: StoreId): string => `${publicKey}/${storeId}`
|
|
391
|
+
|
|
392
|
+
class ConnectionWritesState extends Context.Service<ConnectionWritesState, ConnectionWrites>()(
|
|
393
|
+
"effect/eventlog/EventLogServer/ConnectionWrites"
|
|
394
|
+
) {}
|
|
395
|
+
|
|
396
|
+
const getConnectionWrites = (client: Rpc.ServerClient): ConnectionWrites => {
|
|
397
|
+
const existing = Context.getOrUndefined(client.annotations, ConnectionWritesState)
|
|
398
|
+
if (existing !== undefined) return existing
|
|
399
|
+
const writes = new ConnectionWrites()
|
|
400
|
+
client.annotate(ConnectionWritesState, writes)
|
|
401
|
+
return writes
|
|
402
|
+
}
|
|
403
|
+
|
|
262
404
|
/**
|
|
263
405
|
* Annotation containing the public keys authenticated on an RPC connection.
|
|
264
406
|
*
|
|
@@ -14,18 +14,24 @@
|
|
|
14
14
|
import * as Arr from "../Array.ts"
|
|
15
15
|
import * as Context from "../Context.ts"
|
|
16
16
|
import * as Effect from "../Effect.ts"
|
|
17
|
+
import * as Equal from "../Equal.ts"
|
|
17
18
|
import * as Uuid from "../internal/uuid.ts"
|
|
18
19
|
import * as Layer from "../Layer.ts"
|
|
19
20
|
import * as PubSub from "../PubSub.ts"
|
|
20
21
|
import * as RcMap from "../RcMap.ts"
|
|
21
22
|
import * as RpcServer from "../rpc/RpcServer.ts"
|
|
22
|
-
import * as Schema from "../Schema.ts"
|
|
23
23
|
import type * as Scope from "../Scope.ts"
|
|
24
24
|
import * as Stream from "../Stream.ts"
|
|
25
|
-
import
|
|
26
|
-
import {
|
|
27
|
-
import
|
|
28
|
-
|
|
25
|
+
import { type EntryId, makeRemoteIdUnsafe, type RemoteId } from "./EventJournal.ts"
|
|
26
|
+
import type { EncryptedBatch, EncryptedRemoteBatch } from "./EventLogEncryption.ts"
|
|
27
|
+
import {
|
|
28
|
+
ChangesRpc,
|
|
29
|
+
EventLogProtocolError,
|
|
30
|
+
EventLogRemoteRpcs,
|
|
31
|
+
type StoreId,
|
|
32
|
+
type WriteAck,
|
|
33
|
+
WriteEntries
|
|
34
|
+
} from "./EventLogMessage.ts"
|
|
29
35
|
import * as EventLogServer from "./EventLogServer.ts"
|
|
30
36
|
|
|
31
37
|
/**
|
|
@@ -33,9 +39,9 @@ import * as EventLogServer from "./EventLogServer.ts"
|
|
|
33
39
|
*
|
|
34
40
|
* **Details**
|
|
35
41
|
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
42
|
+
* Decodes and persists writes through `Storage`, acknowledging their stored
|
|
43
|
+
* sequences. Change streams encode stored batches, excluding this connection's
|
|
44
|
+
* writes.
|
|
39
45
|
*
|
|
40
46
|
* @stability unstable
|
|
41
47
|
* @category layers
|
|
@@ -47,9 +53,10 @@ export const layerRpcHandlers = Layer.unwrap(Effect.gen(function*() {
|
|
|
47
53
|
|
|
48
54
|
return EventLogServer.layerRpcHandlers({
|
|
49
55
|
remoteId,
|
|
56
|
+
firstSequence: storage.firstSequence,
|
|
50
57
|
getOrCreateSessionAuthBinding: (publicKey, signingPublicKey) =>
|
|
51
58
|
storage.getOrCreateSessionAuthBinding(publicKey, signingPublicKey),
|
|
52
|
-
onWrite: Effect.fnUntraced(function*(data, authenticatedPublicKeys) {
|
|
59
|
+
onWrite: Effect.fnUntraced(function*(data, authenticatedPublicKeys, writes) {
|
|
53
60
|
const request = yield* WriteEntries.decode(data).pipe(
|
|
54
61
|
Effect.mapError((_) =>
|
|
55
62
|
new EventLogProtocolError({
|
|
@@ -68,15 +75,11 @@ export const layerRpcHandlers = Layer.unwrap(Effect.gen(function*() {
|
|
|
68
75
|
message: "Identity is not authenticated"
|
|
69
76
|
})
|
|
70
77
|
}
|
|
71
|
-
if (request.
|
|
72
|
-
const
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
encryptedEntry
|
|
77
|
-
})
|
|
78
|
-
)
|
|
79
|
-
return yield* storage.write(request.publicKey, request.storeId, entries).pipe(
|
|
78
|
+
if (request.batches.length === 0) return []
|
|
79
|
+
const entryIds = request.batches.flatMap((batch) => batch.entryIds)
|
|
80
|
+
return yield* storage.write(request.publicKey, request.storeId, request.batches).pipe(
|
|
81
|
+
Effect.flatMap((stored) => toWriteAcks(storage, request.publicKey, request.storeId, request.batches, stored)),
|
|
82
|
+
(write) => writes.track({ publicKey: request.publicKey, storeId: request.storeId, entryIds }, write),
|
|
80
83
|
Effect.catchCause((_) =>
|
|
81
84
|
Effect.fail(
|
|
82
85
|
new EventLogProtocolError({
|
|
@@ -89,13 +92,53 @@ export const layerRpcHandlers = Layer.unwrap(Effect.gen(function*() {
|
|
|
89
92
|
)
|
|
90
93
|
)
|
|
91
94
|
}),
|
|
92
|
-
changes: ({ publicKey, storeId,
|
|
93
|
-
|
|
94
|
-
|
|
95
|
+
changes: ({ publicKey, startSequence, storeId, writes }) =>
|
|
96
|
+
writes.filter(
|
|
97
|
+
{
|
|
98
|
+
publicKey,
|
|
99
|
+
storeId,
|
|
100
|
+
entryIds: (batch) => batch.entryIds,
|
|
101
|
+
sequence: (batch) => batch.sequence + batch.entryIds.length - 1
|
|
102
|
+
},
|
|
103
|
+
storage.changes(publicKey, storeId, startSequence)
|
|
104
|
+
).pipe(
|
|
105
|
+
Stream.mapArrayEffect((batches) => Effect.map(ChangesRpc.encodeEncrypted(batches), Arr.of))
|
|
95
106
|
)
|
|
96
107
|
})
|
|
97
108
|
}))
|
|
98
109
|
|
|
110
|
+
// Acknowledges each entry occurrence in request order: at its position in the
|
|
111
|
+
// batch this write stored, or, for a skipped batch, where it was first stored.
|
|
112
|
+
const toWriteAcks = Effect.fnUntraced(function*(
|
|
113
|
+
storage: Storage["Service"],
|
|
114
|
+
publicKey: string,
|
|
115
|
+
storeId: StoreId,
|
|
116
|
+
batches: ReadonlyArray<EncryptedBatch>,
|
|
117
|
+
stored: ReadonlyArray<EncryptedRemoteBatch>
|
|
118
|
+
) {
|
|
119
|
+
// Stored batches keep request order, and each batch has its own random iv.
|
|
120
|
+
let next = 0
|
|
121
|
+
const storedAt = batches.map((batch) => {
|
|
122
|
+
if (stored[next] === undefined || !Equal.equals(stored[next].iv, batch.iv)) return undefined
|
|
123
|
+
return stored[next++].sequence
|
|
124
|
+
})
|
|
125
|
+
const skipped = batches.flatMap((batch, i) => storedAt[i] === undefined ? batch.entryIds : [])
|
|
126
|
+
const firstStored = new Map<string, number>()
|
|
127
|
+
if (skipped.length > 0) {
|
|
128
|
+
for (const ack of yield* storage.entrySequences(publicKey, storeId, skipped)) {
|
|
129
|
+
firstStored.set(Uuid.stringify(ack.entryId), ack.sequence)
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
const acks: Array<WriteAck> = []
|
|
133
|
+
batches.forEach((batch, b) =>
|
|
134
|
+
batch.entryIds.forEach((entryId, i) => {
|
|
135
|
+
const sequence = storedAt[b] === undefined ? firstStored.get(Uuid.stringify(entryId)) : storedAt[b] + i
|
|
136
|
+
if (sequence !== undefined) acks.push({ entryId, sequence })
|
|
137
|
+
})
|
|
138
|
+
)
|
|
139
|
+
return acks
|
|
140
|
+
})
|
|
141
|
+
|
|
99
142
|
/**
|
|
100
143
|
* Provides an encrypted event-log RPC server using `EventLogRemoteRpcs` and the
|
|
101
144
|
* encrypted server RPC handlers.
|
|
@@ -108,7 +151,7 @@ export const layerRpcHandlers = Layer.unwrap(Effect.gen(function*() {
|
|
|
108
151
|
* **Details**
|
|
109
152
|
*
|
|
110
153
|
* This layer installs `EventLogRemoteRpcs` on the provided RPC server protocol
|
|
111
|
-
* and wires those RPCs to `layerRpcHandlers`. Encrypted
|
|
154
|
+
* and wires those RPCs to `layerRpcHandlers`. Encrypted batches, session
|
|
112
155
|
* authentication bindings, remote ids, and change streams are delegated to
|
|
113
156
|
* `Storage`.
|
|
114
157
|
*
|
|
@@ -124,31 +167,6 @@ export const layer: Layer.Layer<never, never, RpcServer.Protocol | Storage> = Rp
|
|
|
124
167
|
Layer.provide(layerRpcHandlers)
|
|
125
168
|
)
|
|
126
169
|
|
|
127
|
-
/**
|
|
128
|
-
* Schema for encrypted entries persisted by the encrypted event-log server.
|
|
129
|
-
*
|
|
130
|
-
* @stability unstable
|
|
131
|
-
* @category models
|
|
132
|
-
* @since 4.0.0
|
|
133
|
-
*/
|
|
134
|
-
export class PersistedEntry extends Schema.Class<PersistedEntry>(
|
|
135
|
-
"effect/eventlog/EventLogServerEncrypted/PersistedEntry"
|
|
136
|
-
)({
|
|
137
|
-
entryId: EntryId,
|
|
138
|
-
iv: Transferable.Uint8Array,
|
|
139
|
-
encryptedEntry: Transferable.Uint8Array
|
|
140
|
-
}) {
|
|
141
|
-
/**
|
|
142
|
-
* String representation of the encrypted entry id.
|
|
143
|
-
*
|
|
144
|
-
* @stability unstable
|
|
145
|
-
* @since 4.0.0
|
|
146
|
-
*/
|
|
147
|
-
get entryIdString(): string {
|
|
148
|
-
return Uuid.stringify(this.entryId)
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
|
|
152
170
|
/**
|
|
153
171
|
* Defines the backing store service used by the encrypted event-log server.
|
|
154
172
|
*
|
|
@@ -160,15 +178,27 @@ export class PersistedEntry extends Schema.Class<PersistedEntry>(
|
|
|
160
178
|
* **Details**
|
|
161
179
|
*
|
|
162
180
|
* It provides the server remote id, stores session authentication bindings,
|
|
163
|
-
* persists encrypted
|
|
181
|
+
* persists encrypted batches, and streams encrypted changes for a public key and
|
|
164
182
|
* store id.
|
|
165
183
|
*
|
|
184
|
+
* A batch owns one remote sequence per entry, starting at its `sequence`.
|
|
185
|
+
* `write` stores a batch unless every one of its entry ids is already stored,
|
|
186
|
+
* which makes retried writes idempotent, and returns the batches it stored.
|
|
187
|
+
* `entrySequences` returns the sequence each entry was first stored at, so
|
|
188
|
+
* skipped batches can still be acknowledged. `changes` streams every batch
|
|
189
|
+
* whose last sequence is at or after `startSequence`, followed by newly stored
|
|
190
|
+
* batches.
|
|
191
|
+
*
|
|
166
192
|
* @stability unstable
|
|
167
193
|
* @category services
|
|
168
194
|
* @since 4.0.0
|
|
169
195
|
*/
|
|
170
196
|
export class Storage extends Context.Service<Storage, {
|
|
171
197
|
readonly getId: Effect.Effect<RemoteId>
|
|
198
|
+
/**
|
|
199
|
+
* Lowest assigned sequence (default 0). Overestimating skips entries.
|
|
200
|
+
*/
|
|
201
|
+
readonly firstSequence?: number | undefined
|
|
172
202
|
readonly getOrCreateSessionAuthBinding: (
|
|
173
203
|
publicKey: string,
|
|
174
204
|
signingPublicKey: Uint8Array<ArrayBuffer>
|
|
@@ -176,13 +206,18 @@ export class Storage extends Context.Service<Storage, {
|
|
|
176
206
|
readonly write: (
|
|
177
207
|
publicKey: string,
|
|
178
208
|
storeId: StoreId,
|
|
179
|
-
|
|
180
|
-
) => Effect.Effect<ReadonlyArray<
|
|
209
|
+
batches: ReadonlyArray<EncryptedBatch>
|
|
210
|
+
) => Effect.Effect<ReadonlyArray<EncryptedRemoteBatch>>
|
|
211
|
+
readonly entrySequences: (
|
|
212
|
+
publicKey: string,
|
|
213
|
+
storeId: StoreId,
|
|
214
|
+
entryIds: ReadonlyArray<EntryId>
|
|
215
|
+
) => Effect.Effect<ReadonlyArray<WriteAck>>
|
|
181
216
|
readonly changes: (
|
|
182
217
|
publicKey: string,
|
|
183
218
|
storeId: StoreId,
|
|
184
219
|
startSequence: number
|
|
185
|
-
) => Stream.Stream<
|
|
220
|
+
) => Stream.Stream<EncryptedRemoteBatch>
|
|
186
221
|
}>()("effect/eventlog/EventLogServer/Storage") {}
|
|
187
222
|
|
|
188
223
|
/**
|
|
@@ -198,28 +233,25 @@ export class Storage extends Context.Service<Storage, {
|
|
|
198
233
|
* @since 4.0.0
|
|
199
234
|
*/
|
|
200
235
|
export const makeStorageMemory: Effect.Effect<Storage["Service"], never, Scope.Scope> = Effect.gen(function*() {
|
|
201
|
-
const
|
|
202
|
-
|
|
236
|
+
const journals = new Map<string, {
|
|
237
|
+
// Entry id to the sequence it was first stored at.
|
|
238
|
+
readonly knownIds: Map<string, number>
|
|
239
|
+
readonly batches: Array<EncryptedRemoteBatch>
|
|
240
|
+
nextSequence: number
|
|
241
|
+
}>()
|
|
203
242
|
const sessionAuthBindings = new Map<string, Uint8Array<ArrayBuffer>>()
|
|
204
243
|
const remoteId = makeRemoteIdUnsafe()
|
|
205
|
-
const ensureKnownIds = (scopeKey: string): Map<string, number> => {
|
|
206
|
-
let storeKnownIds = knownIds.get(scopeKey)
|
|
207
|
-
if (storeKnownIds) return storeKnownIds
|
|
208
|
-
storeKnownIds = new Map<string, number>()
|
|
209
|
-
knownIds.set(scopeKey, storeKnownIds)
|
|
210
|
-
return storeKnownIds
|
|
211
|
-
}
|
|
212
244
|
const ensureJournal = (scopeKey: string) => {
|
|
213
245
|
let journal = journals.get(scopeKey)
|
|
214
246
|
if (journal) return journal
|
|
215
|
-
journal = []
|
|
247
|
+
journal = { knownIds: new Map(), batches: [], nextSequence: 0 }
|
|
216
248
|
journals.set(scopeKey, journal)
|
|
217
249
|
return journal
|
|
218
250
|
}
|
|
219
251
|
const pubsubs = yield* RcMap.make({
|
|
220
252
|
lookup: (_scopeKey: string) =>
|
|
221
253
|
Effect.acquireRelease(
|
|
222
|
-
PubSub.unbounded<
|
|
254
|
+
PubSub.unbounded<EncryptedRemoteBatch>(),
|
|
223
255
|
PubSub.shutdown
|
|
224
256
|
),
|
|
225
257
|
idleTimeToLive: 60000
|
|
@@ -234,33 +266,42 @@ export const makeStorageMemory: Effect.Effect<Storage["Service"], never, Scope.S
|
|
|
234
266
|
sessionAuthBindings.set(publicKey, signingPublicKey)
|
|
235
267
|
return signingPublicKey
|
|
236
268
|
}),
|
|
237
|
-
write: Effect.fnUntraced(function*(publicKey, storeId,
|
|
269
|
+
write: Effect.fnUntraced(function*(publicKey, storeId, batches) {
|
|
238
270
|
const scopeKey = makeEncryptedScopeKey({ publicKey, storeId })
|
|
239
271
|
const pubsub = yield* RcMap.get(pubsubs, scopeKey)
|
|
240
|
-
const storeKnownIds = ensureKnownIds(scopeKey)
|
|
241
272
|
const journal = ensureJournal(scopeKey)
|
|
242
|
-
const
|
|
243
|
-
for (const
|
|
244
|
-
const
|
|
245
|
-
if (
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
journal.push(encrypted)
|
|
255
|
-
PubSub.publishUnsafe(pubsub, encrypted)
|
|
273
|
+
const stored: Array<EncryptedRemoteBatch> = []
|
|
274
|
+
for (const batch of batches) {
|
|
275
|
+
const ids = batch.entryIds.map(Uuid.stringify)
|
|
276
|
+
if (ids.every((id) => journal.knownIds.has(id))) continue
|
|
277
|
+
ids.forEach((id, i) => {
|
|
278
|
+
if (!journal.knownIds.has(id)) journal.knownIds.set(id, journal.nextSequence + i)
|
|
279
|
+
})
|
|
280
|
+
const remoteBatch: EncryptedRemoteBatch = { sequence: journal.nextSequence, ...batch }
|
|
281
|
+
journal.nextSequence += ids.length
|
|
282
|
+
journal.batches.push(remoteBatch)
|
|
283
|
+
stored.push(remoteBatch)
|
|
284
|
+
PubSub.publishUnsafe(pubsub, remoteBatch)
|
|
256
285
|
}
|
|
257
|
-
return
|
|
286
|
+
return stored
|
|
258
287
|
}, Effect.scoped),
|
|
288
|
+
entrySequences: (publicKey, storeId, entryIds) =>
|
|
289
|
+
Effect.sync(() => {
|
|
290
|
+
const knownIds = ensureJournal(makeEncryptedScopeKey({ publicKey, storeId })).knownIds
|
|
291
|
+
const acks: Array<WriteAck> = []
|
|
292
|
+
for (const entryId of entryIds) {
|
|
293
|
+
const sequence = knownIds.get(Uuid.stringify(entryId))
|
|
294
|
+
if (sequence !== undefined) acks.push({ entryId, sequence })
|
|
295
|
+
}
|
|
296
|
+
return acks
|
|
297
|
+
}),
|
|
259
298
|
changes: Effect.fnUntraced(function*(publicKey, storeId, startSequence) {
|
|
260
299
|
const scopeKey = makeEncryptedScopeKey({ publicKey, storeId })
|
|
261
300
|
const pubsub = yield* RcMap.get(pubsubs, scopeKey)
|
|
262
301
|
const subscription = yield* PubSub.subscribe(pubsub)
|
|
263
|
-
|
|
302
|
+
const batches = ensureJournal(scopeKey).batches
|
|
303
|
+
const first = batches.findIndex((batch) => batch.sequence + batch.entryIds.length > startSequence)
|
|
304
|
+
return Stream.fromArray(first === -1 ? [] : batches.slice(first)).pipe(
|
|
264
305
|
Stream.concat(Stream.fromSubscription(subscription))
|
|
265
306
|
)
|
|
266
307
|
}, Stream.unwrap)
|