import { HttpApiEndpoint, HttpApiGroup, HttpApiSchema } from "@effect/platform";import { Schema } from "effect";import { ScopeId } from "@executor/sdk"; import { OnePasswordError } from "../sdk/errors";import { OnePasswordConfig, Vault, ConnectionStatus } from "../sdk/types"; // ---------------------------------------------------------------------------// Params// --------------------------------------------------------------------------- const scopeIdParam = HttpApiSchema.param("scopeId", ScopeId); // ---------------------------------------------------------------------------// Payloads// --------------------------------------------------------------------------- const ConfigurePayload = OnePasswordConfig; const ListVaultsParams = Schema.Struct({ authKind: Schema.Literal("desktop-app", "service-account"), account: Schema.String,}); // ---------------------------------------------------------------------------// Responses// --------------------------------------------------------------------------- const ListVaultsResponse = Schema.Struct({ vaults: Schema.Array(Vault),}); const GetConfigResponse = Schema.NullOr(OnePasswordConfig); // ---------------------------------------------------------------------------// Errors with HTTP status// --------------------------------------------------------------------------- const OpError = OnePasswordError.annotations( HttpApiSchema.annotations({ status: 502 }),); // ---------------------------------------------------------------------------// Group// --------------------------------------------------------------------------- export class OnePasswordGroup extends HttpApiGroup.make("onepassword") .add( HttpApiEndpoint.get("getConfig")`/scopes/${scopeIdParam}/onepassword/config` .addSuccess(GetConfigResponse), ) .add( HttpApiEndpoint.put("configure")`/scopes/${scopeIdParam}/onepassword/config` .setPayload(ConfigurePayload) .addSuccess(Schema.Void) .addError(OpError), ) .add( HttpApiEndpoint.del("removeConfig")`/scopes/${scopeIdParam}/onepassword/config` .addSuccess(Schema.Void), ) .add( HttpApiEndpoint.get("status")`/scopes/${scopeIdParam}/onepassword/status` .addSuccess(ConnectionStatus) .addError(OpError), ) .add( HttpApiEndpoint.get("listVaults")`/scopes/${scopeIdParam}/onepassword/vaults` .setUrlParams(ListVaultsParams) .addSuccess(ListVaultsResponse) .addError(OpError), ) .prefix("/v1") {}
import { HttpApiEndpoint, HttpApiGroup, HttpApiSchema } from "@effect/platform";
import { Schema } from "effect";
import { ScopeId } from "@executor/sdk";
import { OnePasswordError } from "../sdk/errors";
import { OnePasswordConfig, Vault, ConnectionStatus } from "../sdk/types";
// ---------------------------------------------------------------------------
// Params
// ---------------------------------------------------------------------------
const scopeIdParam = HttpApiSchema.param("scopeId", ScopeId);
// ---------------------------------------------------------------------------
// Payloads
// ---------------------------------------------------------------------------
const ConfigurePayload = OnePasswordConfig;
const ListVaultsParams = Schema.Struct({
authKind: Schema.Literal("desktop-app", "service-account"),
account: Schema.String,
});
// ---------------------------------------------------------------------------
// Responses
// ---------------------------------------------------------------------------
const ListVaultsResponse = Schema.Struct({
vaults: Schema.Array(Vault),
});
const GetConfigResponse = Schema.NullOr(OnePasswordConfig);
// ---------------------------------------------------------------------------
// Errors with HTTP status
// ---------------------------------------------------------------------------
const OpError = OnePasswordError.annotations(
HttpApiSchema.annotations({ status: 502 }),
);
// ---------------------------------------------------------------------------
// Group
// ---------------------------------------------------------------------------
export class OnePasswordGroup extends HttpApiGroup.make("onepassword")
.add(
HttpApiEndpoint.get("getConfig")`/scopes/${scopeIdParam}/onepassword/config`
.addSuccess(GetConfigResponse),
)
.add(
HttpApiEndpoint.put("configure")`/scopes/${scopeIdParam}/onepassword/config`
.setPayload(ConfigurePayload)
.addSuccess(Schema.Void)
.addError(OpError),
)
.add(
HttpApiEndpoint.del("removeConfig")`/scopes/${scopeIdParam}/onepassword/config`
.addSuccess(Schema.Void),
)
.add(
HttpApiEndpoint.get("status")`/scopes/${scopeIdParam}/onepassword/status`
.addSuccess(ConnectionStatus)
.addError(OpError),
)
.add(
HttpApiEndpoint.get("listVaults")`/scopes/${scopeIdParam}/onepassword/vaults`
.setUrlParams(ListVaultsParams)
.addSuccess(ListVaultsResponse)
.addError(OpError),
)
.prefix("/v1") {}