MCPcopy
hub / github.com/Effect-TS/effect / sendBody

Function sendBody

packages/platform-node/src/internal/httpClient.ts:80–130  ·  view source on GitHub ↗
(
  nodeRequest: Http.ClientRequest,
  request: ClientRequest.HttpClientRequest,
  body: Body.HttpBody
)

Source from the content-addressed store, hash-verified

78 })
79
80const sendBody = (
81 nodeRequest: Http.ClientRequest,
82 request: ClientRequest.HttpClientRequest,
83 body: Body.HttpBody
84): Effect.Effect<void, Error.RequestError> =>
85 Effect.suspend((): Effect.Effect<void, Error.RequestError> => {
86 switch (body._tag) {
87 case "Empty": {
88 nodeRequest.end()
89 return waitForFinish(nodeRequest, request)
90 }
91 case "Uint8Array":
92 case "Raw": {
93 nodeRequest.end(body.body)
94 return waitForFinish(nodeRequest, request)
95 }
96 case "FormData": {
97 const response = new Response(body.formData)
98
99 response.headers.forEach((value, key) => {
100 nodeRequest.setHeader(key, value)
101 })
102
103 return Effect.tryPromise({
104 try: () => pipeline(Readable.fromWeb(response.body! as any), nodeRequest),
105 catch: (cause) =>
106 new Error.RequestError({
107 request,
108 reason: "Transport",
109 cause
110 })
111 })
112 }
113 case "Stream": {
114 return Stream.run(
115 Stream.mapError(body.stream, (cause) =>
116 new Error.RequestError({
117 request,
118 reason: "Encode",
119 cause
120 })),
121 NodeSink.fromWritable(() => nodeRequest, (cause) =>
122 new Error.RequestError({
123 request,
124 reason: "Transport",
125 cause
126 }))
127 )
128 }
129 }
130 })
131
132const waitForResponse = (nodeRequest: Http.ClientRequest, request: ClientRequest.HttpClientRequest) =>
133 Effect.async<Http.IncomingMessage, Error.RequestError>((resume) => {

Callers 1

fromAgentFunction · 0.70

Calls 3

waitForFinishFunction · 0.85
endMethod · 0.65
runMethod · 0.45

Tested by

no test coverage detected