refactor: unwrap McpAuth namespace + self-reexport (#22942)

This commit is contained in:
Kit Langton
2026-04-17 00:01:12 +00:00
committed by GitHub
parent cde105e7a8
commit fdd5b77bfd
+18 -18
View File
@@ -4,35 +4,34 @@ import { Global } from "../global"
import { Effect, Layer, Context } from "effect"
import { AppFileSystem } from "@opencode-ai/shared/filesystem"
export namespace McpAuth {
export const Tokens = z.object({
export const Tokens = z.object({
accessToken: z.string(),
refreshToken: z.string().optional(),
expiresAt: z.number().optional(),
scope: z.string().optional(),
})
export type Tokens = z.infer<typeof Tokens>
})
export type Tokens = z.infer<typeof Tokens>
export const ClientInfo = z.object({
export const ClientInfo = z.object({
clientId: z.string(),
clientSecret: z.string().optional(),
clientIdIssuedAt: z.number().optional(),
clientSecretExpiresAt: z.number().optional(),
})
export type ClientInfo = z.infer<typeof ClientInfo>
})
export type ClientInfo = z.infer<typeof ClientInfo>
export const Entry = z.object({
export const Entry = z.object({
tokens: Tokens.optional(),
clientInfo: ClientInfo.optional(),
codeVerifier: z.string().optional(),
oauthState: z.string().optional(),
serverUrl: z.string().optional(),
})
export type Entry = z.infer<typeof Entry>
})
export type Entry = z.infer<typeof Entry>
const filepath = path.join(Global.Path.data, "mcp-auth.json")
const filepath = path.join(Global.Path.data, "mcp-auth.json")
export interface Interface {
export interface Interface {
readonly all: () => Effect.Effect<Record<string, Entry>>
readonly get: (mcpName: string) => Effect.Effect<Entry | undefined>
readonly getForUrl: (mcpName: string, serverUrl: string) => Effect.Effect<Entry | undefined>
@@ -46,11 +45,11 @@ export namespace McpAuth {
readonly getOAuthState: (mcpName: string) => Effect.Effect<string | undefined>
readonly clearOAuthState: (mcpName: string) => Effect.Effect<void>
readonly isTokenExpired: (mcpName: string) => Effect.Effect<boolean | null>
}
}
export class Service extends Context.Service<Service, Interface>()("@opencode/McpAuth") {}
export class Service extends Context.Service<Service, Interface>()("@opencode/McpAuth") {}
export const layer = Layer.effect(
export const layer = Layer.effect(
Service,
Effect.gen(function* () {
const fs = yield* AppFileSystem.Service
@@ -138,7 +137,8 @@ export namespace McpAuth {
isTokenExpired,
})
}),
)
)
export const defaultLayer = layer.pipe(Layer.provide(AppFileSystem.defaultLayer))
}
export const defaultLayer = layer.pipe(Layer.provide(AppFileSystem.defaultLayer))
export * as McpAuth from "./auth"