[ 'supported' => ['zh', 'en', 'ne'], 'fallback' => 'en', ], 'default_currency' => env('LOTTERY_DEFAULT_CURRENCY', 'NPR'), /* | lottery_settings 表读缓存 TTL(秒)。调小可更快看到后台改值,调大减 DB 压力。 */ 'settings' => [ 'cache_ttl_seconds' => (int) env('LOTTERY_SETTINGS_CACHE_TTL', 60), ], 'main_site' => [ 'base_url' => env('MAIN_SITE_BASE_URL'), 'sso_jwt_secret' => env('MAIN_SITE_SSO_JWT_SECRET'), 'wallet_api_url' => env('MAIN_SITE_WALLET_API_URL'), 'wallet_api_key' => env('MAIN_SITE_WALLET_API_KEY'), 'wallet_timeout' => (int) env('MAIN_SITE_WALLET_TIMEOUT', 10), /** 主站钱包 HTTP 相对路径(拼接在 wallet_api_url 后);Stub 模式下忽略 */ 'wallet_debit_path' => env('MAIN_SITE_WALLET_DEBIT_PATH', '/wallet/debit-for-lottery'), 'wallet_credit_path' => env('MAIN_SITE_WALLET_CREDIT_PATH', '/wallet/credit-from-lottery'), ], /* | player_auth:配合 app/Services/PlayerTokenResolver.php | | dev_bypass:仅当 APP_ENV∈{local, testing} 且 LOTTERY_PLAYER_AUTH_DEV_BYPASS=true 时, | 允许 Authorization: Bearer dev:{players.id}(否则 dev: 会被当成 JWT 解析并报 8002) | jwt.* :主站签发的 JWT 内取站点、玩家字段的路径名(与主站约定一致);验签通过后若无映射行则自动建档 */ 'player_auth' => [ 'dev_bypass' => env('LOTTERY_PLAYER_AUTH_DEV_BYPASS', false), 'jwt' => [ 'algorithm' => env('LOTTERY_JWT_ALGORITHM', 'HS256'), 'claim_site_code' => env('LOTTERY_JWT_CLAIM_SITE_CODE', 'site_code'), 'claim_site_player_id' => env('LOTTERY_JWT_CLAIM_SITE_PLAYER_ID', 'site_player_id'), ], ], /* | admin_api:Sanctum Personal Access Token(auth:sanctum + lottery.admin) | | token_ttl_days:签发时刻起有效日历天数,到期后 Laravel 拒绝该 token,需重新登录。 */ 'admin_api' => [ 'token_ttl_days' => max(1, (int) env('ADMIN_API_TOKEN_TTL_DAYS', 7)), ], /* | 期号调度(GMT/业务日时区):生成计划、封盘与开奖时间点。 | 与 PRD 「期号生成 / 封盘 / 开奖调度」链路一致;RNG 详见 DrawRngRunner。 */ 'draw' => [ /** 盘面「业务日」切分与应用展示用 */ 'timezone' => env('LOTTERY_DRAW_TIMEZONE', 'UTC'), /** 开奖时间间隔(分钟),整日从 00:00 起排槽 */ 'interval_minutes' => max(1, min(1440, (int) env('LOTTERY_DRAW_INTERVAL_MINUTES', 5))), /** 下注开放时长(秒):start_time = close_time - betting_window_seconds */ 'betting_window_seconds' => max(10, (int) env('LOTTERY_DRAW_BETTING_WINDOW_SECONDS', 270)), /** 开奖前若干秒封盘:close_time = draw_time - 该值 */ 'close_before_draw_seconds' => max(5, (int) env('LOTTERY_DRAW_CLOSE_BEFORE_SECONDS', 30)), /** 预生成尚未开奖的期号数量(调度补齐);生产可调大,本地/联测建议 6–12 */ 'buffer_draws_ahead' => max(1, (int) env('LOTTERY_DRAW_BUFFER_AHEAD', 8)), /** true:RNG 后进入 review,需后台接口发布 */ 'require_manual_review' => filter_var(env('LOTTERY_DRAW_REQUIRE_MANUAL_REVIEW', true), FILTER_VALIDATE_BOOLEAN), /** 结果发布后的冷静期(分钟),{@see draws.cooling_end_time} */ 'cooldown_minutes' => max(0, (int) env('LOTTERY_DRAW_COOLDOWN_MINUTES', 15)), ], ];