Skip to main content

lib/rujira.ex

defmodule Rujira do
  @moduledoc """
  Domain library for Rujira.

  Provides shared types, query APIs, and event parsing for the Rujira
  DeFi suite built on Cosmos/THORChain.

  ## Modules

  - `Rujira.Amount` — integer amounts normalized to 8 decimal places
  - `Rujira.Assets` — blockchain asset resolution across 20+ chains
  - `Rujira.Coin` — asset + amount pairs
  - `Rujira.Contracts` — CosmWasm contract queries
  - `Rujira.Deployments` — on-chain contract registry resolved live from THORChain
  - `Rujira.Events` — generic multi-protocol event parser
  - `Rujira.Fin` — FIN DEX query API (pairs, orders, ranges)
  - `Rujira.Math` — decimal arithmetic and numeric parsing
  - `Rujira.Node` — pluggable gRPC node abstraction
  - `Rujira.Prices` — pluggable price provider

  ## Configuration

      config :rujira_ex,
        node: MyApp.Node,
        prices: Rujira.Prices.Default,
        cache_ttl: 15_000
  """

  @doc """
  Returns the global cache TTL in milliseconds.

  Used by all `defmemo` calls with expiration. Configurable via:

      config :rujira_ex, cache_ttl: 15_000

  Defaults to 15 seconds. Set to 0 to disable expiration.
  """
  @spec cache_ttl() :: non_neg_integer()
  def cache_ttl do
    Application.get_env(:rujira_ex, :cache_ttl, 15_000)
  end
end