Skip to main content

mix.exs

defmodule TreasuryPrime.MixProject do
  use Mix.Project

  @version "1.0.0"
  @source_url "https://github.com/iamkanishka/treasury_prime"

  def project do
    [
      app: :treasury_prime,
      version: @version,
      elixir: "~> 1.14",
      start_permanent: Mix.env() == :prod,
      elixirc_paths: elixirc_paths(Mix.env()),
      consolidate_protocols: Mix.env() != :test,
      deps: deps(),
      package: package(),
      description: description(),
      name: "TreasuryPrime",
      source_url: @source_url,
      docs: docs(),
      test_coverage: [tool: ExCoveralls],
      preferred_cli_env: [
        coveralls: :test,
        "coveralls.detail": :test,
        "coveralls.post": :test,
        "coveralls.html": :test
      ],
      dialyzer: [
        plt_add_apps: [:mix, :ex_unit],
        plt_file: {:no_warn, "priv/plts/dialyzer.plt"},
        flags: [:error_handling, :missing_return, :extra_return]
      ]
    ]
  end

  def application do
    [
      extra_applications: [:logger, :inets, :ssl, :public_key, :crypto]
    ]
  end

  defp elixirc_paths(:test), do: ["lib", "test/support"]
  defp elixirc_paths(_), do: ["lib"]

  defp deps do
    [
      # JSON encoding / decoding for request and response bodies.
      {:jason, "~> 1.4"},

      # Optional: emits :telemetry events around every HTTP call. The library
      # works fine without it (telemetry calls are guarded), but it's the
      # de-facto standard for instrumentation in the Elixir ecosystem and is
      # required if you want metrics/logging via `:telemetry_metrics`,
      # `:telemetry_poller`, AppSignal, OpenTelemetry, etc.
      {:telemetry, "~> 1.2", optional: true},

      # Dev / test only.
      {:ex_doc, "~> 0.34", only: :dev, runtime: false},
      {:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false},
      {:credo, "~> 1.7", only: [:dev, :test], runtime: false},
      {:excoveralls, "~> 0.18", only: :test}
    ]
  end

  defp description do
    """
    An unofficial, complete Elixir client for the Treasury Prime banking API \
    (Ledger product) -- accounts, ACH, wires, book transfers, FedNow, cards, \
    KYC/account opening, check deposit, webhooks, sandbox simulations, and more.
    """
  end

  defp package do
    [
      name: "treasury_prime",
      maintainers: ["Kanishka Naik"],
      licenses: ["MIT"],
      links: %{
        "GitHub" => @source_url,
        "Treasury Prime API Docs" => "https://docs.treasuryprime.com/reference/introduction"
      },
      files: ~w(lib .formatter.exs mix.exs README.md CHANGELOG.md LICENSE)
    ]
  end

  defp docs do
    [
      main: "readme",
      extras: ["README.md", "CHANGELOG.md", "LICENSE"],
      source_ref: "v#{@version}",
      source_url: @source_url,
      groups_for_modules: [
        Client: [
          TreasuryPrime,
          TreasuryPrime.Client,
          TreasuryPrime.Config,
          TreasuryPrime.Error,
          TreasuryPrime.Page,
          TreasuryPrime.Idempotency
        ],
        "Account Opening": [
          TreasuryPrime.AccountApplication,
          TreasuryPrime.AccountProduct,
          TreasuryPrime.AccountNumberReservation,
          TreasuryPrime.AdditionalPersonApplication,
          TreasuryPrime.BusinessApplication,
          TreasuryPrime.PersonApplication,
          TreasuryPrime.Deposit,
          TreasuryPrime.Kyc,
          TreasuryPrime.KycProduct
        ],
        "Accounts & Parties": [
          TreasuryPrime.Account,
          TreasuryPrime.Business,
          TreasuryPrime.Person,
          TreasuryPrime.AccountLock,
          TreasuryPrime.ReserveAccount,
          TreasuryPrime.StatementConfig,
          TreasuryPrime.TaxDocument,
          TreasuryPrime.Transaction
        ],
        Payments: [
          TreasuryPrime.Ach,
          TreasuryPrime.Wire,
          TreasuryPrime.Book,
          TreasuryPrime.NetworkTransfer,
          TreasuryPrime.FedNow,
          TreasuryPrime.Check,
          TreasuryPrime.CheckDeposit,
          TreasuryPrime.Counterparty,
          TreasuryPrime.IncomingAch,
          TreasuryPrime.IncomingWire,
          TreasuryPrime.InvoiceAccountNumber,
          TreasuryPrime.ManualHold,
          TreasuryPrime.Greendot,
          TreasuryPrime.DepositSweep
        ],
        Cards: [
          TreasuryPrime.Card,
          TreasuryPrime.CardProduct,
          TreasuryPrime.CardEvent,
          TreasuryPrime.CardAuthLoopEndpoint,
          TreasuryPrime.DigitalWalletToken,
          TreasuryPrime.Marqeta.JS,
          TreasuryPrime.Marqeta.UXToolkit
        ],
        Utilities: [
          TreasuryPrime.Document,
          TreasuryPrime.File,
          TreasuryPrime.RoutingNumber,
          TreasuryPrime.Webhook,
          TreasuryPrime.WebhookEvent,
          TreasuryPrime.WebhookSignature
        ],
        Testing: [
          TreasuryPrime.Testing.Simulation
        ]
      ]
    ]
  end
end