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
|
@@ -521,12 +521,12 @@ export const makeStorage = Effect.fnUntraced(function*(options?: StorageOptions)
|
|
|
521
521
|
primary_key: entry.primaryKey,
|
|
522
522
|
payload: entry.payload
|
|
523
523
|
})
|
|
524
|
-
if (rowsForInsert.length >= insertBatchSize) {
|
|
524
|
+
if (rowsForInsert.length >= insertBatchSize && Arr.isArrayNonEmpty(rowsForInsert)) {
|
|
525
525
|
yield* sql`INSERT INTO ${entriesTableSql} ${sql.insert(rowsForInsert)}`
|
|
526
526
|
rowsForInsert = []
|
|
527
527
|
}
|
|
528
528
|
}
|
|
529
|
-
if (rowsForInsert
|
|
529
|
+
if (Arr.isArrayNonEmpty(rowsForInsert)) {
|
|
530
530
|
yield* sql`INSERT INTO ${entriesTableSql} ${sql.insert(rowsForInsert)}`
|
|
531
531
|
}
|
|
532
532
|
const nextSequence = currentNextSequence + entries.length
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { NonEmptyArray } from "../../Array.ts"
|
|
2
|
+
import type { Entry } from "../EventJournal.ts"
|
|
3
|
+
|
|
4
|
+
/** The most entries a remote batch holds. */
|
|
5
|
+
export const maxBatchEntries = 100
|
|
6
|
+
|
|
7
|
+
/** The most payload bytes a remote batch holds, unless it is a single entry. */
|
|
8
|
+
export const maxBatchPayloadBytes = 256 * 1024
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Packs entries into batches of at most `maxBatchEntries` entries and
|
|
12
|
+
* `maxBatchPayloadBytes` of payload. A larger entry is a batch on its own.
|
|
13
|
+
*/
|
|
14
|
+
export const toBatches = (entries: ReadonlyArray<Entry>): Array<NonEmptyArray<Entry>> => {
|
|
15
|
+
const batches: Array<NonEmptyArray<Entry>> = []
|
|
16
|
+
let current: Array<Entry> = []
|
|
17
|
+
let bytes = 0
|
|
18
|
+
for (const entry of entries) {
|
|
19
|
+
const size = entry.payload.byteLength
|
|
20
|
+
if (current.length > 0 && (current.length === maxBatchEntries || bytes + size > maxBatchPayloadBytes)) {
|
|
21
|
+
batches.push(current as NonEmptyArray<Entry>)
|
|
22
|
+
current = []
|
|
23
|
+
bytes = 0
|
|
24
|
+
}
|
|
25
|
+
current.push(entry)
|
|
26
|
+
bytes += size
|
|
27
|
+
}
|
|
28
|
+
if (current.length > 0) batches.push(current as NonEmptyArray<Entry>)
|
|
29
|
+
return batches
|
|
30
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import * as Effect from "../../Effect.ts"
|
|
2
|
+
import type { StoreId } from "../EventLogMessage.ts"
|
|
3
|
+
|
|
4
|
+
/** Rules and audit logs shared by the memory and SQL compaction storages. */
|
|
5
|
+
|
|
6
|
+
export const hourMillis = 60 * 60 * 1000
|
|
7
|
+
|
|
8
|
+
/** The newest storage-time hour that ended at least `lagMillis` ago. */
|
|
9
|
+
export const lagHour = (now: number, lagMillis: number): number => Math.floor((now - lagMillis) / hourMillis) - 1
|
|
10
|
+
|
|
11
|
+
/** A staged batch's position packs its segment index and its index in the segment. */
|
|
12
|
+
export const positionsPerSegment = 2 ** 20
|
|
13
|
+
export const maxSegments = Math.floor(Number.MAX_SAFE_INTEGER / positionsPerSegment)
|
|
14
|
+
|
|
15
|
+
const service = "EventLogServerEncrypted"
|
|
16
|
+
|
|
17
|
+
export const logCommit = (options: {
|
|
18
|
+
readonly publicKey: string
|
|
19
|
+
readonly storeId: StoreId
|
|
20
|
+
readonly result: "Committed" | "Superseded"
|
|
21
|
+
readonly through: number
|
|
22
|
+
readonly keptCount: number
|
|
23
|
+
readonly activationId: string | undefined
|
|
24
|
+
}): Effect.Effect<void> =>
|
|
25
|
+
Effect.logInfo(
|
|
26
|
+
options.result === "Committed" ? "Committed compaction snapshot" : "Compaction snapshot superseded"
|
|
27
|
+
).pipe(
|
|
28
|
+
Effect.annotateLogs({
|
|
29
|
+
service,
|
|
30
|
+
publicKey: options.publicKey,
|
|
31
|
+
storeId: options.storeId,
|
|
32
|
+
keptCount: options.keptCount,
|
|
33
|
+
through: options.through,
|
|
34
|
+
activationId: options.activationId
|
|
35
|
+
})
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
export const logNoOp = (options: {
|
|
39
|
+
readonly publicKey: string
|
|
40
|
+
readonly storeId: StoreId
|
|
41
|
+
readonly stageId: string
|
|
42
|
+
readonly through: number
|
|
43
|
+
}): Effect.Effect<void> =>
|
|
44
|
+
Effect.logInfo("Committed compaction no-op").pipe(Effect.annotateLogs({ service, ...options }))
|
|
45
|
+
|
|
46
|
+
export const logRollback = (options: {
|
|
47
|
+
readonly publicKey: string
|
|
48
|
+
readonly storeId: StoreId
|
|
49
|
+
readonly activation: { readonly id: string; readonly base: number; readonly keptCount: number | undefined }
|
|
50
|
+
readonly withdrawn: { readonly id: string; readonly base: number; readonly keptCount: number | undefined }
|
|
51
|
+
}): Effect.Effect<void> =>
|
|
52
|
+
Effect.logInfo("Rolled back compaction snapshot").pipe(
|
|
53
|
+
Effect.annotateLogs({
|
|
54
|
+
service,
|
|
55
|
+
publicKey: options.publicKey,
|
|
56
|
+
storeId: options.storeId,
|
|
57
|
+
keptCount: options.activation.keptCount,
|
|
58
|
+
base: options.activation.base,
|
|
59
|
+
activationId: options.activation.id,
|
|
60
|
+
withdrawnActivationId: options.withdrawn.id,
|
|
61
|
+
withdrawnBase: options.withdrawn.base,
|
|
62
|
+
withdrawnKeptCount: options.withdrawn.keptCount
|
|
63
|
+
})
|
|
64
|
+
)
|
|
@@ -1,30 +1,16 @@
|
|
|
1
|
+
import * as Aead from "../../crypto/Aead.ts"
|
|
2
|
+
import * as Digest from "../../crypto/Digest.ts"
|
|
3
|
+
import * as KeyFormat from "../../crypto/KeyFormat.ts"
|
|
4
|
+
import * as SecureRandom from "../../crypto/SecureRandom.ts"
|
|
5
|
+
import * as Signature from "../../crypto/Signature.ts"
|
|
6
|
+
import * as WebCrypto from "../../crypto/WebCrypto.ts"
|
|
1
7
|
import * as Effect from "../../Effect.ts"
|
|
8
|
+
import * as Layer from "../../Layer.ts"
|
|
2
9
|
import * as Redacted from "../../Redacted.ts"
|
|
3
10
|
import type { Identity } from "../EventLog.ts"
|
|
4
11
|
|
|
5
12
|
const textEncoder = new TextEncoder()
|
|
6
13
|
|
|
7
|
-
const Ed25519PublicKeyLength = 32
|
|
8
|
-
|
|
9
|
-
const Ed25519Pkcs8SeedPrefix = Uint8Array.from([
|
|
10
|
-
0x30,
|
|
11
|
-
0x2e,
|
|
12
|
-
0x02,
|
|
13
|
-
0x01,
|
|
14
|
-
0x00,
|
|
15
|
-
0x30,
|
|
16
|
-
0x05,
|
|
17
|
-
0x06,
|
|
18
|
-
0x03,
|
|
19
|
-
0x2b,
|
|
20
|
-
0x65,
|
|
21
|
-
0x70,
|
|
22
|
-
0x04,
|
|
23
|
-
0x22,
|
|
24
|
-
0x04,
|
|
25
|
-
0x20
|
|
26
|
-
])
|
|
27
|
-
|
|
28
14
|
/**
|
|
29
15
|
* @internal
|
|
30
16
|
*/
|
|
@@ -40,124 +26,108 @@ export const SigningDerivationLabelV1 = "effect/eventlog/identity/v1/signing"
|
|
|
40
26
|
*/
|
|
41
27
|
export interface IdentityRootSecretMaterial {
|
|
42
28
|
readonly encryptionKeyMaterial: Uint8Array<ArrayBuffer>
|
|
43
|
-
readonly encryptionKey:
|
|
29
|
+
readonly encryptionKey: Aead.Key<Aead.AesGcm>
|
|
44
30
|
readonly signingPublicKey: Uint8Array<ArrayBuffer>
|
|
31
|
+
/**
|
|
32
|
+
* The PKCS#8 encoding of the Ed25519 signing key.
|
|
33
|
+
*/
|
|
45
34
|
readonly signingPrivateKey: Redacted.Redacted<Uint8Array<ArrayBuffer>>
|
|
46
35
|
}
|
|
47
36
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
for (let i = 0; i < decoded.length; i++) {
|
|
61
|
-
bytes[i] = decoded.charCodeAt(i)
|
|
62
|
-
}
|
|
63
|
-
return bytes
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
const makeEd25519Pkcs8FromSeed = (seed: Uint8Array): Uint8Array<ArrayBuffer> => {
|
|
67
|
-
const key = new Uint8Array(Ed25519Pkcs8SeedPrefix.byteLength + seed.byteLength)
|
|
68
|
-
key.set(Ed25519Pkcs8SeedPrefix, 0)
|
|
69
|
-
key.set(seed, Ed25519Pkcs8SeedPrefix.byteLength)
|
|
70
|
-
return key
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
const deriveSecretBytes = Effect.fnUntraced(function*(options: {
|
|
74
|
-
readonly crypto: Crypto
|
|
75
|
-
readonly rootSecret: Uint8Array
|
|
76
|
-
readonly label: string
|
|
77
|
-
}) {
|
|
78
|
-
const labelBytes = textEncoder.encode(options.label)
|
|
79
|
-
const derivationInput = new Uint8Array(labelBytes.byteLength + 1 + options.rootSecret.byteLength)
|
|
80
|
-
derivationInput.set(labelBytes, 0)
|
|
81
|
-
derivationInput[labelBytes.byteLength] = 0
|
|
82
|
-
derivationInput.set(options.rootSecret, labelBytes.byteLength + 1)
|
|
83
|
-
|
|
84
|
-
const digest = yield* Effect.promise(() => options.crypto.subtle.digest("SHA-256", toArrayBuffer(derivationInput)))
|
|
37
|
+
// The crypto services return fresh arrays over an `ArrayBuffer`.
|
|
38
|
+
const toArrayBufferBytes = (bytes: Uint8Array) => bytes as Uint8Array<ArrayBuffer>
|
|
39
|
+
|
|
40
|
+
// Each secret is SHA-256(label || 0x00 || root secret).
|
|
41
|
+
const deriveSecretBytes = (rootSecret: Uint8Array, label: string): Effect.Effect<Uint8Array, never, Digest.Digest> =>
|
|
42
|
+
Digest.Digest.use((digest) => {
|
|
43
|
+
const labelBytes = textEncoder.encode(label)
|
|
44
|
+
const derivationInput = new Uint8Array(labelBytes.byteLength + 1 + rootSecret.byteLength)
|
|
45
|
+
derivationInput.set(labelBytes, 0)
|
|
46
|
+
derivationInput.set(rootSecret, labelBytes.byteLength + 1)
|
|
47
|
+
return digest.digest(Digest.sha256, derivationInput)
|
|
48
|
+
})
|
|
85
49
|
|
|
86
|
-
|
|
50
|
+
/**
|
|
51
|
+
* Derives the AES-256-GCM key that encrypts an identity's entries.
|
|
52
|
+
*
|
|
53
|
+
* @internal
|
|
54
|
+
*/
|
|
55
|
+
export const deriveEncryptionKey = Effect.fnUntraced(function*(rootSecret: Uint8Array) {
|
|
56
|
+
const encryptionKeyMaterial = yield* deriveSecretBytes(rootSecret, EncryptionDerivationLabelV1)
|
|
57
|
+
const encryptionKey = yield* Effect.orDie(Aead.key(Aead.aes256Gcm, encryptionKeyMaterial))
|
|
58
|
+
return { encryptionKeyMaterial: toArrayBufferBytes(encryptionKeyMaterial), encryptionKey }
|
|
87
59
|
})
|
|
88
60
|
|
|
89
61
|
/**
|
|
62
|
+
* Derives the Ed25519 key an identity signs session authentication payloads
|
|
63
|
+
* with.
|
|
64
|
+
*
|
|
90
65
|
* @internal
|
|
91
66
|
*/
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
rootSecret: options.rootSecret,
|
|
99
|
-
label: EncryptionDerivationLabelV1
|
|
100
|
-
})
|
|
101
|
-
const signingSeed = yield* deriveSecretBytes({
|
|
102
|
-
crypto: options.crypto,
|
|
103
|
-
rootSecret: options.rootSecret,
|
|
104
|
-
label: SigningDerivationLabelV1
|
|
105
|
-
})
|
|
106
|
-
|
|
107
|
-
const signingPrivateKeyBytes = makeEd25519Pkcs8FromSeed(signingSeed)
|
|
108
|
-
|
|
109
|
-
const encryptionKey = yield* Effect.promise(() =>
|
|
110
|
-
options.crypto.subtle.importKey("raw", toArrayBuffer(encryptionKeyMaterial), "AES-GCM", true, [
|
|
111
|
-
"encrypt",
|
|
112
|
-
"decrypt"
|
|
113
|
-
])
|
|
114
|
-
)
|
|
115
|
-
const signingPrivateKey = yield* Effect.promise(() =>
|
|
116
|
-
options.crypto.subtle.importKey("pkcs8", toArrayBuffer(signingPrivateKeyBytes), "Ed25519", true, ["sign"])
|
|
117
|
-
)
|
|
118
|
-
const signingJwk = yield* Effect.promise(() => options.crypto.subtle.exportKey("jwk", signingPrivateKey))
|
|
119
|
-
|
|
120
|
-
if (typeof signingJwk.x !== "string") {
|
|
121
|
-
return yield* Effect.die(new Error("Unable to export deterministic Ed25519 public key"))
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
const signingPublicKey = decodeBase64Url(signingJwk.x)
|
|
125
|
-
|
|
126
|
-
if (signingPublicKey.byteLength !== Ed25519PublicKeyLength) {
|
|
127
|
-
return yield* Effect.die(
|
|
128
|
-
new Error(`Expected derived signing public key to be ${Ed25519PublicKeyLength} bytes`)
|
|
129
|
-
)
|
|
130
|
-
}
|
|
131
|
-
|
|
67
|
+
const deriveSigningKey = Effect.fnUntraced(function*(rootSecret: Uint8Array) {
|
|
68
|
+
const signature = yield* Signature.Signature
|
|
69
|
+
const seed = yield* deriveSecretBytes(rootSecret, SigningDerivationLabelV1)
|
|
70
|
+
const privateKey = yield* Signature.privateKey(Signature.ed25519, seed)
|
|
71
|
+
const signingPublicKey = yield* Effect.flatMap(signature.publicKeyOf(privateKey), Signature.toBytes)
|
|
72
|
+
const signingPrivateKey = yield* KeyFormat.encode(KeyFormat.pkcs8, privateKey)
|
|
132
73
|
return {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
} satisfies IdentityRootSecretMaterial
|
|
138
|
-
})
|
|
74
|
+
signingPublicKey: toArrayBufferBytes(signingPublicKey),
|
|
75
|
+
signingPrivateKey: Redacted.make(toArrayBufferBytes(signingPrivateKey))
|
|
76
|
+
}
|
|
77
|
+
}, Effect.orDie)
|
|
139
78
|
|
|
140
79
|
/**
|
|
141
80
|
* @internal
|
|
142
81
|
*/
|
|
143
|
-
export const
|
|
144
|
-
|
|
82
|
+
export const deriveIdentityRootSecretMaterial = (
|
|
83
|
+
rootSecret: Uint8Array
|
|
84
|
+
): Effect.Effect<IdentityRootSecretMaterial, never, Digest.Digest | Signature.Signature> =>
|
|
85
|
+
Effect.zipWith(deriveEncryptionKey(rootSecret), deriveSigningKey(rootSecret), (encryption, signing) => ({
|
|
86
|
+
...encryption,
|
|
87
|
+
...signing
|
|
88
|
+
}))
|
|
145
89
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
90
|
+
/**
|
|
91
|
+
* Memoizes a derivation from an identity's root secret per identity instance.
|
|
92
|
+
*
|
|
93
|
+
* @internal
|
|
94
|
+
*/
|
|
95
|
+
export const cachedByIdentity = <A, R>(
|
|
96
|
+
derive: (rootSecret: Uint8Array) => Effect.Effect<A, never, R>
|
|
97
|
+
) => {
|
|
98
|
+
const cache = new WeakMap<Identity["Service"], A>()
|
|
99
|
+
return (identity: Identity["Service"]): Effect.Effect<A, never, R> =>
|
|
100
|
+
Effect.suspend(() => {
|
|
101
|
+
const cached = cache.get(identity)
|
|
102
|
+
if (cached !== undefined) {
|
|
103
|
+
return Effect.succeed(cached)
|
|
104
|
+
}
|
|
105
|
+
return Effect.tap(derive(Redacted.value(identity.privateKey)), (derived) =>
|
|
106
|
+
Effect.sync(() => {
|
|
107
|
+
cache.set(identity, derived)
|
|
108
|
+
}))
|
|
155
109
|
})
|
|
110
|
+
}
|
|
156
111
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
112
|
+
const layerWebCrypto = Layer.mergeAll(Digest.layerWebCrypto, Signature.layerWebCrypto).pipe(
|
|
113
|
+
Layer.provide(SecureRandom.layerWebCrypto)
|
|
114
|
+
)
|
|
160
115
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
116
|
+
/**
|
|
117
|
+
* Derives identity material on the Web Crypto layers, using `crypto` when it
|
|
118
|
+
* is given and the `WebCrypto` reference otherwise.
|
|
119
|
+
*
|
|
120
|
+
* @internal
|
|
121
|
+
*/
|
|
122
|
+
export const makeGetIdentityRootSecretMaterial = (crypto?: Crypto) =>
|
|
123
|
+
cachedByIdentity((rootSecret) =>
|
|
124
|
+
crypto === undefined
|
|
125
|
+
? Effect.provide(deriveIdentityRootSecretMaterial(rootSecret), layerWebCrypto)
|
|
126
|
+
// `local` keeps enclosing Web Crypto layers, built on another `Crypto`,
|
|
127
|
+
// from being reused.
|
|
128
|
+
: Effect.provide(
|
|
129
|
+
deriveIdentityRootSecretMaterial(rootSecret),
|
|
130
|
+
Layer.provideMerge(layerWebCrypto, WebCrypto.layer(crypto)),
|
|
131
|
+
{ local: true }
|
|
132
|
+
)
|
|
133
|
+
)
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import * as Data from "../../Data.ts"
|
|
2
|
+
import * as Effect from "../../Effect.ts"
|
|
3
|
+
import * as Stream from "../../Stream.ts"
|
|
4
|
+
import type { Entry } from "../EventJournal.ts"
|
|
5
|
+
import type { Registry } from "../EventLog.ts"
|
|
6
|
+
|
|
7
|
+
/** A second pass over the kept set dropped `entries`, so a compactor does not compose. */
|
|
8
|
+
export class IdempotenceError extends Data.TaggedError("IdempotenceError")<{
|
|
9
|
+
readonly entries: ReadonlyArray<Entry>
|
|
10
|
+
}> {}
|
|
11
|
+
|
|
12
|
+
type Compactor = Registry["Service"]["compactors"] extends ReadonlyMap<string, infer A> ? A : never
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Folds the opted-in compactors over `entries`, which arrive in input order
|
|
16
|
+
* without repeated ids, and returns the kept entries in input order.
|
|
17
|
+
*
|
|
18
|
+
* Each step folds a chunk into the kept set. The chunk starts at `chunkSize`
|
|
19
|
+
* and grows to the size of the kept set, so a run stays linear when little is
|
|
20
|
+
* dropped and memory stays at about twice the kept set. A compactor that
|
|
21
|
+
* composes keeps the same entries at any chunking.
|
|
22
|
+
*
|
|
23
|
+
* Fails with `IdempotenceError` when a second pass over the kept set drops
|
|
24
|
+
* more. A compactor defect fails the run.
|
|
25
|
+
*/
|
|
26
|
+
export const run = <E, R>(options: {
|
|
27
|
+
readonly compactors: Registry["Service"]["compactors"]
|
|
28
|
+
readonly entries: Stream.Stream<Entry, E, R>
|
|
29
|
+
readonly chunkSize: number
|
|
30
|
+
}): Effect.Effect<ReadonlyArray<Entry>, E | IdempotenceError, R> => {
|
|
31
|
+
const drop = Effect.fnUntraced(function*(entries: ReadonlyArray<Entry>) {
|
|
32
|
+
const kept = new Set<Entry>()
|
|
33
|
+
const calls = new Map<Compactor, Array<Entry>>()
|
|
34
|
+
for (const entry of entries) {
|
|
35
|
+
const compactor = options.compactors.get(entry.event)
|
|
36
|
+
if (compactor === undefined || !compactor.remote) {
|
|
37
|
+
kept.add(entry)
|
|
38
|
+
continue
|
|
39
|
+
}
|
|
40
|
+
const input = calls.get(compactor)
|
|
41
|
+
if (input === undefined) calls.set(compactor, [entry])
|
|
42
|
+
else input.push(entry)
|
|
43
|
+
}
|
|
44
|
+
for (const [compactor, input] of calls) {
|
|
45
|
+
const inputs = new Set(input)
|
|
46
|
+
const forwarded = new Set<Entry>()
|
|
47
|
+
let replaced = false
|
|
48
|
+
yield* compactor.effect({
|
|
49
|
+
entries: input,
|
|
50
|
+
remote: true,
|
|
51
|
+
write: (entry) =>
|
|
52
|
+
Effect.sync(() => {
|
|
53
|
+
if (inputs.has(entry)) forwarded.add(entry)
|
|
54
|
+
else replaced = true
|
|
55
|
+
})
|
|
56
|
+
})
|
|
57
|
+
// Only forwarded input entries can be kept verbatim, so a call that
|
|
58
|
+
// outputs anything else keeps its whole input.
|
|
59
|
+
if (replaced) {
|
|
60
|
+
yield* Effect.logWarning("A remote compactor wrote an entry it was not given, so its input is kept").pipe(
|
|
61
|
+
Effect.annotateLogs({ events: [...compactor.events] })
|
|
62
|
+
)
|
|
63
|
+
}
|
|
64
|
+
for (const entry of replaced ? input : forwarded) kept.add(entry)
|
|
65
|
+
}
|
|
66
|
+
return entries.filter((entry) => kept.has(entry))
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
return Effect.gen(function*() {
|
|
70
|
+
let kept: ReadonlyArray<Entry> = []
|
|
71
|
+
let pending: Array<Entry> = []
|
|
72
|
+
yield* options.entries.pipe(
|
|
73
|
+
Stream.grouped(options.chunkSize),
|
|
74
|
+
Stream.runForEach((group) => {
|
|
75
|
+
for (const entry of group) pending.push(entry)
|
|
76
|
+
if (pending.length < Math.max(options.chunkSize, kept.length)) return Effect.void
|
|
77
|
+
const input = kept.concat(pending)
|
|
78
|
+
pending = []
|
|
79
|
+
return Effect.map(drop(input), (next) => {
|
|
80
|
+
kept = next
|
|
81
|
+
})
|
|
82
|
+
})
|
|
83
|
+
)
|
|
84
|
+
if (pending.length > 0) kept = yield* drop(kept.concat(pending))
|
|
85
|
+
const again = yield* drop(kept)
|
|
86
|
+
if (again.length !== kept.length) {
|
|
87
|
+
const survivors = new Set(again)
|
|
88
|
+
return yield* new IdempotenceError({ entries: kept.filter((entry) => !survivors.has(entry)) })
|
|
89
|
+
}
|
|
90
|
+
return kept
|
|
91
|
+
})
|
|
92
|
+
}
|
|
@@ -70,7 +70,9 @@ type ArgsWithOptions<Variables, Options> = {} extends Variables ? [variables: Va
|
|
|
70
70
|
* `partial: false`, it returns the decoded result and fails with a
|
|
71
71
|
* `ResponseError` on any `errors`. With `partial: true` it returns
|
|
72
72
|
* `{ data, errors }`. `partial` must be a literal `true` or `false`, not
|
|
73
|
-
* an arbitrary `boolean`.
|
|
73
|
+
* an arbitrary `boolean`. A non-2xx HTTP response never succeeds, even with
|
|
74
|
+
* `partial: true`: it fails with a `ResponseError` when it has `errors`, and
|
|
75
|
+
* with a `TransportError` otherwise.
|
|
74
76
|
*
|
|
75
77
|
* An operation without variables is called as `client.Viewer()` or, with
|
|
76
78
|
* options, `client.Viewer(undefined, { headers })`.
|
|
@@ -6,11 +6,10 @@
|
|
|
6
6
|
* @since 4.0.0
|
|
7
7
|
*/
|
|
8
8
|
import type * as Duration from "../Duration.ts"
|
|
9
|
-
import * as Headers from "../http/Headers.ts"
|
|
9
|
+
import type * as Headers from "../http/Headers.ts"
|
|
10
10
|
import type * as HttpClientError from "../http/HttpClientError.ts"
|
|
11
|
-
import { HeadersSchema } from "../internal/graphqlHeaders.ts"
|
|
11
|
+
import { HeadersSchema, parseRetryAfter } from "../internal/graphqlHeaders.ts"
|
|
12
12
|
import { hasProperty } from "../Predicate.ts"
|
|
13
|
-
import * as Result from "../Result.ts"
|
|
14
13
|
import * as Schema from "../Schema.ts"
|
|
15
14
|
|
|
16
15
|
const TypeId = "~effect/graphql/GraphQLClientError"
|
|
@@ -74,8 +73,9 @@ export type GraphQLError = typeof GraphQLError.Type
|
|
|
74
73
|
* `{ partial: true }` to receive decoded `{ data, errors }` instead.
|
|
75
74
|
*
|
|
76
75
|
* On this error, `data` is raw. `GraphQLError.path[0]` identifies the response
|
|
77
|
-
* key (or alias). Non-2xx HTTP responses with a GraphQL body
|
|
78
|
-
* reason rather than `TransportError
|
|
76
|
+
* key (or alias). Non-2xx HTTP responses with a GraphQL body and `errors`
|
|
77
|
+
* also use this reason rather than `TransportError`, even when they carry
|
|
78
|
+
* `data` and the call used `{ partial: true }`.
|
|
79
79
|
*
|
|
80
80
|
* `status` and `headers` are the HTTP status and response headers, as the
|
|
81
81
|
* transport reported them and middleware left them. Headers use
|
|
@@ -220,27 +220,18 @@ export const isFatalCloseCode = (code: number): boolean =>
|
|
|
220
220
|
|
|
221
221
|
const isRetryableStatus = (status: number): boolean => status === 429 || (status >= 500 && status < 600)
|
|
222
222
|
|
|
223
|
-
/**
|
|
224
|
-
* Parses a `Retry-After` header value, either whole seconds or an HTTP date,
|
|
225
|
-
* into a `Duration` measured from `now` (epoch milliseconds). Anything else,
|
|
226
|
-
* such as `1.5` or `-1`, yields `undefined`.
|
|
227
|
-
*/
|
|
228
|
-
const parseRetryAfter = (value: string | undefined, now: number): Duration.Duration | undefined => {
|
|
229
|
-
if (value === undefined) return undefined
|
|
230
|
-
const retryAfter = Headers.parseRetryAfter(value)
|
|
231
|
-
return Result.isSuccess(retryAfter) ? Headers.retryAfterDelay(retryAfter.success, now) : undefined
|
|
232
|
-
}
|
|
233
|
-
|
|
234
223
|
/**
|
|
235
224
|
* The client could not get a GraphQL response from the server: a network
|
|
236
|
-
* failure, an HTTP response that is not a GraphQL response,
|
|
237
|
-
* WebSocket
|
|
225
|
+
* failure, an HTTP response that is not a GraphQL response, a non-2xx HTTP
|
|
226
|
+
* response whose GraphQL body has no `errors`, or a closed WebSocket
|
|
227
|
+
* connection.
|
|
238
228
|
*
|
|
239
229
|
* **Details**
|
|
240
230
|
*
|
|
241
231
|
* - `status` and `headers` are only set for an HTTP response that is not a
|
|
242
|
-
* GraphQL response
|
|
243
|
-
*
|
|
232
|
+
* GraphQL response, or a non-2xx GraphQL response without `errors`.
|
|
233
|
+
* Headers use `Headers.Headers` at runtime and encode as a plain string
|
|
234
|
+
* record; decoding restores the header collection.
|
|
244
235
|
* - `retryAfter` comes from the `Retry-After` header (whole seconds or an
|
|
245
236
|
* HTTP date) and is encoded as milliseconds. When it is set, the error is
|
|
246
237
|
* retryable at any status, unless the close code is fatal.
|
|
@@ -360,8 +351,10 @@ export class EncodeError
|
|
|
360
351
|
*
|
|
361
352
|
* **Details**
|
|
362
353
|
*
|
|
363
|
-
* `data: null` without `errors` also produces a `DecodeError
|
|
364
|
-
*
|
|
354
|
+
* `data: null` without `errors` also produces a `DecodeError` for a 2xx
|
|
355
|
+
* response or a result without an HTTP status, since `ResponseError`
|
|
356
|
+
* requires a non-empty errors array. On a non-2xx response it is a
|
|
357
|
+
* `TransportError`.
|
|
365
358
|
*
|
|
366
359
|
* @stability experimental
|
|
367
360
|
* @category errors
|
|
@@ -522,7 +522,10 @@ export const makeHttp: {
|
|
|
522
522
|
* (or `null`). Media types match case-insensitively. Anything else
|
|
523
523
|
* is a `TransportError` with the response `status` and `headers`, and a
|
|
524
524
|
* `Retry-After` header (whole seconds or an HTTP date, measured from when the
|
|
525
|
-
* response arrived) becomes `retryAfter`.
|
|
525
|
+
* response arrived) becomes `retryAfter`. A non-2xx GraphQL response is passed
|
|
526
|
+
* to the client, which never treats it as a success: it fails with a
|
|
527
|
+
* `ResponseError` when the body has `errors`, and with a `TransportError`
|
|
528
|
+
* carrying the same metadata otherwise.
|
|
526
529
|
*
|
|
527
530
|
* A subscription is a `POST` with `Accept: text/event-stream`. Each `next`
|
|
528
531
|
* event is emitted with the response headers but no status, and the stream
|
|
@@ -738,7 +741,10 @@ export const layerHttp: {
|
|
|
738
741
|
* (or `null`). Media types match case-insensitively. Anything else
|
|
739
742
|
* is a `TransportError` with the response `status` and `headers`, and a
|
|
740
743
|
* `Retry-After` header (whole seconds or an HTTP date, measured from when the
|
|
741
|
-
* response arrived) becomes `retryAfter`.
|
|
744
|
+
* response arrived) becomes `retryAfter`. A non-2xx GraphQL response is passed
|
|
745
|
+
* to the client, which never treats it as a success: it fails with a
|
|
746
|
+
* `ResponseError` when the body has `errors`, and with a `TransportError`
|
|
747
|
+
* carrying the same metadata otherwise.
|
|
742
748
|
*
|
|
743
749
|
* A subscription is a `POST` with `Accept: text/event-stream`. Each `next`
|
|
744
750
|
* event is emitted with the response headers but no status, and the stream
|
|
@@ -969,7 +975,10 @@ export const layerHttp: {
|
|
|
969
975
|
* (or `null`). Media types match case-insensitively. Anything else
|
|
970
976
|
* is a `TransportError` with the response `status` and `headers`, and a
|
|
971
977
|
* `Retry-After` header (whole seconds or an HTTP date, measured from when the
|
|
972
|
-
* response arrived) becomes `retryAfter`.
|
|
978
|
+
* response arrived) becomes `retryAfter`. A non-2xx GraphQL response is passed
|
|
979
|
+
* to the client, which never treats it as a success: it fails with a
|
|
980
|
+
* `ResponseError` when the body has `errors`, and with a `TransportError`
|
|
981
|
+
* carrying the same metadata otherwise.
|
|
973
982
|
*
|
|
974
983
|
* A subscription is a `POST` with `Accept: text/event-stream`. Each `next`
|
|
975
984
|
* event is emitted with the response headers but no status, and the stream
|