defmodule CCXT.MixProject do use Mix.Project def project do [ app: :ccxt_client, version: "0.6.1", elixir: "~> 1.18", elixirc_paths: elixirc_paths(Mix.env()), start_permanent: Mix.env() == :prod, deps: deps(), aliases: aliases(), description: "Elixir client library for cryptocurrency exchanges — generated from CCXT specs via compile-time macros.", package: package(), source_url: "https://github.com/ZenHive/ccxt_client" ] end defp package do [ licenses: ["MIT"], links: %{"GitHub" => "https://github.com/ZenHive/ccxt_client"} ] end def cli do [preferred_envs: ["test.json": :test, "dialyzer.json": :dev]] end def application do [ mod: {CCXT.Application, []}, extra_applications: [:logger] ] end defp elixirc_paths(:test), do: ["lib", "test/support"] defp elixirc_paths(_), do: ["lib"] defp deps do [ # Dev/test tooling {:ex_unit_json, "~> 0.4", only: [:dev, :test], runtime: false}, {:dialyzer_json, "~> 0.1", only: [:dev, :test], runtime: false}, {:styler, "~> 1.4", only: [:dev, :test], runtime: false}, {:credo, "~> 1.7", only: [:dev, :test], runtime: false}, {:sobelow, "~> 0.13", only: [:dev, :test], runtime: false}, {:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false}, {:ex_doc, "~> 0.39", only: :dev, runtime: false}, {:doctor, "~> 0.22", only: [:dev, :test], runtime: false}, # Tidewave for Claude Code MCP integration (non-Phoenix needs bandit) {:tidewave, "~> 0.5", only: :dev}, {:bandit, "~> 1.10", only: :dev}, # Code analysis tools {:ex_dna, "~> 1.1", only: [:dev, :test], runtime: false}, {:ex_ast, "~> 0.2", only: [:dev, :test], runtime: false}, {:ex_slop, "~> 0.2.0", only: [:dev, :test], runtime: false}, {:reach, "~> 1.5", only: [:dev, :test], runtime: false}, # reach 1.5 references Boxart.Render.* unconditionally; boxart is # `optional: true` in reach's hex manifest, so we pull it in here. {:boxart, "~> 0.3", only: [:dev, :test], runtime: false}, # Plug.Conn for Req.Test stubs with custom status codes (also needed by tidewave in :dev) {:plug, "~> 1.0", only: [:dev, :test]}, # Runtime dependencies {:jason, "~> 1.4"}, {:req, "~> 0.5"}, {:fuse, "~> 2.5"}, {:telemetry, "~> 1.0"}, # Self-describing APIs {:descripex, "~> 0.6"}, # WebSocket client (Gun-based, 5-function API + Deribit heartbeat + reconnection) {:zen_websocket, "~> 0.4"} ] end defp aliases do [ tidewave: [ "run --no-halt -e 'Agent.start(fn -> Bandit.start_link(plug: Tidewave, port: 4003) end)'" ] ] end end