From 2380e28bcc2978502d0219f043544f40e834bfc2 Mon Sep 17 00:00:00 2001 From: yml2213 Date: Wed, 8 Jul 2026 11:38:11 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E8=A1=8C=E4=B8=9A=E5=87=AD?= =?UTF-8?q?=E8=AF=81=E5=9B=9E=E8=B0=83=E5=BC=80=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.server.example | 1 - apps/backend/src/config/defaults.ts | 1 - apps/backend/src/config/env-overrides.ts | 5 -- .../platform-config/kuaishou-industry.ts | 1 - .../kuaishou-industry-service.ts | 4 -- .../platforms/kuaishou-industry/config.ts | 1 - .../consume-callback-service.ts | 9 +-- .../destroy-callback-service.ts | 9 +-- .../send-callback-service.ts | 9 +-- .../source-config-service.ts | 5 -- .../kuaishou-industry/token-service.test.ts | 1 - apps/backend/src/types/admin/write-inputs.ts | 1 - apps/backend/src/types/runtime-config.ts | 1 - .../admin/platform/AdminPlatformShopsPage.tsx | 7 +-- .../platform-config/kuaishou-industry.ts | 1 - docker-compose.dev.yml | 62 +------------------ docker-compose.yml | 62 +------------------ 17 files changed, 20 insertions(+), 160 deletions(-) diff --git a/.env.server.example b/.env.server.example index 7dcfa755..935bef6d 100644 --- a/.env.server.example +++ b/.env.server.example @@ -33,7 +33,6 @@ KUASHOU_INDUSTRY_APP_KEY= KUASHOU_INDUSTRY_APP_SECRET= KUASHOU_INDUSTRY_SIGN_SECRET= KUASHOU_INDUSTRY_MESSAGE_SECRET= -KUASHOU_INDUSTRY_SEND_CALLBACK_ENABLED=false # Cloudtentacles CLOUDTENTACLES_DEVICE_ID=08bc9d8c-fd15-48ea-bc00-8d754076cafc diff --git a/apps/backend/src/config/defaults.ts b/apps/backend/src/config/defaults.ts index d5c135aa..f9c1044d 100644 --- a/apps/backend/src/config/defaults.ts +++ b/apps/backend/src/config/defaults.ts @@ -49,7 +49,6 @@ export function createDefaultRuntimeConfig(projectRoot: string): RuntimeConfig { appSecret: "", signSecret: "", messageSecret: "", - sendCallbackEnabled: false, provider: "kuaishou-industry", platform: "kuaishou", shopId: "kuaishou-industry", diff --git a/apps/backend/src/config/env-overrides.ts b/apps/backend/src/config/env-overrides.ts index 12b4b92a..0628d034 100644 --- a/apps/backend/src/config/env-overrides.ts +++ b/apps/backend/src/config/env-overrides.ts @@ -246,11 +246,6 @@ export const ENV_OVERRIDES: readonly EnvOverride[] = [ "kuaishouIndustry", "messageSecret", ]), - booleanEnv("KUASHOU_INDUSTRY_SEND_CALLBACK_ENABLED", [ - "platforms", - "kuaishouIndustry", - "sendCallbackEnabled", - ]), stringEnv("KUASHOU_INDUSTRY_PROVIDER", [ "platforms", "kuaishouIndustry", diff --git a/apps/backend/src/routes/admin/platform-config/kuaishou-industry.ts b/apps/backend/src/routes/admin/platform-config/kuaishou-industry.ts index f9e0dc9f..fffdac21 100644 --- a/apps/backend/src/routes/admin/platform-config/kuaishou-industry.ts +++ b/apps/backend/src/routes/admin/platform-config/kuaishou-industry.ts @@ -44,7 +44,6 @@ router.post( data: { filePath: String(result.filePath || '').trim(), enabled: Boolean(result.source?.enabled), - sendCallbackEnabled: Boolean(result.source?.sendCallbackEnabled), hasAccessToken: Boolean(result.source?.hasAccessToken), hasRefreshToken: Boolean(result.source?.hasRefreshToken), accessTokenStatus: String(result.source?.accessTokenStatus || '').trim(), diff --git a/apps/backend/src/services/admin/platform-config/kuaishou-industry-service.ts b/apps/backend/src/services/admin/platform-config/kuaishou-industry-service.ts index e5929b34..6ce84746 100644 --- a/apps/backend/src/services/admin/platform-config/kuaishou-industry-service.ts +++ b/apps/backend/src/services/admin/platform-config/kuaishou-industry-service.ts @@ -35,9 +35,6 @@ export function updateAdminKuaishouIndustrySourceConfig(payload: JsonObject = {} const saved = saveKuaishouIndustrySourceConfig({ ...current, enabled: hasPayloadField(payload, 'enabled') ? payload.enabled !== false : current.enabled !== false, - sendCallbackEnabled: hasPayloadField(payload, 'sendCallbackEnabled') - ? payload.sendCallbackEnabled === true - : current.sendCallbackEnabled === true, baseUrl: readConfigString(payload, 'baseUrl', current.baseUrl), authBaseUrl: readConfigString(payload, 'authBaseUrl', current.authBaseUrl), redirectUri: readConfigString(payload, 'redirectUri', current.redirectUri, { allowBlank: true }), @@ -96,7 +93,6 @@ function mapAdminKuaishouIndustrySourceConfig(config: KuaishouIndustrySourceConf return { enabled: config.enabled !== false, - sendCallbackEnabled: config.sendCallbackEnabled === true, baseUrl: config.baseUrl, authBaseUrl: config.authBaseUrl, redirectUri: config.redirectUri, diff --git a/apps/backend/src/services/platforms/kuaishou-industry/config.ts b/apps/backend/src/services/platforms/kuaishou-industry/config.ts index fbf119be..7efa6560 100644 --- a/apps/backend/src/services/platforms/kuaishou-industry/config.ts +++ b/apps/backend/src/services/platforms/kuaishou-industry/config.ts @@ -33,7 +33,6 @@ export function getKuaishouIndustryConfig(overrides: Partial { let config = getKuaishouIndustryConfig() - if (!config.enabled || !config.sendCallbackEnabled) { - logInfo('[kuaishou-industry/consume-callback]', '回调未启用,跳过') + if (!config.enabled) { + logInfo('[kuaishou-industry/consume-callback]', '行业电子凭证配置未启用,跳过核销回调') return { success: true } } @@ -56,8 +56,9 @@ export async function consumeCallback(input: ConsumeCallbackInput): Promise<{ su } if (!config.accessToken) { - logWarn('[kuaishou-industry/consume-callback]', 'accessToken 未配置,跳过') - return { success: true } + const message = 'accessToken 未配置,无法发起核销回调' + logWarn('[kuaishou-industry/consume-callback]', message) + return { success: false, error: message } } const bizParams: JsonObject = { diff --git a/apps/backend/src/services/platforms/kuaishou-industry/destroy-callback-service.ts b/apps/backend/src/services/platforms/kuaishou-industry/destroy-callback-service.ts index 973b1139..6fb05fe1 100644 --- a/apps/backend/src/services/platforms/kuaishou-industry/destroy-callback-service.ts +++ b/apps/backend/src/services/platforms/kuaishou-industry/destroy-callback-service.ts @@ -25,8 +25,8 @@ type DestroyCallbackInput = { export async function destroyCallback(input: DestroyCallbackInput): Promise<{ success: boolean; response?: JsonObject; error?: string }> { let config = getKuaishouIndustryConfig() - if (!config.enabled || !config.sendCallbackEnabled) { - logInfo('[kuaishou-industry/destroy-callback]', '回调未启用,跳过') + if (!config.enabled) { + logInfo('[kuaishou-industry/destroy-callback]', '行业电子凭证配置未启用,跳过销毁回调') return { success: true } } @@ -46,8 +46,9 @@ export async function destroyCallback(input: DestroyCallbackInput): Promise<{ su } if (!config.accessToken) { - logWarn('[kuaishou-industry/destroy-callback]', 'accessToken 未配置,跳过') - return { success: true } + const message = 'accessToken 未配置,无法发起销毁回调' + logWarn('[kuaishou-industry/destroy-callback]', message) + return { success: false, error: message } } const bizParams: JsonObject = { diff --git a/apps/backend/src/services/platforms/kuaishou-industry/send-callback-service.ts b/apps/backend/src/services/platforms/kuaishou-industry/send-callback-service.ts index 42e75efd..2a2adada 100644 --- a/apps/backend/src/services/platforms/kuaishou-industry/send-callback-service.ts +++ b/apps/backend/src/services/platforms/kuaishou-industry/send-callback-service.ts @@ -31,8 +31,8 @@ type SendCallbackInput = { export async function sendCallback(input: SendCallbackInput): Promise<{ success: boolean; response?: JsonObject; error?: string }> { let config = getKuaishouIndustryConfig() - if (!config.enabled || !config.sendCallbackEnabled) { - logInfo('[kuaishou-industry/send-callback]', '发码回调未启用,跳过') + if (!config.enabled) { + logInfo('[kuaishou-industry/send-callback]', '行业电子凭证配置未启用,跳过发码回调') return { success: true } } @@ -52,8 +52,9 @@ export async function sendCallback(input: SendCallbackInput): Promise<{ success: } if (!config.accessToken) { - logWarn('[kuaishou-industry/send-callback]', 'accessToken 未配置,跳过发码回调') - return { success: true } + const message = 'accessToken 未配置,无法发起发码回调' + logWarn('[kuaishou-industry/send-callback]', message) + return { success: false, error: message } } const bizParams: JsonObject = { diff --git a/apps/backend/src/services/platforms/kuaishou-industry/source-config-service.ts b/apps/backend/src/services/platforms/kuaishou-industry/source-config-service.ts index e4e7d5a3..80ec6d69 100644 --- a/apps/backend/src/services/platforms/kuaishou-industry/source-config-service.ts +++ b/apps/backend/src/services/platforms/kuaishou-industry/source-config-service.ts @@ -11,7 +11,6 @@ type JsonObject = Record export type KuaishouIndustrySourceConfig = { enabled: boolean - sendCallbackEnabled: boolean baseUrl: string authBaseUrl: string redirectUri: string @@ -72,9 +71,6 @@ function normalizeKuaishouIndustrySourceConfig(rawValue: unknown): KuaishouIndus return { enabled: typeof source.enabled === 'boolean' ? source.enabled : fallback.enabled, - sendCallbackEnabled: typeof source.sendCallbackEnabled === 'boolean' - ? source.sendCallbackEnabled - : fallback.sendCallbackEnabled, baseUrl: normalizeUrlLike(source.baseUrl, fallback.baseUrl), authBaseUrl: normalizeUrlLike(source.authBaseUrl, fallback.authBaseUrl), redirectUri: normalizeString(source.redirectUri, fallback.redirectUri), @@ -106,7 +102,6 @@ function createDefaultKuaishouIndustrySourceConfig(): KuaishouIndustrySourceConf return { enabled: true, - sendCallbackEnabled: Boolean(runtime.sendCallbackEnabled), baseUrl: DEFAULT_CALLBACK_BASE_URL, authBaseUrl: DEFAULT_AUTH_BASE_URL, redirectUri: '', diff --git a/apps/backend/src/services/platforms/kuaishou-industry/token-service.test.ts b/apps/backend/src/services/platforms/kuaishou-industry/token-service.test.ts index f8715265..1f8c1ca1 100644 --- a/apps/backend/src/services/platforms/kuaishou-industry/token-service.test.ts +++ b/apps/backend/src/services/platforms/kuaishou-industry/token-service.test.ts @@ -42,7 +42,6 @@ function createConfig( ): KuaishouIndustrySourceConfig { return { enabled: true, - sendCallbackEnabled: true, baseUrl: 'https://openapi.kwaixiaodian.com', authBaseUrl: 'https://open.kwaixiaodian.com', redirectUri: '', diff --git a/apps/backend/src/types/admin/write-inputs.ts b/apps/backend/src/types/admin/write-inputs.ts index 59672db4..aa60567e 100644 --- a/apps/backend/src/types/admin/write-inputs.ts +++ b/apps/backend/src/types/admin/write-inputs.ts @@ -14,7 +14,6 @@ export type AdminKuaishouEticketSourceConfigInput = { export type AdminKuaishouIndustrySourceConfigInput = { enabled?: boolean - sendCallbackEnabled?: boolean baseUrl?: string authBaseUrl?: string redirectUri?: string diff --git a/apps/backend/src/types/runtime-config.ts b/apps/backend/src/types/runtime-config.ts index 337ae897..0efd5ecc 100644 --- a/apps/backend/src/types/runtime-config.ts +++ b/apps/backend/src/types/runtime-config.ts @@ -92,7 +92,6 @@ export type RuntimeConfig = { appSecret: string; signSecret: string; messageSecret: string; - sendCallbackEnabled: boolean; provider: string; platform: string; shopId: string; diff --git a/apps/frontend/src/pages/admin/platform/AdminPlatformShopsPage.tsx b/apps/frontend/src/pages/admin/platform/AdminPlatformShopsPage.tsx index 3383f81b..e7bdc7f9 100644 --- a/apps/frontend/src/pages/admin/platform/AdminPlatformShopsPage.tsx +++ b/apps/frontend/src/pages/admin/platform/AdminPlatformShopsPage.tsx @@ -1193,7 +1193,7 @@ function KuaishouIndustryPanel({
updateSource({ enabled })} /> - updateSource({ sendCallbackEnabled })} - /> - sh /app/scripts/start-dev-container.sh depends_on: @@ -52,71 +54,11 @@ services: DATABASE_SSL: ${DATABASE_SSL:-false} DATABASE_MAX_CONNECTIONS: ${DATABASE_MAX_CONNECTIONS:-10} DATA_ROOT: /app/data - LOG_LEVEL: ${LOG_LEVEL:-info} LOG_RETENTION_DAYS: ${LOG_RETENTION_DAYS:-30} CLAIM_BASE_URL: ${CLAIM_BASE_URL:-http://localhost/#/claim} - CLAIM_TOKEN_TTL_HOURS: ${CLAIM_TOKEN_TTL_HOURS:-} ADMIN_SESSION_SECRET: ${ADMIN_SESSION_SECRET} - ADMIN_SESSION_TTL_HOURS: ${ADMIN_SESSION_TTL_HOURS:-} ADMIN_DEFAULT_USERS_JSON: ${ADMIN_DEFAULT_USERS_JSON} - KAQUAN91_USER_ID: ${KAQUAN91_USER_ID:-} - KAQUAN91_SECRET: ${KAQUAN91_SECRET:-} - KAQUAN91_VERSION: ${KAQUAN91_VERSION:-} - KAQUAN91_SHOP_ID: ${KAQUAN91_SHOP_ID:-} - KAQUAN91_SHOP_NAME: ${KAQUAN91_SHOP_NAME:-} - KAQUAN91_TIMESTAMP_TOLERANCE_SECONDS: ${KAQUAN91_TIMESTAMP_TOLERANCE_SECONDS:-} - KAQUAN91_CARDS_ENCODING: ${KAQUAN91_CARDS_ENCODING:-} - CLOUDTENTACLES_BASE_URL: ${CLOUDTENTACLES_BASE_URL:-} - CLOUDTENTACLES_TIMEOUT_MS: ${CLOUDTENTACLES_TIMEOUT_MS:-} - CLOUDTENTACLES_SEND_SMS_PATH: ${CLOUDTENTACLES_SEND_SMS_PATH:-} - CLOUDTENTACLES_LOGIN_PATH: ${CLOUDTENTACLES_LOGIN_PATH:-} - CLOUDTENTACLES_USER_INFO_PATH: ${CLOUDTENTACLES_USER_INFO_PATH:-} - CLOUDTENTACLES_ASSET_PATH: ${CLOUDTENTACLES_ASSET_PATH:-} - CLOUDTENTACLES_PERMISSION_PATH: ${CLOUDTENTACLES_PERMISSION_PATH:-} - CLOUDTENTACLES_CATEGORIES_PATH: ${CLOUDTENTACLES_CATEGORIES_PATH:-} - CLOUDTENTACLES_SKU_LIST_PATH: ${CLOUDTENTACLES_SKU_LIST_PATH:-} - CLOUDTENTACLES_SKU_BUY_PATH: ${CLOUDTENTACLES_SKU_BUY_PATH:-} - CLOUDTENTACLES_KNAPSACK_PATH: ${CLOUDTENTACLES_KNAPSACK_PATH:-} - CLOUDTENTACLES_VN_LIST_PATH: ${CLOUDTENTACLES_VN_LIST_PATH:-} - CLOUDTENTACLES_VN_APPOINT_PATH: ${CLOUDTENTACLES_VN_APPOINT_PATH:-} - CLOUDTENTACLES_VN_GENERATE_LOGIN_CODE_PATH: ${CLOUDTENTACLES_VN_GENERATE_LOGIN_CODE_PATH:-} - CLOUDTENTACLES_VN_VERIF_CODE_PATH: ${CLOUDTENTACLES_VN_VERIF_CODE_PATH:-} - CLOUDTENTACLES_VN_VERIFY_LOGIN_CODE_PATH: ${CLOUDTENTACLES_VN_VERIFY_LOGIN_CODE_PATH:-} - CLOUDTENTACLES_VN_BIND_URL_PATH: ${CLOUDTENTACLES_VN_BIND_URL_PATH:-} - CLOUDTENTACLES_VN_BIND_INFO_PATH: ${CLOUDTENTACLES_VN_BIND_INFO_PATH:-} - CLOUDTENTACLES_VN_BACK_PATH: ${CLOUDTENTACLES_VN_BACK_PATH:-} - CLOUDTENTACLES_BIND_URL_TTL_SECONDS: ${CLOUDTENTACLES_BIND_URL_TTL_SECONDS:-} - CLOUDTENTACLES_BIND_URL_PROBE_INTERVAL_SECONDS: ${CLOUDTENTACLES_BIND_URL_PROBE_INTERVAL_SECONDS:-} - CLOUDTENTACLES_BIND_URL_PROBE_TIMEOUT_MS: ${CLOUDTENTACLES_BIND_URL_PROBE_TIMEOUT_MS:-} - CLOUDTENTACLES_BIND_URL_PROBE_USER_AGENT: ${CLOUDTENTACLES_BIND_URL_PROBE_USER_AGENT:-} - CLOUDTENTACLES_BIND_URL_PROBE_ENDPOINT: ${CLOUDTENTACLES_BIND_URL_PROBE_ENDPOINT:-} - CLOUDTENTACLES_BIND_URL_PROBE_CHART_ID: ${CLOUDTENTACLES_BIND_URL_PROBE_CHART_ID:-} - CLOUDTENTACLES_BIND_URL_PROBE_SUB_CHART_ID: ${CLOUDTENTACLES_BIND_URL_PROBE_SUB_CHART_ID:-} - CLOUDTENTACLES_BIND_URL_PROBE_IDE_TOKEN: ${CLOUDTENTACLES_BIND_URL_PROBE_IDE_TOKEN:-} - CLOUDTENTACLES_BIND_URL_PROBE_ACTIVITY_URL: ${CLOUDTENTACLES_BIND_URL_PROBE_ACTIVITY_URL:-} - CLOUDTENTACLES_BIND_URL_PROBE_REFERER: ${CLOUDTENTACLES_BIND_URL_PROBE_REFERER:-} - CLOUDTENTACLES_BIND_URL_PROBE_EXTRA_COOKIE: ${CLOUDTENTACLES_BIND_URL_PROBE_EXTRA_COOKIE:-} - CLOUDTENTACLES_PUBLIC_KEY_PEM: ${CLOUDTENTACLES_PUBLIC_KEY_PEM:-} - CLOUDTENTACLES_CLIENT_SOURCE: ${CLOUDTENTACLES_CLIENT_SOURCE:-} - CLOUDTENTACLES_DEVICE_ID: ${CLOUDTENTACLES_DEVICE_ID:-} - CLOUDTENTACLES_DEVICE_TYPE: ${CLOUDTENTACLES_DEVICE_TYPE:-} - KUASHOU_INDUSTRY_APP_KEY: ${KUASHOU_INDUSTRY_APP_KEY:-} - KUASHOU_INDUSTRY_APP_SECRET: ${KUASHOU_INDUSTRY_APP_SECRET:-} - KUASHOU_INDUSTRY_SIGN_SECRET: ${KUASHOU_INDUSTRY_SIGN_SECRET:-} - KUASHOU_INDUSTRY_MESSAGE_SECRET: ${KUASHOU_INDUSTRY_MESSAGE_SECRET:-} KUASHOU_INDUSTRY_RATE_LIMIT_MAX: ${KUASHOU_INDUSTRY_RATE_LIMIT_MAX:-120} - KUASHOU_INDUSTRY_SEND_CALLBACK_ENABLED: ${KUASHOU_INDUSTRY_SEND_CALLBACK_ENABLED:-false} - KUASHOU_INDUSTRY_PROVIDER: ${KUASHOU_INDUSTRY_PROVIDER:-} - KUASHOU_INDUSTRY_SHOP_ID: ${KUASHOU_INDUSTRY_SHOP_ID:-} - KUASHOU_INDUSTRY_SHOP_NAME: ${KUASHOU_INDUSTRY_SHOP_NAME:-} - KUASHOU_INDUSTRY_VERSION: ${KUASHOU_INDUSTRY_VERSION:-} - KUAISHOU_FEIFEI_BASE_URL: ${KUAISHOU_FEIFEI_BASE_URL:-} - KUAISHOU_FEIFEI_APP_KEY: ${KUAISHOU_FEIFEI_APP_KEY:-} - KUAISHOU_FEIFEI_APP_SECRET: ${KUAISHOU_FEIFEI_APP_SECRET:-} - KUAISHOU_FEIFEI_TIMEOUT_MS: ${KUAISHOU_FEIFEI_TIMEOUT_MS:-} - KUAISHOU_FEIFEI_NOTIFY_URL: ${KUAISHOU_FEIFEI_NOTIFY_URL:-} - KUAISHOU_FEIFEI_PRODUCT_RULES_JSON: ${KUAISHOU_FEIFEI_PRODUCT_RULES_JSON:-} - CORS_ALLOWED_ORIGINS: ${CORS_ALLOWED_ORIGINS:-} logging: *json-log-rotation volumes: - ./apps/backend:/app diff --git a/docker-compose.yml b/docker-compose.yml index 9a3516cc..b7e98f6c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -31,6 +31,8 @@ services: context: . dockerfile: deploy/docker/backend.Dockerfile restart: unless-stopped + env_file: + - .env depends_on: postgres: condition: service_healthy @@ -48,71 +50,11 @@ services: DATABASE_SSL: ${DATABASE_SSL:-false} DATABASE_MAX_CONNECTIONS: ${DATABASE_MAX_CONNECTIONS:-20} DATA_ROOT: /app/data - LOG_LEVEL: ${LOG_LEVEL:-info} LOG_RETENTION_DAYS: ${LOG_RETENTION_DAYS:-30} CLAIM_BASE_URL: ${CLAIM_BASE_URL:-http://localhost/#/claim} - CLAIM_TOKEN_TTL_HOURS: ${CLAIM_TOKEN_TTL_HOURS:-} ADMIN_SESSION_SECRET: ${ADMIN_SESSION_SECRET} - ADMIN_SESSION_TTL_HOURS: ${ADMIN_SESSION_TTL_HOURS:-} ADMIN_DEFAULT_USERS_JSON: ${ADMIN_DEFAULT_USERS_JSON} - KAQUAN91_USER_ID: ${KAQUAN91_USER_ID:-} - KAQUAN91_SECRET: ${KAQUAN91_SECRET:-} - KAQUAN91_VERSION: ${KAQUAN91_VERSION:-} - KAQUAN91_SHOP_ID: ${KAQUAN91_SHOP_ID:-} - KAQUAN91_SHOP_NAME: ${KAQUAN91_SHOP_NAME:-} - KAQUAN91_TIMESTAMP_TOLERANCE_SECONDS: ${KAQUAN91_TIMESTAMP_TOLERANCE_SECONDS:-} - KAQUAN91_CARDS_ENCODING: ${KAQUAN91_CARDS_ENCODING:-} - CLOUDTENTACLES_BASE_URL: ${CLOUDTENTACLES_BASE_URL:-} - CLOUDTENTACLES_TIMEOUT_MS: ${CLOUDTENTACLES_TIMEOUT_MS:-} - CLOUDTENTACLES_SEND_SMS_PATH: ${CLOUDTENTACLES_SEND_SMS_PATH:-} - CLOUDTENTACLES_LOGIN_PATH: ${CLOUDTENTACLES_LOGIN_PATH:-} - CLOUDTENTACLES_USER_INFO_PATH: ${CLOUDTENTACLES_USER_INFO_PATH:-} - CLOUDTENTACLES_ASSET_PATH: ${CLOUDTENTACLES_ASSET_PATH:-} - CLOUDTENTACLES_PERMISSION_PATH: ${CLOUDTENTACLES_PERMISSION_PATH:-} - CLOUDTENTACLES_CATEGORIES_PATH: ${CLOUDTENTACLES_CATEGORIES_PATH:-} - CLOUDTENTACLES_SKU_LIST_PATH: ${CLOUDTENTACLES_SKU_LIST_PATH:-} - CLOUDTENTACLES_SKU_BUY_PATH: ${CLOUDTENTACLES_SKU_BUY_PATH:-} - CLOUDTENTACLES_KNAPSACK_PATH: ${CLOUDTENTACLES_KNAPSACK_PATH:-} - CLOUDTENTACLES_VN_LIST_PATH: ${CLOUDTENTACLES_VN_LIST_PATH:-} - CLOUDTENTACLES_VN_APPOINT_PATH: ${CLOUDTENTACLES_VN_APPOINT_PATH:-} - CLOUDTENTACLES_VN_GENERATE_LOGIN_CODE_PATH: ${CLOUDTENTACLES_VN_GENERATE_LOGIN_CODE_PATH:-} - CLOUDTENTACLES_VN_VERIF_CODE_PATH: ${CLOUDTENTACLES_VN_VERIF_CODE_PATH:-} - CLOUDTENTACLES_VN_VERIFY_LOGIN_CODE_PATH: ${CLOUDTENTACLES_VN_VERIFY_LOGIN_CODE_PATH:-} - CLOUDTENTACLES_VN_BIND_URL_PATH: ${CLOUDTENTACLES_VN_BIND_URL_PATH:-} - CLOUDTENTACLES_VN_BIND_INFO_PATH: ${CLOUDTENTACLES_VN_BIND_INFO_PATH:-} - CLOUDTENTACLES_VN_BACK_PATH: ${CLOUDTENTACLES_VN_BACK_PATH:-} - CLOUDTENTACLES_BIND_URL_TTL_SECONDS: ${CLOUDTENTACLES_BIND_URL_TTL_SECONDS:-} - CLOUDTENTACLES_BIND_URL_PROBE_INTERVAL_SECONDS: ${CLOUDTENTACLES_BIND_URL_PROBE_INTERVAL_SECONDS:-} - CLOUDTENTACLES_BIND_URL_PROBE_TIMEOUT_MS: ${CLOUDTENTACLES_BIND_URL_PROBE_TIMEOUT_MS:-} - CLOUDTENTACLES_BIND_URL_PROBE_USER_AGENT: ${CLOUDTENTACLES_BIND_URL_PROBE_USER_AGENT:-} - CLOUDTENTACLES_BIND_URL_PROBE_ENDPOINT: ${CLOUDTENTACLES_BIND_URL_PROBE_ENDPOINT:-} - CLOUDTENTACLES_BIND_URL_PROBE_CHART_ID: ${CLOUDTENTACLES_BIND_URL_PROBE_CHART_ID:-} - CLOUDTENTACLES_BIND_URL_PROBE_SUB_CHART_ID: ${CLOUDTENTACLES_BIND_URL_PROBE_SUB_CHART_ID:-} - CLOUDTENTACLES_BIND_URL_PROBE_IDE_TOKEN: ${CLOUDTENTACLES_BIND_URL_PROBE_IDE_TOKEN:-} - CLOUDTENTACLES_BIND_URL_PROBE_ACTIVITY_URL: ${CLOUDTENTACLES_BIND_URL_PROBE_ACTIVITY_URL:-} - CLOUDTENTACLES_BIND_URL_PROBE_REFERER: ${CLOUDTENTACLES_BIND_URL_PROBE_REFERER:-} - CLOUDTENTACLES_BIND_URL_PROBE_EXTRA_COOKIE: ${CLOUDTENTACLES_BIND_URL_PROBE_EXTRA_COOKIE:-} - CLOUDTENTACLES_PUBLIC_KEY_PEM: ${CLOUDTENTACLES_PUBLIC_KEY_PEM:-} - CLOUDTENTACLES_CLIENT_SOURCE: ${CLOUDTENTACLES_CLIENT_SOURCE:-} - CLOUDTENTACLES_DEVICE_ID: ${CLOUDTENTACLES_DEVICE_ID:-} - CLOUDTENTACLES_DEVICE_TYPE: ${CLOUDTENTACLES_DEVICE_TYPE:-} - KUASHOU_INDUSTRY_APP_KEY: ${KUASHOU_INDUSTRY_APP_KEY:-} - KUASHOU_INDUSTRY_APP_SECRET: ${KUASHOU_INDUSTRY_APP_SECRET:-} - KUASHOU_INDUSTRY_SIGN_SECRET: ${KUASHOU_INDUSTRY_SIGN_SECRET:-} - KUASHOU_INDUSTRY_MESSAGE_SECRET: ${KUASHOU_INDUSTRY_MESSAGE_SECRET:-} KUASHOU_INDUSTRY_RATE_LIMIT_MAX: ${KUASHOU_INDUSTRY_RATE_LIMIT_MAX:-120} - KUASHOU_INDUSTRY_SEND_CALLBACK_ENABLED: ${KUASHOU_INDUSTRY_SEND_CALLBACK_ENABLED:-false} - KUASHOU_INDUSTRY_PROVIDER: ${KUASHOU_INDUSTRY_PROVIDER:-} - KUASHOU_INDUSTRY_SHOP_ID: ${KUASHOU_INDUSTRY_SHOP_ID:-} - KUASHOU_INDUSTRY_SHOP_NAME: ${KUASHOU_INDUSTRY_SHOP_NAME:-} - KUASHOU_INDUSTRY_VERSION: ${KUASHOU_INDUSTRY_VERSION:-} - KUAISHOU_FEIFEI_BASE_URL: ${KUAISHOU_FEIFEI_BASE_URL:-} - KUAISHOU_FEIFEI_APP_KEY: ${KUAISHOU_FEIFEI_APP_KEY:-} - KUAISHOU_FEIFEI_APP_SECRET: ${KUAISHOU_FEIFEI_APP_SECRET:-} - KUAISHOU_FEIFEI_TIMEOUT_MS: ${KUAISHOU_FEIFEI_TIMEOUT_MS:-} - KUAISHOU_FEIFEI_NOTIFY_URL: ${KUAISHOU_FEIFEI_NOTIFY_URL:-} - KUAISHOU_FEIFEI_PRODUCT_RULES_JSON: ${KUAISHOU_FEIFEI_PRODUCT_RULES_JSON:-} - CORS_ALLOWED_ORIGINS: ${CORS_ALLOWED_ORIGINS:-} logging: *json-log-rotation volumes: - ./apps/backend/data:/app/data