@effect/platform-node 4.0.0-beta.98 → 4.0.0-rc.108
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/AGENTS.md +381 -0
- package/CLAUDE.md +381 -0
- package/README.md +10 -3
- package/ai-docs/README.md +44 -0
- package/ai-docs/package.json +36 -0
- package/ai-docs/src/01_effect/01_basics/01_effect-gen.ts +30 -0
- package/ai-docs/src/01_effect/01_basics/02_effect-fn.ts +39 -0
- package/ai-docs/src/01_effect/01_basics/10_creating-effects.ts +74 -0
- package/ai-docs/src/01_effect/01_basics/index.md +5 -0
- package/ai-docs/src/01_effect/02_schema/10_schema-basics.ts +43 -0
- package/ai-docs/src/01_effect/02_schema/index.md +7 -0
- package/ai-docs/src/01_effect/03_services/01_service.ts +45 -0
- package/ai-docs/src/01_effect/03_services/10_reference.ts +10 -0
- package/ai-docs/src/01_effect/03_services/20_layer-composition.ts +70 -0
- package/ai-docs/src/01_effect/03_services/20_layer-unwrap.ts +66 -0
- package/ai-docs/src/01_effect/03_services/index.md +5 -0
- package/ai-docs/src/01_effect/04_errors/01_error-handling.ts +30 -0
- package/ai-docs/src/01_effect/04_errors/10_catch-tags.ts +24 -0
- package/ai-docs/src/01_effect/04_errors/20_reason-errors.ts +64 -0
- package/ai-docs/src/01_effect/04_errors/index.md +1 -0
- package/ai-docs/src/01_effect/05_resources/10_acquire-release.ts +105 -0
- package/ai-docs/src/01_effect/05_resources/20_layer-side-effects.ts +31 -0
- package/ai-docs/src/01_effect/05_resources/30_layer-map.ts +86 -0
- package/ai-docs/src/01_effect/05_resources/index.md +3 -0
- package/ai-docs/src/01_effect/06_running/10_run-main.ts +30 -0
- package/ai-docs/src/01_effect/06_running/20_layer-launch.ts +27 -0
- package/ai-docs/src/01_effect/06_running/index.md +1 -0
- package/ai-docs/src/01_effect/07_pubsub/10_pubsub.ts +56 -0
- package/ai-docs/src/01_effect/07_pubsub/index.md +3 -0
- package/ai-docs/src/03_stream/10_creating-streams.ts +103 -0
- package/ai-docs/src/03_stream/20_consuming-streams.ts +137 -0
- package/ai-docs/src/03_stream/30_encoding.ts +165 -0
- package/ai-docs/src/03_stream/index.md +4 -0
- package/ai-docs/src/04_integration/10_managed-runtime.ts +129 -0
- package/ai-docs/src/04_integration/index.md +5 -0
- package/ai-docs/src/05_batching/10_request-resolver.ts +89 -0
- package/ai-docs/src/05_batching/index.md +3 -0
- package/ai-docs/src/06_schedule/10_schedules.ts +110 -0
- package/ai-docs/src/06_schedule/index.md +3 -0
- package/ai-docs/src/07_datetime/10_creating-and-formatting.ts +30 -0
- package/ai-docs/src/07_datetime/20_time-zones.ts +44 -0
- package/ai-docs/src/07_datetime/index.md +5 -0
- package/ai-docs/src/08_observability/10_logging.ts +66 -0
- package/ai-docs/src/08_observability/20_otlp-tracing.ts +95 -0
- package/ai-docs/src/08_observability/index.md +7 -0
- package/ai-docs/src/09_testing/10_effect-tests.ts +55 -0
- package/ai-docs/src/09_testing/20_layer-tests.ts +138 -0
- package/ai-docs/src/09_testing/index.md +1 -0
- package/ai-docs/src/10_predicate/01_basics.ts +14 -0
- package/ai-docs/src/10_predicate/index.md +9 -0
- package/ai-docs/src/50_http-client/10_basics.ts +102 -0
- package/ai-docs/src/50_http-client/index.md +3 -0
- package/ai-docs/src/51_http-server/10_basics.ts +116 -0
- package/ai-docs/src/51_http-server/fixtures/api/Api.ts +14 -0
- package/ai-docs/src/51_http-server/fixtures/api/Authorization.ts +36 -0
- package/ai-docs/src/51_http-server/fixtures/api/System.ts +10 -0
- package/ai-docs/src/51_http-server/fixtures/api/Users.ts +91 -0
- package/ai-docs/src/51_http-server/fixtures/domain/User.ts +12 -0
- package/ai-docs/src/51_http-server/fixtures/domain/UserErrors.ts +22 -0
- package/ai-docs/src/51_http-server/fixtures/server/Authorization.ts +36 -0
- package/ai-docs/src/51_http-server/fixtures/server/Users/http.ts +71 -0
- package/ai-docs/src/51_http-server/fixtures/server/Users.ts +62 -0
- package/ai-docs/src/51_http-server/index.md +3 -0
- package/ai-docs/src/60_child-process/10_working-with-child-processes.ts +117 -0
- package/ai-docs/src/60_child-process/index.md +3 -0
- package/ai-docs/src/70_cli/10_basics.ts +136 -0
- package/ai-docs/src/70_cli/index.md +5 -0
- package/ai-docs/src/71_ai/10_language-model.ts +156 -0
- package/ai-docs/src/71_ai/20_tools.ts +226 -0
- package/ai-docs/src/71_ai/30_chat.ts +158 -0
- package/ai-docs/src/71_ai/fixtures/domain/LaunchPlan.ts +9 -0
- package/ai-docs/src/71_ai/index.md +5 -0
- package/ai-docs/src/80_cluster/10_entities.ts +97 -0
- package/ai-docs/src/80_cluster/index.md +4 -0
- package/ai-docs/src/index.md +10 -0
- package/ai-docs/tsconfig.json +24 -0
- package/dist/Mime.js.map +1 -1
- package/dist/NodeClusterHttp.d.ts +1 -0
- package/dist/NodeClusterHttp.d.ts.map +1 -1
- package/dist/NodeClusterHttp.js +6 -1
- package/dist/NodeClusterHttp.js.map +1 -1
- package/dist/NodeClusterSocket.d.ts +1 -0
- package/dist/NodeClusterSocket.d.ts.map +1 -1
- package/dist/NodeClusterSocket.js +10 -2
- package/dist/NodeClusterSocket.js.map +1 -1
- package/dist/NodeCrypto.js.map +1 -1
- package/dist/NodeFileSystem.js.map +1 -1
- package/dist/NodeHttpClient.d.ts +18 -18
- package/dist/NodeHttpClient.d.ts.map +1 -1
- package/dist/NodeHttpClient.js +26 -20
- package/dist/NodeHttpClient.js.map +1 -1
- package/dist/NodeHttpIncomingMessage.js.map +1 -1
- package/dist/NodeHttpPlatform.d.ts +8 -4
- package/dist/NodeHttpPlatform.d.ts.map +1 -1
- package/dist/NodeHttpPlatform.js +38 -0
- package/dist/NodeHttpPlatform.js.map +1 -1
- package/dist/NodeHttpServer.d.ts +21 -16
- package/dist/NodeHttpServer.d.ts.map +1 -1
- package/dist/NodeHttpServer.js +29 -21
- package/dist/NodeHttpServer.js.map +1 -1
- package/dist/NodeHttpServerRequest.js.map +1 -1
- package/dist/NodeMultipart.d.ts.map +1 -1
- package/dist/NodeMultipart.js +3 -2
- package/dist/NodeMultipart.js.map +1 -1
- package/dist/NodeMultipartParser.d.ts +97 -0
- package/dist/NodeMultipartParser.d.ts.map +1 -0
- package/dist/NodeMultipartParser.js +108 -0
- package/dist/NodeMultipartParser.js.map +1 -0
- package/dist/NodePath.js.map +1 -1
- package/dist/NodeRedis.js.map +1 -1
- package/dist/NodeRuntime.js.map +1 -1
- package/dist/NodeServices.js.map +1 -1
- package/dist/NodeSocket.js.map +1 -1
- package/dist/NodeStdio.js.map +1 -1
- package/dist/NodeTerminal.js.map +1 -1
- package/dist/NodeWorker.js.map +1 -1
- package/dist/NodeWorkerRunner.d.ts.map +1 -1
- package/dist/NodeWorkerRunner.js +30 -18
- package/dist/NodeWorkerRunner.js.map +1 -1
- package/dist/Undici.d.ts +2 -2
- package/dist/Undici.js +2 -2
- package/dist/Undici.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/package.json +18 -16
- package/src/NodeClusterHttp.ts +6 -2
- package/src/NodeClusterSocket.ts +8 -2
- package/src/NodeHttpClient.ts +27 -20
- package/src/NodeHttpPlatform.ts +49 -0
- package/src/NodeHttpServer.ts +61 -40
- package/src/NodeMultipart.ts +5 -4
- package/src/NodeMultipartParser.ts +184 -0
- package/src/NodeWorkerRunner.ts +39 -23
- package/src/Undici.ts +2 -2
- package/src/index.ts +5 -0
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title Stateful chat sessions
|
|
3
|
+
*
|
|
4
|
+
* The AI `Chat` module maintains conversation history automatically. Build
|
|
5
|
+
* AI agents or chat assistants.
|
|
6
|
+
*/
|
|
7
|
+
import { OpenAiClient, OpenAiLanguageModel } from "@effect/ai-openai"
|
|
8
|
+
import { Config, Context, DateTime, Effect, Layer, Ref, Schema } from "effect"
|
|
9
|
+
import { AiError, Chat, Prompt, Tool, Toolkit } from "effect/unstable/ai"
|
|
10
|
+
import { FetchHttpClient } from "effect/unstable/http"
|
|
11
|
+
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// Provider setup
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
|
|
16
|
+
const OpenAiClientLayer = OpenAiClient.layerConfig({
|
|
17
|
+
apiKey: Config.redacted("OPENAI_API_KEY")
|
|
18
|
+
}).pipe(Layer.provide(FetchHttpClient.layer))
|
|
19
|
+
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
// Tools for the agentic loop
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
|
|
24
|
+
const Tools = Toolkit.make(Tool.make("getCurrentTime", {
|
|
25
|
+
description: "Get the current time in ISO format",
|
|
26
|
+
parameters: Schema.Struct({
|
|
27
|
+
id: Schema.String
|
|
28
|
+
}),
|
|
29
|
+
success: Schema.String
|
|
30
|
+
}))
|
|
31
|
+
|
|
32
|
+
const ToolsLayer = Tools.toLayer(Effect.gen(function*() {
|
|
33
|
+
yield* Effect.logDebug("Initializing tools...")
|
|
34
|
+
return Tools.of({
|
|
35
|
+
getCurrentTime: Effect.fn("Tools.getCurrentTime")(function*(_) {
|
|
36
|
+
const now = yield* DateTime.now
|
|
37
|
+
return DateTime.formatIso(now)
|
|
38
|
+
})
|
|
39
|
+
})
|
|
40
|
+
}))
|
|
41
|
+
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
// Service that wraps Chat for a domain use-case
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
|
|
46
|
+
export class AiAssistantError extends Schema.TaggedError<AiAssistantError>()("AiAssistantError", {
|
|
47
|
+
reason: AiError.AiErrorReason
|
|
48
|
+
}) {
|
|
49
|
+
static fromAiError(error: AiError.AiError) {
|
|
50
|
+
return new AiAssistantError({ reason: error.reason })
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export class AiAssistant extends Context.Service<AiAssistant, {
|
|
55
|
+
// Send a message while maintaining conversation history across turns.
|
|
56
|
+
chat(message: string): Effect.Effect<string, AiAssistantError>
|
|
57
|
+
// Ask a question and use an agentic loop with tool calls to answer it.
|
|
58
|
+
agent(question: string): Effect.Effect<string, AiAssistantError>
|
|
59
|
+
}>()("acme/AiAssistant") {
|
|
60
|
+
static readonly layer = Layer.effect(
|
|
61
|
+
AiAssistant,
|
|
62
|
+
Effect.gen(function*() {
|
|
63
|
+
// Choose the model you want to use for the chat sessions.
|
|
64
|
+
const modelLayer = yield* OpenAiLanguageModel.model("gpt-5.2").captureRequirements
|
|
65
|
+
|
|
66
|
+
// ---------------------------------------------------------------------------
|
|
67
|
+
// 1. Chat.empty — basic multi-turn conversation
|
|
68
|
+
// ---------------------------------------------------------------------------
|
|
69
|
+
|
|
70
|
+
// Create a new chat session with `Chat.empty` or `Chat.fromPrompt`. The
|
|
71
|
+
// session maintains conversation history automatically, so you can focus on
|
|
72
|
+
// the current turn without having to manage context.
|
|
73
|
+
const newSession = yield* Chat.fromPrompt(Prompt.empty.pipe(
|
|
74
|
+
Prompt.setSystem("You are a helpful assistant that answers questions.")
|
|
75
|
+
))
|
|
76
|
+
|
|
77
|
+
// You can also create a chat using a json export.
|
|
78
|
+
const json = yield* newSession.exportJson
|
|
79
|
+
const session = yield* Chat.fromJson(json)
|
|
80
|
+
|
|
81
|
+
const chat = Effect.fn("AiAssistant.chat")(
|
|
82
|
+
function*(message: string) {
|
|
83
|
+
// Create a new turn in the conversation by passing the user's message
|
|
84
|
+
// to `session.generateText`.
|
|
85
|
+
const response = yield* session.generateText({ prompt: message }).pipe(
|
|
86
|
+
// Provide the model layer to use.
|
|
87
|
+
// You could potentially use different models for different turns,
|
|
88
|
+
// or even switch models in the middle of a conversation.
|
|
89
|
+
Effect.provide(modelLayer)
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
// You can inspect the accumulated history at any point through the
|
|
93
|
+
// `history` ref on the chat instance.
|
|
94
|
+
const history = yield* Ref.get(session.history)
|
|
95
|
+
yield* Effect.logInfo(
|
|
96
|
+
`Conversation has ${history.content.length} messages`
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
return response.text
|
|
100
|
+
},
|
|
101
|
+
Effect.mapError((error) => AiAssistantError.fromAiError(error))
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
// ---------------------------------------------------------------------------
|
|
105
|
+
// 2. Create agentic loops with tools
|
|
106
|
+
// ---------------------------------------------------------------------------
|
|
107
|
+
|
|
108
|
+
const tools = yield* Tools
|
|
109
|
+
const agent = Effect.fn("AiAssistant.agent")(
|
|
110
|
+
function*(question: string) {
|
|
111
|
+
// We start the agent with a system prompt and the user question. The
|
|
112
|
+
// agent can then call tools in a loop until it decides to return a
|
|
113
|
+
// final answer.
|
|
114
|
+
const session = yield* Chat.fromPrompt([
|
|
115
|
+
{ role: "system", content: "You are an assistant that can use tools to answer questions." },
|
|
116
|
+
{ role: "user", content: question }
|
|
117
|
+
])
|
|
118
|
+
|
|
119
|
+
while (true) {
|
|
120
|
+
const response = yield* session.generateText({
|
|
121
|
+
prompt: [], // No additional prompt — the model has full access to the conversation history
|
|
122
|
+
toolkit: tools // Provide the tools to the model
|
|
123
|
+
}).pipe(
|
|
124
|
+
// Provide the model layer to use.
|
|
125
|
+
// You could potentially use different models for different turns,
|
|
126
|
+
// or even switch models in the middle of a conversation.
|
|
127
|
+
Effect.provide(modelLayer)
|
|
128
|
+
)
|
|
129
|
+
if (response.toolCalls.length > 0) {
|
|
130
|
+
// If the model called any tools, execute them and the Chat module
|
|
131
|
+
// will automatically add the tool results to the conversation
|
|
132
|
+
// history before the next turn.
|
|
133
|
+
continue
|
|
134
|
+
}
|
|
135
|
+
// If there are no tool calls, the model has returned a final answer
|
|
136
|
+
// and we can exit the loop.
|
|
137
|
+
return response.text
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
// Remap AI errors to our domain-specific error type, but die on
|
|
141
|
+
// unexpected errors.
|
|
142
|
+
Effect.catchTag(
|
|
143
|
+
"AiError",
|
|
144
|
+
(error) => Effect.fail(AiAssistantError.fromAiError(error)),
|
|
145
|
+
(e) => Effect.die(e)
|
|
146
|
+
)
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
return AiAssistant.of({
|
|
150
|
+
chat,
|
|
151
|
+
agent
|
|
152
|
+
})
|
|
153
|
+
})
|
|
154
|
+
).pipe(
|
|
155
|
+
// Provide the OpenAI client and tools layers to the AiAssistant service.
|
|
156
|
+
Layer.provide([OpenAiClientLayer, ToolsLayer])
|
|
157
|
+
)
|
|
158
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Schema } from "effect"
|
|
2
|
+
|
|
3
|
+
export class LaunchPlan extends Schema.Class<LaunchPlan>("LaunchPlan")({
|
|
4
|
+
audience: Schema.Literals(["developers", "operators", "platform teams"]),
|
|
5
|
+
channels: Schema.Array(Schema.String),
|
|
6
|
+
launchDate: Schema.String,
|
|
7
|
+
summary: Schema.String,
|
|
8
|
+
keyRisks: Schema.Array(Schema.String)
|
|
9
|
+
}) {}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title Defining cluster entities
|
|
3
|
+
*
|
|
4
|
+
* Define distributed entity RPCs and run them in a cluster.
|
|
5
|
+
*/
|
|
6
|
+
import { NodeClusterSocket, NodeRuntime } from "@effect/platform-node"
|
|
7
|
+
import { Effect, Layer, Ref, Schema } from "effect"
|
|
8
|
+
import { ClusterSchema, Entity, TestRunner } from "effect/unstable/cluster"
|
|
9
|
+
import { Rpc } from "effect/unstable/rpc"
|
|
10
|
+
import type { SqlClient } from "effect/unstable/sql"
|
|
11
|
+
|
|
12
|
+
export const Increment = Rpc.make("Increment", {
|
|
13
|
+
payload: { amount: Schema.Int },
|
|
14
|
+
success: Schema.Int
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
export const GetCount = Rpc.make("GetCount", {
|
|
18
|
+
success: Schema.Int
|
|
19
|
+
})
|
|
20
|
+
// If you want GetCount messages to be persisted, you can annotate the RPC
|
|
21
|
+
// schema with `ClusterSchema.Persisted`.
|
|
22
|
+
//
|
|
23
|
+
// By default, messages are volatile and only sent over a network.
|
|
24
|
+
.annotate(ClusterSchema.Persisted, true)
|
|
25
|
+
|
|
26
|
+
// `Entity.make` takes an array of Rpc definitions
|
|
27
|
+
export const Counter = Entity.make("Counter", [Increment, GetCount])
|
|
28
|
+
|
|
29
|
+
// Entity handlers can keep in-memory state while the entity is active.
|
|
30
|
+
// `maxIdleTime` controls passivation: if the entity is idle long enough, it is
|
|
31
|
+
// stopped and later recreated on demand.
|
|
32
|
+
export const CounterEntityLayer = Counter.toLayer(
|
|
33
|
+
Effect.gen(function*() {
|
|
34
|
+
const count = yield* Ref.make(0)
|
|
35
|
+
|
|
36
|
+
return Counter.of({
|
|
37
|
+
Increment: ({ payload }) => Ref.updateAndGet(count, (current) => current + payload.amount),
|
|
38
|
+
GetCount: () =>
|
|
39
|
+
Ref.get(count).pipe(
|
|
40
|
+
// Add Rpc.fork to allow the GetCount handler to run concurrently with
|
|
41
|
+
// Increment handlers.
|
|
42
|
+
//
|
|
43
|
+
// This opts-out of the default behavior where all handlers for a
|
|
44
|
+
// given entity run sequentially.
|
|
45
|
+
Rpc.fork
|
|
46
|
+
)
|
|
47
|
+
})
|
|
48
|
+
}),
|
|
49
|
+
{ maxIdleTime: "5 minutes" }
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
// If you ever need to access an entity client, you can use the `client`
|
|
53
|
+
// property on the entity definition.
|
|
54
|
+
export const useCounter = Effect.gen(function*() {
|
|
55
|
+
const clientFor = yield* Counter.client
|
|
56
|
+
const counter = clientFor("counter-123")
|
|
57
|
+
|
|
58
|
+
const afterIncrement = yield* counter.Increment({ amount: 1 })
|
|
59
|
+
const currentCount = yield* counter.GetCount()
|
|
60
|
+
|
|
61
|
+
console.log(`Count after increment: ${afterIncrement}, current count: ${currentCount}`)
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
// `SingleRunner.layer` is useful for local development / tests where you still
|
|
65
|
+
// want the cluster entity runtime model.
|
|
66
|
+
declare const SqlClientLayer: Layer.Layer<SqlClient.SqlClient>
|
|
67
|
+
|
|
68
|
+
// Create the cluster layer using `NodeClusterSocket.layer`
|
|
69
|
+
const ClusterLayer = NodeClusterSocket.layer().pipe(
|
|
70
|
+
Layer.provide(SqlClientLayer)
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
// You can also use `TestRunner.layer` to run your entities in a single process,
|
|
74
|
+
// without any network communication and in-memory storage. This is useful for testing and
|
|
75
|
+
// development.
|
|
76
|
+
const ClusterLayerTest = TestRunner.layer
|
|
77
|
+
|
|
78
|
+
// Merge all your entity layers together and provide the cluster layer to run
|
|
79
|
+
// them in a cluster.
|
|
80
|
+
const EntitiesLayer = Layer.mergeAll(
|
|
81
|
+
CounterEntityLayer
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
const ProductionLayer = EntitiesLayer.pipe(
|
|
85
|
+
Layer.provide(ClusterLayer)
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
export const TestLayer = EntitiesLayer.pipe(
|
|
89
|
+
// For testing, we can use `Layer.provideMerge` to tests can access storage
|
|
90
|
+
// and other cluster services directly.
|
|
91
|
+
Layer.provideMerge(ClusterLayerTest)
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
// Finally, run your app with the entities layer.
|
|
95
|
+
Layer.launch(ProductionLayer).pipe(
|
|
96
|
+
NodeRuntime.runMain
|
|
97
|
+
)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Effect library documentation
|
|
2
|
+
|
|
3
|
+
This documentation covers the Effect library and its related packages.
|
|
4
|
+
|
|
5
|
+
When you need to find information about Effect, use this documentation and the
|
|
6
|
+
Effect source code available in your environment. Avoid unrelated copies of
|
|
7
|
+
Effect or external documentation, as they may be outdated or incorrect.
|
|
8
|
+
|
|
9
|
+
**Note**: The examples in this documentation contain comments for illustration
|
|
10
|
+
purposes. In practice, you would not include these comments in your code.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json.schemastore.org/tsconfig",
|
|
3
|
+
"extends": "../tsconfig.base.json",
|
|
4
|
+
"include": ["src/**/*.ts", "src/**/*.tsx"],
|
|
5
|
+
"compilerOptions": {
|
|
6
|
+
"rootDir": ".",
|
|
7
|
+
"noEmit": true,
|
|
8
|
+
"declaration": false,
|
|
9
|
+
"declarationMap": false,
|
|
10
|
+
"composite": false,
|
|
11
|
+
"incremental": false,
|
|
12
|
+
"types": ["node"],
|
|
13
|
+
"plugins": [
|
|
14
|
+
{
|
|
15
|
+
"name": "@effect/language-service",
|
|
16
|
+
"namespaceImportPackages": [],
|
|
17
|
+
"diagnosticSeverity": {
|
|
18
|
+
"floatingEffect": "off",
|
|
19
|
+
"preferSchemaOverJson": "off"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
}
|
|
24
|
+
}
|
package/dist/Mime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Mime.js","names":[
|
|
1
|
+
{"version":3,"file":"Mime.js","names":[],"sources":["../src/Mime.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;;AAOA;AAEA;;;AAGA,OAAO,IAAI,MAAM,MAAM;AAEvB;;;;AAIA,cAAc,MAAM;AAEpB;;;;AAIA,eAAe,IAAI","ignoreList":[]}
|
|
@@ -42,6 +42,7 @@ layerK8sHttpClient } from "./NodeClusterSocket.ts";
|
|
|
42
42
|
export declare const layer: <const ClientOnly extends boolean = false, const Storage extends "local" | "sql" | "byo" = never>(options: {
|
|
43
43
|
readonly transport: "http" | "websocket";
|
|
44
44
|
readonly serialization?: "msgpack" | "ndjson" | undefined;
|
|
45
|
+
readonly serializationMaxBufferSize?: number | "unbounded" | undefined;
|
|
45
46
|
readonly clientOnly?: ClientOnly | undefined;
|
|
46
47
|
readonly storage?: Storage | undefined;
|
|
47
48
|
readonly runnerHealth?: "ping" | "k8s" | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeClusterHttp.d.ts","sourceRoot":"","sources":["../src/NodeClusterHttp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAE5C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAGrC,OAAO,KAAK,cAAc,MAAM,wCAAwC,CAAA;AAExE,OAAO,KAAK,OAAO,MAAM,iCAAiC,CAAA;AAC1D,OAAO,KAAK,aAAa,MAAM,uCAAuC,CAAA;AACtE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAA;AAChE,OAAO,KAAK,cAAc,MAAM,wCAAwC,CAAA;AAGxE,OAAO,KAAK,KAAK,IAAI,MAAM,2BAA2B,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAA;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAA;AAEtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;
|
|
1
|
+
{"version":3,"file":"NodeClusterHttp.d.ts","sourceRoot":"","sources":["../src/NodeClusterHttp.ts"],"names":[],"mappings":"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"}
|
package/dist/NodeClusterHttp.js
CHANGED
|
@@ -12,6 +12,7 @@ import * as SqlRunnerStorage from "effect/unstable/cluster/SqlRunnerStorage";
|
|
|
12
12
|
import * as RpcSerialization from "effect/unstable/rpc/RpcSerialization";
|
|
13
13
|
import { createServer } from "node:http";
|
|
14
14
|
import { layerK8sHttpClient } from "./NodeClusterSocket.js";
|
|
15
|
+
import * as NodeCrypto from "./NodeCrypto.js";
|
|
15
16
|
import * as NodeHttpClient from "./NodeHttpClient.js";
|
|
16
17
|
import * as NodeHttpServer from "./NodeHttpServer.js";
|
|
17
18
|
import * as NodeSocket from "./NodeSocket.js";
|
|
@@ -38,7 +39,11 @@ export const layer = options => {
|
|
|
38
39
|
// with server
|
|
39
40
|
: options.transport === "http" ? Layer.provide(HttpRunner.layerHttp, [layerHttpServer, NodeHttpClient.layerUndici]) : Layer.provide(HttpRunner.layerWebsocket, [layerHttpServer, NodeSocket.layerWebSocketConstructor]);
|
|
40
41
|
const runnerHealth = options?.clientOnly ? Layer.empty : options?.runnerHealth === "k8s" ? RunnerHealth.layerK8s(options.runnerHealthK8s).pipe(Layer.provide(layerK8sHttpClient)) : RunnerHealth.layerPing.pipe(Layer.provide(Runners.layerRpc), Layer.provide(options.transport === "http" ? HttpRunner.layerClientProtocolHttpDefault.pipe(Layer.provide(NodeHttpClient.layerUndici)) : HttpRunner.layerClientProtocolWebsocketDefault.pipe(Layer.provide(NodeSocket.layerWebSocketConstructor))));
|
|
41
|
-
return layer.pipe(Layer.provide(runnerHealth), Layer.provideMerge(options?.storage === "local" ? MessageStorage.layerNoop : options?.storage === "byo" ? Layer.empty : Layer.orDie(SqlMessageStorage.layer)), Layer.provide(options?.storage === "local" ? RunnerStorage.layerMemory : options?.storage === "byo" ? Layer.empty : Layer.orDie(SqlRunnerStorage.layer)), Layer.provide(ShardingConfig.layerFromEnv(options?.shardingConfig)), Layer.provide(options?.serialization === "ndjson" ? RpcSerialization.
|
|
42
|
+
return layer.pipe(Layer.provide(runnerHealth), Layer.provideMerge(options?.storage === "local" ? MessageStorage.layerNoop : options?.storage === "byo" ? Layer.empty : Layer.orDie(SqlMessageStorage.layer).pipe(Layer.provide(NodeCrypto.layer))), Layer.provide(options?.storage === "local" ? RunnerStorage.layerMemory : options?.storage === "byo" ? Layer.empty : Layer.orDie(SqlRunnerStorage.layer)), Layer.provide(ShardingConfig.layerFromEnv(options?.shardingConfig)), Layer.provide(options?.serialization === "ndjson" ? RpcSerialization.layerNdjsonWith({
|
|
43
|
+
maxBufferSize: options.serializationMaxBufferSize
|
|
44
|
+
}) : RpcSerialization.layerMsgPackWith({
|
|
45
|
+
maxBufferSize: options.serializationMaxBufferSize
|
|
46
|
+
})));
|
|
42
47
|
};
|
|
43
48
|
/**
|
|
44
49
|
* Provides the HTTP server and Node HTTP services used by cluster runners,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeClusterHttp.js","names":[
|
|
1
|
+
{"version":3,"file":"NodeClusterHttp.js","names":[],"sources":["../src/NodeClusterHttp.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -49,6 +49,7 @@ layerSocketServer };
|
|
|
49
49
|
*/
|
|
50
50
|
export declare const layer: <const ClientOnly extends boolean = false, const Storage extends "local" | "sql" | "byo" = never>(options?: {
|
|
51
51
|
readonly serialization?: "msgpack" | "ndjson" | undefined;
|
|
52
|
+
readonly serializationMaxBufferSize?: number | "unbounded" | undefined;
|
|
52
53
|
readonly clientOnly?: ClientOnly | undefined;
|
|
53
54
|
readonly storage?: Storage | undefined;
|
|
54
55
|
readonly runnerHealth?: "ping" | "k8s" | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeClusterSocket.d.ts","sourceRoot":"","sources":["../src/NodeClusterSocket.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAA;AACvG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAGhD,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,aAAa,MAAM,uCAAuC,CAAA;AACtE,OAAO,KAAK,cAAc,MAAM,wCAAwC,CAAA;AAExE,OAAO,KAAK,OAAO,MAAM,iCAAiC,CAAA;AAC1D,OAAO,KAAK,aAAa,MAAM,uCAAuC,CAAA;AACtE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAA;AAChE,OAAO,KAAK,cAAc,MAAM,wCAAwC,CAAA;AAKxE,OAAO,KAAK,KAAK,YAAY,MAAM,qCAAqC,CAAA;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;
|
|
1
|
+
{"version":3,"file":"NodeClusterSocket.d.ts","sourceRoot":"","sources":["../src/NodeClusterSocket.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAA;AACvG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAGhD,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,aAAa,MAAM,uCAAuC,CAAA;AACtE,OAAO,KAAK,cAAc,MAAM,wCAAwC,CAAA;AAExE,OAAO,KAAK,OAAO,MAAM,iCAAiC,CAAA;AAC1D,OAAO,KAAK,aAAa,MAAM,uCAAuC,CAAA;AACtE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAA;AAChE,OAAO,KAAK,cAAc,MAAM,wCAAwC,CAAA;AAKxE,OAAO,KAAK,KAAK,YAAY,MAAM,qCAAqC,CAAA;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;AAG9D,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AAGrD,OAAO;AACL;;;;;;GAMG;AACH,mBAAmB;AACnB;;;;;;GAMG;AACH,iBAAiB,EAClB,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,KAAK,GAChB,KAAK,CAAC,UAAU,SAAS,OAAO,GAAG,KAAK,EACxC,KAAK,CAAC,OAAO,SAAS,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,YAE3C;IACR,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAA;IACzD,QAAQ,CAAC,0BAA0B,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAA;IACtE,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,CAAA;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAAA;IAClD,QAAQ,CAAC,eAAe,CAAC,EAAE;QACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACvC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC5C,GAAG,SAAS,CAAA;IACb,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAA;CACxF,KACA,UAAU,SAAS,IAAI,GAAG,KAAK,CAAC,KAAK,CACpC,QAAQ,GAAG,OAAO,CAAC,OAAO,GAAG,CAAC,KAAK,SAAS,OAAO,GAAG,KAAK,GAAG,cAAc,CAAC,cAAc,CAAC,EAC5F,WAAW,EACX,OAAO,SAAS,OAAO,GAAG,KAAK,GAC3B,KAAK,SAAS,OAAO,GAAG,CAAC,cAAc,CAAC,cAAc,GAAG,aAAa,CAAC,aAAa,CAAC,GACrF,SAAS,CACd,GACD,KAAK,CAAC,KAAK,CACT,QAAQ,GAAG,OAAO,CAAC,OAAO,GAAG,CAAC,KAAK,SAAS,OAAO,GAAG,KAAK,GAAG,cAAc,CAAC,cAAc,CAAC,EAC5F,YAAY,CAAC,iBAAiB,GAAG,WAAW,EAC5C,OAAO,SAAS,OAAO,GAAG,KAAK,GAC3B,KAAK,SAAS,OAAO,GAAG,CAAC,cAAc,CAAC,cAAc,GAAG,aAAa,CAAC,aAAa,CAAC,GACrF,SAAS,CA2ChB,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAyBrE,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAIvE,CAAA"}
|
|
@@ -24,6 +24,7 @@ import * as SocketRunner from "effect/unstable/cluster/SocketRunner";
|
|
|
24
24
|
import * as SqlMessageStorage from "effect/unstable/cluster/SqlMessageStorage";
|
|
25
25
|
import * as SqlRunnerStorage from "effect/unstable/cluster/SqlRunnerStorage";
|
|
26
26
|
import * as RpcSerialization from "effect/unstable/rpc/RpcSerialization";
|
|
27
|
+
import * as NodeCrypto from "./NodeCrypto.js";
|
|
27
28
|
import * as NodeFileSystem from "./NodeFileSystem.js";
|
|
28
29
|
import * as NodeHttpClient from "./NodeHttpClient.js";
|
|
29
30
|
import * as Undici from "./Undici.js";
|
|
@@ -59,7 +60,11 @@ export const layer = options => {
|
|
|
59
60
|
// with server
|
|
60
61
|
: Layer.provide(SocketRunner.layer, [layerSocketServer, layerClientProtocol]);
|
|
61
62
|
const runnerHealth = options?.clientOnly ? Layer.empty : options?.runnerHealth === "k8s" ? RunnerHealth.layerK8s(options.runnerHealthK8s).pipe(Layer.provide(layerK8sHttpClient)) : RunnerHealth.layerPing.pipe(Layer.provide(Runners.layerRpc), Layer.provide(layerClientProtocol));
|
|
62
|
-
return layer.pipe(Layer.provide(runnerHealth), Layer.provideMerge(options?.storage === "local" ? MessageStorage.layerNoop : options?.storage === "byo" ? Layer.empty : Layer.orDie(SqlMessageStorage.layer)), Layer.provide(options?.storage === "local" ? RunnerStorage.layerMemory : options?.storage === "byo" ? Layer.empty : Layer.orDie(SqlRunnerStorage.layer)), Layer.provide(ShardingConfig.layerFromEnv(options?.shardingConfig)), Layer.provide(options?.serialization === "ndjson" ? RpcSerialization.
|
|
63
|
+
return layer.pipe(Layer.provide(runnerHealth), Layer.provideMerge(options?.storage === "local" ? MessageStorage.layerNoop : options?.storage === "byo" ? Layer.empty : Layer.orDie(SqlMessageStorage.layer).pipe(Layer.provide(NodeCrypto.layer))), Layer.provide(options?.storage === "local" ? RunnerStorage.layerMemory : options?.storage === "byo" ? Layer.empty : Layer.orDie(SqlRunnerStorage.layer)), Layer.provide(ShardingConfig.layerFromEnv(options?.shardingConfig)), Layer.provide(options?.serialization === "ndjson" ? RpcSerialization.layerNdjsonWith({
|
|
64
|
+
maxBufferSize: options?.serializationMaxBufferSize
|
|
65
|
+
}) : RpcSerialization.layerMsgPackWith({
|
|
66
|
+
maxBufferSize: options?.serializationMaxBufferSize
|
|
67
|
+
})));
|
|
63
68
|
};
|
|
64
69
|
/**
|
|
65
70
|
* Provides an Undici dispatcher for Kubernetes API calls, using the service
|
|
@@ -73,7 +78,10 @@ export const layerDispatcherK8s = /*#__PURE__*/Layer.effect(NodeHttpClient.Dispa
|
|
|
73
78
|
const fs = yield* FileSystem.FileSystem;
|
|
74
79
|
const caCertOption = yield* fs.readFileString("/var/run/secrets/kubernetes.io/serviceaccount/ca.crt").pipe(Effect.option);
|
|
75
80
|
if (caCertOption._tag === "Some") {
|
|
76
|
-
return yield* Effect.acquireRelease(Effect.sync(() =>
|
|
81
|
+
return yield* Effect.acquireRelease(Effect.sync(() =>
|
|
82
|
+
// oxlint cannot resolve values re-exported through the local Undici facade.
|
|
83
|
+
// oxlint-disable-next-line import/namespace
|
|
84
|
+
new Undici.Agent({
|
|
77
85
|
connect: {
|
|
78
86
|
ca: caCertOption.value
|
|
79
87
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeClusterSocket.js","names":[
|
|
1
|
+
{"version":3,"file":"NodeClusterSocket.js","names":[],"sources":["../src/NodeClusterSocket.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/dist/NodeCrypto.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeCrypto.js","names":[
|
|
1
|
+
{"version":3,"file":"NodeCrypto.js","names":[],"sources":["../src/NodeCrypto.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;;;;;;;;;AAaA,OAAO,KAAK,UAAU,MAAM,yCAAyC;AAIrE;;;;;;AAMA,OAAO,MAAM,KAAK,GAA+B,UAAU,CAAC,KAAK","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeFileSystem.js","names":[
|
|
1
|
+
{"version":3,"file":"NodeFileSystem.js","names":[],"sources":["../src/NodeFileSystem.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;;;;;;AAUA,OAAO,KAAK,cAAc,MAAM,6CAA6C;AAI7E;;;;;;AAMA,OAAO,MAAM,KAAK,GAA4B,cAAc,CAAC,KAAK","ignoreList":[]}
|
package/dist/NodeHttpClient.d.ts
CHANGED
|
@@ -26,14 +26,14 @@ export {
|
|
|
26
26
|
* Use to access or override the fetch implementation used by the Node
|
|
27
27
|
* fetch-based HTTP client.
|
|
28
28
|
*
|
|
29
|
-
* @category
|
|
29
|
+
* @category services
|
|
30
30
|
* @since 4.0.0
|
|
31
31
|
*/
|
|
32
32
|
Fetch,
|
|
33
33
|
/**
|
|
34
34
|
* Layer that provides the fetch-based HTTP client implementation.
|
|
35
35
|
*
|
|
36
|
-
* @category
|
|
36
|
+
* @category layers
|
|
37
37
|
* @since 4.0.0
|
|
38
38
|
*/
|
|
39
39
|
layer as layerFetch,
|
|
@@ -44,7 +44,7 @@ layer as layerFetch,
|
|
|
44
44
|
*
|
|
45
45
|
* Use to provide default fetch request options for Node HTTP requests.
|
|
46
46
|
*
|
|
47
|
-
* @category
|
|
47
|
+
* @category services
|
|
48
48
|
* @since 4.0.0
|
|
49
49
|
*/
|
|
50
50
|
RequestInit } from "effect/unstable/http/FetchHttpClient";
|
|
@@ -53,7 +53,7 @@ declare const Dispatcher_base: Context.ServiceClass<Dispatcher, "@effect/platfor
|
|
|
53
53
|
* Service tag for the Undici `Dispatcher` used by the Undici-backed HTTP
|
|
54
54
|
* client.
|
|
55
55
|
*
|
|
56
|
-
* @category
|
|
56
|
+
* @category services
|
|
57
57
|
* @since 4.0.0
|
|
58
58
|
*/
|
|
59
59
|
export declare class Dispatcher extends Dispatcher_base {
|
|
@@ -62,14 +62,14 @@ export declare class Dispatcher extends Dispatcher_base {
|
|
|
62
62
|
* Acquires a new Undici `Agent` dispatcher and destroys it when the enclosing
|
|
63
63
|
* scope is finalized.
|
|
64
64
|
*
|
|
65
|
-
* @category
|
|
65
|
+
* @category resource management
|
|
66
66
|
* @since 4.0.0
|
|
67
67
|
*/
|
|
68
68
|
export declare const makeDispatcher: Effect.Effect<Undici.Dispatcher, never, Scope.Scope>;
|
|
69
69
|
/**
|
|
70
70
|
* Provides the `Dispatcher` service using a scoped Undici `Agent`.
|
|
71
71
|
*
|
|
72
|
-
* @category
|
|
72
|
+
* @category layers
|
|
73
73
|
* @since 4.0.0
|
|
74
74
|
*/
|
|
75
75
|
export declare const layerDispatcher: Layer.Layer<Dispatcher>;
|
|
@@ -77,7 +77,7 @@ export declare const layerDispatcher: Layer.Layer<Dispatcher>;
|
|
|
77
77
|
* Provides the `Dispatcher` service from Undici's process-global dispatcher,
|
|
78
78
|
* without creating or owning a new agent.
|
|
79
79
|
*
|
|
80
|
-
* @category
|
|
80
|
+
* @category layers
|
|
81
81
|
* @since 4.0.0
|
|
82
82
|
*/
|
|
83
83
|
export declare const dispatcherLayerGlobal: Layer.Layer<Dispatcher>;
|
|
@@ -85,7 +85,7 @@ export declare const dispatcherLayerGlobal: Layer.Layer<Dispatcher>;
|
|
|
85
85
|
* Fiber reference containing default Undici request options applied to requests
|
|
86
86
|
* sent by `makeUndici`.
|
|
87
87
|
*
|
|
88
|
-
* @category
|
|
88
|
+
* @category services
|
|
89
89
|
* @since 4.0.0
|
|
90
90
|
*/
|
|
91
91
|
export declare const UndiciOptions: Context.Reference<Partial<Undici.Dispatcher.RequestOptions<null>>>;
|
|
@@ -94,7 +94,7 @@ export declare const UndiciOptions: Context.Reference<Partial<Undici.Dispatcher.
|
|
|
94
94
|
* `Dispatcher`, converts Effect HTTP bodies to Undici bodies, and maps
|
|
95
95
|
* transport and decode failures to `HttpClientError`.
|
|
96
96
|
*
|
|
97
|
-
* @category
|
|
97
|
+
* @category constructors
|
|
98
98
|
* @since 4.0.0
|
|
99
99
|
*/
|
|
100
100
|
export declare const makeUndici: Effect.Effect<Client.HttpClient, never, Dispatcher>;
|
|
@@ -102,7 +102,7 @@ export declare const makeUndici: Effect.Effect<Client.HttpClient, never, Dispatc
|
|
|
102
102
|
* Provides an Undici-backed `HttpClient` using the current `Dispatcher`
|
|
103
103
|
* service.
|
|
104
104
|
*
|
|
105
|
-
* @category
|
|
105
|
+
* @category layers
|
|
106
106
|
* @since 4.0.0
|
|
107
107
|
*/
|
|
108
108
|
export declare const layerUndiciNoDispatcher: Layer.Layer<Client.HttpClient, never, Dispatcher>;
|
|
@@ -110,7 +110,7 @@ export declare const layerUndiciNoDispatcher: Layer.Layer<Client.HttpClient, nev
|
|
|
110
110
|
* Provides an Undici-backed `HttpClient` together with a scoped default
|
|
111
111
|
* Undici `Agent` dispatcher.
|
|
112
112
|
*
|
|
113
|
-
* @category
|
|
113
|
+
* @category layers
|
|
114
114
|
* @since 4.0.0
|
|
115
115
|
*/
|
|
116
116
|
export declare const layerUndici: Layer.Layer<Client.HttpClient>;
|
|
@@ -122,7 +122,7 @@ declare const HttpAgent_base: Context.ServiceClass<HttpAgent, "@effect/platform-
|
|
|
122
122
|
* Service tag for the paired Node `http` and `https` agents used by the
|
|
123
123
|
* node:http-backed HTTP client.
|
|
124
124
|
*
|
|
125
|
-
* @category
|
|
125
|
+
* @category services
|
|
126
126
|
* @since 4.0.0
|
|
127
127
|
*/
|
|
128
128
|
export declare class HttpAgent extends HttpAgent_base {
|
|
@@ -131,7 +131,7 @@ export declare class HttpAgent extends HttpAgent_base {
|
|
|
131
131
|
* Acquires Node `http` and `https` agents with the supplied options and
|
|
132
132
|
* destroys both agents when the enclosing scope is finalized.
|
|
133
133
|
*
|
|
134
|
-
* @category
|
|
134
|
+
* @category resource management
|
|
135
135
|
* @since 4.0.0
|
|
136
136
|
*/
|
|
137
137
|
export declare const makeAgent: (options?: Https.AgentOptions) => Effect.Effect<HttpAgent["Service"], never, Scope.Scope>;
|
|
@@ -139,7 +139,7 @@ export declare const makeAgent: (options?: Https.AgentOptions) => Effect.Effect<
|
|
|
139
139
|
* Provides the `HttpAgent` service using scoped Node `http` and `https`
|
|
140
140
|
* agents configured with the supplied options.
|
|
141
141
|
*
|
|
142
|
-
* @category
|
|
142
|
+
* @category layers
|
|
143
143
|
* @since 4.0.0
|
|
144
144
|
*/
|
|
145
145
|
export declare const layerAgentOptions: (options?: Https.AgentOptions | undefined) => Layer.Layer<HttpAgent>;
|
|
@@ -147,7 +147,7 @@ export declare const layerAgentOptions: (options?: Https.AgentOptions | undefine
|
|
|
147
147
|
* Provides the `HttpAgent` service using default scoped Node `http` and
|
|
148
148
|
* `https` agents.
|
|
149
149
|
*
|
|
150
|
-
* @category
|
|
150
|
+
* @category layers
|
|
151
151
|
* @since 4.0.0
|
|
152
152
|
*/
|
|
153
153
|
export declare const layerAgent: Layer.Layer<HttpAgent>;
|
|
@@ -156,7 +156,7 @@ export declare const layerAgent: Layer.Layer<HttpAgent>;
|
|
|
156
156
|
* current `HttpAgent`, streaming request bodies, and wrapping Node responses
|
|
157
157
|
* as `HttpClientResponse` values.
|
|
158
158
|
*
|
|
159
|
-
* @category
|
|
159
|
+
* @category constructors
|
|
160
160
|
* @since 4.0.0
|
|
161
161
|
*/
|
|
162
162
|
export declare const makeNodeHttp: Effect.Effect<Client.HttpClient, never, HttpAgent>;
|
|
@@ -164,7 +164,7 @@ export declare const makeNodeHttp: Effect.Effect<Client.HttpClient, never, HttpA
|
|
|
164
164
|
* Provides a node:http-backed `HttpClient` using the current `HttpAgent`
|
|
165
165
|
* service.
|
|
166
166
|
*
|
|
167
|
-
* @category
|
|
167
|
+
* @category layers
|
|
168
168
|
* @since 4.0.0
|
|
169
169
|
*/
|
|
170
170
|
export declare const layerNodeHttpNoAgent: Layer.Layer<Client.HttpClient, never, HttpAgent>;
|
|
@@ -172,7 +172,7 @@ export declare const layerNodeHttpNoAgent: Layer.Layer<Client.HttpClient, never,
|
|
|
172
172
|
* Provides a node:http-backed `HttpClient` together with default scoped Node
|
|
173
173
|
* `http` and `https` agents.
|
|
174
174
|
*
|
|
175
|
-
* @category
|
|
175
|
+
* @category layers
|
|
176
176
|
* @since 4.0.0
|
|
177
177
|
*/
|
|
178
178
|
export declare const layerNodeHttp: Layer.Layer<Client.HttpClient>;
|