Autonoma Elixir SDK
Elixir implementation of the Autonoma Environment Factory SDK.
Packages
| Package | Description |
|---|---|
:autonoma | Core protocol (HMAC, refs, graph, handler) |
:autonoma_ecto | Ecto ORM adapter |
:autonoma_plug | Plug server handler |
Quick Start
Install
Add to your mix.exs deps:
defp deps do
[
{:autonoma, "~> 0.1"}
]
endPlug + Ecto
# In your router
executor = Autonoma.Ecto.Executor.ecto_executor(MyApp.Repo)
config = %{
executor: executor,
scope_field: "organization_id",
shared_secret: System.get_env("AUTONOMA_SHARED_SECRET"),
signing_secret: System.get_env("AUTONOMA_SIGNING_SECRET"),
auth: fn user, _context ->
token = MyApp.Auth.create_session_token(user["id"])
%{"headers" => %{"Authorization" => "Bearer #{token}"}}
end
}
forward "/api/autonoma", Autonoma.Plug.Handler, configModel name ↔ table name
By default, the SDK derives a model name from each SQL table by splitting on _ and PascalCasing each part — no pluralization. Examples:
| SQL table | Auto-derived model name |
|---|---|
user | User |
api_key | ApiKey |
branch_deployment | BranchDeployment |
organizations | Organizations (stays plural) |
api_keys | ApiKeys (stays plural) |
If every factory you register is keyed under the auto-derived name, omit :table_name_map entirely. The SDK handles the mapping.
You only need :table_name_map when a factory key disagrees with the auto-derived name. Common reasons:
-
Your tables are plural but you want singular factory keys:
organizationstable ↔"Organization"key. -
Legacy short names:
usrtable ↔"User"key,acltable ↔"AccessControl"key.
The map is sparse, not exhaustive: only list entries that actually differ. Auto-derivation covers the rest.
# Tables in DB: organization, user, api_key, deal (singular)
# Factories keyed: "Organization", "User", "ApiKey", "Deal"
# :table_name_map omitted — auto-derive is exact
# Tables in DB: organizations, users, api_keys
# Factories keyed singular → every entry disagrees:
config = %{
# ...
table_name_map: %{
"Organization" => "organizations",
"User" => "users",
"ApiKey" => "api_keys"
},
factories: %{"Organization" => ..., "User" => ..., "ApiKey" => ...}
}Red flag: if your :table_name_map has one entry per factory and every entry is just a plural↔singular rename, consider keeping factory keys plural ("Organizations") and dropping the map entirely. Plural keys are valid — pick whichever convention your scenarios use.
Commands
mix deps.get # install dependencies
mix test # run testsDocumentation
For protocol-level documentation, see the root protocol/ directory. For a runnable example, see examples/elixir/phoenix-ecto/.