effect 4.0.7 → 4.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -1
- package/THIRD_PARTY_NOTICES.md +62 -0
- package/dist/BigDecimal.d.ts +139 -7
- package/dist/BigDecimal.d.ts.map +1 -1
- package/dist/BigDecimal.js +86 -14
- package/dist/BigDecimal.js.map +1 -1
- package/dist/Channel.d.ts +12 -6
- package/dist/Channel.d.ts.map +1 -1
- package/dist/Channel.js +9 -3
- package/dist/Channel.js.map +1 -1
- package/dist/Config.d.ts +7 -1
- package/dist/Config.d.ts.map +1 -1
- package/dist/Config.js.map +1 -1
- package/dist/Context.d.ts +18 -1
- package/dist/Context.d.ts.map +1 -1
- package/dist/Context.js +27 -8
- package/dist/Context.js.map +1 -1
- package/dist/Cron.d.ts +81 -11
- package/dist/Cron.d.ts.map +1 -1
- package/dist/Cron.js +101 -26
- package/dist/Cron.js.map +1 -1
- package/dist/Duration.d.ts +78 -0
- package/dist/Duration.d.ts.map +1 -1
- package/dist/Duration.js +123 -0
- package/dist/Duration.js.map +1 -1
- package/dist/Effect.d.ts +164 -7
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +11 -1
- package/dist/Effect.js.map +1 -1
- package/dist/Equal.d.ts +2 -2
- package/dist/Equal.d.ts.map +1 -1
- package/dist/Equal.js +3 -3
- package/dist/Equal.js.map +1 -1
- package/dist/FileSystem.d.ts +59 -4
- package/dist/FileSystem.d.ts.map +1 -1
- package/dist/FileSystem.js +9 -2
- package/dist/FileSystem.js.map +1 -1
- package/dist/Glob.d.ts +165 -0
- package/dist/Glob.d.ts.map +1 -0
- package/dist/Glob.js +127 -0
- package/dist/Glob.js.map +1 -0
- package/dist/Hash.d.ts +3 -2
- package/dist/Hash.d.ts.map +1 -1
- package/dist/Hash.js +5 -4
- package/dist/Hash.js.map +1 -1
- package/dist/Iterable.d.ts.map +1 -1
- package/dist/Iterable.js +11 -8
- package/dist/Iterable.js.map +1 -1
- package/dist/Match.d.ts +86 -0
- package/dist/Match.d.ts.map +1 -1
- package/dist/Match.js +72 -0
- package/dist/Match.js.map +1 -1
- package/dist/Path.d.ts.map +1 -1
- package/dist/Path.js +5 -1
- package/dist/Path.js.map +1 -1
- package/dist/Pool.d.ts +51 -0
- package/dist/Pool.d.ts.map +1 -1
- package/dist/Pool.js +61 -10
- package/dist/Pool.js.map +1 -1
- package/dist/Random.d.ts.map +1 -1
- package/dist/Random.js +3 -3
- package/dist/Random.js.map +1 -1
- package/dist/RcMap.d.ts.map +1 -1
- package/dist/RcMap.js +8 -2
- package/dist/RcMap.js.map +1 -1
- package/dist/Schedule.d.ts +18 -1
- package/dist/Schedule.d.ts.map +1 -1
- package/dist/Schedule.js +7 -2
- package/dist/Schedule.js.map +1 -1
- package/dist/Schema.d.ts +668 -42
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +652 -1
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaGetter.d.ts +6 -1
- package/dist/SchemaGetter.d.ts.map +1 -1
- package/dist/SchemaGetter.js +22 -11
- package/dist/SchemaGetter.js.map +1 -1
- package/dist/SchemaRepresentation.d.ts +18 -2
- package/dist/SchemaRepresentation.d.ts.map +1 -1
- package/dist/SchemaRepresentation.js +20 -2
- package/dist/SchemaRepresentation.js.map +1 -1
- package/dist/SchemaTransformation.d.ts +10 -5
- package/dist/SchemaTransformation.d.ts.map +1 -1
- package/dist/SchemaTransformation.js +8 -5
- package/dist/SchemaTransformation.js.map +1 -1
- package/dist/ScopedCache.d.ts.map +1 -1
- package/dist/ScopedCache.js +5 -7
- package/dist/ScopedCache.js.map +1 -1
- package/dist/Semaphore.d.ts +130 -0
- package/dist/Semaphore.d.ts.map +1 -1
- package/dist/Semaphore.js +40 -0
- package/dist/Semaphore.js.map +1 -1
- package/dist/Stream.d.ts +13 -4
- package/dist/Stream.d.ts.map +1 -1
- package/dist/Stream.js +9 -0
- package/dist/Stream.js.map +1 -1
- package/dist/Terminal.d.ts +18 -1
- package/dist/Terminal.d.ts.map +1 -1
- package/dist/Terminal.js +1 -1
- package/dist/Terminal.js.map +1 -1
- package/dist/ai/AiError.d.ts +43 -116
- package/dist/ai/AiError.d.ts.map +1 -1
- package/dist/ai/AiError.js +53 -72
- package/dist/ai/AiError.js.map +1 -1
- package/dist/ai/Decision.d.ts +196 -15
- package/dist/ai/Decision.d.ts.map +1 -1
- package/dist/ai/Decision.js +130 -0
- package/dist/ai/Decision.js.map +1 -1
- package/dist/ai/DecisionModel.d.ts +54 -13
- package/dist/ai/DecisionModel.d.ts.map +1 -1
- package/dist/ai/DecisionModel.js +123 -12
- package/dist/ai/DecisionModel.js.map +1 -1
- package/dist/ai/McpClient.d.ts +171 -19
- package/dist/ai/McpClient.d.ts.map +1 -1
- package/dist/ai/McpClient.js +277 -66
- package/dist/ai/McpClient.js.map +1 -1
- package/dist/ai/McpSchema.d.ts +108 -0
- package/dist/ai/McpSchema.d.ts.map +1 -1
- package/dist/ai/McpSchema.js +99 -0
- package/dist/ai/McpSchema.js.map +1 -1
- package/dist/ai/McpServer.d.ts +744 -29
- package/dist/ai/McpServer.d.ts.map +1 -1
- package/dist/ai/McpServer.js +763 -136
- package/dist/ai/McpServer.js.map +1 -1
- package/dist/ai/McpTest.d.ts +130 -0
- package/dist/ai/McpTest.d.ts.map +1 -0
- package/dist/ai/McpTest.js +237 -0
- package/dist/ai/McpTest.js.map +1 -0
- package/dist/ai/Prompt.d.ts.map +1 -1
- package/dist/ai/Prompt.js +20 -11
- package/dist/ai/Prompt.js.map +1 -1
- package/dist/ai/Response.d.ts +1 -25
- package/dist/ai/Response.d.ts.map +1 -1
- package/dist/ai/Response.js +1 -10
- package/dist/ai/Response.js.map +1 -1
- package/dist/ai/Tool.d.ts +19 -1
- package/dist/ai/Tool.d.ts.map +1 -1
- package/dist/ai/Tool.js +5 -7
- package/dist/ai/Tool.js.map +1 -1
- package/dist/ai/index.d.ts +5 -0
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +5 -0
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/internal/mcpCore.js +89 -15
- package/dist/ai/internal/mcpCore.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2024_11_05.js +7 -6
- package/dist/ai/internal/mcpProtocol/v2024_11_05.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_03_26.js +7 -6
- package/dist/ai/internal/mcpProtocol/v2025_03_26.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_06_18.js +7 -6
- package/dist/ai/internal/mcpProtocol/v2025_06_18.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_11_25.js +7 -6
- package/dist/ai/internal/mcpProtocol/v2025_11_25.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js +60 -17
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
- package/dist/ai/internal/mcpProtocol.js +25 -0
- package/dist/ai/internal/mcpProtocol.js.map +1 -1
- package/dist/ai/internal/mcpRuntime.js +8 -6
- package/dist/ai/internal/mcpRuntime.js.map +1 -1
- package/dist/ai/internal/mcpSkills.d.ts +2 -0
- package/dist/ai/internal/mcpSkills.d.ts.map +1 -0
- package/dist/ai/internal/mcpSkills.js +428 -0
- package/dist/ai/internal/mcpSkills.js.map +1 -0
- package/dist/ai/internal/mcpStatefulRuntime.js +6 -1
- package/dist/ai/internal/mcpStatefulRuntime.js.map +1 -1
- package/dist/cli/Argument.d.ts +6 -0
- package/dist/cli/Argument.d.ts.map +1 -1
- package/dist/cli/Argument.js +2 -0
- package/dist/cli/Argument.js.map +1 -1
- package/dist/cli/CliOutput.d.ts +65 -1
- package/dist/cli/CliOutput.d.ts.map +1 -1
- package/dist/cli/CliOutput.js +94 -37
- package/dist/cli/CliOutput.js.map +1 -1
- package/dist/cli/Command.d.ts +23 -0
- package/dist/cli/Command.d.ts.map +1 -1
- package/dist/cli/Command.js +8 -0
- package/dist/cli/Command.js.map +1 -1
- package/dist/cli/Flag.d.ts +107 -0
- package/dist/cli/Flag.d.ts.map +1 -1
- package/dist/cli/Flag.js +37 -0
- package/dist/cli/Flag.js.map +1 -1
- package/dist/cli/HelpDoc.d.ts +15 -1
- package/dist/cli/HelpDoc.d.ts.map +1 -1
- package/dist/cli/Param.d.ts +6 -0
- package/dist/cli/Param.d.ts.map +1 -1
- package/dist/cli/Param.js +2 -0
- package/dist/cli/Param.js.map +1 -1
- package/dist/cli/Primitive.d.ts +14 -0
- package/dist/cli/Primitive.d.ts.map +1 -1
- package/dist/cli/Primitive.js +15 -1
- package/dist/cli/Primitive.js.map +1 -1
- package/dist/cli/Prompt.d.ts +1 -0
- package/dist/cli/Prompt.d.ts.map +1 -1
- package/dist/cli/Prompt.js +1 -0
- package/dist/cli/Prompt.js.map +1 -1
- package/dist/cli/internal/help.d.ts.map +1 -1
- package/dist/cli/internal/help.js +17 -10
- package/dist/cli/internal/help.js.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.js +15 -5
- package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
- package/dist/cluster/Reply.d.ts +1 -1
- package/dist/cluster/Reply.d.ts.map +1 -1
- package/dist/cluster/Reply.js.map +1 -1
- package/dist/cluster/Sharding.d.ts.map +1 -1
- package/dist/cluster/Sharding.js +93 -28
- package/dist/cluster/Sharding.js.map +1 -1
- package/dist/cluster/ShardingConfig.d.ts +72 -6
- package/dist/cluster/ShardingConfig.d.ts.map +1 -1
- package/dist/cluster/ShardingConfig.js +4 -0
- package/dist/cluster/ShardingConfig.js.map +1 -1
- package/dist/cluster/SingleRunner.d.ts +3 -3
- package/dist/cluster/SingleRunner.d.ts.map +1 -1
- package/dist/cluster/SingleRunner.js +1 -1
- package/dist/cluster/SqlMessageStorage.d.ts +37 -6
- package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
- package/dist/cluster/SqlMessageStorage.js +34 -7
- package/dist/cluster/SqlMessageStorage.js.map +1 -1
- package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
- package/dist/cluster/SqlRunnerStorage.js +23 -8
- package/dist/cluster/SqlRunnerStorage.js.map +1 -1
- package/dist/cluster/internal/entityManager.js +15 -7
- package/dist/cluster/internal/entityManager.js.map +1 -1
- package/dist/crypto/Aead.d.ts +323 -0
- package/dist/crypto/Aead.d.ts.map +1 -0
- package/dist/crypto/Aead.js +331 -0
- package/dist/crypto/Aead.js.map +1 -0
- package/dist/crypto/Cipher.d.ts +236 -0
- package/dist/crypto/Cipher.d.ts.map +1 -0
- package/dist/crypto/Cipher.js +233 -0
- package/dist/crypto/Cipher.js.map +1 -0
- package/dist/crypto/CryptoError.d.ts +212 -0
- package/dist/crypto/CryptoError.d.ts.map +1 -0
- package/dist/crypto/CryptoError.js +202 -0
- package/dist/crypto/CryptoError.js.map +1 -0
- package/dist/crypto/Digest.d.ts +143 -0
- package/dist/crypto/Digest.d.ts.map +1 -0
- package/dist/crypto/Digest.js +146 -0
- package/dist/crypto/Digest.js.map +1 -0
- package/dist/crypto/Kdf.d.ts +220 -0
- package/dist/crypto/Kdf.d.ts.map +1 -0
- package/dist/crypto/Kdf.js +212 -0
- package/dist/crypto/Kdf.js.map +1 -0
- package/dist/crypto/KeyAgreement.d.ts +324 -0
- package/dist/crypto/KeyAgreement.d.ts.map +1 -0
- package/dist/crypto/KeyAgreement.js +303 -0
- package/dist/crypto/KeyAgreement.js.map +1 -0
- package/dist/crypto/KeyFormat.d.ts +341 -0
- package/dist/crypto/KeyFormat.d.ts.map +1 -0
- package/dist/crypto/KeyFormat.js +556 -0
- package/dist/crypto/KeyFormat.js.map +1 -0
- package/dist/crypto/KeyWrap.d.ts +390 -0
- package/dist/crypto/KeyWrap.d.ts.map +1 -0
- package/dist/crypto/KeyWrap.js +381 -0
- package/dist/crypto/KeyWrap.js.map +1 -0
- package/dist/crypto/Mac.d.ts +278 -0
- package/dist/crypto/Mac.d.ts.map +1 -0
- package/dist/crypto/Mac.js +288 -0
- package/dist/crypto/Mac.js.map +1 -0
- package/dist/crypto/SecureRandom.d.ts +340 -0
- package/dist/crypto/SecureRandom.d.ts.map +1 -0
- package/dist/crypto/SecureRandom.js +257 -0
- package/dist/crypto/SecureRandom.js.map +1 -0
- package/dist/crypto/Signature.d.ts +449 -0
- package/dist/crypto/Signature.d.ts.map +1 -0
- package/dist/crypto/Signature.js +484 -0
- package/dist/crypto/Signature.js.map +1 -0
- package/dist/crypto/WebCrypto.d.ts +80 -0
- package/dist/crypto/WebCrypto.d.ts.map +1 -0
- package/dist/crypto/WebCrypto.js +63 -0
- package/dist/crypto/WebCrypto.js.map +1 -0
- package/dist/crypto/index.d.ts +65 -0
- package/dist/crypto/index.d.ts.map +1 -0
- package/dist/crypto/index.js +66 -0
- package/dist/crypto/index.js.map +1 -0
- package/dist/crypto/internal/asymmetric.d.ts +2 -0
- package/dist/crypto/internal/asymmetric.d.ts.map +1 -0
- package/dist/crypto/internal/asymmetric.js +210 -0
- package/dist/crypto/internal/asymmetric.js.map +1 -0
- package/dist/crypto/internal/chacha.d.ts +46 -0
- package/dist/crypto/internal/chacha.d.ts.map +1 -0
- package/dist/crypto/internal/chacha.js +885 -0
- package/dist/crypto/internal/chacha.js.map +1 -0
- package/dist/crypto/internal/der.d.ts +6 -0
- package/dist/crypto/internal/der.d.ts.map +1 -0
- package/dist/crypto/internal/der.js +86 -0
- package/dist/crypto/internal/der.js.map +1 -0
- package/dist/crypto/internal/digest.d.ts +2 -0
- package/dist/crypto/internal/digest.d.ts.map +1 -0
- package/dist/crypto/internal/digest.js +15 -0
- package/dist/crypto/internal/digest.js.map +1 -0
- package/dist/crypto/internal/key.d.ts +2 -0
- package/dist/crypto/internal/key.d.ts.map +1 -0
- package/dist/crypto/internal/key.js +171 -0
- package/dist/crypto/internal/key.js.map +1 -0
- package/dist/crypto/internal/md5.d.ts +39 -0
- package/dist/crypto/internal/md5.d.ts.map +1 -0
- package/dist/crypto/internal/md5.js +179 -0
- package/dist/crypto/internal/md5.js.map +1 -0
- package/dist/crypto/internal/webCrypto.d.ts +2 -0
- package/dist/crypto/internal/webCrypto.d.ts.map +1 -0
- package/dist/crypto/internal/webCrypto.js +111 -0
- package/dist/crypto/internal/webCrypto.js.map +1 -0
- package/dist/encoding/Base64Url.d.ts.map +1 -1
- package/dist/encoding/Base64Url.js +29 -5
- package/dist/encoding/Base64Url.js.map +1 -1
- package/dist/encoding/Csv.d.ts +608 -0
- package/dist/encoding/Csv.d.ts.map +1 -0
- package/dist/encoding/Csv.js +718 -0
- package/dist/encoding/Csv.js.map +1 -0
- package/dist/encoding/Hex.d.ts +3 -2
- package/dist/encoding/Hex.d.ts.map +1 -1
- package/dist/encoding/Hex.js +3 -2
- package/dist/encoding/Hex.js.map +1 -1
- package/dist/encoding/Ndjson.d.ts +5 -4
- package/dist/encoding/Ndjson.d.ts.map +1 -1
- package/dist/encoding/Ndjson.js +6 -5
- package/dist/encoding/Ndjson.js.map +1 -1
- package/dist/encoding/SchemaBinary.d.ts.map +1 -1
- package/dist/encoding/SchemaBinary.js +42 -4
- package/dist/encoding/SchemaBinary.js.map +1 -1
- package/dist/encoding/Sse.d.ts +3 -1
- package/dist/encoding/Sse.d.ts.map +1 -1
- package/dist/encoding/Sse.js +5 -3
- package/dist/encoding/Sse.js.map +1 -1
- package/dist/encoding/Toml.d.ts +17 -3
- package/dist/encoding/Toml.d.ts.map +1 -1
- package/dist/encoding/Toml.js +104 -16
- package/dist/encoding/Toml.js.map +1 -1
- package/dist/encoding/Yaml.d.ts +8 -1
- package/dist/encoding/Yaml.d.ts.map +1 -1
- package/dist/encoding/Yaml.js +54 -18
- package/dist/encoding/Yaml.js.map +1 -1
- package/dist/encoding/index.d.ts +5 -0
- package/dist/encoding/index.d.ts.map +1 -1
- package/dist/encoding/index.js +5 -0
- package/dist/encoding/index.js.map +1 -1
- package/dist/eventlog/EventJournal.d.ts.map +1 -1
- package/dist/eventlog/EventJournal.js +6 -3
- package/dist/eventlog/EventJournal.js.map +1 -1
- package/dist/eventlog/EventLog.d.ts +126 -4
- package/dist/eventlog/EventLog.d.ts.map +1 -1
- package/dist/eventlog/EventLog.js +207 -12
- package/dist/eventlog/EventLog.js.map +1 -1
- package/dist/eventlog/EventLogEncryption.d.ts +41 -4
- package/dist/eventlog/EventLogEncryption.d.ts.map +1 -1
- package/dist/eventlog/EventLogEncryption.js +83 -64
- package/dist/eventlog/EventLogEncryption.js.map +1 -1
- package/dist/eventlog/EventLogMessage.d.ts +279 -0
- package/dist/eventlog/EventLogMessage.d.ts.map +1 -1
- package/dist/eventlog/EventLogMessage.js +217 -1
- package/dist/eventlog/EventLogMessage.js.map +1 -1
- package/dist/eventlog/EventLogRemote.d.ts +200 -28
- package/dist/eventlog/EventLogRemote.d.ts.map +1 -1
- package/dist/eventlog/EventLogRemote.js +186 -16
- package/dist/eventlog/EventLogRemote.js.map +1 -1
- package/dist/eventlog/EventLogServer.d.ts +10 -1
- package/dist/eventlog/EventLogServer.d.ts.map +1 -1
- package/dist/eventlog/EventLogServer.js +45 -22
- package/dist/eventlog/EventLogServer.js.map +1 -1
- package/dist/eventlog/EventLogServerEncrypted.d.ts +336 -5
- package/dist/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
- package/dist/eventlog/EventLogServerEncrypted.js +769 -14
- package/dist/eventlog/EventLogServerEncrypted.js.map +1 -1
- package/dist/eventlog/EventLogServerUnencrypted.d.ts +17 -0
- package/dist/eventlog/EventLogServerUnencrypted.d.ts.map +1 -1
- package/dist/eventlog/EventLogServerUnencrypted.js +14 -2
- package/dist/eventlog/EventLogServerUnencrypted.js.map +1 -1
- package/dist/eventlog/EventLogSessionAuth.d.ts +26 -3
- package/dist/eventlog/EventLogSessionAuth.d.ts.map +1 -1
- package/dist/eventlog/EventLogSessionAuth.js +63 -64
- package/dist/eventlog/EventLogSessionAuth.js.map +1 -1
- package/dist/eventlog/EventRow.d.ts +4 -0
- package/dist/eventlog/EventRow.d.ts.map +1 -1
- package/dist/eventlog/EventRow.js +12 -2
- package/dist/eventlog/EventRow.js.map +1 -1
- package/dist/eventlog/SqlEventJournal.js +2 -2
- package/dist/eventlog/SqlEventJournal.js.map +1 -1
- package/dist/eventlog/SqlEventLogServerEncrypted.d.ts +21 -5
- package/dist/eventlog/SqlEventLogServerEncrypted.d.ts.map +1 -1
- package/dist/eventlog/SqlEventLogServerEncrypted.js +1048 -113
- package/dist/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
- package/dist/eventlog/SqlEventLogServerUnencrypted.js +2 -2
- package/dist/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
- package/dist/eventlog/internal/batches.d.ts +12 -0
- package/dist/eventlog/internal/batches.d.ts.map +1 -0
- package/dist/eventlog/internal/batches.js +26 -0
- package/dist/eventlog/internal/batches.js.map +1 -0
- package/dist/eventlog/internal/compaction.d.ts +38 -0
- package/dist/eventlog/internal/compaction.d.ts.map +1 -0
- package/dist/eventlog/internal/compaction.js +33 -0
- package/dist/eventlog/internal/compaction.js.map +1 -0
- package/dist/eventlog/internal/identityRootSecretDerivation.js +66 -67
- package/dist/eventlog/internal/identityRootSecretDerivation.js.map +1 -1
- package/dist/eventlog/internal/remoteCompaction.d.ts +31 -0
- package/dist/eventlog/internal/remoteCompaction.d.ts.map +1 -0
- package/dist/eventlog/internal/remoteCompaction.js +76 -0
- package/dist/eventlog/internal/remoteCompaction.js.map +1 -0
- package/dist/graphql/GraphQLClient.d.ts +3 -1
- package/dist/graphql/GraphQLClient.d.ts.map +1 -1
- package/dist/graphql/GraphQLClient.js.map +1 -1
- package/dist/graphql/GraphQLClientError.d.ts +14 -9
- package/dist/graphql/GraphQLClientError.d.ts.map +1 -1
- package/dist/graphql/GraphQLClientError.js +14 -21
- package/dist/graphql/GraphQLClientError.js.map +1 -1
- package/dist/graphql/GraphQLProtocol.d.ts +12 -3
- package/dist/graphql/GraphQLProtocol.d.ts.map +1 -1
- package/dist/graphql/GraphQLProtocol.js +4 -1
- package/dist/graphql/GraphQLProtocol.js.map +1 -1
- package/dist/http/Cookies.d.ts +172 -0
- package/dist/http/Cookies.d.ts.map +1 -1
- package/dist/http/Cookies.js +143 -1
- package/dist/http/Cookies.js.map +1 -1
- package/dist/http/FetchHttpClient.d.ts +26 -2
- package/dist/http/FetchHttpClient.d.ts.map +1 -1
- package/dist/http/FetchHttpClient.js +78 -15
- package/dist/http/FetchHttpClient.js.map +1 -1
- package/dist/http/HttpClient.d.ts +268 -15
- package/dist/http/HttpClient.d.ts.map +1 -1
- package/dist/http/HttpClient.js +140 -7
- package/dist/http/HttpClient.js.map +1 -1
- package/dist/http/HttpClientRequest.d.ts +9 -5
- package/dist/http/HttpClientRequest.d.ts.map +1 -1
- package/dist/http/HttpClientRequest.js +2 -3
- package/dist/http/HttpClientRequest.js.map +1 -1
- package/dist/http/HttpClientResponse.d.ts.map +1 -1
- package/dist/http/HttpClientResponse.js +3 -2
- package/dist/http/HttpClientResponse.js.map +1 -1
- package/dist/http/HttpMethod.d.ts +7 -1
- package/dist/http/HttpMethod.d.ts.map +1 -1
- package/dist/http/HttpMethod.js +3 -8
- package/dist/http/HttpMethod.js.map +1 -1
- package/dist/http/HttpServerRequest.d.ts +5 -2
- package/dist/http/HttpServerRequest.d.ts.map +1 -1
- package/dist/http/HttpServerRequest.js +44 -39
- package/dist/http/HttpServerRequest.js.map +1 -1
- package/dist/http/HttpServerResponse.d.ts.map +1 -1
- package/dist/http/HttpServerResponse.js +3 -2
- package/dist/http/HttpServerResponse.js.map +1 -1
- package/dist/http/HttpTraceContext.d.ts +2 -1
- package/dist/http/HttpTraceContext.d.ts.map +1 -1
- package/dist/http/HttpTraceContext.js +7 -5
- package/dist/http/HttpTraceContext.js.map +1 -1
- package/dist/http/ProblemDetails.d.ts +96 -0
- package/dist/http/ProblemDetails.d.ts.map +1 -0
- package/dist/http/ProblemDetails.js +98 -0
- package/dist/http/ProblemDetails.js.map +1 -0
- package/dist/http/index.d.ts +5 -0
- package/dist/http/index.d.ts.map +1 -1
- package/dist/http/index.js +5 -0
- package/dist/http/index.js.map +1 -1
- package/dist/http/internal/decompression.js +3 -2
- package/dist/http/internal/decompression.js.map +1 -1
- package/dist/http/internal/mimeTypes.d.ts +4 -1
- package/dist/http/internal/mimeTypes.d.ts.map +1 -1
- package/dist/http/internal/mimeTypes.js +4 -1
- package/dist/http/internal/mimeTypes.js.map +1 -1
- package/dist/http/internal/urlParams.js +8 -0
- package/dist/http/internal/urlParams.js.map +1 -1
- package/dist/http-api/HttpApiBuilder.js +19 -5
- package/dist/http-api/HttpApiBuilder.js.map +1 -1
- package/dist/http-api/HttpApiClient.d.ts +63 -0
- package/dist/http-api/HttpApiClient.d.ts.map +1 -1
- package/dist/http-api/HttpApiClient.js +51 -0
- package/dist/http-api/HttpApiClient.js.map +1 -1
- package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
- package/dist/http-api/HttpApiEndpoint.js +14 -5
- package/dist/http-api/HttpApiEndpoint.js.map +1 -1
- package/dist/http-api/HttpApiError.d.ts +185 -13
- package/dist/http-api/HttpApiError.d.ts.map +1 -1
- package/dist/http-api/HttpApiError.js +128 -0
- package/dist/http-api/HttpApiError.js.map +1 -1
- package/dist/http-api/HttpApiMiddleware.d.ts +64 -17
- package/dist/http-api/HttpApiMiddleware.d.ts.map +1 -1
- package/dist/http-api/HttpApiMiddleware.js +85 -1
- package/dist/http-api/HttpApiMiddleware.js.map +1 -1
- package/dist/http-api/HttpApiSchema.d.ts +76 -14
- package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
- package/dist/http-api/HttpApiSchema.js +54 -1
- package/dist/http-api/HttpApiSchema.js.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/internal/dateTime.js +49 -24
- package/dist/internal/dateTime.js.map +1 -1
- package/dist/internal/effect.js +35 -14
- package/dist/internal/effect.js.map +1 -1
- package/dist/internal/glob.d.ts +2 -0
- package/dist/internal/glob.d.ts.map +1 -0
- package/dist/internal/glob.js +808 -0
- package/dist/internal/glob.js.map +1 -0
- package/dist/internal/graphql.js +21 -7
- package/dist/internal/graphql.js.map +1 -1
- package/dist/internal/graphqlHeaders.d.ts +7 -0
- package/dist/internal/graphqlHeaders.d.ts.map +1 -1
- package/dist/internal/graphqlHeaders.js +11 -0
- package/dist/internal/graphqlHeaders.js.map +1 -1
- package/dist/internal/matcher.js +10 -0
- package/dist/internal/matcher.js.map +1 -1
- package/dist/internal/persistence.js +9 -0
- package/dist/internal/persistence.js.map +1 -1
- package/dist/internal/rcRef.js +4 -1
- package/dist/internal/rcRef.js.map +1 -1
- package/dist/internal/request.js +29 -42
- package/dist/internal/request.js.map +1 -1
- package/dist/internal/schema/fromJsonSchemaDocument.js +7 -8
- package/dist/internal/schema/fromJsonSchemaDocument.js.map +1 -1
- package/dist/internal/schema/toCodeDocument.js +6 -3
- package/dist/internal/schema/toCodeDocument.js.map +1 -1
- package/dist/internal/trie.js +42 -13
- package/dist/internal/trie.js.map +1 -1
- package/dist/internal/ulid.js +41 -0
- package/dist/internal/ulid.js.map +1 -1
- package/dist/internal/uuid.js +52 -8
- package/dist/internal/uuid.js.map +1 -1
- package/dist/internal/version.js +1 -1
- package/dist/jose/JoseError.d.ts +285 -0
- package/dist/jose/JoseError.d.ts.map +1 -0
- package/dist/jose/JoseError.js +269 -0
- package/dist/jose/JoseError.js.map +1 -0
- package/dist/jose/Jwe.d.ts +128 -0
- package/dist/jose/Jwe.d.ts.map +1 -0
- package/dist/jose/Jwe.js +134 -0
- package/dist/jose/Jwe.js.map +1 -0
- package/dist/jose/Jwk.d.ts +597 -0
- package/dist/jose/Jwk.d.ts.map +1 -0
- package/dist/jose/Jwk.js +503 -0
- package/dist/jose/Jwk.js.map +1 -0
- package/dist/jose/Jwks.d.ts +236 -0
- package/dist/jose/Jwks.d.ts.map +1 -0
- package/dist/jose/Jwks.js +306 -0
- package/dist/jose/Jwks.js.map +1 -0
- package/dist/jose/Jws.d.ts +177 -0
- package/dist/jose/Jws.d.ts.map +1 -0
- package/dist/jose/Jws.js +183 -0
- package/dist/jose/Jws.js.map +1 -0
- package/dist/jose/Jwt.d.ts +270 -0
- package/dist/jose/Jwt.d.ts.map +1 -0
- package/dist/jose/Jwt.js +293 -0
- package/dist/jose/Jwt.js.map +1 -0
- package/dist/jose/index.d.ts +51 -0
- package/dist/jose/index.d.ts.map +1 -0
- package/dist/jose/index.js +52 -0
- package/dist/jose/index.js.map +1 -0
- package/dist/jose/internal/compact.d.ts +2 -0
- package/dist/jose/internal/compact.d.ts.map +1 -0
- package/dist/jose/internal/compact.js +179 -0
- package/dist/jose/internal/compact.js.map +1 -0
- package/dist/net/Host.d.ts.map +1 -1
- package/dist/net/Host.js +5 -10
- package/dist/net/Host.js.map +1 -1
- package/dist/observability/Otlp.d.ts +15 -4
- package/dist/observability/Otlp.d.ts.map +1 -1
- package/dist/observability/Otlp.js +10 -0
- package/dist/observability/Otlp.js.map +1 -1
- package/dist/observability/OtlpResource.d.ts +7 -0
- package/dist/observability/OtlpResource.d.ts.map +1 -1
- package/dist/observability/OtlpResource.js +11 -1
- package/dist/observability/OtlpResource.js.map +1 -1
- package/dist/observability/OtlpSerialization.d.ts +1 -1
- package/dist/observability/OtlpSerialization.d.ts.map +1 -1
- package/dist/observability/OtlpSerialization.js +10 -4
- package/dist/observability/OtlpSerialization.js.map +1 -1
- package/dist/observability/internal/otlpProtobuf.js +3 -3
- package/dist/observability/internal/otlpProtobuf.js.map +1 -1
- package/dist/observability/internal/protobuf.js +6 -0
- package/dist/observability/internal/protobuf.js.map +1 -1
- package/dist/persistence/CircuitBreaker.d.ts +98 -38
- package/dist/persistence/CircuitBreaker.d.ts.map +1 -1
- package/dist/persistence/CircuitBreaker.js +67 -29
- package/dist/persistence/CircuitBreaker.js.map +1 -1
- package/dist/persistence/KeyValueStore.d.ts +47 -2
- package/dist/persistence/KeyValueStore.d.ts.map +1 -1
- package/dist/persistence/KeyValueStore.js +129 -18
- package/dist/persistence/KeyValueStore.js.map +1 -1
- package/dist/persistence/PersistedQueue.d.ts +9 -0
- package/dist/persistence/PersistedQueue.d.ts.map +1 -1
- package/dist/persistence/PersistedQueue.js +94 -52
- package/dist/persistence/PersistedQueue.js.map +1 -1
- package/dist/persistence/Persistence.d.ts +10 -4
- package/dist/persistence/Persistence.d.ts.map +1 -1
- package/dist/persistence/Persistence.js +18 -11
- package/dist/persistence/Persistence.js.map +1 -1
- package/dist/persistence/RateLimiter.d.ts +8 -0
- package/dist/persistence/RateLimiter.d.ts.map +1 -1
- package/dist/persistence/RateLimiter.js +63 -12
- package/dist/persistence/RateLimiter.js.map +1 -1
- package/dist/persistence/index.d.ts +1 -1
- package/dist/persistence/index.js +1 -1
- package/dist/process/ChildProcess.d.ts +207 -67
- package/dist/process/ChildProcess.d.ts.map +1 -1
- package/dist/process/ChildProcess.js +56 -158
- package/dist/process/ChildProcess.js.map +1 -1
- package/dist/process/ChildProcessSpawner.d.ts +5 -0
- package/dist/process/ChildProcessSpawner.d.ts.map +1 -1
- package/dist/process/ChildProcessSpawner.js.map +1 -1
- package/dist/process/CommandLine.d.ts +294 -0
- package/dist/process/CommandLine.d.ts.map +1 -0
- package/dist/process/CommandLine.js +481 -0
- package/dist/process/CommandLine.js.map +1 -0
- package/dist/process/index.d.ts +5 -0
- package/dist/process/index.d.ts.map +1 -1
- package/dist/process/index.js +5 -0
- package/dist/process/index.js.map +1 -1
- package/dist/reactivity/Atom.d.ts +2 -1
- package/dist/reactivity/Atom.d.ts.map +1 -1
- package/dist/reactivity/Atom.js +3 -4
- package/dist/reactivity/Atom.js.map +1 -1
- package/dist/reactivity/AtomRegistry.js +17 -7
- package/dist/reactivity/AtomRegistry.js.map +1 -1
- package/dist/rpc/Rpc.d.ts +1 -1
- package/dist/rpc/Rpc.d.ts.map +1 -1
- package/dist/rpc/Rpc.js.map +1 -1
- package/dist/rpc/RpcClient.d.ts +28 -1
- package/dist/rpc/RpcClient.d.ts.map +1 -1
- package/dist/rpc/RpcClient.js +78 -27
- package/dist/rpc/RpcClient.js.map +1 -1
- package/dist/rpc/RpcMessage.d.ts +13 -3
- package/dist/rpc/RpcMessage.d.ts.map +1 -1
- package/dist/rpc/RpcMessage.js +1 -0
- package/dist/rpc/RpcMessage.js.map +1 -1
- package/dist/rpc/RpcSerialization.d.ts.map +1 -1
- package/dist/rpc/RpcSerialization.js +6 -0
- package/dist/rpc/RpcSerialization.js.map +1 -1
- package/dist/rpc/RpcServer.d.ts +31 -0
- package/dist/rpc/RpcServer.d.ts.map +1 -1
- package/dist/rpc/RpcServer.js +139 -66
- package/dist/rpc/RpcServer.js.map +1 -1
- package/dist/schema/Model.d.ts +14 -0
- package/dist/schema/Model.d.ts.map +1 -1
- package/dist/schema/Model.js +18 -3
- package/dist/schema/Model.js.map +1 -1
- package/dist/sql/Migrator.d.ts +9 -20
- package/dist/sql/Migrator.d.ts.map +1 -1
- package/dist/sql/Migrator.js +20 -53
- package/dist/sql/Migrator.js.map +1 -1
- package/dist/sql/MigratorFileSystem.d.ts +21 -0
- package/dist/sql/MigratorFileSystem.d.ts.map +1 -0
- package/dist/sql/MigratorFileSystem.js +57 -0
- package/dist/sql/MigratorFileSystem.js.map +1 -0
- package/dist/sql/SqlClient.d.ts +38 -3
- package/dist/sql/SqlClient.d.ts.map +1 -1
- package/dist/sql/SqlClient.js +9 -12
- package/dist/sql/SqlClient.js.map +1 -1
- package/dist/sql/Statement.d.ts +61 -9
- package/dist/sql/Statement.d.ts.map +1 -1
- package/dist/sql/Statement.js +24 -33
- package/dist/sql/Statement.js.map +1 -1
- package/dist/sql/index.js +1 -1
- package/dist/testing/index.d.ts +0 -5
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +0 -5
- package/dist/testing/index.js.map +1 -1
- package/dist/workflow/Workflow.d.ts +4 -0
- package/dist/workflow/Workflow.d.ts.map +1 -1
- package/dist/workflow/Workflow.js.map +1 -1
- package/dist/workflow/WorkflowEngine.d.ts.map +1 -1
- package/dist/workflow/WorkflowEngine.js +5 -0
- package/dist/workflow/WorkflowEngine.js.map +1 -1
- package/dist/workflow/internal/crypto.js +9 -8
- package/dist/workflow/internal/crypto.js.map +1 -1
- package/package.json +7 -1
- package/src/BigDecimal.ts +173 -16
- package/src/Channel.ts +17 -11
- package/src/Config.ts +7 -1
- package/src/Context.ts +34 -10
- package/src/Cron.ts +178 -29
- package/src/Duration.ts +140 -0
- package/src/Effect.ts +914 -85
- package/src/Equal.ts +3 -3
- package/src/FileSystem.ts +65 -4
- package/src/Glob.ts +205 -0
- package/src/Hash.ts +5 -4
- package/src/Iterable.ts +8 -5
- package/src/Match.ts +127 -0
- package/src/Path.ts +6 -1
- package/src/Pool.ts +75 -16
- package/src/Random.ts +3 -3
- package/src/RcMap.ts +5 -1
- package/src/Schedule.ts +26 -3
- package/src/Schema.ts +1191 -63
- package/src/SchemaGetter.ts +27 -11
- package/src/SchemaRepresentation.ts +23 -2
- package/src/SchemaTransformation.ts +10 -5
- package/src/ScopedCache.ts +5 -9
- package/src/Semaphore.ts +141 -0
- package/src/Stream.ts +15 -6
- package/src/Terminal.ts +19 -1
- package/src/ai/AiError.ts +56 -80
- package/src/ai/Decision.ts +257 -6
- package/src/ai/DecisionModel.ts +171 -28
- package/src/ai/McpClient.ts +488 -91
- package/src/ai/McpSchema.ts +119 -0
- package/src/ai/McpServer.ts +1525 -319
- package/src/ai/McpTest.ts +380 -0
- package/src/ai/Prompt.ts +16 -11
- package/src/ai/Response.ts +2 -22
- package/src/ai/Tool.ts +32 -18
- package/src/ai/index.ts +6 -0
- package/src/ai/internal/mcpCore.ts +243 -56
- package/src/ai/internal/mcpProtocol/v2024_11_05.ts +7 -8
- package/src/ai/internal/mcpProtocol/v2025_03_26.ts +7 -8
- package/src/ai/internal/mcpProtocol/v2025_06_18.ts +7 -8
- package/src/ai/internal/mcpProtocol/v2025_11_25.ts +7 -8
- package/src/ai/internal/mcpProtocol/v2026_07_28.ts +56 -17
- package/src/ai/internal/mcpProtocol.ts +44 -0
- package/src/ai/internal/mcpRuntime.ts +15 -8
- package/src/ai/internal/mcpSkills.ts +480 -0
- package/src/ai/internal/mcpStatefulRuntime.ts +14 -2
- package/src/cli/Argument.ts +6 -0
- package/src/cli/CliOutput.ts +117 -49
- package/src/cli/Command.ts +23 -0
- package/src/cli/Flag.ts +107 -0
- package/src/cli/HelpDoc.ts +18 -1
- package/src/cli/Param.ts +6 -0
- package/src/cli/Primitive.ts +16 -1
- package/src/cli/Prompt.ts +1 -0
- package/src/cli/internal/help.ts +21 -9
- package/src/cluster/ClusterWorkflowEngine.ts +22 -8
- package/src/cluster/Reply.ts +1 -1
- package/src/cluster/Sharding.ts +96 -26
- package/src/cluster/ShardingConfig.ts +41 -3
- package/src/cluster/SingleRunner.ts +3 -3
- package/src/cluster/SqlMessageStorage.ts +49 -17
- package/src/cluster/SqlRunnerStorage.ts +37 -27
- package/src/cluster/internal/entityManager.ts +24 -10
- package/src/crypto/Aead.ts +517 -0
- package/src/crypto/Cipher.ts +326 -0
- package/src/crypto/CryptoError.ts +242 -0
- package/src/crypto/Digest.ts +167 -0
- package/src/crypto/Kdf.ts +315 -0
- package/src/crypto/KeyAgreement.ts +489 -0
- package/src/crypto/KeyFormat.ts +741 -0
- package/src/crypto/KeyWrap.ts +639 -0
- package/src/crypto/Mac.ts +386 -0
- package/src/crypto/SecureRandom.ts +459 -0
- package/src/crypto/Signature.ts +673 -0
- package/src/crypto/WebCrypto.ts +84 -0
- package/src/crypto/index.ts +78 -0
- package/src/crypto/internal/asymmetric.ts +330 -0
- package/src/crypto/internal/chacha.ts +1088 -0
- package/src/crypto/internal/der.ts +110 -0
- package/src/crypto/internal/digest.ts +16 -0
- package/src/crypto/internal/key.ts +242 -0
- package/src/crypto/internal/md5.ts +170 -0
- package/src/crypto/internal/webCrypto.ts +150 -0
- package/src/encoding/Base64Url.ts +32 -5
- package/src/encoding/Csv.ts +1298 -0
- package/src/encoding/Hex.ts +3 -2
- package/src/encoding/Ndjson.ts +6 -5
- package/src/encoding/SchemaBinary.ts +40 -4
- package/src/encoding/Sse.ts +5 -3
- package/src/encoding/Toml.ts +85 -20
- package/src/encoding/Yaml.ts +61 -18
- package/src/encoding/index.ts +6 -0
- package/src/eventlog/EventJournal.ts +4 -3
- package/src/eventlog/EventLog.ts +347 -15
- package/src/eventlog/EventLogEncryption.ts +118 -110
- package/src/eventlog/EventLogMessage.ts +273 -1
- package/src/eventlog/EventLogRemote.ts +367 -23
- package/src/eventlog/EventLogServer.ts +54 -20
- package/src/eventlog/EventLogServerEncrypted.ts +1135 -67
- package/src/eventlog/EventLogServerUnencrypted.ts +19 -2
- package/src/eventlog/EventLogSessionAuth.ts +82 -70
- package/src/eventlog/EventRow.ts +12 -3
- package/src/eventlog/SqlEventJournal.ts +2 -2
- package/src/eventlog/SqlEventLogServerEncrypted.ts +1244 -136
- package/src/eventlog/SqlEventLogServerUnencrypted.ts +2 -2
- package/src/eventlog/internal/batches.ts +30 -0
- package/src/eventlog/internal/compaction.ts +64 -0
- package/src/eventlog/internal/identityRootSecretDerivation.ts +93 -123
- package/src/eventlog/internal/remoteCompaction.ts +92 -0
- package/src/graphql/GraphQLClient.ts +3 -1
- package/src/graphql/GraphQLClientError.ts +15 -22
- package/src/graphql/GraphQLProtocol.ts +12 -3
- package/src/http/Cookies.ts +281 -1
- package/src/http/FetchHttpClient.ts +88 -16
- package/src/http/HttpClient.ts +299 -33
- package/src/http/HttpClientRequest.ts +12 -9
- package/src/http/HttpClientResponse.ts +3 -2
- package/src/http/HttpMethod.ts +10 -2
- package/src/http/HttpServerRequest.ts +76 -53
- package/src/http/HttpServerResponse.ts +3 -2
- package/src/http/HttpTraceContext.ts +7 -4
- package/src/http/ProblemDetails.ts +149 -0
- package/src/http/index.ts +6 -0
- package/src/http/internal/decompression.ts +4 -4
- package/src/http/internal/mimeTypes.ts +4 -1
- package/src/http/internal/urlParams.ts +8 -0
- package/src/http-api/HttpApiBuilder.ts +24 -12
- package/src/http-api/HttpApiClient.ts +67 -1
- package/src/http-api/HttpApiEndpoint.ts +14 -5
- package/src/http-api/HttpApiError.ts +250 -0
- package/src/http-api/HttpApiMiddleware.ts +95 -1
- package/src/http-api/HttpApiSchema.ts +106 -15
- package/src/index.ts +6 -6
- package/src/internal/dateTime.ts +54 -24
- package/src/internal/effect.ts +40 -18
- package/src/internal/glob.ts +952 -0
- package/src/internal/graphql.ts +27 -9
- package/src/internal/graphqlHeaders.ts +13 -0
- package/src/internal/matcher.ts +17 -0
- package/src/internal/persistence.ts +11 -0
- package/src/internal/rcRef.ts +4 -1
- package/src/internal/request.ts +51 -58
- package/src/internal/schema/fromJsonSchemaDocument.ts +11 -10
- package/src/internal/schema/toCodeDocument.ts +7 -3
- package/src/internal/trie.ts +43 -14
- package/src/internal/ulid.ts +44 -0
- package/src/internal/uuid.ts +57 -16
- package/src/internal/version.ts +1 -1
- package/src/jose/JoseError.ts +329 -0
- package/src/jose/Jwe.ts +196 -0
- package/src/jose/Jwk.ts +777 -0
- package/src/jose/Jwks.ts +418 -0
- package/src/jose/Jws.ts +312 -0
- package/src/jose/Jwt.ts +493 -0
- package/src/jose/index.ts +58 -0
- package/src/jose/internal/compact.ts +195 -0
- package/src/net/Host.ts +5 -10
- package/src/observability/Otlp.ts +21 -4
- package/src/observability/OtlpResource.ts +9 -1
- package/src/observability/OtlpSerialization.ts +13 -5
- package/src/observability/internal/otlpProtobuf.ts +6 -6
- package/src/observability/internal/protobuf.ts +10 -0
- package/src/persistence/CircuitBreaker.ts +113 -48
- package/src/persistence/KeyValueStore.ts +219 -22
- package/src/persistence/PersistedQueue.ts +128 -59
- package/src/persistence/Persistence.ts +20 -13
- package/src/persistence/RateLimiter.ts +84 -15
- package/src/persistence/index.ts +1 -1
- package/src/process/ChildProcess.ts +255 -260
- package/src/process/ChildProcessSpawner.ts +5 -0
- package/src/process/CommandLine.ts +630 -0
- package/src/process/index.ts +6 -0
- package/src/reactivity/Atom.ts +5 -5
- package/src/reactivity/AtomRegistry.ts +20 -9
- package/src/rpc/Rpc.ts +3 -1
- package/src/rpc/RpcClient.ts +94 -38
- package/src/rpc/RpcMessage.ts +13 -3
- package/src/rpc/RpcSerialization.ts +3 -0
- package/src/rpc/RpcServer.ts +176 -78
- package/src/schema/Model.ts +26 -3
- package/src/sql/Migrator.ts +38 -80
- package/src/sql/MigratorFileSystem.ts +71 -0
- package/src/sql/SqlClient.ts +45 -24
- package/src/sql/Statement.ts +60 -29
- package/src/sql/index.ts +1 -1
- package/src/testing/index.ts +0 -6
- package/src/workflow/Workflow.ts +4 -0
- package/src/workflow/WorkflowEngine.ts +5 -0
- package/src/workflow/internal/crypto.ts +15 -11
- package/dist/Crypto.d.ts +0 -244
- package/dist/Crypto.d.ts.map +0 -1
- package/dist/Crypto.js +0 -139
- package/dist/Crypto.js.map +0 -1
- package/dist/testing/TestCrypto.d.ts +0 -73
- package/dist/testing/TestCrypto.d.ts.map +0 -1
- package/dist/testing/TestCrypto.js +0 -87
- package/dist/testing/TestCrypto.js.map +0 -1
- package/src/Crypto.ts +0 -347
- package/src/testing/TestCrypto.ts +0 -94
|
@@ -32,10 +32,11 @@ import * as Headers from "./Headers.ts"
|
|
|
32
32
|
import * as HttpBody from "./HttpBody.ts"
|
|
33
33
|
import * as HttpClientRequest from "./HttpClientRequest.ts"
|
|
34
34
|
import * as HttpIncomingMessage from "./HttpIncomingMessage.ts"
|
|
35
|
-
import { hasBody
|
|
35
|
+
import { hasBody } from "./HttpMethod.ts"
|
|
36
36
|
import { HttpServerError, type RequestError, RequestParseError } from "./HttpServerError.ts"
|
|
37
37
|
import * as bodyInternal from "./internal/httpBody.ts"
|
|
38
38
|
import * as lazyStream from "./internal/lazyStream.ts"
|
|
39
|
+
import * as internalUrlParams from "./internal/urlParams.ts"
|
|
39
40
|
import * as Multipart from "./Multipart.ts"
|
|
40
41
|
import * as UrlParams from "./UrlParams.ts"
|
|
41
42
|
|
|
@@ -90,7 +91,11 @@ export interface HttpServerRequest extends HttpIncomingMessage.HttpIncomingMessa
|
|
|
90
91
|
readonly source: object
|
|
91
92
|
readonly url: string
|
|
92
93
|
readonly originalUrl: string
|
|
93
|
-
|
|
94
|
+
/**
|
|
95
|
+
* The uppercase request method as received, which may be a method outside
|
|
96
|
+
* the known `HttpMethod` literals (for example `"PROPFIND"`).
|
|
97
|
+
*/
|
|
98
|
+
readonly method: string
|
|
94
99
|
readonly cookies: ReadonlyRecord<string, string>
|
|
95
100
|
|
|
96
101
|
readonly multipart: Effect.Effect<
|
|
@@ -563,8 +568,8 @@ class ServerRequestImpl extends Inspectable.Class implements HttpServerRequest {
|
|
|
563
568
|
options.protocol ?? this.protocol
|
|
564
569
|
)
|
|
565
570
|
}
|
|
566
|
-
get method():
|
|
567
|
-
return this.source.method.toUpperCase()
|
|
571
|
+
get method(): string {
|
|
572
|
+
return this.source.method.toUpperCase()
|
|
568
573
|
}
|
|
569
574
|
get originalUrl() {
|
|
570
575
|
return this.source.url
|
|
@@ -612,27 +617,7 @@ class ServerRequestImpl extends Inspectable.Class implements HttpServerRequest {
|
|
|
612
617
|
|
|
613
618
|
private textEffect: Effect.Effect<string, HttpServerError> | undefined
|
|
614
619
|
get text(): Effect.Effect<string, HttpServerError> {
|
|
615
|
-
|
|
616
|
-
return this.textEffect
|
|
617
|
-
}
|
|
618
|
-
this.textEffect = Effect.withFiber((fiber) =>
|
|
619
|
-
fiber.getRef(HttpIncomingMessage.MaxBodySize) === undefined
|
|
620
|
-
? Effect.tryPromise({
|
|
621
|
-
try: () => this.source.text(),
|
|
622
|
-
catch: (cause) =>
|
|
623
|
-
new HttpServerError({
|
|
624
|
-
reason: new RequestParseError({
|
|
625
|
-
request: this,
|
|
626
|
-
cause
|
|
627
|
-
})
|
|
628
|
-
})
|
|
629
|
-
})
|
|
630
|
-
: Effect.map(this.arrayBuffer, (buffer) => textDecoder.decode(buffer))
|
|
631
|
-
).pipe(
|
|
632
|
-
Effect.cached,
|
|
633
|
-
Effect.runSync
|
|
634
|
-
)
|
|
635
|
-
return this.textEffect
|
|
620
|
+
return this.textEffect ??= Effect.map(this.arrayBuffer, (buffer) => textDecoder.decode(buffer))
|
|
636
621
|
}
|
|
637
622
|
|
|
638
623
|
get json(): Effect.Effect<Schema.Json, HttpServerError> {
|
|
@@ -650,9 +635,9 @@ class ServerRequestImpl extends Inspectable.Class implements HttpServerRequest {
|
|
|
650
635
|
}
|
|
651
636
|
|
|
652
637
|
get urlParamsBody(): Effect.Effect<UrlParams.UrlParams, HttpServerError> {
|
|
653
|
-
return Effect.flatMap(this.
|
|
638
|
+
return Effect.flatMap(this.arrayBuffer, (bytes) =>
|
|
654
639
|
Effect.try({
|
|
655
|
-
try: () => UrlParams.fromInput(
|
|
640
|
+
try: () => UrlParams.fromInput(internalUrlParams.fromBody(bytes)),
|
|
656
641
|
catch: (cause) =>
|
|
657
642
|
new HttpServerError({
|
|
658
643
|
reason: new RequestParseError({
|
|
@@ -797,7 +782,7 @@ class ClientRequestImpl extends Inspectable.Class implements HttpServerRequest {
|
|
|
797
782
|
)
|
|
798
783
|
}
|
|
799
784
|
|
|
800
|
-
get method():
|
|
785
|
+
get method(): string {
|
|
801
786
|
return this.source.method
|
|
802
787
|
}
|
|
803
788
|
|
|
@@ -851,32 +836,37 @@ class ClientRequestImpl extends Inspectable.Class implements HttpServerRequest {
|
|
|
851
836
|
if (this.bytesEffect) {
|
|
852
837
|
return this.bytesEffect
|
|
853
838
|
}
|
|
839
|
+
this.bytesEffect = Effect.withFiber((fiber) => {
|
|
840
|
+
const maxBodySize = fiber.getRef(HttpIncomingMessage.MaxBodySize)
|
|
841
|
+
return this.readBytes(maxBodySize === undefined ? undefined : Number(maxBodySize))
|
|
842
|
+
}).pipe(
|
|
843
|
+
Effect.cached,
|
|
844
|
+
Effect.runSync
|
|
845
|
+
)
|
|
846
|
+
return this.bytesEffect
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
private readBytes(maxBytes: number | undefined): Effect.Effect<Uint8Array, HttpServerError> {
|
|
854
850
|
const body = this.source.body
|
|
855
|
-
let effect: Effect.Effect<Uint8Array, HttpServerError>
|
|
856
851
|
switch (body._tag) {
|
|
857
852
|
case "Empty": {
|
|
858
|
-
|
|
859
|
-
break
|
|
853
|
+
return Effect.succeed(new Uint8Array(0))
|
|
860
854
|
}
|
|
861
855
|
case "Uint8Array": {
|
|
862
|
-
|
|
863
|
-
|
|
856
|
+
return maxBytes !== undefined && body.body.byteLength > maxBytes
|
|
857
|
+
? Effect.fail(bodyTooLargeError(this, new BodyTooLargeError(maxBytes)))
|
|
858
|
+
: Effect.succeed(body.body)
|
|
864
859
|
}
|
|
865
860
|
case "FormData": {
|
|
866
|
-
|
|
867
|
-
break
|
|
861
|
+
return bytesFromWeb(this, () => new Response(body.formData), maxBytes)
|
|
868
862
|
}
|
|
869
863
|
case "Stream": {
|
|
870
|
-
|
|
871
|
-
break
|
|
864
|
+
return Stream.mkUint8Array(maxBytes === undefined ? this.stream : limitStream(this, this.stream, maxBytes))
|
|
872
865
|
}
|
|
873
866
|
case "Raw": {
|
|
874
|
-
|
|
875
|
-
break
|
|
867
|
+
return rawBodyBytes(this, body.body, maxBytes)
|
|
876
868
|
}
|
|
877
869
|
}
|
|
878
|
-
this.bytesEffect = Effect.runSync(Effect.cached(effect))
|
|
879
|
-
return this.bytesEffect
|
|
880
870
|
}
|
|
881
871
|
|
|
882
872
|
get text(): Effect.Effect<string, HttpServerError> {
|
|
@@ -892,9 +882,9 @@ class ClientRequestImpl extends Inspectable.Class implements HttpServerRequest {
|
|
|
892
882
|
}
|
|
893
883
|
|
|
894
884
|
get urlParamsBody(): Effect.Effect<UrlParams.UrlParams, HttpServerError> {
|
|
895
|
-
return Effect.flatMap(this.
|
|
885
|
+
return Effect.flatMap(this.bytes, (bytes) =>
|
|
896
886
|
Effect.try({
|
|
897
|
-
try: () => UrlParams.fromInput(
|
|
887
|
+
try: () => UrlParams.fromInput(internalUrlParams.fromBody(bytes)),
|
|
898
888
|
catch: (cause) => requestParseError(this, undefined, cause)
|
|
899
889
|
}))
|
|
900
890
|
}
|
|
@@ -977,23 +967,38 @@ const rawBodyStream = (request: HttpServerRequest, body: unknown): Stream.Stream
|
|
|
977
967
|
return Stream.fail(requestParseError(request, "Unsupported body type"))
|
|
978
968
|
}
|
|
979
969
|
|
|
980
|
-
const rawBodyBytes = (
|
|
970
|
+
const rawBodyBytes = (
|
|
971
|
+
request: HttpServerRequest,
|
|
972
|
+
body: unknown,
|
|
973
|
+
maxBytes: number | undefined
|
|
974
|
+
): Effect.Effect<Uint8Array, HttpServerError> => {
|
|
981
975
|
if (body instanceof Request) {
|
|
982
|
-
return
|
|
983
|
-
try: () => body.arrayBuffer().then((buffer) => new Uint8Array(buffer)),
|
|
984
|
-
catch: (cause) => requestParseError(request, undefined, cause)
|
|
985
|
-
})
|
|
976
|
+
return bytesFromWeb(request, () => body, maxBytes)
|
|
986
977
|
}
|
|
987
978
|
if (isBodyInit(body)) {
|
|
988
|
-
return
|
|
979
|
+
return bytesFromWeb(request, () => new Response(body), maxBytes)
|
|
989
980
|
}
|
|
990
981
|
return Effect.fail(requestParseError(request, "Unsupported body type"))
|
|
991
982
|
}
|
|
992
983
|
|
|
993
|
-
const
|
|
984
|
+
const bytesFromWeb = (
|
|
985
|
+
request: HttpServerRequest,
|
|
986
|
+
// Evaluated inside `try`, as wrapping an unreadable body in a `Response` throws.
|
|
987
|
+
evaluate: () => Request | Response,
|
|
988
|
+
maxBytes: number | undefined
|
|
989
|
+
): Effect.Effect<Uint8Array, HttpServerError> =>
|
|
994
990
|
Effect.tryPromise({
|
|
995
|
-
try:
|
|
996
|
-
|
|
991
|
+
try: async (signal) => {
|
|
992
|
+
const source = evaluate()
|
|
993
|
+
const buffer = maxBytes === undefined
|
|
994
|
+
? await source.arrayBuffer()
|
|
995
|
+
: await readArrayBufferLimited(source, maxBytes, signal)
|
|
996
|
+
return new Uint8Array(buffer)
|
|
997
|
+
},
|
|
998
|
+
catch: (cause) =>
|
|
999
|
+
cause instanceof BodyTooLargeError
|
|
1000
|
+
? bodyTooLargeError(request, cause)
|
|
1001
|
+
: requestParseError(request, undefined, cause)
|
|
997
1002
|
})
|
|
998
1003
|
|
|
999
1004
|
const streamFromReadable = (
|
|
@@ -1020,6 +1025,24 @@ const requestParseError = (
|
|
|
1020
1025
|
})
|
|
1021
1026
|
})
|
|
1022
1027
|
|
|
1028
|
+
const limitStream = (
|
|
1029
|
+
request: HttpServerRequest,
|
|
1030
|
+
stream: Stream.Stream<Uint8Array, HttpServerError>,
|
|
1031
|
+
maxBytes: number
|
|
1032
|
+
): Stream.Stream<Uint8Array, HttpServerError> =>
|
|
1033
|
+
Stream.suspend(() => {
|
|
1034
|
+
let bytes = 0
|
|
1035
|
+
return Stream.mapEffect(stream, (chunk) => {
|
|
1036
|
+
bytes += chunk.byteLength
|
|
1037
|
+
return bytes > maxBytes
|
|
1038
|
+
? Effect.fail(bodyTooLargeError(request, new BodyTooLargeError(maxBytes)))
|
|
1039
|
+
: Effect.succeed(chunk)
|
|
1040
|
+
})
|
|
1041
|
+
})
|
|
1042
|
+
|
|
1043
|
+
const bodyTooLargeError = (request: HttpServerRequest, cause: BodyTooLargeError) =>
|
|
1044
|
+
new HttpServerError({ reason: new RequestParseError({ request, reason: "BodyTooLarge", cause }) })
|
|
1045
|
+
|
|
1023
1046
|
const formDataToParts = (formData: FormData): Array<Multipart.Part> => {
|
|
1024
1047
|
const parts: Array<Multipart.Part> = []
|
|
1025
1048
|
for (const [key, value] of formData.entries()) {
|
|
@@ -1117,7 +1140,7 @@ class BodyTooLargeError extends Error {
|
|
|
1117
1140
|
}
|
|
1118
1141
|
|
|
1119
1142
|
const readArrayBufferLimited = async (
|
|
1120
|
-
source: Request,
|
|
1143
|
+
source: Request | Response,
|
|
1121
1144
|
maxBytes: number,
|
|
1122
1145
|
signal: AbortSignal
|
|
1123
1146
|
): Promise<ArrayBuffer> => {
|
|
@@ -38,6 +38,7 @@ import * as HttpIncomingMessage from "./HttpIncomingMessage.ts"
|
|
|
38
38
|
import type { HttpPlatform } from "./HttpPlatform.ts"
|
|
39
39
|
import * as headersInternal from "./internal/headers.ts"
|
|
40
40
|
import * as bodyInternal from "./internal/httpBody.ts"
|
|
41
|
+
import * as internalUrlParams from "./internal/urlParams.ts"
|
|
41
42
|
import * as Template from "./Template.ts"
|
|
42
43
|
import * as UrlParams from "./UrlParams.ts"
|
|
43
44
|
|
|
@@ -1653,9 +1654,9 @@ class ServerHttpClientResponse extends Inspectable.Class implements HttpClientRe
|
|
|
1653
1654
|
}
|
|
1654
1655
|
|
|
1655
1656
|
get urlParamsBody(): Effect.Effect<UrlParams.UrlParams, HttpClientError.HttpClientError> {
|
|
1656
|
-
return Effect.flatMap(this.
|
|
1657
|
+
return Effect.flatMap(this.bytes, (bytes) =>
|
|
1657
1658
|
Effect.try({
|
|
1658
|
-
try: () => UrlParams.fromInput(
|
|
1659
|
+
try: () => UrlParams.fromInput(internalUrlParams.fromBody(bytes)),
|
|
1659
1660
|
catch: (cause) =>
|
|
1660
1661
|
new HttpClientError.HttpClientError({
|
|
1661
1662
|
reason: new HttpClientError.DecodeError({
|
|
@@ -130,10 +130,11 @@ export const xb3: FromHeaders = (headers) => {
|
|
|
130
130
|
}))
|
|
131
131
|
}
|
|
132
132
|
|
|
133
|
-
const w3cTraceId = /^[0-9a-f]{32}$/
|
|
134
|
-
const w3cSpanId = /^[0-9a-f]{16}$/
|
|
133
|
+
const w3cTraceId = /^[0-9a-f]{32}$/
|
|
134
|
+
const w3cSpanId = /^[0-9a-f]{16}$/
|
|
135
|
+
const w3cTraceFlags = /^[0-9a-f]{2}$/
|
|
135
136
|
|
|
136
|
-
const b3TraceId = /^(?:[0-9a-f]{16}|[0-9a-f]{32})$/
|
|
137
|
+
const b3TraceId = /^(?:[0-9a-f]{16}|[0-9a-f]{32})$/
|
|
137
138
|
const isB3Ids = (traceId: string, spanId: string): boolean => b3TraceId.test(traceId) && w3cSpanId.test(spanId)
|
|
138
139
|
|
|
139
140
|
/**
|
|
@@ -141,7 +142,8 @@ const isB3Ids = (traceId: string, spanId: string): boolean => b3TraceId.test(tra
|
|
|
141
142
|
*
|
|
142
143
|
* **Details**
|
|
143
144
|
*
|
|
144
|
-
* Only version `00` headers with valid trace and span identifiers
|
|
145
|
+
* Only version `00` headers with valid trace and span identifiers and trace
|
|
146
|
+
* flags are accepted.
|
|
145
147
|
*
|
|
146
148
|
* @stability unstable
|
|
147
149
|
* @category decoding
|
|
@@ -160,6 +162,7 @@ export const w3c: FromHeaders = (headers) => {
|
|
|
160
162
|
case "00": {
|
|
161
163
|
if (
|
|
162
164
|
w3cTraceId.test(traceId) === false || w3cSpanId.test(spanId) === false ||
|
|
165
|
+
w3cTraceFlags.test(flags) === false ||
|
|
163
166
|
traceId === "00000000000000000000000000000000" || spanId === "0000000000000000"
|
|
164
167
|
) {
|
|
165
168
|
return Option.none()
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RFC 9457 Problem Details values for HTTP responses.
|
|
3
|
+
*
|
|
4
|
+
* A problem details object is the `application/problem+json` body a server
|
|
5
|
+
* sends to describe an error. This module provides the reusable value shape,
|
|
6
|
+
* a lenient codec that follows the parsing rules of RFC 9457, and a response
|
|
7
|
+
* constructor. The `effect/http-api` modules build typed problem declarations,
|
|
8
|
+
* built-in error rendering and OpenAPI output on top of it.
|
|
9
|
+
*
|
|
10
|
+
* @stability unstable
|
|
11
|
+
* @since 4.0.6
|
|
12
|
+
*/
|
|
13
|
+
import * as Effect from "../Effect.ts"
|
|
14
|
+
import * as Schema_ from "../Schema.ts"
|
|
15
|
+
import * as HttpServerResponse from "./HttpServerResponse.ts"
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* The media type of a problem details response body.
|
|
19
|
+
*
|
|
20
|
+
* @stability unstable
|
|
21
|
+
* @category constants
|
|
22
|
+
* @since 4.0.6
|
|
23
|
+
*/
|
|
24
|
+
export const contentType = "application/problem+json"
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* The problem type URI RFC 9457 assigns to problems that only carry an HTTP
|
|
28
|
+
* status.
|
|
29
|
+
*
|
|
30
|
+
* @stability unstable
|
|
31
|
+
* @category constants
|
|
32
|
+
* @since 4.0.6
|
|
33
|
+
*/
|
|
34
|
+
export const blankType = "about:blank"
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* A decoded RFC 9457 problem details object.
|
|
38
|
+
*
|
|
39
|
+
* **Details**
|
|
40
|
+
*
|
|
41
|
+
* The standard members are `type`, `status`, `title`, `detail` and
|
|
42
|
+
* `instance`. Any other member is an extension and is kept as-is.
|
|
43
|
+
*
|
|
44
|
+
* @stability unstable
|
|
45
|
+
* @category models
|
|
46
|
+
* @since 4.0.6
|
|
47
|
+
*/
|
|
48
|
+
export interface ProblemDetails {
|
|
49
|
+
readonly type: string
|
|
50
|
+
readonly status?: number
|
|
51
|
+
readonly title?: string
|
|
52
|
+
readonly detail?: string
|
|
53
|
+
readonly instance?: string
|
|
54
|
+
readonly [extension: string]: unknown
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* The encoded form of a problem details object, where `type` may be omitted.
|
|
59
|
+
*
|
|
60
|
+
* @stability unstable
|
|
61
|
+
* @category models
|
|
62
|
+
* @since 4.0.6
|
|
63
|
+
*/
|
|
64
|
+
export interface ProblemDetailsEncoded {
|
|
65
|
+
readonly type?: string
|
|
66
|
+
readonly status?: number
|
|
67
|
+
readonly title?: string
|
|
68
|
+
readonly detail?: string
|
|
69
|
+
readonly instance?: string
|
|
70
|
+
readonly [extension: string]: unknown
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* A standard member that is dropped when it is missing or has the wrong JSON
|
|
75
|
+
* type, as RFC 9457 section 3.1 requires.
|
|
76
|
+
*
|
|
77
|
+
* @internal
|
|
78
|
+
*/
|
|
79
|
+
export const optionalMember = <S extends Schema_.Constraint>(schema: S) =>
|
|
80
|
+
Schema_.optionalKey(schema).pipe(Schema_.catchDecoding(() => Effect.succeedNone))
|
|
81
|
+
|
|
82
|
+
const withFallback = <S extends Schema_.Constraint>(
|
|
83
|
+
schema: S,
|
|
84
|
+
value: S["Encoded"] & S["Type"]
|
|
85
|
+
): Schema_.middlewareDecoding<Schema_.withDecodingDefaultKey<S>, S["DecodingServices"]> =>
|
|
86
|
+
Schema_.withDecodingDefaultKey<S>(Effect.succeed(value))(schema).pipe(
|
|
87
|
+
Schema_.catchDecoding(() => Effect.succeedSome(value))
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* A required member that decodes to a fixed value when it is missing or has
|
|
92
|
+
* the wrong JSON type. The value is also the constructor default.
|
|
93
|
+
*
|
|
94
|
+
* @internal
|
|
95
|
+
*/
|
|
96
|
+
export const fixedMember = <const L extends string | number>(value: L) => withFallback(Schema_.tag(value), value)
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* The lenient codec for problem details objects.
|
|
100
|
+
*
|
|
101
|
+
* **Details**
|
|
102
|
+
*
|
|
103
|
+
* Decoding follows RFC 9457: a missing `type` defaults to `about:blank`,
|
|
104
|
+
* standard members with the wrong JSON type are ignored, and unknown members
|
|
105
|
+
* are kept as extensions. Encoding always emits `type`.
|
|
106
|
+
*
|
|
107
|
+
* **Example** (Decoding a problem with an extension)
|
|
108
|
+
*
|
|
109
|
+
* ```ts import.meta.vitest
|
|
110
|
+
* import { Schema } from "effect"
|
|
111
|
+
* import { ProblemDetails } from "effect/http"
|
|
112
|
+
*
|
|
113
|
+
* const problem = Schema.decodeUnknownSync(ProblemDetails.Schema)({
|
|
114
|
+
* status: 404,
|
|
115
|
+
* detail: "No such user",
|
|
116
|
+
* traceId: "abc-123"
|
|
117
|
+
* })
|
|
118
|
+
* problem // => { type: "about:blank", status: 404, detail: "No such user", traceId: "abc-123" }
|
|
119
|
+
* ```
|
|
120
|
+
*
|
|
121
|
+
* @stability unstable
|
|
122
|
+
* @category schemas
|
|
123
|
+
* @since 4.0.6
|
|
124
|
+
*/
|
|
125
|
+
export const Schema: Schema_.Codec<ProblemDetails, ProblemDetailsEncoded> = Schema_.StructWithRest(
|
|
126
|
+
Schema_.Struct({
|
|
127
|
+
type: withFallback(Schema_.String, blankType),
|
|
128
|
+
status: optionalMember(Schema_.Number),
|
|
129
|
+
title: optionalMember(Schema_.String),
|
|
130
|
+
detail: optionalMember(Schema_.String),
|
|
131
|
+
instance: optionalMember(Schema_.String)
|
|
132
|
+
}),
|
|
133
|
+
[Schema_.Record(Schema_.String, Schema_.Unknown)]
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Renders a problem details object as an `application/problem+json` response.
|
|
138
|
+
*
|
|
139
|
+
* **Details**
|
|
140
|
+
*
|
|
141
|
+
* The response status is the problem's `status` member, or `500` when it is
|
|
142
|
+
* absent.
|
|
143
|
+
*
|
|
144
|
+
* @stability unstable
|
|
145
|
+
* @category constructors
|
|
146
|
+
* @since 4.0.6
|
|
147
|
+
*/
|
|
148
|
+
export const toResponse = (problem: ProblemDetails): HttpServerResponse.HttpServerResponse =>
|
|
149
|
+
HttpServerResponse.jsonUnsafe(problem, { status: problem.status ?? 500, contentType })
|
package/src/http/index.ts
CHANGED
|
@@ -167,6 +167,12 @@ export * as Multipart from "./Multipart.ts"
|
|
|
167
167
|
*/
|
|
168
168
|
export * as MultipartParser from "./MultipartParser.ts"
|
|
169
169
|
|
|
170
|
+
/**
|
|
171
|
+
* @stability unstable
|
|
172
|
+
* @since 4.0.6
|
|
173
|
+
*/
|
|
174
|
+
export * as ProblemDetails from "./ProblemDetails.ts"
|
|
175
|
+
|
|
170
176
|
/**
|
|
171
177
|
* @stability unstable
|
|
172
178
|
* @since 4.0.0
|
|
@@ -8,12 +8,12 @@ import type * as Socket from "../../socket/Socket.ts"
|
|
|
8
8
|
import * as Stream from "../../Stream.ts"
|
|
9
9
|
import * as Headers from "../Headers.ts"
|
|
10
10
|
import * as HttpIncomingMessage from "../HttpIncomingMessage.ts"
|
|
11
|
-
import type { HttpMethod } from "../HttpMethod.ts"
|
|
12
11
|
import { HttpServerError, RequestParseError } from "../HttpServerError.ts"
|
|
13
12
|
import * as HttpServerRequest from "../HttpServerRequest.ts"
|
|
14
13
|
import * as Multipart from "../Multipart.ts"
|
|
15
14
|
import * as UrlParams from "../UrlParams.ts"
|
|
16
15
|
import * as lazyStream from "./lazyStream.ts"
|
|
16
|
+
import * as internalUrlParams from "./urlParams.ts"
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* @internal
|
|
@@ -100,7 +100,7 @@ export class DecompressedRequest extends Inspectable.Class implements HttpServer
|
|
|
100
100
|
return this.inner.originalUrl
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
-
get method():
|
|
103
|
+
get method(): string {
|
|
104
104
|
return this.inner.method
|
|
105
105
|
}
|
|
106
106
|
|
|
@@ -188,9 +188,9 @@ export class DecompressedRequest extends Inspectable.Class implements HttpServer
|
|
|
188
188
|
}
|
|
189
189
|
|
|
190
190
|
get urlParamsBody(): Effect.Effect<UrlParams.UrlParams, HttpServerError> {
|
|
191
|
-
return Effect.flatMap(this.
|
|
191
|
+
return Effect.flatMap(this.bytes, (bytes) =>
|
|
192
192
|
Effect.try({
|
|
193
|
-
try: () => UrlParams.fromInput(
|
|
193
|
+
try: () => UrlParams.fromInput(internalUrlParams.fromBody(bytes)),
|
|
194
194
|
catch: (cause) => this.parseError(cause)
|
|
195
195
|
}))
|
|
196
196
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Standard MIME type data copied from mime 4.1.0
|
|
2
|
+
* Standard MIME type data copied from mime 4.1.0, plus `text/x-python` and
|
|
3
|
+
* `text/x-shellscript` for `py` and `sh` scripts.
|
|
3
4
|
*
|
|
4
5
|
* MIT License
|
|
5
6
|
*
|
|
@@ -370,6 +371,8 @@ const types = {
|
|
|
370
371
|
"text/vcard": ["vcard"],
|
|
371
372
|
"text/vtt": ["vtt"],
|
|
372
373
|
"text/wgsl": ["wgsl"],
|
|
374
|
+
"text/x-python": ["py"],
|
|
375
|
+
"text/x-shellscript": ["sh"],
|
|
373
376
|
"text/xml": ["*xml"],
|
|
374
377
|
"text/yaml": ["yaml", "yml"],
|
|
375
378
|
"video/3gpp": ["3gp", "3gpp"],
|
|
@@ -18,6 +18,14 @@ export const stripSearchAndHash = (url: string): string => {
|
|
|
18
18
|
return url.slice(0, Math.min(queryIndex, hashIndex))
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
+
// URL-encoded bodies keep a leading U+FEFF as form data
|
|
22
|
+
const bodyDecoder = new TextDecoder("utf-8", { ignoreBOM: true })
|
|
23
|
+
|
|
24
|
+
/** @internal */
|
|
25
|
+
export const fromBody = (bytes: ArrayBuffer | Uint8Array): URLSearchParams =>
|
|
26
|
+
// A leading "?" is form data; URLSearchParams would drop it as a query prefix.
|
|
27
|
+
new URLSearchParams(bodyDecoder.decode(bytes).replace(/^\?/, "%3F"))
|
|
28
|
+
|
|
21
29
|
const originForm = /^\/(?![/\\])/
|
|
22
30
|
|
|
23
31
|
/** @internal */
|
|
@@ -957,6 +957,8 @@ function handlerToHttpEffect(
|
|
|
957
957
|
const encodeStream = makeStreamEncoder(endpoint, options.success)
|
|
958
958
|
const encodeWithHeaders = makeWithHeadersEncoder(endpoint, options.success, options.headers)
|
|
959
959
|
const upgrade = getUpgradeSuccessSchema(endpoint)
|
|
960
|
+
// The handler of a mixed endpoint may decline the upgrade and return one of the other successes.
|
|
961
|
+
const upgradeOnly = upgrade !== undefined && endpoint.success.size === 1
|
|
960
962
|
const encodeUpgradeHeaders = UndefinedOr.map(
|
|
961
963
|
upgrade?.headers,
|
|
962
964
|
(schema) => Schema.encodeUnknownEffect(schema, options.headers)
|
|
@@ -989,19 +991,23 @@ function handlerToHttpEffect(
|
|
|
989
991
|
if (decodeQuery) {
|
|
990
992
|
request.query = yield* HttpApiSchemaError.wrap("Query", decodeQuery(query))
|
|
991
993
|
}
|
|
994
|
+
let upgraded = false
|
|
992
995
|
if (upgrade !== undefined) {
|
|
993
996
|
if (!isUpgradeRequest(httpRequest, upgrade.protocol)) {
|
|
994
997
|
return upgradeRequired(upgrade.protocol)
|
|
995
998
|
}
|
|
996
999
|
request.upgrade = (options?: { readonly headers?: unknown }) =>
|
|
997
|
-
Effect.
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1000
|
+
Effect.suspend(() => {
|
|
1001
|
+
upgraded = true
|
|
1002
|
+
return Effect.orDie(
|
|
1003
|
+
encodeUpgradeHeaders === undefined
|
|
1004
|
+
? httpRequest.upgrade
|
|
1005
|
+
: Effect.flatMap(
|
|
1006
|
+
HttpApiSchemaError.wrap("ResponseHeaders", encodeUpgradeHeaders(options?.headers)),
|
|
1007
|
+
(headers) => httpRequest.upgradeWith({ headers: headers as Record<string, string> })
|
|
1008
|
+
)
|
|
1009
|
+
)
|
|
1010
|
+
})
|
|
1005
1011
|
}
|
|
1006
1012
|
if (payloadBy) {
|
|
1007
1013
|
const result = decodePayload(payloadBy, httpRequest, query)
|
|
@@ -1016,7 +1022,10 @@ function handlerToHttpEffect(
|
|
|
1016
1022
|
if (Response.isHttpServerResponse(response)) {
|
|
1017
1023
|
return response
|
|
1018
1024
|
}
|
|
1019
|
-
if (
|
|
1025
|
+
if (upgradeOnly || upgraded) {
|
|
1026
|
+
if (response !== undefined && !upgradeOnly) {
|
|
1027
|
+
return yield* Effect.die(new Error("Cannot return a success value after calling upgrade()"))
|
|
1028
|
+
}
|
|
1020
1029
|
// The server replaces this with the 101 once the connection is upgraded.
|
|
1021
1030
|
return Response.empty()
|
|
1022
1031
|
}
|
|
@@ -1367,9 +1376,12 @@ function makeSuccessSchema(
|
|
|
1367
1376
|
endpoint: HttpApiEndpoint.Top,
|
|
1368
1377
|
headersOptions: SchemaAST.ParseOptions | undefined
|
|
1369
1378
|
): Schema.ConstraintEncoder<HttpServerResponse, unknown> {
|
|
1370
|
-
const schemas =
|
|
1371
|
-
|
|
1372
|
-
|
|
1379
|
+
const schemas: Array<Schema.ConstraintEncoder<HttpServerResponse, unknown>> = []
|
|
1380
|
+
for (const schema of HttpApiEndpoint.getSuccessSchemas(endpoint)) {
|
|
1381
|
+
// The 101 is written by the transport, so the upgrade has no response encoder.
|
|
1382
|
+
if (HttpApiSchema.isUpgrade(schema)) continue
|
|
1383
|
+
schemas.push(toResponseSuccessSchema(schema, headersOptions))
|
|
1384
|
+
}
|
|
1373
1385
|
return schemas.length === 1 ? schemas[0] : Schema.Union(schemas)
|
|
1374
1386
|
}
|
|
1375
1387
|
|
|
@@ -106,6 +106,24 @@ export type SuccessType<S> = S extends HttpApiSchema.WithHeaders<
|
|
|
106
106
|
: S extends Schema.Constraint ? S["Type"]
|
|
107
107
|
: never
|
|
108
108
|
|
|
109
|
+
/**
|
|
110
|
+
* Runtime brand key used to mark `Upgraded` values.
|
|
111
|
+
*
|
|
112
|
+
* @stability unstable
|
|
113
|
+
* @category type IDs
|
|
114
|
+
* @since 4.1.0
|
|
115
|
+
*/
|
|
116
|
+
export const UpgradedTypeId = "~effect/http-api/HttpApiClient/Upgraded"
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Type-level brand identifier used by `Upgraded` values.
|
|
120
|
+
*
|
|
121
|
+
* @stability unstable
|
|
122
|
+
* @category type IDs
|
|
123
|
+
* @since 4.1.0
|
|
124
|
+
*/
|
|
125
|
+
export type UpgradedTypeId = typeof UpgradedTypeId
|
|
126
|
+
|
|
109
127
|
/**
|
|
110
128
|
* The value a client method returns for an endpoint declared with
|
|
111
129
|
* `HttpApiSchema.Upgrade`: the headers of the `101 Switching Protocols`
|
|
@@ -117,15 +135,63 @@ export type SuccessType<S> = S extends HttpApiSchema.WithHeaders<
|
|
|
117
135
|
* one. See `HttpClientResponse.upgrade` for how the connection behaves and
|
|
118
136
|
* when it closes.
|
|
119
137
|
*
|
|
138
|
+
* When the endpoint also declares ordinary success responses, the method
|
|
139
|
+
* returns either an `Upgraded` value or the decoded ordinary success. Use
|
|
140
|
+
* {@link isUpgraded} to tell them apart.
|
|
141
|
+
*
|
|
120
142
|
* @stability unstable
|
|
121
143
|
* @category models
|
|
122
144
|
* @since 4.0.6
|
|
123
145
|
*/
|
|
124
146
|
export interface Upgraded<Headers = Headers.Headers> {
|
|
147
|
+
readonly [UpgradedTypeId]: UpgradedTypeId
|
|
125
148
|
readonly headers: Headers
|
|
126
149
|
readonly socket: Socket.Socket
|
|
127
150
|
}
|
|
128
151
|
|
|
152
|
+
/**
|
|
153
|
+
* Returns `true` when a client method result is an upgraded connection.
|
|
154
|
+
*
|
|
155
|
+
* **Details**
|
|
156
|
+
*
|
|
157
|
+
* An endpoint may declare `HttpApiSchema.Upgrade` alongside ordinary success
|
|
158
|
+
* responses, because a server can decline an upgrade (RFC 9110 §7.8). The
|
|
159
|
+
* client method then returns either an `Upgraded` value or the decoded
|
|
160
|
+
* ordinary success, depending on the response status. This predicate narrows
|
|
161
|
+
* that union.
|
|
162
|
+
*
|
|
163
|
+
* **Example** (Handling a declined upgrade)
|
|
164
|
+
*
|
|
165
|
+
* ```ts
|
|
166
|
+
* import { Effect, Schema } from "effect"
|
|
167
|
+
* import { HttpApi, HttpApiClient, HttpApiEndpoint, HttpApiGroup, HttpApiSchema } from "effect/http-api"
|
|
168
|
+
*
|
|
169
|
+
* const Api = HttpApi.make("docker").add(
|
|
170
|
+
* HttpApiGroup.make("exec").add(
|
|
171
|
+
* HttpApiEndpoint.post("start", "/exec/:id/start", {
|
|
172
|
+
* params: { id: Schema.String },
|
|
173
|
+
* payload: Schema.Struct({ Detach: Schema.Boolean }),
|
|
174
|
+
* success: [HttpApiSchema.Upgrade({ protocol: "tcp" }), HttpApiSchema.Empty(200)]
|
|
175
|
+
* })
|
|
176
|
+
* )
|
|
177
|
+
* )
|
|
178
|
+
*
|
|
179
|
+
* const program = Effect.gen(function*() {
|
|
180
|
+
* const client = yield* HttpApiClient.make(Api)
|
|
181
|
+
* const result = yield* client.exec.start({ params: { id: "abc" }, payload: { Detach: false } })
|
|
182
|
+
* if (HttpApiClient.isUpgraded(result)) {
|
|
183
|
+
* const writer = yield* result.socket.writer
|
|
184
|
+
* yield* writer.write("ls\n")
|
|
185
|
+
* }
|
|
186
|
+
* })
|
|
187
|
+
* ```
|
|
188
|
+
*
|
|
189
|
+
* @stability unstable
|
|
190
|
+
* @category guards
|
|
191
|
+
* @since 4.1.0
|
|
192
|
+
*/
|
|
193
|
+
export const isUpgraded = (u: unknown): u is Upgraded<unknown> => Predicate.hasProperty(u, UpgradedTypeId)
|
|
194
|
+
|
|
129
195
|
type SuccessDecodingServices<S> = S extends HttpApiSchema.StreamSse<
|
|
130
196
|
infer _Events,
|
|
131
197
|
infer _Error,
|
|
@@ -1041,7 +1107,7 @@ const makeEndpointDecoder = (options: {
|
|
|
1041
1107
|
Effect.uninterruptibleMask((restore) =>
|
|
1042
1108
|
Effect.flatMap(response.upgrade, (socket) =>
|
|
1043
1109
|
restore(decodeHeaders(response.headers)).pipe(
|
|
1044
|
-
Effect.map((headers): Upgraded<unknown> => ({ headers, socket })),
|
|
1110
|
+
Effect.map((headers): Upgraded<unknown> => ({ [UpgradedTypeId]: UpgradedTypeId, headers, socket })),
|
|
1045
1111
|
// nothing takes the connection on failure, so close it: releasing
|
|
1046
1112
|
// the reader's scope closes the connection
|
|
1047
1113
|
Effect.onError(() => Effect.ignore(Effect.scoped(socket.reader)))
|