docmee.ts 2.3 KB
import { getServerSideConfig } from "@/app/config/server";
import { NextRequest, NextResponse } from "next/server";
import md5 from "spark-md5";
// 处理每日使用限制逻辑
function parseDailyUsage(
  allowNum: string,
  accessCode: string,
  maxDailyUse: string,
): number {
  let configMax = 0;
  if (maxDailyUse) {
    configMax = JSON.parse(maxDailyUse)[accessCode];
  }
  if (allowNum === "first") return configMax;
  const parsed = parseInt(allowNum, 10);
  return Number.isNaN(parsed) ? configMax : parsed;
}

export async function handle(
  req: NextRequest,
  { params }: { params: { path: string[] } },
) {
  const config = getServerSideConfig();
  const baseUrl = config.docmeeUrl;
  const subPath = params.path.join("/");
  // if(subPath==='createApiToken'){const reqUrl = `${baseUrl}/api/user/${subPath}`;}
  const reqUrl = `${baseUrl}/api/user/${subPath}`;
  console.log(reqUrl);
  try {
    // 获取 accessCode
    const body = await new Response(req.body).text();
    const parsedBody = JSON.parse(body);

    // 提取 accessCode 和 max_use 参数
    const uid = parsedBody.accessCode;
    let maxUse = parsedBody.max_use;
    if (!uid || !config.codes.has(md5.hash(uid))) {
      return NextResponse.json({
        data: "请检查登录密码",
        status: 400,
      });
    }
    if (!maxUse) {
      return NextResponse.json({
        data: "参数错误",
        status: 400,
      });
    }
    maxUse = parseDailyUsage(maxUse, uid, config.docmeeMaxDailyUses);

    const headers = new Headers({
      "Api-Key": config.docmeeApiKey,
      "Content-Type": "application/json",
    });
    console.log("********************" + config.docmeeApiKey);
    // 使用 async/await 处理 fetch 请求
    const response = await fetch(reqUrl, {
      headers,
      method: "POST",
      body: JSON.stringify({ uid: uid, limit: maxUse }),
    });
    if (!response.ok) {
      throw new Error(
        `HTTP error! status: ${response.status} ${response.text()}`,
      );
    }
    const data = await response.json();
    // 返回固定的 token
    return NextResponse.json({
      data: data,
      status: 200,
    });
  } catch (error) {
    console.error("处理请求时出错:", error);
    return NextResponse.json({
      data: "处理请求时出错",
      status: 500,
    });
  }
}