UNPKG

the-moby-effect

Version:
220 lines 8.6 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 SchemaGetter from "effect/SchemaGetter"; 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 { NetworkConnectOptions, NetworkCreateRequest, NetworkInspect } from "../generated/index.js"; import { ContainerIdentifier, NetworkIdentifier } from "../schemas/id.js"; import { DockerError } from "./circular.js"; import { BadRequest, Forbidden, InternalServerError, NotFound } from "./errors.js"; import { BooleanFilter, StringFilter } from "./filters.js"; /** @since 1.0.0 */ export const ListFilters = /*#__PURE__*/Schema.fromJsonString(/*#__PURE__*/Schema.Struct({ dangling: /*#__PURE__*/Schema.optional(/*#__PURE__*/BooleanFilter("dangling")), driver: /*#__PURE__*/Schema.optional(/*#__PURE__*/Schema.Array(Schema.String)), id: /*#__PURE__*/Schema.optional(/*#__PURE__*/Schema.Array(Schema.String)), label: /*#__PURE__*/Schema.optional(/*#__PURE__*/Schema.Array(Schema.String)), name: /*#__PURE__*/Schema.optional(/*#__PURE__*/Schema.Array(Schema.String)), scope: /*#__PURE__*/Schema.optional(/*#__PURE__*/Schema.Array(Schema.String)), type: /*#__PURE__*/Schema.optional(/*#__PURE__*/Schema.Tuple([Schema.Literals(["custom", "builtin"])]).pipe(/*#__PURE__*/Schema.decodeTo(/*#__PURE__*/Schema.Literals(["custom", "builtin"]), { decode: /*#__PURE__*/SchemaGetter.transform(([value]) => value), encode: /*#__PURE__*/SchemaGetter.transform(value => [value]) }))) })); /** @since 1.0.0 */ export const PruneFilters = /*#__PURE__*/Schema.fromJsonString(/*#__PURE__*/Schema.Struct({ label: /*#__PURE__*/Schema.optional(/*#__PURE__*/Schema.Array(Schema.String)), until: /*#__PURE__*/Schema.optional(StringFilter) })); /** @see https://docs.docker.com/reference/api/engine/latest/#tag/Network/operation/NetworkList */ const listNetworksEndpoint = /*#__PURE__*/HttpApiEndpoint.get("list", "/", { query: { filters: /*#__PURE__*/Schema.optional(ListFilters) }, success: /*#__PURE__*/Schema.Array(NetworkInspect), // 200 OK error: [InternalServerError] }); /** @see https://docs.docker.com/reference/api/engine/latest/#tag/Network/operation/NetworkInspect */ const inspectNetworkEndpoint = /*#__PURE__*/HttpApiEndpoint.get("inspect", "/:id", { params: { id: Schema.String }, query: { verbose: /*#__PURE__*/Schema.optional(Schema.Boolean), scope: /*#__PURE__*/Schema.optional(Schema.String) }, success: NetworkInspect, // 200 OK error: [NotFound, // 404 No such network InternalServerError] }); /** @see https://docs.docker.com/reference/api/engine/latest/#tag/Network/operation/NetworkDelete */ const deleteNetworkEndpoint = /*#__PURE__*/HttpApiEndpoint.delete("delete", "/:id", { params: { id: Schema.String }, success: HttpApiSchema.NoContent, // 204 No Content error: [Forbidden, // 403 Not supported for pre-defined networks NotFound, // 404 No such network InternalServerError] }); /** @see https://docs.docker.com/reference/api/engine/latest/#tag/Network/operation/NetworkCreate */ const createNetworkEndpoint = /*#__PURE__*/HttpApiEndpoint.post("create", "/create", { payload: NetworkCreateRequest, success: /*#__PURE__*/Schema.Struct({ Id: NetworkIdentifier }).pipe(/*#__PURE__*/HttpApiSchema.status(201)), // 201 Created error: [BadRequest, // 400 Bad parameter Forbidden, // 403 Forbidden operation NotFound, // 404 Plugin not found InternalServerError] }); /** @see https://docs.docker.com/reference/api/engine/latest/#tag/Network/operation/NetworkConnect */ const connectNetworkEndpoint = /*#__PURE__*/HttpApiEndpoint.post("connect", "/:id/connect", { params: { id: Schema.String }, payload: NetworkConnectOptions, success: /*#__PURE__*/HttpApiSchema.Empty(200), // 200 OK error: [BadRequest, // 400 Bad parameter Forbidden, // 403 Forbidden operation NotFound, // 404 Plugin not found InternalServerError] }); /** @see https://docs.docker.com/reference/api/engine/latest/#tag/Network/operation/NetworkDisconnect */ const disconnectNetworkEndpoint = /*#__PURE__*/HttpApiEndpoint.post("disconnect", "/:id/disconnect", { params: { id: Schema.String }, payload: /*#__PURE__*/Schema.Struct({ Container: ContainerIdentifier, Force: Schema.Boolean }), success: /*#__PURE__*/HttpApiSchema.Empty(200), // 200 OK error: [Forbidden, // 403 Forbidden operation NotFound, // 404 Plugin not found InternalServerError] }); /** @see https://docs.docker.com/reference/api/engine/latest/#tag/Network/operation/NetworkPrune */ const pruneNetworkEndpoint = /*#__PURE__*/HttpApiEndpoint.post("prune", "/prune", { query: { filters: /*#__PURE__*/Schema.optional(PruneFilters) }, success: /*#__PURE__*/Schema.Struct({ NetworksDeleted: /*#__PURE__*/Schema.NullishOr(/*#__PURE__*/Schema.Array(Schema.String)) }), // 200 OK error: [InternalServerError] }); /** @see https://docs.docker.com/reference/api/engine/latest/#tag/Network */ const NetworksGroup = /*#__PURE__*/HttpApiGroup.make("networks").add(listNetworksEndpoint, createNetworkEndpoint, inspectNetworkEndpoint, deleteNetworkEndpoint, connectNetworkEndpoint, disconnectNetworkEndpoint, pruneNetworkEndpoint).prefix("/networks"); /** * @since 1.0.0 * @category HttpApi * @see https://docs.docker.com/reference/api/engine/latest/#tag/Network */ export const NetworksApi = /*#__PURE__*/HttpApi.make("NetworksApi").add(NetworksGroup); /** * @since 1.0.0 * @category Services * @see https://docs.docker.com/reference/api/engine/latest/#tag/Network */ export class Networks extends /*#__PURE__*/Context.Service()("@the-moby-effect/endpoints/Networks", { make: /*#__PURE__*/Effect.gen(function* () { const httpClient = yield* HttpClient.HttpClient; const NetworksError = DockerError.WrapForModule("networks"); const client = yield* HttpApiClient.group(NetworksApi, { group: "networks", httpClient }); const list_ = filters => client.list({ query: { filters } }).pipe(Effect.mapError(NetworksError("list"))); const create_ = payload => NetworkCreateRequest.makeEffect(payload).pipe(Effect.flatMap(payload => client.create({ payload })), Effect.mapError(NetworksError("create"))); const inspect_ = (id, options) => client.inspect({ params: { id }, query: { ...options } }).pipe(Effect.mapError(NetworksError("inspect"))); const delete_ = id => client.delete({ params: { id } }).pipe(Effect.mapError(NetworksError("delete"))); const connect_ = (id, payload) => NetworkConnectOptions.makeEffect(payload).pipe(Effect.flatMap(payload => client.connect({ params: { id }, payload })), Effect.mapError(NetworksError("connect"))); const disconnect_ = (id, containerId, options) => client.disconnect({ params: { id }, payload: { Container: containerId, Force: options?.force ?? false } }).pipe(Effect.mapError(NetworksError("disconnect"))); const prune_ = filters => client.prune({ query: { filters } }).pipe(Effect.mapError(NetworksError("prune"))); return { list: list_, create: create_, inspect: inspect_, delete: delete_, connect: connect_, disconnect: disconnect_, prune: prune_ }; }) }) {} /** * @since 1.0.0 * @category Layers * @see https://docs.docker.com/reference/api/engine/latest/#tag/Network */ export const NetworksLayer = /*#__PURE__*/Layer.effect(Networks, Networks.make); /** * @since 1.0.0 * @category Layers * @see https://docs.docker.com/reference/api/engine/latest/#tag/Network */ export const NetworksLayerLocalSocket = /*#__PURE__*/NetworksLayer.pipe(/*#__PURE__*/Layer.provide(/*#__PURE__*/makeAgnosticHttpClientLayer(/*#__PURE__*/MobyConnectionOptions.socket({ socketPath: "/var/run/docker.sock" })))); //# sourceMappingURL=networks.js.map