|
|
@@ -28,7 +28,7 @@ import { McpAuth } from "./auth"
|
|
|
import { EventV2Bridge } from "@/event-v2-bridge"
|
|
|
import { TuiEvent } from "@/server/tui-event"
|
|
|
import open from "open"
|
|
|
-import { Cause, Effect, Exit, Layer, Option, Context, Schema, Stream } from "effect"
|
|
|
+import { Cause, Effect, Exit, Layer, Context, Schema, Stream } from "effect"
|
|
|
import { EffectBridge } from "@/effect/bridge"
|
|
|
import { InstanceState } from "@/effect/instance-state"
|
|
|
import { ChildProcess, ChildProcessSpawner } from "effect/unstable/process"
|
|
|
@@ -928,16 +928,17 @@ export const layer = Layer.effect(
|
|
|
const pending = pendingOAuthTransports.get(mcpName)
|
|
|
if (!pending) throw new Error(`No pending OAuth flow for MCP server: ${mcpName}`)
|
|
|
|
|
|
- const result = yield* Effect.tryPromise({
|
|
|
- try: () => pending.transport.finishAuth(authorizationCode).then(() => true as const),
|
|
|
- catch: (error) => {
|
|
|
- return error
|
|
|
- },
|
|
|
- }).pipe(Effect.option)
|
|
|
+ const error = yield* Effect.tryPromise({
|
|
|
+ try: () => pending.transport.finishAuth(authorizationCode),
|
|
|
+ catch: (error) => error,
|
|
|
+ }).pipe(
|
|
|
+ Effect.match({
|
|
|
+ onFailure: (error) => (error instanceof Error ? error.message : String(error)),
|
|
|
+ onSuccess: () => undefined,
|
|
|
+ }),
|
|
|
+ )
|
|
|
|
|
|
- if (Option.isNone(result)) {
|
|
|
- return { status: "failed", error: "OAuth completion failed" } satisfies Status
|
|
|
- }
|
|
|
+ if (error) return { status: "failed", error: `OAuth completion failed: ${error}` } satisfies Status
|
|
|
|
|
|
yield* Effect.promise(() => pending.provider?.commit() ?? Promise.resolve())
|
|
|
yield* auth.clearCodeVerifier(mcpName)
|