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
package/src/Schema.ts
CHANGED
|
@@ -19,6 +19,14 @@ import type * as Brand from "./Brand.ts"
|
|
|
19
19
|
import * as ByteSize_ from "./ByteSize.ts"
|
|
20
20
|
import * as Cause_ from "./Cause.ts"
|
|
21
21
|
import * as Chunk_ from "./Chunk.ts"
|
|
22
|
+
import * as Aead_ from "./crypto/Aead.ts"
|
|
23
|
+
import * as Cipher_ from "./crypto/Cipher.ts"
|
|
24
|
+
import type * as CryptoError_ from "./crypto/CryptoError.ts"
|
|
25
|
+
import * as KeyAgreement_ from "./crypto/KeyAgreement.ts"
|
|
26
|
+
import * as KeyFormat_ from "./crypto/KeyFormat.ts"
|
|
27
|
+
import * as KeyWrap_ from "./crypto/KeyWrap.ts"
|
|
28
|
+
import * as Mac_ from "./crypto/Mac.ts"
|
|
29
|
+
import * as Signature_ from "./crypto/Signature.ts"
|
|
22
30
|
import * as Data from "./Data.ts"
|
|
23
31
|
import * as DateTime from "./DateTime.ts"
|
|
24
32
|
import type { Differ } from "./Differ.ts"
|
|
@@ -3983,11 +3991,18 @@ export interface $Record<Key extends Record.Key, Value extends Constraint> exten
|
|
|
3983
3991
|
*
|
|
3984
3992
|
* **Gotchas**
|
|
3985
3993
|
*
|
|
3994
|
+
* Dynamic records reject value schemas wrapped with {@link optionalKey} or
|
|
3995
|
+
* {@link optional}. Index signatures already allow keys to be absent; use
|
|
3996
|
+
* {@link UndefinedOr} when existing entries may contain `undefined`. Optional
|
|
3997
|
+
* value schemas remain valid for finite literal keys, which become declared
|
|
3998
|
+
* properties.
|
|
3999
|
+
*
|
|
3986
4000
|
* When decoded or encoded key transformations produce the same property key,
|
|
3987
4001
|
* sequential parsing applies selected own properties in selection order, so
|
|
3988
4002
|
* the later selected property overwrites the earlier value. Dynamic key
|
|
3989
|
-
* selection always examines own properties. Finite literal keys are
|
|
3990
|
-
* fields and may therefore be inherited. Output key order is not
|
|
4003
|
+
* selection always examines own properties. Finite literal and enum keys are
|
|
4004
|
+
* declared fields and may therefore be inherited. Output key order is not
|
|
4005
|
+
* guaranteed.
|
|
3991
4006
|
*
|
|
3992
4007
|
* **Example** (Defining a string-keyed record of numbers)
|
|
3993
4008
|
*
|
|
@@ -6322,9 +6337,35 @@ type Flatten<Schemas> = Schemas extends readonly [infer Head, ...infer Tail]
|
|
|
6322
6337
|
type MatchCasesResult<Cases> = {
|
|
6323
6338
|
[K in keyof Cases]-?: NonNullable<Cases[K]> extends (...args: Array<any>) => infer R ? R : never
|
|
6324
6339
|
}[keyof Cases]
|
|
6325
|
-
type MatchOrElseResult<Cases, OrElse
|
|
6326
|
-
MatchCasesResult<Cases> |
|
|
6340
|
+
type MatchOrElseResult<Cases, OrElse> = Unify<
|
|
6341
|
+
MatchCasesResult<Cases> | (OrElse extends (...args: Array<any>) => infer R ? R : never)
|
|
6327
6342
|
>
|
|
6343
|
+
type TaggedUnionMatch<Cases extends Record<PropertyKey, Constraint>, Value> = {
|
|
6344
|
+
<Handlers extends { [K in keyof Cases]: (value: Cases[K]["Type"]) => any }>(
|
|
6345
|
+
value: Value,
|
|
6346
|
+
cases: Handlers
|
|
6347
|
+
): Unify<ReturnType<Handlers[keyof Cases]>>
|
|
6348
|
+
<Handlers extends { [K in keyof Cases]: (value: Cases[K]["Type"]) => any }>(
|
|
6349
|
+
cases: Handlers
|
|
6350
|
+
): (value: Value) => Unify<ReturnType<Handlers[keyof Cases]>>
|
|
6351
|
+
}
|
|
6352
|
+
type TaggedUnionMatchOrElse<Cases extends Record<PropertyKey, Constraint>, Value, Tag extends PropertyKey> = {
|
|
6353
|
+
<Handlers, OrElse>(
|
|
6354
|
+
value: Value,
|
|
6355
|
+
cases:
|
|
6356
|
+
& Handlers
|
|
6357
|
+
& { [K in keyof Cases]?: (value: Cases[K]["Type"]) => any }
|
|
6358
|
+
& (Exclude<keyof Handlers, keyof Cases> extends never ? unknown : never),
|
|
6359
|
+
orElse: OrElse & ((value: Exclude<Value, { readonly [K in Tag]: keyof Handlers }>) => any)
|
|
6360
|
+
): MatchOrElseResult<Handlers, OrElse>
|
|
6361
|
+
<Handlers, OrElse>(
|
|
6362
|
+
cases:
|
|
6363
|
+
& Handlers
|
|
6364
|
+
& { [K in keyof Cases]?: (value: Cases[K]["Type"]) => any }
|
|
6365
|
+
& (Exclude<keyof Handlers, keyof Cases> extends never ? unknown : never),
|
|
6366
|
+
orElse: OrElse & ((value: Exclude<Value, { readonly [K in Tag]: keyof Handlers }>) => any)
|
|
6367
|
+
): (value: Value) => MatchOrElseResult<Handlers, OrElse>
|
|
6368
|
+
}
|
|
6328
6369
|
type TaggedUnionUtils<
|
|
6329
6370
|
Tag extends PropertyKey,
|
|
6330
6371
|
Members extends ReadonlyArray<Constraint & { readonly Type: { readonly [K in Tag]: PropertyKey } }>,
|
|
@@ -6345,46 +6386,15 @@ type TaggedUnionUtils<
|
|
|
6345
6386
|
keys: ReadonlyArray<Keys>
|
|
6346
6387
|
) => (value: Members[number]["Type"]) => value is Extract<Members[number]["Type"], { readonly [K in Tag]: Keys }>
|
|
6347
6388
|
readonly guards: { [M in Flattened[number] as M["Type"][Tag]]: (u: unknown) => u is M["Type"] }
|
|
6348
|
-
readonly match:
|
|
6349
|
-
|
|
6350
|
-
|
|
6351
|
-
|
|
6352
|
-
|
|
6353
|
-
|
|
6354
|
-
|
|
6355
|
-
|
|
6356
|
-
|
|
6357
|
-
Cases extends { [M in Flattened[number] as M["Type"][Tag]]: (value: M["Type"]) => any }
|
|
6358
|
-
>(
|
|
6359
|
-
cases: Cases
|
|
6360
|
-
): (value: Members[number]["Type"]) => Cases[keyof Cases] extends (value: any) => infer R ? Unify<R>
|
|
6361
|
-
: never
|
|
6362
|
-
}
|
|
6363
|
-
readonly matchOrElse: {
|
|
6364
|
-
<
|
|
6365
|
-
Cases extends
|
|
6366
|
-
& { [M in Flattened[number] as M["Type"][Tag]]+?: (value: M["Type"]) => any }
|
|
6367
|
-
& { [K in Exclude<keyof Cases, Flattened[number]["Type"][Tag]>]: never },
|
|
6368
|
-
OrElse extends (
|
|
6369
|
-
value: Exclude<Members[number]["Type"], { readonly [K in Tag]: keyof Cases }>
|
|
6370
|
-
) => any
|
|
6371
|
-
>(
|
|
6372
|
-
value: Members[number]["Type"],
|
|
6373
|
-
cases: Cases,
|
|
6374
|
-
orElse: OrElse
|
|
6375
|
-
): MatchOrElseResult<Cases, OrElse>
|
|
6376
|
-
<
|
|
6377
|
-
Cases extends
|
|
6378
|
-
& { [M in Flattened[number] as M["Type"][Tag]]+?: (value: M["Type"]) => any }
|
|
6379
|
-
& { [K in Exclude<keyof Cases, Flattened[number]["Type"][Tag]>]: never },
|
|
6380
|
-
OrElse extends (
|
|
6381
|
-
value: Exclude<Members[number]["Type"], { readonly [K in Tag]: keyof Cases }>
|
|
6382
|
-
) => any
|
|
6383
|
-
>(
|
|
6384
|
-
cases: Cases,
|
|
6385
|
-
orElse: OrElse
|
|
6386
|
-
): (value: Members[number]["Type"]) => MatchOrElseResult<Cases, OrElse>
|
|
6387
|
-
}
|
|
6389
|
+
readonly match: TaggedUnionMatch<
|
|
6390
|
+
{ readonly [M in Flattened[number] as M["Type"][Tag]]: M },
|
|
6391
|
+
Members[number]["Type"]
|
|
6392
|
+
>
|
|
6393
|
+
readonly matchOrElse: TaggedUnionMatchOrElse<
|
|
6394
|
+
{ readonly [M in Flattened[number] as M["Type"][Tag]]: M },
|
|
6395
|
+
Members[number]["Type"],
|
|
6396
|
+
Tag
|
|
6397
|
+
>
|
|
6388
6398
|
}
|
|
6389
6399
|
/**
|
|
6390
6400
|
* Type-level representation returned by {@link toTaggedUnion}.
|
|
@@ -6534,26 +6544,8 @@ export interface TaggedUnion<Cases extends Record<string, Constraint>> extends
|
|
|
6534
6544
|
keys: ReadonlyArray<Keys>
|
|
6535
6545
|
) => (value: Cases[keyof Cases]["Type"]) => value is Extract<Cases[keyof Cases]["Type"], { _tag: Keys }>
|
|
6536
6546
|
readonly guards: { [K in keyof Cases]: (u: unknown) => u is Cases[K]["Type"] }
|
|
6537
|
-
readonly match:
|
|
6538
|
-
|
|
6539
|
-
cases: { [K in keyof Cases]: (value: Cases[K]["Type"]) => Output }
|
|
6540
|
-
): (value: Cases[keyof Cases]["Type"]) => Output
|
|
6541
|
-
<Output>(
|
|
6542
|
-
value: Cases[keyof Cases]["Type"],
|
|
6543
|
-
cases: { [K in keyof Cases]: (value: Cases[K]["Type"]) => Output }
|
|
6544
|
-
): Output
|
|
6545
|
-
}
|
|
6546
|
-
readonly matchOrElse: {
|
|
6547
|
-
<Output>(
|
|
6548
|
-
value: Cases[keyof Cases]["Type"],
|
|
6549
|
-
cases: { [K in keyof Cases]?: (value: Cases[K]["Type"]) => Output },
|
|
6550
|
-
orElse: (value: Cases[keyof Cases]["Type"]) => Output
|
|
6551
|
-
): Output
|
|
6552
|
-
<Output>(
|
|
6553
|
-
cases: { [K in keyof Cases]?: (value: Cases[K]["Type"]) => Output },
|
|
6554
|
-
orElse: (value: Cases[keyof Cases]["Type"]) => Output
|
|
6555
|
-
): (value: Cases[keyof Cases]["Type"]) => Output
|
|
6556
|
-
}
|
|
6547
|
+
readonly match: TaggedUnionMatch<Cases, Cases[keyof Cases]["Type"]>
|
|
6548
|
+
readonly matchOrElse: TaggedUnionMatchOrElse<Cases, Cases[keyof Cases]["Type"], "_tag">
|
|
6557
6549
|
}
|
|
6558
6550
|
/**
|
|
6559
6551
|
* Builds a discriminated union from a record of field sets, one per variant.
|
|
@@ -6737,9 +6729,8 @@ export function link<T>() {
|
|
|
6737
6729
|
* )
|
|
6738
6730
|
*
|
|
6739
6731
|
* const result = Schema.decodeUnknownResult(schema)({ password: "123456", confirmPassword: "1234567" })
|
|
6740
|
-
*
|
|
6741
|
-
*
|
|
6742
|
-
* }
|
|
6732
|
+
* const message = Result.isFailure(result) ? result.failure.message : ""
|
|
6733
|
+
* message // => "password and confirmPassword must match\n at [\"password\"]"
|
|
6743
6734
|
* ```
|
|
6744
6735
|
*
|
|
6745
6736
|
* **Example** (Reporting multiple failures at once)
|
|
@@ -6759,9 +6750,8 @@ export function link<T>() {
|
|
|
6759
6750
|
* )
|
|
6760
6751
|
*
|
|
6761
6752
|
* const result = Schema.decodeUnknownResult(schema)({ a: 1, b: 0, c: 0 })
|
|
6762
|
-
*
|
|
6763
|
-
*
|
|
6764
|
-
* }
|
|
6753
|
+
* const message = Result.isFailure(result) ? result.failure.message : ""
|
|
6754
|
+
* message // => "b must be greater than 0\n at [\"b\"]\nc must be greater than 0\n at [\"c\"]"
|
|
6765
6755
|
* ```
|
|
6766
6756
|
*
|
|
6767
6757
|
* @stability stable
|
|
@@ -6904,8 +6894,8 @@ export function isPattern(
|
|
|
6904
6894
|
const flags = regExp.flags
|
|
6905
6895
|
const canExport = /^[dg]*uy?$/.test(flags)
|
|
6906
6896
|
const runtimeRegExp = flags === ""
|
|
6907
|
-
? `new RegExp(${format(source)})`
|
|
6908
|
-
: `new RegExp(${format(source)}, ${format(flags)})`
|
|
6897
|
+
? `new globalThis.RegExp(${format(source)})`
|
|
6898
|
+
: `new globalThis.RegExp(${format(source)}, ${format(flags)})`
|
|
6909
6899
|
return SchemaAST.isPattern(regExp, {
|
|
6910
6900
|
toJsonSchema: () => canExport ? { pattern: flags.endsWith("y") ? `^(?:${source})` : source } : [{}, true],
|
|
6911
6901
|
toCode: () => ({ runtime: `Schema.isPattern(${runtimeRegExp})` }),
|
|
@@ -7037,7 +7027,7 @@ export function isUUID(version?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8, annotations?: An
|
|
|
7037
7027
|
)
|
|
7038
7028
|
}
|
|
7039
7029
|
|
|
7040
|
-
const GUID_REGEXP = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/
|
|
7030
|
+
const GUID_REGEXP = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/u
|
|
7041
7031
|
/**
|
|
7042
7032
|
* Validates that a string has the GUID / UUID textual shape.
|
|
7043
7033
|
*
|
|
@@ -7072,18 +7062,22 @@ export function isGUID(annotations?: Annotations.Filter) {
|
|
|
7072
7062
|
id: "effect/schema/isGUID",
|
|
7073
7063
|
payload: null
|
|
7074
7064
|
},
|
|
7075
|
-
toJsonSchema: () => ({ pattern: GUID_REGEXP.source }),
|
|
7076
7065
|
toCode: () => ({ runtime: "Schema.isGUID()" }),
|
|
7077
7066
|
...annotations
|
|
7078
7067
|
}
|
|
7079
7068
|
)
|
|
7080
7069
|
}
|
|
7070
|
+
|
|
7071
|
+
const ULID_REGEXP = /^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$/u
|
|
7081
7072
|
/**
|
|
7082
7073
|
* Validates that a string is a valid ULID (Universally Unique Lexicographically
|
|
7083
7074
|
* Sortable Identifier).
|
|
7084
7075
|
*
|
|
7085
7076
|
* **Details**
|
|
7086
7077
|
*
|
|
7078
|
+
* Accepts uppercase and lowercase characters. The first character must be
|
|
7079
|
+
* between `0` and `7` so the value fits in 128 bits.
|
|
7080
|
+
*
|
|
7087
7081
|
* JSON Schema:
|
|
7088
7082
|
*
|
|
7089
7083
|
* This check corresponds to a `pattern` constraint in JSON Schema that matches
|
|
@@ -7099,20 +7093,63 @@ export function isGUID(annotations?: Annotations.Filter) {
|
|
|
7099
7093
|
* @since 4.0.0
|
|
7100
7094
|
*/
|
|
7101
7095
|
export function isULID(annotations?: Annotations.Filter) {
|
|
7102
|
-
const regExp = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/
|
|
7103
7096
|
return isPattern(
|
|
7104
|
-
|
|
7097
|
+
ULID_REGEXP,
|
|
7105
7098
|
{
|
|
7106
7099
|
representation: {
|
|
7107
7100
|
id: "effect/schema/isULID",
|
|
7108
7101
|
payload: null
|
|
7109
7102
|
},
|
|
7110
|
-
toJsonSchema: () => ({ pattern: regExp.source }),
|
|
7111
7103
|
toCode: () => ({ runtime: "Schema.isULID()" }),
|
|
7112
7104
|
...annotations
|
|
7113
7105
|
}
|
|
7114
7106
|
)
|
|
7115
7107
|
}
|
|
7108
|
+
|
|
7109
|
+
// oxlint-disable-next-line no-control-regex
|
|
7110
|
+
const ASCII_REGEXP = /^[\x00-\x7F]*$/u
|
|
7111
|
+
/**
|
|
7112
|
+
* Validates that a string contains only ASCII characters.
|
|
7113
|
+
*
|
|
7114
|
+
* **When to use**
|
|
7115
|
+
*
|
|
7116
|
+
* Use when a value must stay within the 7-bit ASCII range, for example
|
|
7117
|
+
* identifiers, protocol tokens, or data sent to systems that reject
|
|
7118
|
+
* non-ASCII input.
|
|
7119
|
+
*
|
|
7120
|
+
* **Details**
|
|
7121
|
+
*
|
|
7122
|
+
* This check accepts strings whose characters are all in the range `U+0000`
|
|
7123
|
+
* to `U+007F`, including control characters and the empty string.
|
|
7124
|
+
*
|
|
7125
|
+
* JSON Schema:
|
|
7126
|
+
*
|
|
7127
|
+
* This check corresponds to a `pattern` constraint in JSON Schema that matches
|
|
7128
|
+
* ASCII-only strings.
|
|
7129
|
+
*
|
|
7130
|
+
* Arbitrary:
|
|
7131
|
+
*
|
|
7132
|
+
* During arbitrary generation, this applies a `patterns`
|
|
7133
|
+
* constraint to ensure generated strings match the ASCII pattern.
|
|
7134
|
+
*
|
|
7135
|
+
* @stability unstable
|
|
7136
|
+
* @category validation
|
|
7137
|
+
* @since 4.0.6
|
|
7138
|
+
*/
|
|
7139
|
+
export function isAscii(annotations?: Annotations.Filter) {
|
|
7140
|
+
return isPattern(
|
|
7141
|
+
ASCII_REGEXP,
|
|
7142
|
+
{
|
|
7143
|
+
expected: "an ASCII string",
|
|
7144
|
+
representation: {
|
|
7145
|
+
id: "effect/schema/isAscii",
|
|
7146
|
+
payload: null
|
|
7147
|
+
},
|
|
7148
|
+
toCode: () => ({ runtime: "Schema.isAscii()" }),
|
|
7149
|
+
...annotations
|
|
7150
|
+
}
|
|
7151
|
+
)
|
|
7152
|
+
}
|
|
7116
7153
|
/**
|
|
7117
7154
|
* Validates that a string is valid Base64 encoded data.
|
|
7118
7155
|
*
|
|
@@ -7392,16 +7429,18 @@ const CAPITALIZED_PATTERN = "^(?:[^a-z][\\s\\S]*)?$"
|
|
|
7392
7429
|
* @since 4.0.0
|
|
7393
7430
|
*/
|
|
7394
7431
|
export function isCapitalized(annotations?: Annotations.Filter) {
|
|
7395
|
-
const regExp = new globalThis.RegExp(CAPITALIZED_PATTERN)
|
|
7396
7432
|
return makeFilter(
|
|
7397
|
-
(s: string) =>
|
|
7433
|
+
(s: string) => {
|
|
7434
|
+
const [first = ""] = s
|
|
7435
|
+
return first.toUpperCase() === first
|
|
7436
|
+
},
|
|
7398
7437
|
{
|
|
7399
7438
|
expected: "a string with the first character in uppercase",
|
|
7400
7439
|
representation: {
|
|
7401
7440
|
id: "effect/schema/isCapitalized",
|
|
7402
7441
|
payload: null
|
|
7403
7442
|
},
|
|
7404
|
-
toJsonSchema: () => [{ pattern:
|
|
7443
|
+
toJsonSchema: () => [{ pattern: CAPITALIZED_PATTERN }, true],
|
|
7405
7444
|
toCode: () => ({ runtime: "Schema.isCapitalized()" }),
|
|
7406
7445
|
arbitraryConstraint: {
|
|
7407
7446
|
patterns: [{ source: CAPITALIZED_PATTERN, flags: "" }]
|
|
@@ -7426,16 +7465,18 @@ const UNCAPITALIZED_PATTERN = "^(?:[^A-Z][\\s\\S]*)?$"
|
|
|
7426
7465
|
* @since 4.0.0
|
|
7427
7466
|
*/
|
|
7428
7467
|
export function isUncapitalized(annotations?: Annotations.Filter) {
|
|
7429
|
-
const regExp = new globalThis.RegExp(UNCAPITALIZED_PATTERN)
|
|
7430
7468
|
return makeFilter(
|
|
7431
|
-
(s: string) =>
|
|
7469
|
+
(s: string) => {
|
|
7470
|
+
const [first = ""] = s
|
|
7471
|
+
return first.toLowerCase() === first
|
|
7472
|
+
},
|
|
7432
7473
|
{
|
|
7433
7474
|
expected: "a string with the first character in lowercase",
|
|
7434
7475
|
representation: {
|
|
7435
7476
|
id: "effect/schema/isUncapitalized",
|
|
7436
7477
|
payload: null
|
|
7437
7478
|
},
|
|
7438
|
-
toJsonSchema: () => [{ pattern:
|
|
7479
|
+
toJsonSchema: () => [{ pattern: UNCAPITALIZED_PATTERN }, true],
|
|
7439
7480
|
toCode: () => ({ runtime: "Schema.isUncapitalized()" }),
|
|
7440
7481
|
arbitraryConstraint: {
|
|
7441
7482
|
patterns: [{ source: UNCAPITALIZED_PATTERN, flags: "" }]
|
|
@@ -8064,7 +8105,7 @@ function encodeDatePayload(date: globalThis.Date): string {
|
|
|
8064
8105
|
}
|
|
8065
8106
|
|
|
8066
8107
|
function formatDateRuntime(date: globalThis.Date): string {
|
|
8067
|
-
return `new Date(${format(date.getTime())})`
|
|
8108
|
+
return `new globalThis.Date(${format(date.getTime())})`
|
|
8068
8109
|
}
|
|
8069
8110
|
/**
|
|
8070
8111
|
* Validates that a Date is greater than the specified value (exclusive).
|
|
@@ -9799,8 +9840,7 @@ export interface fromJsonString<S extends Constraint> extends decodeTo<S, String
|
|
|
9799
9840
|
}
|
|
9800
9841
|
|
|
9801
9842
|
const JsonString = String.annotate({
|
|
9802
|
-
expected: "a string that will be decoded as JSON"
|
|
9803
|
-
contentMediaType: "application/json"
|
|
9843
|
+
expected: "a string that will be decoded as JSON"
|
|
9804
9844
|
})
|
|
9805
9845
|
/**
|
|
9806
9846
|
* Returns a schema that decodes a JSON string and then decodes the parsed value
|
|
@@ -13701,6 +13741,33 @@ const durationFromMillis: SchemaTransformation.Transformation<Duration_.Duration
|
|
|
13701
13741
|
decode: (i) => Duration_.millis(i),
|
|
13702
13742
|
encode: (a) => Duration_.toMillis(a)
|
|
13703
13743
|
})
|
|
13744
|
+
const durationFromIsoString: SchemaTransformation.Transformation<Duration_.Duration, string> = SchemaTransformation
|
|
13745
|
+
.transformEffect<Duration_.Duration, string>({
|
|
13746
|
+
decode: (s, options) =>
|
|
13747
|
+
Option_.match(Duration_.fromIso(s), {
|
|
13748
|
+
onNone: () =>
|
|
13749
|
+
Effect.fail(
|
|
13750
|
+
new SchemaIssue.InvalidValue(
|
|
13751
|
+
{ expected: "an ISO 8601 duration without years or months" },
|
|
13752
|
+
s,
|
|
13753
|
+
options
|
|
13754
|
+
)
|
|
13755
|
+
),
|
|
13756
|
+
onSome: Effect.succeed
|
|
13757
|
+
}),
|
|
13758
|
+
encode: (a, options) =>
|
|
13759
|
+
Option_.match(Duration_.formatIso(a), {
|
|
13760
|
+
onNone: () =>
|
|
13761
|
+
Effect.fail(
|
|
13762
|
+
new SchemaIssue.InvalidValue(
|
|
13763
|
+
{ expected: "a finite Duration" },
|
|
13764
|
+
a,
|
|
13765
|
+
options
|
|
13766
|
+
)
|
|
13767
|
+
),
|
|
13768
|
+
onSome: Effect.succeed
|
|
13769
|
+
})
|
|
13770
|
+
})
|
|
13704
13771
|
/**
|
|
13705
13772
|
* Type-level representation of {@link Duration}.
|
|
13706
13773
|
*
|
|
@@ -13876,6 +13943,42 @@ export interface DurationFromMillis extends decodeTo<Duration, Number> {
|
|
|
13876
13943
|
export const DurationFromMillis: DurationFromMillis = Number.pipe(
|
|
13877
13944
|
decodeTo(Duration, durationFromMillis)
|
|
13878
13945
|
)
|
|
13946
|
+
/**
|
|
13947
|
+
* Type-level representation of {@link DurationFromIsoString}.
|
|
13948
|
+
*
|
|
13949
|
+
* @stability stable
|
|
13950
|
+
* @category models
|
|
13951
|
+
* @since 4.1.0
|
|
13952
|
+
*/
|
|
13953
|
+
export interface DurationFromIsoString extends decodeTo<Duration, String> {
|
|
13954
|
+
readonly "Rebuild": DurationFromIsoString
|
|
13955
|
+
}
|
|
13956
|
+
/**
|
|
13957
|
+
* Schema that decodes an ISO 8601 duration string into a `Duration`.
|
|
13958
|
+
*
|
|
13959
|
+
* **Details**
|
|
13960
|
+
*
|
|
13961
|
+
* Decoding:
|
|
13962
|
+
* - A string accepted by `Duration.fromIso` is decoded as a `Duration`, such
|
|
13963
|
+
* as `"PT1H30M"`, `"P1W2D"`, or `"-PT0.5S"`. Years and months are rejected
|
|
13964
|
+
* because they have no fixed length.
|
|
13965
|
+
*
|
|
13966
|
+
* Encoding:
|
|
13967
|
+
* - A finite `Duration` is encoded with `Duration.formatIso`, using days,
|
|
13968
|
+
* hours, minutes, and seconds. Encoding fails for `Duration.infinity` and
|
|
13969
|
+
* `Duration.negativeInfinity`.
|
|
13970
|
+
*
|
|
13971
|
+
* @see {@link DurationFromString} for the `"5 seconds"` string format
|
|
13972
|
+
*
|
|
13973
|
+
* @stability stable
|
|
13974
|
+
* @category schemas
|
|
13975
|
+
* @since 4.1.0
|
|
13976
|
+
*/
|
|
13977
|
+
export const DurationFromIsoString: DurationFromIsoString = String.annotate({
|
|
13978
|
+
expected: "an ISO 8601 duration string that will be decoded as a Duration"
|
|
13979
|
+
}).pipe(
|
|
13980
|
+
decodeTo(Duration, durationFromIsoString)
|
|
13981
|
+
)
|
|
13879
13982
|
|
|
13880
13983
|
// -----------------------------------------------------------------------------
|
|
13881
13984
|
// DNS schemas
|
|
@@ -14297,6 +14400,1040 @@ export const DnsRecord: DnsRecord = Union([
|
|
|
14297
14400
|
DnsTxtRecord
|
|
14298
14401
|
]).annotate({ identifier: "DnsRecord" })
|
|
14299
14402
|
|
|
14403
|
+
// -----------------------------------------------------------------------------
|
|
14404
|
+
// Crypto key schemas
|
|
14405
|
+
// -----------------------------------------------------------------------------
|
|
14406
|
+
|
|
14407
|
+
// Match operation parameters rather than object identity. RSA modulus length
|
|
14408
|
+
// affects generation only, so it is ignored here as on import.
|
|
14409
|
+
interface CryptoAlgorithm {
|
|
14410
|
+
readonly _tag?: string
|
|
14411
|
+
readonly name: string
|
|
14412
|
+
readonly hash?: { readonly name: string }
|
|
14413
|
+
readonly modulusLength?: number
|
|
14414
|
+
readonly saltLength?: number
|
|
14415
|
+
}
|
|
14416
|
+
|
|
14417
|
+
const cryptoAlgorithmEquals = (self: CryptoAlgorithm, that: CryptoAlgorithm): boolean =>
|
|
14418
|
+
self === that ||
|
|
14419
|
+
(self.name === that.name && self.hash?.name === that.hash?.name && self.saltLength === that.saltLength)
|
|
14420
|
+
|
|
14421
|
+
const cryptoDigestCode = (hash: { readonly name: string }) => `Digest.${hash.name.toLowerCase().replace("-", "")}`
|
|
14422
|
+
|
|
14423
|
+
const cryptoAlgorithmCode = (family: string, algorithm: CryptoAlgorithm): string => {
|
|
14424
|
+
if (algorithm.modulusLength === undefined || algorithm.hash === undefined || algorithm._tag === undefined) {
|
|
14425
|
+
const code = `${family}.${algorithm.name}`
|
|
14426
|
+
return algorithm.hash === undefined ? code : `{ ...${code}, hash: ${cryptoDigestCode(algorithm.hash)} }`
|
|
14427
|
+
}
|
|
14428
|
+
const factory = algorithm._tag.charAt(0).toLowerCase() + algorithm._tag.slice(1)
|
|
14429
|
+
const saltLength = algorithm.saltLength === undefined ? "" : `, saltLength: ${algorithm.saltLength}`
|
|
14430
|
+
return `${family}.${factory}({ hash: ${
|
|
14431
|
+
cryptoDigestCode(algorithm.hash)
|
|
14432
|
+
}, modulusLength: ${algorithm.modulusLength}${saltLength} })`
|
|
14433
|
+
}
|
|
14434
|
+
|
|
14435
|
+
const cryptoAlgorithmPayload = (algorithm: CryptoAlgorithm): Json => {
|
|
14436
|
+
const payload: { [key: string]: Json } = { name: algorithm.name }
|
|
14437
|
+
if (algorithm.hash !== undefined) payload.hash = algorithm.hash.name
|
|
14438
|
+
if (algorithm.modulusLength !== undefined) payload.modulusLength = algorithm.modulusLength
|
|
14439
|
+
if (algorithm.saltLength !== undefined) payload.saltLength = algorithm.saltLength
|
|
14440
|
+
return payload
|
|
14441
|
+
}
|
|
14442
|
+
|
|
14443
|
+
const declareCryptoKey = <K extends { readonly algorithm: CryptoAlgorithm }>(
|
|
14444
|
+
name: string,
|
|
14445
|
+
family: string,
|
|
14446
|
+
type: string,
|
|
14447
|
+
is: (u: unknown) => boolean,
|
|
14448
|
+
algorithm: CryptoAlgorithm
|
|
14449
|
+
): declare<K> => {
|
|
14450
|
+
const code = cryptoAlgorithmCode(family, algorithm)
|
|
14451
|
+
const forbidden = SchemaGetter.forbidden<never, unknown>(() =>
|
|
14452
|
+
`Cannot serialize ${family}.${type} values as JSON, use Schema.${name}FromFormat to read and write keys`
|
|
14453
|
+
)
|
|
14454
|
+
return declare<K>(
|
|
14455
|
+
(u): u is K => is(u) && cryptoAlgorithmEquals((u as K).algorithm, algorithm),
|
|
14456
|
+
{
|
|
14457
|
+
expected: `${family}.${type} for ${algorithm.name}`,
|
|
14458
|
+
representation: { id: `effect/crypto/${name}`, payload: cryptoAlgorithmPayload(algorithm) },
|
|
14459
|
+
toCode: () => ({
|
|
14460
|
+
runtime: `Schema.${name}(${code})`,
|
|
14461
|
+
Type: `${family}.${type}`,
|
|
14462
|
+
importDeclarations: [
|
|
14463
|
+
`import * as ${family} from "effect/crypto/${family}"`,
|
|
14464
|
+
...(code.includes("Digest.") ? [`import * as Digest from "effect/crypto/Digest"`] : [])
|
|
14465
|
+
]
|
|
14466
|
+
}),
|
|
14467
|
+
toCodecJson: () => link<K>()(Unknown, { decode: forbidden, encode: forbidden }),
|
|
14468
|
+
// Keys have no Arbitrary: linking to `Never` makes derivation fail.
|
|
14469
|
+
toCodecArbitrary: () => link<K>()(Never, { decode: forbidden, encode: forbidden }),
|
|
14470
|
+
toFormatter: () => (key) => globalThis.String(key),
|
|
14471
|
+
toEquivalence: () => (self, that) => self === that
|
|
14472
|
+
}
|
|
14473
|
+
)
|
|
14474
|
+
}
|
|
14475
|
+
|
|
14476
|
+
const cryptoIssue = (error: CryptoError_.CryptoError, input: unknown, options: SchemaAST.ParseOptions) =>
|
|
14477
|
+
new SchemaIssue.InvalidValue({ message: error.message, cause: error }, input, options)
|
|
14478
|
+
|
|
14479
|
+
const cryptoForbiddenEncode = (name: string, key: unknown, options: SchemaAST.ParseOptions) =>
|
|
14480
|
+
Effect.fail(
|
|
14481
|
+
new SchemaIssue.Forbidden(
|
|
14482
|
+
{ message: `Schema.${name} only decodes, pass { allowEncode: true } to encode the key` },
|
|
14483
|
+
key,
|
|
14484
|
+
options
|
|
14485
|
+
)
|
|
14486
|
+
)
|
|
14487
|
+
|
|
14488
|
+
type CryptoKeyOptions = { readonly allowEncode?: boolean | undefined }
|
|
14489
|
+
|
|
14490
|
+
const cryptoKeyFromBytes = <To extends Codec<any>>(
|
|
14491
|
+
name: string,
|
|
14492
|
+
to: To,
|
|
14493
|
+
fromBytes: (bytes: globalThis.Uint8Array) => Effect.Effect<To["Type"], CryptoError_.CryptoError>,
|
|
14494
|
+
toBytes: ((key: To["Type"]) => Effect.Effect<globalThis.Uint8Array, CryptoError_.CryptoError>) | undefined
|
|
14495
|
+
): decodeTo<To, Uint8Array> =>
|
|
14496
|
+
Uint8Array.pipe(decodeTo(
|
|
14497
|
+
to,
|
|
14498
|
+
SchemaTransformation.transformEffect({
|
|
14499
|
+
decode: (bytes, options) => Effect.mapError(fromBytes(bytes), (error) => cryptoIssue(error, bytes, options)),
|
|
14500
|
+
encode: (key, options) =>
|
|
14501
|
+
toBytes === undefined
|
|
14502
|
+
? cryptoForbiddenEncode(name, key, options)
|
|
14503
|
+
: Effect.mapError(toBytes(key), (error) => cryptoIssue(error, key, options))
|
|
14504
|
+
})
|
|
14505
|
+
))
|
|
14506
|
+
|
|
14507
|
+
const CryptoJsonWebKeyMember = optionalKey(String)
|
|
14508
|
+
|
|
14509
|
+
// The JWK members of RFC 7517 and RFC 7518 that `KeyFormat` reads and writes.
|
|
14510
|
+
// Other members are dropped.
|
|
14511
|
+
const CryptoJsonWebKey = Struct({
|
|
14512
|
+
kty: CryptoJsonWebKeyMember,
|
|
14513
|
+
crv: CryptoJsonWebKeyMember,
|
|
14514
|
+
alg: CryptoJsonWebKeyMember,
|
|
14515
|
+
use: CryptoJsonWebKeyMember,
|
|
14516
|
+
key_ops: optionalKey(ArraySchema(String)),
|
|
14517
|
+
ext: optionalKey(Boolean),
|
|
14518
|
+
k: CryptoJsonWebKeyMember,
|
|
14519
|
+
x: CryptoJsonWebKeyMember,
|
|
14520
|
+
y: CryptoJsonWebKeyMember,
|
|
14521
|
+
d: CryptoJsonWebKeyMember,
|
|
14522
|
+
n: CryptoJsonWebKeyMember,
|
|
14523
|
+
e: CryptoJsonWebKeyMember,
|
|
14524
|
+
p: CryptoJsonWebKeyMember,
|
|
14525
|
+
q: CryptoJsonWebKeyMember,
|
|
14526
|
+
dp: CryptoJsonWebKeyMember,
|
|
14527
|
+
dq: CryptoJsonWebKeyMember,
|
|
14528
|
+
qi: CryptoJsonWebKeyMember,
|
|
14529
|
+
oth: optionalKey(ArraySchema(Struct({
|
|
14530
|
+
r: CryptoJsonWebKeyMember,
|
|
14531
|
+
d: CryptoJsonWebKeyMember,
|
|
14532
|
+
t: CryptoJsonWebKeyMember
|
|
14533
|
+
})))
|
|
14534
|
+
}) as unknown as Codec<JsonWebKey>
|
|
14535
|
+
|
|
14536
|
+
const cryptoFormatData = <R extends KeyFormat_.Role, Data>(format: KeyFormat_.Format<R, "decode", Data>): Codec<Data> =>
|
|
14537
|
+
(format._tag === "jwk" ? CryptoJsonWebKey : format.pem ? String : Uint8Array) as Codec<any>
|
|
14538
|
+
|
|
14539
|
+
const cryptoKeyFromFormat = <To extends Codec<any>, R extends KeyFormat_.Role, Data>(
|
|
14540
|
+
name: string,
|
|
14541
|
+
to: To,
|
|
14542
|
+
format: KeyFormat_.Format<R, "decode", Data>,
|
|
14543
|
+
decode: (data: Data) => Effect.Effect<To["Type"], CryptoError_.CryptoError>,
|
|
14544
|
+
canEncode: boolean
|
|
14545
|
+
): decodeTo<To, Codec<Data>> => {
|
|
14546
|
+
// PKCS#1 and SEC1 are read only.
|
|
14547
|
+
const writable = canEncode && format._tag !== "pkcs1" && format._tag !== "sec1"
|
|
14548
|
+
return cryptoFormatData(format).pipe(decodeTo(
|
|
14549
|
+
to,
|
|
14550
|
+
SchemaTransformation.transformEffect<To["Type"], Data>({
|
|
14551
|
+
decode: (data, options) =>
|
|
14552
|
+
// Secret JWK decoding is synchronous, but all format schemas are async-only.
|
|
14553
|
+
Effect.flatMap(Effect.promise(() => Promise.resolve()), () =>
|
|
14554
|
+
Effect.mapError(decode(data), (error) => cryptoIssue(error, data, options))),
|
|
14555
|
+
encode: (key, options) =>
|
|
14556
|
+
writable
|
|
14557
|
+
? Effect.mapError(
|
|
14558
|
+
KeyFormat_.encode(format as any, key as KeyFormat_.Key) as Effect.Effect<Data, CryptoError_.CryptoError>,
|
|
14559
|
+
(error) => cryptoIssue(error, key, options)
|
|
14560
|
+
)
|
|
14561
|
+
: cryptoForbiddenEncode(name, key, options)
|
|
14562
|
+
})
|
|
14563
|
+
))
|
|
14564
|
+
}
|
|
14565
|
+
|
|
14566
|
+
/**
|
|
14567
|
+
* Type-level representation of {@link MacKey}.
|
|
14568
|
+
*
|
|
14569
|
+
* @stability unstable
|
|
14570
|
+
* @category models
|
|
14571
|
+
* @since 4.0.0
|
|
14572
|
+
*/
|
|
14573
|
+
export interface MacKey<A extends Mac_.Algorithm = Mac_.Algorithm> extends declare<Mac_.Key<A>> {
|
|
14574
|
+
readonly "Rebuild": MacKey<A>
|
|
14575
|
+
}
|
|
14576
|
+
|
|
14577
|
+
/**
|
|
14578
|
+
* Schema for live `Mac.Key` values of an algorithm.
|
|
14579
|
+
*
|
|
14580
|
+
* **Details**
|
|
14581
|
+
*
|
|
14582
|
+
* Decoding checks the key's algorithm and returns the key itself. The key has
|
|
14583
|
+
* no JSON form: `toCodecJson` fails with a `Forbidden` issue, so use
|
|
14584
|
+
* {@link MacKeyFromFormat} or {@link MacKeyFromBytes} to read and write keys.
|
|
14585
|
+
* Keys display redacted, compare by reference, and have no `Arbitrary`.
|
|
14586
|
+
*
|
|
14587
|
+
* @stability unstable
|
|
14588
|
+
* @category crypto
|
|
14589
|
+
* @since 4.0.0
|
|
14590
|
+
*/
|
|
14591
|
+
export const MacKey = <A extends Mac_.Algorithm>(algorithm: A): MacKey<A> =>
|
|
14592
|
+
declareCryptoKey<Mac_.Key<A>>("MacKey", "Mac", "Key", Mac_.isKey, algorithm)
|
|
14593
|
+
|
|
14594
|
+
/**
|
|
14595
|
+
* Schema that decodes raw key bytes into a `Mac.Key`.
|
|
14596
|
+
*
|
|
14597
|
+
* **Details**
|
|
14598
|
+
*
|
|
14599
|
+
* Decoding runs `Mac.key`, which is synchronous, so the schema works with
|
|
14600
|
+
* `Schema.decodeSync`. Under `Config.schema` the bytes are read as base64. A
|
|
14601
|
+
* `CryptoError` becomes an `InvalidValue` issue whose `cause` is the error.
|
|
14602
|
+
* Encoding fails with a `Forbidden` issue unless `allowEncode` is `true`.
|
|
14603
|
+
*
|
|
14604
|
+
* **Example** (Reading an HMAC key from the environment)
|
|
14605
|
+
*
|
|
14606
|
+
* ```ts import.meta.vitest
|
|
14607
|
+
* import { Config, ConfigProvider, Effect, Schema } from "effect"
|
|
14608
|
+
* import { Mac } from "effect/crypto"
|
|
14609
|
+
*
|
|
14610
|
+
* const config = Config.schema(Schema.MacKeyFromBytes(Mac.hmacSha256), "HMAC_KEY")
|
|
14611
|
+
* const provider = ConfigProvider.fromEnv({ env: { HMAC_KEY: "A".repeat(43) + "=" } })
|
|
14612
|
+
* const key = await Effect.runPromise(Effect.provide(config, ConfigProvider.layer(provider)))
|
|
14613
|
+
* key.algorithm.name // => "hmacSha256"
|
|
14614
|
+
* ```
|
|
14615
|
+
*
|
|
14616
|
+
* @stability unstable
|
|
14617
|
+
* @category crypto
|
|
14618
|
+
* @since 4.0.0
|
|
14619
|
+
*/
|
|
14620
|
+
export const MacKeyFromBytes = <A extends Mac_.Algorithm>(
|
|
14621
|
+
algorithm: A,
|
|
14622
|
+
options?: CryptoKeyOptions
|
|
14623
|
+
): decodeTo<MacKey<A>, Uint8Array> =>
|
|
14624
|
+
cryptoKeyFromBytes(
|
|
14625
|
+
"MacKeyFromBytes",
|
|
14626
|
+
MacKey(algorithm),
|
|
14627
|
+
(bytes) => Mac_.key(algorithm, bytes),
|
|
14628
|
+
options?.allowEncode === true ? Mac_.toBytes : undefined
|
|
14629
|
+
)
|
|
14630
|
+
|
|
14631
|
+
/**
|
|
14632
|
+
* Schema that decodes a `Mac.Key` from a JWK with `KeyFormat.decodeSecret`.
|
|
14633
|
+
*
|
|
14634
|
+
* **Details**
|
|
14635
|
+
*
|
|
14636
|
+
* Decoding returns an Effect, so use the async decoding functions:
|
|
14637
|
+
* `Schema.decodeSync` throws. A `CryptoError` becomes an `InvalidValue` issue
|
|
14638
|
+
* whose `cause` is the error. Encoding fails with a `Forbidden` issue unless
|
|
14639
|
+
* `allowEncode` is `true`.
|
|
14640
|
+
*
|
|
14641
|
+
* @stability unstable
|
|
14642
|
+
* @category crypto
|
|
14643
|
+
* @since 4.0.0
|
|
14644
|
+
*/
|
|
14645
|
+
export const MacKeyFromFormat = <A extends Mac_.Algorithm, Data>(
|
|
14646
|
+
format: KeyFormat_.Format<"secret", "decode", Data>,
|
|
14647
|
+
algorithm: A,
|
|
14648
|
+
options?: CryptoKeyOptions
|
|
14649
|
+
): decodeTo<MacKey<A>, Codec<Data>> =>
|
|
14650
|
+
cryptoKeyFromFormat(
|
|
14651
|
+
"MacKeyFromFormat",
|
|
14652
|
+
MacKey(algorithm),
|
|
14653
|
+
format,
|
|
14654
|
+
(data) => KeyFormat_.decodeSecret(format, algorithm, data) as Effect.Effect<Mac_.Key<A>, CryptoError_.CryptoError>,
|
|
14655
|
+
options?.allowEncode === true
|
|
14656
|
+
)
|
|
14657
|
+
|
|
14658
|
+
/**
|
|
14659
|
+
* Type-level representation of {@link AeadKey}.
|
|
14660
|
+
*
|
|
14661
|
+
* @stability unstable
|
|
14662
|
+
* @category models
|
|
14663
|
+
* @since 4.0.0
|
|
14664
|
+
*/
|
|
14665
|
+
export interface AeadKey<A extends Aead_.Algorithm = Aead_.Algorithm> extends declare<Aead_.Key<A>> {
|
|
14666
|
+
readonly "Rebuild": AeadKey<A>
|
|
14667
|
+
}
|
|
14668
|
+
|
|
14669
|
+
/**
|
|
14670
|
+
* Schema for live `Aead.Key` values of an algorithm.
|
|
14671
|
+
*
|
|
14672
|
+
* **Details**
|
|
14673
|
+
*
|
|
14674
|
+
* Decoding checks the key's algorithm and returns the key itself. The key has
|
|
14675
|
+
* no JSON form: `toCodecJson` fails with a `Forbidden` issue, so use
|
|
14676
|
+
* {@link AeadKeyFromFormat} or {@link AeadKeyFromBytes} to read and write
|
|
14677
|
+
* keys. Keys display redacted, compare by reference, and have no `Arbitrary`.
|
|
14678
|
+
*
|
|
14679
|
+
* @stability unstable
|
|
14680
|
+
* @category crypto
|
|
14681
|
+
* @since 4.0.0
|
|
14682
|
+
*/
|
|
14683
|
+
export const AeadKey = <A extends Aead_.Algorithm>(algorithm: A): AeadKey<A> =>
|
|
14684
|
+
declareCryptoKey<Aead_.Key<A>>("AeadKey", "Aead", "Key", Aead_.isKey, algorithm)
|
|
14685
|
+
|
|
14686
|
+
/**
|
|
14687
|
+
* Schema that decodes raw key bytes into an `Aead.Key`.
|
|
14688
|
+
*
|
|
14689
|
+
* **Details**
|
|
14690
|
+
*
|
|
14691
|
+
* Decoding runs `Aead.key`, which is synchronous, so the schema works with
|
|
14692
|
+
* `Schema.decodeSync`. Under `Config.schema` the bytes are read as base64. A
|
|
14693
|
+
* `CryptoError` becomes an `InvalidValue` issue whose `cause` is the error.
|
|
14694
|
+
* Encoding fails with a `Forbidden` issue unless `allowEncode` is `true`.
|
|
14695
|
+
*
|
|
14696
|
+
* @stability unstable
|
|
14697
|
+
* @category crypto
|
|
14698
|
+
* @since 4.0.0
|
|
14699
|
+
*/
|
|
14700
|
+
export const AeadKeyFromBytes = <A extends Aead_.Algorithm>(
|
|
14701
|
+
algorithm: A,
|
|
14702
|
+
options?: CryptoKeyOptions
|
|
14703
|
+
): decodeTo<AeadKey<A>, Uint8Array> =>
|
|
14704
|
+
cryptoKeyFromBytes(
|
|
14705
|
+
"AeadKeyFromBytes",
|
|
14706
|
+
AeadKey(algorithm),
|
|
14707
|
+
(bytes) => Aead_.key(algorithm, bytes),
|
|
14708
|
+
options?.allowEncode === true ? Aead_.toBytes : undefined
|
|
14709
|
+
)
|
|
14710
|
+
|
|
14711
|
+
/**
|
|
14712
|
+
* Schema that decodes an `Aead.Key` from a JWK with `KeyFormat.decodeSecret`.
|
|
14713
|
+
*
|
|
14714
|
+
* **Details**
|
|
14715
|
+
*
|
|
14716
|
+
* Decoding returns an Effect, so use the async decoding functions:
|
|
14717
|
+
* `Schema.decodeSync` throws. A `CryptoError` becomes an `InvalidValue` issue
|
|
14718
|
+
* whose `cause` is the error. Encoding fails with a `Forbidden` issue unless
|
|
14719
|
+
* `allowEncode` is `true`.
|
|
14720
|
+
*
|
|
14721
|
+
* @stability unstable
|
|
14722
|
+
* @category crypto
|
|
14723
|
+
* @since 4.0.0
|
|
14724
|
+
*/
|
|
14725
|
+
export const AeadKeyFromFormat = <A extends Aead_.Algorithm, Data>(
|
|
14726
|
+
format: KeyFormat_.Format<"secret", "decode", Data>,
|
|
14727
|
+
algorithm: A,
|
|
14728
|
+
options?: CryptoKeyOptions
|
|
14729
|
+
): decodeTo<AeadKey<A>, Codec<Data>> =>
|
|
14730
|
+
cryptoKeyFromFormat(
|
|
14731
|
+
"AeadKeyFromFormat",
|
|
14732
|
+
AeadKey(algorithm),
|
|
14733
|
+
format,
|
|
14734
|
+
(data) => KeyFormat_.decodeSecret(format, algorithm, data) as Effect.Effect<Aead_.Key<A>, CryptoError_.CryptoError>,
|
|
14735
|
+
options?.allowEncode === true
|
|
14736
|
+
)
|
|
14737
|
+
|
|
14738
|
+
/**
|
|
14739
|
+
* Type-level representation of {@link CipherKey}.
|
|
14740
|
+
*
|
|
14741
|
+
* @stability unstable
|
|
14742
|
+
* @category models
|
|
14743
|
+
* @since 4.0.0
|
|
14744
|
+
*/
|
|
14745
|
+
export interface CipherKey<A extends Cipher_.Algorithm = Cipher_.Algorithm> extends declare<Cipher_.Key<A>> {
|
|
14746
|
+
readonly "Rebuild": CipherKey<A>
|
|
14747
|
+
}
|
|
14748
|
+
|
|
14749
|
+
/**
|
|
14750
|
+
* Schema for live `Cipher.Key` values of an algorithm.
|
|
14751
|
+
*
|
|
14752
|
+
* **Details**
|
|
14753
|
+
*
|
|
14754
|
+
* Decoding checks the key's algorithm and returns the key itself. The key has
|
|
14755
|
+
* no JSON form: `toCodecJson` fails with a `Forbidden` issue, so use
|
|
14756
|
+
* {@link CipherKeyFromFormat} or {@link CipherKeyFromBytes} to read and
|
|
14757
|
+
* write keys. Keys display redacted, compare by reference, and have no
|
|
14758
|
+
* `Arbitrary`.
|
|
14759
|
+
*
|
|
14760
|
+
* @stability unstable
|
|
14761
|
+
* @category crypto
|
|
14762
|
+
* @since 4.0.0
|
|
14763
|
+
*/
|
|
14764
|
+
export const CipherKey = <A extends Cipher_.Algorithm>(algorithm: A): CipherKey<A> =>
|
|
14765
|
+
declareCryptoKey<Cipher_.Key<A>>(
|
|
14766
|
+
"CipherKey",
|
|
14767
|
+
"Cipher",
|
|
14768
|
+
"Key",
|
|
14769
|
+
Cipher_.isKey,
|
|
14770
|
+
algorithm
|
|
14771
|
+
)
|
|
14772
|
+
|
|
14773
|
+
/**
|
|
14774
|
+
* Schema that decodes raw key bytes into a `Cipher.Key`.
|
|
14775
|
+
*
|
|
14776
|
+
* **Details**
|
|
14777
|
+
*
|
|
14778
|
+
* Decoding runs `Cipher.key`, which is synchronous, so the schema works with
|
|
14779
|
+
* `Schema.decodeSync`. Under `Config.schema` the bytes are read as base64. A
|
|
14780
|
+
* `CryptoError` becomes an `InvalidValue` issue whose `cause` is the error.
|
|
14781
|
+
* Encoding fails with a `Forbidden` issue unless `allowEncode` is `true`.
|
|
14782
|
+
*
|
|
14783
|
+
* @stability unstable
|
|
14784
|
+
* @category crypto
|
|
14785
|
+
* @since 4.0.0
|
|
14786
|
+
*/
|
|
14787
|
+
export const CipherKeyFromBytes = <A extends Cipher_.Algorithm>(
|
|
14788
|
+
algorithm: A,
|
|
14789
|
+
options?: CryptoKeyOptions
|
|
14790
|
+
): decodeTo<CipherKey<A>, Uint8Array> =>
|
|
14791
|
+
cryptoKeyFromBytes(
|
|
14792
|
+
"CipherKeyFromBytes",
|
|
14793
|
+
CipherKey(algorithm),
|
|
14794
|
+
(bytes) => Cipher_.key(algorithm, bytes),
|
|
14795
|
+
options?.allowEncode === true ? Cipher_.toBytes : undefined
|
|
14796
|
+
)
|
|
14797
|
+
|
|
14798
|
+
/**
|
|
14799
|
+
* Schema that decodes a `Cipher.Key` from a JWK with
|
|
14800
|
+
* `KeyFormat.decodeSecret`.
|
|
14801
|
+
*
|
|
14802
|
+
* **Details**
|
|
14803
|
+
*
|
|
14804
|
+
* Decoding returns an Effect, so use the async decoding functions:
|
|
14805
|
+
* `Schema.decodeSync` throws. A `CryptoError` becomes an `InvalidValue` issue
|
|
14806
|
+
* whose `cause` is the error. Encoding fails with a `Forbidden` issue unless
|
|
14807
|
+
* `allowEncode` is `true`.
|
|
14808
|
+
*
|
|
14809
|
+
* @stability unstable
|
|
14810
|
+
* @category crypto
|
|
14811
|
+
* @since 4.0.0
|
|
14812
|
+
*/
|
|
14813
|
+
export const CipherKeyFromFormat = <A extends Cipher_.Algorithm, Data>(
|
|
14814
|
+
format: KeyFormat_.Format<"secret", "decode", Data>,
|
|
14815
|
+
algorithm: A,
|
|
14816
|
+
options?: CryptoKeyOptions
|
|
14817
|
+
): decodeTo<CipherKey<A>, Codec<Data>> =>
|
|
14818
|
+
cryptoKeyFromFormat(
|
|
14819
|
+
"CipherKeyFromFormat",
|
|
14820
|
+
CipherKey(algorithm),
|
|
14821
|
+
format,
|
|
14822
|
+
(data) =>
|
|
14823
|
+
KeyFormat_.decodeSecret(format, algorithm, data) as Effect.Effect<Cipher_.Key<A>, CryptoError_.CryptoError>,
|
|
14824
|
+
options?.allowEncode === true
|
|
14825
|
+
)
|
|
14826
|
+
|
|
14827
|
+
/**
|
|
14828
|
+
* Type-level representation of {@link SignaturePublicKey}.
|
|
14829
|
+
*
|
|
14830
|
+
* @stability unstable
|
|
14831
|
+
* @category models
|
|
14832
|
+
* @since 4.0.0
|
|
14833
|
+
*/
|
|
14834
|
+
export interface SignaturePublicKey<A extends Signature_.Algorithm = Signature_.Algorithm>
|
|
14835
|
+
extends declare<Signature_.PublicKey<A>>
|
|
14836
|
+
{
|
|
14837
|
+
readonly "Rebuild": SignaturePublicKey<A>
|
|
14838
|
+
}
|
|
14839
|
+
|
|
14840
|
+
/**
|
|
14841
|
+
* Schema for live `Signature.PublicKey` values of an algorithm.
|
|
14842
|
+
*
|
|
14843
|
+
* **Details**
|
|
14844
|
+
*
|
|
14845
|
+
* Decoding checks the key's algorithm and returns the key itself. The key has
|
|
14846
|
+
* no JSON form: `toCodecJson` fails with a `Forbidden` issue, so use
|
|
14847
|
+
* {@link SignaturePublicKeyFromFormat} or {@link SignaturePublicKeyFromBytes}
|
|
14848
|
+
* to read and write keys. Keys compare by reference and have no `Arbitrary`.
|
|
14849
|
+
*
|
|
14850
|
+
* @stability unstable
|
|
14851
|
+
* @category crypto
|
|
14852
|
+
* @since 4.0.0
|
|
14853
|
+
*/
|
|
14854
|
+
export const SignaturePublicKey = <A extends Signature_.Algorithm>(algorithm: A): SignaturePublicKey<A> =>
|
|
14855
|
+
declareCryptoKey<Signature_.PublicKey<A>>(
|
|
14856
|
+
"SignaturePublicKey",
|
|
14857
|
+
"Signature",
|
|
14858
|
+
"PublicKey",
|
|
14859
|
+
Signature_.isPublicKey,
|
|
14860
|
+
algorithm
|
|
14861
|
+
)
|
|
14862
|
+
|
|
14863
|
+
/**
|
|
14864
|
+
* Schema that decodes a raw public key into a `Signature.PublicKey`: 32 bytes
|
|
14865
|
+
* for Ed25519, or an uncompressed SEC1 point for ECDSA.
|
|
14866
|
+
*
|
|
14867
|
+
* **Details**
|
|
14868
|
+
*
|
|
14869
|
+
* Decoding runs `Signature.publicKey`, which is synchronous, so the schema
|
|
14870
|
+
* works with `Schema.decodeSync`. Under `Config.schema` the bytes are read as
|
|
14871
|
+
* base64. A `CryptoError` becomes an `InvalidValue` issue whose `cause` is
|
|
14872
|
+
* the error. RSA public keys have no raw form, so passing an RSA algorithm is
|
|
14873
|
+
* a type error.
|
|
14874
|
+
*
|
|
14875
|
+
* @stability unstable
|
|
14876
|
+
* @category crypto
|
|
14877
|
+
* @since 4.0.0
|
|
14878
|
+
*/
|
|
14879
|
+
export const SignaturePublicKeyFromBytes = <
|
|
14880
|
+
A extends Signature_.Ed25519 | Signature_.Ecdsa
|
|
14881
|
+
>(algorithm: A): decodeTo<SignaturePublicKey<A>, Uint8Array> =>
|
|
14882
|
+
cryptoKeyFromBytes(
|
|
14883
|
+
"SignaturePublicKeyFromBytes",
|
|
14884
|
+
SignaturePublicKey(algorithm),
|
|
14885
|
+
(bytes) => Signature_.publicKey(algorithm, bytes),
|
|
14886
|
+
Signature_.toBytes
|
|
14887
|
+
)
|
|
14888
|
+
|
|
14889
|
+
/**
|
|
14890
|
+
* Schema that decodes a `Signature.PublicKey` with
|
|
14891
|
+
* `KeyFormat.decodePublic` and encodes it with `KeyFormat.encode`.
|
|
14892
|
+
*
|
|
14893
|
+
* **Details**
|
|
14894
|
+
*
|
|
14895
|
+
* The format must hold public keys: `KeyFormat.spki`, `KeyFormat.jwk`, or
|
|
14896
|
+
* `KeyFormat.pem(KeyFormat.spki)`. A format for another role is a type
|
|
14897
|
+
* error. Decoding runs the runtime's key import, so use the async decoding
|
|
14898
|
+
* functions: `Schema.decodeSync` throws. A `CryptoError` becomes an
|
|
14899
|
+
* `InvalidValue` issue whose `cause` is the error.
|
|
14900
|
+
*
|
|
14901
|
+
* @stability unstable
|
|
14902
|
+
* @category crypto
|
|
14903
|
+
* @since 4.0.0
|
|
14904
|
+
*/
|
|
14905
|
+
export const SignaturePublicKeyFromFormat = <A extends Signature_.Algorithm, Data>(
|
|
14906
|
+
format: KeyFormat_.Format<"public", "decode", Data>,
|
|
14907
|
+
algorithm: A
|
|
14908
|
+
): decodeTo<SignaturePublicKey<A>, Codec<Data>> =>
|
|
14909
|
+
cryptoKeyFromFormat(
|
|
14910
|
+
"SignaturePublicKeyFromFormat",
|
|
14911
|
+
SignaturePublicKey(algorithm),
|
|
14912
|
+
format,
|
|
14913
|
+
(data) =>
|
|
14914
|
+
KeyFormat_.decodePublic(format, algorithm, data) as Effect.Effect<
|
|
14915
|
+
Signature_.PublicKey<A>,
|
|
14916
|
+
CryptoError_.CryptoError
|
|
14917
|
+
>,
|
|
14918
|
+
true
|
|
14919
|
+
)
|
|
14920
|
+
|
|
14921
|
+
/**
|
|
14922
|
+
* Type-level representation of {@link SignaturePrivateKey}.
|
|
14923
|
+
*
|
|
14924
|
+
* @stability unstable
|
|
14925
|
+
* @category models
|
|
14926
|
+
* @since 4.0.0
|
|
14927
|
+
*/
|
|
14928
|
+
export interface SignaturePrivateKey<A extends Signature_.Algorithm = Signature_.Algorithm>
|
|
14929
|
+
extends declare<Signature_.PrivateKey<A>>
|
|
14930
|
+
{
|
|
14931
|
+
readonly "Rebuild": SignaturePrivateKey<A>
|
|
14932
|
+
}
|
|
14933
|
+
|
|
14934
|
+
/**
|
|
14935
|
+
* Schema for live `Signature.PrivateKey` values of an algorithm.
|
|
14936
|
+
*
|
|
14937
|
+
* **Details**
|
|
14938
|
+
*
|
|
14939
|
+
* Decoding checks the key's algorithm and returns the key itself. The key has
|
|
14940
|
+
* no JSON form: `toCodecJson` fails with a `Forbidden` issue, so use
|
|
14941
|
+
* {@link SignaturePrivateKeyFromFormat} or
|
|
14942
|
+
* {@link SignaturePrivateKeyFromBytes} to read and write keys. Keys display
|
|
14943
|
+
* redacted, compare by reference, and have no `Arbitrary`.
|
|
14944
|
+
*
|
|
14945
|
+
* @stability unstable
|
|
14946
|
+
* @category crypto
|
|
14947
|
+
* @since 4.0.0
|
|
14948
|
+
*/
|
|
14949
|
+
export const SignaturePrivateKey = <A extends Signature_.Algorithm>(algorithm: A): SignaturePrivateKey<A> =>
|
|
14950
|
+
declareCryptoKey<Signature_.PrivateKey<A>>(
|
|
14951
|
+
"SignaturePrivateKey",
|
|
14952
|
+
"Signature",
|
|
14953
|
+
"PrivateKey",
|
|
14954
|
+
Signature_.isPrivateKey,
|
|
14955
|
+
algorithm
|
|
14956
|
+
)
|
|
14957
|
+
|
|
14958
|
+
/**
|
|
14959
|
+
* Schema that decodes an Ed25519 seed into a `Signature.PrivateKey`.
|
|
14960
|
+
*
|
|
14961
|
+
* **Details**
|
|
14962
|
+
*
|
|
14963
|
+
* Decoding runs `Signature.privateKey`, which is synchronous, so the schema
|
|
14964
|
+
* works with `Schema.decodeSync`. Under `Config.schema` the bytes are read as
|
|
14965
|
+
* base64. A `CryptoError` becomes an `InvalidValue` issue whose `cause` is
|
|
14966
|
+
* the error. ECDSA and RSA private keys have no raw form, so passing them is
|
|
14967
|
+
* a type error. Encoding fails with a `Forbidden` issue unless `allowEncode`
|
|
14968
|
+
* is `true`.
|
|
14969
|
+
*
|
|
14970
|
+
* @stability unstable
|
|
14971
|
+
* @category crypto
|
|
14972
|
+
* @since 4.0.0
|
|
14973
|
+
*/
|
|
14974
|
+
export const SignaturePrivateKeyFromBytes = <
|
|
14975
|
+
A extends Signature_.Ed25519
|
|
14976
|
+
>(algorithm: A, options?: CryptoKeyOptions): decodeTo<SignaturePrivateKey<A>, Uint8Array> =>
|
|
14977
|
+
cryptoKeyFromBytes(
|
|
14978
|
+
"SignaturePrivateKeyFromBytes",
|
|
14979
|
+
SignaturePrivateKey(algorithm),
|
|
14980
|
+
(bytes) => Signature_.privateKey(algorithm, bytes),
|
|
14981
|
+
options?.allowEncode === true ? Signature_.toBytes : undefined
|
|
14982
|
+
)
|
|
14983
|
+
|
|
14984
|
+
/**
|
|
14985
|
+
* Schema that decodes a `Signature.PrivateKey` with
|
|
14986
|
+
* `KeyFormat.decodePrivate`.
|
|
14987
|
+
*
|
|
14988
|
+
* **Details**
|
|
14989
|
+
*
|
|
14990
|
+
* The format must hold private keys: `KeyFormat.pkcs8`, `KeyFormat.jwk`,
|
|
14991
|
+
* `KeyFormat.pkcs1`, `KeyFormat.sec1`, or their PEM forms. A format for
|
|
14992
|
+
* another role is a type error. Decoding runs the runtime's key import, so
|
|
14993
|
+
* use the async decoding functions: `Schema.decodeSync` throws. A
|
|
14994
|
+
* `CryptoError` becomes an `InvalidValue` issue whose `cause` is the error.
|
|
14995
|
+
* Encoding fails with a `Forbidden` issue unless `allowEncode` is `true`,
|
|
14996
|
+
* and always for the read-only PKCS#1 and SEC1 formats.
|
|
14997
|
+
*
|
|
14998
|
+
* @stability unstable
|
|
14999
|
+
* @category crypto
|
|
15000
|
+
* @since 4.0.0
|
|
15001
|
+
*/
|
|
15002
|
+
export const SignaturePrivateKeyFromFormat = <A extends Signature_.Algorithm, Data>(
|
|
15003
|
+
format: KeyFormat_.Format<"private", "decode", Data>,
|
|
15004
|
+
algorithm: A,
|
|
15005
|
+
options?: CryptoKeyOptions
|
|
15006
|
+
): decodeTo<SignaturePrivateKey<A>, Codec<Data>> =>
|
|
15007
|
+
cryptoKeyFromFormat(
|
|
15008
|
+
"SignaturePrivateKeyFromFormat",
|
|
15009
|
+
SignaturePrivateKey(algorithm),
|
|
15010
|
+
format,
|
|
15011
|
+
(data) =>
|
|
15012
|
+
KeyFormat_.decodePrivate(format, algorithm, data) as Effect.Effect<
|
|
15013
|
+
Signature_.PrivateKey<A>,
|
|
15014
|
+
CryptoError_.CryptoError
|
|
15015
|
+
>,
|
|
15016
|
+
options?.allowEncode === true
|
|
15017
|
+
)
|
|
15018
|
+
|
|
15019
|
+
/**
|
|
15020
|
+
* Type-level representation of {@link KeyAgreementPublicKey}.
|
|
15021
|
+
*
|
|
15022
|
+
* @stability unstable
|
|
15023
|
+
* @category models
|
|
15024
|
+
* @since 4.0.0
|
|
15025
|
+
*/
|
|
15026
|
+
export interface KeyAgreementPublicKey<A extends KeyAgreement_.Algorithm = KeyAgreement_.Algorithm>
|
|
15027
|
+
extends declare<KeyAgreement_.PublicKey<A>>
|
|
15028
|
+
{
|
|
15029
|
+
readonly "Rebuild": KeyAgreementPublicKey<A>
|
|
15030
|
+
}
|
|
15031
|
+
|
|
15032
|
+
/**
|
|
15033
|
+
* Schema for live `KeyAgreement.PublicKey` values of an algorithm.
|
|
15034
|
+
*
|
|
15035
|
+
* **Details**
|
|
15036
|
+
*
|
|
15037
|
+
* Decoding checks the key's algorithm and returns the key itself. The key has
|
|
15038
|
+
* no JSON form: `toCodecJson` fails with a `Forbidden` issue, so use
|
|
15039
|
+
* {@link KeyAgreementPublicKeyFromFormat} or
|
|
15040
|
+
* {@link KeyAgreementPublicKeyFromBytes} to read and write keys. Keys compare
|
|
15041
|
+
* by reference and have no `Arbitrary`.
|
|
15042
|
+
*
|
|
15043
|
+
* @stability unstable
|
|
15044
|
+
* @category crypto
|
|
15045
|
+
* @since 4.0.0
|
|
15046
|
+
*/
|
|
15047
|
+
export const KeyAgreementPublicKey = <A extends KeyAgreement_.Algorithm>(algorithm: A): KeyAgreementPublicKey<A> =>
|
|
15048
|
+
declareCryptoKey<KeyAgreement_.PublicKey<A>>(
|
|
15049
|
+
"KeyAgreementPublicKey",
|
|
15050
|
+
"KeyAgreement",
|
|
15051
|
+
"PublicKey",
|
|
15052
|
+
KeyAgreement_.isPublicKey,
|
|
15053
|
+
algorithm
|
|
15054
|
+
)
|
|
15055
|
+
|
|
15056
|
+
/**
|
|
15057
|
+
* Schema that decodes a raw public key into a `KeyAgreement.PublicKey`: 32
|
|
15058
|
+
* bytes for X25519, or an uncompressed SEC1 point for ECDH.
|
|
15059
|
+
*
|
|
15060
|
+
* **Details**
|
|
15061
|
+
*
|
|
15062
|
+
* Decoding runs `KeyAgreement.publicKey`, which is synchronous, so the schema
|
|
15063
|
+
* works with `Schema.decodeSync`. Under `Config.schema` the bytes are read as
|
|
15064
|
+
* base64. A `CryptoError` becomes an `InvalidValue` issue whose `cause` is
|
|
15065
|
+
* the error.
|
|
15066
|
+
*
|
|
15067
|
+
* @stability unstable
|
|
15068
|
+
* @category crypto
|
|
15069
|
+
* @since 4.0.0
|
|
15070
|
+
*/
|
|
15071
|
+
export const KeyAgreementPublicKeyFromBytes = <A extends KeyAgreement_.Algorithm>(
|
|
15072
|
+
algorithm: A
|
|
15073
|
+
): decodeTo<KeyAgreementPublicKey<A>, Uint8Array> =>
|
|
15074
|
+
cryptoKeyFromBytes(
|
|
15075
|
+
"KeyAgreementPublicKeyFromBytes",
|
|
15076
|
+
KeyAgreementPublicKey(algorithm),
|
|
15077
|
+
(bytes) => KeyAgreement_.publicKey(algorithm, bytes),
|
|
15078
|
+
KeyAgreement_.toBytes
|
|
15079
|
+
)
|
|
15080
|
+
|
|
15081
|
+
/**
|
|
15082
|
+
* Schema that decodes a `KeyAgreement.PublicKey` with
|
|
15083
|
+
* `KeyFormat.decodePublic` and encodes it with `KeyFormat.encode`.
|
|
15084
|
+
*
|
|
15085
|
+
* **Details**
|
|
15086
|
+
*
|
|
15087
|
+
* The format must hold public keys: `KeyFormat.spki`, `KeyFormat.jwk`, or
|
|
15088
|
+
* `KeyFormat.pem(KeyFormat.spki)`. A format for another role is a type
|
|
15089
|
+
* error. Decoding runs the runtime's key import, so use the async decoding
|
|
15090
|
+
* functions: `Schema.decodeSync` throws. A `CryptoError` becomes an
|
|
15091
|
+
* `InvalidValue` issue whose `cause` is the error.
|
|
15092
|
+
*
|
|
15093
|
+
* @stability unstable
|
|
15094
|
+
* @category crypto
|
|
15095
|
+
* @since 4.0.0
|
|
15096
|
+
*/
|
|
15097
|
+
export const KeyAgreementPublicKeyFromFormat = <A extends KeyAgreement_.Algorithm, Data>(
|
|
15098
|
+
format: KeyFormat_.Format<"public", "decode", Data>,
|
|
15099
|
+
algorithm: A
|
|
15100
|
+
): decodeTo<KeyAgreementPublicKey<A>, Codec<Data>> =>
|
|
15101
|
+
cryptoKeyFromFormat(
|
|
15102
|
+
"KeyAgreementPublicKeyFromFormat",
|
|
15103
|
+
KeyAgreementPublicKey(algorithm),
|
|
15104
|
+
format,
|
|
15105
|
+
(data) =>
|
|
15106
|
+
KeyFormat_.decodePublic(format, algorithm, data) as Effect.Effect<
|
|
15107
|
+
KeyAgreement_.PublicKey<A>,
|
|
15108
|
+
CryptoError_.CryptoError
|
|
15109
|
+
>,
|
|
15110
|
+
true
|
|
15111
|
+
)
|
|
15112
|
+
|
|
15113
|
+
/**
|
|
15114
|
+
* Type-level representation of {@link KeyAgreementPrivateKey}.
|
|
15115
|
+
*
|
|
15116
|
+
* @stability unstable
|
|
15117
|
+
* @category models
|
|
15118
|
+
* @since 4.0.0
|
|
15119
|
+
*/
|
|
15120
|
+
export interface KeyAgreementPrivateKey<A extends KeyAgreement_.Algorithm = KeyAgreement_.Algorithm>
|
|
15121
|
+
extends declare<KeyAgreement_.PrivateKey<A>>
|
|
15122
|
+
{
|
|
15123
|
+
readonly "Rebuild": KeyAgreementPrivateKey<A>
|
|
15124
|
+
}
|
|
15125
|
+
|
|
15126
|
+
/**
|
|
15127
|
+
* Schema for live `KeyAgreement.PrivateKey` values of an algorithm.
|
|
15128
|
+
*
|
|
15129
|
+
* **Details**
|
|
15130
|
+
*
|
|
15131
|
+
* Decoding checks the key's algorithm and returns the key itself. The key has
|
|
15132
|
+
* no JSON form: `toCodecJson` fails with a `Forbidden` issue, so use
|
|
15133
|
+
* {@link KeyAgreementPrivateKeyFromFormat} or
|
|
15134
|
+
* {@link KeyAgreementPrivateKeyFromBytes} to read and write keys. Keys
|
|
15135
|
+
* display redacted, compare by reference, and have no `Arbitrary`.
|
|
15136
|
+
*
|
|
15137
|
+
* @stability unstable
|
|
15138
|
+
* @category crypto
|
|
15139
|
+
* @since 4.0.0
|
|
15140
|
+
*/
|
|
15141
|
+
export const KeyAgreementPrivateKey = <A extends KeyAgreement_.Algorithm>(
|
|
15142
|
+
algorithm: A
|
|
15143
|
+
): KeyAgreementPrivateKey<A> =>
|
|
15144
|
+
declareCryptoKey<KeyAgreement_.PrivateKey<A>>(
|
|
15145
|
+
"KeyAgreementPrivateKey",
|
|
15146
|
+
"KeyAgreement",
|
|
15147
|
+
"PrivateKey",
|
|
15148
|
+
KeyAgreement_.isPrivateKey,
|
|
15149
|
+
algorithm
|
|
15150
|
+
)
|
|
15151
|
+
|
|
15152
|
+
/**
|
|
15153
|
+
* Schema that decodes an X25519 private key into a
|
|
15154
|
+
* `KeyAgreement.PrivateKey`.
|
|
15155
|
+
*
|
|
15156
|
+
* **Details**
|
|
15157
|
+
*
|
|
15158
|
+
* Decoding runs `KeyAgreement.privateKey`, which is synchronous, so the
|
|
15159
|
+
* schema works with `Schema.decodeSync`. Under `Config.schema` the bytes are
|
|
15160
|
+
* read as base64. A `CryptoError` becomes an `InvalidValue` issue whose
|
|
15161
|
+
* `cause` is the error. ECDH private keys have no raw form, so passing them
|
|
15162
|
+
* is a type error. Encoding fails with a `Forbidden` issue unless
|
|
15163
|
+
* `allowEncode` is `true`.
|
|
15164
|
+
*
|
|
15165
|
+
* @stability unstable
|
|
15166
|
+
* @category crypto
|
|
15167
|
+
* @since 4.0.0
|
|
15168
|
+
*/
|
|
15169
|
+
export const KeyAgreementPrivateKeyFromBytes = <
|
|
15170
|
+
A extends KeyAgreement_.X25519
|
|
15171
|
+
>(algorithm: A, options?: CryptoKeyOptions): decodeTo<KeyAgreementPrivateKey<A>, Uint8Array> =>
|
|
15172
|
+
cryptoKeyFromBytes(
|
|
15173
|
+
"KeyAgreementPrivateKeyFromBytes",
|
|
15174
|
+
KeyAgreementPrivateKey(algorithm),
|
|
15175
|
+
(bytes) => KeyAgreement_.privateKey(algorithm, bytes),
|
|
15176
|
+
options?.allowEncode === true ? KeyAgreement_.toBytes : undefined
|
|
15177
|
+
)
|
|
15178
|
+
|
|
15179
|
+
/**
|
|
15180
|
+
* Schema that decodes a `KeyAgreement.PrivateKey` with
|
|
15181
|
+
* `KeyFormat.decodePrivate`.
|
|
15182
|
+
*
|
|
15183
|
+
* **Details**
|
|
15184
|
+
*
|
|
15185
|
+
* The format must hold private keys: `KeyFormat.pkcs8`, `KeyFormat.jwk`,
|
|
15186
|
+
* `KeyFormat.sec1`, or their PEM forms. A format for another role is a type
|
|
15187
|
+
* error. Decoding runs the runtime's key import, so use the async decoding
|
|
15188
|
+
* functions: `Schema.decodeSync` throws. A `CryptoError` becomes an
|
|
15189
|
+
* `InvalidValue` issue whose `cause` is the error. Encoding fails with a
|
|
15190
|
+
* `Forbidden` issue unless `allowEncode` is `true`, and always for the
|
|
15191
|
+
* read-only PKCS#1 and SEC1 formats.
|
|
15192
|
+
*
|
|
15193
|
+
* @stability unstable
|
|
15194
|
+
* @category crypto
|
|
15195
|
+
* @since 4.0.0
|
|
15196
|
+
*/
|
|
15197
|
+
export const KeyAgreementPrivateKeyFromFormat = <A extends KeyAgreement_.Algorithm, Data>(
|
|
15198
|
+
format: KeyFormat_.Format<"private", "decode", Data>,
|
|
15199
|
+
algorithm: A,
|
|
15200
|
+
options?: CryptoKeyOptions
|
|
15201
|
+
): decodeTo<KeyAgreementPrivateKey<A>, Codec<Data>> =>
|
|
15202
|
+
cryptoKeyFromFormat(
|
|
15203
|
+
"KeyAgreementPrivateKeyFromFormat",
|
|
15204
|
+
KeyAgreementPrivateKey(algorithm),
|
|
15205
|
+
format,
|
|
15206
|
+
(data) =>
|
|
15207
|
+
KeyFormat_.decodePrivate(format, algorithm, data) as Effect.Effect<
|
|
15208
|
+
KeyAgreement_.PrivateKey<A>,
|
|
15209
|
+
CryptoError_.CryptoError
|
|
15210
|
+
>,
|
|
15211
|
+
options?.allowEncode === true
|
|
15212
|
+
)
|
|
15213
|
+
|
|
15214
|
+
/**
|
|
15215
|
+
* Type-level representation of {@link KeyWrapKey}.
|
|
15216
|
+
*
|
|
15217
|
+
* @stability unstable
|
|
15218
|
+
* @category models
|
|
15219
|
+
* @since 4.0.0
|
|
15220
|
+
*/
|
|
15221
|
+
export interface KeyWrapKey<A extends KeyWrap_.AesKw = KeyWrap_.AesKw> extends declare<KeyWrap_.Key<A>> {
|
|
15222
|
+
readonly "Rebuild": KeyWrapKey<A>
|
|
15223
|
+
}
|
|
15224
|
+
|
|
15225
|
+
/**
|
|
15226
|
+
* Schema for live AES-KW `KeyWrap.Key` values of an algorithm.
|
|
15227
|
+
*
|
|
15228
|
+
* **Details**
|
|
15229
|
+
*
|
|
15230
|
+
* Decoding checks the key's algorithm and returns the key itself. The key has
|
|
15231
|
+
* no JSON form: `toCodecJson` fails with a `Forbidden` issue, so use
|
|
15232
|
+
* {@link KeyWrapKeyFromFormat} or {@link KeyWrapKeyFromBytes} to read and
|
|
15233
|
+
* write keys. Keys display redacted, compare by reference, and have no
|
|
15234
|
+
* `Arbitrary`.
|
|
15235
|
+
*
|
|
15236
|
+
* @stability unstable
|
|
15237
|
+
* @category crypto
|
|
15238
|
+
* @since 4.0.0
|
|
15239
|
+
*/
|
|
15240
|
+
export const KeyWrapKey = <A extends KeyWrap_.AesKw>(algorithm: A): KeyWrapKey<A> =>
|
|
15241
|
+
declareCryptoKey<KeyWrap_.Key<A>>("KeyWrapKey", "KeyWrap", "Key", KeyWrap_.isKey, algorithm)
|
|
15242
|
+
|
|
15243
|
+
/**
|
|
15244
|
+
* Schema that decodes raw key bytes into an AES-KW `KeyWrap.Key`.
|
|
15245
|
+
*
|
|
15246
|
+
* **Details**
|
|
15247
|
+
*
|
|
15248
|
+
* Decoding runs `KeyWrap.key`, which is synchronous, so the schema works with
|
|
15249
|
+
* `Schema.decodeSync`. Under `Config.schema` the bytes are read as base64. A
|
|
15250
|
+
* `CryptoError` becomes an `InvalidValue` issue whose `cause` is the error.
|
|
15251
|
+
* Encoding fails with a `Forbidden` issue unless `allowEncode` is `true`.
|
|
15252
|
+
*
|
|
15253
|
+
* @stability unstable
|
|
15254
|
+
* @category crypto
|
|
15255
|
+
* @since 4.0.0
|
|
15256
|
+
*/
|
|
15257
|
+
export const KeyWrapKeyFromBytes = <A extends KeyWrap_.AesKw>(
|
|
15258
|
+
algorithm: A,
|
|
15259
|
+
options?: CryptoKeyOptions
|
|
15260
|
+
): decodeTo<KeyWrapKey<A>, Uint8Array> =>
|
|
15261
|
+
cryptoKeyFromBytes(
|
|
15262
|
+
"KeyWrapKeyFromBytes",
|
|
15263
|
+
KeyWrapKey(algorithm),
|
|
15264
|
+
(bytes) => KeyWrap_.key(algorithm, bytes),
|
|
15265
|
+
options?.allowEncode === true ? KeyWrap_.toBytes : undefined
|
|
15266
|
+
)
|
|
15267
|
+
|
|
15268
|
+
/**
|
|
15269
|
+
* Schema that decodes an AES-KW `KeyWrap.Key` from a JWK with
|
|
15270
|
+
* `KeyFormat.decodeSecret`.
|
|
15271
|
+
*
|
|
15272
|
+
* **Details**
|
|
15273
|
+
*
|
|
15274
|
+
* Decoding returns an Effect, so use the async decoding functions:
|
|
15275
|
+
* `Schema.decodeSync` throws. A `CryptoError` becomes an `InvalidValue` issue
|
|
15276
|
+
* whose `cause` is the error. Encoding fails with a `Forbidden` issue unless
|
|
15277
|
+
* `allowEncode` is `true`.
|
|
15278
|
+
*
|
|
15279
|
+
* @stability unstable
|
|
15280
|
+
* @category crypto
|
|
15281
|
+
* @since 4.0.0
|
|
15282
|
+
*/
|
|
15283
|
+
export const KeyWrapKeyFromFormat = <A extends KeyWrap_.AesKw, Data>(
|
|
15284
|
+
format: KeyFormat_.Format<"secret", "decode", Data>,
|
|
15285
|
+
algorithm: A,
|
|
15286
|
+
options?: CryptoKeyOptions
|
|
15287
|
+
): decodeTo<KeyWrapKey<A>, Codec<Data>> =>
|
|
15288
|
+
cryptoKeyFromFormat(
|
|
15289
|
+
"KeyWrapKeyFromFormat",
|
|
15290
|
+
KeyWrapKey(algorithm),
|
|
15291
|
+
format,
|
|
15292
|
+
(data) =>
|
|
15293
|
+
KeyFormat_.decodeSecret(format, algorithm, data) as Effect.Effect<KeyWrap_.Key<A>, CryptoError_.CryptoError>,
|
|
15294
|
+
options?.allowEncode === true
|
|
15295
|
+
)
|
|
15296
|
+
|
|
15297
|
+
/**
|
|
15298
|
+
* Type-level representation of {@link KeyWrapPublicKey}.
|
|
15299
|
+
*
|
|
15300
|
+
* @stability unstable
|
|
15301
|
+
* @category models
|
|
15302
|
+
* @since 4.0.0
|
|
15303
|
+
*/
|
|
15304
|
+
export interface KeyWrapPublicKey<A extends KeyWrap_.RsaOaep = KeyWrap_.RsaOaep>
|
|
15305
|
+
extends declare<KeyWrap_.PublicKey<A>>
|
|
15306
|
+
{
|
|
15307
|
+
readonly "Rebuild": KeyWrapPublicKey<A>
|
|
15308
|
+
}
|
|
15309
|
+
|
|
15310
|
+
/**
|
|
15311
|
+
* Schema for live RSA-OAEP `KeyWrap.PublicKey` values of an algorithm.
|
|
15312
|
+
*
|
|
15313
|
+
* **Details**
|
|
15314
|
+
*
|
|
15315
|
+
* Decoding checks the key's algorithm and returns the key itself. The key has
|
|
15316
|
+
* no JSON form: `toCodecJson` fails with a `Forbidden` issue, so use
|
|
15317
|
+
* {@link KeyWrapPublicKeyFromFormat} to read and write keys. RSA-OAEP keys
|
|
15318
|
+
* have no raw form. Keys compare by reference and have no `Arbitrary`.
|
|
15319
|
+
*
|
|
15320
|
+
* @stability unstable
|
|
15321
|
+
* @category crypto
|
|
15322
|
+
* @since 4.0.0
|
|
15323
|
+
*/
|
|
15324
|
+
export const KeyWrapPublicKey = <A extends KeyWrap_.RsaOaep>(algorithm: A): KeyWrapPublicKey<A> =>
|
|
15325
|
+
declareCryptoKey<KeyWrap_.PublicKey<A>>(
|
|
15326
|
+
"KeyWrapPublicKey",
|
|
15327
|
+
"KeyWrap",
|
|
15328
|
+
"PublicKey",
|
|
15329
|
+
KeyWrap_.isPublicKey,
|
|
15330
|
+
algorithm
|
|
15331
|
+
)
|
|
15332
|
+
|
|
15333
|
+
/**
|
|
15334
|
+
* Schema that decodes an RSA-OAEP `KeyWrap.PublicKey` with
|
|
15335
|
+
* `KeyFormat.decodePublic` and encodes it with `KeyFormat.encode`.
|
|
15336
|
+
*
|
|
15337
|
+
* **Details**
|
|
15338
|
+
*
|
|
15339
|
+
* The format must hold public keys: `KeyFormat.spki`, `KeyFormat.jwk`, or
|
|
15340
|
+
* `KeyFormat.pem(KeyFormat.spki)`. A format for another role is a type
|
|
15341
|
+
* error. Decoding runs the runtime's key import, so use the async decoding
|
|
15342
|
+
* functions: `Schema.decodeSync` throws. A `CryptoError` becomes an
|
|
15343
|
+
* `InvalidValue` issue whose `cause` is the error.
|
|
15344
|
+
*
|
|
15345
|
+
* @stability unstable
|
|
15346
|
+
* @category crypto
|
|
15347
|
+
* @since 4.0.0
|
|
15348
|
+
*/
|
|
15349
|
+
export const KeyWrapPublicKeyFromFormat = <A extends KeyWrap_.RsaOaep, Data>(
|
|
15350
|
+
format: KeyFormat_.Format<"public", "decode", Data>,
|
|
15351
|
+
algorithm: A
|
|
15352
|
+
): decodeTo<KeyWrapPublicKey<A>, Codec<Data>> =>
|
|
15353
|
+
cryptoKeyFromFormat(
|
|
15354
|
+
"KeyWrapPublicKeyFromFormat",
|
|
15355
|
+
KeyWrapPublicKey(algorithm),
|
|
15356
|
+
format,
|
|
15357
|
+
(data) =>
|
|
15358
|
+
KeyFormat_.decodePublic(format, algorithm, data) as Effect.Effect<
|
|
15359
|
+
KeyWrap_.PublicKey<A>,
|
|
15360
|
+
CryptoError_.CryptoError
|
|
15361
|
+
>,
|
|
15362
|
+
true
|
|
15363
|
+
)
|
|
15364
|
+
|
|
15365
|
+
/**
|
|
15366
|
+
* Type-level representation of {@link KeyWrapPrivateKey}.
|
|
15367
|
+
*
|
|
15368
|
+
* @stability unstable
|
|
15369
|
+
* @category models
|
|
15370
|
+
* @since 4.0.0
|
|
15371
|
+
*/
|
|
15372
|
+
export interface KeyWrapPrivateKey<A extends KeyWrap_.RsaOaep = KeyWrap_.RsaOaep>
|
|
15373
|
+
extends declare<KeyWrap_.PrivateKey<A>>
|
|
15374
|
+
{
|
|
15375
|
+
readonly "Rebuild": KeyWrapPrivateKey<A>
|
|
15376
|
+
}
|
|
15377
|
+
|
|
15378
|
+
/**
|
|
15379
|
+
* Schema for live RSA-OAEP `KeyWrap.PrivateKey` values of an algorithm.
|
|
15380
|
+
*
|
|
15381
|
+
* **Details**
|
|
15382
|
+
*
|
|
15383
|
+
* Decoding checks the key's algorithm and returns the key itself. The key has
|
|
15384
|
+
* no JSON form: `toCodecJson` fails with a `Forbidden` issue, so use
|
|
15385
|
+
* {@link KeyWrapPrivateKeyFromFormat} to read and write keys. RSA-OAEP keys
|
|
15386
|
+
* have no raw form. Keys display redacted, compare by reference, and have no
|
|
15387
|
+
* `Arbitrary`.
|
|
15388
|
+
*
|
|
15389
|
+
* @stability unstable
|
|
15390
|
+
* @category crypto
|
|
15391
|
+
* @since 4.0.0
|
|
15392
|
+
*/
|
|
15393
|
+
export const KeyWrapPrivateKey = <A extends KeyWrap_.RsaOaep>(algorithm: A): KeyWrapPrivateKey<A> =>
|
|
15394
|
+
declareCryptoKey<KeyWrap_.PrivateKey<A>>(
|
|
15395
|
+
"KeyWrapPrivateKey",
|
|
15396
|
+
"KeyWrap",
|
|
15397
|
+
"PrivateKey",
|
|
15398
|
+
KeyWrap_.isPrivateKey,
|
|
15399
|
+
algorithm
|
|
15400
|
+
)
|
|
15401
|
+
|
|
15402
|
+
/**
|
|
15403
|
+
* Schema that decodes an RSA-OAEP `KeyWrap.PrivateKey` with
|
|
15404
|
+
* `KeyFormat.decodePrivate`.
|
|
15405
|
+
*
|
|
15406
|
+
* **Details**
|
|
15407
|
+
*
|
|
15408
|
+
* The format must hold private keys: `KeyFormat.pkcs8`, `KeyFormat.jwk`,
|
|
15409
|
+
* `KeyFormat.pkcs1`, or their PEM forms. A format for another role is a type
|
|
15410
|
+
* error. Decoding runs the runtime's key import, so use the async decoding
|
|
15411
|
+
* functions: `Schema.decodeSync` throws. A `CryptoError` becomes an
|
|
15412
|
+
* `InvalidValue` issue whose `cause` is the error. Encoding fails with a
|
|
15413
|
+
* `Forbidden` issue unless `allowEncode` is `true`, and always for the
|
|
15414
|
+
* read-only PKCS#1 format.
|
|
15415
|
+
*
|
|
15416
|
+
* @stability unstable
|
|
15417
|
+
* @category crypto
|
|
15418
|
+
* @since 4.0.0
|
|
15419
|
+
*/
|
|
15420
|
+
export const KeyWrapPrivateKeyFromFormat = <A extends KeyWrap_.RsaOaep, Data>(
|
|
15421
|
+
format: KeyFormat_.Format<"private", "decode", Data>,
|
|
15422
|
+
algorithm: A,
|
|
15423
|
+
options?: CryptoKeyOptions
|
|
15424
|
+
): decodeTo<KeyWrapPrivateKey<A>, Codec<Data>> =>
|
|
15425
|
+
cryptoKeyFromFormat(
|
|
15426
|
+
"KeyWrapPrivateKeyFromFormat",
|
|
15427
|
+
KeyWrapPrivateKey(algorithm),
|
|
15428
|
+
format,
|
|
15429
|
+
(data) =>
|
|
15430
|
+
KeyFormat_.decodePrivate(format, algorithm, data) as Effect.Effect<
|
|
15431
|
+
KeyWrap_.PrivateKey<A>,
|
|
15432
|
+
CryptoError_.CryptoError
|
|
15433
|
+
>,
|
|
15434
|
+
options?.allowEncode === true
|
|
15435
|
+
)
|
|
15436
|
+
|
|
14300
15437
|
// -----------------------------------------------------------------------------
|
|
14301
15438
|
// Exit schemas
|
|
14302
15439
|
// -----------------------------------------------------------------------------
|
|
@@ -16268,7 +17405,12 @@ function makeClass<
|
|
|
16268
17405
|
return getClassSchema(this).rebuild(ast)
|
|
16269
17406
|
}
|
|
16270
17407
|
static make(input: S["~type.make.in"], options?: MakeOptions): Self {
|
|
16271
|
-
return SchemaParser.
|
|
17408
|
+
return SchemaParser.makeClassSync(
|
|
17409
|
+
SchemaAST.toType(getClassSchema(this).ast),
|
|
17410
|
+
input ?? {},
|
|
17411
|
+
options,
|
|
17412
|
+
(fields) => makeClassTrusted(this, fields)
|
|
17413
|
+
)
|
|
16272
17414
|
}
|
|
16273
17415
|
static makeOption(input: S["~type.make.in"], options?: MakeOptions): Option_.Option<Self> {
|
|
16274
17416
|
return SchemaParser.makeOption(getClassSchema(this) as any)(input ?? {}, options) as any
|
|
@@ -16417,6 +17559,10 @@ function isStruct(schema: Struct.Fields | Struct<Struct.Fields>): schema is Stru
|
|
|
16417
17559
|
*
|
|
16418
17560
|
* **Gotchas**
|
|
16419
17561
|
*
|
|
17562
|
+
* To subclass a `Schema.Class`, use `Base.extend<Self>(...)`, even when only
|
|
17563
|
+
* adding methods or getters. Pass `{}` for the fields when none are added.
|
|
17564
|
+
* Plain `class Child extends Base` is unsupported.
|
|
17565
|
+
*
|
|
16420
17566
|
* Passing `disableChecks: true` skips filters and checks, not parsing of types
|
|
16421
17567
|
* and structure. Wrong types and shapes are still rejected, and constructor
|
|
16422
17568
|
* defaults still apply.
|
|
@@ -16490,6 +17636,10 @@ export const Class: {
|
|
|
16490
17636
|
*
|
|
16491
17637
|
* **Gotchas**
|
|
16492
17638
|
*
|
|
17639
|
+
* To subclass a `Schema.Class`, use `Base.extend<Self>(...)`, even when only
|
|
17640
|
+
* adding methods or getters. Pass `{}` for the fields when none are added.
|
|
17641
|
+
* Plain `class Child extends Base` is unsupported.
|
|
17642
|
+
*
|
|
16493
17643
|
* Passing `disableChecks: true` skips filters and checks, not parsing of types
|
|
16494
17644
|
* and structure. Wrong types and shapes are still rejected, and constructor
|
|
16495
17645
|
* defaults still apply.
|