Files
riwa-ionic/functions/api/version.ts

101 lines
2.5 KiB
TypeScript

/**
* Cloudflare Pages Function - 版本检查 API
* 访问路径: /api/version
*/
interface VersionInfo {
version: string;
forceUpdate: boolean;
updateMessage: string;
updateUrl: string;
minSupportVersion: string;
}
interface Env {
// 可以在这里添加环境变量类型
}
interface VersionConfig {
ios: VersionInfo;
android: VersionInfo;
browser: VersionInfo;
}
// 版本配置 - 直接在这里管理版本信息
const versionConfig: VersionConfig = {
ios: {
version: "0.0.4",
forceUpdate: false,
updateMessage: "修复了一些问题并优化了性能",
updateUrl: "https://apps.apple.com/app/id123456789",
minSupportVersion: "0.0.1",
},
android: {
version: "0.0.4",
forceUpdate: false,
updateMessage: "修复了一些问题并优化了性能",
updateUrl: "https://play.google.com/store/apps/details?id=riwa.ionic.app",
minSupportVersion: "0.0.1",
},
browser: {
version: "0.0.4",
forceUpdate: false,
updateMessage: "修复了一些问题并优化了性能",
updateUrl: "",
minSupportVersion: "0.0.1",
},
};
export const onRequestGet: PagesFunction<Env> = async (context) => {
try {
const { searchParams } = new URL(context.request.url);
const platform = searchParams.get("platform") || "browser";
// 验证平台参数
if (!["ios", "android", "browser"].includes(platform)) {
return new Response(
JSON.stringify({ error: "Invalid platform parameter" }),
{
status: 400,
headers: { "Content-Type": "application/json" },
},
);
}
// 获取对应平台的版本信息
const versionInfo = versionConfig[platform as keyof VersionConfig];
// 返回版本信息
return new Response(JSON.stringify(versionInfo), {
status: 200,
headers: {
"Content-Type": "application/json",
"Cache-Control": "public, max-age=300", // 缓存5分钟
"Access-Control-Allow-Origin": "*",
},
});
}
catch (error) {
console.error("Version check error:", error);
return new Response(
JSON.stringify({ error: "Internal server error" }),
{
status: 500,
headers: { "Content-Type": "application/json" },
},
);
}
};
// 支持 CORS 预检请求
export const onRequestOptions: PagesFunction<Env> = async () => {
return new Response(null, {
status: 204,
headers: {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET, OPTIONS",
"Access-Control-Allow-Headers": "Content-Type",
},
});
};