Skip to content

Releases: cometsh/atex

v0.9.1

17 Apr 11:59
v0.9.1
6661655

Choose a tag to compare

0.9.1 - 2026-04-17

Fixed

  • Fix a problem with error struct generation with some lexicons in deflexicon.

v0.9.0

16 Apr 09:10
f8f2e26

Choose a tag to compare

0.9.0 - 2026-04-16

Breaking Changes

  • Atex.NSID is now a struct (%Atex.NSID{authority, name, fragment}). Public
    functions now accept and return structs. You can use new/1, new!/1 or the
    new ~NSID"" for constructing from a NSID string.

Added

  • Atex.Repo module for building, mutating, signing, serialising, and loading
    AT Protocol repositories. Also supports lazily streaming from a CAR binary for
    efficient processing of large repository exports.
  • Atex.XRPC.UnauthedClient module for running unauthenticated XRPC fetches on
    public APIs or PDSes.
  • Atex.Lexicon.Resolver module for resolving published lexicons by NSID,
    following the
    publication and resolution spec.
  • mix atex.lexicons.resolve task for resolving one or more lexicons by NSID
    and writing to a JSON file.
  • Sigils for Atex.AtURI and Atex.TID, ~AT"at://..." and ~TID"..."
    respectively.
  • /logout route for Atex.OAuth.Plug to revoke the current session, as well
    as Atex.OAuth.Plug.revoke_session/2 to revoke a conn's session
    programmaticly (e.g. from a session management dashboard).
  • deflexicon now generates structs for errors defined by queries and
    procedures, under a Errors submodule.
  • deflexicon generated models now have a coerce_error/1 function that takes
    in a map and tries to convert it to one of its known error structs.
  • Atex.XRPC.Error struct for wrapping XRPC error responses, including both
    known errors (with typed error_struct) and unknown errors.

Fixed

  • Fix issue when trying to validate OAuth authorisation codes in localhost mode
    on PDS implementations that are more strict than the Bluesky reference
    implementation.

v0.8.0

29 Mar 19:39
d2ae08b

Choose a tag to compare

0.8.0 - 2026-03-29

Breaking Changes

  • The Atex.IdentityResolver config key has been replaced with a flat config
    option. Update your config from:

      config :atex, Atex.IdentityResolver,
        directory_url: "https://plc.directory"

    to:

      config :atex,
        plc_directory_url: "https://plc.directory"
  • Atex.Config.IdentityResolver has been renamed to Atex.Config.

  • Atex.IdentityResolver.DIDDocument has been renamed to Atex.DID.Document.

  • Replace existing Atex.DID.Document.new/1 method with the method previously
    named from_json/1.

Added

  • Atex.Crypto module for performing AT Protocol-related cryptographic
    operations.
  • Atex.PLC module for interacting with
    a did:plc directory API.
  • Atex.ServiceAuth module for validating
    inter-service authentication tokens.
  • Various improvements to Atex.Did.Document
    • Add Atex.DID.Document.Service and Atex.DID.Document.VerificationMethod
      sub-structs.
    • Add to_json/1 methods and JSON.Encoder protocols for easy conversion to
      camelCase JSON.
  • Atex.XRPC.Router module with query/3 and procedure/3 macros for easily
    building XRPC server routes inside a Plug.Router, with built-in service auth
    validation and validation if passed the name of a module using deflexicon.
  • deflexicon now emits content_type/0 functions (on Input submodules for typed JSON bodies,
    otherwise on the root module) for procedures.
  • Atex.XRPC.ServiceAuthClient module for making requests to other atproto services using a service auth token.

Fixed

  • Fix a problem where generated %<LexiconId>.Params structs could not be
    passed to an XRPC call due to not having the Enumerable protocol implemented.
  • Correctly generate Input/Output submodules with from_json methods for
    queries and procedures that use ref or union types.

v0.7.1

06 Feb 04:39
v0.7.1
b5286b8

Choose a tag to compare

[0.7.1] - 2026-02-06

Breaking Changes

  • Included Com.Atproto.* lexicon modules have been removed and put into
    atex_atproto instead.

Added

  • The PLC directory used for identity resolution can now be configured. See
    Atex.Config.IdentityResolve for more information. (Thanks
    @hexmani.ac!)
  • Add an extra optional opts parameter to some Atex.OAuth functions, to
    allow for better integration with other ecosystems. (Thanks
    @lekkice.moe!)

v0.7.0

06 Jan 22:31
v0.7.0
f3ce4f6

Choose a tag to compare

[0.7.0] - 2026-01-07

