| 37 | export type FetchHandler = (url: URL) => Response | Promise<Response> | undefined |
| 38 | |
| 39 | export function createFetch(override?: FetchHandler) { |
| 40 | const session = [] as URL[] |
| 41 | const fetch = (async (input: RequestInfo | URL) => { |
| 42 | const url = new URL(input instanceof Request ? input.url : String(input)) |
| 43 | if (url.pathname === "/session") session.push(url) |
| 44 | |
| 45 | const overridden = await override?.(url) |
| 46 | if (overridden) return overridden |
| 47 | |
| 48 | switch (url.pathname) { |
| 49 | case "/agent": |
| 50 | case "/command": |
| 51 | case "/experimental/workspace": |
| 52 | case "/experimental/workspace/status": |
| 53 | case "/formatter": |
| 54 | case "/lsp": |
| 55 | return json([]) |
| 56 | case "/config": |
| 57 | case "/experimental/resource": |
| 58 | case "/mcp": |
| 59 | case "/provider/auth": |
| 60 | case "/session/status": |
| 61 | return json({}) |
| 62 | case "/config/providers": |
| 63 | return json({ providers: {}, default: {} }) |
| 64 | case "/experimental/console": |
| 65 | return json({ consoleManagedProviders: [], switchableOrgCount: 0 }) |
| 66 | case "/path": |
| 67 | return json({ home: "", state: "", config: "", worktree, directory }) |
| 68 | case "/project/current": |
| 69 | return json({ id: "proj_test" }) |
| 70 | case "/provider": |
| 71 | return json({ all: [], default: {}, connected: [] }) |
| 72 | case "/session": |
| 73 | return json([]) |
| 74 | case "/vcs": |
| 75 | return json({ branch: "main" }) |
| 76 | } |
| 77 | |
| 78 | throw new Error(`unexpected request: ${url.pathname}`) |
| 79 | }) as typeof globalThis.fetch |
| 80 | |
| 81 | return { fetch, session } |
| 82 | } |