import { ProviderAuth } from "@/provider" import { Effect, Layer } from "effect" import { HttpApi, HttpApiBuilder, HttpApiEndpoint, HttpApiGroup, OpenApi } from "effect/unstable/httpapi" const root = "/provider" export const ProviderApi = HttpApi.make("provider") .add( HttpApiGroup.make("provider") .add( HttpApiEndpoint.get("auth", `${root}/auth`, { success: ProviderAuth.Methods, }).annotateMerge( OpenApi.annotations({ identifier: "provider.auth", summary: "Get provider auth methods", description: "Retrieve available authentication methods for all AI providers.", }), ), ) .annotateMerge( OpenApi.annotations({ title: "provider", description: "Experimental HttpApi provider routes.", }), ), ) .annotateMerge( OpenApi.annotations({ title: "opencode experimental HttpApi", version: "0.0.1", description: "Experimental HttpApi surface for selected instance routes.", }), ) export const providerHandlers = Layer.unwrap( Effect.gen(function* () { const svc = yield* ProviderAuth.Service const auth = Effect.fn("ProviderHttpApi.auth")(function* () { return yield* svc.methods() }) return HttpApiBuilder.group(ProviderApi, "provider", (handlers) => handlers.handle("auth", auth)) }), ).pipe(Layer.provide(ProviderAuth.defaultLayer))