Breaking Changes

  • Atex.OAuth.Plug now raises Atex.OAuth.Error exceptions instead of handling
    error situations internally. Applications should implement Plug.ErrorHandler
    to catch and gracefully handle them.
  • Atex.OAuth.Plug now saves only the user's DID in the session instead of the
    entire OAuth session object. Applications must use Atex.OAuth.SessionStore
    to manage OAuth sessions.
  • Atex.XRPC.OAuthClient has been overhauled to use Atex.OAuth.SessionStore
    for retrieving and managing OAuth sessions, making it easier to use with not
    needing to manually keep a Plug session in sync.

Added

  • Atex.OAuth.SessionStore behaviour and Atex.OAuth.Session struct for
    managing OAuth sessions with pluggable storage backends.
    • Atex.OAuth.SessionStore.ETS - in-memory session store implementation.
    • Atex.OAuth.SessionStore.DETS - persistent disk-based session store
      implementation.
  • Atex.OAuth.Plug now requires a :callback option that is a MFA tuple
    (Module, Function, Args), denoting a callback function to be invoked by after
    a successful OAuth login. See the OAuth example for a
    simple usage of this.
  • Atex.OAuth.Permission module for creating
    AT Protocol permission strings for
    OAuth.
  • Atex.OAuth.Error exception module for OAuth flow errors. Contains both a
    human-readable message string and a machine-readable reason atom for error
    handling.
  • Atex.OAuth.Cache module provides TTL caching for OAuth authorization server
    metadata with a 1-hour default TTL to reduce load on third-party PDSs.
  • Atex.OAuth.get_authorization_server/2 and
    Atex.OAuth.get_authorization_server_metadata/2 now support an optional
    fresh parameter to bypass the cache when needed.

Changed

  • mix atex.lexicons now adds @moduledoc false to generated modules to stop
    them from automatically cluttering documentation.
  • Atex.IdentityResolver.Cache.ETS now uses ConCache instead of ETS directly,
    with a 1-hour TTL for cached identity information.

v0.6.0

28 Dec 06:40
v0.6.0
84b5e39

Choose a tag to compare

[0.6.0] - 2025-11-25

Breaking Changes

  • deflexicon now converts all def names to be in snake_case instead of the
    casing as written the lexicon.

Added

  • deflexicon now emits structs for records, objects, queries, and procedures.
  • Atex.XRPC.get/3 and Atex.XRPC.post/3 now support having a lexicon struct
    as the second argument instead of the method's name, making it easier to have
    properly checked XRPC calls.
  • Add pre-transpiled modules for the core com.atproto lexicons.

v0.5.0

11 Oct 02:10
v0.5.0

Choose a tag to compare

[0.5.0] - 2025-10-11

Breaking Changes

  • Remove Atex.HTTP and associated modules as the abstraction caused a bit too
    much complexities for how early atex is. It may come back in the future as
    something more fleshed out once we're more stable.
  • Rename Atex.XRPC.Client to Atex.XRPC.LoginClient

Added

  • Atex.OAuth module with utilites for handling some OAuth functionality.
  • Atex.OAuth.Plug module (if Plug is loaded) which provides a basic but
    complete OAuth flow, including storing the tokens in Plug.Session.
  • Atex.XRPC.Client behaviour for implementing custom client variants.
  • Atex.XRPC now supports using different client implementations.
  • Atex.XRPC.OAuthClient to make XRPC calls on the behalf of a user who has
    authenticated with ATProto OAuth.

v0.4.0

27 Aug 10:30
v0.4.0
a5d95b4

Choose a tag to compare

[0.4.0] - 2025-08-27

Added

  • Atex.Lexicon module that provides the deflexicon macro, taking in a JSON
    Lexicon definition and converts it into a series of schemas for each
    definition within it.
  • mix atex.lexicons for converting lexicon JSON files into modules using
    deflexicon easily.

v0.3.0

28 Jun 15:03
v0.3.0
252a325

Choose a tag to compare

[0.3.0] - 2025-06-29

Changed

  • Atex.XRPC.Adapter renamed to Atex.HTTP.Adapter.

Added

  • Atex.HTTP module that delegates to the currently configured adapter.
  • Atex.HTTP.Response struct to be returned by Atex.HTTP.Adapter.
  • Atex.IdentityResolver module for resolving and validating an identity,
    either by DID or a handle.
    • Also has a pluggable cache (with a default ETS implementation) for keeping
      some data locally.

v0.2.0

09 Jun 10:47
v0.2.0
5e5e37b

Choose a tag to compare

[0.2.0] - 2025-06-09

Added

  • Atex.TID module for manipulating ATProto TIDs.
  • Atex.Base32Sortable module for encoding/decoding numbers as base32-sortable strings.
  • Basic XRPC client.