the-moby-effect
Version:
Moby/Docker API client built using effect-ts
56 lines • 2.29 kB
JavaScript
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