service_name: gateway-service
node_id: gateway-local
environment: local
log:
  level: info
  format: json
  include_request_body: false
  include_response_body: false
  max_payload_bytes: 2048
http_addr: ":13000"
cors:
  enabled: true
  allowed_origins:
    - "http://localhost:3000"
    - "http://127.0.0.1:3000"
    - "http://localhost:5173"
    - "http://127.0.0.1:5173"
    - "http://localhost:30000"
    - "http://127.0.0.1:30000"
    # 本地工具页会用 10300/8787/8788 承载静态 HTML；精确放行测试端口，避免用 "*" 破坏凭证请求边界。
    - "http://localhost:10300"
    - "http://127.0.0.1:10300"
    - "http://localhost:8787"
    - "http://127.0.0.1:8787"
    - "http://localhost:8788"
    - "http://127.0.0.1:8788"
    - "https://global-interaction.com"
    - "https://www.global-interaction.com"
    - "https://h5.global-interaction.com"
    - "https://api.global-interaction.com"
  allowed_methods: ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"]
  allowed_headers:
    - "Authorization"
    - "Content-Type"
    - "X-Request-ID"
    - "X-App-Code"
    - "X-HY-App-Code"
    - "X-App-Package"
    - "X-Package-Name"
    - "X-App-Bundle-ID"
    - "X-Bundle-ID"
    - "X-App-Platform"
    - "X-Platform"
  expose_headers: ["X-Request-ID"]
  allow_credentials: true
  max_age_sec: 600
jwt_secret: "dev-shared-secret"
room_service_addr: "127.0.0.1:13001"
user_service_addr: "127.0.0.1:13005"
wallet_service_addr: "127.0.0.1:13004"
activity_service_addr: "127.0.0.1:13006"
game_service_addr: "127.0.0.1:13008"
grpc_client:
  # gateway 内部 gRPC 默认 deadline 包含一次 UNAVAILABLE 重试；业务长调用应在 handler 上下文显式收紧或放宽。
  default_timeout: "5s"
  connect_timeout: "2s"
  keepalive_time: "30s"
  keepalive_timeout: "10s"
  retry_max_attempts: 2
  retry_initial_backoff: "100ms"
  retry_max_backoff: "500ms"
  retry_backoff_multiplier: 2
  retryable_status_codes: ["UNAVAILABLE"]
app_config:
  # App 运行时配置由后台 APP配置写入 hyapp_admin，gateway 只读下发给 App。
  mysql_dsn: "hyapp:hyapp@tcp(127.0.0.1:23306)/hyapp_admin?parseTime=true&charset=utf8mb4&loc=UTC"
leaderboard:
  # 活动用户榜单只读 wallet_transactions 的送礼事实；时间窗口统一按 UTC 计算。
  wallet_mysql_dsn: "hyapp:hyapp@tcp(127.0.0.1:23306)/hyapp_wallet?parseTime=true&charset=utf8mb4&loc=UTC"
auth_rate_limit:
  # public auth 固定窗口频控；Redis 不可用时 gateway 启动失败，避免失去入口保护。
  enabled: true
  redis_addr: "127.0.0.1:13379"
  redis_password: ""
  redis_db: 0
  key_prefix: "gateway:auth:rate:"
  window_sec: 60
  ip_limit: 120
  device_id_limit: 30
  provider_ip_limit: 20
  display_user_id_ip_limit: 10
  display_user_id_limit: 50
  session_id_ip_limit: 30
login_risk:
  enabled: true
  redis_addr: "127.0.0.1:13379"
  redis_password: ""
  redis_db: 0
  key_prefix: "login_risk:ip:"
  fast_guard:
    blocked_languages: []
    blocked_language_primary_tags: []
    blocked_timezones: []
    blocked_timezone_prefixes: []
tencent_im:
  # 本地联调腾讯云 IM UserSig；SDKAppID 和密钥必须与 room-service 保持一致。
  sdk_app_id: 20036101
  secret_key: "dcdf53135f27e7cf8541c4ae9798fb0cb2f0e4d6c5c20022dbaea053f35cbb8c"
  admin_identifier: "900100100"
  admin_user_sig_ttl: "24h"
  # 客户端 UserSig 有效期；线上建议 12h-7d，按登录刷新策略决定。
  user_sig_ttl: "24h"
  endpoint: "adminapisgp.im.qcloud.com"
  request_timeout: "5s"
  # 腾讯云 IM 控制台回调 URL。需要公网可访问；本地为空表示暂不启用回调。
  callback_url: ""
  # 腾讯云 IM 回调鉴权 Token。启用回调鉴权后必须填写。
  callback_auth_token: ""

tencent_rtc:
  # 本地联调腾讯 RTC UserSig；当前复用同一腾讯应用，后续可独立切换。
  enabled: true
  sdk_app_id: 20036101
  secret_key: "dcdf53135f27e7cf8541c4ae9798fb0cb2f0e4d6c5c20022dbaea053f35cbb8c"
  # RTC 进房票据有效期；比 IM 短，降低泄露窗口，客户端按需刷新。
  user_sig_ttl: "2h"
  # 当前 room_id 是字符串，客户端只能使用 TRTC strRoomId，不能混用数字 roomId。
  room_id_type: "string"
  app_scene: "voice_chat_room"
  # 腾讯 RTC 控制台回调 URL。需要公网可访问；本地为空表示暂不启用回调。
  callback_url: ""
  # 腾讯 RTC 回调签名 key。启用回调后必须填写，gateway 会按原始 body 做 HMAC-SHA256 校验。
  callback_sign_key: ""

tencent-cos:
  # App 文件/头像上传使用腾讯云 COS；secret 只保存在 gateway 服务端配置。
  enabled: true
  secret-id: "IKIDMchhZEfrsiNo472DAtTpzzmLjttkOnyu"
  secret-key: "nMkbLsGRO6ZqulSyJQJ0UjjU0KSKxOgl"
  bucket-name: "yumi-assets-1420526837"
  region: "me-saudi-arabia"
  access-url: "https://media.haiyihy.com"
