UNPKG

the-moby-effect

Version:
154 lines 5.66 kB
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 { SwarmNode, SwarmNodeSpec } from "../generated/index.js"; import { DockerError } from "./circular.js"; import { BadRequest, InternalServerError, NotFound, ServiceUnavailable } from "./errors.js"; /** @since 1.0.0 */ export const ListFilters = /*#__PURE__*/Schema.fromJsonString(/*#__PURE__*/Schema.Struct({ id: /*#__PURE__*/Schema.optional(/*#__PURE__*/Schema.Array(Schema.String)), label: /*#__PURE__*/Schema.optional(/*#__PURE__*/Schema.Array(Schema.String)), membership: /*#__PURE__*/Schema.optional(/*#__PURE__*/Schema.Array(/*#__PURE__*/Schema.Literals(["accepted", "pending"]))), name: /*#__PURE__*/Schema.optional(/*#__PURE__*/Schema.Array(Schema.String)), "node.label": /*#__PURE__*/Schema.optional(/*#__PURE__*/Schema.Array(Schema.String)), role: /*#__PURE__*/Schema.optional(/*#__PURE__*/Schema.Array(/*#__PURE__*/Schema.Literals(["manager", "worker"]))) })); /** @see https://docs.docker.com/reference/api/engine/latest/#tag/Node/operation/NodeList */ const listNodesEndpoint = /*#__PURE__*/HttpApiEndpoint.get("list", "/", { query: { filters: /*#__PURE__*/Schema.optional(ListFilters) }, success: /*#__PURE__*/Schema.Array(SwarmNode), // 200 OK error: [ServiceUnavailable, // 503 Node is not part of a swarm InternalServerError] }); /** @see https://docs.docker.com/reference/api/engine/latest/#tag/Node/operation/NodeInspect */ const inspectNodeEndpoint = /*#__PURE__*/HttpApiEndpoint.get("inspect", "/:id", { params: { id: Schema.String }, success: SwarmNode, // 200 OK error: [NotFound, // 404 No such node ServiceUnavailable, // 503 Node is not part of a swarm InternalServerError] }); /** @see https://docs.docker.com/reference/api/engine/latest/#tag/Node/operation/NodeDelete */ const deleteNodeEndpoint = /*#__PURE__*/HttpApiEndpoint.delete("delete", "/:id", { params: { id: Schema.String }, query: { force: /*#__PURE__*/Schema.optional(Schema.Boolean) }, success: /*#__PURE__*/HttpApiSchema.Empty(200), // 200 OK error: [NotFound, // 404 No such node ServiceUnavailable, // 503 Node is not part of a swarm InternalServerError] }); /** @see https://docs.docker.com/reference/api/engine/latest/#tag/Node/operation/NodeUpdate */ const updateNodeEndpoint = /*#__PURE__*/HttpApiEndpoint.post("update", "/:id/update", { params: { id: Schema.String }, query: { version: Schema.Number }, payload: SwarmNodeSpec, success: /*#__PURE__*/HttpApiSchema.Empty(200), // 200 OK error: [BadRequest, // 400 Bad parameter NotFound, // 404 No such node ServiceUnavailable, // 503 Node is not part of a swarm InternalServerError] }); /** @see https://docs.docker.com/reference/api/engine/latest/#tag/Node */ const NodesGroup = /*#__PURE__*/HttpApiGroup.make("nodes").add(listNodesEndpoint, inspectNodeEndpoint, deleteNodeEndpoint, updateNodeEndpoint).prefix("/nodes"); /** * @since 1.0.0 * @category HttpApi * @see https://docs.docker.com/reference/api/engine/latest/#tag/Node */ export const NodesApi = /*#__PURE__*/HttpApi.make("NodesApi").add(NodesGroup); /** * @since 1.0.0 * @category Services * @see https://docs.docker.com/reference/api/engine/latest/#tag/Node */ export class Nodes extends /*#__PURE__*/Context.Service()("@the-moby-effect/endpoints/Nodes", { make: /*#__PURE__*/Effect.gen(function* () { const httpClient = yield* HttpClient.HttpClient; const NodesError = DockerError.WrapForModule("nodes"); const client = yield* HttpApiClient.group(NodesApi, { group: "nodes", httpClient }); const list_ = filters => client.list({ query: { filters } }).pipe(Effect.mapError(NodesError("list"))); const inspect_ = id => client.inspect({ params: { id } }).pipe(Effect.mapError(NodesError("inspect"))); const delete_ = (id, options) => client.delete({ params: { id }, query: { ...options } }).pipe(Effect.mapError(NodesError("delete"))); const update_ = (id, version, payload) => SwarmNodeSpec.makeEffect(payload).pipe(Effect.flatMap(payload => client.update({ params: { id }, query: { version }, payload })), Effect.mapError(NodesError("update"))); return { list: list_, inspect: inspect_, delete: delete_, update: update_ }; }) }) {} /** * @since 1.0.0 * @category Layers * @see https://docs.docker.com/reference/api/engine/latest/#tag/Node */ export const NodesLayer = /*#__PURE__*/Layer.effect(Nodes, Nodes.make); /** * @since 1.0.0 * @category Layers * @see https://docs.docker.com/reference/api/engine/latest/#tag/Node */ export const NodesLayerLocalSocket = /*#__PURE__*/NodesLayer.pipe(/*#__PURE__*/Layer.provide(/*#__PURE__*/makeAgnosticHttpClientLayer(/*#__PURE__*/MobyConnectionOptions.socket({ socketPath: "/var/run/docker.sock" })))); //# sourceMappingURL=nodes.js.map