defmodule Coffrify.MixProject do @moduledoc """ Mix project definition for the official Coffrify Elixir SDK. Coffrify is an encrypted file-transfer infrastructure (https://coffrify.com). This SDK is the canonical Elixir client and mirrors the JavaScript SDK (`@coffrify/sdk`) feature-for-feature: 35 resources, signed webhooks, retry policies, circuit breaker, client-side rate limiter, idempotency store, telemetry, and Phoenix/Plug integration helpers. """ use Mix.Project @version "0.9.0" @source_url "https://github.com/coffrify/coffrify-elixir" def project do [ app: :coffrify, version: @version, elixir: "~> 1.15", elixirc_paths: elixirc_paths(Mix.env()), start_permanent: Mix.env() == :prod, consolidate_protocols: Mix.env() != :test, deps: deps(), description: description(), package: package(), docs: docs(), name: "Coffrify", source_url: @source_url, homepage_url: "https://coffrify.com", aliases: aliases() ] end def application do [ extra_applications: [:logger, :crypto, :inets, :ssl] ] end defp elixirc_paths(:test), do: ["lib", "test/support"] defp elixirc_paths(_), do: ["lib"] defp deps do [ # HTTP client — battle-tested, fetch-like ergonomics {:req, "~> 0.5"}, # JSON encode/decode {:jason, "~> 1.4"}, # Validated option schemas for public APIs {:nimble_options, "~> 1.0"}, # Telemetry events — :coffrify, :request | :retry | :webhook {:telemetry, "~> 1.2"}, # Optional adapters (left for the host application to install) {:plug, "~> 1.16", optional: true}, {:phoenix, "~> 1.7", optional: true}, {:opentelemetry_api, "~> 1.3", optional: true}, {:redix, "~> 1.5", optional: true}, # Tooling {:ex_doc, "~> 0.34", only: :dev, runtime: false}, {:credo, "~> 1.7", only: [:dev, :test], runtime: false}, {:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false}, {:bypass, "~> 2.1", only: :test} ] end defp description do # hex.pm impose une description <= 300 caractères (et pas de tiret long). "Official Elixir SDK for Coffrify, encrypted file-transfer infrastructure: " <> "transfers, webhooks (Standard Webhooks v2), API keys, audit, vaults and " <> "30+ resources, with retry policies, circuit breaker, rate limiter, " <> "idempotency and Phoenix/Plug helpers." end defp package do [ name: "coffrify", maintainers: ["Coffrify"], licenses: ["MIT"], links: %{ "GitHub" => @source_url, "Coffrify" => "https://coffrify.com", "API Reference" => "https://docs.coffrify.com/api", "Changelog" => "#{@source_url}/blob/main/CHANGELOG.md" }, files: ~w(lib config mix.exs README.md LICENSE) ++ ~w(.formatter.exs) ] end defp docs do [ main: "Coffrify", source_ref: "v#{@version}", source_url: @source_url, formatters: ["html"], groups_for_modules: [ "Core": [ Coffrify, Coffrify.Client, Coffrify.Error ], "Resources": [ Coffrify.Resources.Transfers, Coffrify.Resources.Webhooks, Coffrify.Resources.ApiKeys, Coffrify.Resources.Audit, Coffrify.Resources.Analytics, Coffrify.Resources.Branding, Coffrify.Resources.Domains, Coffrify.Resources.Folders, Coffrify.Resources.Collections, Coffrify.Resources.Members, Coffrify.Resources.Notifications, Coffrify.Resources.Gdpr, Coffrify.Resources.Sessions, Coffrify.Resources.Downloads, Coffrify.Resources.Alerts, Coffrify.Resources.ApiTokens, Coffrify.Resources.Templates, Coffrify.Resources.Requests, Coffrify.Resources.Coffres, Coffrify.Resources.MagicLinks, Coffrify.Resources.Quotas, Coffrify.Resources.Billing, Coffrify.Resources.Status, Coffrify.Resources.Changelog, Coffrify.Resources.Recipients, Coffrify.Resources.Rooms, Coffrify.Resources.Mfa, Coffrify.Resources.Marketing, Coffrify.Resources.GdprExtra, Coffrify.Resources.Sso, Coffrify.Resources.Scim, Coffrify.Resources.WebhookExtras, Coffrify.Resources.WorkspaceExtras ], "Webhooks": [ Coffrify.Webhook.Verification, Coffrify.Webhook.EventCatalog ], "Runtime": [ Coffrify.Runtime.Retry, Coffrify.Runtime.Retry.Policy, Coffrify.Runtime.Retry.ExponentialBackoff, Coffrify.Runtime.Retry.DecorrelatedJitter, Coffrify.Runtime.Retry.FibonacciBackoff, Coffrify.Runtime.Retry.FixedDelay, Coffrify.Runtime.CircuitBreaker, Coffrify.Runtime.RateLimit, Coffrify.Runtime.RateLimit.TokenBucket, Coffrify.Runtime.RateLimit.LeakyBucket, Coffrify.Runtime.Paginate, Coffrify.Runtime.Telemetry, Coffrify.Runtime.Idempotency, Coffrify.Runtime.Idempotency.Memory, Coffrify.Runtime.Idempotency.Redis, Coffrify.Runtime.WebhookReplay, Coffrify.Runtime.WebhookReplay.Memory, Coffrify.Runtime.WebhookReplay.Redis ], "Phoenix / Plug": [ Coffrify.Plug.VerifyWebhook, Coffrify.Phoenix.WebhookController ], "Testing": [ Coffrify.Testing, Coffrify.Testing.Fixtures ] ] ] end defp aliases do [ check: ["format --check-formatted", "credo --strict", "dialyzer"] ] end end