Files
gitlab-instance-0a899031_cn…/config/services.config.ts
2026-03-13 05:14:28 -05:00

113 lines
3.2 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 服务配置 - PocketBase、支付、MinIO
* 域名更换:设置 ROOT_DOMAIN如 nomadro.com可推导默认 API 地址
*/
import {
DEFAULT_PAYMENT_API_URL,
DEFAULT_POCKETBASE_URL,
DEFAULT_MINIO_HOST,
} from "./domain.config";
export interface PocketBaseConfig {
enabled: boolean;
url: string;
usersCollection: string;
joinCollection: string;
}
export interface PaymentConfig {
enabled: boolean;
apiUrl: string;
provider: "zpay" | "xorpay";
defaultAmount: number;
defaultType: string;
zpaySubmitUrl: string;
}
export interface MinioConfig {
enabled: boolean;
endPoint: string;
port: number;
useSSL: boolean;
bucket: string;
accessKey: string;
secretKey: string;
region: string;
publicUrl: string;
uploadPrefix: string;
}
const isDev = process.env.NODE_ENV === "development";
const PAYJSAPI_PORT = process.env.PAYJSAPI_PORT || "8007";
/** 站点标识,用于 VIP 按站点隔离 */
export const SITE_ID = process.env.NEXT_PUBLIC_SITE_ID || "meetup";
/** meetup 加入游牧中国 价格测试用1元 */
export const MEETUP_JOIN_AMOUNT = 100;
export function getApiUrlFromRequest(hostHeader: string | null): string | null {
if (!hostHeader) return null;
if (!isDev) return process.env.PAYMENT_API_URL || DEFAULT_PAYMENT_API_URL;
const hostname = hostHeader.split(":")[0];
return `http://${hostname}:${PAYJSAPI_PORT}`;
}
export function getPocketBaseConfig(): PocketBaseConfig {
return {
enabled: true,
url:
process.env.NEXT_PUBLIC_POCKETBASE_URL ||
process.env.POCKETBASE_URL ||
DEFAULT_POCKETBASE_URL,
usersCollection: "users",
joinCollection: process.env.POCKETBASE_JOIN_COLLECTION || "solan",
};
}
export function getPaymentConfig(): PaymentConfig {
return {
enabled: true,
apiUrl: process.env.PAYMENT_API_URL || DEFAULT_PAYMENT_API_URL,
provider: (process.env.PAYMENT_PROVIDER as "zpay" | "xorpay") || "zpay",
defaultAmount: Number(process.env.PAYMENT_DEFAULT_AMOUNT) || 100,
defaultType: process.env.PAYMENT_DEFAULT_TYPE || "meetup",
zpaySubmitUrl: process.env.ZPAY_SUBMIT_URL || "https://zpayz.cn/submit.php",
};
}
/** 获取「加入」场景的支付配置 */
export function getJoinPaymentConfig(): { amount: number; type: string } {
return {
amount: Number(process.env.PAYMENT_JOIN_AMOUNT) || MEETUP_JOIN_AMOUNT,
type: process.env.PAYMENT_JOIN_TYPE || "meetup",
};
}
export function getMinioConfig(themeOverride?: {
bucket?: string;
uploadPrefix?: string;
}): MinioConfig {
const endPoint = process.env.MINIO_ENDPOINT || DEFAULT_MINIO_HOST;
const port = parseInt(process.env.MINIO_PORT || "9035", 10);
const bucket = themeOverride?.bucket || process.env.MINIO_BUCKET || "hackrobot";
const publicUrl =
process.env.MINIO_PUBLIC_URL || `https://${endPoint}/${bucket}`;
const uploadPrefix =
themeOverride?.uploadPrefix || process.env.MINIO_UPLOAD_PREFIX || "joins";
return {
enabled: true,
endPoint,
port,
useSSL: process.env.MINIO_USE_SSL === "true",
bucket,
accessKey: process.env.MINIO_ACCESS_KEY || "",
secretKey: process.env.MINIO_SECRET_KEY || "",
region: process.env.MINIO_REGION || "china",
publicUrl: publicUrl.replace(/\/$/, ""),
uploadPrefix,
};
}