Files
gitlab-instance-0a899031_di…/config/services.config.ts
2026-03-08 06:43:48 -05:00

138 lines
4.2 KiB
TypeScript
Raw 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、支付等第三方服务
* 可通过环境变量覆盖,不同主题可配置不同集合/金额
*/
import { getThemeConfig } from "./site.config";
export interface PocketBaseConfig {
enabled: boolean;
/** PocketBase 服务地址 */
url: string;
/** 用户认证集合 */
usersCollection: string;
/** 申请/加入表单集合(如 solan、applications */
joinCollection: string;
}
export interface PaymentConfig {
enabled: boolean;
/** 支付 API 地址payjsapi */
apiUrl: string;
/** 支付提供商zpay | xorpay */
provider: "zpay" | "xorpay";
/** 默认金额(分) */
defaultAmount: number;
/** 默认订单类型 */
defaultType: string;
/** ZPAY 提交地址 */
zpaySubmitUrl: string;
}
export interface MinioConfig {
enabled: boolean;
/** MinIO 服务端点 */
endPoint: string;
/** 端口 */
port: number;
/** 是否使用 SSL */
useSSL: boolean;
/** 存储桶 */
bucket: string;
/** Access Key */
accessKey: string;
/** Secret Key */
secretKey: string;
/** 区域 */
region: string;
/** 公开访问 URL用于生成文件链接 */
publicUrl: string;
/** 上传路径前缀(如 joins、uploads */
uploadPrefix: string;
}
export interface ServicesConfig {
pocketbase: PocketBaseConfig;
payment: PaymentConfig;
minio: MinioConfig;
}
const isDev = process.env.NODE_ENV === "development";
/** 获取 PocketBase 配置(可传入主题覆盖) */
export function getPocketBaseConfig(themeOverride?: { joinCollection?: string }): PocketBaseConfig {
const joinCollection =
themeOverride?.joinCollection ||
process.env.POCKETBASE_JOIN_COLLECTION ||
"solan";
return {
enabled: true,
url: process.env.NEXT_PUBLIC_POCKETBASE_URL || process.env.POCKETBASE_URL || "https://pocketbase.hackrobot.cn",
usersCollection: "users",
joinCollection,
};
}
/** 获取支付配置(可传入主题覆盖,如 join 金额/类型) */
export function getPaymentConfig(themeOverride?: { amount?: number; type?: string }): PaymentConfig {
const base = {
enabled: true,
apiUrl:
process.env.PAYMENT_API_URL ||
(isDev ? "http://127.0.0.1:8700" : "https://api.hackrobot.cn"),
provider: (process.env.PAYMENT_PROVIDER as "zpay" | "xorpay") || "zpay",
defaultAmount: Number(process.env.PAYMENT_DEFAULT_AMOUNT) || 80,
defaultType: process.env.PAYMENT_DEFAULT_TYPE || "meetup",
zpaySubmitUrl: process.env.ZPAY_SUBMIT_URL || "https://zpayz.cn/submit.php",
};
if (themeOverride) {
if (themeOverride.amount != null) base.defaultAmount = themeOverride.amount;
if (themeOverride.type) base.defaultType = themeOverride.type;
}
return base;
}
/** 获取 MinIO 配置(可传入主题覆盖 bucket/prefix */
export function getMinioConfig(themeOverride?: { bucket?: string; uploadPrefix?: string }): MinioConfig {
const endPoint = process.env.MINIO_ENDPOINT || "minioweb.hackrobot.cn";
const port = parseInt(process.env.MINIO_PORT || "9035", 10);
const useSSL = process.env.MINIO_USE_SSL === "true";
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,
bucket,
accessKey: process.env.MINIO_ACCESS_KEY || "6i56HHfg4zPfYItCZtnp",
secretKey: process.env.MINIO_SECRET_KEY || "vDJCqEit3ejH5UmWKAZnvqhziNfbVsoOlBW12G8Q",
region: process.env.MINIO_REGION || "china",
publicUrl: publicUrl.replace(/\/$/, ""),
uploadPrefix,
};
}
/** 获取完整服务配置 */
export function getServicesConfig(): ServicesConfig {
return {
pocketbase: getPocketBaseConfig(),
payment: getPaymentConfig(),
minio: getMinioConfig(),
};
}
/** 获取「加入/申请」场景的支付配置(含主题覆盖) */
export function getJoinPaymentConfig(): { amount: number; type: string } {
const theme = getThemeConfig();
const payment = getPaymentConfig();
return {
amount: theme.services?.join?.amount ?? payment.defaultAmount,
type: theme.services?.join?.type ?? payment.defaultType,
};
}