ChatGPT-Next-Web/app/api/[provider]/[...path]/route.ts

77 lines
2.3 KiB
TypeScript

import type { NextRequest } from 'next/server';
import { ApiPath } from '@/app/constant';
import { handle as alibabaHandler } from '../../alibaba';
import { handle as anthropicHandler } from '../../anthropic';
import { handle as azureHandler } from '../../azure';
import { handle as baiduHandler } from '../../baidu';
import { handle as bytedanceHandler } from '../../bytedance';
import { handle as chatglmHandler } from '../../glm';
import { handle as googleHandler } from '../../google';
import { handle as iflytekHandler } from '../../iflytek';
import { handle as moonshotHandler } from '../../moonshot';
import { handle as openaiHandler } from '../../openai';
import { handle as proxyHandler } from '../../proxy';
import { handle as stabilityHandler } from '../../stability';
import { handle as xaiHandler } from '../../xai';
async function handle(
req: NextRequest,
{ params }: { params: { provider: string; path: string[] } },
) {
const apiPath = `/api/${params.provider}`;
console.log(`[${params.provider} Route] params `, params);
switch (apiPath) {
case ApiPath.Azure:
return azureHandler(req, { params });
case ApiPath.Google:
return googleHandler(req, { params });
case ApiPath.Anthropic:
return anthropicHandler(req, { params });
case ApiPath.Baidu:
return baiduHandler(req, { params });
case ApiPath.ByteDance:
return bytedanceHandler(req, { params });
case ApiPath.Alibaba:
return alibabaHandler(req, { params });
// case ApiPath.Tencent: using "/api/tencent"
case ApiPath.Moonshot:
return moonshotHandler(req, { params });
case ApiPath.Stability:
return stabilityHandler(req, { params });
case ApiPath.Iflytek:
return iflytekHandler(req, { params });
case ApiPath.XAI:
return xaiHandler(req, { params });
case ApiPath.ChatGLM:
return chatglmHandler(req, { params });
case ApiPath.OpenAI:
return openaiHandler(req, { params });
default:
return proxyHandler(req, { params });
}
}
export const GET = handle;
export const POST = handle;
export const runtime = 'edge';
export const preferredRegion = [
'arn1',
'bom1',
'cdg1',
'cle1',
'cpt1',
'dub1',
'fra1',
'gru1',
'hnd1',
'iad1',
'icn1',
'kix1',
'lhr1',
'pdx1',
'sfo1',
'sin1',
'syd1',
];