Packages

Vodacom M-Pesa OpenAPI client for Elixir — C2B, B2C, B2B, reversals, direct debit and transaction queries across Tanzania, Lesotho, Ghana and the DRC.

Current section

Files

Jump to
Raw

mix.exs

defmodule ElixirMpesa.MixProject do
use Mix.Project
@version "0.2.0"
@source_url "https://github.com/jamesnjovu/elixir_mpesa"
@description "Vodacom M-Pesa OpenAPI client for Elixir — C2B, B2C, B2B, reversals, direct " <>
"debit and transaction queries across Tanzania, Lesotho, Ghana and the DRC."
def project do
[
app: :elixir_mpesa,
version: @version,
elixir: "~> 1.15",
elixirc_paths: elixirc_paths(Mix.env()),
start_permanent: Mix.env() == :prod,
description: @description,
package: package(),
deps: deps(),
docs: docs(),
aliases: aliases(),
name: "ElixirMpesa",
source_url: @source_url,
homepage_url: "https://hexdocs.pm/elixir_mpesa",
test_coverage: [summary: [threshold: 0]],
dialyzer: [
plt_local_path: "priv/plts",
plt_core_path: "priv/plts",
flags: [:error_handling, :extra_return, :missing_return, :underspecs]
]
]
end
def application do
[
extra_applications: [:logger, :public_key],
mod: {ElixirMpesa.Application, []}
]
end
defp elixirc_paths(:test), do: ["lib", "test/support"]
defp elixirc_paths(_), do: ["lib"]
defp deps do
[
{:req, "~> 0.5"},
{:jason, "~> 1.2"},
{:plug, "~> 1.15", only: :test},
{:ex_doc, "~> 0.34", only: :dev, runtime: false},
{:credo, "~> 1.7", only: [:dev, :test], runtime: false},
{:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false}
]
end
defp package do
[
name: "elixir_mpesa",
maintainers: ["James Njovu"],
files: ~w(lib guides .formatter.exs mix.exs README.md CHANGELOG.md LICENSE),
licenses: ["MIT"],
links: %{
"GitHub" => @source_url,
"Changelog" => "#{@source_url}/blob/main/CHANGELOG.md",
"Docs" => "https://hexdocs.pm/elixir_mpesa",
"M-Pesa OpenAPI Portal" => "https://openapiportal.m-pesa.com"
}
]
end
defp docs do
[
main: "readme",
source_url: @source_url,
source_ref: "v#{@version}",
formatters: ["html"],
extras: [
"README.md",
"guides/getting-started.md",
"guides/markets.md",
"guides/authentication.md",
"guides/payments.md",
"guides/direct-debit.md",
"guides/error-codes.md",
"guides/testing.md",
"guides/upgrading.md",
"CHANGELOG.md",
"LICENSE"
],
groups_for_extras: [
Guides: ~r/guides\/(getting-started|markets|authentication)/,
Operations: ~r/guides\/(payments|direct-debit)/,
Reference: ~r/guides\/(error-codes|testing|upgrading)/
],
groups_for_modules: [
Core: [ElixirMpesa, ElixirMpesa.Transactions],
Configuration: [ElixirMpesa.Config],
Results: [ElixirMpesa.Response, ElixirMpesa.Error],
Internals: [ElixirMpesa.Client, ElixirMpesa.Crypto, ElixirMpesa.Session],
Deprecated: [ElixirMpesa.GenerateSessionKey]
],
groups_for_docs: [
Payments: &(&1[:group] == :payments),
Queries: &(&1[:group] == :queries),
"Direct debit": &(&1[:group] == :direct_debit),
Session: &(&1[:group] == :session)
]
]
end
defp aliases do
[
docs: ["docs", &llms_txt/1],
lint: ["format --check-formatted", "credo --strict", "dialyzer"],
ci: ["lint", "test"]
]
end
# Writes doc/llms.txt so hexdocs.pm/elixir_mpesa/llms.txt serves a condensed,
# machine-readable summary for coding assistants. Kept out of lib/ so it never
# ships in the Hex package.
defp llms_txt(_args) do
source = "llms.txt"
if File.exists?(source) do
File.mkdir_p!("doc")
File.cp!(source, "doc/llms.txt")
Mix.shell().info([:green, "* copied ", :reset, "doc/llms.txt"])
end
end
end