the-moby-effect
Version:
Moby/Docker API client built using effect-ts
74 lines • 3 kB
JavaScript
import * as Context from "effect/Context";
import * as Effect from "effect/Effect";
import * as Layer from "effect/Layer";
import * as Schema from "effect/Schema";
import * as HttpClient from "effect/unstable/http/HttpClient";
import * as HttpApi from "effect/unstable/httpapi/HttpApi";
import * as HttpApiClient from "effect/unstable/httpapi/HttpApiClient";
import * as HttpApiEndpoint from "effect/unstable/httpapi/HttpApiEndpoint";
import * as HttpApiGroup from "effect/unstable/httpapi/HttpApiGroup";
import * as HttpApiSchema from "effect/unstable/httpapi/HttpApiSchema";
import { MobyConnectionOptions } from "../../MobyConnection.js";
import { makeAgnosticHttpClientLayer } from "../../MobyPlatforms.js";
import { hijackResponseUnsafe } from "../demux/hijack.js";
import { DockerError } from "./circular.js";
/** @see https://docs.docker.com/reference/api/engine/latest/#tag/Session/operation/Session */
const sessionEndpoint = /*#__PURE__*/HttpApiEndpoint.post("session", "/session", {
headers: {
Upgrade: /*#__PURE__*/Schema.Literal("h2c"),
Connection: /*#__PURE__*/Schema.Literal("Upgrade")
},
success: [/*#__PURE__*/HttpApiSchema.Empty(101),
/*#__PURE__*/
// 101 Switching Protocols
HttpApiSchema.Empty(200) // 200 OK
]
});
/** @see https://docs.docker.com/reference/api/engine/latest/#tag/Session */
const SessionGroup = /*#__PURE__*/HttpApiGroup.make("session").add(sessionEndpoint);
/**
* @since 1.0.0
* @category HttpApi
* @see https://docs.docker.com/reference/api/engine/latest/#tag/Session
*/
export const SessionApi = /*#__PURE__*/HttpApi.make("SessionApi").add(SessionGroup);
/**
* @since 1.0.0
* @category Services
* @see https://docs.docker.com/reference/api/engine/latest/#tag/Session
*/
export class Sessions extends /*#__PURE__*/Context.Service()("@the-moby-effect/endpoints/Session", {
make: /*#__PURE__*/Effect.gen(function* () {
const httpClient = yield* HttpClient.HttpClient;
const SessionsError = DockerError.WrapForModule("session");
const client = yield* HttpApiClient.group(SessionApi, {
group: "session",
httpClient
});
const session_ = () => client.session({
headers: {
Upgrade: "h2c",
Connection: "Upgrade"
},
responseMode: "response-only"
}).pipe(Effect.flatMap(hijackResponseUnsafe), Effect.mapError(SessionsError("session")));
return {
session: session_
};
})
}) {}
/**
* @since 1.0.0
* @category Layers
* @see https://docs.docker.com/reference/api/engine/latest/#tag/Session
*/
export const SessionsLayer = /*#__PURE__*/Layer.effect(Sessions, Sessions.make);
/**
* @since 1.0.0
* @category Layers
* @see https://docs.docker.com/reference/api/engine/latest/#tag/Session
*/
export const SessionsLayerLocalSocket = /*#__PURE__*/SessionsLayer.pipe(/*#__PURE__*/Layer.provide(/*#__PURE__*/makeAgnosticHttpClientLayer(/*#__PURE__*/MobyConnectionOptions.socket({
socketPath: "/var/run/docker.sock"
}))));
//# sourceMappingURL=session.js.map