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