(
f: (
request: ClientRequest.HttpClientRequest,
url: URL,
signal: AbortSignal,
fiber: Fiber.RuntimeFiber<ClientResponse.HttpClientResponse, Error.HttpClientError>
) => Effect.Effect<ClientResponse.HttpClientResponse, Error.HttpClientError>
)
| 194 | |
| 195 | /** @internal */ |
| 196 | export const make = ( |
| 197 | f: ( |
| 198 | request: ClientRequest.HttpClientRequest, |
| 199 | url: URL, |
| 200 | signal: AbortSignal, |
| 201 | fiber: Fiber.RuntimeFiber<ClientResponse.HttpClientResponse, Error.HttpClientError> |
| 202 | ) => Effect.Effect<ClientResponse.HttpClientResponse, Error.HttpClientError> |
| 203 | ): Client.HttpClient => |
| 204 | makeWith((effect) => |
| 205 | Effect.flatMap(effect, (request) => |
| 206 | Effect.withFiberRuntime((fiber) => { |
| 207 | const scopedController = scopedRequests.get(request) |
| 208 | const controller = scopedController ?? new AbortController() |
| 209 | const urlResult = UrlParams.makeUrl(request.url, request.urlParams, request.hash) |
| 210 | if (urlResult._tag === "Left") { |
| 211 | return Effect.fail(new Error.RequestError({ request, reason: "InvalidUrl", cause: urlResult.left })) |
| 212 | } |
| 213 | const url = urlResult.right |
| 214 | const tracerDisabled = !fiber.getFiberRef(FiberRef.currentTracerEnabled) || |
| 215 | fiber.getFiberRef(currentTracerDisabledWhen)(request) |
| 216 | if (tracerDisabled) { |
| 217 | const effect = f(request, url, controller.signal, fiber) |
| 218 | if (scopedController) return effect |
| 219 | return Effect.uninterruptibleMask((restore) => |
| 220 | Effect.matchCauseEffect(restore(effect), { |
| 221 | onSuccess(response) { |
| 222 | responseRegistry.register(response, controller) |
| 223 | return Effect.succeed(new InterruptibleResponse(response, controller)) |
| 224 | }, |
| 225 | onFailure(cause) { |
| 226 | if (Cause.isInterrupted(cause)) { |
| 227 | controller.abort() |
| 228 | } |
| 229 | return Effect.failCause(cause) |
| 230 | } |
| 231 | }) |
| 232 | ) |
| 233 | } |
| 234 | const nameGenerator = Context.get(fiber.currentContext, SpanNameGenerator) |
| 235 | return Effect.useSpan( |
| 236 | nameGenerator(request), |
| 237 | { kind: "client", captureStackTrace: false }, |
| 238 | (span) => { |
| 239 | span.attribute(ATTR_HTTP_REQUEST_METHOD, request.method) |
| 240 | span.attribute(ATTR_SERVER_ADDRESS, url.origin) |
| 241 | if (url.port !== "") { |
| 242 | span.attribute(ATTR_SERVER_PORT, +url.port) |
| 243 | } |
| 244 | span.attribute(ATTR_URL_FULL, url.toString()) |
| 245 | span.attribute(ATTR_URL_PATH, url.pathname) |
| 246 | span.attribute(ATTR_URL_SCHEME, url.protocol.slice(0, -1)) |
| 247 | const query = url.search.slice(1) |
| 248 | if (query !== "") { |
| 249 | span.attribute(ATTR_URL_QUERY, query) |
| 250 | } |
| 251 | const redactedHeaderNames = fiber.getFiberRef(Headers.currentRedactedNames) |
| 252 | const redactedHeaders = Headers.redact(request.headers, redactedHeaderNames) |
| 253 | for (const name in redactedHeaders) { |
nothing calls this directly
no test coverage detected