effect 4.0.1 → 4.0.3
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/ai-docs/package.json +2 -2
- package/ai-docs/tsconfig.json +2 -1
- package/dist/Array.d.ts +339 -0
- package/dist/Array.d.ts.map +1 -1
- package/dist/Array.js +143 -3
- package/dist/Array.js.map +1 -1
- package/dist/BigDecimal.d.ts +88 -0
- package/dist/BigDecimal.d.ts.map +1 -1
- package/dist/BigDecimal.js +44 -0
- package/dist/BigDecimal.js.map +1 -1
- package/dist/BigInt.d.ts +68 -0
- package/dist/BigInt.d.ts.map +1 -1
- package/dist/BigInt.js +36 -0
- package/dist/BigInt.js.map +1 -1
- package/dist/Boolean.d.ts +34 -0
- package/dist/Boolean.d.ts.map +1 -1
- package/dist/Boolean.js +18 -0
- package/dist/Boolean.js.map +1 -1
- package/dist/Brand.d.ts +9 -0
- package/dist/Brand.d.ts.map +1 -1
- package/dist/Brand.js +6 -0
- package/dist/Brand.js.map +1 -1
- package/dist/ByteSize.d.ts +86 -0
- package/dist/ByteSize.d.ts.map +1 -1
- package/dist/ByteSize.js +51 -0
- package/dist/ByteSize.js.map +1 -1
- package/dist/Cache.d.ts +38 -1
- package/dist/Cache.d.ts.map +1 -1
- package/dist/Cache.js +27 -7
- package/dist/Cache.js.map +1 -1
- package/dist/Cause.d.ts +82 -0
- package/dist/Cause.d.ts.map +1 -1
- package/dist/Cause.js +60 -0
- package/dist/Cause.js.map +1 -1
- package/dist/Channel.d.ts +327 -4
- package/dist/Channel.d.ts.map +1 -1
- package/dist/Channel.js +168 -8
- package/dist/Channel.js.map +1 -1
- package/dist/ChannelSchema.d.ts +11 -0
- package/dist/ChannelSchema.d.ts.map +1 -1
- package/dist/ChannelSchema.js +6 -0
- package/dist/ChannelSchema.js.map +1 -1
- package/dist/Chunk.d.ts +192 -0
- package/dist/Chunk.d.ts.map +1 -1
- package/dist/Chunk.js +78 -0
- package/dist/Chunk.js.map +1 -1
- package/dist/Clock.d.ts +7 -0
- package/dist/Clock.d.ts.map +1 -1
- package/dist/Clock.js +5 -0
- package/dist/Clock.js.map +1 -1
- package/dist/Combiner.d.ts +10 -0
- package/dist/Combiner.d.ts.map +1 -1
- package/dist/Combiner.js +8 -0
- package/dist/Combiner.js.map +1 -1
- package/dist/Config.d.ts +52 -12
- package/dist/Config.d.ts.map +1 -1
- package/dist/Config.js +55 -5
- package/dist/Config.js.map +1 -1
- package/dist/ConfigProvider.d.ts +28 -0
- package/dist/ConfigProvider.d.ts.map +1 -1
- package/dist/ConfigProvider.js +19 -0
- package/dist/ConfigProvider.js.map +1 -1
- package/dist/Console.d.ts +22 -0
- package/dist/Console.d.ts.map +1 -1
- package/dist/Console.js +20 -0
- package/dist/Console.js.map +1 -1
- package/dist/Context.d.ts +50 -0
- package/dist/Context.d.ts.map +1 -1
- package/dist/Context.js +24 -3
- package/dist/Context.js.map +1 -1
- package/dist/Cron.d.ts +16 -0
- package/dist/Cron.d.ts.map +1 -1
- package/dist/Cron.js +26 -1
- package/dist/Cron.js.map +1 -1
- package/dist/Crypto.d.ts +38 -5
- package/dist/Crypto.d.ts.map +1 -1
- package/dist/Crypto.js +11 -2
- package/dist/Crypto.js.map +1 -1
- package/dist/Data.d.ts +13 -0
- package/dist/Data.d.ts.map +1 -1
- package/dist/Data.js +5 -0
- package/dist/Data.js.map +1 -1
- package/dist/DateTime.d.ts +180 -6
- package/dist/DateTime.d.ts.map +1 -1
- package/dist/DateTime.js +98 -6
- package/dist/DateTime.js.map +1 -1
- package/dist/Deferred.d.ts +51 -0
- package/dist/Deferred.d.ts.map +1 -1
- package/dist/Deferred.js +22 -0
- package/dist/Deferred.js.map +1 -1
- package/dist/Differ.d.ts +2 -0
- package/dist/Differ.d.ts.map +1 -1
- package/dist/Differ.js +1 -0
- package/dist/Duration.d.ts +96 -6
- package/dist/Duration.d.ts.map +1 -1
- package/dist/Duration.js +80 -8
- package/dist/Duration.js.map +1 -1
- package/dist/Effect.d.ts +527 -0
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +240 -5
- package/dist/Effect.js.map +1 -1
- package/dist/Effectable.d.ts +4 -0
- package/dist/Effectable.d.ts.map +1 -1
- package/dist/Effectable.js +3 -0
- package/dist/Effectable.js.map +1 -1
- package/dist/Equal.d.ts +8 -0
- package/dist/Equal.d.ts.map +1 -1
- package/dist/Equal.js +9 -1
- package/dist/Equal.js.map +1 -1
- package/dist/Equivalence.d.ts +21 -0
- package/dist/Equivalence.d.ts.map +1 -1
- package/dist/Equivalence.js +16 -0
- package/dist/Equivalence.js.map +1 -1
- package/dist/ErrorReporter.d.ts +36 -0
- package/dist/ErrorReporter.d.ts.map +1 -1
- package/dist/ErrorReporter.js +11 -0
- package/dist/ErrorReporter.js.map +1 -1
- package/dist/ExecutionPlan.d.ts +49 -8
- package/dist/ExecutionPlan.d.ts.map +1 -1
- package/dist/ExecutionPlan.js +7 -0
- package/dist/ExecutionPlan.js.map +1 -1
- package/dist/Exit.d.ts +40 -0
- package/dist/Exit.d.ts.map +1 -1
- package/dist/Exit.js +27 -0
- package/dist/Exit.js.map +1 -1
- package/dist/Fiber.d.ts +20 -0
- package/dist/Fiber.d.ts.map +1 -1
- package/dist/Fiber.js +11 -0
- package/dist/Fiber.js.map +1 -1
- package/dist/FiberHandle.d.ts +21 -0
- package/dist/FiberHandle.d.ts.map +1 -1
- package/dist/FiberHandle.js +21 -4
- package/dist/FiberHandle.js.map +1 -1
- package/dist/FiberMap.d.ts +35 -0
- package/dist/FiberMap.d.ts.map +1 -1
- package/dist/FiberMap.js +19 -0
- package/dist/FiberMap.js.map +1 -1
- package/dist/FiberSet.d.ts +20 -0
- package/dist/FiberSet.d.ts.map +1 -1
- package/dist/FiberSet.js +14 -0
- package/dist/FiberSet.js.map +1 -1
- package/dist/FileSystem.d.ts +59 -2
- package/dist/FileSystem.d.ts.map +1 -1
- package/dist/FileSystem.js +8 -0
- package/dist/FileSystem.js.map +1 -1
- package/dist/Filter.d.ts +55 -0
- package/dist/Filter.d.ts.map +1 -1
- package/dist/Filter.js +28 -0
- package/dist/Filter.js.map +1 -1
- package/dist/Formatter.d.ts +3 -0
- package/dist/Formatter.d.ts.map +1 -1
- package/dist/Formatter.js +39 -1
- package/dist/Formatter.js.map +1 -1
- package/dist/Function.d.ts +30 -0
- package/dist/Function.d.ts.map +1 -1
- package/dist/Function.js +20 -0
- package/dist/Function.js.map +1 -1
- package/dist/Graph.d.ts +247 -12
- package/dist/Graph.d.ts.map +1 -1
- package/dist/Graph.js +149 -28
- package/dist/Graph.js.map +1 -1
- package/dist/HKT.d.ts +5 -0
- package/dist/HKT.d.ts.map +1 -1
- package/dist/Hash.d.ts +14 -0
- package/dist/Hash.d.ts.map +1 -1
- package/dist/Hash.js +12 -0
- package/dist/Hash.js.map +1 -1
- package/dist/HashMap.d.ts +91 -0
- package/dist/HashMap.d.ts.map +1 -1
- package/dist/HashMap.js +39 -0
- package/dist/HashMap.js.map +1 -1
- package/dist/HashRing.d.ts +17 -0
- package/dist/HashRing.d.ts.map +1 -1
- package/dist/HashRing.js +9 -0
- package/dist/HashRing.js.map +1 -1
- package/dist/HashSet.d.ts +49 -0
- package/dist/HashSet.d.ts.map +1 -1
- package/dist/HashSet.js +19 -0
- package/dist/HashSet.js.map +1 -1
- package/dist/Inspectable.d.ts +7 -0
- package/dist/Inspectable.d.ts.map +1 -1
- package/dist/Inspectable.js +6 -0
- package/dist/Inspectable.js.map +1 -1
- package/dist/Iterable.d.ts +127 -0
- package/dist/Iterable.d.ts.map +1 -1
- package/dist/Iterable.js +51 -0
- package/dist/Iterable.js.map +1 -1
- package/dist/JsonPatch.d.ts +4 -0
- package/dist/JsonPatch.d.ts.map +1 -1
- package/dist/JsonPatch.js +3 -0
- package/dist/JsonPatch.js.map +1 -1
- package/dist/JsonPointer.d.ts +5 -0
- package/dist/JsonPointer.d.ts.map +1 -1
- package/dist/JsonPointer.js +5 -0
- package/dist/JsonPointer.js.map +1 -1
- package/dist/JsonSchema.d.ts +16 -0
- package/dist/JsonSchema.d.ts.map +1 -1
- package/dist/JsonSchema.js +11 -0
- package/dist/JsonSchema.js.map +1 -1
- package/dist/Latch.d.ts +14 -0
- package/dist/Latch.d.ts.map +1 -1
- package/dist/Latch.js +10 -0
- package/dist/Latch.js.map +1 -1
- package/dist/Layer.d.ts +100 -0
- package/dist/Layer.d.ts.map +1 -1
- package/dist/Layer.js +45 -1
- package/dist/Layer.js.map +1 -1
- package/dist/LayerMap.d.ts +7 -0
- package/dist/LayerMap.d.ts.map +1 -1
- package/dist/LayerMap.js +4 -0
- package/dist/LayerMap.js.map +1 -1
- package/dist/LayerRef.d.ts +5 -0
- package/dist/LayerRef.d.ts.map +1 -1
- package/dist/LayerRef.js +3 -0
- package/dist/LayerRef.js.map +1 -1
- package/dist/LogLevel.d.ts +20 -0
- package/dist/LogLevel.d.ts.map +1 -1
- package/dist/LogLevel.js +9 -0
- package/dist/LogLevel.js.map +1 -1
- package/dist/Logger.d.ts +25 -0
- package/dist/Logger.d.ts.map +1 -1
- package/dist/Logger.js +30 -4
- package/dist/Logger.js.map +1 -1
- package/dist/ManagedRuntime.d.ts +5 -0
- package/dist/ManagedRuntime.d.ts.map +1 -1
- package/dist/ManagedRuntime.js +9 -1
- package/dist/ManagedRuntime.js.map +1 -1
- package/dist/Match.d.ts +51 -0
- package/dist/Match.d.ts.map +1 -1
- package/dist/Match.js +39 -0
- package/dist/Match.js.map +1 -1
- package/dist/Metric.d.ts +59 -0
- package/dist/Metric.d.ts.map +1 -1
- package/dist/Metric.js +31 -0
- package/dist/Metric.js.map +1 -1
- package/dist/MutableHashMap.d.ts +32 -0
- package/dist/MutableHashMap.d.ts.map +1 -1
- package/dist/MutableHashMap.js +16 -0
- package/dist/MutableHashMap.js.map +1 -1
- package/dist/MutableHashSet.d.ts +16 -0
- package/dist/MutableHashSet.d.ts.map +1 -1
- package/dist/MutableHashSet.js +10 -0
- package/dist/MutableHashSet.js.map +1 -1
- package/dist/MutableList.d.ts +20 -0
- package/dist/MutableList.d.ts.map +1 -1
- package/dist/MutableList.js +18 -0
- package/dist/MutableList.js.map +1 -1
- package/dist/MutableRef.d.ts +31 -0
- package/dist/MutableRef.d.ts.map +1 -1
- package/dist/MutableRef.js +17 -0
- package/dist/MutableRef.js.map +1 -1
- package/dist/Newtype.d.ts +9 -0
- package/dist/Newtype.d.ts.map +1 -1
- package/dist/Newtype.js +6 -0
- package/dist/Newtype.js.map +1 -1
- package/dist/NonEmptyIterable.d.ts +4 -0
- package/dist/NonEmptyIterable.d.ts.map +1 -1
- package/dist/NonEmptyIterable.js +2 -0
- package/dist/NonEmptyIterable.js.map +1 -1
- package/dist/Number.d.ts +61 -0
- package/dist/Number.d.ts.map +1 -1
- package/dist/Number.js +31 -0
- package/dist/Number.js.map +1 -1
- package/dist/Optic.d.ts +41 -0
- package/dist/Optic.d.ts.map +1 -1
- package/dist/Optic.js +20 -0
- package/dist/Optic.js.map +1 -1
- package/dist/Option.d.ts +134 -0
- package/dist/Option.d.ts.map +1 -1
- package/dist/Option.js +61 -0
- package/dist/Option.js.map +1 -1
- package/dist/Order.d.ts +29 -0
- package/dist/Order.d.ts.map +1 -1
- package/dist/Order.js +24 -0
- package/dist/Order.js.map +1 -1
- package/dist/Ordering.d.ts +7 -0
- package/dist/Ordering.d.ts.map +1 -1
- package/dist/Ordering.js +3 -0
- package/dist/Ordering.js.map +1 -1
- package/dist/PartitionedSemaphore.d.ts +24 -0
- package/dist/PartitionedSemaphore.d.ts.map +1 -1
- package/dist/PartitionedSemaphore.js +47 -21
- package/dist/PartitionedSemaphore.js.map +1 -1
- package/dist/Path.d.ts +6 -0
- package/dist/Path.d.ts.map +1 -1
- package/dist/Path.js +4 -0
- package/dist/Path.js.map +1 -1
- package/dist/Pipeable.d.ts +7 -0
- package/dist/Pipeable.d.ts.map +1 -1
- package/dist/Pipeable.js +5 -0
- package/dist/Pipeable.js.map +1 -1
- package/dist/PlatformError.d.ts +8 -0
- package/dist/PlatformError.d.ts.map +1 -1
- package/dist/PlatformError.js +7 -0
- package/dist/PlatformError.js.map +1 -1
- package/dist/Pool.d.ts +19 -0
- package/dist/Pool.d.ts.map +1 -1
- package/dist/Pool.js +8 -1
- package/dist/Pool.js.map +1 -1
- package/dist/Predicate.d.ts +84 -0
- package/dist/Predicate.d.ts.map +1 -1
- package/dist/Predicate.js +48 -0
- package/dist/Predicate.js.map +1 -1
- package/dist/PrimaryKey.d.ts +5 -0
- package/dist/PrimaryKey.d.ts.map +1 -1
- package/dist/PrimaryKey.js +4 -0
- package/dist/PrimaryKey.js.map +1 -1
- package/dist/PubSub.d.ts +67 -5
- package/dist/PubSub.d.ts.map +1 -1
- package/dist/PubSub.js +60 -8
- package/dist/PubSub.js.map +1 -1
- package/dist/Pull.d.ts +20 -0
- package/dist/Pull.d.ts.map +1 -1
- package/dist/Pull.js +10 -0
- package/dist/Pull.js.map +1 -1
- package/dist/Queue.d.ts +60 -0
- package/dist/Queue.d.ts.map +1 -1
- package/dist/Queue.js +58 -8
- package/dist/Queue.js.map +1 -1
- package/dist/Random.d.ts +13 -0
- package/dist/Random.d.ts.map +1 -1
- package/dist/Random.js +9 -0
- package/dist/Random.js.map +1 -1
- package/dist/RcMap.d.ts +23 -0
- package/dist/RcMap.d.ts.map +1 -1
- package/dist/RcMap.js +8 -0
- package/dist/RcMap.js.map +1 -1
- package/dist/RcRef.d.ts +6 -0
- package/dist/RcRef.d.ts.map +1 -1
- package/dist/RcRef.js +3 -0
- package/dist/RcRef.js.map +1 -1
- package/dist/Record.d.ts +100 -0
- package/dist/Record.d.ts.map +1 -1
- package/dist/Record.js +43 -0
- package/dist/Record.js.map +1 -1
- package/dist/Redactable.d.ts +6 -0
- package/dist/Redactable.d.ts.map +1 -1
- package/dist/Redactable.js +4 -0
- package/dist/Redactable.js.map +1 -1
- package/dist/Redacted.d.ts +8 -0
- package/dist/Redacted.d.ts.map +1 -1
- package/dist/Redacted.js +6 -0
- package/dist/Redacted.js.map +1 -1
- package/dist/Reducer.d.ts +4 -0
- package/dist/Reducer.d.ts.map +1 -1
- package/dist/Reducer.js +3 -0
- package/dist/Reducer.js.map +1 -1
- package/dist/Ref.d.ts +20 -0
- package/dist/Ref.d.ts.map +1 -1
- package/dist/Ref.js +16 -0
- package/dist/Ref.js.map +1 -1
- package/dist/References.d.ts +21 -0
- package/dist/References.d.ts.map +1 -1
- package/dist/References.js +19 -0
- package/dist/References.js.map +1 -1
- package/dist/RegExp.d.ts +3 -0
- package/dist/RegExp.d.ts.map +1 -1
- package/dist/RegExp.js +4 -0
- package/dist/RegExp.js.map +1 -1
- package/dist/Request.d.ts +32 -0
- package/dist/Request.d.ts.map +1 -1
- package/dist/Request.js +12 -0
- package/dist/Request.js.map +1 -1
- package/dist/RequestResolver.d.ts +42 -0
- package/dist/RequestResolver.d.ts.map +1 -1
- package/dist/RequestResolver.js +27 -6
- package/dist/RequestResolver.js.map +1 -1
- package/dist/Resource.d.ts +6 -0
- package/dist/Resource.d.ts.map +1 -1
- package/dist/Resource.js +6 -0
- package/dist/Resource.js.map +1 -1
- package/dist/Result.d.ts +91 -0
- package/dist/Result.d.ts.map +1 -1
- package/dist/Result.js +41 -0
- package/dist/Result.js.map +1 -1
- package/dist/Runtime.d.ts +9 -0
- package/dist/Runtime.d.ts.map +1 -1
- package/dist/Runtime.js +7 -0
- package/dist/Runtime.js.map +1 -1
- package/dist/Schedule.d.ts +57 -0
- package/dist/Schedule.d.ts.map +1 -1
- package/dist/Schedule.js +32 -0
- package/dist/Schedule.js.map +1 -1
- package/dist/Scheduler.d.ts +7 -0
- package/dist/Scheduler.d.ts.map +1 -1
- package/dist/Scheduler.js +5 -0
- package/dist/Scheduler.js.map +1 -1
- package/dist/Schema.d.ts +969 -2
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +635 -5
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaAST.d.ts +107 -0
- package/dist/SchemaAST.d.ts.map +1 -1
- package/dist/SchemaAST.js +81 -1
- package/dist/SchemaAST.js.map +1 -1
- package/dist/SchemaGetter.d.ts +69 -2
- package/dist/SchemaGetter.d.ts.map +1 -1
- package/dist/SchemaGetter.js +63 -4
- package/dist/SchemaGetter.js.map +1 -1
- package/dist/SchemaIssue.d.ts +33 -0
- package/dist/SchemaIssue.d.ts.map +1 -1
- package/dist/SchemaIssue.js +18 -0
- package/dist/SchemaIssue.js.map +1 -1
- package/dist/SchemaParser.d.ts +25 -0
- package/dist/SchemaParser.d.ts.map +1 -1
- package/dist/SchemaParser.js +26 -0
- package/dist/SchemaParser.js.map +1 -1
- package/dist/SchemaRepresentation.d.ts +147 -0
- package/dist/SchemaRepresentation.d.ts.map +1 -1
- package/dist/SchemaRepresentation.js +99 -0
- package/dist/SchemaRepresentation.js.map +1 -1
- package/dist/SchemaTransformation.d.ts +53 -0
- package/dist/SchemaTransformation.d.ts.map +1 -1
- package/dist/SchemaTransformation.js +46 -0
- package/dist/SchemaTransformation.js.map +1 -1
- package/dist/Scope.d.ts +19 -0
- package/dist/Scope.d.ts.map +1 -1
- package/dist/Scope.js +12 -0
- package/dist/Scope.js.map +1 -1
- package/dist/ScopedCache.d.ts +34 -0
- package/dist/ScopedCache.d.ts.map +1 -1
- package/dist/ScopedCache.js +26 -3
- package/dist/ScopedCache.js.map +1 -1
- package/dist/ScopedRef.d.ts +9 -0
- package/dist/ScopedRef.d.ts.map +1 -1
- package/dist/ScopedRef.js +6 -0
- package/dist/ScopedRef.js.map +1 -1
- package/dist/Semaphore.d.ts +26 -0
- package/dist/Semaphore.d.ts.map +1 -1
- package/dist/Semaphore.js +10 -0
- package/dist/Semaphore.js.map +1 -1
- package/dist/Sink.d.ts +125 -1
- package/dist/Sink.d.ts.map +1 -1
- package/dist/Sink.js +75 -1
- package/dist/Sink.js.map +1 -1
- package/dist/StandardSchema.d.ts +1 -0
- package/dist/StandardSchema.d.ts.map +1 -1
- package/dist/StandardSchema.js +1 -0
- package/dist/Stdio.d.ts +14 -1
- package/dist/Stdio.d.ts.map +1 -1
- package/dist/Stdio.js +6 -0
- package/dist/Stdio.js.map +1 -1
- package/dist/Stream.d.ts +569 -11
- package/dist/Stream.d.ts.map +1 -1
- package/dist/Stream.js +266 -18
- package/dist/Stream.js.map +1 -1
- package/dist/String.d.ts +87 -0
- package/dist/String.d.ts.map +1 -1
- package/dist/String.js +61 -0
- package/dist/String.js.map +1 -1
- package/dist/Struct.d.ts +46 -0
- package/dist/Struct.d.ts.map +1 -1
- package/dist/Struct.js +19 -0
- package/dist/Struct.js.map +1 -1
- package/dist/SubscriptionRef.d.ts +65 -0
- package/dist/SubscriptionRef.d.ts.map +1 -1
- package/dist/SubscriptionRef.js +25 -0
- package/dist/SubscriptionRef.js.map +1 -1
- package/dist/Symbol.d.ts +2 -0
- package/dist/Symbol.d.ts.map +1 -1
- package/dist/Symbol.js +2 -0
- package/dist/Symbol.js.map +1 -1
- package/dist/SynchronizedRef.d.ts +63 -0
- package/dist/SynchronizedRef.d.ts.map +1 -1
- package/dist/SynchronizedRef.js +24 -0
- package/dist/SynchronizedRef.js.map +1 -1
- package/dist/Take.d.ts +3 -0
- package/dist/Take.d.ts.map +1 -1
- package/dist/Take.js +1 -0
- package/dist/Take.js.map +1 -1
- package/dist/Terminal.d.ts +8 -0
- package/dist/Terminal.d.ts.map +1 -1
- package/dist/Terminal.js +4 -0
- package/dist/Terminal.js.map +1 -1
- package/dist/Tracer.d.ts +23 -0
- package/dist/Tracer.d.ts.map +1 -1
- package/dist/Tracer.js +12 -0
- package/dist/Tracer.js.map +1 -1
- package/dist/Trie.d.ts +68 -0
- package/dist/Trie.d.ts.map +1 -1
- package/dist/Trie.js +28 -0
- package/dist/Trie.js.map +1 -1
- package/dist/Tuple.d.ts +38 -0
- package/dist/Tuple.d.ts.map +1 -1
- package/dist/Tuple.js +18 -0
- package/dist/Tuple.js.map +1 -1
- package/dist/TxChunk.d.ts +52 -0
- package/dist/TxChunk.d.ts.map +1 -1
- package/dist/TxChunk.js +23 -0
- package/dist/TxChunk.js.map +1 -1
- package/dist/TxDeferred.d.ts +15 -0
- package/dist/TxDeferred.d.ts.map +1 -1
- package/dist/TxDeferred.js +8 -0
- package/dist/TxDeferred.js.map +1 -1
- package/dist/TxHashMap.d.ts +83 -0
- package/dist/TxHashMap.d.ts.map +1 -1
- package/dist/TxHashMap.js +52 -7
- package/dist/TxHashMap.js.map +1 -1
- package/dist/TxHashSet.d.ts +51 -0
- package/dist/TxHashSet.d.ts.map +1 -1
- package/dist/TxHashSet.js +29 -4
- package/dist/TxHashSet.js.map +1 -1
- package/dist/TxPriorityQueue.d.ts +30 -0
- package/dist/TxPriorityQueue.d.ts.map +1 -1
- package/dist/TxPriorityQueue.js +22 -1
- package/dist/TxPriorityQueue.js.map +1 -1
- package/dist/TxPubSub.d.ts +25 -0
- package/dist/TxPubSub.d.ts.map +1 -1
- package/dist/TxPubSub.js +19 -0
- package/dist/TxPubSub.js.map +1 -1
- package/dist/TxQueue.d.ts +51 -0
- package/dist/TxQueue.d.ts.map +1 -1
- package/dist/TxQueue.js +30 -0
- package/dist/TxQueue.js.map +1 -1
- package/dist/TxReentrantLock.d.ts +24 -0
- package/dist/TxReentrantLock.d.ts.map +1 -1
- package/dist/TxReentrantLock.js +32 -18
- package/dist/TxReentrantLock.js.map +1 -1
- package/dist/TxRef.d.ts +14 -0
- package/dist/TxRef.d.ts.map +1 -1
- package/dist/TxRef.js +7 -0
- package/dist/TxRef.js.map +1 -1
- package/dist/TxSemaphore.d.ts +25 -0
- package/dist/TxSemaphore.d.ts.map +1 -1
- package/dist/TxSemaphore.js +29 -13
- package/dist/TxSemaphore.js.map +1 -1
- package/dist/TxSubscriptionRef.d.ts +25 -0
- package/dist/TxSubscriptionRef.d.ts.map +1 -1
- package/dist/TxSubscriptionRef.js +12 -0
- package/dist/TxSubscriptionRef.js.map +1 -1
- package/dist/Types.d.ts +36 -0
- package/dist/Types.d.ts.map +1 -1
- package/dist/Types.js +1 -0
- package/dist/UndefinedOr.d.ts +15 -0
- package/dist/UndefinedOr.d.ts.map +1 -1
- package/dist/UndefinedOr.js +9 -0
- package/dist/UndefinedOr.js.map +1 -1
- package/dist/Unify.d.ts +15 -0
- package/dist/Unify.d.ts.map +1 -1
- package/dist/Unify.js +2 -0
- package/dist/Unify.js.map +1 -1
- package/dist/Utils.d.ts +4 -0
- package/dist/Utils.d.ts.map +1 -1
- package/dist/Utils.js +1 -0
- package/dist/Utils.js.map +1 -1
- package/dist/Version.d.ts +26 -0
- package/dist/Version.d.ts.map +1 -0
- package/dist/Version.js +36 -0
- package/dist/Version.js.map +1 -0
- package/dist/ai/Chat.js +1 -1
- package/dist/ai/Chat.js.map +1 -1
- package/dist/ai/DecisionModel.d.ts +22 -0
- package/dist/ai/DecisionModel.d.ts.map +1 -1
- package/dist/ai/DecisionModel.js +22 -4
- package/dist/ai/DecisionModel.js.map +1 -1
- package/dist/ai/LanguageModel.d.ts.map +1 -1
- package/dist/ai/LanguageModel.js +14 -13
- package/dist/ai/LanguageModel.js.map +1 -1
- package/dist/ai/McpServer.d.ts +38 -11
- package/dist/ai/McpServer.d.ts.map +1 -1
- package/dist/ai/McpServer.js +276 -190
- package/dist/ai/McpServer.js.map +1 -1
- package/dist/ai/Telemetry.d.ts +49 -41
- package/dist/ai/Telemetry.d.ts.map +1 -1
- package/dist/ai/Telemetry.js +6 -8
- package/dist/ai/Telemetry.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js +5 -0
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
- package/dist/ai/internal/mcpProtocol.js.map +1 -1
- package/dist/ai/internal/mcpRuntime.js +80 -46
- package/dist/ai/internal/mcpRuntime.js.map +1 -1
- package/dist/ai/internal/mcpStatefulRuntime.js +1 -0
- package/dist/ai/internal/mcpStatefulRuntime.js.map +1 -1
- package/dist/cli/CliOutput.d.ts +27 -0
- package/dist/cli/CliOutput.d.ts.map +1 -1
- package/dist/cli/CliOutput.js +33 -10
- package/dist/cli/CliOutput.js.map +1 -1
- package/dist/cli/Command.d.ts.map +1 -1
- package/dist/cli/Command.js +6 -3
- package/dist/cli/Command.js.map +1 -1
- package/dist/cli/Completions.d.ts +3 -3
- package/dist/cli/Completions.d.ts.map +1 -1
- package/dist/cli/Completions.js +8 -5
- package/dist/cli/Completions.js.map +1 -1
- package/dist/cli/GlobalFlag.d.ts +5 -4
- package/dist/cli/GlobalFlag.d.ts.map +1 -1
- package/dist/cli/GlobalFlag.js +3 -3
- package/dist/cli/GlobalFlag.js.map +1 -1
- package/dist/cli/Prompt.d.ts +17 -1
- package/dist/cli/Prompt.d.ts.map +1 -1
- package/dist/cli/Prompt.js +119 -114
- package/dist/cli/Prompt.js.map +1 -1
- package/dist/cli/internal/ansi.d.ts +0 -1
- package/dist/cli/internal/ansi.d.ts.map +1 -1
- package/dist/cli/internal/ansi.js +20 -3
- package/dist/cli/internal/ansi.js.map +1 -1
- package/dist/cli/internal/completions/powershell.d.ts +2 -0
- package/dist/cli/internal/completions/powershell.d.ts.map +1 -0
- package/dist/cli/internal/completions/powershell.js +273 -0
- package/dist/cli/internal/completions/powershell.js.map +1 -0
- package/dist/cli/internal/completions/zsh.js +3 -2
- package/dist/cli/internal/completions/zsh.js.map +1 -1
- package/dist/cli/internal/wizard.d.ts +3 -3
- package/dist/cli/internal/wizard.d.ts.map +1 -1
- package/dist/cli/internal/wizard.js +21 -18
- package/dist/cli/internal/wizard.js.map +1 -1
- package/dist/cluster/ClusterSchema.d.ts +28 -0
- package/dist/cluster/ClusterSchema.d.ts.map +1 -1
- package/dist/cluster/ClusterSchema.js +30 -0
- package/dist/cluster/ClusterSchema.js.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.js +10 -18
- package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
- package/dist/cluster/K8sHttpClient.d.ts.map +1 -1
- package/dist/cluster/K8sHttpClient.js +5 -2
- package/dist/cluster/K8sHttpClient.js.map +1 -1
- package/dist/cluster/MessageStorage.d.ts +18 -3
- package/dist/cluster/MessageStorage.d.ts.map +1 -1
- package/dist/cluster/MessageStorage.js +31 -11
- package/dist/cluster/MessageStorage.js.map +1 -1
- package/dist/cluster/Runners.d.ts.map +1 -1
- package/dist/cluster/Runners.js +8 -2
- package/dist/cluster/Runners.js.map +1 -1
- package/dist/cluster/Sharding.d.ts.map +1 -1
- package/dist/cluster/Sharding.js +181 -62
- package/dist/cluster/Sharding.js.map +1 -1
- package/dist/cluster/SqlMessageStorage.d.ts +59 -19
- package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
- package/dist/cluster/SqlMessageStorage.js +84 -55
- package/dist/cluster/SqlMessageStorage.js.map +1 -1
- package/dist/cluster/SqlRunnerStorage.d.ts +68 -19
- package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
- package/dist/cluster/SqlRunnerStorage.js +191 -113
- package/dist/cluster/SqlRunnerStorage.js.map +1 -1
- package/dist/cluster/internal/entityManager.js +104 -37
- package/dist/cluster/internal/entityManager.js.map +1 -1
- package/dist/encoding/Base64.d.ts +4 -0
- package/dist/encoding/Base64.d.ts.map +1 -1
- package/dist/encoding/Base64.js +4 -0
- package/dist/encoding/Base64.js.map +1 -1
- package/dist/encoding/Base64Url.d.ts +4 -0
- package/dist/encoding/Base64Url.d.ts.map +1 -1
- package/dist/encoding/Base64Url.js +4 -0
- package/dist/encoding/Base64Url.js.map +1 -1
- package/dist/encoding/EncodingError.d.ts +4 -0
- package/dist/encoding/EncodingError.d.ts.map +1 -1
- package/dist/encoding/EncodingError.js +4 -0
- package/dist/encoding/EncodingError.js.map +1 -1
- package/dist/encoding/Hex.d.ts +5 -0
- package/dist/encoding/Hex.d.ts.map +1 -1
- package/dist/encoding/Hex.js +5 -0
- package/dist/encoding/Hex.js.map +1 -1
- package/dist/encoding/Toml.js +2 -2
- package/dist/encoding/Toml.js.map +1 -1
- package/dist/encoding/Yaml.d.ts.map +1 -1
- package/dist/encoding/Yaml.js +6 -4
- package/dist/encoding/Yaml.js.map +1 -1
- package/dist/encoding/index.d.ts +4 -0
- package/dist/encoding/index.d.ts.map +1 -1
- package/dist/encoding/index.js +4 -0
- package/dist/encoding/index.js.map +1 -1
- package/dist/eventlog/SqlEventJournal.js +8 -4
- package/dist/eventlog/SqlEventJournal.js.map +1 -1
- package/dist/eventlog/SqlEventLogServerUnencrypted.d.ts +27 -10
- package/dist/eventlog/SqlEventLogServerUnencrypted.d.ts.map +1 -1
- package/dist/eventlog/SqlEventLogServerUnencrypted.js +49 -7
- package/dist/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
- package/dist/http/FindMyWay/internal/router.js +3 -6
- package/dist/http/FindMyWay/internal/router.js.map +1 -1
- package/dist/http/Headers.d.ts +3 -1
- package/dist/http/Headers.d.ts.map +1 -1
- package/dist/http/Headers.js +4 -2
- package/dist/http/Headers.js.map +1 -1
- package/dist/http/HttpClient.d.ts +15 -0
- package/dist/http/HttpClient.d.ts.map +1 -1
- package/dist/http/HttpClient.js +79 -23
- package/dist/http/HttpClient.js.map +1 -1
- package/dist/http/HttpClientResponse.js +3 -1
- package/dist/http/HttpClientResponse.js.map +1 -1
- package/dist/http/HttpEffect.d.ts +3 -0
- package/dist/http/HttpEffect.d.ts.map +1 -1
- package/dist/http/HttpEffect.js +5 -2
- package/dist/http/HttpEffect.js.map +1 -1
- package/dist/http/HttpMiddleware.d.ts +17 -0
- package/dist/http/HttpMiddleware.d.ts.map +1 -1
- package/dist/http/HttpMiddleware.js +56 -39
- package/dist/http/HttpMiddleware.js.map +1 -1
- package/dist/http/HttpServer.d.ts +1 -1
- package/dist/http/HttpServer.d.ts.map +1 -1
- package/dist/http/HttpTraceContext.d.ts.map +1 -1
- package/dist/http/HttpTraceContext.js +4 -2
- package/dist/http/HttpTraceContext.js.map +1 -1
- package/dist/http/internal/tracing.d.ts +2 -0
- package/dist/http/internal/tracing.d.ts.map +1 -0
- package/dist/http/internal/tracing.js +37 -0
- package/dist/http/internal/tracing.js.map +1 -0
- package/dist/http-api/HttpApiBuilder.js +2 -1
- package/dist/http-api/HttpApiBuilder.js.map +1 -1
- package/dist/http-api/HttpApiClient.d.ts +12 -3
- package/dist/http-api/HttpApiClient.d.ts.map +1 -1
- package/dist/http-api/HttpApiClient.js.map +1 -1
- package/dist/http-api/HttpApiError.d.ts +4 -3
- package/dist/http-api/HttpApiError.d.ts.map +1 -1
- package/dist/http-api/HttpApiError.js +7 -4
- package/dist/http-api/HttpApiError.js.map +1 -1
- package/dist/http-api/HttpApiSecurity.d.ts +8 -8
- package/dist/http-api/HttpApiSecurity.js +8 -8
- package/dist/index.d.ts +155 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +155 -0
- package/dist/index.js.map +1 -1
- package/dist/internal/arbitrary/array.js +3 -3
- package/dist/internal/arbitrary/array.js.map +1 -1
- package/dist/internal/arbitrary/model.js +26 -11
- package/dist/internal/arbitrary/model.js.map +1 -1
- package/dist/internal/arbitrary/runner.js +8 -8
- package/dist/internal/arbitrary/runner.js.map +1 -1
- package/dist/internal/arbitrary/schema.js +4 -5
- package/dist/internal/arbitrary/schema.js.map +1 -1
- package/dist/internal/effect.js +53 -46
- package/dist/internal/effect.js.map +1 -1
- package/dist/internal/schedule.js +7 -5
- package/dist/internal/schedule.js.map +1 -1
- package/dist/internal/schema/standardSchema.js +2 -2
- package/dist/internal/schema/standardSchema.js.map +1 -1
- package/dist/internal/version.d.ts +2 -0
- package/dist/internal/version.d.ts.map +1 -0
- package/dist/internal/version.js +3 -0
- package/dist/internal/version.js.map +1 -0
- package/dist/net/AddressResolver.d.ts +145 -0
- package/dist/net/AddressResolver.d.ts.map +1 -0
- package/dist/net/AddressResolver.js +114 -0
- package/dist/net/AddressResolver.js.map +1 -0
- package/dist/net/Dns.d.ts +596 -0
- package/dist/net/Dns.d.ts.map +1 -0
- package/dist/net/Dns.js +549 -0
- package/dist/net/Dns.js.map +1 -0
- package/dist/net/Host.d.ts +320 -0
- package/dist/net/Host.d.ts.map +1 -0
- package/dist/net/Host.js +342 -0
- package/dist/net/Host.js.map +1 -0
- package/dist/net/IpInterface.d.ts +76 -3
- package/dist/net/IpInterface.d.ts.map +1 -1
- package/dist/net/IpInterface.js +53 -4
- package/dist/net/IpInterface.js.map +1 -1
- package/dist/net/IpNetwork.d.ts +82 -8
- package/dist/net/IpNetwork.d.ts.map +1 -1
- package/dist/net/IpNetwork.js +60 -4
- package/dist/net/IpNetwork.js.map +1 -1
- package/dist/net/NetAddress.d.ts +388 -35
- package/dist/net/NetAddress.d.ts.map +1 -1
- package/dist/net/NetAddress.js +350 -34
- package/dist/net/NetAddress.js.map +1 -1
- package/dist/net/index.d.ts +15 -0
- package/dist/net/index.d.ts.map +1 -1
- package/dist/net/index.js +15 -0
- package/dist/net/index.js.map +1 -1
- package/dist/observability/OtlpExporter.d.ts.map +1 -1
- package/dist/observability/OtlpExporter.js +5 -6
- package/dist/observability/OtlpExporter.js.map +1 -1
- package/dist/observability/OtlpLogger.d.ts.map +1 -1
- package/dist/observability/OtlpLogger.js +23 -27
- package/dist/observability/OtlpLogger.js.map +1 -1
- package/dist/observability/OtlpMetrics.d.ts +5 -3
- package/dist/observability/OtlpMetrics.d.ts.map +1 -1
- package/dist/observability/OtlpMetrics.js +36 -115
- package/dist/observability/OtlpMetrics.js.map +1 -1
- package/dist/observability/OtlpResource.d.ts +4 -3
- package/dist/observability/OtlpResource.d.ts.map +1 -1
- package/dist/observability/OtlpResource.js +20 -23
- package/dist/observability/OtlpResource.js.map +1 -1
- package/dist/observability/OtlpTracer.d.ts +1 -0
- package/dist/observability/OtlpTracer.d.ts.map +1 -1
- package/dist/observability/OtlpTracer.js +32 -36
- package/dist/observability/OtlpTracer.js.map +1 -1
- package/dist/observability/PrometheusMetrics.js +1 -0
- package/dist/observability/PrometheusMetrics.js.map +1 -1
- package/dist/observability/internal/otlpProtobuf.js +32 -1
- package/dist/observability/internal/otlpProtobuf.js.map +1 -1
- package/dist/persistence/PersistedQueue.d.ts +32 -3
- package/dist/persistence/PersistedQueue.d.ts.map +1 -1
- package/dist/persistence/PersistedQueue.js +75 -16
- package/dist/persistence/PersistedQueue.js.map +1 -1
- package/dist/reactivity/AsyncResult.d.ts +1 -1
- package/dist/reactivity/Atom.d.ts +5 -5
- package/dist/reactivity/Atom.d.ts.map +1 -1
- package/dist/reactivity/Atom.js +9 -5
- package/dist/reactivity/Atom.js.map +1 -1
- package/dist/reactivity/AtomHttpApi.d.ts +2 -2
- package/dist/reactivity/AtomHttpApi.d.ts.map +1 -1
- package/dist/reactivity/AtomRegistry.d.ts +8 -0
- package/dist/reactivity/AtomRegistry.d.ts.map +1 -1
- package/dist/reactivity/AtomRegistry.js.map +1 -1
- package/dist/rpc/RpcClient.d.ts +41 -7
- package/dist/rpc/RpcClient.d.ts.map +1 -1
- package/dist/rpc/RpcClient.js +50 -25
- package/dist/rpc/RpcClient.js.map +1 -1
- package/dist/rpc/RpcServer.d.ts +6 -0
- package/dist/rpc/RpcServer.d.ts.map +1 -1
- package/dist/rpc/RpcServer.js +59 -40
- package/dist/rpc/RpcServer.js.map +1 -1
- package/dist/rpc/internal/tracing.d.ts +2 -0
- package/dist/rpc/internal/tracing.d.ts.map +1 -0
- package/dist/rpc/internal/tracing.js +18 -0
- package/dist/rpc/internal/tracing.js.map +1 -0
- package/dist/schema/SchemaCompiler/runtime.js +9 -1
- package/dist/schema/SchemaCompiler/runtime.js.map +1 -1
- package/dist/socket/DatagramSocket.d.ts +456 -0
- package/dist/socket/DatagramSocket.d.ts.map +1 -0
- package/dist/socket/DatagramSocket.js +535 -0
- package/dist/socket/DatagramSocket.js.map +1 -0
- package/dist/socket/Socket.d.ts +14 -1
- package/dist/socket/Socket.d.ts.map +1 -1
- package/dist/socket/Socket.js +9 -1
- package/dist/socket/Socket.js.map +1 -1
- package/dist/socket/index.d.ts +5 -0
- package/dist/socket/index.d.ts.map +1 -1
- package/dist/socket/index.js +5 -0
- package/dist/socket/index.js.map +1 -1
- package/dist/sql/Migrator.d.ts.map +1 -1
- package/dist/sql/Migrator.js +7 -2
- package/dist/sql/Migrator.js.map +1 -1
- package/dist/sql/SqlClient.d.ts +7 -1
- package/dist/sql/SqlClient.d.ts.map +1 -1
- package/dist/sql/SqlClient.js +35 -10
- package/dist/sql/SqlClient.js.map +1 -1
- package/dist/sql/Statement.d.ts +21 -1
- package/dist/sql/Statement.d.ts.map +1 -1
- package/dist/sql/Statement.js +55 -7
- package/dist/sql/Statement.js.map +1 -1
- package/dist/testing/TestClock.d.ts +8 -0
- package/dist/testing/TestClock.d.ts.map +1 -1
- package/dist/testing/TestClock.js +7 -0
- package/dist/testing/TestClock.js.map +1 -1
- package/dist/testing/TestConsole.d.ts +7 -0
- package/dist/testing/TestConsole.d.ts.map +1 -1
- package/dist/testing/TestConsole.js +6 -0
- package/dist/testing/TestConsole.js.map +1 -1
- package/dist/testing/TestCrypto.d.ts +73 -0
- package/dist/testing/TestCrypto.d.ts.map +1 -0
- package/dist/testing/TestCrypto.js +87 -0
- package/dist/testing/TestCrypto.js.map +1 -0
- package/dist/testing/index.d.ts +8 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +8 -0
- package/dist/testing/index.js.map +1 -1
- package/dist/workflow/DurableDeferred.d.ts +54 -0
- package/dist/workflow/DurableDeferred.d.ts.map +1 -1
- package/dist/workflow/DurableDeferred.js +78 -49
- package/dist/workflow/DurableDeferred.js.map +1 -1
- package/dist/workflow/WorkflowEngine.d.ts.map +1 -1
- package/dist/workflow/WorkflowEngine.js +2 -1
- package/dist/workflow/WorkflowEngine.js.map +1 -1
- package/package.json +3 -3
- package/src/Array.ts +351 -3
- package/src/BigDecimal.ts +88 -0
- package/src/BigInt.ts +68 -0
- package/src/Boolean.ts +34 -0
- package/src/Brand.ts +10 -0
- package/src/ByteSize.ts +87 -0
- package/src/Cache.ts +50 -8
- package/src/Cause.ts +82 -0
- package/src/Channel.ts +368 -18
- package/src/ChannelSchema.ts +13 -0
- package/src/Chunk.ts +193 -0
- package/src/Clock.ts +7 -0
- package/src/Combiner.ts +10 -0
- package/src/Config.ts +82 -8
- package/src/ConfigProvider.ts +28 -0
- package/src/Console.ts +26 -0
- package/src/Context.ts +53 -3
- package/src/Cron.ts +32 -1
- package/src/Crypto.ts +48 -9
- package/src/Data.ts +13 -0
- package/src/DateTime.ts +180 -6
- package/src/Deferred.ts +51 -0
- package/src/Differ.ts +2 -0
- package/src/Duration.ts +126 -16
- package/src/Effect.ts +539 -5
- package/src/Effectable.ts +4 -0
- package/src/Equal.ts +12 -1
- package/src/Equivalence.ts +22 -0
- package/src/ErrorReporter.ts +36 -0
- package/src/ExecutionPlan.ts +58 -14
- package/src/Exit.ts +40 -0
- package/src/Fiber.ts +20 -0
- package/src/FiberHandle.ts +29 -4
- package/src/FiberMap.ts +38 -0
- package/src/FiberSet.ts +21 -0
- package/src/FileSystem.ts +64 -2
- package/src/Filter.ts +55 -0
- package/src/Formatter.ts +42 -1
- package/src/Function.ts +30 -0
- package/src/Graph.ts +317 -36
- package/src/HKT.ts +5 -0
- package/src/Hash.ts +15 -0
- package/src/HashMap.ts +91 -0
- package/src/HashRing.ts +18 -0
- package/src/HashSet.ts +53 -0
- package/src/Inspectable.ts +8 -0
- package/src/Iterable.ts +127 -0
- package/src/JsonPatch.ts +5 -0
- package/src/JsonPointer.ts +5 -0
- package/src/JsonSchema.ts +17 -0
- package/src/Latch.ts +14 -0
- package/src/Layer.ts +101 -1
- package/src/LayerMap.ts +7 -0
- package/src/LayerRef.ts +5 -0
- package/src/LogLevel.ts +20 -0
- package/src/Logger.ts +41 -5
- package/src/ManagedRuntime.ts +12 -1
- package/src/Match.ts +52 -0
- package/src/Metric.ts +69 -0
- package/src/MutableHashMap.ts +44 -0
- package/src/MutableHashSet.ts +17 -0
- package/src/MutableList.ts +21 -0
- package/src/MutableRef.ts +32 -0
- package/src/Newtype.ts +9 -0
- package/src/NonEmptyIterable.ts +4 -0
- package/src/Number.ts +61 -0
- package/src/Optic.ts +57 -0
- package/src/Option.ts +134 -0
- package/src/Order.ts +30 -0
- package/src/Ordering.ts +7 -0
- package/src/PartitionedSemaphore.ts +61 -22
- package/src/Path.ts +6 -0
- package/src/Pipeable.ts +7 -0
- package/src/PlatformError.ts +8 -0
- package/src/Pool.ts +20 -1
- package/src/Predicate.ts +85 -0
- package/src/PrimaryKey.ts +5 -0
- package/src/PubSub.ts +90 -9
- package/src/Pull.ts +20 -0
- package/src/Queue.ts +80 -10
- package/src/Random.ts +13 -0
- package/src/RcMap.ts +23 -0
- package/src/RcRef.ts +6 -0
- package/src/Record.ts +100 -0
- package/src/Redactable.ts +6 -0
- package/src/Redacted.ts +8 -0
- package/src/Reducer.ts +4 -0
- package/src/Ref.ts +42 -0
- package/src/References.ts +21 -0
- package/src/RegExp.ts +4 -0
- package/src/Request.ts +32 -0
- package/src/RequestResolver.ts +59 -10
- package/src/Resource.ts +7 -0
- package/src/Result.ts +93 -0
- package/src/Runtime.ts +10 -0
- package/src/Schedule.ts +61 -0
- package/src/Scheduler.ts +7 -0
- package/src/Schema.ts +1168 -9
- package/src/SchemaAST.ts +115 -1
- package/src/SchemaGetter.ts +80 -4
- package/src/SchemaIssue.ts +34 -0
- package/src/SchemaParser.ts +26 -0
- package/src/SchemaRepresentation.ts +148 -0
- package/src/SchemaTransformation.ts +53 -0
- package/src/Scope.ts +19 -0
- package/src/ScopedCache.ts +55 -3
- package/src/ScopedRef.ts +9 -0
- package/src/Semaphore.ts +26 -0
- package/src/Sink.ts +126 -2
- package/src/StandardSchema.ts +1 -0
- package/src/Stdio.ts +16 -2
- package/src/Stream.ts +633 -26
- package/src/String.ts +87 -0
- package/src/Struct.ts +46 -0
- package/src/SubscriptionRef.ts +65 -0
- package/src/Symbol.ts +2 -0
- package/src/SynchronizedRef.ts +63 -0
- package/src/Take.ts +3 -0
- package/src/Terminal.ts +8 -0
- package/src/Tracer.ts +23 -0
- package/src/Trie.ts +68 -0
- package/src/Tuple.ts +38 -0
- package/src/TxChunk.ts +52 -0
- package/src/TxDeferred.ts +15 -0
- package/src/TxHashMap.ts +97 -6
- package/src/TxHashSet.ts +83 -3
- package/src/TxPriorityQueue.ts +34 -2
- package/src/TxPubSub.ts +26 -0
- package/src/TxQueue.ts +51 -0
- package/src/TxReentrantLock.ts +53 -36
- package/src/TxRef.ts +14 -0
- package/src/TxSemaphore.ts +47 -31
- package/src/TxSubscriptionRef.ts +25 -0
- package/src/Types.ts +36 -0
- package/src/UndefinedOr.ts +15 -0
- package/src/Unify.ts +15 -0
- package/src/Utils.ts +4 -0
- package/src/Version.ts +38 -0
- package/src/ai/Chat.ts +1 -1
- package/src/ai/DecisionModel.ts +42 -1
- package/src/ai/LanguageModel.ts +16 -19
- package/src/ai/McpServer.ts +169 -58
- package/src/ai/Telemetry.ts +62 -58
- package/src/ai/internal/mcpProtocol/v2026_07_28.ts +5 -0
- package/src/ai/internal/mcpProtocol.ts +3 -0
- package/src/ai/internal/mcpRuntime.ts +86 -43
- package/src/ai/internal/mcpStatefulRuntime.ts +2 -0
- package/src/cli/CliOutput.ts +33 -16
- package/src/cli/Command.ts +4 -3
- package/src/cli/Completions.ts +9 -6
- package/src/cli/GlobalFlag.ts +19 -11
- package/src/cli/Prompt.ts +159 -149
- package/src/cli/internal/ansi.ts +26 -3
- package/src/cli/internal/completions/powershell.ts +322 -0
- package/src/cli/internal/completions/zsh.ts +4 -2
- package/src/cli/internal/wizard.ts +34 -26
- package/src/cluster/ClusterSchema.ts +32 -0
- package/src/cluster/ClusterWorkflowEngine.ts +13 -24
- package/src/cluster/K8sHttpClient.ts +12 -2
- package/src/cluster/MessageStorage.ts +45 -14
- package/src/cluster/Runners.ts +8 -2
- package/src/cluster/Sharding.ts +207 -49
- package/src/cluster/SqlMessageStorage.ts +118 -84
- package/src/cluster/SqlRunnerStorage.ts +224 -128
- package/src/cluster/internal/entityManager.ts +151 -55
- package/src/encoding/Base64.ts +4 -0
- package/src/encoding/Base64Url.ts +4 -0
- package/src/encoding/EncodingError.ts +5 -0
- package/src/encoding/Hex.ts +5 -0
- package/src/encoding/Toml.ts +2 -2
- package/src/encoding/Yaml.ts +8 -4
- package/src/encoding/index.ts +4 -0
- package/src/eventlog/SqlEventJournal.ts +18 -4
- package/src/eventlog/SqlEventLogServerUnencrypted.ts +282 -235
- package/src/http/FindMyWay/internal/router.ts +4 -7
- package/src/http/Headers.ts +8 -2
- package/src/http/HttpClient.ts +100 -29
- package/src/http/HttpClientResponse.ts +3 -1
- package/src/http/HttpEffect.ts +11 -2
- package/src/http/HttpMiddleware.ts +60 -45
- package/src/http/HttpServer.ts +1 -1
- package/src/http/HttpTraceContext.ts +8 -2
- package/src/http/internal/tracing.ts +52 -0
- package/src/http-api/HttpApiBuilder.ts +5 -1
- package/src/http-api/HttpApiClient.ts +13 -4
- package/src/http-api/HttpApiError.ts +8 -4
- package/src/http-api/HttpApiSecurity.ts +8 -8
- package/src/index.ts +156 -0
- package/src/internal/arbitrary/array.ts +3 -3
- package/src/internal/arbitrary/model.ts +37 -14
- package/src/internal/arbitrary/runner.ts +7 -7
- package/src/internal/arbitrary/schema.ts +4 -3
- package/src/internal/effect.ts +62 -58
- package/src/internal/schedule.ts +23 -17
- package/src/internal/schema/standardSchema.ts +2 -2
- package/src/internal/version.ts +2 -0
- package/src/net/AddressResolver.ts +222 -0
- package/src/net/Dns.ts +1035 -0
- package/src/net/Host.ts +472 -0
- package/src/net/IpInterface.ts +117 -7
- package/src/net/IpNetwork.ts +116 -17
- package/src/net/NetAddress.ts +611 -76
- package/src/net/index.ts +18 -0
- package/src/observability/OtlpExporter.ts +9 -6
- package/src/observability/OtlpLogger.ts +20 -21
- package/src/observability/OtlpMetrics.ts +46 -116
- package/src/observability/OtlpResource.ts +18 -27
- package/src/observability/OtlpTracer.ts +34 -40
- package/src/observability/PrometheusMetrics.ts +1 -0
- package/src/observability/internal/otlpProtobuf.ts +60 -0
- package/src/persistence/PersistedQueue.ts +146 -53
- package/src/reactivity/AsyncResult.ts +1 -1
- package/src/reactivity/Atom.ts +10 -6
- package/src/reactivity/AtomHttpApi.ts +2 -4
- package/src/reactivity/AtomRegistry.ts +7 -0
- package/src/rpc/RpcClient.ts +87 -41
- package/src/rpc/RpcServer.ts +85 -48
- package/src/rpc/internal/tracing.ts +22 -0
- package/src/schema/SchemaCompiler/runtime.ts +4 -1
- package/src/socket/DatagramSocket.ts +919 -0
- package/src/socket/Socket.ts +22 -2
- package/src/socket/index.ts +6 -0
- package/src/sql/Migrator.ts +21 -5
- package/src/sql/SqlClient.ts +43 -19
- package/src/sql/Statement.ts +59 -7
- package/src/testing/TestClock.ts +9 -0
- package/src/testing/TestConsole.ts +8 -0
- package/src/testing/TestCrypto.ts +94 -0
- package/src/testing/index.ts +9 -0
- package/src/workflow/DurableDeferred.ts +123 -48
- package/src/workflow/WorkflowEngine.ts +2 -1
|
@@ -338,13 +338,6 @@ class RouterImpl<A> implements Router.Router<A> {
|
|
|
338
338
|
path = path.replace(FULL_PATH_REGEXP, "/")
|
|
339
339
|
}
|
|
340
340
|
|
|
341
|
-
// This must be run before sanitizeUrl as the resulting function
|
|
342
|
-
// .sliceParameter must be constructed with same URL string used
|
|
343
|
-
// throughout the rest of this function.
|
|
344
|
-
if (this.options.ignoreDuplicateSlashes) {
|
|
345
|
-
path = removeDuplicateSlashes(path)
|
|
346
|
-
}
|
|
347
|
-
|
|
348
341
|
let sanitizedUrl
|
|
349
342
|
try {
|
|
350
343
|
sanitizedUrl = safeDecodeURI(path)
|
|
@@ -355,6 +348,10 @@ class RouterImpl<A> implements Router.Router<A> {
|
|
|
355
348
|
return undefined
|
|
356
349
|
}
|
|
357
350
|
|
|
351
|
+
if (this.options.ignoreDuplicateSlashes) {
|
|
352
|
+
path = removeDuplicateSlashes(path)
|
|
353
|
+
}
|
|
354
|
+
|
|
358
355
|
if (this.options.ignoreTrailingSlash) {
|
|
359
356
|
path = trimLastSlash(path)
|
|
360
357
|
}
|
package/src/http/Headers.ts
CHANGED
|
@@ -749,7 +749,9 @@ export const isRedactedName = (
|
|
|
749
749
|
*
|
|
750
750
|
* **Details**
|
|
751
751
|
*
|
|
752
|
-
* Defaults include `authorization`, `cookie`, `set-cookie`,
|
|
752
|
+
* Defaults include `authorization`, `cookie`, `set-cookie`, `x-api-key` and
|
|
753
|
+
* `AWSAccessKeyId`, `Signature`, `sig` and `X-Goog-Signature`. Names match
|
|
754
|
+
* case-insensitively, and providing a new list replaces the defaults.
|
|
753
755
|
*
|
|
754
756
|
* @stability unstable
|
|
755
757
|
* @category services
|
|
@@ -762,6 +764,10 @@ export const CurrentRedactedNames = Context.Reference<
|
|
|
762
764
|
"authorization",
|
|
763
765
|
"cookie",
|
|
764
766
|
"set-cookie",
|
|
765
|
-
"x-api-key"
|
|
767
|
+
"x-api-key",
|
|
768
|
+
"AWSAccessKeyId",
|
|
769
|
+
"Signature",
|
|
770
|
+
"sig",
|
|
771
|
+
"X-Goog-Signature"
|
|
766
772
|
]
|
|
767
773
|
})
|
package/src/http/HttpClient.ts
CHANGED
|
@@ -18,15 +18,18 @@ import { Clock } from "../Clock.ts"
|
|
|
18
18
|
import * as Context from "../Context.ts"
|
|
19
19
|
import * as Duration from "../Duration.ts"
|
|
20
20
|
import * as Effect from "../Effect.ts"
|
|
21
|
+
import * as Exit from "../Exit.ts"
|
|
21
22
|
import * as Fiber from "../Fiber.ts"
|
|
22
23
|
import { constant, constFalse, constTrue, dual, flow, identity } from "../Function.ts"
|
|
23
24
|
import * as Inspectable from "../Inspectable.ts"
|
|
25
|
+
import { getStackTraceLimit, setStackTraceLimit } from "../internal/stackTraceLimit.ts"
|
|
24
26
|
import * as Layer from "../Layer.ts"
|
|
25
27
|
import * as Option from "../Option.ts"
|
|
26
28
|
import type * as RateLimiter from "../persistence/RateLimiter.ts"
|
|
27
29
|
import { type Pipeable, pipeArguments } from "../Pipeable.ts"
|
|
28
30
|
import * as Predicate from "../Predicate.ts"
|
|
29
31
|
import * as Ref from "../Ref.ts"
|
|
32
|
+
import * as References from "../References.ts"
|
|
30
33
|
import * as Result from "../Result.ts"
|
|
31
34
|
import * as Schedule from "../Schedule.ts"
|
|
32
35
|
import type * as Scope from "../Scope.ts"
|
|
@@ -42,6 +45,7 @@ import * as HttpClientResponse from "./HttpClientResponse.ts"
|
|
|
42
45
|
import * as HttpIncomingMessage from "./HttpIncomingMessage.ts"
|
|
43
46
|
import * as HttpMethod from "./HttpMethod.ts"
|
|
44
47
|
import * as TraceContext from "./HttpTraceContext.ts"
|
|
48
|
+
import * as tracing from "./internal/tracing.ts"
|
|
45
49
|
import * as Url from "./Url.ts"
|
|
46
50
|
|
|
47
51
|
const TypeId = "~effect/http/HttpClient"
|
|
@@ -900,26 +904,10 @@ export const make = (
|
|
|
900
904
|
{ kind: "client" },
|
|
901
905
|
(span) => {
|
|
902
906
|
span.attribute("http.request.method", request.method)
|
|
903
|
-
span.attribute("server.address", url.origin)
|
|
904
|
-
if (url.port !== "") {
|
|
905
|
-
span.attribute("server.port", +url.port)
|
|
906
|
-
}
|
|
907
|
-
span.attribute("url.full", url.toString())
|
|
908
|
-
span.attribute("url.path", url.pathname)
|
|
909
|
-
span.attribute("url.scheme", url.protocol.slice(0, -1))
|
|
910
|
-
const query = url.search.slice(1)
|
|
911
|
-
if (query !== "") {
|
|
912
|
-
span.attribute("url.query", query)
|
|
913
|
-
}
|
|
914
907
|
const redactedHeaderNames = fiber.getRef(Headers.CurrentRedactedNames)
|
|
908
|
+
tracing.addUrlAttributes(span, url)
|
|
915
909
|
const headerFilter = fiber.getRef(TracerHeaderFilter)
|
|
916
|
-
|
|
917
|
-
if (!headerFilter(name, "request")) continue
|
|
918
|
-
span.attribute(
|
|
919
|
-
`http.request.header.${name}`,
|
|
920
|
-
Headers.isRedactedName(name, redactedHeaderNames) ? "<redacted>" : request.headers[name]
|
|
921
|
-
)
|
|
922
|
-
}
|
|
910
|
+
tracing.addHeaderAttributes(span, "request", request.headers, headerFilter, redactedHeaderNames)
|
|
923
911
|
request = fiber.getRef(TracerPropagationEnabled)
|
|
924
912
|
? HttpClientRequest.setHeaders(request, TraceContext.toHeaders(span))
|
|
925
913
|
: request
|
|
@@ -929,12 +917,12 @@ export const make = (
|
|
|
929
917
|
Effect.matchCauseEffect({
|
|
930
918
|
onSuccess: (response) => {
|
|
931
919
|
span.attribute("http.response.status_code", response.status)
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
)
|
|
920
|
+
tracing.addHeaderAttributes(span, "response", response.headers, headerFilter, redactedHeaderNames)
|
|
921
|
+
// OpenTelemetry marks client spans as failed for 4xx and
|
|
922
|
+
// 5xx responses, while the response itself still succeeds.
|
|
923
|
+
if (response.status >= 400 && response.status < 600) {
|
|
924
|
+
span.attribute("error.type", String(response.status))
|
|
925
|
+
endSpanWithStatusError(fiber, span, request, response)
|
|
938
926
|
}
|
|
939
927
|
|
|
940
928
|
if (scopedController) return Effect.succeed(response)
|
|
@@ -954,6 +942,26 @@ export const make = (
|
|
|
954
942
|
)
|
|
955
943
|
})), Effect.succeed as HttpClient.Preprocess<never, never>)
|
|
956
944
|
|
|
945
|
+
const endSpanWithStatusError = (
|
|
946
|
+
fiber: Fiber.Fiber<unknown, unknown>,
|
|
947
|
+
span: Tracer.Span,
|
|
948
|
+
request: HttpClientRequest.HttpClientRequest,
|
|
949
|
+
response: HttpClientResponse.HttpClientResponse
|
|
950
|
+
): void => {
|
|
951
|
+
const stackTraceLimit = getStackTraceLimit()
|
|
952
|
+
setStackTraceLimit(0)
|
|
953
|
+
let exit: Exit.Exit<never, Error.HttpClientError>
|
|
954
|
+
try {
|
|
955
|
+
exit = Exit.fail(new Error.HttpClientError({ reason: new Error.StatusCodeError({ request, response }) }))
|
|
956
|
+
} finally {
|
|
957
|
+
setStackTraceLimit(stackTraceLimit)
|
|
958
|
+
}
|
|
959
|
+
span.end(
|
|
960
|
+
fiber.getRef(References.TracerTimingEnabled) ? fiber.getRef(Clock).currentTimeNanosUnsafe() : BigInt(0),
|
|
961
|
+
exit
|
|
962
|
+
)
|
|
963
|
+
}
|
|
964
|
+
|
|
957
965
|
/**
|
|
958
966
|
* Appends a transformation of the request object before sending it.
|
|
959
967
|
*
|
|
@@ -1458,6 +1466,8 @@ export declare namespace WithRateLimiter {
|
|
|
1458
1466
|
* It can update limits by inspecting common rate limit response headers and
|
|
1459
1467
|
* automatically retries HTTP `429` responses (or `HttpClientError` values
|
|
1460
1468
|
* wrapping a `429` response) by forcing the retry back through the limiter.
|
|
1469
|
+
* When a response reports the remaining budget, requests wait for the
|
|
1470
|
+
* reported reset once that budget is exhausted.
|
|
1461
1471
|
*
|
|
1462
1472
|
* **Gotchas**
|
|
1463
1473
|
*
|
|
@@ -1478,6 +1488,8 @@ export const withRateLimiter: {
|
|
|
1478
1488
|
* It can update limits by inspecting common rate limit response headers and
|
|
1479
1489
|
* automatically retries HTTP `429` responses (or `HttpClientError` values
|
|
1480
1490
|
* wrapping a `429` response) by forcing the retry back through the limiter.
|
|
1491
|
+
* When a response reports the remaining budget, requests wait for the
|
|
1492
|
+
* reported reset once that budget is exhausted.
|
|
1481
1493
|
*
|
|
1482
1494
|
* **Gotchas**
|
|
1483
1495
|
*
|
|
@@ -1500,6 +1512,8 @@ export const withRateLimiter: {
|
|
|
1500
1512
|
* It can update limits by inspecting common rate limit response headers and
|
|
1501
1513
|
* automatically retries HTTP `429` responses (or `HttpClientError` values
|
|
1502
1514
|
* wrapping a `429` response) by forcing the retry back through the limiter.
|
|
1515
|
+
* When a response reports the remaining budget, requests wait for the
|
|
1516
|
+
* reported reset once that budget is exhausted.
|
|
1503
1517
|
*
|
|
1504
1518
|
* **Gotchas**
|
|
1505
1519
|
*
|
|
@@ -1543,14 +1557,36 @@ export const withRateLimiter: {
|
|
|
1543
1557
|
return initialState
|
|
1544
1558
|
}
|
|
1545
1559
|
|
|
1560
|
+
const budgets = new Map<string, RateLimitBudget>()
|
|
1561
|
+
const getBudget = (key: string): RateLimitBudget => {
|
|
1562
|
+
let budget = budgets.get(key)
|
|
1563
|
+
if (budget === undefined) {
|
|
1564
|
+
budget = { sent: 0, observed: 0, remaining: 0, resetAt: 0 }
|
|
1565
|
+
budgets.set(key, budget)
|
|
1566
|
+
}
|
|
1567
|
+
return budget
|
|
1568
|
+
}
|
|
1569
|
+
|
|
1546
1570
|
const onResponse = options.disableResponseInspection
|
|
1547
1571
|
? undefined
|
|
1548
|
-
: (clock: Clock, key: string, headers: Headers.Headers, tokens: number) => {
|
|
1572
|
+
: (clock: Clock, key: string, headers: Headers.Headers, tokens: number, sent: number) => {
|
|
1549
1573
|
const current = getState(key)
|
|
1550
1574
|
const next = parseRateLimiterState(current, clock, headers, tokens, headerNames)
|
|
1551
1575
|
if (next.limit !== current.limit || !Duration.equals(next.window, current.window)) {
|
|
1552
1576
|
states.set(key, next)
|
|
1553
1577
|
}
|
|
1578
|
+
const remaining = parseRateLimitRemaining(headers, headerNames)
|
|
1579
|
+
const budget = getBudget(key)
|
|
1580
|
+
// responses to earlier requests carry stale counts
|
|
1581
|
+
if (remaining === undefined || sent <= budget.observed) {
|
|
1582
|
+
return
|
|
1583
|
+
}
|
|
1584
|
+
const resetAfter = parseRateLimitWindow(clock, headers, headerNames)
|
|
1585
|
+
budget.observed = sent
|
|
1586
|
+
budget.remaining = remaining
|
|
1587
|
+
if (resetAfter !== undefined) {
|
|
1588
|
+
budget.resetAt = clock.currentTimeMillisUnsafe() + Duration.toMillis(resetAfter)
|
|
1589
|
+
}
|
|
1554
1590
|
}
|
|
1555
1591
|
|
|
1556
1592
|
return transform(self, function loop(effect, request, retries = 0): Effect.Effect<
|
|
@@ -1562,6 +1598,15 @@ export const withRateLimiter: {
|
|
|
1562
1598
|
const clock = fiber.getRef(Clock)
|
|
1563
1599
|
const key = resolveKey(request)
|
|
1564
1600
|
const tokens = Math.max(resolveTokens(request), 1)
|
|
1601
|
+
const budget = getBudget(key)
|
|
1602
|
+
const now = clock.currentTimeMillisUnsafe()
|
|
1603
|
+
// requests admitted after the observed one are not reflected in its count
|
|
1604
|
+
if (budget.resetAt > now && budget.remaining - (budget.sent - budget.observed) < tokens) {
|
|
1605
|
+
return Effect.flatMap(Effect.sleep(budget.resetAt - now), () => loop(effect, request, retries))
|
|
1606
|
+
}
|
|
1607
|
+
// counted at admission, so requests already admitted are sent even if a
|
|
1608
|
+
// later response exhausts the budget
|
|
1609
|
+
const sent = budget.sent += tokens
|
|
1565
1610
|
const current = getState(key)
|
|
1566
1611
|
const canRetry = options.times === undefined || retries < options.times
|
|
1567
1612
|
function retry(retryAfter: Duration.Duration | undefined) {
|
|
@@ -1573,7 +1618,7 @@ export const withRateLimiter: {
|
|
|
1573
1618
|
response: HttpClientResponse.HttpClientResponse,
|
|
1574
1619
|
adaptive: RateLimiter.AdaptiveConsumeResult | undefined
|
|
1575
1620
|
) => {
|
|
1576
|
-
onResponse?.(clock, key, response.headers, tokens)
|
|
1621
|
+
onResponse?.(clock, key, response.headers, tokens, sent)
|
|
1577
1622
|
if (options.disableResponseInspection || response.status !== 429) {
|
|
1578
1623
|
return Effect.succeed</**
|
|
1579
1624
|
* Applies request rate limiting using the `RateLimiter` service.
|
|
@@ -1583,6 +1628,8 @@ export const withRateLimiter: {
|
|
|
1583
1628
|
* It can update limits by inspecting common rate limit response headers and
|
|
1584
1629
|
* automatically retries HTTP `429` responses (or `HttpClientError` values
|
|
1585
1630
|
* wrapping a `429` response) by forcing the retry back through the limiter.
|
|
1631
|
+
* When a response reports the remaining budget, requests wait for the
|
|
1632
|
+
* reported reset once that budget is exhausted.
|
|
1586
1633
|
*
|
|
1587
1634
|
* **Gotchas**
|
|
1588
1635
|
*
|
|
@@ -1606,6 +1653,8 @@ export const withRateLimiter: {
|
|
|
1606
1653
|
* It can update limits by inspecting common rate limit response headers and
|
|
1607
1654
|
* automatically retries HTTP `429` responses (or `HttpClientError` values
|
|
1608
1655
|
* wrapping a `429` response) by forcing the retry back through the limiter.
|
|
1656
|
+
* When a response reports the remaining budget, requests wait for the
|
|
1657
|
+
* reported reset once that budget is exhausted.
|
|
1609
1658
|
*
|
|
1610
1659
|
* **Gotchas**
|
|
1611
1660
|
*
|
|
@@ -1629,6 +1678,8 @@ export const withRateLimiter: {
|
|
|
1629
1678
|
* It can update limits by inspecting common rate limit response headers and
|
|
1630
1679
|
* automatically retries HTTP `429` responses (or `HttpClientError` values
|
|
1631
1680
|
* wrapping a `429` response) by forcing the retry back through the limiter.
|
|
1681
|
+
* When a response reports the remaining budget, requests wait for the
|
|
1682
|
+
* reported reset once that budget is exhausted.
|
|
1632
1683
|
*
|
|
1633
1684
|
* **Gotchas**
|
|
1634
1685
|
*
|
|
@@ -1748,6 +1799,17 @@ interface RateLimiterState {
|
|
|
1748
1799
|
readonly initial: boolean
|
|
1749
1800
|
}
|
|
1750
1801
|
|
|
1802
|
+
interface RateLimitBudget {
|
|
1803
|
+
/** Total tokens admitted for the key. */
|
|
1804
|
+
sent: number
|
|
1805
|
+
/** The `sent` total of the request whose remaining count was last applied. */
|
|
1806
|
+
observed: number
|
|
1807
|
+
/** The remaining count reported in response to the `observed` request. */
|
|
1808
|
+
remaining: number
|
|
1809
|
+
/** When the server budget resets, in epoch milliseconds. */
|
|
1810
|
+
resetAt: number
|
|
1811
|
+
}
|
|
1812
|
+
|
|
1751
1813
|
const parseRateLimiterState = (
|
|
1752
1814
|
state: RateLimiterState,
|
|
1753
1815
|
clock: Clock,
|
|
@@ -2153,6 +2215,11 @@ export const TracerDisabledWhen = Context.Reference<
|
|
|
2153
2215
|
/**
|
|
2154
2216
|
* Context reference for filtering request and response headers added to client spans.
|
|
2155
2217
|
*
|
|
2218
|
+
* **Details**
|
|
2219
|
+
*
|
|
2220
|
+
* Header capture is opt-in: the default filter records no headers. Captured
|
|
2221
|
+
* headers listed in `Headers.CurrentRedactedNames` are recorded as `<redacted>`.
|
|
2222
|
+
*
|
|
2156
2223
|
* @stability unstable
|
|
2157
2224
|
* @category services
|
|
2158
2225
|
* @since 4.0.0
|
|
@@ -2160,7 +2227,7 @@ export const TracerDisabledWhen = Context.Reference<
|
|
|
2160
2227
|
export const TracerHeaderFilter = Context.Reference<
|
|
2161
2228
|
(headerName: string, phase: "request" | "response") => boolean
|
|
2162
2229
|
>("effect/http/HttpClient/TracerHeaderFilter", {
|
|
2163
|
-
defaultValue: () =>
|
|
2230
|
+
defaultValue: () => constFalse
|
|
2164
2231
|
})
|
|
2165
2232
|
|
|
2166
2233
|
/**
|
|
@@ -2177,6 +2244,10 @@ export const TracerPropagationEnabled = Context.Reference<boolean>("effect/http/
|
|
|
2177
2244
|
/**
|
|
2178
2245
|
* Context reference for generating the span name used for outgoing client request spans.
|
|
2179
2246
|
*
|
|
2247
|
+
* **Details**
|
|
2248
|
+
*
|
|
2249
|
+
* Defaults to the request method unchanged.
|
|
2250
|
+
*
|
|
2180
2251
|
* @stability unstable
|
|
2181
2252
|
* @category services
|
|
2182
2253
|
* @since 4.0.0
|
|
@@ -2184,7 +2255,7 @@ export const TracerPropagationEnabled = Context.Reference<boolean>("effect/http/
|
|
|
2184
2255
|
export const SpanNameGenerator = Context.Reference<
|
|
2185
2256
|
(request: HttpClientRequest.HttpClientRequest) => string
|
|
2186
2257
|
>("effect/http/HttpClient/SpanNameGenerator", {
|
|
2187
|
-
defaultValue: () => (request) =>
|
|
2258
|
+
defaultValue: () => (request) => request.method
|
|
2188
2259
|
})
|
|
2189
2260
|
|
|
2190
2261
|
/**
|
|
@@ -2226,7 +2297,7 @@ const responseRegistry = (() => {
|
|
|
2226
2297
|
}
|
|
2227
2298
|
}
|
|
2228
2299
|
|
|
2229
|
-
const timers = new
|
|
2300
|
+
const timers = new WeakMap<HttpClientResponse.HttpClientResponse, any>()
|
|
2230
2301
|
return {
|
|
2231
2302
|
register(response: HttpClientResponse.HttpClientResponse, controller: AbortController) {
|
|
2232
2303
|
timers.set(response, setTimeout(() => controller.abort(), 5000))
|
|
@@ -341,7 +341,9 @@ class WebHttpClientResponse extends Inspectable.Class implements HttpClientRespo
|
|
|
341
341
|
if (this.cachedCookies) {
|
|
342
342
|
return this.cachedCookies
|
|
343
343
|
}
|
|
344
|
-
|
|
344
|
+
// React Native's Headers does not implement getSetCookie, and it never
|
|
345
|
+
// exposes Set-Cookie to JavaScript anyway.
|
|
346
|
+
return this.cachedCookies = Cookies.fromSetCookie(this.source.headers.getSetCookie?.() ?? [])
|
|
345
347
|
}
|
|
346
348
|
|
|
347
349
|
get remoteAddress(): Option.Option<string> {
|
package/src/http/HttpEffect.ts
CHANGED
|
@@ -33,6 +33,9 @@ import * as preResponseHandler from "./internal/preResponseHandler.ts"
|
|
|
33
33
|
/**
|
|
34
34
|
* Runs an HTTP server effect, sends the produced response with the supplied handler, and converts failures into HTTP responses.
|
|
35
35
|
* On handler failure, the request scope closes with the original cause.
|
|
36
|
+
* If the send handler returns an `HttpServerResponse`, such as the `101`
|
|
37
|
+
* response of an upgraded request, middleware observes it in place of the
|
|
38
|
+
* handler's response.
|
|
36
39
|
*
|
|
37
40
|
* @stability unstable
|
|
38
41
|
* @category combinators
|
|
@@ -81,11 +84,17 @@ export const toHandled = <E, R, EH, RH>(
|
|
|
81
84
|
const handler = preResponseHandler.requestPreResponseHandlers.get(request.source)
|
|
82
85
|
if (handler === undefined) {
|
|
83
86
|
;(request as any)[handledSymbol] = true
|
|
84
|
-
return Effect.mapEager(
|
|
87
|
+
return Effect.mapEager(
|
|
88
|
+
handleResponse(request, response),
|
|
89
|
+
(sent) => Response.isHttpServerResponse(sent) ? sent : response
|
|
90
|
+
)
|
|
85
91
|
}
|
|
86
92
|
return Effect.flatMapEager(handler(request, response), (sentResponse) => {
|
|
87
93
|
;(request as any)[handledSymbol] = true
|
|
88
|
-
return Effect.mapEager(
|
|
94
|
+
return Effect.mapEager(
|
|
95
|
+
handleResponse(request, sentResponse),
|
|
96
|
+
(sent) => Response.isHttpServerResponse(sent) ? sent : response
|
|
97
|
+
)
|
|
89
98
|
})
|
|
90
99
|
}
|
|
91
100
|
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* @stability unstable
|
|
12
12
|
* @since 4.0.0
|
|
13
13
|
*/
|
|
14
|
+
import * as Cause from "../Cause.ts"
|
|
14
15
|
import { Clock } from "../Clock.ts"
|
|
15
16
|
import * as Context from "../Context.ts"
|
|
16
17
|
import * as Effect from "../Effect.ts"
|
|
@@ -18,6 +19,7 @@ import * as Exit from "../Exit.ts"
|
|
|
18
19
|
import type * as Fiber from "../Fiber.ts"
|
|
19
20
|
import { constant, constFalse } from "../Function.ts"
|
|
20
21
|
import * as internalEffect from "../internal/effect.ts"
|
|
22
|
+
import { getStackTraceLimit, setStackTraceLimit } from "../internal/stackTraceLimit.ts"
|
|
21
23
|
import * as Layer from "../Layer.ts"
|
|
22
24
|
import * as Option from "../Option.ts"
|
|
23
25
|
import type { Predicate } from "../Predicate.ts"
|
|
@@ -26,7 +28,7 @@ import { nativeTracer, ParentSpan, Tracer } from "../Tracer.ts"
|
|
|
26
28
|
import * as Headers from "./Headers.ts"
|
|
27
29
|
import type { CompressionAlgorithm } from "./HttpPlatform.ts"
|
|
28
30
|
import { HttpPlatform } from "./HttpPlatform.ts"
|
|
29
|
-
import { causeResponseStripped, ClientAbort } from "./HttpServerError.ts"
|
|
31
|
+
import { causeResponseStripped, ClientAbort, HttpServerError, ResponseError } from "./HttpServerError.ts"
|
|
30
32
|
import { HttpServerRequest } from "./HttpServerRequest.ts"
|
|
31
33
|
import * as Request from "./HttpServerRequest.ts"
|
|
32
34
|
import * as Response from "./HttpServerResponse.ts"
|
|
@@ -35,6 +37,7 @@ import * as TraceContext from "./HttpTraceContext.ts"
|
|
|
35
37
|
import * as compressionInternal from "./internal/compression.ts"
|
|
36
38
|
import * as bodyInternal from "./internal/httpBody.ts"
|
|
37
39
|
import { appendPreResponseHandlerUnsafe } from "./internal/preResponseHandler.ts"
|
|
40
|
+
import * as tracing from "./internal/tracing.ts"
|
|
38
41
|
|
|
39
42
|
/**
|
|
40
43
|
* Middleware that transforms an HTTP server app effect into another HTTP server app effect.
|
|
@@ -130,15 +133,37 @@ export const layerTracerDisabledForUrls = (
|
|
|
130
133
|
/**
|
|
131
134
|
* Context reference for generating server span names from HTTP server requests.
|
|
132
135
|
*
|
|
136
|
+
* **Details**
|
|
137
|
+
*
|
|
138
|
+
* Defaults to the request method unchanged.
|
|
139
|
+
*
|
|
133
140
|
* @stability unstable
|
|
134
141
|
* @category services
|
|
135
142
|
* @since 4.0.0
|
|
136
143
|
*/
|
|
137
144
|
export const SpanNameGenerator = Context.Reference<(request: HttpServerRequest) => string>(
|
|
138
145
|
"@effect/platform/HttpMiddleware/SpanNameGenerator",
|
|
139
|
-
{ defaultValue: () => (request) =>
|
|
146
|
+
{ defaultValue: () => (request) => request.method }
|
|
140
147
|
)
|
|
141
148
|
|
|
149
|
+
/**
|
|
150
|
+
* Context reference for filtering request and response headers added to server spans.
|
|
151
|
+
*
|
|
152
|
+
* **Details**
|
|
153
|
+
*
|
|
154
|
+
* Header capture is opt-in: the default filter records no headers. Captured
|
|
155
|
+
* headers listed in `Headers.CurrentRedactedNames` are recorded as `<redacted>`.
|
|
156
|
+
*
|
|
157
|
+
* @stability unstable
|
|
158
|
+
* @category services
|
|
159
|
+
* @since 4.0.0
|
|
160
|
+
*/
|
|
161
|
+
export const TracerHeaderFilter = Context.Reference<
|
|
162
|
+
(headerName: string, phase: "request" | "response") => boolean
|
|
163
|
+
>("effect/http/HttpMiddleware/TracerHeaderFilter", {
|
|
164
|
+
defaultValue: () => constFalse
|
|
165
|
+
})
|
|
166
|
+
|
|
142
167
|
/**
|
|
143
168
|
* Middleware that logs sent HTTP responses with request method, request URL, and response status annotations.
|
|
144
169
|
*
|
|
@@ -195,6 +220,23 @@ export const isTracerDisabledUnsafe = (
|
|
|
195
220
|
request: HttpServerRequest
|
|
196
221
|
): boolean => !fiber.cache.tracerEnabled || fiber.getRef(TracerDisabledWhen)(request)
|
|
197
222
|
|
|
223
|
+
// OpenTelemetry requires failed server spans for 5xx responses.
|
|
224
|
+
const responseSpanExit = (
|
|
225
|
+
request: HttpServerRequest,
|
|
226
|
+
response: HttpServerResponse
|
|
227
|
+
): Exit.Exit<HttpServerResponse, HttpServerError> => {
|
|
228
|
+
if (!(response.status >= 500 && response.status < 600)) {
|
|
229
|
+
return Exit.succeed(response)
|
|
230
|
+
}
|
|
231
|
+
const stackTraceLimit = getStackTraceLimit()
|
|
232
|
+
setStackTraceLimit(0)
|
|
233
|
+
try {
|
|
234
|
+
return Exit.fail(new HttpServerError({ reason: new ResponseError({ request, response }) }))
|
|
235
|
+
} finally {
|
|
236
|
+
setStackTraceLimit(stackTraceLimit)
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
198
240
|
/**
|
|
199
241
|
* Middleware that creates a server trace span for each request and records request and response HTTP attributes.
|
|
200
242
|
*
|
|
@@ -221,71 +263,44 @@ export const tracer: <E, R>(
|
|
|
221
263
|
fiber.setContext(prevServices)
|
|
222
264
|
const endTime = fiber.getRef(Clock).currentTimeNanosUnsafe()
|
|
223
265
|
if (Exit.isSuccess(exit) && (!span.sampled || fiber.getRef(Tracer) === nativeTracer)) {
|
|
224
|
-
span.end(endTime, exit)
|
|
266
|
+
span.end(endTime, responseSpanExit(request, exit.value))
|
|
225
267
|
return undefined
|
|
226
268
|
}
|
|
227
269
|
const redactedHeaderNames = fiber.getRef(Headers.CurrentRedactedNames)
|
|
270
|
+
const headerFilter = fiber.getRef(TracerHeaderFilter)
|
|
228
271
|
fiber.currentDispatcher.scheduleTask(() => {
|
|
229
272
|
let response: HttpServerResponse
|
|
230
|
-
let spanExit
|
|
273
|
+
let spanExit: Exit.Exit<HttpServerResponse, unknown>
|
|
231
274
|
if (Exit.isFailure(exit)) {
|
|
232
275
|
const [failureResponse, cause] = causeResponseStripped(exit.cause)
|
|
233
276
|
response = failureResponse
|
|
234
|
-
|
|
277
|
+
// OpenTelemetry only treats 5xx responses as server span errors; interrupts still fail the span.
|
|
278
|
+
spanExit = Option.isSome(cause) && (response.status >= 500 || Cause.hasInterrupts(cause.value))
|
|
279
|
+
? Exit.failCause(cause.value)
|
|
280
|
+
: responseSpanExit(request, response)
|
|
235
281
|
} else {
|
|
236
282
|
response = exit.value
|
|
283
|
+
spanExit = responseSpanExit(request, response)
|
|
237
284
|
}
|
|
238
285
|
if (span.sampled) {
|
|
239
286
|
span.attribute("http.request.method", request.method)
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
if (queryIndex === -1) {
|
|
246
|
-
span.attribute("url.path", request.url)
|
|
247
|
-
} else {
|
|
248
|
-
span.attribute("url.path", request.url.slice(0, queryIndex))
|
|
249
|
-
if (queryIndex < request.url.length - 1) {
|
|
250
|
-
span.attribute("url.query", request.url.slice(queryIndex + 1))
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
span.attribute("url.scheme", protocol)
|
|
254
|
-
} else {
|
|
255
|
-
const url = Request.toURL(request)
|
|
256
|
-
if (Option.isSome(url)) {
|
|
257
|
-
if (url.value.username !== "" || url.value.password !== "") {
|
|
258
|
-
url.value.username = "REDACTED"
|
|
259
|
-
url.value.password = "REDACTED"
|
|
260
|
-
}
|
|
261
|
-
span.attribute("url.full", url.value.toString())
|
|
262
|
-
span.attribute("url.path", url.value.pathname)
|
|
263
|
-
const query = url.value.search.slice(1)
|
|
264
|
-
if (query !== "") {
|
|
265
|
-
span.attribute("url.query", query)
|
|
266
|
-
}
|
|
267
|
-
span.attribute("url.scheme", url.value.protocol.slice(0, -1))
|
|
287
|
+
const url = Request.toURL(request)
|
|
288
|
+
if (Option.isSome(url)) {
|
|
289
|
+
if (!request.url.startsWith("/") && (url.value.username !== "" || url.value.password !== "")) {
|
|
290
|
+
url.value.username = "REDACTED"
|
|
291
|
+
url.value.password = "REDACTED"
|
|
268
292
|
}
|
|
293
|
+
tracing.addUrlAttributes(span, url.value)
|
|
269
294
|
}
|
|
270
295
|
if (request.headers["user-agent"] !== undefined) {
|
|
271
296
|
span.attribute("user_agent.original", request.headers["user-agent"])
|
|
272
297
|
}
|
|
273
|
-
|
|
274
|
-
span.attribute(
|
|
275
|
-
`http.request.header.${name}`,
|
|
276
|
-
Headers.isRedactedName(name, redactedHeaderNames) ? "<redacted>" : request.headers[name]
|
|
277
|
-
)
|
|
278
|
-
}
|
|
298
|
+
tracing.addHeaderAttributes(span, "request", request.headers, headerFilter, redactedHeaderNames)
|
|
279
299
|
if (Option.isSome(request.remoteAddress)) {
|
|
280
300
|
span.attribute("client.address", request.remoteAddress.value)
|
|
281
301
|
}
|
|
282
302
|
span.attribute("http.response.status_code", response.status)
|
|
283
|
-
|
|
284
|
-
span.attribute(
|
|
285
|
-
`http.response.header.${name}`,
|
|
286
|
-
Headers.isRedactedName(name, redactedHeaderNames) ? "<redacted>" : response.headers[name]
|
|
287
|
-
)
|
|
288
|
-
}
|
|
303
|
+
tracing.addHeaderAttributes(span, "response", response.headers, headerFilter, redactedHeaderNames)
|
|
289
304
|
}
|
|
290
305
|
span.end(endTime, spanExit)
|
|
291
306
|
}, 0)
|
package/src/http/HttpServer.ts
CHANGED
|
@@ -93,7 +93,7 @@ export const b3: FromHeaders = (headers) => {
|
|
|
93
93
|
return Option.none()
|
|
94
94
|
}
|
|
95
95
|
const parts = headers["b3"].split("-")
|
|
96
|
-
if (parts.length < 2) {
|
|
96
|
+
if (parts.length < 2 || isB3Ids(parts[0], parts[1]) === false) {
|
|
97
97
|
return Option.none()
|
|
98
98
|
}
|
|
99
99
|
return Option.some(Tracer.externalSpan({
|
|
@@ -116,7 +116,10 @@ export const b3: FromHeaders = (headers) => {
|
|
|
116
116
|
* @since 4.0.0
|
|
117
117
|
*/
|
|
118
118
|
export const xb3: FromHeaders = (headers) => {
|
|
119
|
-
if (
|
|
119
|
+
if (
|
|
120
|
+
!(headers["x-b3-traceid"]) || !(headers["x-b3-spanid"]) ||
|
|
121
|
+
isB3Ids(headers["x-b3-traceid"], headers["x-b3-spanid"]) === false
|
|
122
|
+
) {
|
|
120
123
|
return Option.none()
|
|
121
124
|
}
|
|
122
125
|
return Option.some(Tracer.externalSpan({
|
|
@@ -130,6 +133,9 @@ export const xb3: FromHeaders = (headers) => {
|
|
|
130
133
|
const w3cTraceId = /^[0-9a-f]{32}$/i
|
|
131
134
|
const w3cSpanId = /^[0-9a-f]{16}$/i
|
|
132
135
|
|
|
136
|
+
const b3TraceId = /^(?:[0-9a-f]{16}|[0-9a-f]{32})$/i
|
|
137
|
+
const isB3Ids = (traceId: string, spanId: string): boolean => b3TraceId.test(traceId) && w3cSpanId.test(spanId)
|
|
138
|
+
|
|
133
139
|
/**
|
|
134
140
|
* Decodes an external span safely from the W3C `traceparent` header.
|
|
135
141
|
*
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type * as Tracer from "../../Tracer.ts"
|
|
2
|
+
import * as Headers from "../Headers.ts"
|
|
3
|
+
|
|
4
|
+
const defaultPorts: Record<string, number> = {
|
|
5
|
+
"http:": 80,
|
|
6
|
+
"https:": 443,
|
|
7
|
+
"ws:": 80,
|
|
8
|
+
"wss:": 443
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Records the `url.*` and `server.*` attributes for a request URL.
|
|
13
|
+
*
|
|
14
|
+
* @internal
|
|
15
|
+
*/
|
|
16
|
+
export const addUrlAttributes = (
|
|
17
|
+
span: Tracer.Span,
|
|
18
|
+
url: URL
|
|
19
|
+
): void => {
|
|
20
|
+
const query = url.search.slice(1)
|
|
21
|
+
span.attribute("url.full", url.toString())
|
|
22
|
+
span.attribute("url.path", url.pathname)
|
|
23
|
+
if (query !== "") {
|
|
24
|
+
span.attribute("url.query", query)
|
|
25
|
+
}
|
|
26
|
+
span.attribute("url.scheme", url.protocol.slice(0, -1))
|
|
27
|
+
if (url.hostname !== "") {
|
|
28
|
+
// URL keeps IPv6 brackets in the hostname, but the semantic conventions do not.
|
|
29
|
+
span.attribute("server.address", url.hostname.startsWith("[") ? url.hostname.slice(1, -1) : url.hostname)
|
|
30
|
+
const port = url.port === "" ? defaultPorts[url.protocol] : Number(url.port)
|
|
31
|
+
if (port !== undefined) {
|
|
32
|
+
span.attribute("server.port", port)
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** @internal */
|
|
38
|
+
export const addHeaderAttributes = (
|
|
39
|
+
span: Tracer.Span,
|
|
40
|
+
phase: "request" | "response",
|
|
41
|
+
headers: Headers.Headers,
|
|
42
|
+
filter: (headerName: string, phase: "request" | "response") => boolean,
|
|
43
|
+
redactedNames: ReadonlyArray<string | RegExp>
|
|
44
|
+
): void => {
|
|
45
|
+
for (const name in headers) {
|
|
46
|
+
if (!filter(name, phase)) continue
|
|
47
|
+
span.attribute(
|
|
48
|
+
`http.${phase}.header.${name}`,
|
|
49
|
+
Headers.isRedactedName(name, redactedNames) ? "<redacted>" : headers[name]
|
|
50
|
+
)
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -746,7 +746,11 @@ function buildPayloadDecoders(
|
|
|
746
746
|
): Map<string, PayloadDecoder> {
|
|
747
747
|
const result = new Map<string, PayloadDecoder>()
|
|
748
748
|
payloadMap.forEach(({ encoding, schemas }, contentType) => {
|
|
749
|
-
const
|
|
749
|
+
const schema = Schema.Union(schemas)
|
|
750
|
+
const decode = Schema.decodeUnknownEffect(
|
|
751
|
+
encoding._tag === "FormUrlEncoded" ? Schema.toCodecArrayFromSingle(schema) : schema,
|
|
752
|
+
options
|
|
753
|
+
)
|
|
750
754
|
if (encoding._tag === "Multipart") {
|
|
751
755
|
result.set(contentType, { _tag: "Multipart", mode: encoding.mode, limits: encoding.limits, decode })
|
|
752
756
|
} else {
|