UNPKG

the-moby-effect

Version:
56 lines 2.29 kB
import * as Effect from "effect/Effect"; import * as Predicate from "effect/Predicate"; import * as Socket from "effect/unstable/socket/Socket"; import { makeMultiplexedSocket, responseIsMultiplexedResponse } from "./multiplexed.js"; import { makeRawSocket, responseIsRawResponse } from "./raw.js"; /** @internal */ export const hijackResponseUnsafe = response => Effect.flatMap(Effect.promise(() => import("@effect/platform-node/NodeSocket")), nodeSocketLazy => { let current = response; while (Predicate.isNotUndefined(current.original)) current = current.original; const socket = current.source?.socket; if (Predicate.isUndefined(socket)) { return Effect.fail(new Socket.SocketError({ reason: new Socket.SocketReadError({ cause: "Could not find the underlying tcp socket on the http client response" }) })); } return nodeSocketLazy.fromDuplex(Effect.sync(() => socket)); }); /** @internal */ export const responseToMultiplexedStreamSocketOrFailUnsafe = response => { if (!responseIsMultiplexedResponse(response)) { return Effect.fail(new Socket.SocketError({ reason: new Socket.SocketReadError({ cause: `Response with content type "${response.headers["content-type"]}" is not a multiplexed streaming socket` }) })); } return Effect.map(hijackResponseUnsafe(response), makeMultiplexedSocket); }; /** @internal */ export const responseToRawStreamSocketOrFailUnsafe = response => { if (!responseIsRawResponse(response)) { return Effect.fail(new Socket.SocketError({ reason: new Socket.SocketReadError({ cause: `Response with content type "${response.headers["content-type"]}" is not a raw streaming socket` }) })); } return Effect.map(hijackResponseUnsafe(response), makeRawSocket); }; /** @internal */ export const responseToStreamingSocketOrFailUnsafe = response => { if (responseIsMultiplexedResponse(response)) { return responseToMultiplexedStreamSocketOrFailUnsafe(response); } if (responseIsRawResponse(response)) { return responseToRawStreamSocketOrFailUnsafe(response); } return Effect.fail(new Socket.SocketError({ reason: new Socket.SocketReadError({ cause: "Response is not a streaming socket" }) })); }; //# sourceMappingURL=hijack.js.map