the-moby-effect
Version:
Moby/Docker API client built using effect-ts
101 lines • 5.55 kB
JavaScript
import * as PlatformError from "@effect/platform/Error";
import * as HttpClient from "@effect/platform/HttpClient";
import * as HttpClientRequest from "@effect/platform/HttpClientRequest";
import * as HttpClientResponse from "@effect/platform/HttpClientResponse";
import * as Effect from "effect/Effect";
import * as Function from "effect/Function";
import * as Option from "effect/Option";
import * as Predicate from "effect/Predicate";
import * as Schema from "effect/Schema";
import * as Tuple from "effect/Tuple";
import { Swarm as SwarmData, SwarmInitRequest, SwarmJoinRequest, SwarmSpec, SwarmUnlockKeyResponse, SwarmUnlockRequest } from "../generated/index.js";
import { maybeAddQueryParameter } from "./common.js";
/**
* @since 1.0.0
* @category Errors
*/
export const SwarmsErrorTypeId = /*#__PURE__*/Symbol.for("@the-moby-effect/endpoints/SwarmsError");
/**
* @since 1.0.0
* @category Errors
*/
export const isSwarmsError = u => Predicate.hasProperty(u, SwarmsErrorTypeId);
/**
* @since 1.0.0
* @category Errors
*/
export class SwarmsError extends /*#__PURE__*/PlatformError.TypeIdError(SwarmsErrorTypeId, "SwarmsError") {
get message() {
return `${this.method}`;
}
}
/**
* Engines can be clustered together in a swarm. Refer to the swarm mode
* documentation for more information.
*
* @since 1.0.0
* @category Tags
* @see https://docs.docker.com/reference/api/engine/latest/#tag/Swarm
*/
export class Swarm extends /*#__PURE__*/Effect.Service()("@the-moby-effect/endpoints/Swarm", {
accessors: false,
dependencies: [],
effect: /*#__PURE__*/Effect.gen(function* () {
const defaultClient = yield* HttpClient.HttpClient;
const client = defaultClient.pipe(HttpClient.filterStatusOk);
/** @see https://docs.docker.com/reference/api/engine/latest/#tag/Swarm/operation/SwarmInspect */
const inspect_ = () => Function.pipe(HttpClientRequest.get("/swarm"), client.execute, Effect.flatMap(HttpClientResponse.schemaBodyJson(SwarmData)), Effect.mapError(cause => new SwarmsError({
method: "inspect",
cause
})));
/** @see https://docs.docker.com/reference/api/engine/latest/#tag/Swarm/operation/SwarmInit */
const init_ = options => Function.pipe(Schema.decode(SwarmInitRequest)(options), Effect.map(body => Tuple.make(HttpClientRequest.post("/swarm/init"), body)), Effect.flatMap(Function.tupled(HttpClientRequest.schemaBodyJson(SwarmInitRequest))), Effect.flatMap(client.execute), Effect.flatMap(HttpClientResponse.schemaBodyJson(Schema.String)), Effect.mapError(cause => new SwarmsError({
method: "init",
cause
})));
/** @see https://docs.docker.com/reference/api/engine/latest/#tag/Swarm/operation/SwarmJoin */
const join_ = options => Function.pipe(Schema.decode(SwarmJoinRequest)(options), Effect.map(body => Tuple.make(HttpClientRequest.post("/swarm/join"), body)), Effect.flatMap(Function.tupled(HttpClientRequest.schemaBodyJson(SwarmJoinRequest))), Effect.flatMap(client.execute), Effect.asVoid, Effect.mapError(cause => new SwarmsError({
method: "join",
cause
})));
/** @see https://docs.docker.com/reference/api/engine/latest/#tag/Swarm/operation/SwarmLeave */
const leave_ = options => Function.pipe(HttpClientRequest.post("/swarm/leave"), maybeAddQueryParameter("force", Option.fromNullable(options.force)), client.execute, Effect.asVoid, Effect.mapError(cause => new SwarmsError({
method: "leave",
cause
})));
/** @see https://docs.docker.com/reference/api/engine/latest/#tag/Swarm/operation/SwarmUpdate */
const update_ = options => Function.pipe(HttpClientRequest.post("/swarm/update"), maybeAddQueryParameter("version", Option.some(options.version)), maybeAddQueryParameter("rotateWorkerToken", Option.fromNullable(options.rotateWorkerToken)), maybeAddQueryParameter("rotateManagerToken", Option.fromNullable(options.rotateManagerToken)), maybeAddQueryParameter("rotateManagerUnlockKey", Option.fromNullable(options.rotateManagerUnlockKey)), HttpClientRequest.schemaBodyJson(SwarmSpec)(options.spec), Effect.flatMap(client.execute), Effect.asVoid, Effect.mapError(cause => new SwarmsError({
method: "update",
cause
})));
/** @see https://docs.docker.com/reference/api/engine/latest/#tag/Swarm/operation/SwarmUnlockkey */
const unlockkey_ = () => Function.pipe(HttpClientRequest.get("/swarm/unlockkey"), client.execute, Effect.flatMap(HttpClientResponse.schemaBodyJson(SwarmUnlockKeyResponse)), Effect.mapError(cause => new SwarmsError({
method: "unlockkey",
cause
})));
/** @see https://docs.docker.com/reference/api/engine/latest/#tag/Swarm/operation/SwarmUnlock */
const unlock_ = options => Function.pipe(Schema.decode(SwarmUnlockRequest)(options), Effect.map(body => Tuple.make(HttpClientRequest.post("/swarm/unlock"), body)), Effect.flatMap(Function.tupled(HttpClientRequest.schemaBodyJson(SwarmUnlockRequest))), Effect.flatMap(client.execute), Effect.asVoid, Effect.mapError(cause => new SwarmsError({
method: "unlock",
cause
})));
return {
inspect: inspect_,
init: init_,
join: join_,
leave: leave_,
update: update_,
unlockkey: unlockkey_,
unlock: unlock_
};
})
}) {}
/**
* Engines can be clustered together in a swarm. Refer to the swarm mode
* documentation for more information.
*
* @since 1.0.0
* @category Layers
* @see https://docs.docker.com/reference/api/engine/latest/#tag/Swarm
*/
export const SwarmLayer = Swarm.Default;
//# sourceMappingURL=swarm.js.map