Skip to content

Releases: snarfed/arroba

v0.7

09 Nov 05:59
77fb507
Compare
Choose a tag to compare

Breaking changes:

  • Add much more lexicon schema validation for records and XRPC method input, output, and parameters.
  • storage:
    • Switch Storage.write to return Block instead of CID.

Non-breaking changes:

  • did:
    • Add new update_plc method.
    • create_plc: add new also_known_as kwarg.
    • resolve_handle: drop Content-Type: text/plain requirement for HTTPS method.
  • mst:
    • Add new optional start kwarg to load_all.
  • repo:
  • storage:
    • Add new deactivate_repo, activate_repo, and write_event methods.
    • Add new optional repo kwarg to read_blocks_by_seq and read_events_by_seq to limit returned results to a single repo.
  • datastore_storage:
    • Add new max_size and accept_types kwarg to AtpRemoteBlob.get_or_create for the blob's maxSize and accept parameters in its lexicon. If the fetched file doesn't satisfy those constraints, raises lexrpc.ValidationError.
    • DatastoreStorage.read_blocks_by_seq: use strong consistency for datastore query. May fix occasional AssertionError when serving subscribeRepos.
  • xrpc_sync:
    • Switch getBlob from returning HTTP 302 to 301.
    • Implement since param in getRepo.
    • subscribeRepos: wait up to 60s on a skipped sequence number before giving up and emitting it as a gap.
  • util:
    • service_jwt: add new **claims parameter for additional JWT claims, eg lxm.

v0.6

24 Jun 19:06
05981da
Compare
Choose a tag to compare

Breaking changes:

  • datastore_storage:
    • DatastoreStorage: add new required ndb_client kwarg to constructor, used to get new context in lexrpc websocket subscription handlers that run server methods like subscribeRepos in separate threads (snarfed/lexrpc#8).
    • DatastoreStorage.read_blocks_by_seq: if the ndb context gets closed while we're still running, log a warning and return. (This can happen in eg flask_server if the websocket client disconnects early.)
    • AtpRemoteBlob: if the blob URL doesn't return the Content-Type header, infer type from the URL, or fall back to application/octet-stream (bridgy-fed#1073).
  • did:
    • Cache resolve_plc, resolve_web, and resolve_handle for 6h, up to 5000 total results per call.
  • storage: rename Storage.read_commits_by_seq to read_events_by_seq for new account tombstone support.
  • xrpc_sync: rename send_new_commits to send_events, ditto.
  • xrpc_repo: stop requiring auth for read methods: getRecord, listRecords, describeRepo.

Non-breaking changes:

  • did:
    • Add HANDLE_RE regexp for handle validation.
  • storage:
    • Add new Storage.tombstone_repo method, implemented in MemoryStorage and DatastoreStorage. Used to delete accounts. (bridgy-fed#783)
    • Add new Storage.load_repos method, implemented in MemoryStorage and DatastoreStorage. Used for com.atproto.sync.listRepos.
  • util:
    • service_jwt: add optional aud kwarg.
  • xrpc_sync:
    • subscribeRepos:
      • Add support for non-commit events, starting with account tombstones.
      • Add ROLLBACK_WINDOW environment variable to limit size of rollback window. Defaults to no limit.
      • For commits with create or update operations, always include the record block, even if it already existed in the repo beforehand (snarfed/bridgy-fed#1016).
      • Bug fix, populate the time each commit was created in time instead of the current time (snarfed/bridgy-fed#1015).
    • Start serving getRepo queries with the since parameter. since still isn't actually implemented, but we now serve the entire repo instead of returning an error.
    • Implement getRepoStatus method.
    • Implement listRepos method.
    • getRepo bug fix: include the repo head commit block.
  • xrpc_repo:
  • xrpc_*: return RepoNotFound and RepoDeactivated errors when appropriate (snarfed/bridgy-fed#1083).

v0.5: ### Notable changes

16 Mar 20:33
f1563f7
Compare
Choose a tag to compare

Notable changes

  • Bug fix: base32-encode TIDs in record keys, at:// URIs, commit revs, etc. Before, we were using the integer UNIX timestamp directly, which happened to be the same 13 character length. Oops.
  • Switch from BGS_HOST environment variable to RELAY_HOST. BGS_HOST is still supported for backward compatibility.
  • datastore_storage:
    • Bug fix for DatastoreStorage.last_seq, handle new NSID.
    • Add new AtpRemoteBlob class for storing "remote" blobs, available at public HTTP URLs, that we don't store ourselves.
  • did:
    • create_plc: strip padding from genesis operation signature (for did-method-plc#54, atproto#1839).
    • resolve_handle: return None on bad domain, eg .foo.com.
    • resolve_handle bug fix: handle charset specifier in HTTPS method response Content-Type.
  • util:
    • new_key: add seed kwarg to allow deterministic key generation.
  • xrpc_repo:
    • getRecord: try to load record locally first; if not available, forward to AppView.
  • xrpc_sync:
    • Implement getBlob, right now only based on "remote" blobs stored in AtpRemoteBlobs in datastore storage.

v0.4: ### Notable changes

19 Sep 19:52
19e2cf7
Compare
Choose a tag to compare

Notable changes

  • Migrate to ATProto repo v3. Specifically, the existing subscribeRepos sequence number is reused as the new rev field in commits. (Discussion.).
  • Add new did module with utilities to create and resolve did:plcs and resolve did:webs.
  • Add new util.service_jwt function that generates ATProto inter-service JWTs.
  • Repo:
    • Add new signing_key/rotation_key attributes. Generate store, and load both in datastore_storage.
    • Remove format_init_commit, migrate existing calls to format_commit.
  • Storage:
    • Rename read_from_seq => read_blocks_by_seq (and in MemoryStorage and DatastoreStorage), add new read_commits_by_seq method.
    • Merge load_repo did/handle kwargs into did_or_handle.
  • XRPCs:
    • Make subscribeRepos check storage for all new commits every time it wakes up.
      • As part of this, replace xrpc_sync.enqueue_commit with new send_new_commits function that takes no parameters.
    • Drop bundled app.bsky/com.atproto lexicons, use lexrpc's instead.

v0.3

29 Aug 19:56
af45f80
Compare
Choose a tag to compare

Big milestone: arroba is successfully federating with the ATProto sandbox! See app.py for the minimal demo code needed to wrap arroba in a fully functional PDS.

  • Add Google Cloud Datastore implementation of repo storage.
  • Implement com.atproto XRPC methods needed to federate with sandbox, including most of repo and sync.
    • Notably, includes subscribeRepos server side over websocket.
  • ...and much more.

v0.2

18 May 22:20
54c9d69
Compare
Choose a tag to compare

Implement repo and commit chain in new Repo class, including pluggable storage. This completes the first pass at all PDS data structures. Next release will include initial implementations of the com.atproto.sync.* XRPC methods.

v0.1

01 May 01:38
fbad986
Compare
Choose a tag to compare

Initial release! Still very in progress. MST, Walker, and Diff classes are mostly complete and working. Repo, commits, and sync XRPC methods are coming soon.