73 lines
2.3 KiB
TypeScript
73 lines
2.3 KiB
TypeScript
import { Auth } from "@/auth"
|
|
import { ProviderID } from "@/provider/schema"
|
|
import { Schema } from "effect"
|
|
import { HttpApi, HttpApiEndpoint, HttpApiGroup, OpenApi } from "effect/unstable/httpapi"
|
|
|
|
const AuthParams = Schema.Struct({
|
|
providerID: ProviderID,
|
|
})
|
|
|
|
const LogQuery = Schema.Struct({
|
|
directory: Schema.optional(Schema.String),
|
|
workspace: Schema.optional(Schema.String),
|
|
})
|
|
|
|
const LogInput = Schema.Struct({
|
|
service: Schema.String.annotate({ description: "Service name for the log entry" }),
|
|
level: Schema.Union([
|
|
Schema.Literal("debug"),
|
|
Schema.Literal("info"),
|
|
Schema.Literal("error"),
|
|
Schema.Literal("warn"),
|
|
]).annotate({ description: "Log level" }),
|
|
message: Schema.String.annotate({ description: "Log message" }),
|
|
extra: Schema.optional(Schema.Record(Schema.String, Schema.Unknown)).annotate({
|
|
description: "Additional metadata for the log entry",
|
|
}),
|
|
}).annotate({ identifier: "AppLogInput" })
|
|
|
|
export const ControlPaths = {
|
|
auth: "/auth/:providerID",
|
|
log: "/log",
|
|
} as const
|
|
|
|
export const ControlApi = HttpApi.make("control")
|
|
.add(
|
|
HttpApiGroup.make("control")
|
|
.add(
|
|
HttpApiEndpoint.put("authSet", ControlPaths.auth, {
|
|
params: AuthParams,
|
|
payload: Auth.Info,
|
|
success: Schema.Boolean,
|
|
}).annotateMerge(
|
|
OpenApi.annotations({
|
|
identifier: "auth.set",
|
|
summary: "Set auth credentials",
|
|
description: "Set authentication credentials",
|
|
}),
|
|
),
|
|
HttpApiEndpoint.delete("authRemove", ControlPaths.auth, {
|
|
params: AuthParams,
|
|
success: Schema.Boolean,
|
|
}).annotateMerge(
|
|
OpenApi.annotations({
|
|
identifier: "auth.remove",
|
|
summary: "Remove auth credentials",
|
|
description: "Remove authentication credentials",
|
|
}),
|
|
),
|
|
HttpApiEndpoint.post("log", ControlPaths.log, {
|
|
query: LogQuery,
|
|
payload: LogInput,
|
|
success: Schema.Boolean,
|
|
}).annotateMerge(
|
|
OpenApi.annotations({
|
|
identifier: "app.log",
|
|
summary: "Write log",
|
|
description: "Write a log entry to the server logs with specified level and metadata.",
|
|
}),
|
|
),
|
|
)
|
|
.annotateMerge(OpenApi.annotations({ title: "control", description: "Control plane routes." })),
|
|
)
|