# This file is responsible for configuring your application # and its dependencies with the aid of the Config module. # # This configuration file is loaded before any dependency and # is restricted to this project. # General application configuration import Config config :waffle, storage: Waffle.Storage.S3 config :ex_aws, json_codec: Jason config :ash_typescript, output_file: "assets/js/ash_rpc.ts", run_endpoint: "/rpc/run", validate_endpoint: "/rpc/validate", input_field_formatter: :camel_case, output_field_formatter: :camel_case, require_tenant_parameters: false, generate_zod_schemas: false, generate_phx_channel_rpc_actions: false, generate_validation_functions: true, zod_import_path: "zod", zod_schema_suffix: "ZodSchema", phoenix_import_path: "phoenix" config :mime, extensions: %{"json" => "application/vnd.api+json"}, types: %{"application/vnd.api+json" => ["json"]} config :ash_json_api, show_public_calculations_when_loaded?: false, authorize_update_destroy_with_error?: true config :ash_graphql, authorize_update_destroy_with_error?: true config :ash, allow_forbidden_field_for_relationships_by_default?: true, include_embedded_source_by_default?: false, show_keysets_for_all_actions?: false, default_page_type: :keyset, policies: [no_filter_static_forbidden_reads?: false], keep_read_action_loads_when_loading?: false, default_actions_require_atomic?: true, read_action_after_action_hooks_in_order?: true, bulk_actions_default_to_errors?: true, transaction_rollback_on_error?: true, redact_sensitive_values_in_errors?: true, known_types: [AshPostgres.Timestamptz, AshPostgres.TimestamptzUsec] config :spark, formatter: [ remove_parens?: true, "Ash.Resource": [ section_order: [ :admin, :authentication, :token, :user_identity, :postgres, :json_api, :graphql, :resource, :code_interface, :actions, :policies, :pub_sub, :preparations, :changes, :validations, :multitenancy, :attributes, :relationships, :calculations, :aggregates, :identities ] ], "Ash.Domain": [ section_order: [ :admin, :json_api, :graphql, :resources, :policies, :authorization, :domain, :execution ] ] ] config :mixer, ecto_repos: [Mixer.Repo, Mixer.ClickhouseRepo], generators: [timestamp_type: :utc_datetime], ash_domains: [Mixer.Accounts, Mixer.Posts], ash_authentication: [return_error_on_invalid_magic_link_token?: true] # Configure the endpoint config :mixer, MixerWeb.Endpoint, url: [host: "localhost"], adapter: Bandit.PhoenixAdapter, render_errors: [ formats: [html: MixerWeb.ErrorHTML, json: MixerWeb.ErrorJSON], layout: false ], pubsub_server: Mixer.PubSub, live_view: [signing_salt: "tZ/Kgc7g"] # Configure the mailer # # By default it uses the "Local" adapter which stores the emails # locally. You can see the emails in your browser, at "/dev/mailbox". # # For production it's recommended to configure a different adapter # at the `config/runtime.exs`. config :mixer, Mixer.Mailer, adapter: Swoosh.Adapters.Local # Configure esbuild (the version is required) config :esbuild, version: "0.25.4", mixer: [ args: ~w(js/index.tsx js/app.js --bundle --target=es2022 --outdir=../priv/static/assets --external:/fonts/* --external:/images/* --alias:@=. --splitting --format=esm), cd: Path.expand("../assets", __DIR__), env: %{ "NODE_PATH" => Enum.join( [ Path.expand("../deps", __DIR__), Path.expand(Mix.Project.build_path()), Path.expand("../_build/dev", __DIR__) ], ":" ) } ] # Configure tailwind (the version is required) config :tailwind, version: "4.1.12", mixer: [ args: ~w( --input=assets/css/app.css --output=priv/static/assets/css/app.css ), cd: Path.expand("..", __DIR__) ] # Configure Elixir's Logger config :logger, :default_formatter, format: "$time $metadata[$level] $message\n", metadata: [:request_id] # Use Jason for JSON parsing in Phoenix config :phoenix, :json_library, Jason # ClickHouse repo — migrations live in priv/clickhouse/migrations config :mixer, Mixer.ClickhouseRepo, priv: "priv/clickhouse", migration_source: "ch_schema_migrations" # Import environment specific config. This must remain at the bottom # of this file so it overrides the configuration defined above. import_config "#{config_env()}.exs"