From f0c9c43678d6cd871a2d8b9c6191fa0914b3f2b5 Mon Sep 17 00:00:00 2001 From: Naiyuan Qing <145280634+NevilleQingNY@users.noreply.github.com> Date: Fri, 13 Feb 2026 15:37:08 +0800 Subject: [PATCH] feat(web): add desktop callback API route Server-side redirect to deep link for production builds. More reliable than client-side window.location.href. Co-Authored-By: Claude Opus 4.5 --- apps/web/app/api/desktop/callback/route.ts | 38 ++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 apps/web/app/api/desktop/callback/route.ts diff --git a/apps/web/app/api/desktop/callback/route.ts b/apps/web/app/api/desktop/callback/route.ts new file mode 100644 index 00000000..65e4294d --- /dev/null +++ b/apps/web/app/api/desktop/callback/route.ts @@ -0,0 +1,38 @@ +import { NextRequest, NextResponse } from 'next/server'; + +/** + * Desktop Callback API + * + * Server-side redirect to deep link (multica://auth?...) + * This is more reliable than client-side window.location.href + * + * Reference: Cap/apps/web/app/api/desktop/[...route]/session.ts + */ +export async function GET(request: NextRequest) { + const { searchParams } = request.nextUrl; + const sid = searchParams.get('sid'); + const user = searchParams.get('user'); + const port = searchParams.get('port'); + const platform = searchParams.get('platform') || 'desktop'; + + // Validate required params + if (!sid || !user) { + return NextResponse.json( + { error: 'Missing sid or user parameter' }, + { status: 400 } + ); + } + + // Build callback URL + const params = new URLSearchParams({ sid, user }); + + if (platform === 'web' && port) { + // Dev mode: redirect to local server + const callbackUrl = `http://127.0.0.1:${port}/callback?${params}`; + return NextResponse.redirect(callbackUrl); + } else { + // Production mode: redirect to deep link + const deepLinkUrl = `multica://auth?${params}`; + return NextResponse.redirect(deepLinkUrl); + } +}