Packages

Core functionality for Gamend, including user management, authentication, friends, matchmaking, and more.

Current section

Files

Jump to
Raw

mix.exs

defmodule GamendCore.MixProject do
use Mix.Project
@version "1.0.1216"
@source_url "https://github.com/appsinacup/gamend"
def project do
[
app: :gamend_core,
version: System.get_env("GAMEND_CONTENT_APP_VERSION") || @version,
elixir: "~> 1.20",
start_permanent: Mix.env() == :prod,
dialyzer: [plt_add_apps: [:mix]],
deps: deps(),
description: description(),
package: package(),
docs: docs()
]
end
def application do
[
extra_applications: [:logger]
]
end
defp deps do
[
{:argon2_elixir, "~> 4.0"},
# Kept so hashes written before the Argon2id switch still verify.
{:bcrypt_elixir, "~> 3.0"},
{:nebulex, "~> 3.0.0-rc.2"},
{:nebulex_local, "~> 3.0.0-rc.2"},
{:nebulex_distributed, "~> 3.2"},
{:nebulex_redis_adapter, "~> 3.0.0-rc.2"},
{:decorator, "~> 1.4"},
{:phoenix, "~> 1.8.3"},
{:protobuf, "~> 0.17"},
{:phoenix_ecto, "~> 4.5"},
{:ecto_sql, "~> 3.14"},
{:ecto_sqlite3, "~> 0.12"},
{:postgrex, ">= 0.0.0"},
{:swoosh, "~> 1.20"},
{:gen_smtp, "~> 1.0"},
{:req, "~> 0.6"},
{:stripity_stripe, "~> 3.3"},
{:ex_aws, "~> 2.5"},
{:ex_aws_s3, "~> 2.5"},
{:sweet_xml, "~> 0.7"},
{:telemetry_metrics, "~> 1.0"},
{:telemetry_poller, "~> 1.0"},
{:gettext, "~> 1.0"},
{:jason, "~> 1.2"},
{:dns_cluster, "~> 0.2.0"},
{:ueberauth, "~> 0.10"},
{:ueberauth_apple, "~> 0.7"},
{:ueberauth_steam_strategy, "~> 0.2.1"},
{:jose, "~> 1.11"},
{:guardian, "~> 2.3"},
{:oban, "~> 2.19"},
# 2.1.0 is the release that replaced kadabra+httpoison with mint (#296),
# which also avoids a conflict with ueberauth_steam_strategy's
# httpoison ~> 3.0 pin. Anything older drags hackney back in.
{:pigeon, "~> 2.1"},
{:goth, "~> 1.4"},
# crontab was pulled in transitively by quantum; the Schedule tick worker
# still parses/matches cron expressions with it.
{:crontab, "~> 1.1"},
{:corsica, "~> 2.0"},
{:mdex, "~> 0.13"},
# Syntax highlighting engine MDEx delegates to; without it fenced code
# renders as undifferentiated text.
{:lumis, "~> 0.1"},
{:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false},
{:ex_doc, "~> 0.40", only: :dev, runtime: false}
]
end
defp description do
"""
Core functionality for Gamend, including user management, authentication, friends, matchmaking, and more.
"""
end
defp package do
[
name: "gamend_core",
licenses: ["MIT"],
links: %{
"GitHub" => @source_url,
"Changelog" => "#{@source_url}/blob/main/CHANGELOG.md"
},
files: ~w(lib priv/repo .formatter.exs mix.exs README.md LICENSE)
]
end
defp docs do
[
main: "readme",
source_url: @source_url,
source_ref: "v#{@version}",
extras: ["README.md", "../../CHANGELOG.md"],
# Group Gamend.Hooks callbacks by entity (User / Lobby / Group / …)
# instead of one alphabetical list. Same classifier as the SDK docs and
# the admin runtime page.
groups_for_docs: hook_doc_groups(),
# Forty-odd modules in one alphabetical list buries the dozen that are
# actually entry points, so group them the way the guides do.
groups_for_modules: module_groups()
]
end
defp module_groups do
[
Accounts: [~r/^Gamend\.(Accounts|Apple|OAuth)/],
Lobbies: [~r/^Gamend\.Lobb(ies|ySnapshots)/],
Matchmaking: [~r/^Gamend\.(Matchmaking|ReadyChecks)/],
Social: [~r/^Gamend\.(Friends|Groups|Parties|Chat)/],
Progression: [~r/^Gamend\.(Quests|Leaderboards|Tournaments)/],
Economy: [~r/^Gamend\.(Economy|Inventory|Payments)/],
"Storage & content": [~r/^Gamend\.(KV|Storage|Content|Theme|Settings)/],
Delivery: [~r/^Gamend\.(Notifications|Push|Realtime)/],
Plugins: [~r/^Gamend\.Hooks/],
Operations: [
~r/^Gamend\.(Retention|IpBans|Limits|Jobs|Schedule|Cache|Repo|Async|Config|Env|Lock|Mailer)/
],
# Building blocks a plugin rarely touches directly.
Internals: [~r/^Gamend\.(Schema|Types|UUIDv7|Proto)/]
]
end
@hook_groups ~w(Lifecycle User Lobby Group Party Chat Quest Leaderboard Tournament
Matchmaking ReadyCheck Payments Economy Push KV)
defp hook_doc_groups do
for group <- @hook_groups do
{:"#{group} hooks",
fn meta -> meta[:kind] == :callback and hook_group(to_string(meta[:name])) == group end}
end
end
defp hook_group(name) do
cond do
name in ~w(after_startup before_stop on_custom_hook) -> "Lifecycle"
String.contains?(name, "kv") -> "KV"
String.contains?(name, "chat") -> "Chat"
String.contains?(name, "quest") -> "Quest"
String.contains?(name, "score") -> "Leaderboard"
String.contains?(name, "matchmaking") -> "Matchmaking"
String.contains?(name, "ready_check") -> "ReadyCheck"
String.contains?(name, "push") -> "Push"
String.contains?(name, "tournament") -> "Tournament"
String.contains?(name, "purchase") or String.contains?(name, "entitlement") -> "Payments"
String.contains?(name, "wallet") or String.contains?(name, "inventory") -> "Economy"
String.contains?(name, "party") -> "Party"
String.contains?(name, "group") -> "Group"
String.contains?(name, "lobby") -> "Lobby"
String.contains?(name, "user") -> "User"
true -> "Other"
end
end
end