effect 4.0.7 → 4.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -1
- package/THIRD_PARTY_NOTICES.md +62 -0
- package/dist/BigDecimal.d.ts +139 -7
- package/dist/BigDecimal.d.ts.map +1 -1
- package/dist/BigDecimal.js +86 -14
- package/dist/BigDecimal.js.map +1 -1
- package/dist/Channel.d.ts +12 -6
- package/dist/Channel.d.ts.map +1 -1
- package/dist/Channel.js +9 -3
- package/dist/Channel.js.map +1 -1
- package/dist/Config.d.ts +7 -1
- package/dist/Config.d.ts.map +1 -1
- package/dist/Config.js.map +1 -1
- package/dist/Context.d.ts +18 -1
- package/dist/Context.d.ts.map +1 -1
- package/dist/Context.js +27 -8
- package/dist/Context.js.map +1 -1
- package/dist/Cron.d.ts +81 -11
- package/dist/Cron.d.ts.map +1 -1
- package/dist/Cron.js +101 -26
- package/dist/Cron.js.map +1 -1
- package/dist/Duration.d.ts +78 -0
- package/dist/Duration.d.ts.map +1 -1
- package/dist/Duration.js +123 -0
- package/dist/Duration.js.map +1 -1
- package/dist/Effect.d.ts +164 -7
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +11 -1
- package/dist/Effect.js.map +1 -1
- package/dist/Equal.d.ts +2 -2
- package/dist/Equal.d.ts.map +1 -1
- package/dist/Equal.js +3 -3
- package/dist/Equal.js.map +1 -1
- package/dist/FileSystem.d.ts +59 -4
- package/dist/FileSystem.d.ts.map +1 -1
- package/dist/FileSystem.js +9 -2
- package/dist/FileSystem.js.map +1 -1
- package/dist/Glob.d.ts +165 -0
- package/dist/Glob.d.ts.map +1 -0
- package/dist/Glob.js +127 -0
- package/dist/Glob.js.map +1 -0
- package/dist/Hash.d.ts +3 -2
- package/dist/Hash.d.ts.map +1 -1
- package/dist/Hash.js +5 -4
- package/dist/Hash.js.map +1 -1
- package/dist/Iterable.d.ts.map +1 -1
- package/dist/Iterable.js +11 -8
- package/dist/Iterable.js.map +1 -1
- package/dist/Match.d.ts +86 -0
- package/dist/Match.d.ts.map +1 -1
- package/dist/Match.js +72 -0
- package/dist/Match.js.map +1 -1
- package/dist/Path.d.ts.map +1 -1
- package/dist/Path.js +5 -1
- package/dist/Path.js.map +1 -1
- package/dist/Pool.d.ts +51 -0
- package/dist/Pool.d.ts.map +1 -1
- package/dist/Pool.js +61 -10
- package/dist/Pool.js.map +1 -1
- package/dist/Random.d.ts.map +1 -1
- package/dist/Random.js +3 -3
- package/dist/Random.js.map +1 -1
- package/dist/RcMap.d.ts.map +1 -1
- package/dist/RcMap.js +8 -2
- package/dist/RcMap.js.map +1 -1
- package/dist/Schedule.d.ts +18 -1
- package/dist/Schedule.d.ts.map +1 -1
- package/dist/Schedule.js +7 -2
- package/dist/Schedule.js.map +1 -1
- package/dist/Schema.d.ts +668 -42
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +652 -1
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaGetter.d.ts +6 -1
- package/dist/SchemaGetter.d.ts.map +1 -1
- package/dist/SchemaGetter.js +22 -11
- package/dist/SchemaGetter.js.map +1 -1
- package/dist/SchemaRepresentation.d.ts +18 -2
- package/dist/SchemaRepresentation.d.ts.map +1 -1
- package/dist/SchemaRepresentation.js +20 -2
- package/dist/SchemaRepresentation.js.map +1 -1
- package/dist/SchemaTransformation.d.ts +10 -5
- package/dist/SchemaTransformation.d.ts.map +1 -1
- package/dist/SchemaTransformation.js +8 -5
- package/dist/SchemaTransformation.js.map +1 -1
- package/dist/ScopedCache.d.ts.map +1 -1
- package/dist/ScopedCache.js +5 -7
- package/dist/ScopedCache.js.map +1 -1
- package/dist/Semaphore.d.ts +130 -0
- package/dist/Semaphore.d.ts.map +1 -1
- package/dist/Semaphore.js +40 -0
- package/dist/Semaphore.js.map +1 -1
- package/dist/Stream.d.ts +13 -4
- package/dist/Stream.d.ts.map +1 -1
- package/dist/Stream.js +9 -0
- package/dist/Stream.js.map +1 -1
- package/dist/Terminal.d.ts +18 -1
- package/dist/Terminal.d.ts.map +1 -1
- package/dist/Terminal.js +1 -1
- package/dist/Terminal.js.map +1 -1
- package/dist/ai/AiError.d.ts +43 -116
- package/dist/ai/AiError.d.ts.map +1 -1
- package/dist/ai/AiError.js +53 -72
- package/dist/ai/AiError.js.map +1 -1
- package/dist/ai/Decision.d.ts +196 -15
- package/dist/ai/Decision.d.ts.map +1 -1
- package/dist/ai/Decision.js +130 -0
- package/dist/ai/Decision.js.map +1 -1
- package/dist/ai/DecisionModel.d.ts +54 -13
- package/dist/ai/DecisionModel.d.ts.map +1 -1
- package/dist/ai/DecisionModel.js +123 -12
- package/dist/ai/DecisionModel.js.map +1 -1
- package/dist/ai/McpClient.d.ts +171 -19
- package/dist/ai/McpClient.d.ts.map +1 -1
- package/dist/ai/McpClient.js +277 -66
- package/dist/ai/McpClient.js.map +1 -1
- package/dist/ai/McpSchema.d.ts +108 -0
- package/dist/ai/McpSchema.d.ts.map +1 -1
- package/dist/ai/McpSchema.js +99 -0
- package/dist/ai/McpSchema.js.map +1 -1
- package/dist/ai/McpServer.d.ts +744 -29
- package/dist/ai/McpServer.d.ts.map +1 -1
- package/dist/ai/McpServer.js +763 -136
- package/dist/ai/McpServer.js.map +1 -1
- package/dist/ai/McpTest.d.ts +130 -0
- package/dist/ai/McpTest.d.ts.map +1 -0
- package/dist/ai/McpTest.js +237 -0
- package/dist/ai/McpTest.js.map +1 -0
- package/dist/ai/Prompt.d.ts.map +1 -1
- package/dist/ai/Prompt.js +20 -11
- package/dist/ai/Prompt.js.map +1 -1
- package/dist/ai/Response.d.ts +1 -25
- package/dist/ai/Response.d.ts.map +1 -1
- package/dist/ai/Response.js +1 -10
- package/dist/ai/Response.js.map +1 -1
- package/dist/ai/Tool.d.ts +19 -1
- package/dist/ai/Tool.d.ts.map +1 -1
- package/dist/ai/Tool.js +5 -7
- package/dist/ai/Tool.js.map +1 -1
- package/dist/ai/index.d.ts +5 -0
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +5 -0
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/internal/mcpCore.js +89 -15
- package/dist/ai/internal/mcpCore.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2024_11_05.js +7 -6
- package/dist/ai/internal/mcpProtocol/v2024_11_05.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_03_26.js +7 -6
- package/dist/ai/internal/mcpProtocol/v2025_03_26.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_06_18.js +7 -6
- package/dist/ai/internal/mcpProtocol/v2025_06_18.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_11_25.js +7 -6
- package/dist/ai/internal/mcpProtocol/v2025_11_25.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js +60 -17
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
- package/dist/ai/internal/mcpProtocol.js +25 -0
- package/dist/ai/internal/mcpProtocol.js.map +1 -1
- package/dist/ai/internal/mcpRuntime.js +8 -6
- package/dist/ai/internal/mcpRuntime.js.map +1 -1
- package/dist/ai/internal/mcpSkills.d.ts +2 -0
- package/dist/ai/internal/mcpSkills.d.ts.map +1 -0
- package/dist/ai/internal/mcpSkills.js +428 -0
- package/dist/ai/internal/mcpSkills.js.map +1 -0
- package/dist/ai/internal/mcpStatefulRuntime.js +6 -1
- package/dist/ai/internal/mcpStatefulRuntime.js.map +1 -1
- package/dist/cli/Argument.d.ts +6 -0
- package/dist/cli/Argument.d.ts.map +1 -1
- package/dist/cli/Argument.js +2 -0
- package/dist/cli/Argument.js.map +1 -1
- package/dist/cli/CliOutput.d.ts +65 -1
- package/dist/cli/CliOutput.d.ts.map +1 -1
- package/dist/cli/CliOutput.js +94 -37
- package/dist/cli/CliOutput.js.map +1 -1
- package/dist/cli/Command.d.ts +23 -0
- package/dist/cli/Command.d.ts.map +1 -1
- package/dist/cli/Command.js +8 -0
- package/dist/cli/Command.js.map +1 -1
- package/dist/cli/Flag.d.ts +107 -0
- package/dist/cli/Flag.d.ts.map +1 -1
- package/dist/cli/Flag.js +37 -0
- package/dist/cli/Flag.js.map +1 -1
- package/dist/cli/HelpDoc.d.ts +15 -1
- package/dist/cli/HelpDoc.d.ts.map +1 -1
- package/dist/cli/Param.d.ts +6 -0
- package/dist/cli/Param.d.ts.map +1 -1
- package/dist/cli/Param.js +2 -0
- package/dist/cli/Param.js.map +1 -1
- package/dist/cli/Primitive.d.ts +14 -0
- package/dist/cli/Primitive.d.ts.map +1 -1
- package/dist/cli/Primitive.js +15 -1
- package/dist/cli/Primitive.js.map +1 -1
- package/dist/cli/Prompt.d.ts +1 -0
- package/dist/cli/Prompt.d.ts.map +1 -1
- package/dist/cli/Prompt.js +1 -0
- package/dist/cli/Prompt.js.map +1 -1
- package/dist/cli/internal/help.d.ts.map +1 -1
- package/dist/cli/internal/help.js +17 -10
- package/dist/cli/internal/help.js.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.js +15 -5
- package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
- package/dist/cluster/Reply.d.ts +1 -1
- package/dist/cluster/Reply.d.ts.map +1 -1
- package/dist/cluster/Reply.js.map +1 -1
- package/dist/cluster/Sharding.d.ts.map +1 -1
- package/dist/cluster/Sharding.js +93 -28
- package/dist/cluster/Sharding.js.map +1 -1
- package/dist/cluster/ShardingConfig.d.ts +72 -6
- package/dist/cluster/ShardingConfig.d.ts.map +1 -1
- package/dist/cluster/ShardingConfig.js +4 -0
- package/dist/cluster/ShardingConfig.js.map +1 -1
- package/dist/cluster/SingleRunner.d.ts +3 -3
- package/dist/cluster/SingleRunner.d.ts.map +1 -1
- package/dist/cluster/SingleRunner.js +1 -1
- package/dist/cluster/SqlMessageStorage.d.ts +37 -6
- package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
- package/dist/cluster/SqlMessageStorage.js +34 -7
- package/dist/cluster/SqlMessageStorage.js.map +1 -1
- package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
- package/dist/cluster/SqlRunnerStorage.js +23 -8
- package/dist/cluster/SqlRunnerStorage.js.map +1 -1
- package/dist/cluster/internal/entityManager.js +15 -7
- package/dist/cluster/internal/entityManager.js.map +1 -1
- package/dist/crypto/Aead.d.ts +323 -0
- package/dist/crypto/Aead.d.ts.map +1 -0
- package/dist/crypto/Aead.js +331 -0
- package/dist/crypto/Aead.js.map +1 -0
- package/dist/crypto/Cipher.d.ts +236 -0
- package/dist/crypto/Cipher.d.ts.map +1 -0
- package/dist/crypto/Cipher.js +233 -0
- package/dist/crypto/Cipher.js.map +1 -0
- package/dist/crypto/CryptoError.d.ts +212 -0
- package/dist/crypto/CryptoError.d.ts.map +1 -0
- package/dist/crypto/CryptoError.js +202 -0
- package/dist/crypto/CryptoError.js.map +1 -0
- package/dist/crypto/Digest.d.ts +143 -0
- package/dist/crypto/Digest.d.ts.map +1 -0
- package/dist/crypto/Digest.js +146 -0
- package/dist/crypto/Digest.js.map +1 -0
- package/dist/crypto/Kdf.d.ts +220 -0
- package/dist/crypto/Kdf.d.ts.map +1 -0
- package/dist/crypto/Kdf.js +212 -0
- package/dist/crypto/Kdf.js.map +1 -0
- package/dist/crypto/KeyAgreement.d.ts +324 -0
- package/dist/crypto/KeyAgreement.d.ts.map +1 -0
- package/dist/crypto/KeyAgreement.js +303 -0
- package/dist/crypto/KeyAgreement.js.map +1 -0
- package/dist/crypto/KeyFormat.d.ts +341 -0
- package/dist/crypto/KeyFormat.d.ts.map +1 -0
- package/dist/crypto/KeyFormat.js +556 -0
- package/dist/crypto/KeyFormat.js.map +1 -0
- package/dist/crypto/KeyWrap.d.ts +390 -0
- package/dist/crypto/KeyWrap.d.ts.map +1 -0
- package/dist/crypto/KeyWrap.js +381 -0
- package/dist/crypto/KeyWrap.js.map +1 -0
- package/dist/crypto/Mac.d.ts +278 -0
- package/dist/crypto/Mac.d.ts.map +1 -0
- package/dist/crypto/Mac.js +288 -0
- package/dist/crypto/Mac.js.map +1 -0
- package/dist/crypto/SecureRandom.d.ts +340 -0
- package/dist/crypto/SecureRandom.d.ts.map +1 -0
- package/dist/crypto/SecureRandom.js +257 -0
- package/dist/crypto/SecureRandom.js.map +1 -0
- package/dist/crypto/Signature.d.ts +449 -0
- package/dist/crypto/Signature.d.ts.map +1 -0
- package/dist/crypto/Signature.js +484 -0
- package/dist/crypto/Signature.js.map +1 -0
- package/dist/crypto/WebCrypto.d.ts +80 -0
- package/dist/crypto/WebCrypto.d.ts.map +1 -0
- package/dist/crypto/WebCrypto.js +63 -0
- package/dist/crypto/WebCrypto.js.map +1 -0
- package/dist/crypto/index.d.ts +65 -0
- package/dist/crypto/index.d.ts.map +1 -0
- package/dist/crypto/index.js +66 -0
- package/dist/crypto/index.js.map +1 -0
- package/dist/crypto/internal/asymmetric.d.ts +2 -0
- package/dist/crypto/internal/asymmetric.d.ts.map +1 -0
- package/dist/crypto/internal/asymmetric.js +210 -0
- package/dist/crypto/internal/asymmetric.js.map +1 -0
- package/dist/crypto/internal/chacha.d.ts +46 -0
- package/dist/crypto/internal/chacha.d.ts.map +1 -0
- package/dist/crypto/internal/chacha.js +885 -0
- package/dist/crypto/internal/chacha.js.map +1 -0
- package/dist/crypto/internal/der.d.ts +6 -0
- package/dist/crypto/internal/der.d.ts.map +1 -0
- package/dist/crypto/internal/der.js +86 -0
- package/dist/crypto/internal/der.js.map +1 -0
- package/dist/crypto/internal/digest.d.ts +2 -0
- package/dist/crypto/internal/digest.d.ts.map +1 -0
- package/dist/crypto/internal/digest.js +15 -0
- package/dist/crypto/internal/digest.js.map +1 -0
- package/dist/crypto/internal/key.d.ts +2 -0
- package/dist/crypto/internal/key.d.ts.map +1 -0
- package/dist/crypto/internal/key.js +171 -0
- package/dist/crypto/internal/key.js.map +1 -0
- package/dist/crypto/internal/md5.d.ts +39 -0
- package/dist/crypto/internal/md5.d.ts.map +1 -0
- package/dist/crypto/internal/md5.js +179 -0
- package/dist/crypto/internal/md5.js.map +1 -0
- package/dist/crypto/internal/webCrypto.d.ts +2 -0
- package/dist/crypto/internal/webCrypto.d.ts.map +1 -0
- package/dist/crypto/internal/webCrypto.js +111 -0
- package/dist/crypto/internal/webCrypto.js.map +1 -0
- package/dist/encoding/Base64Url.d.ts.map +1 -1
- package/dist/encoding/Base64Url.js +29 -5
- package/dist/encoding/Base64Url.js.map +1 -1
- package/dist/encoding/Csv.d.ts +608 -0
- package/dist/encoding/Csv.d.ts.map +1 -0
- package/dist/encoding/Csv.js +718 -0
- package/dist/encoding/Csv.js.map +1 -0
- package/dist/encoding/Hex.d.ts +3 -2
- package/dist/encoding/Hex.d.ts.map +1 -1
- package/dist/encoding/Hex.js +3 -2
- package/dist/encoding/Hex.js.map +1 -1
- package/dist/encoding/Ndjson.d.ts +5 -4
- package/dist/encoding/Ndjson.d.ts.map +1 -1
- package/dist/encoding/Ndjson.js +6 -5
- package/dist/encoding/Ndjson.js.map +1 -1
- package/dist/encoding/SchemaBinary.d.ts.map +1 -1
- package/dist/encoding/SchemaBinary.js +42 -4
- package/dist/encoding/SchemaBinary.js.map +1 -1
- package/dist/encoding/Sse.d.ts +3 -1
- package/dist/encoding/Sse.d.ts.map +1 -1
- package/dist/encoding/Sse.js +5 -3
- package/dist/encoding/Sse.js.map +1 -1
- package/dist/encoding/Toml.d.ts +17 -3
- package/dist/encoding/Toml.d.ts.map +1 -1
- package/dist/encoding/Toml.js +104 -16
- package/dist/encoding/Toml.js.map +1 -1
- package/dist/encoding/Yaml.d.ts +8 -1
- package/dist/encoding/Yaml.d.ts.map +1 -1
- package/dist/encoding/Yaml.js +54 -18
- package/dist/encoding/Yaml.js.map +1 -1
- package/dist/encoding/index.d.ts +5 -0
- package/dist/encoding/index.d.ts.map +1 -1
- package/dist/encoding/index.js +5 -0
- package/dist/encoding/index.js.map +1 -1
- package/dist/eventlog/EventJournal.d.ts.map +1 -1
- package/dist/eventlog/EventJournal.js +6 -3
- package/dist/eventlog/EventJournal.js.map +1 -1
- package/dist/eventlog/EventLog.d.ts +126 -4
- package/dist/eventlog/EventLog.d.ts.map +1 -1
- package/dist/eventlog/EventLog.js +207 -12
- package/dist/eventlog/EventLog.js.map +1 -1
- package/dist/eventlog/EventLogEncryption.d.ts +41 -4
- package/dist/eventlog/EventLogEncryption.d.ts.map +1 -1
- package/dist/eventlog/EventLogEncryption.js +83 -64
- package/dist/eventlog/EventLogEncryption.js.map +1 -1
- package/dist/eventlog/EventLogMessage.d.ts +279 -0
- package/dist/eventlog/EventLogMessage.d.ts.map +1 -1
- package/dist/eventlog/EventLogMessage.js +217 -1
- package/dist/eventlog/EventLogMessage.js.map +1 -1
- package/dist/eventlog/EventLogRemote.d.ts +200 -28
- package/dist/eventlog/EventLogRemote.d.ts.map +1 -1
- package/dist/eventlog/EventLogRemote.js +186 -16
- package/dist/eventlog/EventLogRemote.js.map +1 -1
- package/dist/eventlog/EventLogServer.d.ts +10 -1
- package/dist/eventlog/EventLogServer.d.ts.map +1 -1
- package/dist/eventlog/EventLogServer.js +45 -22
- package/dist/eventlog/EventLogServer.js.map +1 -1
- package/dist/eventlog/EventLogServerEncrypted.d.ts +336 -5
- package/dist/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
- package/dist/eventlog/EventLogServerEncrypted.js +769 -14
- package/dist/eventlog/EventLogServerEncrypted.js.map +1 -1
- package/dist/eventlog/EventLogServerUnencrypted.d.ts +17 -0
- package/dist/eventlog/EventLogServerUnencrypted.d.ts.map +1 -1
- package/dist/eventlog/EventLogServerUnencrypted.js +14 -2
- package/dist/eventlog/EventLogServerUnencrypted.js.map +1 -1
- package/dist/eventlog/EventLogSessionAuth.d.ts +26 -3
- package/dist/eventlog/EventLogSessionAuth.d.ts.map +1 -1
- package/dist/eventlog/EventLogSessionAuth.js +63 -64
- package/dist/eventlog/EventLogSessionAuth.js.map +1 -1
- package/dist/eventlog/EventRow.d.ts +4 -0
- package/dist/eventlog/EventRow.d.ts.map +1 -1
- package/dist/eventlog/EventRow.js +12 -2
- package/dist/eventlog/EventRow.js.map +1 -1
- package/dist/eventlog/SqlEventJournal.js +2 -2
- package/dist/eventlog/SqlEventJournal.js.map +1 -1
- package/dist/eventlog/SqlEventLogServerEncrypted.d.ts +21 -5
- package/dist/eventlog/SqlEventLogServerEncrypted.d.ts.map +1 -1
- package/dist/eventlog/SqlEventLogServerEncrypted.js +1048 -113
- package/dist/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
- package/dist/eventlog/SqlEventLogServerUnencrypted.js +2 -2
- package/dist/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
- package/dist/eventlog/internal/batches.d.ts +12 -0
- package/dist/eventlog/internal/batches.d.ts.map +1 -0
- package/dist/eventlog/internal/batches.js +26 -0
- package/dist/eventlog/internal/batches.js.map +1 -0
- package/dist/eventlog/internal/compaction.d.ts +38 -0
- package/dist/eventlog/internal/compaction.d.ts.map +1 -0
- package/dist/eventlog/internal/compaction.js +33 -0
- package/dist/eventlog/internal/compaction.js.map +1 -0
- package/dist/eventlog/internal/identityRootSecretDerivation.js +66 -67
- package/dist/eventlog/internal/identityRootSecretDerivation.js.map +1 -1
- package/dist/eventlog/internal/remoteCompaction.d.ts +31 -0
- package/dist/eventlog/internal/remoteCompaction.d.ts.map +1 -0
- package/dist/eventlog/internal/remoteCompaction.js +76 -0
- package/dist/eventlog/internal/remoteCompaction.js.map +1 -0
- package/dist/graphql/GraphQLClient.d.ts +3 -1
- package/dist/graphql/GraphQLClient.d.ts.map +1 -1
- package/dist/graphql/GraphQLClient.js.map +1 -1
- package/dist/graphql/GraphQLClientError.d.ts +14 -9
- package/dist/graphql/GraphQLClientError.d.ts.map +1 -1
- package/dist/graphql/GraphQLClientError.js +14 -21
- package/dist/graphql/GraphQLClientError.js.map +1 -1
- package/dist/graphql/GraphQLProtocol.d.ts +12 -3
- package/dist/graphql/GraphQLProtocol.d.ts.map +1 -1
- package/dist/graphql/GraphQLProtocol.js +4 -1
- package/dist/graphql/GraphQLProtocol.js.map +1 -1
- package/dist/http/Cookies.d.ts +172 -0
- package/dist/http/Cookies.d.ts.map +1 -1
- package/dist/http/Cookies.js +143 -1
- package/dist/http/Cookies.js.map +1 -1
- package/dist/http/FetchHttpClient.d.ts +26 -2
- package/dist/http/FetchHttpClient.d.ts.map +1 -1
- package/dist/http/FetchHttpClient.js +78 -15
- package/dist/http/FetchHttpClient.js.map +1 -1
- package/dist/http/HttpClient.d.ts +268 -15
- package/dist/http/HttpClient.d.ts.map +1 -1
- package/dist/http/HttpClient.js +140 -7
- package/dist/http/HttpClient.js.map +1 -1
- package/dist/http/HttpClientRequest.d.ts +9 -5
- package/dist/http/HttpClientRequest.d.ts.map +1 -1
- package/dist/http/HttpClientRequest.js +2 -3
- package/dist/http/HttpClientRequest.js.map +1 -1
- package/dist/http/HttpClientResponse.d.ts.map +1 -1
- package/dist/http/HttpClientResponse.js +3 -2
- package/dist/http/HttpClientResponse.js.map +1 -1
- package/dist/http/HttpMethod.d.ts +7 -1
- package/dist/http/HttpMethod.d.ts.map +1 -1
- package/dist/http/HttpMethod.js +3 -8
- package/dist/http/HttpMethod.js.map +1 -1
- package/dist/http/HttpServerRequest.d.ts +5 -2
- package/dist/http/HttpServerRequest.d.ts.map +1 -1
- package/dist/http/HttpServerRequest.js +44 -39
- package/dist/http/HttpServerRequest.js.map +1 -1
- package/dist/http/HttpServerResponse.d.ts.map +1 -1
- package/dist/http/HttpServerResponse.js +3 -2
- package/dist/http/HttpServerResponse.js.map +1 -1
- package/dist/http/HttpTraceContext.d.ts +2 -1
- package/dist/http/HttpTraceContext.d.ts.map +1 -1
- package/dist/http/HttpTraceContext.js +7 -5
- package/dist/http/HttpTraceContext.js.map +1 -1
- package/dist/http/ProblemDetails.d.ts +96 -0
- package/dist/http/ProblemDetails.d.ts.map +1 -0
- package/dist/http/ProblemDetails.js +98 -0
- package/dist/http/ProblemDetails.js.map +1 -0
- package/dist/http/index.d.ts +5 -0
- package/dist/http/index.d.ts.map +1 -1
- package/dist/http/index.js +5 -0
- package/dist/http/index.js.map +1 -1
- package/dist/http/internal/decompression.js +3 -2
- package/dist/http/internal/decompression.js.map +1 -1
- package/dist/http/internal/mimeTypes.d.ts +4 -1
- package/dist/http/internal/mimeTypes.d.ts.map +1 -1
- package/dist/http/internal/mimeTypes.js +4 -1
- package/dist/http/internal/mimeTypes.js.map +1 -1
- package/dist/http/internal/urlParams.js +8 -0
- package/dist/http/internal/urlParams.js.map +1 -1
- package/dist/http-api/HttpApiBuilder.js +19 -5
- package/dist/http-api/HttpApiBuilder.js.map +1 -1
- package/dist/http-api/HttpApiClient.d.ts +63 -0
- package/dist/http-api/HttpApiClient.d.ts.map +1 -1
- package/dist/http-api/HttpApiClient.js +51 -0
- package/dist/http-api/HttpApiClient.js.map +1 -1
- package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
- package/dist/http-api/HttpApiEndpoint.js +14 -5
- package/dist/http-api/HttpApiEndpoint.js.map +1 -1
- package/dist/http-api/HttpApiError.d.ts +185 -13
- package/dist/http-api/HttpApiError.d.ts.map +1 -1
- package/dist/http-api/HttpApiError.js +128 -0
- package/dist/http-api/HttpApiError.js.map +1 -1
- package/dist/http-api/HttpApiMiddleware.d.ts +64 -17
- package/dist/http-api/HttpApiMiddleware.d.ts.map +1 -1
- package/dist/http-api/HttpApiMiddleware.js +85 -1
- package/dist/http-api/HttpApiMiddleware.js.map +1 -1
- package/dist/http-api/HttpApiSchema.d.ts +76 -14
- package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
- package/dist/http-api/HttpApiSchema.js +54 -1
- package/dist/http-api/HttpApiSchema.js.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/internal/dateTime.js +49 -24
- package/dist/internal/dateTime.js.map +1 -1
- package/dist/internal/effect.js +35 -14
- package/dist/internal/effect.js.map +1 -1
- package/dist/internal/glob.d.ts +2 -0
- package/dist/internal/glob.d.ts.map +1 -0
- package/dist/internal/glob.js +808 -0
- package/dist/internal/glob.js.map +1 -0
- package/dist/internal/graphql.js +21 -7
- package/dist/internal/graphql.js.map +1 -1
- package/dist/internal/graphqlHeaders.d.ts +7 -0
- package/dist/internal/graphqlHeaders.d.ts.map +1 -1
- package/dist/internal/graphqlHeaders.js +11 -0
- package/dist/internal/graphqlHeaders.js.map +1 -1
- package/dist/internal/matcher.js +10 -0
- package/dist/internal/matcher.js.map +1 -1
- package/dist/internal/persistence.js +9 -0
- package/dist/internal/persistence.js.map +1 -1
- package/dist/internal/rcRef.js +4 -1
- package/dist/internal/rcRef.js.map +1 -1
- package/dist/internal/request.js +29 -42
- package/dist/internal/request.js.map +1 -1
- package/dist/internal/schema/fromJsonSchemaDocument.js +7 -8
- package/dist/internal/schema/fromJsonSchemaDocument.js.map +1 -1
- package/dist/internal/schema/toCodeDocument.js +6 -3
- package/dist/internal/schema/toCodeDocument.js.map +1 -1
- package/dist/internal/trie.js +42 -13
- package/dist/internal/trie.js.map +1 -1
- package/dist/internal/ulid.js +41 -0
- package/dist/internal/ulid.js.map +1 -1
- package/dist/internal/uuid.js +52 -8
- package/dist/internal/uuid.js.map +1 -1
- package/dist/internal/version.js +1 -1
- package/dist/jose/JoseError.d.ts +285 -0
- package/dist/jose/JoseError.d.ts.map +1 -0
- package/dist/jose/JoseError.js +269 -0
- package/dist/jose/JoseError.js.map +1 -0
- package/dist/jose/Jwe.d.ts +128 -0
- package/dist/jose/Jwe.d.ts.map +1 -0
- package/dist/jose/Jwe.js +134 -0
- package/dist/jose/Jwe.js.map +1 -0
- package/dist/jose/Jwk.d.ts +597 -0
- package/dist/jose/Jwk.d.ts.map +1 -0
- package/dist/jose/Jwk.js +503 -0
- package/dist/jose/Jwk.js.map +1 -0
- package/dist/jose/Jwks.d.ts +236 -0
- package/dist/jose/Jwks.d.ts.map +1 -0
- package/dist/jose/Jwks.js +306 -0
- package/dist/jose/Jwks.js.map +1 -0
- package/dist/jose/Jws.d.ts +177 -0
- package/dist/jose/Jws.d.ts.map +1 -0
- package/dist/jose/Jws.js +183 -0
- package/dist/jose/Jws.js.map +1 -0
- package/dist/jose/Jwt.d.ts +270 -0
- package/dist/jose/Jwt.d.ts.map +1 -0
- package/dist/jose/Jwt.js +293 -0
- package/dist/jose/Jwt.js.map +1 -0
- package/dist/jose/index.d.ts +51 -0
- package/dist/jose/index.d.ts.map +1 -0
- package/dist/jose/index.js +52 -0
- package/dist/jose/index.js.map +1 -0
- package/dist/jose/internal/compact.d.ts +2 -0
- package/dist/jose/internal/compact.d.ts.map +1 -0
- package/dist/jose/internal/compact.js +179 -0
- package/dist/jose/internal/compact.js.map +1 -0
- package/dist/net/Host.d.ts.map +1 -1
- package/dist/net/Host.js +5 -10
- package/dist/net/Host.js.map +1 -1
- package/dist/observability/Otlp.d.ts +15 -4
- package/dist/observability/Otlp.d.ts.map +1 -1
- package/dist/observability/Otlp.js +10 -0
- package/dist/observability/Otlp.js.map +1 -1
- package/dist/observability/OtlpResource.d.ts +7 -0
- package/dist/observability/OtlpResource.d.ts.map +1 -1
- package/dist/observability/OtlpResource.js +11 -1
- package/dist/observability/OtlpResource.js.map +1 -1
- package/dist/observability/OtlpSerialization.d.ts +1 -1
- package/dist/observability/OtlpSerialization.d.ts.map +1 -1
- package/dist/observability/OtlpSerialization.js +10 -4
- package/dist/observability/OtlpSerialization.js.map +1 -1
- package/dist/observability/internal/otlpProtobuf.js +3 -3
- package/dist/observability/internal/otlpProtobuf.js.map +1 -1
- package/dist/observability/internal/protobuf.js +6 -0
- package/dist/observability/internal/protobuf.js.map +1 -1
- package/dist/persistence/CircuitBreaker.d.ts +98 -38
- package/dist/persistence/CircuitBreaker.d.ts.map +1 -1
- package/dist/persistence/CircuitBreaker.js +67 -29
- package/dist/persistence/CircuitBreaker.js.map +1 -1
- package/dist/persistence/KeyValueStore.d.ts +47 -2
- package/dist/persistence/KeyValueStore.d.ts.map +1 -1
- package/dist/persistence/KeyValueStore.js +129 -18
- package/dist/persistence/KeyValueStore.js.map +1 -1
- package/dist/persistence/PersistedQueue.d.ts +9 -0
- package/dist/persistence/PersistedQueue.d.ts.map +1 -1
- package/dist/persistence/PersistedQueue.js +94 -52
- package/dist/persistence/PersistedQueue.js.map +1 -1
- package/dist/persistence/Persistence.d.ts +10 -4
- package/dist/persistence/Persistence.d.ts.map +1 -1
- package/dist/persistence/Persistence.js +18 -11
- package/dist/persistence/Persistence.js.map +1 -1
- package/dist/persistence/RateLimiter.d.ts +8 -0
- package/dist/persistence/RateLimiter.d.ts.map +1 -1
- package/dist/persistence/RateLimiter.js +63 -12
- package/dist/persistence/RateLimiter.js.map +1 -1
- package/dist/persistence/index.d.ts +1 -1
- package/dist/persistence/index.js +1 -1
- package/dist/process/ChildProcess.d.ts +207 -67
- package/dist/process/ChildProcess.d.ts.map +1 -1
- package/dist/process/ChildProcess.js +56 -158
- package/dist/process/ChildProcess.js.map +1 -1
- package/dist/process/ChildProcessSpawner.d.ts +5 -0
- package/dist/process/ChildProcessSpawner.d.ts.map +1 -1
- package/dist/process/ChildProcessSpawner.js.map +1 -1
- package/dist/process/CommandLine.d.ts +294 -0
- package/dist/process/CommandLine.d.ts.map +1 -0
- package/dist/process/CommandLine.js +481 -0
- package/dist/process/CommandLine.js.map +1 -0
- package/dist/process/index.d.ts +5 -0
- package/dist/process/index.d.ts.map +1 -1
- package/dist/process/index.js +5 -0
- package/dist/process/index.js.map +1 -1
- package/dist/reactivity/Atom.d.ts +2 -1
- package/dist/reactivity/Atom.d.ts.map +1 -1
- package/dist/reactivity/Atom.js +3 -4
- package/dist/reactivity/Atom.js.map +1 -1
- package/dist/reactivity/AtomRegistry.js +17 -7
- package/dist/reactivity/AtomRegistry.js.map +1 -1
- package/dist/rpc/Rpc.d.ts +1 -1
- package/dist/rpc/Rpc.d.ts.map +1 -1
- package/dist/rpc/Rpc.js.map +1 -1
- package/dist/rpc/RpcClient.d.ts +28 -1
- package/dist/rpc/RpcClient.d.ts.map +1 -1
- package/dist/rpc/RpcClient.js +78 -27
- package/dist/rpc/RpcClient.js.map +1 -1
- package/dist/rpc/RpcMessage.d.ts +13 -3
- package/dist/rpc/RpcMessage.d.ts.map +1 -1
- package/dist/rpc/RpcMessage.js +1 -0
- package/dist/rpc/RpcMessage.js.map +1 -1
- package/dist/rpc/RpcSerialization.d.ts.map +1 -1
- package/dist/rpc/RpcSerialization.js +6 -0
- package/dist/rpc/RpcSerialization.js.map +1 -1
- package/dist/rpc/RpcServer.d.ts +31 -0
- package/dist/rpc/RpcServer.d.ts.map +1 -1
- package/dist/rpc/RpcServer.js +139 -66
- package/dist/rpc/RpcServer.js.map +1 -1
- package/dist/schema/Model.d.ts +14 -0
- package/dist/schema/Model.d.ts.map +1 -1
- package/dist/schema/Model.js +18 -3
- package/dist/schema/Model.js.map +1 -1
- package/dist/sql/Migrator.d.ts +9 -20
- package/dist/sql/Migrator.d.ts.map +1 -1
- package/dist/sql/Migrator.js +20 -53
- package/dist/sql/Migrator.js.map +1 -1
- package/dist/sql/MigratorFileSystem.d.ts +21 -0
- package/dist/sql/MigratorFileSystem.d.ts.map +1 -0
- package/dist/sql/MigratorFileSystem.js +57 -0
- package/dist/sql/MigratorFileSystem.js.map +1 -0
- package/dist/sql/SqlClient.d.ts +38 -3
- package/dist/sql/SqlClient.d.ts.map +1 -1
- package/dist/sql/SqlClient.js +9 -12
- package/dist/sql/SqlClient.js.map +1 -1
- package/dist/sql/Statement.d.ts +61 -9
- package/dist/sql/Statement.d.ts.map +1 -1
- package/dist/sql/Statement.js +24 -33
- package/dist/sql/Statement.js.map +1 -1
- package/dist/sql/index.js +1 -1
- package/dist/testing/index.d.ts +0 -5
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +0 -5
- package/dist/testing/index.js.map +1 -1
- package/dist/workflow/Workflow.d.ts +4 -0
- package/dist/workflow/Workflow.d.ts.map +1 -1
- package/dist/workflow/Workflow.js.map +1 -1
- package/dist/workflow/WorkflowEngine.d.ts.map +1 -1
- package/dist/workflow/WorkflowEngine.js +5 -0
- package/dist/workflow/WorkflowEngine.js.map +1 -1
- package/dist/workflow/internal/crypto.js +9 -8
- package/dist/workflow/internal/crypto.js.map +1 -1
- package/package.json +7 -1
- package/src/BigDecimal.ts +173 -16
- package/src/Channel.ts +17 -11
- package/src/Config.ts +7 -1
- package/src/Context.ts +34 -10
- package/src/Cron.ts +178 -29
- package/src/Duration.ts +140 -0
- package/src/Effect.ts +914 -85
- package/src/Equal.ts +3 -3
- package/src/FileSystem.ts +65 -4
- package/src/Glob.ts +205 -0
- package/src/Hash.ts +5 -4
- package/src/Iterable.ts +8 -5
- package/src/Match.ts +127 -0
- package/src/Path.ts +6 -1
- package/src/Pool.ts +75 -16
- package/src/Random.ts +3 -3
- package/src/RcMap.ts +5 -1
- package/src/Schedule.ts +26 -3
- package/src/Schema.ts +1191 -63
- package/src/SchemaGetter.ts +27 -11
- package/src/SchemaRepresentation.ts +23 -2
- package/src/SchemaTransformation.ts +10 -5
- package/src/ScopedCache.ts +5 -9
- package/src/Semaphore.ts +141 -0
- package/src/Stream.ts +15 -6
- package/src/Terminal.ts +19 -1
- package/src/ai/AiError.ts +56 -80
- package/src/ai/Decision.ts +257 -6
- package/src/ai/DecisionModel.ts +171 -28
- package/src/ai/McpClient.ts +488 -91
- package/src/ai/McpSchema.ts +119 -0
- package/src/ai/McpServer.ts +1525 -319
- package/src/ai/McpTest.ts +380 -0
- package/src/ai/Prompt.ts +16 -11
- package/src/ai/Response.ts +2 -22
- package/src/ai/Tool.ts +32 -18
- package/src/ai/index.ts +6 -0
- package/src/ai/internal/mcpCore.ts +243 -56
- package/src/ai/internal/mcpProtocol/v2024_11_05.ts +7 -8
- package/src/ai/internal/mcpProtocol/v2025_03_26.ts +7 -8
- package/src/ai/internal/mcpProtocol/v2025_06_18.ts +7 -8
- package/src/ai/internal/mcpProtocol/v2025_11_25.ts +7 -8
- package/src/ai/internal/mcpProtocol/v2026_07_28.ts +56 -17
- package/src/ai/internal/mcpProtocol.ts +44 -0
- package/src/ai/internal/mcpRuntime.ts +15 -8
- package/src/ai/internal/mcpSkills.ts +480 -0
- package/src/ai/internal/mcpStatefulRuntime.ts +14 -2
- package/src/cli/Argument.ts +6 -0
- package/src/cli/CliOutput.ts +117 -49
- package/src/cli/Command.ts +23 -0
- package/src/cli/Flag.ts +107 -0
- package/src/cli/HelpDoc.ts +18 -1
- package/src/cli/Param.ts +6 -0
- package/src/cli/Primitive.ts +16 -1
- package/src/cli/Prompt.ts +1 -0
- package/src/cli/internal/help.ts +21 -9
- package/src/cluster/ClusterWorkflowEngine.ts +22 -8
- package/src/cluster/Reply.ts +1 -1
- package/src/cluster/Sharding.ts +96 -26
- package/src/cluster/ShardingConfig.ts +41 -3
- package/src/cluster/SingleRunner.ts +3 -3
- package/src/cluster/SqlMessageStorage.ts +49 -17
- package/src/cluster/SqlRunnerStorage.ts +37 -27
- package/src/cluster/internal/entityManager.ts +24 -10
- package/src/crypto/Aead.ts +517 -0
- package/src/crypto/Cipher.ts +326 -0
- package/src/crypto/CryptoError.ts +242 -0
- package/src/crypto/Digest.ts +167 -0
- package/src/crypto/Kdf.ts +315 -0
- package/src/crypto/KeyAgreement.ts +489 -0
- package/src/crypto/KeyFormat.ts +741 -0
- package/src/crypto/KeyWrap.ts +639 -0
- package/src/crypto/Mac.ts +386 -0
- package/src/crypto/SecureRandom.ts +459 -0
- package/src/crypto/Signature.ts +673 -0
- package/src/crypto/WebCrypto.ts +84 -0
- package/src/crypto/index.ts +78 -0
- package/src/crypto/internal/asymmetric.ts +330 -0
- package/src/crypto/internal/chacha.ts +1088 -0
- package/src/crypto/internal/der.ts +110 -0
- package/src/crypto/internal/digest.ts +16 -0
- package/src/crypto/internal/key.ts +242 -0
- package/src/crypto/internal/md5.ts +170 -0
- package/src/crypto/internal/webCrypto.ts +150 -0
- package/src/encoding/Base64Url.ts +32 -5
- package/src/encoding/Csv.ts +1298 -0
- package/src/encoding/Hex.ts +3 -2
- package/src/encoding/Ndjson.ts +6 -5
- package/src/encoding/SchemaBinary.ts +40 -4
- package/src/encoding/Sse.ts +5 -3
- package/src/encoding/Toml.ts +85 -20
- package/src/encoding/Yaml.ts +61 -18
- package/src/encoding/index.ts +6 -0
- package/src/eventlog/EventJournal.ts +4 -3
- package/src/eventlog/EventLog.ts +347 -15
- package/src/eventlog/EventLogEncryption.ts +118 -110
- package/src/eventlog/EventLogMessage.ts +273 -1
- package/src/eventlog/EventLogRemote.ts +367 -23
- package/src/eventlog/EventLogServer.ts +54 -20
- package/src/eventlog/EventLogServerEncrypted.ts +1135 -67
- package/src/eventlog/EventLogServerUnencrypted.ts +19 -2
- package/src/eventlog/EventLogSessionAuth.ts +82 -70
- package/src/eventlog/EventRow.ts +12 -3
- package/src/eventlog/SqlEventJournal.ts +2 -2
- package/src/eventlog/SqlEventLogServerEncrypted.ts +1244 -136
- package/src/eventlog/SqlEventLogServerUnencrypted.ts +2 -2
- package/src/eventlog/internal/batches.ts +30 -0
- package/src/eventlog/internal/compaction.ts +64 -0
- package/src/eventlog/internal/identityRootSecretDerivation.ts +93 -123
- package/src/eventlog/internal/remoteCompaction.ts +92 -0
- package/src/graphql/GraphQLClient.ts +3 -1
- package/src/graphql/GraphQLClientError.ts +15 -22
- package/src/graphql/GraphQLProtocol.ts +12 -3
- package/src/http/Cookies.ts +281 -1
- package/src/http/FetchHttpClient.ts +88 -16
- package/src/http/HttpClient.ts +299 -33
- package/src/http/HttpClientRequest.ts +12 -9
- package/src/http/HttpClientResponse.ts +3 -2
- package/src/http/HttpMethod.ts +10 -2
- package/src/http/HttpServerRequest.ts +76 -53
- package/src/http/HttpServerResponse.ts +3 -2
- package/src/http/HttpTraceContext.ts +7 -4
- package/src/http/ProblemDetails.ts +149 -0
- package/src/http/index.ts +6 -0
- package/src/http/internal/decompression.ts +4 -4
- package/src/http/internal/mimeTypes.ts +4 -1
- package/src/http/internal/urlParams.ts +8 -0
- package/src/http-api/HttpApiBuilder.ts +24 -12
- package/src/http-api/HttpApiClient.ts +67 -1
- package/src/http-api/HttpApiEndpoint.ts +14 -5
- package/src/http-api/HttpApiError.ts +250 -0
- package/src/http-api/HttpApiMiddleware.ts +95 -1
- package/src/http-api/HttpApiSchema.ts +106 -15
- package/src/index.ts +6 -6
- package/src/internal/dateTime.ts +54 -24
- package/src/internal/effect.ts +40 -18
- package/src/internal/glob.ts +952 -0
- package/src/internal/graphql.ts +27 -9
- package/src/internal/graphqlHeaders.ts +13 -0
- package/src/internal/matcher.ts +17 -0
- package/src/internal/persistence.ts +11 -0
- package/src/internal/rcRef.ts +4 -1
- package/src/internal/request.ts +51 -58
- package/src/internal/schema/fromJsonSchemaDocument.ts +11 -10
- package/src/internal/schema/toCodeDocument.ts +7 -3
- package/src/internal/trie.ts +43 -14
- package/src/internal/ulid.ts +44 -0
- package/src/internal/uuid.ts +57 -16
- package/src/internal/version.ts +1 -1
- package/src/jose/JoseError.ts +329 -0
- package/src/jose/Jwe.ts +196 -0
- package/src/jose/Jwk.ts +777 -0
- package/src/jose/Jwks.ts +418 -0
- package/src/jose/Jws.ts +312 -0
- package/src/jose/Jwt.ts +493 -0
- package/src/jose/index.ts +58 -0
- package/src/jose/internal/compact.ts +195 -0
- package/src/net/Host.ts +5 -10
- package/src/observability/Otlp.ts +21 -4
- package/src/observability/OtlpResource.ts +9 -1
- package/src/observability/OtlpSerialization.ts +13 -5
- package/src/observability/internal/otlpProtobuf.ts +6 -6
- package/src/observability/internal/protobuf.ts +10 -0
- package/src/persistence/CircuitBreaker.ts +113 -48
- package/src/persistence/KeyValueStore.ts +219 -22
- package/src/persistence/PersistedQueue.ts +128 -59
- package/src/persistence/Persistence.ts +20 -13
- package/src/persistence/RateLimiter.ts +84 -15
- package/src/persistence/index.ts +1 -1
- package/src/process/ChildProcess.ts +255 -260
- package/src/process/ChildProcessSpawner.ts +5 -0
- package/src/process/CommandLine.ts +630 -0
- package/src/process/index.ts +6 -0
- package/src/reactivity/Atom.ts +5 -5
- package/src/reactivity/AtomRegistry.ts +20 -9
- package/src/rpc/Rpc.ts +3 -1
- package/src/rpc/RpcClient.ts +94 -38
- package/src/rpc/RpcMessage.ts +13 -3
- package/src/rpc/RpcSerialization.ts +3 -0
- package/src/rpc/RpcServer.ts +176 -78
- package/src/schema/Model.ts +26 -3
- package/src/sql/Migrator.ts +38 -80
- package/src/sql/MigratorFileSystem.ts +71 -0
- package/src/sql/SqlClient.ts +45 -24
- package/src/sql/Statement.ts +60 -29
- package/src/sql/index.ts +1 -1
- package/src/testing/index.ts +0 -6
- package/src/workflow/Workflow.ts +4 -0
- package/src/workflow/WorkflowEngine.ts +5 -0
- package/src/workflow/internal/crypto.ts +15 -11
- package/dist/Crypto.d.ts +0 -244
- package/dist/Crypto.d.ts.map +0 -1
- package/dist/Crypto.js +0 -139
- package/dist/Crypto.js.map +0 -1
- package/dist/testing/TestCrypto.d.ts +0 -73
- package/dist/testing/TestCrypto.d.ts.map +0 -1
- package/dist/testing/TestCrypto.js +0 -87
- package/dist/testing/TestCrypto.js.map +0 -1
- package/src/Crypto.ts +0 -347
- package/src/testing/TestCrypto.ts +0 -94
package/src/cli/Primitive.ts
CHANGED
|
@@ -20,6 +20,7 @@ import { format } from "../Formatter.ts"
|
|
|
20
20
|
import { identity } from "../Function.ts"
|
|
21
21
|
import * as Path_ from "../Path.ts"
|
|
22
22
|
import * as Redacted_ from "../Redacted.ts"
|
|
23
|
+
import * as Result from "../Result.ts"
|
|
23
24
|
import * as Schema from "../Schema.ts"
|
|
24
25
|
import type { Formatter } from "../SchemaIssue.ts"
|
|
25
26
|
import type * as Struct from "../Struct.ts"
|
|
@@ -45,6 +46,7 @@ const TypeId = "~effect/cli/Primitive"
|
|
|
45
46
|
* Layer.succeed(Terminal.Terminal, Terminal.make({
|
|
46
47
|
* columns: Effect.succeed(80),
|
|
47
48
|
* rows: Effect.succeed(24),
|
|
49
|
+
* size: Effect.die("unused"),
|
|
48
50
|
* readInput: Effect.die("unused"),
|
|
49
51
|
* readLine: Effect.die("unused"),
|
|
50
52
|
* display: () => Effect.void
|
|
@@ -157,6 +159,7 @@ const makeSchemaPrimitive = <T>(
|
|
|
157
159
|
* Layer.succeed(Terminal.Terminal, Terminal.make({
|
|
158
160
|
* columns: Effect.succeed(80),
|
|
159
161
|
* rows: Effect.succeed(24),
|
|
162
|
+
* size: Effect.die("unused"),
|
|
160
163
|
* readInput: Effect.die("unused"),
|
|
161
164
|
* readLine: Effect.die("unused"),
|
|
162
165
|
* display: () => Effect.void
|
|
@@ -203,6 +206,7 @@ export const Boolean: Primitive<boolean> = makeSchemaPrimitive(
|
|
|
203
206
|
* Layer.succeed(Terminal.Terminal, Terminal.make({
|
|
204
207
|
* columns: Effect.succeed(80),
|
|
205
208
|
* rows: Effect.succeed(24),
|
|
209
|
+
* size: Effect.die("unused"),
|
|
206
210
|
* readInput: Effect.die("unused"),
|
|
207
211
|
* readLine: Effect.die("unused"),
|
|
208
212
|
* display: () => Effect.void
|
|
@@ -248,6 +252,7 @@ export const Finite: Primitive<number> = makeSchemaPrimitive(
|
|
|
248
252
|
* Layer.succeed(Terminal.Terminal, Terminal.make({
|
|
249
253
|
* columns: Effect.succeed(80),
|
|
250
254
|
* rows: Effect.succeed(24),
|
|
255
|
+
* size: Effect.die("unused"),
|
|
251
256
|
* readInput: Effect.die("unused"),
|
|
252
257
|
* readLine: Effect.die("unused"),
|
|
253
258
|
* display: () => Effect.void
|
|
@@ -293,6 +298,7 @@ export const Int: Primitive<number> = makeSchemaPrimitive(
|
|
|
293
298
|
* Layer.succeed(Terminal.Terminal, Terminal.make({
|
|
294
299
|
* columns: Effect.succeed(80),
|
|
295
300
|
* rows: Effect.succeed(24),
|
|
301
|
+
* size: Effect.die("unused"),
|
|
296
302
|
* readInput: Effect.die("unused"),
|
|
297
303
|
* readLine: Effect.die("unused"),
|
|
298
304
|
* display: () => Effect.void
|
|
@@ -337,6 +343,7 @@ export const Date: Primitive<globalThis.Date> = makeSchemaPrimitive(
|
|
|
337
343
|
* Layer.succeed(Terminal.Terminal, Terminal.make({
|
|
338
344
|
* columns: Effect.succeed(80),
|
|
339
345
|
* rows: Effect.succeed(24),
|
|
346
|
+
* size: Effect.die("unused"),
|
|
340
347
|
* readInput: Effect.die("unused"),
|
|
341
348
|
* readLine: Effect.die("unused"),
|
|
342
349
|
* display: () => Effect.void
|
|
@@ -379,6 +386,7 @@ export const String: Primitive<string> = makePrimitive("String", (value) => Effe
|
|
|
379
386
|
* Layer.succeed(Terminal.Terminal, Terminal.make({
|
|
380
387
|
* columns: Effect.succeed(80),
|
|
381
388
|
* rows: Effect.succeed(24),
|
|
389
|
+
* size: Effect.die("unused"),
|
|
382
390
|
* readInput: Effect.die("unused"),
|
|
383
391
|
* readLine: Effect.die("unused"),
|
|
384
392
|
* display: () => Effect.void
|
|
@@ -470,6 +478,7 @@ export type PathType = "file" | "directory" | "either"
|
|
|
470
478
|
* Layer.succeed(Terminal.Terminal, Terminal.make({
|
|
471
479
|
* columns: Effect.succeed(80),
|
|
472
480
|
* rows: Effect.succeed(24),
|
|
481
|
+
* size: Effect.die("unused"),
|
|
473
482
|
* readInput: Effect.die("unused"),
|
|
474
483
|
* readLine: Effect.die("unused"),
|
|
475
484
|
* display: () => Effect.void
|
|
@@ -560,6 +569,7 @@ export const Path = (
|
|
|
560
569
|
* Layer.succeed(Terminal.Terminal, Terminal.make({
|
|
561
570
|
* columns: Effect.succeed(80),
|
|
562
571
|
* rows: Effect.succeed(24),
|
|
572
|
+
* size: Effect.die("unused"),
|
|
563
573
|
* readInput: Effect.die("unused"),
|
|
564
574
|
* readLine: Effect.die("unused"),
|
|
565
575
|
* display: () => Effect.void
|
|
@@ -608,6 +618,7 @@ export const Redacted: Primitive<Redacted_.Redacted<string>> = makePrimitive(
|
|
|
608
618
|
* Layer.succeed(Terminal.Terminal, Terminal.make({
|
|
609
619
|
* columns: Effect.succeed(80),
|
|
610
620
|
* rows: Effect.succeed(24),
|
|
621
|
+
* size: Effect.die("unused"),
|
|
611
622
|
* readInput: Effect.die("unused"),
|
|
612
623
|
* readLine: Effect.die("unused"),
|
|
613
624
|
* display: () => Effect.void
|
|
@@ -686,7 +697,7 @@ export type FileParseOptions = {
|
|
|
686
697
|
const fileParsers: Record<string, (content: string) => unknown> = {
|
|
687
698
|
ini: (content: string) => Ini.parse(content),
|
|
688
699
|
json: (content: string) => JSON.parse(content),
|
|
689
|
-
toml: (content: string) => Toml.parse(content),
|
|
700
|
+
toml: (content: string) => Result.getOrThrow(Toml.parse(content)),
|
|
690
701
|
yml: (content: string) => Yaml.parse(content),
|
|
691
702
|
yaml: (content: string) => Yaml.parse(content)
|
|
692
703
|
}
|
|
@@ -718,6 +729,7 @@ const fileParsers: Record<string, (content: string) => unknown> = {
|
|
|
718
729
|
* Layer.succeed(Terminal.Terminal, Terminal.make({
|
|
719
730
|
* columns: Effect.succeed(80),
|
|
720
731
|
* rows: Effect.succeed(24),
|
|
732
|
+
* size: Effect.die("unused"),
|
|
721
733
|
* readInput: Effect.die("unused"),
|
|
722
734
|
* readLine: Effect.die("unused"),
|
|
723
735
|
* display: () => Effect.void
|
|
@@ -795,6 +807,7 @@ export type FileSchemaOptions = Struct.Simplify<
|
|
|
795
807
|
* Layer.succeed(Terminal.Terminal, Terminal.make({
|
|
796
808
|
* columns: Effect.succeed(80),
|
|
797
809
|
* rows: Effect.succeed(24),
|
|
810
|
+
* size: Effect.die("unused"),
|
|
798
811
|
* readInput: Effect.die("unused"),
|
|
799
812
|
* readLine: Effect.die("unused"),
|
|
800
813
|
* display: () => Effect.void
|
|
@@ -862,6 +875,7 @@ export const FileSchema = <A>(
|
|
|
862
875
|
* Layer.succeed(Terminal.Terminal, Terminal.make({
|
|
863
876
|
* columns: Effect.succeed(80),
|
|
864
877
|
* rows: Effect.succeed(24),
|
|
878
|
+
* size: Effect.die("unused"),
|
|
865
879
|
* readInput: Effect.die("unused"),
|
|
866
880
|
* readLine: Effect.die("unused"),
|
|
867
881
|
* display: () => Effect.void
|
|
@@ -923,6 +937,7 @@ export const KeyValuePair: Primitive<Record<string, string>> = makePrimitive(
|
|
|
923
937
|
* Layer.succeed(Terminal.Terminal, Terminal.make({
|
|
924
938
|
* columns: Effect.succeed(80),
|
|
925
939
|
* rows: Effect.succeed(24),
|
|
940
|
+
* size: Effect.die("unused"),
|
|
926
941
|
* readInput: Effect.die("unused"),
|
|
927
942
|
* readLine: Effect.die("unused"),
|
|
928
943
|
* display: () => Effect.void
|
package/src/cli/Prompt.ts
CHANGED
|
@@ -791,6 +791,7 @@ export declare namespace All {
|
|
|
791
791
|
* const terminal = Terminal.make({
|
|
792
792
|
* columns: Effect.succeed(80),
|
|
793
793
|
* rows: Effect.succeed(24),
|
|
794
|
+
* size: Effect.die("unused"),
|
|
794
795
|
* readInput: Effect.succeed({} as never),
|
|
795
796
|
* readLine: Effect.die("unused"),
|
|
796
797
|
* display: () => Effect.void
|
package/src/cli/internal/help.ts
CHANGED
|
@@ -96,7 +96,7 @@ const collectDeclaredGlobalFlags = (command: Command.Any): ReadonlyArray<GlobalF
|
|
|
96
96
|
return dedupeGlobalFlags(collected)
|
|
97
97
|
}
|
|
98
98
|
|
|
99
|
-
const
|
|
99
|
+
const getInheritedFlagsForCommandPath = (
|
|
100
100
|
commands: ReadonlyArray<Command.Any>,
|
|
101
101
|
currentFlags: ReadonlyArray<FlagDoc>
|
|
102
102
|
): ReadonlyArray<FlagDoc> => {
|
|
@@ -105,7 +105,7 @@ const getSharedFlagsForCommandPath = (
|
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
const seen = new Set(currentFlags.map((flag) => flag.name))
|
|
108
|
-
const
|
|
108
|
+
const inheritedFlags: Array<FlagDoc> = []
|
|
109
109
|
|
|
110
110
|
for (const ancestor of commands.slice(0, -1)) {
|
|
111
111
|
const ancestorImpl = toImpl(ancestor)
|
|
@@ -116,19 +116,16 @@ const getSharedFlagsForCommandPath = (
|
|
|
116
116
|
if (seen.has(single.name)) {
|
|
117
117
|
continue
|
|
118
118
|
}
|
|
119
|
-
// Hidden ancestor flags are excluded from the shared-flags section
|
|
120
|
-
// of subcommand help, the same way they're excluded from the owning
|
|
121
|
-
// command's own help output.
|
|
122
119
|
if (single.hidden) {
|
|
123
120
|
continue
|
|
124
121
|
}
|
|
125
122
|
seen.add(single.name)
|
|
126
|
-
|
|
123
|
+
inheritedFlags.push(toFlagDoc(single, metadata))
|
|
127
124
|
}
|
|
128
125
|
}
|
|
129
126
|
}
|
|
130
127
|
|
|
131
|
-
return
|
|
128
|
+
return inheritedFlags
|
|
132
129
|
}
|
|
133
130
|
|
|
134
131
|
/**
|
|
@@ -160,7 +157,7 @@ export const getHelpForCommandPath = <Name extends string, Input, E, R, ContextI
|
|
|
160
157
|
|
|
161
158
|
const baseDoc = toImpl(currentCommand).buildHelpDoc(commandPath)
|
|
162
159
|
|
|
163
|
-
const
|
|
160
|
+
const inheritedFlags = getInheritedFlagsForCommandPath(commands, baseDoc.flags)
|
|
164
161
|
|
|
165
162
|
const flags = getGlobalFlagsForCommandPath(command, commandPath, builtIns)
|
|
166
163
|
const globalFlagDocs: Array<FlagDoc> = []
|
|
@@ -179,5 +176,20 @@ export const getHelpForCommandPath = <Name extends string, Input, E, R, ContextI
|
|
|
179
176
|
}
|
|
180
177
|
}
|
|
181
178
|
|
|
182
|
-
|
|
179
|
+
// Globals accumulate along the path, so the deepest declaring scope lists them all.
|
|
180
|
+
let scopeLength = 1
|
|
181
|
+
for (let i = commands.length - 1; i > 0; i--) {
|
|
182
|
+
if (toImpl(commands[i]).globalFlags.length > 0) {
|
|
183
|
+
scopeLength = i + 1
|
|
184
|
+
break
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
return {
|
|
189
|
+
...baseDoc,
|
|
190
|
+
inheritedFlags,
|
|
191
|
+
globalFlags: globalFlagDocs,
|
|
192
|
+
globalFlagsScope: commandPath.slice(0, scopeLength),
|
|
193
|
+
commandPath
|
|
194
|
+
}
|
|
183
195
|
})
|
|
@@ -535,14 +535,15 @@ export const make = Effect.gen(function*() {
|
|
|
535
535
|
if (instance.abandoned) {
|
|
536
536
|
instance.suspended = false
|
|
537
537
|
}
|
|
538
|
+
// Abandoned runs never wake the parent; another owner replays them.
|
|
539
|
+
const resumeParent = parent && !parent.detached && !instance.abandoned
|
|
540
|
+
? ensureSuccess(sendResumeParent(parent, executionId))
|
|
541
|
+
: Effect.void
|
|
538
542
|
if (
|
|
539
543
|
!instance.suspended &&
|
|
540
544
|
!instance.abandoned &&
|
|
541
545
|
!(suspendOnFailure && exit._tag === "Failure")
|
|
542
546
|
) {
|
|
543
|
-
const resumeParent = parent && !parent.detached
|
|
544
|
-
? ensureSuccess(sendResumeParent(parent, executionId))
|
|
545
|
-
: Effect.void
|
|
546
547
|
if (exit._tag === "Success" || !Cause.hasInterruptsOnly(exit.cause)) {
|
|
547
548
|
return resumeParent
|
|
548
549
|
}
|
|
@@ -568,9 +569,13 @@ export const make = Effect.gen(function*() {
|
|
|
568
569
|
}
|
|
569
570
|
instance.suspended = false
|
|
570
571
|
instance.interrupted = true
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
572
|
+
// The interrupt completes the run, so wake the parent
|
|
573
|
+
// to observe it.
|
|
574
|
+
return Effect.ignore(clearClock({ workflow, executionId })).pipe(
|
|
575
|
+
Effect.andThen(resumeParent),
|
|
576
|
+
Effect.andThen(
|
|
577
|
+
Effect.withFiber<void>((fiber) => Effect.interruptible(Fiber.interrupt(fiber)))
|
|
578
|
+
)
|
|
574
579
|
)
|
|
575
580
|
}),
|
|
576
581
|
Effect.orDie
|
|
@@ -760,7 +765,7 @@ export const make = Effect.gen(function*() {
|
|
|
760
765
|
// A pending interrupt replays only to rebuild compensations, so it must
|
|
761
766
|
// not run new activities. Finalizers run once `interrupted` is set.
|
|
762
767
|
if (!instance.interrupted && (yield* interruptPending(instance))) {
|
|
763
|
-
const reply = yield*
|
|
768
|
+
const reply = yield* retryPersistence(requestReply({
|
|
764
769
|
workflow: instance.workflow,
|
|
765
770
|
entityType: `Workflow/${instance.workflow._tag}`,
|
|
766
771
|
executionId: instance.executionId,
|
|
@@ -777,7 +782,7 @@ export const make = Effect.gen(function*() {
|
|
|
777
782
|
if (!activities.has(activityId)) {
|
|
778
783
|
activities.set(activityId, { activity, context: services })
|
|
779
784
|
}
|
|
780
|
-
const result = yield*
|
|
785
|
+
const result = yield* retryPersistence(
|
|
781
786
|
client.activity({
|
|
782
787
|
name: activity.name,
|
|
783
788
|
attempt,
|
|
@@ -917,6 +922,15 @@ const retryPolicy = Schedule.min([
|
|
|
917
922
|
Schedule.spaced("1 minute")
|
|
918
923
|
])
|
|
919
924
|
|
|
925
|
+
// A transient storage failure must not become the workflow result. Requests
|
|
926
|
+
// are saved under a primary key, so a retry after a lost acknowledgement is
|
|
927
|
+
// deduplicated instead of running the activity again.
|
|
928
|
+
const retryPersistence = <A, E extends { readonly _tag: string }, R>(effect: Effect.Effect<A, E, R>) =>
|
|
929
|
+
effect.pipe(
|
|
930
|
+
Effect.retry({ schedule: retryPolicy, while: (e) => e._tag === "PersistenceError" }),
|
|
931
|
+
Effect.orDie
|
|
932
|
+
)
|
|
933
|
+
|
|
920
934
|
// A cluster abandonment means this owner can no longer complete the effect, so
|
|
921
935
|
// retrying it would only wait on a retired run. Re-raise it as an annotated
|
|
922
936
|
// interrupt, so the activation can unwind and its shard can be released.
|
package/src/cluster/Reply.ts
CHANGED
|
@@ -220,7 +220,7 @@ export class Chunk<R extends Rpc.Any> extends Data.TaggedClass("Chunk")<{
|
|
|
220
220
|
* @stability unstable
|
|
221
221
|
* @since 4.0.0
|
|
222
222
|
*/
|
|
223
|
-
static readonly Any = Schema.declare((u): u is Chunk<
|
|
223
|
+
static readonly Any = Schema.declare((u): u is Chunk<Rpc.Any> => isReply(u) && u._tag === "Chunk")
|
|
224
224
|
|
|
225
225
|
/**
|
|
226
226
|
* Transformation between encoded chunk records and `Chunk` instances.
|
package/src/cluster/Sharding.ts
CHANGED
|
@@ -19,7 +19,7 @@ import type { Input } from "../Duration.ts"
|
|
|
19
19
|
import * as Duration from "../Duration.ts"
|
|
20
20
|
import * as Effect from "../Effect.ts"
|
|
21
21
|
import * as Equal from "../Equal.ts"
|
|
22
|
-
import
|
|
22
|
+
import * as Exit from "../Exit.ts"
|
|
23
23
|
import * as Fiber from "../Fiber.ts"
|
|
24
24
|
import * as FiberMap from "../FiberMap.ts"
|
|
25
25
|
import { constant, flow } from "../Function.ts"
|
|
@@ -281,6 +281,9 @@ const make = Effect.gen(function*() {
|
|
|
281
281
|
// shards still held by this runner while their entities stop and their locks
|
|
282
282
|
// are released
|
|
283
283
|
const releasingShards = MutableHashSet.empty<ShardId>()
|
|
284
|
+
// runners that joined after the first assignment, kept out of the hash rings
|
|
285
|
+
// until the healthy set settles (see `runnerJoinDebounce`)
|
|
286
|
+
const pendingRunners = MutableHashSet.empty<Runner>()
|
|
284
287
|
// The releasing gauge reports to the metric registry and attributes the
|
|
285
288
|
// layer was built with.
|
|
286
289
|
const updateReleasingShardsGauge = () =>
|
|
@@ -611,6 +614,13 @@ const make = Effect.gen(function*() {
|
|
|
611
614
|
continue
|
|
612
615
|
}
|
|
613
616
|
|
|
617
|
+
// While joins are pending the assignments are about to change, so take
|
|
618
|
+
// no new shards; otherwise a shard released for a joining runner could
|
|
619
|
+
// be taken here and handed off again. Publishing reopens the latch.
|
|
620
|
+
if (MutableHashSet.size(pendingRunners) > 0) {
|
|
621
|
+
continue
|
|
622
|
+
}
|
|
623
|
+
|
|
614
624
|
// if a shard has been assigned to this runner, we acquire it
|
|
615
625
|
const unacquiredShards = MutableHashSet.empty<ShardId>()
|
|
616
626
|
for (const shardId of selfShards) {
|
|
@@ -635,13 +645,16 @@ const make = Effect.gen(function*() {
|
|
|
635
645
|
Effect.ignore,
|
|
636
646
|
Effect.timeoutOption(shardLockInterval)
|
|
637
647
|
)
|
|
638
|
-
// A forced release can
|
|
639
|
-
//
|
|
648
|
+
// A forced release or a pending join can begin while `acquire` is in
|
|
649
|
+
// flight, so re-check both. Shards locked meanwhile are released
|
|
650
|
+
// without running anything on them.
|
|
640
651
|
const forcedReleasePending = forcedShardReleasePending()
|
|
652
|
+
const joinsPending = MutableHashSet.size(pendingRunners) > 0
|
|
641
653
|
for (const shardId of acquired) {
|
|
642
654
|
if (
|
|
643
655
|
!shardLocksHealthyLatch.isOpen() ||
|
|
644
656
|
forcedReleasePending ||
|
|
657
|
+
joinsPending ||
|
|
645
658
|
MutableHashSet.has(releasingShards, shardId) ||
|
|
646
659
|
!MutableHashSet.has(selfShards, shardId)
|
|
647
660
|
) {
|
|
@@ -1415,10 +1428,33 @@ const make = Effect.gen(function*() {
|
|
|
1415
1428
|
ClusterMetrics.runnersHealthy.updateUnsafe(BigInt(1), Context.empty())
|
|
1416
1429
|
}
|
|
1417
1430
|
|
|
1431
|
+
// Kept outside the loop so a restart after a storage failure does not drop
|
|
1432
|
+
// this state and publish pending joins early.
|
|
1433
|
+
const hashRings = new Map<string, HashRing.HashRing<RunnerAddress>>()
|
|
1434
|
+
let nextRunners = MutableHashMap.empty<Runner, boolean>()
|
|
1435
|
+
const healthyRunners = MutableHashSet.empty<Runner>()
|
|
1436
|
+
const joinDebounce = Duration.toMillis(Duration.fromInputUnsafe(config.runnerJoinDebounce))
|
|
1437
|
+
// when the first pending join and the latest pending change were observed
|
|
1438
|
+
let pendingSince = 0
|
|
1439
|
+
let pendingChangedAt = 0
|
|
1440
|
+
// the initial assignment never waits, even if this runner ends up with no shards
|
|
1441
|
+
let assignmentsPublished = false
|
|
1442
|
+
// stays set until the assignments are actually recomputed
|
|
1443
|
+
let changed = false
|
|
1444
|
+
|
|
1445
|
+
const addToRings = (runner: Runner) => {
|
|
1446
|
+
for (let i = 0; i < runner.groups.length; i++) {
|
|
1447
|
+
const group = runner.groups[i]
|
|
1448
|
+
let ring = hashRings.get(group)
|
|
1449
|
+
if (!ring) {
|
|
1450
|
+
ring = HashRing.make()
|
|
1451
|
+
hashRings.set(group, ring)
|
|
1452
|
+
}
|
|
1453
|
+
HashRing.add(ring, runner.address, { weight: runner.weight })
|
|
1454
|
+
}
|
|
1455
|
+
}
|
|
1456
|
+
|
|
1418
1457
|
yield* Effect.gen(function*() {
|
|
1419
|
-
const hashRings = new Map<string, HashRing.HashRing<RunnerAddress>>()
|
|
1420
|
-
let nextRunners = MutableHashMap.empty<Runner, boolean>()
|
|
1421
|
-
const healthyRunners = MutableHashSet.empty<Runner>()
|
|
1422
1458
|
const withTimeout = Effect.timeout(Duration.seconds(5))
|
|
1423
1459
|
|
|
1424
1460
|
while (true) {
|
|
@@ -1433,7 +1469,7 @@ const make = Effect.gen(function*() {
|
|
|
1433
1469
|
}
|
|
1434
1470
|
|
|
1435
1471
|
const runners = yield* withTimeout(runnerStorage.getRunners)
|
|
1436
|
-
|
|
1472
|
+
const now = clock.currentTimeMillisUnsafe()
|
|
1437
1473
|
for (let i = 0; i < runners.length; i++) {
|
|
1438
1474
|
const [runner, healthy] = runners[i]
|
|
1439
1475
|
MutableHashMap.set(nextRunners, runner, healthy)
|
|
@@ -1445,31 +1481,55 @@ const make = Effect.gen(function*() {
|
|
|
1445
1481
|
}
|
|
1446
1482
|
continue
|
|
1447
1483
|
}
|
|
1448
|
-
changed = true
|
|
1449
1484
|
MutableHashSet.add(healthyRunners, runner)
|
|
1450
1485
|
MutableHashMap.remove(allRunners, runner)
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
if (!ring) {
|
|
1455
|
-
ring = HashRing.make()
|
|
1456
|
-
hashRings.set(group, ring)
|
|
1486
|
+
if (joinDebounce > 0 && assignmentsPublished) {
|
|
1487
|
+
if (MutableHashSet.size(pendingRunners) === 0) {
|
|
1488
|
+
pendingSince = now
|
|
1457
1489
|
}
|
|
1458
|
-
|
|
1490
|
+
pendingChangedAt = now
|
|
1491
|
+
MutableHashSet.add(pendingRunners, runner)
|
|
1492
|
+
continue
|
|
1459
1493
|
}
|
|
1494
|
+
changed = true
|
|
1495
|
+
addToRings(runner)
|
|
1460
1496
|
}
|
|
1461
1497
|
|
|
1462
1498
|
// Remove runners that are no longer present or healthy
|
|
1463
1499
|
MutableHashMap.forEach(allRunners, (_, runner) => {
|
|
1464
|
-
changed = true
|
|
1465
1500
|
MutableHashMap.remove(allRunners, runner)
|
|
1466
1501
|
MutableHashSet.remove(healthyRunners, runner)
|
|
1467
1502
|
runFork(runnersService.onRunnerUnavailable(runner.address))
|
|
1503
|
+
// A pending runner owns no shards, so its departure only restarts the
|
|
1504
|
+
// quiet period instead of publishing the other joins mid-burst.
|
|
1505
|
+
if (MutableHashSet.has(pendingRunners, runner)) {
|
|
1506
|
+
MutableHashSet.remove(pendingRunners, runner)
|
|
1507
|
+
pendingChangedAt = now
|
|
1508
|
+
if (MutableHashSet.size(pendingRunners) === 0) {
|
|
1509
|
+
// let the acquisition loop take the shards it was holding off on
|
|
1510
|
+
activeShardsLatch.openUnsafe()
|
|
1511
|
+
}
|
|
1512
|
+
return
|
|
1513
|
+
}
|
|
1514
|
+
changed = true
|
|
1468
1515
|
for (let i = 0; i < runner.groups.length; i++) {
|
|
1469
1516
|
HashRing.remove(hashRings.get(runner.groups[i])!, runner.address)
|
|
1470
1517
|
}
|
|
1471
1518
|
})
|
|
1472
1519
|
|
|
1520
|
+
// Publish pending joins once the healthy set has settled, the cap is
|
|
1521
|
+
// reached, or the assignments are recomputed anyway.
|
|
1522
|
+
if (
|
|
1523
|
+
MutableHashSet.size(pendingRunners) > 0 &&
|
|
1524
|
+
(changed || now - pendingChangedAt >= joinDebounce || now - pendingSince >= joinDebounce * 4)
|
|
1525
|
+
) {
|
|
1526
|
+
changed = true
|
|
1527
|
+
for (const runner of pendingRunners) {
|
|
1528
|
+
addToRings(runner)
|
|
1529
|
+
}
|
|
1530
|
+
MutableHashSet.clear(pendingRunners)
|
|
1531
|
+
}
|
|
1532
|
+
|
|
1473
1533
|
// swap allRunners and nextRunners
|
|
1474
1534
|
const prevRunners = allRunners
|
|
1475
1535
|
allRunners = nextRunners
|
|
@@ -1483,6 +1543,8 @@ const make = Effect.gen(function*() {
|
|
|
1483
1543
|
|
|
1484
1544
|
// Recompute shard assignments if the set of healthy runners has changed.
|
|
1485
1545
|
if (changed) {
|
|
1546
|
+
changed = false
|
|
1547
|
+
assignmentsPublished = true
|
|
1486
1548
|
MutableHashSet.clear(selfShards)
|
|
1487
1549
|
hashRings.forEach((ring, group) => {
|
|
1488
1550
|
const newAssignments = HashRing.getShards(ring, config.shardsPerGroup)
|
|
@@ -1619,18 +1681,26 @@ const make = Effect.gen(function*() {
|
|
|
1619
1681
|
envelope as any
|
|
1620
1682
|
)
|
|
1621
1683
|
})
|
|
1622
|
-
if (
|
|
1623
|
-
const entry: ClientRequestEntry = {
|
|
1624
|
-
rpc: rpc as any,
|
|
1625
|
-
context: fiber.context,
|
|
1626
|
-
message
|
|
1627
|
-
}
|
|
1628
|
-
clientRequests.set(id, entry)
|
|
1629
|
-
respond = makeClientRespond(entry, client.write)
|
|
1630
|
-
} else {
|
|
1684
|
+
if (options.message.discard === true) {
|
|
1631
1685
|
respond = clientRespondDiscard
|
|
1686
|
+
// a discarded call is acknowledged once its message is sent
|
|
1687
|
+
const requestId = options.message.id
|
|
1688
|
+
return Effect.flatMap(
|
|
1689
|
+
sendOutgoing(message, true),
|
|
1690
|
+
() => client.write({ _tag: "Exit", clientId: 0, requestId, exit: Exit.void as any })
|
|
1691
|
+
)
|
|
1692
|
+
}
|
|
1693
|
+
const entry: ClientRequestEntry = {
|
|
1694
|
+
rpc: rpc as any,
|
|
1695
|
+
context: fiber.context,
|
|
1696
|
+
message
|
|
1632
1697
|
}
|
|
1633
|
-
|
|
1698
|
+
clientRequests.set(id, entry)
|
|
1699
|
+
respond = makeClientRespond(entry, client.write)
|
|
1700
|
+
// A failed send leaves no reply or interrupt to release the entry.
|
|
1701
|
+
// Only drop the local bookkeeping, as the request may have been
|
|
1702
|
+
// persisted.
|
|
1703
|
+
return Effect.tapError(sendOutgoing(message, false), () => Effect.sync(() => clientRequests.delete(id)))
|
|
1634
1704
|
}
|
|
1635
1705
|
case "Ack": {
|
|
1636
1706
|
const requestId = Snowflake.Snowflake(options.message.requestId)
|
|
@@ -82,10 +82,12 @@ export class ShardingConfig extends Context.Service<ShardingConfig, {
|
|
|
82
82
|
/**
|
|
83
83
|
* Shard lock expiration duration.
|
|
84
84
|
*
|
|
85
|
-
* With PostgreSQL
|
|
86
|
-
*
|
|
85
|
+
* With PostgreSQL (14+) or MySQL advisory locks, this also bounds how long a
|
|
86
|
+
* runner that stops refreshing, for example because its process is frozen,
|
|
87
87
|
* keeps its shards: the server ends its idle lock session after this
|
|
88
|
-
* duration, releasing the locks.
|
|
88
|
+
* duration, releasing the locks. On MySQL it is rounded up to whole
|
|
89
|
+
* seconds. Vitess ignores the MySQL session timeout, so behind Vitess the
|
|
90
|
+
* locks stay held until the runner's connection closes.
|
|
89
91
|
*/
|
|
90
92
|
readonly shardLockExpiration: Duration.Input
|
|
91
93
|
/**
|
|
@@ -165,6 +167,37 @@ export class ShardingConfig extends Context.Service<ShardingConfig, {
|
|
|
165
167
|
* assignments.
|
|
166
168
|
*/
|
|
167
169
|
readonly refreshAssignmentsInterval: Duration.Input
|
|
170
|
+
/**
|
|
171
|
+
* How long the healthy runners must stay unchanged before runners that
|
|
172
|
+
* joined are added to shard assignments. A burst of joins, such as a
|
|
173
|
+
* scale-up or a deployment with a large surge, is then published as one
|
|
174
|
+
* assignment and each shard is handed off once instead of once per join.
|
|
175
|
+
* In a rolling update that replaces one runner at a time, each departure is
|
|
176
|
+
* still published immediately, so shards still move at every step.
|
|
177
|
+
*
|
|
178
|
+
* Only joins wait. The initial assignment, departures and unhealthy runners
|
|
179
|
+
* are published immediately, together with any pending joins. A pending
|
|
180
|
+
* runner that leaves has no shards to move, so it only restarts the quiet
|
|
181
|
+
* period.
|
|
182
|
+
*
|
|
183
|
+
* While joins are pending, shards keep running where they are, the new
|
|
184
|
+
* runners stay idle and no runner takes shards it does not already hold.
|
|
185
|
+
* Runners publish on their own polls, so a shard released by one runner can
|
|
186
|
+
* stay unlocked until its new owner publishes, usually within two
|
|
187
|
+
* `refreshAssignmentsInterval`s. A runner that does not observe the joins,
|
|
188
|
+
* for example because it cannot read membership, can still take shards from
|
|
189
|
+
* its outdated assignment and hand them off again, as with `0`.
|
|
190
|
+
*
|
|
191
|
+
* Pending joins are published at most four times this duration after the
|
|
192
|
+
* first one, even if runners keep joining. The quiet period is checked once
|
|
193
|
+
* per `refreshAssignmentsInterval`, so the worst case delay is four times
|
|
194
|
+
* this duration plus one interval, and values shorter than the interval
|
|
195
|
+
* behave like a single quiet poll.
|
|
196
|
+
*
|
|
197
|
+
* Defaults to `0`, which publishes every change immediately. Leave it at
|
|
198
|
+
* `0` for scale-ups driven by load, where idle new runners are costly.
|
|
199
|
+
*/
|
|
200
|
+
readonly runnerJoinDebounce: Duration.Input
|
|
168
201
|
/**
|
|
169
202
|
* The interval to retry a send if EntityNotAssignedToRunner is returned.
|
|
170
203
|
*/
|
|
@@ -213,6 +246,7 @@ export const defaults: ShardingConfig["Service"] = {
|
|
|
213
246
|
entityReplyPollInterval: Duration.millis(200),
|
|
214
247
|
sendRetryInterval: Duration.millis(100),
|
|
215
248
|
refreshAssignmentsInterval: Duration.seconds(3),
|
|
249
|
+
runnerJoinDebounce: Duration.zero,
|
|
216
250
|
runnerHealthCheckInterval: Duration.minutes(1),
|
|
217
251
|
simulateRemoteSerialization: true
|
|
218
252
|
}
|
|
@@ -371,6 +405,10 @@ export const config: Config.Config<ShardingConfig["Service"]> = Config.all({
|
|
|
371
405
|
Config.withDefault(defaults.refreshAssignmentsInterval)
|
|
372
406
|
// Config.withDescription("The interval at which to refresh shard assignments.")
|
|
373
407
|
),
|
|
408
|
+
runnerJoinDebounce: Config.Duration("runnerJoinDebounce").pipe(
|
|
409
|
+
Config.withDefault(defaults.runnerJoinDebounce)
|
|
410
|
+
// Config.withDescription("How long the healthy runners must stay unchanged before joining runners are assigned shards.")
|
|
411
|
+
),
|
|
374
412
|
runnerHealthCheckInterval: Config.Duration("runnerHealthCheckInterval").pipe(
|
|
375
413
|
Config.withDefault(defaults.runnerHealthCheckInterval)
|
|
376
414
|
// Config.withDescription("The interval at which to check for unhealthy runners and report them.")
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import * as Layer from "effect/Layer"
|
|
15
15
|
import type { ConfigError } from "../Config.ts"
|
|
16
|
-
import type * as
|
|
16
|
+
import type * as Digest from "../crypto/Digest.ts"
|
|
17
17
|
import type * as SqlClient from "../sql/SqlClient.ts"
|
|
18
18
|
import type * as MessageStorage from "./MessageStorage.ts"
|
|
19
19
|
import * as RunnerHealth from "./RunnerHealth.ts"
|
|
@@ -44,7 +44,7 @@ import * as SqlRunnerStorage from "./SqlRunnerStorage.ts"
|
|
|
44
44
|
* **Gotchas**
|
|
45
45
|
*
|
|
46
46
|
* - Even when `runnerStorage` is `"memory"`, message storage remains
|
|
47
|
-
* SQL-backed, so callers must still provide `SqlClient` and `
|
|
47
|
+
* SQL-backed, so callers must still provide `SqlClient` and `Digest.Digest`
|
|
48
48
|
* (used to hash over-length message deduplication keys).
|
|
49
49
|
* - Runner communication and runner health are no-op services, so this layer is
|
|
50
50
|
* for single-process use rather than multi-runner coordination.
|
|
@@ -66,7 +66,7 @@ export const layer = (options?: {
|
|
|
66
66
|
| Runners.Runners
|
|
67
67
|
| MessageStorage.MessageStorage,
|
|
68
68
|
ConfigError,
|
|
69
|
-
SqlClient.SqlClient |
|
|
69
|
+
SqlClient.SqlClient | Digest.Digest
|
|
70
70
|
> =>
|
|
71
71
|
Sharding.layer.pipe(
|
|
72
72
|
Layer.provideMerge(Runners.layerNoop),
|