effect 4.0.6 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/Arbitrary.d.ts +10 -2
- package/dist/Arbitrary.d.ts.map +1 -1
- package/dist/Arbitrary.js +2 -1
- package/dist/Arbitrary.js.map +1 -1
- package/dist/BigDecimal.d.ts.map +1 -1
- package/dist/BigDecimal.js +3 -0
- package/dist/BigDecimal.js.map +1 -1
- package/dist/Channel.d.ts +12 -6
- package/dist/Channel.d.ts.map +1 -1
- package/dist/Channel.js +30 -9
- package/dist/Channel.js.map +1 -1
- package/dist/Config.d.ts +7 -1
- package/dist/Config.d.ts.map +1 -1
- package/dist/Config.js.map +1 -1
- package/dist/Context.d.ts +18 -1
- package/dist/Context.d.ts.map +1 -1
- package/dist/Context.js +27 -8
- package/dist/Context.js.map +1 -1
- package/dist/Cron.d.ts +81 -11
- package/dist/Cron.d.ts.map +1 -1
- package/dist/Cron.js +101 -26
- package/dist/Cron.js.map +1 -1
- package/dist/Data.d.ts +54 -235
- package/dist/Data.d.ts.map +1 -1
- package/dist/Data.js.map +1 -1
- package/dist/Duration.d.ts +78 -0
- package/dist/Duration.d.ts.map +1 -1
- package/dist/Duration.js +123 -0
- package/dist/Duration.js.map +1 -1
- package/dist/Effect.d.ts +165 -8
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +12 -2
- package/dist/Effect.js.map +1 -1
- package/dist/Equal.d.ts.map +1 -1
- package/dist/Equal.js +8 -1
- package/dist/Equal.js.map +1 -1
- package/dist/Exit.d.ts +3 -3
- package/dist/Exit.d.ts.map +1 -1
- package/dist/Exit.js.map +1 -1
- package/dist/FileSystem.d.ts +59 -4
- package/dist/FileSystem.d.ts.map +1 -1
- package/dist/FileSystem.js +9 -2
- package/dist/FileSystem.js.map +1 -1
- package/dist/Formatter.d.ts.map +1 -1
- package/dist/Formatter.js +27 -13
- package/dist/Formatter.js.map +1 -1
- package/dist/Glob.d.ts +165 -0
- package/dist/Glob.d.ts.map +1 -0
- package/dist/Glob.js +127 -0
- package/dist/Glob.js.map +1 -0
- package/dist/Hash.d.ts.map +1 -1
- package/dist/Hash.js +4 -1
- package/dist/Hash.js.map +1 -1
- package/dist/JsonPatch.js +4 -0
- package/dist/JsonPatch.js.map +1 -1
- package/dist/JsonSchema.d.ts.map +1 -1
- package/dist/JsonSchema.js +13 -40
- package/dist/JsonSchema.js.map +1 -1
- package/dist/Match.d.ts +86 -0
- package/dist/Match.d.ts.map +1 -1
- package/dist/Match.js +72 -0
- package/dist/Match.js.map +1 -1
- package/dist/Metric.d.ts +3 -3
- package/dist/MutableList.d.ts +5 -2
- package/dist/MutableList.d.ts.map +1 -1
- package/dist/MutableList.js +7 -5
- package/dist/MutableList.js.map +1 -1
- package/dist/MutableRef.d.ts.map +1 -1
- package/dist/MutableRef.js +7 -0
- package/dist/MutableRef.js.map +1 -1
- package/dist/PartitionedSemaphore.d.ts +2 -1
- package/dist/PartitionedSemaphore.d.ts.map +1 -1
- package/dist/PartitionedSemaphore.js +22 -12
- package/dist/PartitionedSemaphore.js.map +1 -1
- package/dist/Pool.d.ts +51 -0
- package/dist/Pool.d.ts.map +1 -1
- package/dist/Pool.js +136 -36
- package/dist/Pool.js.map +1 -1
- package/dist/PubSub.d.ts.map +1 -1
- package/dist/PubSub.js +5 -6
- package/dist/PubSub.js.map +1 -1
- package/dist/Random.d.ts.map +1 -1
- package/dist/Random.js +3 -3
- package/dist/Random.js.map +1 -1
- package/dist/RcMap.d.ts.map +1 -1
- package/dist/RcMap.js +8 -2
- package/dist/RcMap.js.map +1 -1
- package/dist/Ref.d.ts.map +1 -1
- package/dist/Ref.js +8 -0
- package/dist/Ref.js.map +1 -1
- package/dist/Schedule.d.ts +18 -1
- package/dist/Schedule.d.ts.map +1 -1
- package/dist/Schedule.js +8 -3
- package/dist/Schedule.js.map +1 -1
- package/dist/Schema.d.ts +690 -49
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +687 -28
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaAST.d.ts +4 -2
- package/dist/SchemaAST.d.ts.map +1 -1
- package/dist/SchemaAST.js +14 -17
- package/dist/SchemaAST.js.map +1 -1
- package/dist/SchemaGetter.d.ts +6 -1
- package/dist/SchemaGetter.d.ts.map +1 -1
- package/dist/SchemaGetter.js +22 -11
- package/dist/SchemaGetter.js.map +1 -1
- package/dist/SchemaParser.d.ts.map +1 -1
- package/dist/SchemaParser.js +48 -22
- package/dist/SchemaParser.js.map +1 -1
- package/dist/SchemaRepresentation.d.ts +33 -10
- package/dist/SchemaRepresentation.d.ts.map +1 -1
- package/dist/SchemaRepresentation.js +39 -13
- package/dist/SchemaRepresentation.js.map +1 -1
- package/dist/SchemaTransformation.d.ts +12 -4
- package/dist/SchemaTransformation.d.ts.map +1 -1
- package/dist/SchemaTransformation.js +15 -5
- package/dist/SchemaTransformation.js.map +1 -1
- package/dist/ScopedCache.d.ts.map +1 -1
- package/dist/ScopedCache.js +5 -7
- package/dist/ScopedCache.js.map +1 -1
- package/dist/Semaphore.d.ts +130 -0
- package/dist/Semaphore.d.ts.map +1 -1
- package/dist/Semaphore.js +94 -35
- package/dist/Semaphore.js.map +1 -1
- package/dist/Sink.d.ts.map +1 -1
- package/dist/Sink.js +7 -2
- package/dist/Sink.js.map +1 -1
- package/dist/Stream.d.ts +13 -4
- package/dist/Stream.d.ts.map +1 -1
- package/dist/Stream.js +31 -10
- package/dist/Stream.js.map +1 -1
- package/dist/String.d.ts +3 -0
- package/dist/String.d.ts.map +1 -1
- package/dist/String.js +3 -0
- package/dist/String.js.map +1 -1
- package/dist/Terminal.d.ts +18 -1
- package/dist/Terminal.d.ts.map +1 -1
- package/dist/Terminal.js +1 -1
- package/dist/Terminal.js.map +1 -1
- package/dist/Tracer.d.ts +11 -1
- package/dist/Tracer.d.ts.map +1 -1
- package/dist/Tracer.js +6 -1
- package/dist/Tracer.js.map +1 -1
- package/dist/ai/AiError.d.ts +43 -116
- package/dist/ai/AiError.d.ts.map +1 -1
- package/dist/ai/AiError.js +53 -72
- package/dist/ai/AiError.js.map +1 -1
- package/dist/ai/Decision.d.ts +196 -15
- package/dist/ai/Decision.d.ts.map +1 -1
- package/dist/ai/Decision.js +130 -0
- package/dist/ai/Decision.js.map +1 -1
- package/dist/ai/DecisionModel.d.ts +54 -13
- package/dist/ai/DecisionModel.d.ts.map +1 -1
- package/dist/ai/DecisionModel.js +123 -12
- package/dist/ai/DecisionModel.js.map +1 -1
- package/dist/ai/LanguageModel.d.ts.map +1 -1
- package/dist/ai/LanguageModel.js +9 -0
- package/dist/ai/LanguageModel.js.map +1 -1
- package/dist/ai/McpSchema.d.ts +110 -110
- package/dist/ai/McpSchema.d.ts.map +1 -1
- package/dist/ai/McpServer.d.ts +630 -29
- package/dist/ai/McpServer.d.ts.map +1 -1
- package/dist/ai/McpServer.js +583 -131
- package/dist/ai/McpServer.js.map +1 -1
- package/dist/ai/McpTest.d.ts +130 -0
- package/dist/ai/McpTest.d.ts.map +1 -0
- package/dist/ai/McpTest.js +237 -0
- package/dist/ai/McpTest.js.map +1 -0
- package/dist/ai/Prompt.d.ts +52 -0
- package/dist/ai/Prompt.d.ts.map +1 -1
- package/dist/ai/Prompt.js +38 -0
- package/dist/ai/Prompt.js.map +1 -1
- package/dist/ai/Response.d.ts +17 -28
- package/dist/ai/Response.d.ts.map +1 -1
- package/dist/ai/Response.js +5 -10
- package/dist/ai/Response.js.map +1 -1
- package/dist/ai/Tool.d.ts +43 -1
- package/dist/ai/Tool.d.ts.map +1 -1
- package/dist/ai/Tool.js +5 -2
- package/dist/ai/Tool.js.map +1 -1
- package/dist/ai/Toolkit.d.ts.map +1 -1
- package/dist/ai/Toolkit.js +8 -1
- package/dist/ai/Toolkit.js.map +1 -1
- package/dist/ai/index.d.ts +5 -0
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +5 -0
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/internal/mcpCore.js +17 -12
- package/dist/ai/internal/mcpCore.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2024_11_05.js +4 -5
- package/dist/ai/internal/mcpProtocol/v2024_11_05.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_03_26.js +4 -5
- package/dist/ai/internal/mcpProtocol/v2025_03_26.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_06_18.js +4 -5
- package/dist/ai/internal/mcpProtocol/v2025_06_18.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_11_25.js +4 -5
- package/dist/ai/internal/mcpProtocol/v2025_11_25.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js +18 -10
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
- package/dist/ai/internal/mcpProtocol.js +13 -0
- package/dist/ai/internal/mcpProtocol.js.map +1 -1
- package/dist/ai/internal/mcpRuntime.js +5 -3
- package/dist/ai/internal/mcpRuntime.js.map +1 -1
- package/dist/ai/internal/mcpStatefulRuntime.js +6 -1
- package/dist/ai/internal/mcpStatefulRuntime.js.map +1 -1
- package/dist/cli/Argument.d.ts +21 -0
- package/dist/cli/Argument.d.ts.map +1 -1
- package/dist/cli/Argument.js +7 -0
- package/dist/cli/Argument.js.map +1 -1
- package/dist/cli/CliError.d.ts +78 -0
- package/dist/cli/CliError.d.ts.map +1 -1
- package/dist/cli/CliError.js +65 -3
- package/dist/cli/CliError.js.map +1 -1
- package/dist/cli/CliOutput.d.ts +220 -7
- package/dist/cli/CliOutput.d.ts.map +1 -1
- package/dist/cli/CliOutput.js +156 -43
- package/dist/cli/CliOutput.js.map +1 -1
- package/dist/cli/Command.d.ts +47 -16
- package/dist/cli/Command.d.ts.map +1 -1
- package/dist/cli/Command.js +67 -29
- package/dist/cli/Command.js.map +1 -1
- package/dist/cli/Completions.d.ts +58 -0
- package/dist/cli/Completions.d.ts.map +1 -1
- package/dist/cli/Completions.js +49 -9
- package/dist/cli/Completions.js.map +1 -1
- package/dist/cli/Flag.d.ts +122 -0
- package/dist/cli/Flag.d.ts.map +1 -1
- package/dist/cli/Flag.js +42 -0
- package/dist/cli/Flag.js.map +1 -1
- package/dist/cli/GlobalFlag.d.ts.map +1 -1
- package/dist/cli/GlobalFlag.js +15 -7
- package/dist/cli/GlobalFlag.js.map +1 -1
- package/dist/cli/HelpDoc.d.ts +15 -1
- package/dist/cli/HelpDoc.d.ts.map +1 -1
- package/dist/cli/Param.d.ts +15 -0
- package/dist/cli/Param.d.ts.map +1 -1
- package/dist/cli/Param.js +23 -2
- package/dist/cli/Param.js.map +1 -1
- package/dist/cli/Primitive.d.ts +14 -0
- package/dist/cli/Primitive.d.ts.map +1 -1
- package/dist/cli/Primitive.js +15 -1
- package/dist/cli/Primitive.js.map +1 -1
- package/dist/cli/Prompt.d.ts +1 -0
- package/dist/cli/Prompt.d.ts.map +1 -1
- package/dist/cli/Prompt.js +1 -0
- package/dist/cli/Prompt.js.map +1 -1
- package/dist/cli/TerminalCapabilities.d.ts +3 -2
- package/dist/cli/TerminalCapabilities.d.ts.map +1 -1
- package/dist/cli/TerminalCapabilities.js +3 -1
- package/dist/cli/TerminalCapabilities.js.map +1 -1
- package/dist/cli/internal/completions/bash.js +73 -27
- package/dist/cli/internal/completions/bash.js.map +1 -1
- package/dist/cli/internal/help.d.ts.map +1 -1
- package/dist/cli/internal/help.js +17 -10
- package/dist/cli/internal/help.js.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.js +45 -10
- package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
- package/dist/cluster/MessageStorage.d.ts +23 -45
- package/dist/cluster/MessageStorage.d.ts.map +1 -1
- package/dist/cluster/MessageStorage.js +6 -7
- package/dist/cluster/MessageStorage.js.map +1 -1
- package/dist/cluster/Sharding.d.ts.map +1 -1
- package/dist/cluster/Sharding.js +151 -49
- package/dist/cluster/Sharding.js.map +1 -1
- package/dist/cluster/ShardingConfig.d.ts +76 -0
- package/dist/cluster/ShardingConfig.d.ts.map +1 -1
- package/dist/cluster/ShardingConfig.js +4 -0
- package/dist/cluster/ShardingConfig.js.map +1 -1
- package/dist/cluster/SingleRunner.d.ts +3 -3
- package/dist/cluster/SingleRunner.d.ts.map +1 -1
- package/dist/cluster/SingleRunner.js +1 -1
- package/dist/cluster/Snowflake.d.ts.map +1 -1
- package/dist/cluster/Snowflake.js +3 -7
- package/dist/cluster/Snowflake.js.map +1 -1
- package/dist/cluster/SqlMessageStorage.d.ts +37 -6
- package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
- package/dist/cluster/SqlMessageStorage.js +34 -7
- package/dist/cluster/SqlMessageStorage.js.map +1 -1
- package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
- package/dist/cluster/SqlRunnerStorage.js +109 -46
- package/dist/cluster/SqlRunnerStorage.js.map +1 -1
- package/dist/cluster/internal/entityManager.js +54 -20
- package/dist/cluster/internal/entityManager.js.map +1 -1
- package/dist/crypto/Aead.d.ts +322 -0
- package/dist/crypto/Aead.d.ts.map +1 -0
- package/dist/crypto/Aead.js +331 -0
- package/dist/crypto/Aead.js.map +1 -0
- package/dist/crypto/Cipher.d.ts +235 -0
- package/dist/crypto/Cipher.d.ts.map +1 -0
- package/dist/crypto/Cipher.js +233 -0
- package/dist/crypto/Cipher.js.map +1 -0
- package/dist/crypto/CryptoError.d.ts +212 -0
- package/dist/crypto/CryptoError.d.ts.map +1 -0
- package/dist/crypto/CryptoError.js +202 -0
- package/dist/crypto/CryptoError.js.map +1 -0
- package/dist/crypto/Digest.d.ts +143 -0
- package/dist/crypto/Digest.d.ts.map +1 -0
- package/dist/crypto/Digest.js +146 -0
- package/dist/crypto/Digest.js.map +1 -0
- package/dist/crypto/Kdf.d.ts +220 -0
- package/dist/crypto/Kdf.d.ts.map +1 -0
- package/dist/crypto/Kdf.js +212 -0
- package/dist/crypto/Kdf.js.map +1 -0
- package/dist/crypto/KeyAgreement.d.ts +323 -0
- package/dist/crypto/KeyAgreement.d.ts.map +1 -0
- package/dist/crypto/KeyAgreement.js +303 -0
- package/dist/crypto/KeyAgreement.js.map +1 -0
- package/dist/crypto/KeyFormat.d.ts +309 -0
- package/dist/crypto/KeyFormat.d.ts.map +1 -0
- package/dist/crypto/KeyFormat.js +556 -0
- package/dist/crypto/KeyFormat.js.map +1 -0
- package/dist/crypto/KeyWrap.d.ts +389 -0
- package/dist/crypto/KeyWrap.d.ts.map +1 -0
- package/dist/crypto/KeyWrap.js +381 -0
- package/dist/crypto/KeyWrap.js.map +1 -0
- package/dist/crypto/Mac.d.ts +277 -0
- package/dist/crypto/Mac.d.ts.map +1 -0
- package/dist/crypto/Mac.js +288 -0
- package/dist/crypto/Mac.js.map +1 -0
- package/dist/crypto/SecureRandom.d.ts +340 -0
- package/dist/crypto/SecureRandom.d.ts.map +1 -0
- package/dist/crypto/SecureRandom.js +257 -0
- package/dist/crypto/SecureRandom.js.map +1 -0
- package/dist/crypto/Signature.d.ts +448 -0
- package/dist/crypto/Signature.d.ts.map +1 -0
- package/dist/crypto/Signature.js +484 -0
- package/dist/crypto/Signature.js.map +1 -0
- package/dist/crypto/WebCrypto.d.ts +61 -0
- package/dist/crypto/WebCrypto.d.ts.map +1 -0
- package/dist/crypto/WebCrypto.js +63 -0
- package/dist/crypto/WebCrypto.js.map +1 -0
- package/dist/crypto/index.d.ts +65 -0
- package/dist/crypto/index.d.ts.map +1 -0
- package/dist/crypto/index.js +66 -0
- package/dist/crypto/index.js.map +1 -0
- package/dist/crypto/internal/asymmetric.d.ts +2 -0
- package/dist/crypto/internal/asymmetric.d.ts.map +1 -0
- package/dist/crypto/internal/asymmetric.js +210 -0
- package/dist/crypto/internal/asymmetric.js.map +1 -0
- package/dist/crypto/internal/chacha.d.ts +46 -0
- package/dist/crypto/internal/chacha.d.ts.map +1 -0
- package/dist/crypto/internal/chacha.js +885 -0
- package/dist/crypto/internal/chacha.js.map +1 -0
- package/dist/crypto/internal/der.d.ts +6 -0
- package/dist/crypto/internal/der.d.ts.map +1 -0
- package/dist/crypto/internal/der.js +86 -0
- package/dist/crypto/internal/der.js.map +1 -0
- package/dist/crypto/internal/digest.d.ts +2 -0
- package/dist/crypto/internal/digest.d.ts.map +1 -0
- package/dist/crypto/internal/digest.js +15 -0
- package/dist/crypto/internal/digest.js.map +1 -0
- package/dist/crypto/internal/key.d.ts +2 -0
- package/dist/crypto/internal/key.d.ts.map +1 -0
- package/dist/crypto/internal/key.js +170 -0
- package/dist/crypto/internal/key.js.map +1 -0
- package/dist/crypto/internal/md5.d.ts +39 -0
- package/dist/crypto/internal/md5.d.ts.map +1 -0
- package/dist/crypto/internal/md5.js +179 -0
- package/dist/crypto/internal/md5.js.map +1 -0
- package/dist/crypto/internal/webCrypto.d.ts +2 -0
- package/dist/crypto/internal/webCrypto.d.ts.map +1 -0
- package/dist/crypto/internal/webCrypto.js +111 -0
- package/dist/crypto/internal/webCrypto.js.map +1 -0
- package/dist/devtools/DevToolsClient.d.ts.map +1 -1
- package/dist/devtools/DevToolsClient.js +2 -0
- package/dist/devtools/DevToolsClient.js.map +1 -1
- package/dist/encoding/Base64.js +36 -0
- package/dist/encoding/Base64.js.map +1 -1
- package/dist/encoding/Base64Url.d.ts.map +1 -1
- package/dist/encoding/Base64Url.js +3 -2
- package/dist/encoding/Base64Url.js.map +1 -1
- package/dist/encoding/Csv.d.ts +608 -0
- package/dist/encoding/Csv.d.ts.map +1 -0
- package/dist/encoding/Csv.js +718 -0
- package/dist/encoding/Csv.js.map +1 -0
- package/dist/encoding/Hex.d.ts +3 -2
- package/dist/encoding/Hex.d.ts.map +1 -1
- package/dist/encoding/Hex.js +3 -2
- package/dist/encoding/Hex.js.map +1 -1
- package/dist/encoding/SchemaBinary.d.ts.map +1 -1
- package/dist/encoding/SchemaBinary.js +42 -4
- package/dist/encoding/SchemaBinary.js.map +1 -1
- package/dist/encoding/Sse.d.ts.map +1 -1
- package/dist/encoding/Sse.js +3 -3
- package/dist/encoding/Sse.js.map +1 -1
- package/dist/encoding/Toml.d.ts +17 -3
- package/dist/encoding/Toml.d.ts.map +1 -1
- package/dist/encoding/Toml.js +124 -31
- package/dist/encoding/Toml.js.map +1 -1
- package/dist/encoding/Yaml.d.ts +8 -1
- package/dist/encoding/Yaml.d.ts.map +1 -1
- package/dist/encoding/Yaml.js +54 -18
- package/dist/encoding/Yaml.js.map +1 -1
- package/dist/encoding/index.d.ts +5 -0
- package/dist/encoding/index.d.ts.map +1 -1
- package/dist/encoding/index.js +5 -0
- package/dist/encoding/index.js.map +1 -1
- package/dist/eventlog/EventJournal.d.ts.map +1 -1
- package/dist/eventlog/EventJournal.js +6 -3
- package/dist/eventlog/EventJournal.js.map +1 -1
- package/dist/eventlog/EventLog.d.ts +119 -4
- package/dist/eventlog/EventLog.d.ts.map +1 -1
- package/dist/eventlog/EventLog.js +200 -12
- package/dist/eventlog/EventLog.js.map +1 -1
- package/dist/eventlog/EventLogEncryption.d.ts +41 -4
- package/dist/eventlog/EventLogEncryption.d.ts.map +1 -1
- package/dist/eventlog/EventLogEncryption.js +83 -64
- package/dist/eventlog/EventLogEncryption.js.map +1 -1
- package/dist/eventlog/EventLogMessage.d.ts +279 -0
- package/dist/eventlog/EventLogMessage.d.ts.map +1 -1
- package/dist/eventlog/EventLogMessage.js +217 -1
- package/dist/eventlog/EventLogMessage.js.map +1 -1
- package/dist/eventlog/EventLogRemote.d.ts +200 -28
- package/dist/eventlog/EventLogRemote.d.ts.map +1 -1
- package/dist/eventlog/EventLogRemote.js +186 -16
- package/dist/eventlog/EventLogRemote.js.map +1 -1
- package/dist/eventlog/EventLogServer.d.ts +3 -0
- package/dist/eventlog/EventLogServer.d.ts.map +1 -1
- package/dist/eventlog/EventLogServer.js +18 -10
- package/dist/eventlog/EventLogServer.js.map +1 -1
- package/dist/eventlog/EventLogServerEncrypted.d.ts +326 -5
- package/dist/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
- package/dist/eventlog/EventLogServerEncrypted.js +769 -14
- package/dist/eventlog/EventLogServerEncrypted.js.map +1 -1
- package/dist/eventlog/EventLogSessionAuth.d.ts +5 -3
- package/dist/eventlog/EventLogSessionAuth.d.ts.map +1 -1
- package/dist/eventlog/EventLogSessionAuth.js +41 -64
- package/dist/eventlog/EventLogSessionAuth.js.map +1 -1
- package/dist/eventlog/EventRow.d.ts +4 -0
- package/dist/eventlog/EventRow.d.ts.map +1 -1
- package/dist/eventlog/EventRow.js +12 -2
- package/dist/eventlog/EventRow.js.map +1 -1
- package/dist/eventlog/SqlEventJournal.d.ts.map +1 -1
- package/dist/eventlog/SqlEventJournal.js +47 -27
- package/dist/eventlog/SqlEventJournal.js.map +1 -1
- package/dist/eventlog/SqlEventLogServerEncrypted.d.ts +21 -5
- package/dist/eventlog/SqlEventLogServerEncrypted.d.ts.map +1 -1
- package/dist/eventlog/SqlEventLogServerEncrypted.js +1048 -113
- package/dist/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
- package/dist/eventlog/SqlEventLogServerUnencrypted.js +2 -2
- package/dist/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
- package/dist/eventlog/internal/batches.d.ts +12 -0
- package/dist/eventlog/internal/batches.d.ts.map +1 -0
- package/dist/eventlog/internal/batches.js +26 -0
- package/dist/eventlog/internal/batches.js.map +1 -0
- package/dist/eventlog/internal/compaction.d.ts +38 -0
- package/dist/eventlog/internal/compaction.d.ts.map +1 -0
- package/dist/eventlog/internal/compaction.js +33 -0
- package/dist/eventlog/internal/compaction.js.map +1 -0
- package/dist/eventlog/internal/conflicts.d.ts +0 -1
- package/dist/eventlog/internal/conflicts.d.ts.map +1 -1
- package/dist/eventlog/internal/conflicts.js +0 -3
- package/dist/eventlog/internal/conflicts.js.map +1 -1
- package/dist/eventlog/internal/identityRootSecretDerivation.js +66 -67
- package/dist/eventlog/internal/identityRootSecretDerivation.js.map +1 -1
- package/dist/eventlog/internal/remoteCompaction.d.ts +31 -0
- package/dist/eventlog/internal/remoteCompaction.d.ts.map +1 -0
- package/dist/eventlog/internal/remoteCompaction.js +76 -0
- package/dist/eventlog/internal/remoteCompaction.js.map +1 -0
- package/dist/http/Cookies.d.ts +172 -0
- package/dist/http/Cookies.d.ts.map +1 -1
- package/dist/http/Cookies.js +153 -10
- package/dist/http/Cookies.js.map +1 -1
- package/dist/http/FetchHttpClient.d.ts +26 -2
- package/dist/http/FetchHttpClient.d.ts.map +1 -1
- package/dist/http/FetchHttpClient.js +78 -15
- package/dist/http/FetchHttpClient.js.map +1 -1
- package/dist/http/HttpClient.d.ts +502 -8
- package/dist/http/HttpClient.d.ts.map +1 -1
- package/dist/http/HttpClient.js +296 -12
- package/dist/http/HttpClient.js.map +1 -1
- package/dist/http/HttpClientError.d.ts +8 -1
- package/dist/http/HttpClientError.d.ts.map +1 -1
- package/dist/http/HttpClientError.js +37 -1
- package/dist/http/HttpClientError.js.map +1 -1
- package/dist/http/HttpClientRequest.d.ts +9 -5
- package/dist/http/HttpClientRequest.d.ts.map +1 -1
- package/dist/http/HttpClientRequest.js +3 -4
- package/dist/http/HttpClientRequest.js.map +1 -1
- package/dist/http/HttpClientResponse.d.ts.map +1 -1
- package/dist/http/HttpClientResponse.js +3 -2
- package/dist/http/HttpClientResponse.js.map +1 -1
- package/dist/http/HttpMethod.d.ts +7 -1
- package/dist/http/HttpMethod.d.ts.map +1 -1
- package/dist/http/HttpMethod.js +3 -8
- package/dist/http/HttpMethod.js.map +1 -1
- package/dist/http/HttpMiddleware.d.ts +1 -1
- package/dist/http/HttpMiddleware.d.ts.map +1 -1
- package/dist/http/HttpMiddleware.js +14 -16
- package/dist/http/HttpMiddleware.js.map +1 -1
- package/dist/http/HttpRouter.d.ts.map +1 -1
- package/dist/http/HttpRouter.js +2 -1
- package/dist/http/HttpRouter.js.map +1 -1
- package/dist/http/HttpServerError.js +2 -2
- package/dist/http/HttpServerError.js.map +1 -1
- package/dist/http/HttpServerRequest.d.ts +11 -3
- package/dist/http/HttpServerRequest.d.ts.map +1 -1
- package/dist/http/HttpServerRequest.js +77 -25
- package/dist/http/HttpServerRequest.js.map +1 -1
- package/dist/http/HttpServerResponse.d.ts.map +1 -1
- package/dist/http/HttpServerResponse.js +3 -2
- package/dist/http/HttpServerResponse.js.map +1 -1
- package/dist/http/HttpStaticServer.d.ts.map +1 -1
- package/dist/http/HttpStaticServer.js +48 -21
- package/dist/http/HttpStaticServer.js.map +1 -1
- package/dist/http/HttpTraceContext.d.ts +2 -1
- package/dist/http/HttpTraceContext.d.ts.map +1 -1
- package/dist/http/HttpTraceContext.js +7 -5
- package/dist/http/HttpTraceContext.js.map +1 -1
- package/dist/http/MultipartParser/internal/contentType.js +3 -3
- package/dist/http/ProblemDetails.d.ts +96 -0
- package/dist/http/ProblemDetails.d.ts.map +1 -0
- package/dist/http/ProblemDetails.js +98 -0
- package/dist/http/ProblemDetails.js.map +1 -0
- package/dist/http/UrlParams.d.ts +3 -1
- package/dist/http/UrlParams.d.ts.map +1 -1
- package/dist/http/UrlParams.js +4 -2
- package/dist/http/UrlParams.js.map +1 -1
- package/dist/http/index.d.ts +5 -0
- package/dist/http/index.d.ts.map +1 -1
- package/dist/http/index.js +5 -0
- package/dist/http/index.js.map +1 -1
- package/dist/http/internal/compression.js +4 -5
- package/dist/http/internal/compression.js.map +1 -1
- package/dist/http/internal/decompression.js +6 -2
- package/dist/http/internal/decompression.js.map +1 -1
- package/dist/http/internal/httpBody.js +8 -1
- package/dist/http/internal/httpBody.js.map +1 -1
- package/dist/http/internal/urlParams.js +33 -0
- package/dist/http/internal/urlParams.js.map +1 -1
- package/dist/http-api/HttpApi.d.ts +3 -6
- package/dist/http-api/HttpApi.d.ts.map +1 -1
- package/dist/http-api/HttpApi.js +3 -6
- package/dist/http-api/HttpApi.js.map +1 -1
- package/dist/http-api/HttpApiBuilder.d.ts.map +1 -1
- package/dist/http-api/HttpApiBuilder.js +43 -13
- package/dist/http-api/HttpApiBuilder.js.map +1 -1
- package/dist/http-api/HttpApiClient.d.ts +140 -7
- package/dist/http-api/HttpApiClient.d.ts.map +1 -1
- package/dist/http-api/HttpApiClient.js +193 -44
- package/dist/http-api/HttpApiClient.js.map +1 -1
- package/dist/http-api/HttpApiEndpoint.d.ts +24 -7
- package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
- package/dist/http-api/HttpApiEndpoint.js +123 -32
- package/dist/http-api/HttpApiEndpoint.js.map +1 -1
- package/dist/http-api/HttpApiError.d.ts +185 -13
- package/dist/http-api/HttpApiError.d.ts.map +1 -1
- package/dist/http-api/HttpApiError.js +128 -0
- package/dist/http-api/HttpApiError.js.map +1 -1
- package/dist/http-api/HttpApiMiddleware.d.ts +64 -17
- package/dist/http-api/HttpApiMiddleware.d.ts.map +1 -1
- package/dist/http-api/HttpApiMiddleware.js +85 -1
- package/dist/http-api/HttpApiMiddleware.js.map +1 -1
- package/dist/http-api/HttpApiSchema.d.ts +142 -33
- package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
- package/dist/http-api/HttpApiSchema.js +123 -59
- package/dist/http-api/HttpApiSchema.js.map +1 -1
- package/dist/http-api/HttpApiTest.d.ts.map +1 -1
- package/dist/http-api/HttpApiTest.js +3 -2
- package/dist/http-api/HttpApiTest.js.map +1 -1
- package/dist/http-api/OpenApi.d.ts.map +1 -1
- package/dist/http-api/OpenApi.js +25 -16
- package/dist/http-api/OpenApi.js.map +1 -1
- package/dist/http-api/internal/toCodecHttpProperties.d.ts +2 -0
- package/dist/http-api/internal/toCodecHttpProperties.d.ts.map +1 -0
- package/dist/http-api/internal/toCodecHttpProperties.js +38 -0
- package/dist/http-api/internal/toCodecHttpProperties.js.map +1 -0
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/internal/arbitrary/runner.d.ts.map +1 -1
- package/dist/internal/arbitrary/runner.js +120 -44
- package/dist/internal/arbitrary/runner.js.map +1 -1
- package/dist/internal/core.js +2 -0
- package/dist/internal/core.js.map +1 -1
- package/dist/internal/effect.js +46 -27
- package/dist/internal/effect.js.map +1 -1
- package/dist/internal/equal.js +14 -0
- package/dist/internal/equal.js.map +1 -1
- package/dist/internal/glob.d.ts +2 -0
- package/dist/internal/glob.d.ts.map +1 -0
- package/dist/internal/glob.js +630 -0
- package/dist/internal/glob.js.map +1 -0
- package/dist/internal/jsonSchema.d.ts +2 -0
- package/dist/internal/jsonSchema.d.ts.map +1 -0
- package/dist/internal/jsonSchema.js +28 -0
- package/dist/internal/jsonSchema.js.map +1 -0
- package/dist/internal/matcher.js +11 -1
- package/dist/internal/matcher.js.map +1 -1
- package/dist/internal/persistence.js +9 -0
- package/dist/internal/persistence.js.map +1 -1
- package/dist/internal/rcRef.js +4 -1
- package/dist/internal/rcRef.js.map +1 -1
- package/dist/internal/schema/compilerRegistry.js +4 -1
- package/dist/internal/schema/compilerRegistry.js.map +1 -1
- package/dist/internal/schema/content.d.ts +2 -0
- package/dist/internal/schema/content.d.ts.map +1 -0
- package/dist/internal/schema/content.js +13 -0
- package/dist/internal/schema/content.js.map +1 -0
- package/dist/internal/schema/fromJsonSchemaDocument.js +173 -185
- package/dist/internal/schema/fromJsonSchemaDocument.js.map +1 -1
- package/dist/internal/schema/fromRepresentation.js +2 -1
- package/dist/internal/schema/fromRepresentation.js.map +1 -1
- package/dist/internal/schema/standardSchema.js +8 -2
- package/dist/internal/schema/standardSchema.js.map +1 -1
- package/dist/internal/schema/toCodeDocument.js +9 -6
- package/dist/internal/schema/toCodeDocument.js.map +1 -1
- package/dist/internal/schema/toCodec.js +21 -24
- package/dist/internal/schema/toCodec.js.map +1 -1
- package/dist/internal/schema/toJsonSchemaDocument.js +205 -140
- package/dist/internal/schema/toJsonSchemaDocument.js.map +1 -1
- package/dist/internal/schema/toRepresentation.js +107 -129
- package/dist/internal/schema/toRepresentation.js.map +1 -1
- package/dist/internal/sql.d.ts +2 -0
- package/dist/internal/sql.d.ts.map +1 -0
- package/dist/internal/sql.js +13 -0
- package/dist/internal/sql.js.map +1 -0
- package/dist/internal/trie.js +42 -13
- package/dist/internal/trie.js.map +1 -1
- package/dist/internal/ulid.js +41 -0
- package/dist/internal/ulid.js.map +1 -1
- package/dist/internal/uuid.js +52 -8
- package/dist/internal/uuid.js.map +1 -1
- package/dist/internal/version.js +1 -1
- package/dist/observability/Otlp.d.ts +15 -4
- package/dist/observability/Otlp.d.ts.map +1 -1
- package/dist/observability/Otlp.js +10 -0
- package/dist/observability/Otlp.js.map +1 -1
- package/dist/observability/OtlpProxy.d.ts +154 -0
- package/dist/observability/OtlpProxy.d.ts.map +1 -0
- package/dist/observability/OtlpProxy.js +235 -0
- package/dist/observability/OtlpProxy.js.map +1 -0
- package/dist/observability/OtlpResource.d.ts +7 -0
- package/dist/observability/OtlpResource.d.ts.map +1 -1
- package/dist/observability/OtlpResource.js +11 -1
- package/dist/observability/OtlpResource.js.map +1 -1
- package/dist/observability/OtlpTracer.d.ts.map +1 -1
- package/dist/observability/OtlpTracer.js +4 -0
- package/dist/observability/OtlpTracer.js.map +1 -1
- package/dist/observability/index.d.ts +5 -0
- package/dist/observability/index.d.ts.map +1 -1
- package/dist/observability/index.js +5 -0
- package/dist/observability/index.js.map +1 -1
- package/dist/persistence/CircuitBreaker.d.ts +897 -0
- package/dist/persistence/CircuitBreaker.d.ts.map +1 -0
- package/dist/persistence/CircuitBreaker.js +1165 -0
- package/dist/persistence/CircuitBreaker.js.map +1 -0
- package/dist/persistence/KeyValueStore.d.ts +47 -2
- package/dist/persistence/KeyValueStore.d.ts.map +1 -1
- package/dist/persistence/KeyValueStore.js +129 -18
- package/dist/persistence/KeyValueStore.js.map +1 -1
- package/dist/persistence/PersistedQueue.d.ts +9 -0
- package/dist/persistence/PersistedQueue.d.ts.map +1 -1
- package/dist/persistence/PersistedQueue.js +94 -52
- package/dist/persistence/PersistedQueue.js.map +1 -1
- package/dist/persistence/Persistence.d.ts +10 -4
- package/dist/persistence/Persistence.d.ts.map +1 -1
- package/dist/persistence/Persistence.js +18 -11
- package/dist/persistence/Persistence.js.map +1 -1
- package/dist/persistence/Redis.d.ts +78 -2
- package/dist/persistence/Redis.d.ts.map +1 -1
- package/dist/persistence/Redis.js +62 -7
- package/dist/persistence/Redis.js.map +1 -1
- package/dist/persistence/index.d.ts +5 -0
- package/dist/persistence/index.d.ts.map +1 -1
- package/dist/persistence/index.js +5 -0
- package/dist/persistence/index.js.map +1 -1
- package/dist/process/ChildProcess.d.ts +237 -71
- package/dist/process/ChildProcess.d.ts.map +1 -1
- package/dist/process/ChildProcess.js +56 -158
- package/dist/process/ChildProcess.js.map +1 -1
- package/dist/process/ChildProcessSpawner.d.ts +35 -0
- package/dist/process/ChildProcessSpawner.d.ts.map +1 -1
- package/dist/process/ChildProcessSpawner.js +5 -2
- package/dist/process/ChildProcessSpawner.js.map +1 -1
- package/dist/process/CommandLine.d.ts +294 -0
- package/dist/process/CommandLine.d.ts.map +1 -0
- package/dist/process/CommandLine.js +481 -0
- package/dist/process/CommandLine.js.map +1 -0
- package/dist/process/index.d.ts +5 -0
- package/dist/process/index.d.ts.map +1 -1
- package/dist/process/index.js +5 -0
- package/dist/process/index.js.map +1 -1
- package/dist/reactivity/AsyncResult.d.ts +1 -1
- package/dist/reactivity/AsyncResult.d.ts.map +1 -1
- package/dist/reactivity/Atom.d.ts +2 -1
- package/dist/reactivity/Atom.d.ts.map +1 -1
- package/dist/reactivity/Atom.js +3 -4
- package/dist/reactivity/Atom.js.map +1 -1
- package/dist/reactivity/AtomRegistry.js.map +1 -1
- package/dist/rpc/RpcClient.d.ts +16 -1
- package/dist/rpc/RpcClient.d.ts.map +1 -1
- package/dist/rpc/RpcClient.js +59 -24
- package/dist/rpc/RpcClient.js.map +1 -1
- package/dist/rpc/RpcMessage.d.ts +10 -1
- package/dist/rpc/RpcMessage.d.ts.map +1 -1
- package/dist/rpc/RpcMessage.js +1 -0
- package/dist/rpc/RpcMessage.js.map +1 -1
- package/dist/rpc/RpcSerialization.d.ts +14 -0
- package/dist/rpc/RpcSerialization.d.ts.map +1 -1
- package/dist/rpc/RpcSerialization.js +26 -8
- package/dist/rpc/RpcSerialization.js.map +1 -1
- package/dist/rpc/RpcServer.d.ts +31 -0
- package/dist/rpc/RpcServer.d.ts.map +1 -1
- package/dist/rpc/RpcServer.js +139 -56
- package/dist/rpc/RpcServer.js.map +1 -1
- package/dist/rpc/RpcTest.d.ts +1 -0
- package/dist/rpc/RpcTest.d.ts.map +1 -1
- package/dist/rpc/RpcTest.js +1 -0
- package/dist/rpc/RpcTest.js.map +1 -1
- package/dist/schema/Model.d.ts +14 -0
- package/dist/schema/Model.d.ts.map +1 -1
- package/dist/schema/Model.js +18 -3
- package/dist/schema/Model.js.map +1 -1
- package/dist/sql/Migrator.d.ts +2 -20
- package/dist/sql/Migrator.d.ts.map +1 -1
- package/dist/sql/Migrator.js +13 -55
- package/dist/sql/Migrator.js.map +1 -1
- package/dist/sql/MigratorFileSystem.d.ts +21 -0
- package/dist/sql/MigratorFileSystem.d.ts.map +1 -0
- package/dist/sql/MigratorFileSystem.js +57 -0
- package/dist/sql/MigratorFileSystem.js.map +1 -0
- package/dist/sql/SqlClient.d.ts +9 -4
- package/dist/sql/SqlClient.d.ts.map +1 -1
- package/dist/sql/SqlClient.js +13 -10
- package/dist/sql/SqlClient.js.map +1 -1
- package/dist/sql/SqlResolver.d.ts +4 -0
- package/dist/sql/SqlResolver.d.ts.map +1 -1
- package/dist/sql/SqlResolver.js +18 -4
- package/dist/sql/SqlResolver.js.map +1 -1
- package/dist/sql/Statement.d.ts +27 -6
- package/dist/sql/Statement.d.ts.map +1 -1
- package/dist/sql/Statement.js +21 -15
- package/dist/sql/Statement.js.map +1 -1
- package/dist/sql/index.js +1 -1
- package/dist/testing/index.d.ts +0 -5
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +0 -5
- package/dist/testing/index.js.map +1 -1
- package/dist/workflow/DurableDeferred.d.ts.map +1 -1
- package/dist/workflow/DurableDeferred.js +21 -2
- package/dist/workflow/DurableDeferred.js.map +1 -1
- package/dist/workflow/internal/crypto.js +9 -8
- package/dist/workflow/internal/crypto.js.map +1 -1
- package/package.json +3 -1
- package/src/Arbitrary.ts +10 -2
- package/src/BigDecimal.ts +3 -0
- package/src/Channel.ts +64 -29
- package/src/Config.ts +7 -1
- package/src/Context.ts +34 -10
- package/src/Cron.ts +178 -29
- package/src/Data.ts +60 -265
- package/src/Duration.ts +140 -0
- package/src/Effect.ts +915 -86
- package/src/Equal.ts +8 -1
- package/src/Exit.ts +3 -3
- package/src/FileSystem.ts +65 -4
- package/src/Formatter.ts +28 -13
- package/src/Glob.ts +205 -0
- package/src/Hash.ts +4 -1
- package/src/JsonPatch.ts +4 -0
- package/src/JsonSchema.ts +12 -40
- package/src/Match.ts +127 -0
- package/src/Metric.ts +3 -3
- package/src/MutableList.ts +7 -5
- package/src/MutableRef.ts +8 -1
- package/src/PartitionedSemaphore.ts +24 -13
- package/src/Pool.ts +182 -52
- package/src/PubSub.ts +5 -6
- package/src/Random.ts +3 -3
- package/src/RcMap.ts +5 -1
- package/src/Ref.ts +8 -0
- package/src/Schedule.ts +27 -4
- package/src/Schema.ts +1237 -87
- package/src/SchemaAST.ts +20 -20
- package/src/SchemaGetter.ts +27 -11
- package/src/SchemaParser.ts +51 -18
- package/src/SchemaRepresentation.ts +50 -34
- package/src/SchemaTransformation.ts +17 -5
- package/src/ScopedCache.ts +5 -9
- package/src/Semaphore.ts +208 -40
- package/src/Sink.ts +15 -2
- package/src/Stream.ts +48 -22
- package/src/String.ts +3 -0
- package/src/Terminal.ts +19 -1
- package/src/Tracer.ts +15 -1
- package/src/ai/AiError.ts +56 -80
- package/src/ai/Decision.ts +257 -6
- package/src/ai/DecisionModel.ts +171 -28
- package/src/ai/LanguageModel.ts +9 -0
- package/src/ai/McpServer.ts +1283 -299
- package/src/ai/McpTest.ts +380 -0
- package/src/ai/Prompt.ts +65 -0
- package/src/ai/Response.ts +36 -31
- package/src/ai/Tool.ts +65 -10
- package/src/ai/Toolkit.ts +4 -1
- package/src/ai/index.ts +6 -0
- package/src/ai/internal/mcpCore.ts +78 -44
- package/src/ai/internal/mcpProtocol/v2024_11_05.ts +4 -7
- package/src/ai/internal/mcpProtocol/v2025_03_26.ts +4 -7
- package/src/ai/internal/mcpProtocol/v2025_06_18.ts +4 -7
- package/src/ai/internal/mcpProtocol/v2025_11_25.ts +4 -7
- package/src/ai/internal/mcpProtocol/v2026_07_28.ts +15 -10
- package/src/ai/internal/mcpProtocol.ts +29 -0
- package/src/ai/internal/mcpRuntime.ts +9 -5
- package/src/ai/internal/mcpStatefulRuntime.ts +14 -2
- package/src/cli/Argument.ts +21 -0
- package/src/cli/CliError.ts +90 -3
- package/src/cli/CliOutput.ts +300 -55
- package/src/cli/Command.ts +76 -41
- package/src/cli/Completions.ts +51 -0
- package/src/cli/Flag.ts +122 -0
- package/src/cli/GlobalFlag.ts +6 -7
- package/src/cli/HelpDoc.ts +18 -1
- package/src/cli/Param.ts +35 -6
- package/src/cli/Primitive.ts +16 -1
- package/src/cli/Prompt.ts +1 -0
- package/src/cli/TerminalCapabilities.ts +6 -3
- package/src/cli/internal/completions/bash.ts +79 -29
- package/src/cli/internal/help.ts +21 -9
- package/src/cluster/ClusterWorkflowEngine.ts +46 -16
- package/src/cluster/MessageStorage.ts +19 -14
- package/src/cluster/Sharding.ts +176 -47
- package/src/cluster/ShardingConfig.ts +43 -0
- package/src/cluster/SingleRunner.ts +3 -3
- package/src/cluster/Snowflake.ts +3 -7
- package/src/cluster/SqlMessageStorage.ts +49 -17
- package/src/cluster/SqlRunnerStorage.ts +143 -70
- package/src/cluster/internal/entityManager.ts +75 -22
- package/src/crypto/Aead.ts +517 -0
- package/src/crypto/Cipher.ts +326 -0
- package/src/crypto/CryptoError.ts +242 -0
- package/src/crypto/Digest.ts +167 -0
- package/src/crypto/Kdf.ts +315 -0
- package/src/crypto/KeyAgreement.ts +489 -0
- package/src/crypto/KeyFormat.ts +712 -0
- package/src/crypto/KeyWrap.ts +639 -0
- package/src/crypto/Mac.ts +386 -0
- package/src/crypto/SecureRandom.ts +459 -0
- package/src/crypto/Signature.ts +673 -0
- package/src/crypto/WebCrypto.ts +64 -0
- package/src/crypto/index.ts +78 -0
- package/src/crypto/internal/asymmetric.ts +329 -0
- package/src/crypto/internal/chacha.ts +1088 -0
- package/src/crypto/internal/der.ts +110 -0
- package/src/crypto/internal/digest.ts +16 -0
- package/src/crypto/internal/key.ts +235 -0
- package/src/crypto/internal/md5.ts +170 -0
- package/src/crypto/internal/webCrypto.ts +150 -0
- package/src/devtools/DevToolsClient.ts +2 -0
- package/src/encoding/Base64.ts +38 -0
- package/src/encoding/Base64Url.ts +5 -2
- package/src/encoding/Csv.ts +1298 -0
- package/src/encoding/Hex.ts +3 -2
- package/src/encoding/SchemaBinary.ts +40 -4
- package/src/encoding/Sse.ts +4 -3
- package/src/encoding/Toml.ts +117 -35
- package/src/encoding/Yaml.ts +61 -18
- package/src/encoding/index.ts +6 -0
- package/src/eventlog/EventJournal.ts +4 -3
- package/src/eventlog/EventLog.ts +340 -15
- package/src/eventlog/EventLogEncryption.ts +118 -110
- package/src/eventlog/EventLogMessage.ts +273 -1
- package/src/eventlog/EventLogRemote.ts +367 -23
- package/src/eventlog/EventLogServer.ts +23 -8
- package/src/eventlog/EventLogServerEncrypted.ts +1130 -67
- package/src/eventlog/EventLogSessionAuth.ts +56 -70
- package/src/eventlog/EventRow.ts +12 -3
- package/src/eventlog/SqlEventJournal.ts +68 -45
- package/src/eventlog/SqlEventLogServerEncrypted.ts +1244 -136
- package/src/eventlog/SqlEventLogServerUnencrypted.ts +2 -2
- package/src/eventlog/internal/batches.ts +30 -0
- package/src/eventlog/internal/compaction.ts +64 -0
- package/src/eventlog/internal/conflicts.ts +0 -4
- package/src/eventlog/internal/identityRootSecretDerivation.ts +93 -123
- package/src/eventlog/internal/remoteCompaction.ts +92 -0
- package/src/http/Cookies.ts +291 -12
- package/src/http/FetchHttpClient.ts +88 -16
- package/src/http/HttpClient.ts +636 -29
- package/src/http/HttpClientError.ts +35 -1
- package/src/http/HttpClientRequest.ts +21 -10
- package/src/http/HttpClientResponse.ts +3 -2
- package/src/http/HttpMethod.ts +10 -2
- package/src/http/HttpMiddleware.ts +15 -18
- package/src/http/HttpRouter.ts +2 -1
- package/src/http/HttpServerError.ts +2 -2
- package/src/http/HttpServerRequest.ts +101 -30
- package/src/http/HttpServerResponse.ts +3 -2
- package/src/http/HttpStaticServer.ts +51 -22
- package/src/http/HttpTraceContext.ts +7 -4
- package/src/http/MultipartParser/internal/contentType.ts +3 -3
- package/src/http/ProblemDetails.ts +149 -0
- package/src/http/UrlParams.ts +6 -1
- package/src/http/index.ts +6 -0
- package/src/http/internal/compression.ts +4 -5
- package/src/http/internal/decompression.ts +10 -4
- package/src/http/internal/httpBody.ts +10 -2
- package/src/http/internal/urlParams.ts +37 -0
- package/src/http-api/HttpApi.ts +3 -6
- package/src/http-api/HttpApiBuilder.ts +61 -19
- package/src/http-api/HttpApiClient.ts +284 -72
- package/src/http-api/HttpApiEndpoint.ts +135 -35
- package/src/http-api/HttpApiError.ts +250 -0
- package/src/http-api/HttpApiMiddleware.ts +95 -1
- package/src/http-api/HttpApiSchema.ts +236 -52
- package/src/http-api/HttpApiTest.ts +3 -2
- package/src/http-api/OpenApi.ts +20 -17
- package/src/http-api/internal/toCodecHttpProperties.ts +56 -0
- package/src/index.ts +6 -6
- package/src/internal/arbitrary/runner.ts +133 -36
- package/src/internal/core.ts +2 -0
- package/src/internal/effect.ts +58 -34
- package/src/internal/equal.ts +17 -0
- package/src/internal/glob.ts +736 -0
- package/src/internal/jsonSchema.ts +27 -0
- package/src/internal/matcher.ts +18 -1
- package/src/internal/persistence.ts +11 -0
- package/src/internal/rcRef.ts +4 -1
- package/src/internal/schema/compilerRegistry.ts +6 -1
- package/src/internal/schema/content.ts +18 -0
- package/src/internal/schema/fromJsonSchemaDocument.ts +228 -190
- package/src/internal/schema/fromRepresentation.ts +2 -1
- package/src/internal/schema/standardSchema.ts +2 -2
- package/src/internal/schema/toCodeDocument.ts +11 -7
- package/src/internal/schema/toCodec.ts +26 -22
- package/src/internal/schema/toJsonSchemaDocument.ts +189 -167
- package/src/internal/schema/toRepresentation.ts +122 -140
- package/src/internal/sql.ts +14 -0
- package/src/internal/trie.ts +43 -14
- package/src/internal/ulid.ts +44 -0
- package/src/internal/uuid.ts +57 -16
- package/src/internal/version.ts +1 -1
- package/src/observability/Otlp.ts +21 -4
- package/src/observability/OtlpProxy.ts +314 -0
- package/src/observability/OtlpResource.ts +9 -1
- package/src/observability/OtlpTracer.ts +4 -0
- package/src/observability/index.ts +6 -0
- package/src/persistence/CircuitBreaker.ts +1678 -0
- package/src/persistence/KeyValueStore.ts +219 -22
- package/src/persistence/PersistedQueue.ts +128 -59
- package/src/persistence/Persistence.ts +20 -13
- package/src/persistence/Redis.ts +129 -8
- package/src/persistence/index.ts +6 -0
- package/src/process/ChildProcess.ts +285 -264
- package/src/process/ChildProcessSpawner.ts +46 -2
- package/src/process/CommandLine.ts +630 -0
- package/src/process/index.ts +6 -0
- package/src/reactivity/AsyncResult.ts +1 -1
- package/src/reactivity/Atom.ts +5 -5
- package/src/reactivity/AtomRegistry.ts +1 -1
- package/src/rpc/RpcClient.ts +75 -36
- package/src/rpc/RpcMessage.ts +10 -1
- package/src/rpc/RpcSerialization.ts +35 -9
- package/src/rpc/RpcServer.ts +176 -63
- package/src/rpc/RpcTest.ts +3 -0
- package/src/schema/Model.ts +26 -3
- package/src/sql/Migrator.ts +15 -69
- package/src/sql/MigratorFileSystem.ts +71 -0
- package/src/sql/SqlClient.ts +13 -20
- package/src/sql/SqlResolver.ts +23 -9
- package/src/sql/Statement.ts +38 -9
- package/src/sql/index.ts +1 -1
- package/src/testing/index.ts +0 -6
- package/src/workflow/DurableDeferred.ts +23 -6
- package/src/workflow/internal/crypto.ts +15 -11
- package/dist/Crypto.d.ts +0 -244
- package/dist/Crypto.d.ts.map +0 -1
- package/dist/Crypto.js +0 -139
- package/dist/Crypto.js.map +0 -1
- package/dist/testing/TestCrypto.d.ts +0 -73
- package/dist/testing/TestCrypto.d.ts.map +0 -1
- package/dist/testing/TestCrypto.js +0 -87
- package/dist/testing/TestCrypto.js.map +0 -1
- package/src/Crypto.ts +0 -347
- package/src/testing/TestCrypto.ts +0 -94
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authenticated encryption: AES-GCM, ChaCha20-Poly1305, and
|
|
3
|
+
* XChaCha20-Poly1305.
|
|
4
|
+
*
|
|
5
|
+
* The {@link Aead} service generates keys, encrypts, and decrypts. The
|
|
6
|
+
* top-level {@link key}, {@link fromCryptoKey}, and {@link toBytes} functions
|
|
7
|
+
* build and export keys without a service.
|
|
8
|
+
*
|
|
9
|
+
* Ciphertext is `ciphertext‖tag` with a 16-byte tag for every algorithm, the
|
|
10
|
+
* layout WebCrypto produces. A tampered ciphertext, tag, or additional data
|
|
11
|
+
* fails decryption with a `DecryptionFailed` reason that carries no detail.
|
|
12
|
+
*
|
|
13
|
+
* AES-GCM runs on `crypto.subtle`. ChaCha20-Poly1305 and XChaCha20-Poly1305
|
|
14
|
+
* run a pure TypeScript implementation vendored from `@noble/ciphers` 2.4.0,
|
|
15
|
+
* because WebCrypto does not provide them everywhere. Cure53 audited
|
|
16
|
+
* `@noble/ciphers` 1.0.0 in 2024.
|
|
17
|
+
*
|
|
18
|
+
* Keys are opaque. They hold either key bytes or, for AES-GCM, a `CryptoKey`,
|
|
19
|
+
* display only their algorithm, and compare by reference.
|
|
20
|
+
*
|
|
21
|
+
* **Gotchas**
|
|
22
|
+
*
|
|
23
|
+
* Never reuse a nonce with the same key. Random 12-byte nonces risk a
|
|
24
|
+
* collision after about 2^32 messages under one key: use a counter, or
|
|
25
|
+
* XChaCha20-Poly1305, whose 24-byte nonces can be random.
|
|
26
|
+
*
|
|
27
|
+
* @stability unstable
|
|
28
|
+
* @since 4.0.0
|
|
29
|
+
*/
|
|
30
|
+
import * as Context from "../Context.js";
|
|
31
|
+
import * as Effect from "../Effect.js";
|
|
32
|
+
import * as Layer from "../Layer.js";
|
|
33
|
+
import * as Predicate from "../Predicate.js";
|
|
34
|
+
import * as CryptoError from "./CryptoError.js";
|
|
35
|
+
import * as Chacha from "./internal/chacha.js";
|
|
36
|
+
import * as KeyModel from "./internal/key.js";
|
|
37
|
+
import * as internal from "./internal/webCrypto.js";
|
|
38
|
+
import * as SecureRandom from "./SecureRandom.js";
|
|
39
|
+
import { WebCrypto } from "./WebCrypto.js";
|
|
40
|
+
const TypeId = "~effect/crypto/Aead/Key";
|
|
41
|
+
/**
|
|
42
|
+
* AES-128-GCM, with a 16-byte key and a 12-byte nonce.
|
|
43
|
+
*
|
|
44
|
+
* @stability unstable
|
|
45
|
+
* @category algorithms
|
|
46
|
+
* @since 4.0.0
|
|
47
|
+
*/
|
|
48
|
+
export const aes128Gcm = {
|
|
49
|
+
name: "aes128Gcm",
|
|
50
|
+
keyLength: 16,
|
|
51
|
+
nonceLength: 12,
|
|
52
|
+
implementation: undefined
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* AES-256-GCM, with a 32-byte key and a 12-byte nonce.
|
|
56
|
+
*
|
|
57
|
+
* @stability unstable
|
|
58
|
+
* @category algorithms
|
|
59
|
+
* @since 4.0.0
|
|
60
|
+
*/
|
|
61
|
+
export const aes256Gcm = {
|
|
62
|
+
name: "aes256Gcm",
|
|
63
|
+
keyLength: 32,
|
|
64
|
+
nonceLength: 12,
|
|
65
|
+
implementation: undefined
|
|
66
|
+
};
|
|
67
|
+
const chachaImplementation = aead => ({
|
|
68
|
+
encrypt: (key, nonce, plaintext, aad) => aead(key, nonce, aad).encrypt(plaintext),
|
|
69
|
+
decrypt: (key, nonce, ciphertext, aad) => aead(key, nonce, aad).decrypt(ciphertext)
|
|
70
|
+
});
|
|
71
|
+
/**
|
|
72
|
+
* ChaCha20-Poly1305 (RFC 8439), with a 32-byte key and a 12-byte nonce.
|
|
73
|
+
*
|
|
74
|
+
* **Details**
|
|
75
|
+
*
|
|
76
|
+
* Runs the pure TypeScript implementation under `layerWebCrypto`, even where
|
|
77
|
+
* `crypto.subtle` provides it, so every runtime takes one code path.
|
|
78
|
+
*
|
|
79
|
+
* @stability unstable
|
|
80
|
+
* @category algorithms
|
|
81
|
+
* @since 4.0.0
|
|
82
|
+
*/
|
|
83
|
+
export const chacha20Poly1305 = {
|
|
84
|
+
name: "chacha20Poly1305",
|
|
85
|
+
keyLength: 32,
|
|
86
|
+
nonceLength: 12,
|
|
87
|
+
implementation: /* @__PURE__ */chachaImplementation(Chacha.chacha20Poly1305)
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* XChaCha20-Poly1305 (draft-irtf-cfrg-xchacha-03), with a 32-byte key and a
|
|
91
|
+
* 24-byte nonce.
|
|
92
|
+
*
|
|
93
|
+
* **When to use**
|
|
94
|
+
*
|
|
95
|
+
* Use when nonces are generated randomly, since 24-byte nonces make
|
|
96
|
+
* collisions negligible. The output is compatible with libsodium's
|
|
97
|
+
* `crypto_aead_xchacha20poly1305_ietf`.
|
|
98
|
+
*
|
|
99
|
+
* @stability unstable
|
|
100
|
+
* @category algorithms
|
|
101
|
+
* @since 4.0.0
|
|
102
|
+
*/
|
|
103
|
+
export const xchacha20Poly1305 = {
|
|
104
|
+
name: "xchacha20Poly1305",
|
|
105
|
+
keyLength: 32,
|
|
106
|
+
nonceLength: 24,
|
|
107
|
+
implementation: /* @__PURE__ */chachaImplementation(Chacha.xchacha20Poly1305)
|
|
108
|
+
};
|
|
109
|
+
const KeyProto = /*#__PURE__*/KeyModel.redactedProto(TypeId, "Aead.Key");
|
|
110
|
+
/**
|
|
111
|
+
* Checks whether a value is a {@link Key}.
|
|
112
|
+
*
|
|
113
|
+
* @stability unstable
|
|
114
|
+
* @category guards
|
|
115
|
+
* @since 4.0.0
|
|
116
|
+
*/
|
|
117
|
+
export const isKey = u => Predicate.hasProperty(u, TypeId);
|
|
118
|
+
/**
|
|
119
|
+
* Service that generates keys, encrypts, and decrypts with authentication.
|
|
120
|
+
*
|
|
121
|
+
* **Example** (Encrypting with XChaCha20-Poly1305)
|
|
122
|
+
*
|
|
123
|
+
* ```ts import.meta.vitest
|
|
124
|
+
* import { Effect, Layer } from "effect"
|
|
125
|
+
* import { Aead, SecureRandom } from "effect/crypto"
|
|
126
|
+
*
|
|
127
|
+
* const program = Effect.gen(function*() {
|
|
128
|
+
* const aead = yield* Aead.Aead
|
|
129
|
+
* const random = yield* SecureRandom.SecureRandom
|
|
130
|
+
* const key = yield* aead.generateKey(Aead.xchacha20Poly1305)
|
|
131
|
+
* const nonce = yield* random.randomBytes(24)
|
|
132
|
+
* const sealed = yield* aead.encrypt(key, new TextEncoder().encode("secret"), { nonce })
|
|
133
|
+
* const opened = yield* aead.decrypt(key, sealed, { nonce })
|
|
134
|
+
* return [sealed.length, new TextDecoder().decode(opened)]
|
|
135
|
+
* })
|
|
136
|
+
*
|
|
137
|
+
* const layer = Aead.layerWebCrypto.pipe(Layer.provideMerge(SecureRandom.layerWebCrypto))
|
|
138
|
+
* await Effect.runPromise(program.pipe(Effect.provide(layer))) // => [22, "secret"]
|
|
139
|
+
* ```
|
|
140
|
+
*
|
|
141
|
+
* @stability unstable
|
|
142
|
+
* @category services
|
|
143
|
+
* @since 4.0.0
|
|
144
|
+
*/
|
|
145
|
+
export class Aead extends /*#__PURE__*/Context.Service()("effect/crypto/Aead") {}
|
|
146
|
+
const fail = (method, reason) => internal.fail("Aead", method, reason);
|
|
147
|
+
const decryptionFailed = () => fail("decrypt", new CryptoError.DecryptionFailed());
|
|
148
|
+
// GCM limits the plaintext to 2^39 - 256 bits.
|
|
149
|
+
const maxGcmPlaintext = 2 ** 36 - 32;
|
|
150
|
+
const tagLength = 16;
|
|
151
|
+
// Every check runs before any work, so the pure TypeScript code only throws on
|
|
152
|
+
// a bug, and WebCrypto's `OperationError` only means a failed tag check.
|
|
153
|
+
const checkArguments = (method, key, data, options) => {
|
|
154
|
+
const algorithm = key.algorithm;
|
|
155
|
+
if (options.nonce.length !== algorithm.nonceLength) {
|
|
156
|
+
return fail(method, new CryptoError.InvalidArgument({
|
|
157
|
+
description: `${algorithm.name} nonces must contain exactly ${algorithm.nonceLength} bytes`
|
|
158
|
+
}));
|
|
159
|
+
}
|
|
160
|
+
if (method === "encrypt") {
|
|
161
|
+
if (algorithm.implementation === undefined && data.length > maxGcmPlaintext) {
|
|
162
|
+
return fail(method, new CryptoError.InvalidArgument({
|
|
163
|
+
description: "AES-GCM plaintext cannot exceed 2^36 - 32 bytes"
|
|
164
|
+
}));
|
|
165
|
+
}
|
|
166
|
+
} else if (data.length < tagLength) {
|
|
167
|
+
return decryptionFailed();
|
|
168
|
+
}
|
|
169
|
+
return undefined;
|
|
170
|
+
};
|
|
171
|
+
const runImplementation = (method, implementation, key, data, options) => {
|
|
172
|
+
const stored = KeyModel.material(key);
|
|
173
|
+
if (stored._tag !== "Bytes") {
|
|
174
|
+
return fail(method, new CryptoError.InvalidKey({
|
|
175
|
+
description: `${key.algorithm.name} keys must hold bytes`
|
|
176
|
+
}));
|
|
177
|
+
}
|
|
178
|
+
const aad = options.aad ?? new Uint8Array(0);
|
|
179
|
+
if (method === "encrypt") {
|
|
180
|
+
return Effect.sync(() => implementation.encrypt(stored.bytes, options.nonce, data, aad));
|
|
181
|
+
}
|
|
182
|
+
return Effect.suspend(() => {
|
|
183
|
+
const plaintext = implementation.decrypt(stored.bytes, options.nonce, data, aad);
|
|
184
|
+
return plaintext === undefined ? decryptionFailed() : Effect.succeed(plaintext);
|
|
185
|
+
});
|
|
186
|
+
};
|
|
187
|
+
/**
|
|
188
|
+
* Builds an `Aead` layer on the `WebCrypto` reference that runs the given
|
|
189
|
+
* implementations for byte-backed keys.
|
|
190
|
+
*
|
|
191
|
+
* **When to use**
|
|
192
|
+
*
|
|
193
|
+
* Use to run an algorithm on a runtime's native code, as `NodeCrypto.layerAead`
|
|
194
|
+
* does for ChaCha20-Poly1305 with `node:crypto`.
|
|
195
|
+
*
|
|
196
|
+
* **Details**
|
|
197
|
+
*
|
|
198
|
+
* `implementations` maps algorithm names to implementations that replace
|
|
199
|
+
* `crypto.subtle` or the algorithm's pure TypeScript code. They follow the
|
|
200
|
+
* {@link Implementation} contract and run only for byte-backed keys, after the
|
|
201
|
+
* layer has checked the nonce, plaintext, and ciphertext lengths, so errors are
|
|
202
|
+
* those of {@link layerWebCrypto}. `CryptoKey`-backed keys run on
|
|
203
|
+
* `crypto.subtle`, and generated keys come from `SecureRandom`. Without
|
|
204
|
+
* `implementations`, the layer is {@link layerWebCrypto}.
|
|
205
|
+
*
|
|
206
|
+
* **Gotchas**
|
|
207
|
+
*
|
|
208
|
+
* An implementation receives the key's own bytes, not a copy, so it must not
|
|
209
|
+
* modify or keep them.
|
|
210
|
+
*
|
|
211
|
+
* **Example** (Running ChaCha20-Poly1305 natively)
|
|
212
|
+
*
|
|
213
|
+
* ```ts
|
|
214
|
+
* import { Layer } from "effect"
|
|
215
|
+
* import { Aead, SecureRandom } from "effect/crypto"
|
|
216
|
+
*
|
|
217
|
+
* declare const nativeChacha: Aead.Implementation
|
|
218
|
+
*
|
|
219
|
+
* const layer = Aead.layerWebCryptoWith({
|
|
220
|
+
* implementations: { chacha20Poly1305: nativeChacha }
|
|
221
|
+
* }).pipe(Layer.provide(SecureRandom.layerWebCrypto))
|
|
222
|
+
* ```
|
|
223
|
+
*
|
|
224
|
+
* @stability unstable
|
|
225
|
+
* @category layers
|
|
226
|
+
* @since 4.0.0
|
|
227
|
+
*/
|
|
228
|
+
export const layerWebCryptoWith = options => Layer.effect(Aead, Effect.gen(function* () {
|
|
229
|
+
const random = yield* SecureRandom.SecureRandom;
|
|
230
|
+
const crypto = yield* WebCrypto;
|
|
231
|
+
const cryptoKeyFor = KeyModel.makeCache((subtle, bytes) => subtle.importKey("raw", bytes, "AES-GCM", false, ["encrypt", "decrypt"]));
|
|
232
|
+
const implementations = options.implementations;
|
|
233
|
+
// A supplied implementation runs only for byte-backed keys, so CryptoKeys
|
|
234
|
+
// stay on `crypto.subtle`.
|
|
235
|
+
const implementationFor = key => {
|
|
236
|
+
const supplied = implementations?.[key.algorithm.name];
|
|
237
|
+
return supplied !== undefined && KeyModel.material(key)._tag === "Bytes" ? supplied : key.algorithm.implementation;
|
|
238
|
+
};
|
|
239
|
+
const gcm = (method, key, data, options) => {
|
|
240
|
+
const params = {
|
|
241
|
+
name: "AES-GCM",
|
|
242
|
+
iv: options.nonce,
|
|
243
|
+
tagLength: 128,
|
|
244
|
+
...(options.aad === undefined ? {} : {
|
|
245
|
+
additionalData: options.aad
|
|
246
|
+
})
|
|
247
|
+
};
|
|
248
|
+
return internal.run("Aead", method, key.algorithm.name, crypto, async subtle => new Uint8Array(await subtle[method](params, await cryptoKeyFor(subtle, key), data)), cause => internal.webCryptoError("Aead", method, key.algorithm.name, cause, method === "decrypt" ? () => new CryptoError.DecryptionFailed() : undefined));
|
|
249
|
+
};
|
|
250
|
+
const run = method => (key, data, options) => Effect.suspend(() => {
|
|
251
|
+
const failure = checkArguments(method, key, data, options);
|
|
252
|
+
if (failure !== undefined) return failure;
|
|
253
|
+
const implementation = implementationFor(key);
|
|
254
|
+
return implementation === undefined ? gcm(method, key, data, options) : runImplementation(method, implementation, key, data, options);
|
|
255
|
+
});
|
|
256
|
+
return Aead.of({
|
|
257
|
+
generateKey: algorithm => Effect.map(random.randomBytes(algorithm.keyLength), bytes => KeyModel.makeBytes(KeyProto, algorithm, bytes)),
|
|
258
|
+
encrypt: run("encrypt"),
|
|
259
|
+
decrypt: run("decrypt")
|
|
260
|
+
});
|
|
261
|
+
}));
|
|
262
|
+
/**
|
|
263
|
+
* Layer that provides `Aead` on the `WebCrypto` reference.
|
|
264
|
+
*
|
|
265
|
+
* **Details**
|
|
266
|
+
*
|
|
267
|
+
* AES-GCM runs on `crypto.subtle`. The layer imports a byte-backed key on
|
|
268
|
+
* first use and caches the `CryptoKey`. ChaCha20-Poly1305 and
|
|
269
|
+
* XChaCha20-Poly1305 always run the pure TypeScript implementation, with no
|
|
270
|
+
* feature detection. Generated keys come from `SecureRandom`, so a seeded
|
|
271
|
+
* `SecureRandom` gives reproducible keys.
|
|
272
|
+
*
|
|
273
|
+
* @stability unstable
|
|
274
|
+
* @category layers
|
|
275
|
+
* @since 4.0.0
|
|
276
|
+
*/
|
|
277
|
+
export const layerWebCrypto = /*#__PURE__*/layerWebCryptoWith({});
|
|
278
|
+
/**
|
|
279
|
+
* Builds a key from raw key bytes.
|
|
280
|
+
*
|
|
281
|
+
* **Details**
|
|
282
|
+
*
|
|
283
|
+
* Copies the bytes, including Node.js `Buffer` inputs. A length other than
|
|
284
|
+
* the algorithm's key length fails with an `InvalidKey` reason. AES-192 is
|
|
285
|
+
* not supported.
|
|
286
|
+
*
|
|
287
|
+
* @stability unstable
|
|
288
|
+
* @category constructors
|
|
289
|
+
* @since 4.0.0
|
|
290
|
+
*/
|
|
291
|
+
export const key = (algorithm, bytes) => KeyModel.fromBytes("Aead", "key", KeyProto, algorithm, bytes, KeyModel.checkKeyLength(algorithm));
|
|
292
|
+
/**
|
|
293
|
+
* Builds an AES-GCM key from an existing `CryptoKey`, such as a
|
|
294
|
+
* non-extractable one.
|
|
295
|
+
*
|
|
296
|
+
* **Details**
|
|
297
|
+
*
|
|
298
|
+
* The `CryptoKey` must be a secret AES-GCM key of the algorithm's length with
|
|
299
|
+
* both the `encrypt` and `decrypt` usages, since a key reaches both
|
|
300
|
+
* operations. Otherwise the constructor fails with an `InvalidKey` reason. It
|
|
301
|
+
* must come from the `Crypto` object of the `WebCrypto` reference.
|
|
302
|
+
*
|
|
303
|
+
* ChaCha20-Poly1305 and XChaCha20-Poly1305 never run on `crypto.subtle`, so
|
|
304
|
+
* passing them is a type error.
|
|
305
|
+
*
|
|
306
|
+
* @stability unstable
|
|
307
|
+
* @category constructors
|
|
308
|
+
* @since 4.0.0
|
|
309
|
+
*/
|
|
310
|
+
export const fromCryptoKey = (algorithm, cryptoKey) => algorithm.implementation !== undefined ? internal.invalidKey("Aead", "fromCryptoKey", `${algorithm.name} keys cannot be CryptoKeys`) : KeyModel.fromCryptoKey("Aead", "fromCryptoKey", KeyProto, algorithm, cryptoKey, {
|
|
311
|
+
type: "secret",
|
|
312
|
+
name: "AES-GCM",
|
|
313
|
+
usages: ["encrypt", "decrypt"],
|
|
314
|
+
usagePolicy: "all",
|
|
315
|
+
check: KeyModel.checkAesLength("AES-GCM", algorithm.keyLength)
|
|
316
|
+
});
|
|
317
|
+
/**
|
|
318
|
+
* Exports a key's bytes.
|
|
319
|
+
*
|
|
320
|
+
* **Details**
|
|
321
|
+
*
|
|
322
|
+
* Returns a fresh `Uint8Array` that shares no memory with the key. A
|
|
323
|
+
* `CryptoKey`-backed key is exported on the `WebCrypto` reference, and fails
|
|
324
|
+
* with a `NotExtractable` reason when the `CryptoKey` is not extractable.
|
|
325
|
+
*
|
|
326
|
+
* @stability unstable
|
|
327
|
+
* @category converting
|
|
328
|
+
* @since 4.0.0
|
|
329
|
+
*/
|
|
330
|
+
export const toBytes = key => KeyModel.toBytes("Aead", key, KeyModel.exportRaw);
|
|
331
|
+
//# sourceMappingURL=Aead.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Aead.js","names":[],"sources":["../../src/crypto/Aead.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unauthenticated encryption with no integrity: compose with `Mac`.
|
|
3
|
+
*
|
|
4
|
+
* AES-CTR and AES-CBC with PKCS#7 padding, for protocols that pair them with a
|
|
5
|
+
* MAC, such as SSH, SRTP, JWE, CMS, and Matrix. Anyone can change the
|
|
6
|
+
* ciphertext without being detected, so authenticate it with `Mac`
|
|
7
|
+
* (encrypt-then-MAC), or use `Aead` instead.
|
|
8
|
+
*
|
|
9
|
+
* The {@link Cipher} service generates keys, encrypts, and decrypts. The
|
|
10
|
+
* top-level {@link key}, {@link fromCryptoKey}, and {@link toBytes} functions
|
|
11
|
+
* build and export keys without a service. Both modes run on `crypto.subtle`.
|
|
12
|
+
*
|
|
13
|
+
* Keys are opaque. They hold either key bytes or a `CryptoKey`, display only
|
|
14
|
+
* their algorithm, and compare by reference.
|
|
15
|
+
*
|
|
16
|
+
* **Gotchas**
|
|
17
|
+
*
|
|
18
|
+
* - Never reuse an IV with the same key. For AES-CTR a repeated counter block
|
|
19
|
+
* reveals the XOR of two plaintexts. For AES-CBC the IV must also be
|
|
20
|
+
* unpredictable.
|
|
21
|
+
* - AES-CTR decryption never fails, whatever the ciphertext. AES-CBC
|
|
22
|
+
* decryption fails with one `DecryptionFailed` reason for both bad padding
|
|
23
|
+
* and a bad length, so callers cannot tell them apart. Verify a MAC before
|
|
24
|
+
* decrypting, or the error itself becomes a padding oracle.
|
|
25
|
+
*
|
|
26
|
+
* @stability unstable
|
|
27
|
+
* @since 4.0.0
|
|
28
|
+
*/
|
|
29
|
+
import * as Context from "../Context.ts";
|
|
30
|
+
import * as Effect from "../Effect.ts";
|
|
31
|
+
import type { Inspectable } from "../Inspectable.ts";
|
|
32
|
+
import * as Layer from "../Layer.ts";
|
|
33
|
+
import * as CryptoError from "./CryptoError.ts";
|
|
34
|
+
import * as SecureRandom from "./SecureRandom.ts";
|
|
35
|
+
declare const TypeId: "~effect/crypto/Cipher/Key";
|
|
36
|
+
/**
|
|
37
|
+
* An unauthenticated cipher algorithm, such as {@link aes256Cbc}.
|
|
38
|
+
*
|
|
39
|
+
* **Details**
|
|
40
|
+
*
|
|
41
|
+
* `mode` is the WebCrypto algorithm name and `keyLength` is in bytes.
|
|
42
|
+
*
|
|
43
|
+
* @stability unstable
|
|
44
|
+
* @category models
|
|
45
|
+
* @since 4.0.0
|
|
46
|
+
*/
|
|
47
|
+
export interface Algorithm {
|
|
48
|
+
readonly name: "aes128Ctr" | "aes256Ctr" | "aes128Cbc" | "aes256Cbc";
|
|
49
|
+
readonly mode: "AES-CTR" | "AES-CBC";
|
|
50
|
+
readonly keyLength: 16 | 32;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* AES-128-CTR, with a 16-byte key.
|
|
54
|
+
*
|
|
55
|
+
* **Details**
|
|
56
|
+
*
|
|
57
|
+
* The 16-byte `iv` is the initial counter block, and the whole 128-bit block
|
|
58
|
+
* is the counter, as in OpenSSL, Node.js, Go's `cipher.NewCTR`, and noble.
|
|
59
|
+
*
|
|
60
|
+
* @stability unstable
|
|
61
|
+
* @category algorithms
|
|
62
|
+
* @since 4.0.0
|
|
63
|
+
*/
|
|
64
|
+
export declare const aes128Ctr: Algorithm;
|
|
65
|
+
/**
|
|
66
|
+
* AES-256-CTR, with a 32-byte key.
|
|
67
|
+
*
|
|
68
|
+
* **Details**
|
|
69
|
+
*
|
|
70
|
+
* The 16-byte `iv` is the initial counter block, and the whole 128-bit block
|
|
71
|
+
* is the counter, as in OpenSSL, Node.js, Go's `cipher.NewCTR`, and noble.
|
|
72
|
+
*
|
|
73
|
+
* @stability unstable
|
|
74
|
+
* @category algorithms
|
|
75
|
+
* @since 4.0.0
|
|
76
|
+
*/
|
|
77
|
+
export declare const aes256Ctr: Algorithm;
|
|
78
|
+
/**
|
|
79
|
+
* AES-128-CBC with PKCS#7 padding, with a 16-byte key.
|
|
80
|
+
*
|
|
81
|
+
* @stability unstable
|
|
82
|
+
* @category algorithms
|
|
83
|
+
* @since 4.0.0
|
|
84
|
+
*/
|
|
85
|
+
export declare const aes128Cbc: Algorithm;
|
|
86
|
+
/**
|
|
87
|
+
* AES-256-CBC with PKCS#7 padding, with a 32-byte key.
|
|
88
|
+
*
|
|
89
|
+
* @stability unstable
|
|
90
|
+
* @category algorithms
|
|
91
|
+
* @since 4.0.0
|
|
92
|
+
*/
|
|
93
|
+
export declare const aes256Cbc: Algorithm;
|
|
94
|
+
/**
|
|
95
|
+
* An opaque unauthenticated cipher key for the algorithm `A`.
|
|
96
|
+
*
|
|
97
|
+
* **Details**
|
|
98
|
+
*
|
|
99
|
+
* The key holds either key bytes or a `CryptoKey` from {@link fromCryptoKey}.
|
|
100
|
+
* `toString`, `toJSON`, and `inspect` show only the algorithm. Keys compare
|
|
101
|
+
* by reference and do not implement `Equal`, because comparing key bytes is
|
|
102
|
+
* not constant time.
|
|
103
|
+
*
|
|
104
|
+
* @stability unstable
|
|
105
|
+
* @category models
|
|
106
|
+
* @since 4.0.0
|
|
107
|
+
*/
|
|
108
|
+
export interface Key<out A extends Algorithm = Algorithm> extends Inspectable {
|
|
109
|
+
readonly [TypeId]: typeof TypeId;
|
|
110
|
+
readonly algorithm: A;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Checks whether a value is a {@link Key}.
|
|
114
|
+
*
|
|
115
|
+
* @stability unstable
|
|
116
|
+
* @category guards
|
|
117
|
+
* @since 4.0.0
|
|
118
|
+
*/
|
|
119
|
+
export declare const isKey: (u: unknown) => u is Key;
|
|
120
|
+
declare const Cipher_base: Context.ServiceClass<Cipher, "effect/crypto/Cipher", {
|
|
121
|
+
/**
|
|
122
|
+
* Generates a random key of the algorithm's length from `SecureRandom`
|
|
123
|
+
* bytes.
|
|
124
|
+
*/
|
|
125
|
+
readonly generateKey: <A extends Algorithm>(algorithm: A) => Effect.Effect<Key<A>, CryptoError.CryptoError>;
|
|
126
|
+
/**
|
|
127
|
+
* Encrypts `plaintext`. AES-CTR output has the plaintext's length, and
|
|
128
|
+
* AES-CBC output is padded to the next multiple of 16 bytes.
|
|
129
|
+
*
|
|
130
|
+
* `iv` is 16 bytes: the initial counter block for AES-CTR, and the
|
|
131
|
+
* initialization vector for AES-CBC.
|
|
132
|
+
*/
|
|
133
|
+
readonly encrypt: (key: Key, plaintext: Uint8Array, options: {
|
|
134
|
+
readonly iv: Uint8Array;
|
|
135
|
+
}) => Effect.Effect<Uint8Array, CryptoError.CryptoError>;
|
|
136
|
+
/**
|
|
137
|
+
* Decrypts `ciphertext`. AES-CBC fails with a `DecryptionFailed` reason for
|
|
138
|
+
* bad padding or a bad length; AES-CTR never fails on the ciphertext.
|
|
139
|
+
*/
|
|
140
|
+
readonly decrypt: (key: Key, ciphertext: Uint8Array, options: {
|
|
141
|
+
readonly iv: Uint8Array;
|
|
142
|
+
}) => Effect.Effect<Uint8Array, CryptoError.CryptoError>;
|
|
143
|
+
}>;
|
|
144
|
+
/**
|
|
145
|
+
* Service that generates keys, encrypts, and decrypts without
|
|
146
|
+
* authentication.
|
|
147
|
+
*
|
|
148
|
+
* **Example** (Encrypting with AES-CBC)
|
|
149
|
+
*
|
|
150
|
+
* ```ts import.meta.vitest
|
|
151
|
+
* import { Effect, Layer } from "effect"
|
|
152
|
+
* import { Cipher, SecureRandom } from "effect/crypto"
|
|
153
|
+
*
|
|
154
|
+
* const program = Effect.gen(function*() {
|
|
155
|
+
* const cipher = yield* Cipher.Cipher
|
|
156
|
+
* const random = yield* SecureRandom.SecureRandom
|
|
157
|
+
* const key = yield* cipher.generateKey(Cipher.aes256Cbc)
|
|
158
|
+
* const iv = yield* random.randomBytes(16)
|
|
159
|
+
* const ciphertext = yield* cipher.encrypt(key, new TextEncoder().encode("secret"), { iv })
|
|
160
|
+
* const plaintext = yield* cipher.decrypt(key, ciphertext, { iv })
|
|
161
|
+
* return [ciphertext.length, new TextDecoder().decode(plaintext)]
|
|
162
|
+
* })
|
|
163
|
+
*
|
|
164
|
+
* const layer = Cipher.layerWebCrypto.pipe(Layer.provideMerge(SecureRandom.layerWebCrypto))
|
|
165
|
+
* await Effect.runPromise(program.pipe(Effect.provide(layer))) // => [16, "secret"]
|
|
166
|
+
* ```
|
|
167
|
+
*
|
|
168
|
+
* @stability unstable
|
|
169
|
+
* @category services
|
|
170
|
+
* @since 4.0.0
|
|
171
|
+
*/
|
|
172
|
+
export declare class Cipher extends Cipher_base {
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Layer that provides `Cipher` on the `WebCrypto` reference.
|
|
176
|
+
*
|
|
177
|
+
* **Details**
|
|
178
|
+
*
|
|
179
|
+
* Encryption and decryption run on `crypto.subtle`. The layer imports a
|
|
180
|
+
* byte-backed key on first use and caches the `CryptoKey`. AES-CTR uses the
|
|
181
|
+
* whole 128-bit block as the counter (`length: 128`), which every runtime
|
|
182
|
+
* supports. Generated keys come from `SecureRandom`, so a seeded
|
|
183
|
+
* `SecureRandom` gives reproducible keys.
|
|
184
|
+
*
|
|
185
|
+
* @stability unstable
|
|
186
|
+
* @category layers
|
|
187
|
+
* @since 4.0.0
|
|
188
|
+
*/
|
|
189
|
+
export declare const layerWebCrypto: Layer.Layer<Cipher, never, SecureRandom.SecureRandom>;
|
|
190
|
+
/**
|
|
191
|
+
* Builds a key from raw key bytes.
|
|
192
|
+
*
|
|
193
|
+
* **Details**
|
|
194
|
+
*
|
|
195
|
+
* Copies the bytes, including Node.js `Buffer` inputs. A length other than
|
|
196
|
+
* the algorithm's key length fails with an `InvalidKey` reason. AES-192 is
|
|
197
|
+
* not supported.
|
|
198
|
+
*
|
|
199
|
+
* @stability unstable
|
|
200
|
+
* @category constructors
|
|
201
|
+
* @since 4.0.0
|
|
202
|
+
*/
|
|
203
|
+
export declare const key: <A extends Algorithm>(algorithm: A, bytes: Uint8Array) => Effect.Effect<Key<A>, CryptoError.CryptoError>;
|
|
204
|
+
/**
|
|
205
|
+
* Builds a key from an existing `CryptoKey`, such as a non-extractable one.
|
|
206
|
+
*
|
|
207
|
+
* **Details**
|
|
208
|
+
*
|
|
209
|
+
* The `CryptoKey` must be a secret key for the algorithm's mode (`AES-CTR` or
|
|
210
|
+
* `AES-CBC`) and length, with both the `encrypt` and `decrypt` usages, since
|
|
211
|
+
* a key reaches both operations. Otherwise the constructor fails with an
|
|
212
|
+
* `InvalidKey` reason. It must come from the `Crypto` object of the
|
|
213
|
+
* `WebCrypto` reference.
|
|
214
|
+
*
|
|
215
|
+
* @stability unstable
|
|
216
|
+
* @category constructors
|
|
217
|
+
* @since 4.0.0
|
|
218
|
+
*/
|
|
219
|
+
export declare const fromCryptoKey: <A extends Algorithm>(algorithm: A, cryptoKey: CryptoKey) => Effect.Effect<Key<A>, CryptoError.CryptoError>;
|
|
220
|
+
/**
|
|
221
|
+
* Exports a key's bytes.
|
|
222
|
+
*
|
|
223
|
+
* **Details**
|
|
224
|
+
*
|
|
225
|
+
* Returns a fresh `Uint8Array` that shares no memory with the key. A
|
|
226
|
+
* `CryptoKey`-backed key is exported on the `WebCrypto` reference, and fails
|
|
227
|
+
* with a `NotExtractable` reason when the `CryptoKey` is not extractable.
|
|
228
|
+
*
|
|
229
|
+
* @stability unstable
|
|
230
|
+
* @category converting
|
|
231
|
+
* @since 4.0.0
|
|
232
|
+
*/
|
|
233
|
+
export declare const toBytes: (key: Key) => Effect.Effect<Uint8Array, CryptoError.CryptoError>;
|
|
234
|
+
export {};
|
|
235
|
+
//# sourceMappingURL=Cipher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Cipher.d.ts","sourceRoot":"","sources":["../../src/crypto/Cipher.ts"],"names":[],"mappings":"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"}
|