mirror of
https://github.com/warmbly/warmbly.git
synced 2026-08-19 08:01:16 +00:00
ce870a15b3
- realtime/: `mix format` applied; long Logger calls reformatted across config/runtime/application/connections/user_channel/user_socket/ endpoint. CI's "Check formatting" step now passes. - CI Elixir bumped from 1.16 → 1.18 (with OTP 27) to match mix.exs's `~> 1.18` requirement. Phoenix 1.8.7 + plug 1.19 also expect this. - web/: generate + commit pnpm-lock.yaml so actions/setup-node@v4's pnpm cache step + `pnpm install --frozen-lockfile` can resolve.
79 lines
2.9 KiB
Elixir
79 lines
2.9 KiB
Elixir
import Config
|
|
|
|
# General application configuration
|
|
config :realtime,
|
|
port: String.to_integer(System.get_env("PORT") || "4000"),
|
|
jwt_secret: System.get_env("JWT_SECRET") || "dev_secret_change_in_production",
|
|
gcp_project_id: System.get_env("GCP_PROJECT_ID") || "warmbly",
|
|
pubsub_enabled: System.get_env("PUBSUB_ENABLED") == "true",
|
|
pubsub_subscriptions: [
|
|
"task-status-sub",
|
|
"campaign-update-sub",
|
|
"warmup-update-sub",
|
|
"email-error-sub",
|
|
"email-warning-sub",
|
|
"user-events-sub",
|
|
"email-inbox-sub",
|
|
"bulk-operations-sub",
|
|
"contacts-sync-sub"
|
|
],
|
|
# Redis configuration
|
|
redis_url: System.get_env("REDIS_URL") || "redis://localhost:6379/0",
|
|
# Connection limits
|
|
max_connections_per_user: String.to_integer(System.get_env("MAX_CONNECTIONS_PER_USER") || "10"),
|
|
max_connections_per_ip: String.to_integer(System.get_env("MAX_CONNECTIONS_PER_IP") || "50"),
|
|
max_connections_global: String.to_integer(System.get_env("MAX_CONNECTIONS_GLOBAL") || "100000"),
|
|
# Rate limits (per minute)
|
|
rate_limit_ws_message: String.to_integer(System.get_env("RATE_LIMIT_WS_MESSAGE") || "120"),
|
|
rate_limit_ws_join: String.to_integer(System.get_env("RATE_LIMIT_WS_JOIN") || "30"),
|
|
rate_limit_ws_event: String.to_integer(System.get_env("RATE_LIMIT_WS_EVENT") || "60")
|
|
|
|
# Ecto Repo configuration (for API key validation)
|
|
config :realtime, Realtime.Repo,
|
|
database: System.get_env("DATABASE_NAME") || "warmbly_dev",
|
|
username: System.get_env("DATABASE_USER") || "postgres",
|
|
password: System.get_env("DATABASE_PASSWORD") || "postgres",
|
|
hostname: System.get_env("DATABASE_HOST") || "localhost",
|
|
port: String.to_integer(System.get_env("DATABASE_PORT") || "5432"),
|
|
pool_size: String.to_integer(System.get_env("DATABASE_POOL_SIZE") || "5")
|
|
|
|
config :realtime, ecto_repos: [Realtime.Repo]
|
|
|
|
# Phoenix Endpoint configuration
|
|
config :realtime, RealtimeWeb.Endpoint,
|
|
url: [host: "localhost"],
|
|
http: [
|
|
port: String.to_integer(System.get_env("PORT") || "4000"),
|
|
transport_options: [socket_opts: [:inet6]]
|
|
],
|
|
secret_key_base:
|
|
System.get_env("SECRET_KEY_BASE") ||
|
|
"dev_secret_key_base_min_64_chars_change_in_production_1234567890",
|
|
pubsub_server: Realtime.PubSub
|
|
|
|
# Logger configuration
|
|
config :logger, :console,
|
|
format: "$time $metadata[$level] $message\n",
|
|
metadata: [:request_id, :user_id]
|
|
|
|
# Use Jason for JSON parsing
|
|
config :phoenix, :json_library, Jason
|
|
|
|
# Sentry configuration
|
|
config :sentry,
|
|
environment_name: Mix.env(),
|
|
enable_source_code_context: true,
|
|
root_source_code_paths: [File.cwd!()]
|
|
|
|
# Goth configuration for GCP authentication (if credentials available)
|
|
if System.get_env("GOOGLE_APPLICATION_CREDENTIALS_JSON") do
|
|
config :goth, json: System.get_env("GOOGLE_APPLICATION_CREDENTIALS_JSON")
|
|
else
|
|
if File.exists?("config/gcp-credentials.json") do
|
|
config :goth, json: File.read!("config/gcp-credentials.json")
|
|
end
|
|
end
|
|
|
|
# Import environment specific config
|
|
import_config "#{config_env()}.exs"
|