effect 4.0.7 → 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/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 +9 -3
- package/dist/Channel.js.map +1 -1
- package/dist/Config.d.ts +7 -1
- package/dist/Config.d.ts.map +1 -1
- package/dist/Config.js.map +1 -1
- package/dist/Context.d.ts +18 -1
- package/dist/Context.d.ts.map +1 -1
- package/dist/Context.js +27 -8
- package/dist/Context.js.map +1 -1
- package/dist/Cron.d.ts +81 -11
- package/dist/Cron.d.ts.map +1 -1
- package/dist/Cron.js +101 -26
- package/dist/Cron.js.map +1 -1
- package/dist/Duration.d.ts +78 -0
- package/dist/Duration.d.ts.map +1 -1
- package/dist/Duration.js +123 -0
- package/dist/Duration.js.map +1 -1
- package/dist/Effect.d.ts +164 -7
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +11 -1
- package/dist/Effect.js.map +1 -1
- package/dist/FileSystem.d.ts +59 -4
- package/dist/FileSystem.d.ts.map +1 -1
- package/dist/FileSystem.js +9 -2
- package/dist/FileSystem.js.map +1 -1
- package/dist/Glob.d.ts +165 -0
- package/dist/Glob.d.ts.map +1 -0
- package/dist/Glob.js +127 -0
- package/dist/Glob.js.map +1 -0
- package/dist/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/Pool.d.ts +51 -0
- package/dist/Pool.d.ts.map +1 -1
- package/dist/Pool.js +59 -9
- package/dist/Pool.js.map +1 -1
- package/dist/Random.d.ts.map +1 -1
- package/dist/Random.js +3 -3
- package/dist/Random.js.map +1 -1
- package/dist/RcMap.d.ts.map +1 -1
- package/dist/RcMap.js +8 -2
- package/dist/RcMap.js.map +1 -1
- package/dist/Schedule.d.ts +18 -1
- package/dist/Schedule.d.ts.map +1 -1
- package/dist/Schedule.js +7 -2
- package/dist/Schedule.js.map +1 -1
- package/dist/Schema.d.ts +666 -41
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +650 -0
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaGetter.d.ts +6 -1
- package/dist/SchemaGetter.d.ts.map +1 -1
- package/dist/SchemaGetter.js +22 -11
- package/dist/SchemaGetter.js.map +1 -1
- package/dist/SchemaRepresentation.d.ts +14 -0
- package/dist/SchemaRepresentation.d.ts.map +1 -1
- package/dist/SchemaRepresentation.js +16 -0
- package/dist/SchemaRepresentation.js.map +1 -1
- package/dist/SchemaTransformation.d.ts +8 -3
- package/dist/SchemaTransformation.d.ts.map +1 -1
- package/dist/SchemaTransformation.js +6 -3
- package/dist/SchemaTransformation.js.map +1 -1
- package/dist/ScopedCache.d.ts.map +1 -1
- package/dist/ScopedCache.js +5 -7
- package/dist/ScopedCache.js.map +1 -1
- package/dist/Semaphore.d.ts +130 -0
- package/dist/Semaphore.d.ts.map +1 -1
- package/dist/Semaphore.js +40 -0
- package/dist/Semaphore.js.map +1 -1
- package/dist/Stream.d.ts +13 -4
- package/dist/Stream.d.ts.map +1 -1
- package/dist/Stream.js +9 -0
- package/dist/Stream.js.map +1 -1
- package/dist/Terminal.d.ts +18 -1
- package/dist/Terminal.d.ts.map +1 -1
- package/dist/Terminal.js +1 -1
- package/dist/Terminal.js.map +1 -1
- package/dist/ai/AiError.d.ts +43 -116
- package/dist/ai/AiError.d.ts.map +1 -1
- package/dist/ai/AiError.js +53 -72
- package/dist/ai/AiError.js.map +1 -1
- package/dist/ai/Decision.d.ts +196 -15
- package/dist/ai/Decision.d.ts.map +1 -1
- package/dist/ai/Decision.js +130 -0
- package/dist/ai/Decision.js.map +1 -1
- package/dist/ai/DecisionModel.d.ts +54 -13
- package/dist/ai/DecisionModel.d.ts.map +1 -1
- package/dist/ai/DecisionModel.js +123 -12
- package/dist/ai/DecisionModel.js.map +1 -1
- package/dist/ai/McpServer.d.ts +630 -29
- package/dist/ai/McpServer.d.ts.map +1 -1
- package/dist/ai/McpServer.js +562 -116
- 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/Response.d.ts +1 -25
- package/dist/ai/Response.d.ts.map +1 -1
- package/dist/ai/Response.js +1 -10
- package/dist/ai/Response.js.map +1 -1
- package/dist/ai/Tool.d.ts +19 -1
- package/dist/ai/Tool.d.ts.map +1 -1
- package/dist/ai/Tool.js.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 +6 -0
- package/dist/cli/Argument.d.ts.map +1 -1
- package/dist/cli/Argument.js +2 -0
- package/dist/cli/Argument.js.map +1 -1
- package/dist/cli/CliOutput.d.ts +65 -1
- package/dist/cli/CliOutput.d.ts.map +1 -1
- package/dist/cli/CliOutput.js +94 -37
- package/dist/cli/CliOutput.js.map +1 -1
- package/dist/cli/Command.d.ts +23 -0
- package/dist/cli/Command.d.ts.map +1 -1
- package/dist/cli/Command.js +8 -0
- package/dist/cli/Command.js.map +1 -1
- package/dist/cli/Flag.d.ts +107 -0
- package/dist/cli/Flag.d.ts.map +1 -1
- package/dist/cli/Flag.js +37 -0
- package/dist/cli/Flag.js.map +1 -1
- package/dist/cli/HelpDoc.d.ts +15 -1
- package/dist/cli/HelpDoc.d.ts.map +1 -1
- package/dist/cli/Param.d.ts +6 -0
- package/dist/cli/Param.d.ts.map +1 -1
- package/dist/cli/Param.js +2 -0
- package/dist/cli/Param.js.map +1 -1
- package/dist/cli/Primitive.d.ts +14 -0
- package/dist/cli/Primitive.d.ts.map +1 -1
- package/dist/cli/Primitive.js +15 -1
- package/dist/cli/Primitive.js.map +1 -1
- package/dist/cli/Prompt.d.ts +1 -0
- package/dist/cli/Prompt.d.ts.map +1 -1
- package/dist/cli/Prompt.js +1 -0
- package/dist/cli/Prompt.js.map +1 -1
- package/dist/cli/internal/help.d.ts.map +1 -1
- package/dist/cli/internal/help.js +17 -10
- package/dist/cli/internal/help.js.map +1 -1
- package/dist/cluster/Sharding.d.ts.map +1 -1
- package/dist/cluster/Sharding.js +90 -28
- package/dist/cluster/Sharding.js.map +1 -1
- package/dist/cluster/ShardingConfig.d.ts +72 -6
- package/dist/cluster/ShardingConfig.d.ts.map +1 -1
- package/dist/cluster/ShardingConfig.js +4 -0
- package/dist/cluster/ShardingConfig.js.map +1 -1
- package/dist/cluster/SingleRunner.d.ts +3 -3
- package/dist/cluster/SingleRunner.d.ts.map +1 -1
- package/dist/cluster/SingleRunner.js +1 -1
- package/dist/cluster/SqlMessageStorage.d.ts +37 -6
- package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
- package/dist/cluster/SqlMessageStorage.js +34 -7
- package/dist/cluster/SqlMessageStorage.js.map +1 -1
- package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
- package/dist/cluster/SqlRunnerStorage.js +23 -8
- package/dist/cluster/SqlRunnerStorage.js.map +1 -1
- package/dist/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/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/Toml.d.ts +17 -3
- package/dist/encoding/Toml.d.ts.map +1 -1
- package/dist/encoding/Toml.js +104 -16
- package/dist/encoding/Toml.js.map +1 -1
- package/dist/encoding/Yaml.d.ts +8 -1
- package/dist/encoding/Yaml.d.ts.map +1 -1
- package/dist/encoding/Yaml.js +54 -18
- package/dist/encoding/Yaml.js.map +1 -1
- package/dist/encoding/index.d.ts +5 -0
- package/dist/encoding/index.d.ts.map +1 -1
- package/dist/encoding/index.js +5 -0
- package/dist/encoding/index.js.map +1 -1
- package/dist/eventlog/EventJournal.d.ts.map +1 -1
- package/dist/eventlog/EventJournal.js +6 -3
- package/dist/eventlog/EventJournal.js.map +1 -1
- package/dist/eventlog/EventLog.d.ts +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.js +2 -2
- package/dist/eventlog/SqlEventJournal.js.map +1 -1
- package/dist/eventlog/SqlEventLogServerEncrypted.d.ts +21 -5
- package/dist/eventlog/SqlEventLogServerEncrypted.d.ts.map +1 -1
- package/dist/eventlog/SqlEventLogServerEncrypted.js +1048 -113
- package/dist/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
- package/dist/eventlog/SqlEventLogServerUnencrypted.js +2 -2
- package/dist/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
- package/dist/eventlog/internal/batches.d.ts +12 -0
- package/dist/eventlog/internal/batches.d.ts.map +1 -0
- package/dist/eventlog/internal/batches.js +26 -0
- package/dist/eventlog/internal/batches.js.map +1 -0
- package/dist/eventlog/internal/compaction.d.ts +38 -0
- package/dist/eventlog/internal/compaction.d.ts.map +1 -0
- package/dist/eventlog/internal/compaction.js +33 -0
- package/dist/eventlog/internal/compaction.js.map +1 -0
- package/dist/eventlog/internal/identityRootSecretDerivation.js +66 -67
- package/dist/eventlog/internal/identityRootSecretDerivation.js.map +1 -1
- package/dist/eventlog/internal/remoteCompaction.d.ts +31 -0
- package/dist/eventlog/internal/remoteCompaction.d.ts.map +1 -0
- package/dist/eventlog/internal/remoteCompaction.js +76 -0
- package/dist/eventlog/internal/remoteCompaction.js.map +1 -0
- package/dist/http/Cookies.d.ts +172 -0
- package/dist/http/Cookies.d.ts.map +1 -1
- package/dist/http/Cookies.js +143 -1
- package/dist/http/Cookies.js.map +1 -1
- package/dist/http/FetchHttpClient.d.ts +26 -2
- package/dist/http/FetchHttpClient.d.ts.map +1 -1
- package/dist/http/FetchHttpClient.js +78 -15
- package/dist/http/FetchHttpClient.js.map +1 -1
- package/dist/http/HttpClient.d.ts +79 -8
- package/dist/http/HttpClient.d.ts.map +1 -1
- package/dist/http/HttpClient.js +65 -5
- package/dist/http/HttpClient.js.map +1 -1
- package/dist/http/HttpClientRequest.d.ts +9 -5
- package/dist/http/HttpClientRequest.d.ts.map +1 -1
- package/dist/http/HttpClientRequest.js +2 -3
- package/dist/http/HttpClientRequest.js.map +1 -1
- package/dist/http/HttpClientResponse.d.ts.map +1 -1
- package/dist/http/HttpClientResponse.js +3 -2
- package/dist/http/HttpClientResponse.js.map +1 -1
- package/dist/http/HttpMethod.d.ts +7 -1
- package/dist/http/HttpMethod.d.ts.map +1 -1
- package/dist/http/HttpMethod.js +3 -8
- package/dist/http/HttpMethod.js.map +1 -1
- package/dist/http/HttpServerRequest.d.ts +5 -2
- package/dist/http/HttpServerRequest.d.ts.map +1 -1
- package/dist/http/HttpServerRequest.js +6 -17
- package/dist/http/HttpServerRequest.js.map +1 -1
- package/dist/http/HttpServerResponse.d.ts.map +1 -1
- package/dist/http/HttpServerResponse.js +3 -2
- package/dist/http/HttpServerResponse.js.map +1 -1
- package/dist/http/HttpTraceContext.d.ts +2 -1
- package/dist/http/HttpTraceContext.d.ts.map +1 -1
- package/dist/http/HttpTraceContext.js +7 -5
- package/dist/http/HttpTraceContext.js.map +1 -1
- package/dist/http/ProblemDetails.d.ts +96 -0
- package/dist/http/ProblemDetails.d.ts.map +1 -0
- package/dist/http/ProblemDetails.js +98 -0
- package/dist/http/ProblemDetails.js.map +1 -0
- package/dist/http/index.d.ts +5 -0
- package/dist/http/index.d.ts.map +1 -1
- package/dist/http/index.js +5 -0
- package/dist/http/index.js.map +1 -1
- package/dist/http/internal/decompression.js +3 -2
- package/dist/http/internal/decompression.js.map +1 -1
- package/dist/http/internal/urlParams.js +8 -0
- package/dist/http/internal/urlParams.js.map +1 -1
- package/dist/http-api/HttpApiBuilder.js +19 -5
- package/dist/http-api/HttpApiBuilder.js.map +1 -1
- package/dist/http-api/HttpApiClient.d.ts +63 -0
- package/dist/http-api/HttpApiClient.d.ts.map +1 -1
- package/dist/http-api/HttpApiClient.js +51 -0
- package/dist/http-api/HttpApiClient.js.map +1 -1
- package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
- package/dist/http-api/HttpApiEndpoint.js +14 -5
- package/dist/http-api/HttpApiEndpoint.js.map +1 -1
- package/dist/http-api/HttpApiError.d.ts +185 -13
- package/dist/http-api/HttpApiError.d.ts.map +1 -1
- package/dist/http-api/HttpApiError.js +128 -0
- package/dist/http-api/HttpApiError.js.map +1 -1
- package/dist/http-api/HttpApiMiddleware.d.ts +64 -17
- package/dist/http-api/HttpApiMiddleware.d.ts.map +1 -1
- package/dist/http-api/HttpApiMiddleware.js +85 -1
- package/dist/http-api/HttpApiMiddleware.js.map +1 -1
- package/dist/http-api/HttpApiSchema.d.ts +76 -14
- package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
- package/dist/http-api/HttpApiSchema.js +53 -0
- package/dist/http-api/HttpApiSchema.js.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/internal/effect.js +25 -14
- package/dist/internal/effect.js.map +1 -1
- package/dist/internal/glob.d.ts +2 -0
- package/dist/internal/glob.d.ts.map +1 -0
- package/dist/internal/glob.js +630 -0
- package/dist/internal/glob.js.map +1 -0
- package/dist/internal/matcher.js +10 -0
- package/dist/internal/matcher.js.map +1 -1
- package/dist/internal/persistence.js +9 -0
- package/dist/internal/persistence.js.map +1 -1
- package/dist/internal/rcRef.js +4 -1
- package/dist/internal/rcRef.js.map +1 -1
- package/dist/internal/schema/toCodeDocument.js +6 -3
- package/dist/internal/schema/toCodeDocument.js.map +1 -1
- package/dist/internal/trie.js +42 -13
- package/dist/internal/trie.js.map +1 -1
- package/dist/internal/ulid.js +41 -0
- package/dist/internal/ulid.js.map +1 -1
- package/dist/internal/uuid.js +52 -8
- package/dist/internal/uuid.js.map +1 -1
- package/dist/internal/version.js +1 -1
- package/dist/observability/Otlp.d.ts +15 -4
- package/dist/observability/Otlp.d.ts.map +1 -1
- package/dist/observability/Otlp.js +10 -0
- package/dist/observability/Otlp.js.map +1 -1
- package/dist/observability/OtlpResource.d.ts +7 -0
- package/dist/observability/OtlpResource.d.ts.map +1 -1
- package/dist/observability/OtlpResource.js +11 -1
- package/dist/observability/OtlpResource.js.map +1 -1
- package/dist/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/process/ChildProcess.d.ts +207 -67
- package/dist/process/ChildProcess.d.ts.map +1 -1
- package/dist/process/ChildProcess.js +56 -158
- package/dist/process/ChildProcess.js.map +1 -1
- package/dist/process/ChildProcessSpawner.d.ts +5 -0
- package/dist/process/ChildProcessSpawner.d.ts.map +1 -1
- package/dist/process/ChildProcessSpawner.js.map +1 -1
- package/dist/process/CommandLine.d.ts +294 -0
- package/dist/process/CommandLine.d.ts.map +1 -0
- package/dist/process/CommandLine.js +481 -0
- package/dist/process/CommandLine.js.map +1 -0
- package/dist/process/index.d.ts +5 -0
- package/dist/process/index.d.ts.map +1 -1
- package/dist/process/index.js +5 -0
- package/dist/process/index.js.map +1 -1
- package/dist/reactivity/Atom.d.ts +2 -1
- package/dist/reactivity/Atom.d.ts.map +1 -1
- package/dist/reactivity/Atom.js +3 -4
- package/dist/reactivity/Atom.js.map +1 -1
- package/dist/reactivity/AtomRegistry.js.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 +50 -16
- 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.map +1 -1
- package/dist/rpc/RpcSerialization.js +6 -0
- package/dist/rpc/RpcSerialization.js.map +1 -1
- package/dist/rpc/RpcServer.d.ts +31 -0
- package/dist/rpc/RpcServer.d.ts.map +1 -1
- package/dist/rpc/RpcServer.js +139 -66
- package/dist/rpc/RpcServer.js.map +1 -1
- package/dist/schema/Model.d.ts +14 -0
- package/dist/schema/Model.d.ts.map +1 -1
- package/dist/schema/Model.js +18 -3
- package/dist/schema/Model.js.map +1 -1
- package/dist/sql/Migrator.d.ts +0 -19
- package/dist/sql/Migrator.d.ts.map +1 -1
- package/dist/sql/Migrator.js +3 -48
- 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.map +1 -1
- package/dist/sql/SqlClient.js +5 -9
- package/dist/sql/SqlClient.js.map +1 -1
- package/dist/sql/Statement.d.ts +20 -6
- package/dist/sql/Statement.d.ts.map +1 -1
- package/dist/sql/Statement.js +0 -13
- 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/internal/crypto.js +9 -8
- package/dist/workflow/internal/crypto.js.map +1 -1
- package/package.json +3 -1
- package/src/BigDecimal.ts +3 -0
- package/src/Channel.ts +17 -11
- package/src/Config.ts +7 -1
- package/src/Context.ts +34 -10
- package/src/Cron.ts +178 -29
- package/src/Duration.ts +140 -0
- package/src/Effect.ts +914 -85
- package/src/FileSystem.ts +65 -4
- package/src/Glob.ts +205 -0
- package/src/Match.ts +127 -0
- package/src/Pool.ts +73 -15
- package/src/Random.ts +3 -3
- package/src/RcMap.ts +5 -1
- package/src/Schedule.ts +26 -3
- package/src/Schema.ts +1189 -62
- package/src/SchemaGetter.ts +27 -11
- package/src/SchemaRepresentation.ts +19 -0
- package/src/SchemaTransformation.ts +8 -3
- package/src/ScopedCache.ts +5 -9
- package/src/Semaphore.ts +141 -0
- package/src/Stream.ts +15 -6
- package/src/Terminal.ts +19 -1
- package/src/ai/AiError.ts +56 -80
- package/src/ai/Decision.ts +257 -6
- package/src/ai/DecisionModel.ts +171 -28
- package/src/ai/McpServer.ts +1269 -286
- package/src/ai/McpTest.ts +380 -0
- package/src/ai/Response.ts +2 -22
- package/src/ai/Tool.ts +27 -8
- 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 +6 -0
- package/src/cli/CliOutput.ts +117 -49
- package/src/cli/Command.ts +23 -0
- package/src/cli/Flag.ts +107 -0
- package/src/cli/HelpDoc.ts +18 -1
- package/src/cli/Param.ts +6 -0
- package/src/cli/Primitive.ts +16 -1
- package/src/cli/Prompt.ts +1 -0
- package/src/cli/internal/help.ts +21 -9
- package/src/cluster/Sharding.ts +93 -26
- package/src/cluster/ShardingConfig.ts +41 -3
- package/src/cluster/SingleRunner.ts +3 -3
- package/src/cluster/SqlMessageStorage.ts +49 -17
- package/src/cluster/SqlRunnerStorage.ts +37 -27
- package/src/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/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/Toml.ts +85 -20
- package/src/encoding/Yaml.ts +61 -18
- package/src/encoding/index.ts +6 -0
- package/src/eventlog/EventJournal.ts +4 -3
- package/src/eventlog/EventLog.ts +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 +2 -2
- package/src/eventlog/SqlEventLogServerEncrypted.ts +1244 -136
- package/src/eventlog/SqlEventLogServerUnencrypted.ts +2 -2
- package/src/eventlog/internal/batches.ts +30 -0
- package/src/eventlog/internal/compaction.ts +64 -0
- package/src/eventlog/internal/identityRootSecretDerivation.ts +93 -123
- package/src/eventlog/internal/remoteCompaction.ts +92 -0
- package/src/http/Cookies.ts +281 -1
- package/src/http/FetchHttpClient.ts +88 -16
- package/src/http/HttpClient.ts +89 -22
- package/src/http/HttpClientRequest.ts +12 -9
- package/src/http/HttpClientResponse.ts +3 -2
- package/src/http/HttpMethod.ts +10 -2
- package/src/http/HttpServerRequest.ts +15 -30
- package/src/http/HttpServerResponse.ts +3 -2
- package/src/http/HttpTraceContext.ts +7 -4
- package/src/http/ProblemDetails.ts +149 -0
- package/src/http/index.ts +6 -0
- package/src/http/internal/decompression.ts +4 -4
- package/src/http/internal/urlParams.ts +8 -0
- package/src/http-api/HttpApiBuilder.ts +24 -12
- package/src/http-api/HttpApiClient.ts +67 -1
- package/src/http-api/HttpApiEndpoint.ts +14 -5
- package/src/http-api/HttpApiError.ts +250 -0
- package/src/http-api/HttpApiMiddleware.ts +95 -1
- package/src/http-api/HttpApiSchema.ts +105 -14
- package/src/index.ts +6 -6
- package/src/internal/effect.ts +34 -18
- package/src/internal/glob.ts +736 -0
- package/src/internal/matcher.ts +17 -0
- package/src/internal/persistence.ts +11 -0
- package/src/internal/rcRef.ts +4 -1
- package/src/internal/schema/toCodeDocument.ts +7 -3
- package/src/internal/trie.ts +43 -14
- package/src/internal/ulid.ts +44 -0
- package/src/internal/uuid.ts +57 -16
- package/src/internal/version.ts +1 -1
- package/src/observability/Otlp.ts +21 -4
- package/src/observability/OtlpResource.ts +9 -1
- package/src/persistence/KeyValueStore.ts +219 -22
- package/src/persistence/PersistedQueue.ts +128 -59
- package/src/persistence/Persistence.ts +20 -13
- package/src/process/ChildProcess.ts +255 -260
- package/src/process/ChildProcessSpawner.ts +5 -0
- package/src/process/CommandLine.ts +630 -0
- package/src/process/index.ts +6 -0
- package/src/reactivity/Atom.ts +5 -5
- package/src/reactivity/AtomRegistry.ts +1 -1
- package/src/rpc/RpcClient.ts +62 -26
- package/src/rpc/RpcMessage.ts +10 -1
- package/src/rpc/RpcSerialization.ts +3 -0
- package/src/rpc/RpcServer.ts +176 -78
- package/src/schema/Model.ts +26 -3
- package/src/sql/Migrator.ts +4 -63
- package/src/sql/MigratorFileSystem.ts +71 -0
- package/src/sql/SqlClient.ts +2 -16
- package/src/sql/Statement.ts +8 -7
- package/src/sql/index.ts +1 -1
- package/src/testing/index.ts +0 -6
- package/src/workflow/internal/crypto.ts +15 -11
- package/dist/Crypto.d.ts +0 -244
- package/dist/Crypto.d.ts.map +0 -1
- package/dist/Crypto.js +0 -139
- package/dist/Crypto.js.map +0 -1
- package/dist/testing/TestCrypto.d.ts +0 -73
- package/dist/testing/TestCrypto.d.ts.map +0 -1
- package/dist/testing/TestCrypto.js +0 -87
- package/dist/testing/TestCrypto.js.map +0 -1
- package/src/Crypto.ts +0 -347
- package/src/testing/TestCrypto.ts +0 -94
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Key derivation: HKDF, PBKDF2, and Argon2id.
|
|
3
|
+
*
|
|
4
|
+
* The {@link Kdf} service derives bytes from a secret with an algorithm value
|
|
5
|
+
* such as {@link hkdfSha256}, {@link pbkdf2Sha256}, or `argon2id()`. The
|
|
6
|
+
* output is plain bytes: turn it into a typed key with the target family's raw
|
|
7
|
+
* constructor, such as `Mac.key`.
|
|
8
|
+
*
|
|
9
|
+
* **Gotchas**
|
|
10
|
+
*
|
|
11
|
+
* - The secret is bytes, with no string overload. Encode passwords yourself,
|
|
12
|
+
* and normalize their Unicode form first if users type them on different
|
|
13
|
+
* platforms.
|
|
14
|
+
* - `layerWebCrypto` does not provide Argon2id, because WebCrypto has no
|
|
15
|
+
* Argon2. Deriving with it fails with an `Unsupported` reason, so programs
|
|
16
|
+
* can fall back to PBKDF2. `NodeCrypto.layerKdf` provides Argon2id on
|
|
17
|
+
* Node.js 24.7 or later and Bun 1.4.
|
|
18
|
+
*
|
|
19
|
+
* @stability unstable
|
|
20
|
+
* @since 4.0.0
|
|
21
|
+
*/
|
|
22
|
+
import * as Context from "../Context.ts";
|
|
23
|
+
import * as Effect from "../Effect.ts";
|
|
24
|
+
import * as Layer from "../Layer.ts";
|
|
25
|
+
import * as CryptoError from "./CryptoError.ts";
|
|
26
|
+
import * as Digest from "./Digest.ts";
|
|
27
|
+
/**
|
|
28
|
+
* HKDF (RFC 5869) with a hash, from {@link hkdf}.
|
|
29
|
+
*
|
|
30
|
+
* @stability unstable
|
|
31
|
+
* @category models
|
|
32
|
+
* @since 4.0.0
|
|
33
|
+
*/
|
|
34
|
+
export interface Hkdf {
|
|
35
|
+
readonly _tag: "Hkdf";
|
|
36
|
+
readonly name: string;
|
|
37
|
+
readonly hash: Digest.Algorithm;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* PBKDF2 (RFC 8018) with a hash and an iteration count, from {@link pbkdf2}.
|
|
41
|
+
*
|
|
42
|
+
* @stability unstable
|
|
43
|
+
* @category models
|
|
44
|
+
* @since 4.0.0
|
|
45
|
+
*/
|
|
46
|
+
export interface Pbkdf2 {
|
|
47
|
+
readonly _tag: "Pbkdf2";
|
|
48
|
+
readonly name: string;
|
|
49
|
+
readonly hash: Digest.Algorithm;
|
|
50
|
+
readonly iterations: number;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Argon2id (RFC 9106) with its cost parameters, from {@link argon2id}.
|
|
54
|
+
*
|
|
55
|
+
* **Details**
|
|
56
|
+
*
|
|
57
|
+
* `memory` is in KiB, `passes` is the number of passes over the memory, and
|
|
58
|
+
* `parallelism` is the number of lanes.
|
|
59
|
+
*
|
|
60
|
+
* @stability unstable
|
|
61
|
+
* @category models
|
|
62
|
+
* @since 4.0.0
|
|
63
|
+
*/
|
|
64
|
+
export interface Argon2id {
|
|
65
|
+
readonly _tag: "Argon2id";
|
|
66
|
+
readonly name: string;
|
|
67
|
+
readonly memory: number;
|
|
68
|
+
readonly passes: number;
|
|
69
|
+
readonly parallelism: number;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* A key derivation algorithm.
|
|
73
|
+
*
|
|
74
|
+
* @stability unstable
|
|
75
|
+
* @category models
|
|
76
|
+
* @since 4.0.0
|
|
77
|
+
*/
|
|
78
|
+
export type Algorithm = Hkdf | Pbkdf2 | Argon2id;
|
|
79
|
+
/**
|
|
80
|
+
* Builds the HKDF algorithm for a hash.
|
|
81
|
+
*
|
|
82
|
+
* @stability unstable
|
|
83
|
+
* @category algorithms
|
|
84
|
+
* @since 4.0.0
|
|
85
|
+
*/
|
|
86
|
+
export declare const hkdf: (hash: Digest.Algorithm) => Hkdf;
|
|
87
|
+
/**
|
|
88
|
+
* Builds a PBKDF2 algorithm for a hash and an iteration count.
|
|
89
|
+
*
|
|
90
|
+
* **Details**
|
|
91
|
+
*
|
|
92
|
+
* Deriving with an iteration count outside 1 to 2^31 - 1 fails with an
|
|
93
|
+
* `InvalidArgument` reason.
|
|
94
|
+
*
|
|
95
|
+
* @stability unstable
|
|
96
|
+
* @category algorithms
|
|
97
|
+
* @since 4.0.0
|
|
98
|
+
*/
|
|
99
|
+
export declare const pbkdf2: (options: {
|
|
100
|
+
readonly hash: Digest.Algorithm;
|
|
101
|
+
readonly iterations: number;
|
|
102
|
+
}) => Pbkdf2;
|
|
103
|
+
/**
|
|
104
|
+
* HKDF with SHA-1.
|
|
105
|
+
*
|
|
106
|
+
* @stability unstable
|
|
107
|
+
* @category algorithms
|
|
108
|
+
* @since 4.0.0
|
|
109
|
+
*/
|
|
110
|
+
export declare const hkdfSha1: Hkdf;
|
|
111
|
+
/**
|
|
112
|
+
* HKDF with SHA-256.
|
|
113
|
+
*
|
|
114
|
+
* @stability unstable
|
|
115
|
+
* @category algorithms
|
|
116
|
+
* @since 4.0.0
|
|
117
|
+
*/
|
|
118
|
+
export declare const hkdfSha256: Hkdf;
|
|
119
|
+
/**
|
|
120
|
+
* HKDF with SHA-384.
|
|
121
|
+
*
|
|
122
|
+
* @stability unstable
|
|
123
|
+
* @category algorithms
|
|
124
|
+
* @since 4.0.0
|
|
125
|
+
*/
|
|
126
|
+
export declare const hkdfSha384: Hkdf;
|
|
127
|
+
/**
|
|
128
|
+
* HKDF with SHA-512.
|
|
129
|
+
*
|
|
130
|
+
* @stability unstable
|
|
131
|
+
* @category algorithms
|
|
132
|
+
* @since 4.0.0
|
|
133
|
+
*/
|
|
134
|
+
export declare const hkdfSha512: Hkdf;
|
|
135
|
+
/**
|
|
136
|
+
* PBKDF2 with SHA-256 at 600,000 iterations, OWASP's current figure.
|
|
137
|
+
*
|
|
138
|
+
* @stability unstable
|
|
139
|
+
* @category algorithms
|
|
140
|
+
* @since 4.0.0
|
|
141
|
+
*/
|
|
142
|
+
export declare const pbkdf2Sha256: Pbkdf2;
|
|
143
|
+
/**
|
|
144
|
+
* Builds an Argon2id algorithm, with `memory` in KiB.
|
|
145
|
+
*
|
|
146
|
+
* **Details**
|
|
147
|
+
*
|
|
148
|
+
* Omitted costs default to RFC 9106's second recommended setting: 64 MiB of
|
|
149
|
+
* memory (`65_536`), 3 passes, and 4 lanes.
|
|
150
|
+
*
|
|
151
|
+
* **Gotchas**
|
|
152
|
+
*
|
|
153
|
+
* `Kdf.layerWebCrypto` does not provide Argon2id. Use `NodeCrypto.layerKdf`,
|
|
154
|
+
* or fall back to PBKDF2 on the `Unsupported` reason.
|
|
155
|
+
*
|
|
156
|
+
* @stability unstable
|
|
157
|
+
* @category algorithms
|
|
158
|
+
* @since 4.0.0
|
|
159
|
+
*/
|
|
160
|
+
export declare const argon2id: (options?: {
|
|
161
|
+
readonly memory?: number | undefined;
|
|
162
|
+
readonly passes?: number | undefined;
|
|
163
|
+
readonly parallelism?: number | undefined;
|
|
164
|
+
}) => Argon2id;
|
|
165
|
+
declare const Kdf_base: Context.ServiceClass<Kdf, "effect/crypto/Kdf", {
|
|
166
|
+
/**
|
|
167
|
+
* Derives `length` bytes from `secret`.
|
|
168
|
+
*
|
|
169
|
+
* `info` only applies to HKDF; passing it with PBKDF2 or Argon2id fails
|
|
170
|
+
* with an `InvalidArgument` reason.
|
|
171
|
+
*/
|
|
172
|
+
readonly derive: (algorithm: Algorithm, secret: Uint8Array, options: {
|
|
173
|
+
readonly salt: Uint8Array;
|
|
174
|
+
readonly length: number;
|
|
175
|
+
readonly info?: Uint8Array | undefined;
|
|
176
|
+
}) => Effect.Effect<Uint8Array, CryptoError.CryptoError>;
|
|
177
|
+
}>;
|
|
178
|
+
/**
|
|
179
|
+
* Service that derives bytes from a secret.
|
|
180
|
+
*
|
|
181
|
+
* **Example** (Deriving a key with HKDF)
|
|
182
|
+
*
|
|
183
|
+
* ```ts import.meta.vitest
|
|
184
|
+
* import { Effect } from "effect"
|
|
185
|
+
* import { Kdf } from "effect/crypto"
|
|
186
|
+
*
|
|
187
|
+
* const program = Effect.gen(function*() {
|
|
188
|
+
* const kdf = yield* Kdf.Kdf
|
|
189
|
+
* return yield* kdf.derive(Kdf.hkdfSha256, new Uint8Array(32), {
|
|
190
|
+
* salt: new Uint8Array(16),
|
|
191
|
+
* info: new TextEncoder().encode("encryption"),
|
|
192
|
+
* length: 32
|
|
193
|
+
* })
|
|
194
|
+
* })
|
|
195
|
+
*
|
|
196
|
+
* const bytes = await Effect.runPromise(program.pipe(Effect.provide(Kdf.layerWebCrypto)))
|
|
197
|
+
* bytes.length // => 32
|
|
198
|
+
* ```
|
|
199
|
+
*
|
|
200
|
+
* @stability unstable
|
|
201
|
+
* @category services
|
|
202
|
+
* @since 4.0.0
|
|
203
|
+
*/
|
|
204
|
+
export declare class Kdf extends Kdf_base {
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Layer that provides `Kdf` on the `WebCrypto` reference.
|
|
208
|
+
*
|
|
209
|
+
* **Details**
|
|
210
|
+
*
|
|
211
|
+
* HKDF and PBKDF2 run on `crypto.subtle`, off the event loop where the runtime
|
|
212
|
+
* supports it. Argon2id fails with an `Unsupported` reason.
|
|
213
|
+
*
|
|
214
|
+
* @stability unstable
|
|
215
|
+
* @category layers
|
|
216
|
+
* @since 4.0.0
|
|
217
|
+
*/
|
|
218
|
+
export declare const layerWebCrypto: Layer.Layer<Kdf>;
|
|
219
|
+
export {};
|
|
220
|
+
//# sourceMappingURL=Kdf.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Kdf.d.ts","sourceRoot":"","sources":["../../src/crypto/Kdf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,OAAO,MAAM,eAAe,CAAA;AACxC,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,KAAK,MAAM,aAAa,CAAA;AACpC,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAIrC;;;;;;GAMG;AACH,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAA;CAChC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAA;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAC7B;AAED;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAA;AAEhD;;;;;;GAMG;AACH,eAAO,MAAM,IAAI,SAAU,MAAM,CAAC,SAAS,KAAG,IAAwE,CAAA;AAEtH;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,MAAM,YAAa;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAAE,KAAG,MAKjG,CAAA;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,EAAE,IAAwB,CAAA;AAE/C;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,EAAE,IAA0B,CAAA;AAEnD;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,EAAE,IAA0B,CAAA;AAEnD;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,EAAE,IAA0B,CAAA;AAEnD;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,EAAE,MAA6D,CAAA;AAExF;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,QAAQ,aAAc;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACpC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC1C,KAAG,QAMF,CAAA;;IA6BA;;;;;OAKG;qBACc,CACf,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE;QACP,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;QACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;QACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,SAAS,CAAA;KACvC,KACE,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,WAAW,CAAC;;AAzCzD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,GAAI,SAAQ,QAgBA;CAAG;AAgD5B;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAyB3C,CAAA"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Key derivation: HKDF, PBKDF2, and Argon2id.
|
|
3
|
+
*
|
|
4
|
+
* The {@link Kdf} service derives bytes from a secret with an algorithm value
|
|
5
|
+
* such as {@link hkdfSha256}, {@link pbkdf2Sha256}, or `argon2id()`. The
|
|
6
|
+
* output is plain bytes: turn it into a typed key with the target family's raw
|
|
7
|
+
* constructor, such as `Mac.key`.
|
|
8
|
+
*
|
|
9
|
+
* **Gotchas**
|
|
10
|
+
*
|
|
11
|
+
* - The secret is bytes, with no string overload. Encode passwords yourself,
|
|
12
|
+
* and normalize their Unicode form first if users type them on different
|
|
13
|
+
* platforms.
|
|
14
|
+
* - `layerWebCrypto` does not provide Argon2id, because WebCrypto has no
|
|
15
|
+
* Argon2. Deriving with it fails with an `Unsupported` reason, so programs
|
|
16
|
+
* can fall back to PBKDF2. `NodeCrypto.layerKdf` provides Argon2id on
|
|
17
|
+
* Node.js 24.7 or later and Bun 1.4.
|
|
18
|
+
*
|
|
19
|
+
* @stability unstable
|
|
20
|
+
* @since 4.0.0
|
|
21
|
+
*/
|
|
22
|
+
import * as Context from "../Context.js";
|
|
23
|
+
import * as Effect from "../Effect.js";
|
|
24
|
+
import * as Layer from "../Layer.js";
|
|
25
|
+
import * as CryptoError from "./CryptoError.js";
|
|
26
|
+
import * as Digest from "./Digest.js";
|
|
27
|
+
import * as internal from "./internal/webCrypto.js";
|
|
28
|
+
import { WebCrypto } from "./WebCrypto.js";
|
|
29
|
+
/**
|
|
30
|
+
* Builds the HKDF algorithm for a hash.
|
|
31
|
+
*
|
|
32
|
+
* @stability unstable
|
|
33
|
+
* @category algorithms
|
|
34
|
+
* @since 4.0.0
|
|
35
|
+
*/
|
|
36
|
+
export const hkdf = hash => ({
|
|
37
|
+
_tag: "Hkdf",
|
|
38
|
+
name: `hkdf${Digest.nameSuffix(hash)}`,
|
|
39
|
+
hash
|
|
40
|
+
});
|
|
41
|
+
/**
|
|
42
|
+
* Builds a PBKDF2 algorithm for a hash and an iteration count.
|
|
43
|
+
*
|
|
44
|
+
* **Details**
|
|
45
|
+
*
|
|
46
|
+
* Deriving with an iteration count outside 1 to 2^31 - 1 fails with an
|
|
47
|
+
* `InvalidArgument` reason.
|
|
48
|
+
*
|
|
49
|
+
* @stability unstable
|
|
50
|
+
* @category algorithms
|
|
51
|
+
* @since 4.0.0
|
|
52
|
+
*/
|
|
53
|
+
export const pbkdf2 = options => ({
|
|
54
|
+
_tag: "Pbkdf2",
|
|
55
|
+
name: `pbkdf2${Digest.nameSuffix(options.hash)}`,
|
|
56
|
+
hash: options.hash,
|
|
57
|
+
iterations: options.iterations
|
|
58
|
+
});
|
|
59
|
+
/**
|
|
60
|
+
* HKDF with SHA-1.
|
|
61
|
+
*
|
|
62
|
+
* @stability unstable
|
|
63
|
+
* @category algorithms
|
|
64
|
+
* @since 4.0.0
|
|
65
|
+
*/
|
|
66
|
+
export const hkdfSha1 = /*#__PURE__*/hkdf(Digest.sha1);
|
|
67
|
+
/**
|
|
68
|
+
* HKDF with SHA-256.
|
|
69
|
+
*
|
|
70
|
+
* @stability unstable
|
|
71
|
+
* @category algorithms
|
|
72
|
+
* @since 4.0.0
|
|
73
|
+
*/
|
|
74
|
+
export const hkdfSha256 = /*#__PURE__*/hkdf(Digest.sha256);
|
|
75
|
+
/**
|
|
76
|
+
* HKDF with SHA-384.
|
|
77
|
+
*
|
|
78
|
+
* @stability unstable
|
|
79
|
+
* @category algorithms
|
|
80
|
+
* @since 4.0.0
|
|
81
|
+
*/
|
|
82
|
+
export const hkdfSha384 = /*#__PURE__*/hkdf(Digest.sha384);
|
|
83
|
+
/**
|
|
84
|
+
* HKDF with SHA-512.
|
|
85
|
+
*
|
|
86
|
+
* @stability unstable
|
|
87
|
+
* @category algorithms
|
|
88
|
+
* @since 4.0.0
|
|
89
|
+
*/
|
|
90
|
+
export const hkdfSha512 = /*#__PURE__*/hkdf(Digest.sha512);
|
|
91
|
+
/**
|
|
92
|
+
* PBKDF2 with SHA-256 at 600,000 iterations, OWASP's current figure.
|
|
93
|
+
*
|
|
94
|
+
* @stability unstable
|
|
95
|
+
* @category algorithms
|
|
96
|
+
* @since 4.0.0
|
|
97
|
+
*/
|
|
98
|
+
export const pbkdf2Sha256 = /*#__PURE__*/pbkdf2({
|
|
99
|
+
hash: Digest.sha256,
|
|
100
|
+
iterations: 600_000
|
|
101
|
+
});
|
|
102
|
+
/**
|
|
103
|
+
* Builds an Argon2id algorithm, with `memory` in KiB.
|
|
104
|
+
*
|
|
105
|
+
* **Details**
|
|
106
|
+
*
|
|
107
|
+
* Omitted costs default to RFC 9106's second recommended setting: 64 MiB of
|
|
108
|
+
* memory (`65_536`), 3 passes, and 4 lanes.
|
|
109
|
+
*
|
|
110
|
+
* **Gotchas**
|
|
111
|
+
*
|
|
112
|
+
* `Kdf.layerWebCrypto` does not provide Argon2id. Use `NodeCrypto.layerKdf`,
|
|
113
|
+
* or fall back to PBKDF2 on the `Unsupported` reason.
|
|
114
|
+
*
|
|
115
|
+
* @stability unstable
|
|
116
|
+
* @category algorithms
|
|
117
|
+
* @since 4.0.0
|
|
118
|
+
*/
|
|
119
|
+
export const argon2id = options => ({
|
|
120
|
+
_tag: "Argon2id",
|
|
121
|
+
name: "argon2id",
|
|
122
|
+
memory: options?.memory ?? 65_536,
|
|
123
|
+
passes: options?.passes ?? 3,
|
|
124
|
+
parallelism: options?.parallelism ?? 4
|
|
125
|
+
});
|
|
126
|
+
/**
|
|
127
|
+
* Service that derives bytes from a secret.
|
|
128
|
+
*
|
|
129
|
+
* **Example** (Deriving a key with HKDF)
|
|
130
|
+
*
|
|
131
|
+
* ```ts import.meta.vitest
|
|
132
|
+
* import { Effect } from "effect"
|
|
133
|
+
* import { Kdf } from "effect/crypto"
|
|
134
|
+
*
|
|
135
|
+
* const program = Effect.gen(function*() {
|
|
136
|
+
* const kdf = yield* Kdf.Kdf
|
|
137
|
+
* return yield* kdf.derive(Kdf.hkdfSha256, new Uint8Array(32), {
|
|
138
|
+
* salt: new Uint8Array(16),
|
|
139
|
+
* info: new TextEncoder().encode("encryption"),
|
|
140
|
+
* length: 32
|
|
141
|
+
* })
|
|
142
|
+
* })
|
|
143
|
+
*
|
|
144
|
+
* const bytes = await Effect.runPromise(program.pipe(Effect.provide(Kdf.layerWebCrypto)))
|
|
145
|
+
* bytes.length // => 32
|
|
146
|
+
* ```
|
|
147
|
+
*
|
|
148
|
+
* @stability unstable
|
|
149
|
+
* @category services
|
|
150
|
+
* @since 4.0.0
|
|
151
|
+
*/
|
|
152
|
+
export class Kdf extends /*#__PURE__*/Context.Service()("effect/crypto/Kdf") {}
|
|
153
|
+
const invalidArgument = description => internal.fail("Kdf", "derive", new CryptoError.InvalidArgument({
|
|
154
|
+
description
|
|
155
|
+
}));
|
|
156
|
+
const isIntegerIn = (n, min, max) => Number.isSafeInteger(n) && n >= min && n <= max;
|
|
157
|
+
// Checks the arguments before they reach Web Crypto, which takes a 32-bit bit
|
|
158
|
+
// length that some backends wrap instead of rejecting. Node.js aborts the
|
|
159
|
+
// process on PBKDF2 iteration counts above 2^31 - 1.
|
|
160
|
+
const checkArguments = (algorithm, options) => {
|
|
161
|
+
if (algorithm._tag !== "Hkdf" && options.info !== undefined) return invalidArgument("info only applies to HKDF");
|
|
162
|
+
if (algorithm._tag === "Argon2id") return undefined;
|
|
163
|
+
if (algorithm.hash.name === "MD5") return invalidArgument(`${algorithm._tag} needs a SHA hash, not MD5`);
|
|
164
|
+
if (algorithm._tag === "Hkdf") {
|
|
165
|
+
const maxLength = 255 * algorithm.hash.outputLength;
|
|
166
|
+
return isIntegerIn(options.length, 1, maxLength) ? undefined : invalidArgument(`length must be between 1 and ${maxLength} bytes for ${algorithm.name}`);
|
|
167
|
+
}
|
|
168
|
+
if (!isIntegerIn(algorithm.iterations, 1, 0x7fff_ffff)) {
|
|
169
|
+
return invalidArgument("iterations must be between 1 and 2^31 - 1");
|
|
170
|
+
}
|
|
171
|
+
return isIntegerIn(options.length, 1, 0x1fff_ffff) ? undefined : invalidArgument("length must be between 1 and 2^29 - 1 bytes");
|
|
172
|
+
};
|
|
173
|
+
const webCryptoParams = (algorithm, options) => algorithm._tag === "Hkdf" ? {
|
|
174
|
+
name: "HKDF",
|
|
175
|
+
hash: algorithm.hash.name,
|
|
176
|
+
salt: options.salt,
|
|
177
|
+
info: options.info ?? new Uint8Array()
|
|
178
|
+
} : {
|
|
179
|
+
name: "PBKDF2",
|
|
180
|
+
hash: algorithm.hash.name,
|
|
181
|
+
salt: options.salt,
|
|
182
|
+
iterations: algorithm.iterations
|
|
183
|
+
};
|
|
184
|
+
/**
|
|
185
|
+
* Layer that provides `Kdf` on the `WebCrypto` reference.
|
|
186
|
+
*
|
|
187
|
+
* **Details**
|
|
188
|
+
*
|
|
189
|
+
* HKDF and PBKDF2 run on `crypto.subtle`, off the event loop where the runtime
|
|
190
|
+
* supports it. Argon2id fails with an `Unsupported` reason.
|
|
191
|
+
*
|
|
192
|
+
* @stability unstable
|
|
193
|
+
* @category layers
|
|
194
|
+
* @since 4.0.0
|
|
195
|
+
*/
|
|
196
|
+
export const layerWebCrypto = /*#__PURE__*/Layer.effect(Kdf, /*#__PURE__*/WebCrypto.use(crypto => Effect.succeed(Kdf.of({
|
|
197
|
+
derive: (algorithm, secret, options) => Effect.suspend(() => {
|
|
198
|
+
const failure = checkArguments(algorithm, options);
|
|
199
|
+
if (failure !== undefined) return failure;
|
|
200
|
+
if (algorithm._tag === "Argon2id") {
|
|
201
|
+
return internal.fail("Kdf", "derive", new CryptoError.Unsupported({
|
|
202
|
+
description: "Kdf.layerWebCrypto does not provide argon2id"
|
|
203
|
+
}));
|
|
204
|
+
}
|
|
205
|
+
const name = algorithm._tag === "Hkdf" ? "HKDF" : "PBKDF2";
|
|
206
|
+
return internal.run("Kdf", "derive", algorithm.name, crypto, async subtle => {
|
|
207
|
+
const handle = await subtle.importKey("raw", secret, name, false, ["deriveBits"]);
|
|
208
|
+
return new Uint8Array(await subtle.deriveBits(webCryptoParams(algorithm, options), handle, options.length * 8));
|
|
209
|
+
});
|
|
210
|
+
})
|
|
211
|
+
}))));
|
|
212
|
+
//# sourceMappingURL=Kdf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Kdf.js","names":[],"sources":["../../src/crypto/Kdf.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;AAqBA,OAAO,KAAK,OAAO,MAAM,eAAe;AACxC,OAAO,KAAK,MAAM,MAAM,cAAc;AACtC,OAAO,KAAK,KAAK,MAAM,aAAa;AACpC,OAAO,KAAK,WAAW,MAAM,kBAAkB;AAC/C,OAAO,KAAK,MAAM,MAAM,aAAa;AACrC,OAAO,KAAK,QAAQ,MAAM,yBAAyB;AACnD,SAAS,SAAS,QAAQ,gBAAgB;AA0D1C;;;;;;;AAOA,OAAO,MAAM,IAAI,GAAI,IAAsB,KAAY;EAAE,IAAI,EAAE,MAAM;EAAE,IAAI,EAAE,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;EAAE;AAAI,CAAE,CAAC;AAEtH;;;;;;;;;;;;AAYA,OAAO,MAAM,MAAM,GAAI,OAAyE,KAAc;EAC5G,IAAI,EAAE,QAAQ;EACd,IAAI,EAAE,SAAS,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;EAChD,IAAI,EAAE,OAAO,CAAC,IAAI;EAClB,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF;;;;;;;AAOA,OAAO,MAAM,QAAQ,gBAAS,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AAE/C;;;;;;;AAOA,OAAO,MAAM,UAAU,gBAAS,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AAEnD;;;;;;;AAOA,OAAO,MAAM,UAAU,gBAAS,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AAEnD;;;;;;;AAOA,OAAO,MAAM,UAAU,gBAAS,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AAEnD;;;;;;;AAOA,OAAO,MAAM,YAAY,gBAAW,MAAM,CAAC;EAAE,IAAI,EAAE,MAAM,CAAC,MAAM;EAAE,UAAU,EAAE;AAAO,CAAE,CAAC;AAExF;;;;;;;;;;;;;;;;;AAiBA,OAAO,MAAM,QAAQ,GAAI,OAIxB,KAAgB;EACf,IAAI,EAAE,UAAU;EAChB,IAAI,EAAE,UAAU;EAChB,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,MAAM;EACjC,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;EAC5B,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI;CACtC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,OAAM,MAAO,GAAI,sBAAQ,OAAO,CAAC,OAAO,EAgBpC,CAAC,mBAAmB,CAAC;AAIzB,MAAM,eAAe,GAAI,WAAmB,IAC1C,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,WAAW,CAAC,eAAe,CAAC;EAAE;AAAW,CAAE,CAAC,CAAC;AAElF,MAAM,WAAW,GAAG,CAAC,CAAS,EAAE,GAAW,EAAE,GAAW,KAAc,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG;AAErH;AACA;AACA;AACA,MAAM,cAAc,GAAG,CACrB,SAAoB,EACpB,OAAsB,KACuC;EAC7D,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,OAAO,eAAe,CAAC,2BAA2B,CAAC;EAChH,IAAI,SAAS,CAAC,IAAI,KAAK,UAAU,EAAE,OAAO,SAAS;EACnD,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,OAAO,eAAe,CAAC,GAAG,SAAS,CAAC,IAAI,4BAA4B,CAAC;EACxG,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE;IAC7B,MAAM,SAAS,GAAG,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,YAAY;IACnD,OAAO,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,SAAS,CAAC,GAC5C,SAAS,GACT,eAAe,CAAC,gCAAgC,SAAS,cAAc,SAAS,CAAC,IAAI,EAAE,CAAC;EAC9F;EACA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,EAAE,WAAW,CAAC,EAAE;IACtD,OAAO,eAAe,CAAC,2CAA2C,CAAC;EACrE;EACA,OAAO,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,WAAW,CAAC,GAC9C,SAAS,GACT,eAAe,CAAC,6CAA6C,CAAC;AACpE,CAAC;AAED,MAAM,eAAe,GAAG,CAAC,SAAwB,EAAE,OAAsB,KACvE,SAAS,CAAC,IAAI,KAAK,MAAM,GACrB;EACA,IAAI,EAAE,MAAM;EACZ,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI;EACzB,IAAI,EAAE,OAAO,CAAC,IAAoB;EAClC,IAAI,EAAG,OAAO,CAAC,IAAI,IAAI,IAAI,UAAU;CACtC,GACC;EACA,IAAI,EAAE,QAAQ;EACd,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI;EACzB,IAAI,EAAE,OAAO,CAAC,IAAoB;EAClC,UAAU,EAAE,SAAS,CAAC;CACvB;AAEL;;;;;;;;;;;;AAYA,OAAO,MAAM,cAAc,gBAAqB,KAAK,CAAC,MAAM,CAC1D,GAAG,eACH,SAAS,CAAC,GAAG,CAAE,MAAM,IACnB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;EACpB,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,KACjC,MAAM,CAAC,OAAO,CAAC,MAAK;IAClB,MAAM,OAAO,GAAG,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC;IAClD,IAAI,OAAO,KAAK,SAAS,EAAE,OAAO,OAAO;IACzC,IAAI,SAAS,CAAC,IAAI,KAAK,UAAU,EAAE;MACjC,OAAO,QAAQ,CAAC,IAAI,CAClB,KAAK,EACL,QAAQ,EACR,IAAI,WAAW,CAAC,WAAW,CAAC;QAAE,WAAW,EAAE;MAA8C,CAAE,CAAC,CAC7F;IACH;IACA,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,KAAK,MAAM,GAAG,MAAM,GAAG,QAAQ;IAC1D,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAO,MAAM,IAAI;MAC5E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,MAAsB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,YAAY,CAAC,CAAC;MACjG,OAAO,IAAI,UAAU,CACnB,MAAM,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CACzF;IACH,CAAC,CAAC;EACJ,CAAC;CACJ,CAAC,CAAC,CACJ,CACF","ignoreList":[]}
|