Add cors for translation API (#193)

This commit is contained in:
Huang Xin
2025-01-18 19:56:12 +01:00
committed by GitHub
parent 443809f5af
commit f53f5b7594
3 changed files with 26 additions and 22 deletions
@@ -1,4 +1,5 @@
import { NextApiRequest, NextApiResponse } from 'next';
import { corsAllMethods, runMiddleware } from '@/utils/cors';
import { supabase } from '@/utils/supabase';
const DEEPL_FREE_API = 'https://api-free.deepl.com/v2/translate';
@@ -23,8 +24,9 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => {
const deeplAuthKey =
user && token ? process.env['DEEPL_PRO_API_KEY'] : process.env['DEEPL_FREE_API_KEY'];
await runMiddleware(req, res, corsAllMethods);
try {
console.log('Proxying DeepL request:', deeplApiUrl, deeplAuthKey);
const response = await fetch(deeplApiUrl, {
method: 'POST',
headers: {
+2 -21
View File
@@ -1,4 +1,3 @@
import Cors from 'cors';
import type { NextApiRequest, NextApiResponse } from 'next';
import { NextRequest, NextResponse } from 'next/server';
import { PostgrestError } from '@supabase/supabase-js';
@@ -7,6 +6,7 @@ import { BookDataRecord } from '@/types/book';
import { transformBookConfigToDB } from '@/utils/transform';
import { transformBookNoteToDB } from '@/utils/transform';
import { transformBookToDB } from '@/utils/transform';
import { runMiddleware, corsAllMethods } from '@/utils/cors';
import { SyncData, SyncResult, SyncType } from '@/libs/sync';
const transformsToDB = {
@@ -219,25 +219,6 @@ export async function POST(req: NextRequest) {
}
}
// Helper method to wait for a middleware to execute before continuing
// And to throw an error when an error happens in a middleware
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
function runMiddleware(req: NextApiRequest, res: NextApiResponse, fn: Function) {
return new Promise((resolve, reject) => {
fn(req, res, (result: unknown) => {
if (result instanceof Error) {
return reject(result);
}
return resolve(result);
});
});
}
const cors = Cors({
methods: ['POST', 'GET', 'HEAD'],
});
const handler = async (req: NextApiRequest, res: NextApiResponse) => {
if (!req.url) {
return res.status(400).json({ error: 'Invalid request URL' });
@@ -247,7 +228,7 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => {
const host = process.env['HOST'] || 'localhost:3000';
const url = new URL(req.url, `${protocol}://${host}`);
await runMiddleware(req, res, cors);
await runMiddleware(req, res, corsAllMethods);
try {
let response: Response;
+21
View File
@@ -0,0 +1,21 @@
import Cors from 'cors';
import type { NextApiRequest, NextApiResponse } from 'next';
// Helper method to wait for a middleware to execute before continuing
// And to throw an error when an error happens in a middleware
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
export const runMiddleware = (req: NextApiRequest, res: NextApiResponse, fn: Function) => {
return new Promise((resolve, reject) => {
fn(req, res, (result: unknown) => {
if (result instanceof Error) {
return reject(result);
}
return resolve(result);
});
});
};
export const corsAllMethods = Cors({
methods: ['POST', 'GET', 'HEAD'],
});