feat: 更新 API 路径配置并优化环境变量管理

- 修改 .env.example,更新玩家端本地配置说明,新增直连 Laravel 和局域网 IP 访问配置项,提升开发灵活性。
- 更新 middleware.ts,使用新的 LOTTERY_API_V1_BASE 常量构建 API 请求路径,简化代码结构。
- 在 next.config.ts 中引入 parseAllowedDevOrigins 函数,动态解析允许的开发来源,增强安全性。
- 重构多个 API 模块,移除 API_V1_PREFIX,直接使用相对路径,简化 API 调用逻辑,提高可维护性。
This commit is contained in:
2026-05-29 10:28:43 +08:00
parent 1316a62ce3
commit 03faed1db6
19 changed files with 71 additions and 42 deletions

View File

@@ -1,7 +1,6 @@
"use client";
import { lotteryHttp, unwrapData } from "@/lib/lottery-http";
import { API_V1_PREFIX } from "@/api/paths";
type RuntimeOriginsResponse = {
iframe_allowed_origins: string[];
@@ -49,7 +48,7 @@ export async function loadIframeAllowedOrigins(): Promise<string[]> {
}
pendingOrigins ??= lotteryHttp
.get(`${API_V1_PREFIX}/integration/runtime-origins`)
.get("/integration/runtime-origins")
.then((response) => {
const data = unwrapData<RuntimeOriginsResponse>(response.data);
cachedOrigins = data.iframe_allowed_origins

View File

@@ -0,0 +1,13 @@
/**
* 玩家端 API 连接方式(与管理端一致):
* - 默认:同源 `/api` + Next `rewrites` → Laravel`API_BASE_URL` 写在 .env.local
* - 可选:`NEXT_PUBLIC_LOTTERY_API_BASE_URL` 直连。
*/
export function hasLotteryPlayerApiBaseUrl(): boolean {
const direct = process.env.NEXT_PUBLIC_LOTTERY_API_BASE_URL?.trim();
if (direct !== undefined && direct !== "") {
return true;
}
return process.env.NEXT_PUBLIC_LOTTERY_API_PROXY_DISABLED !== "true";
}

View File

@@ -13,13 +13,13 @@ import {
} from "@/types/api/errors";
import { isApiEnvelope } from "@/types/api/envelope";
import { useErrorStore } from "@/stores/error-store";
import { LOTTERY_API_V1_BASE } from "@/api/paths";
/**
* **第一层**只挂 `baseURL` / `timeout` / 默认 `Accept`。业务解析、toast 都不在这里
* **第一层**`baseURL` 对齐 Laravel `api/v1`;各 `api/*.ts` 只写业务 path如 `/currencies`
*/
export const lotteryHttp = axios.create({
// 统一走 Next 同源 /api 代理,由 next.config.ts 的 API_BASE_URL 转发到后端。
baseURL: "/api",
baseURL: LOTTERY_API_V1_BASE,
timeout: 30_000,
headers: { Accept: "application/json" },
});

View File

@@ -0,0 +1,11 @@
/** 解析 `ALLOWED_DEV_ORIGINS`(逗号分隔),供 next.config `allowedDevOrigins` 使用 */
export function parseAllowedDevOrigins(envValue: string | undefined): string[] {
if (envValue === undefined || envValue.trim() === "") {
return [];
}
return envValue
.split(",")
.map((origin) => origin.trim())
.filter((origin) => origin !== "");
}