0.5.1
- Improve CI resiliency under Github actions sluggishness
- Add
Sofa.Response.error/1, the status-to-atom mapping every module now uses
0.5.0
- Use a Firecracker VM in Github Actions
- Add
Sofa.Attachmentand attachment support inSofa.Doc attachmentsis now a map of name to%Sofa.Attachment{}, round-tripping CouchDB's stubs and inline contentSofa.Doc.attach/4anddetach/2build documents that save their attachments in one requestSofa.Doc.get/3now takesattachments: true,att_encoding_info: trueandatts_since:Sofa.Attachment.head/4,get/4,put/5anddelete/4cover the standalone endpoint with ranges, conditional gets, file and enumerable uploads, sinks for downloads, and digest verification- Add
Sofa.Doc.save/2,save!/2andget!/3, to support Elixir pipelines Sofa.raw/7takes trailingReqoptions, and every request path is now URL-encoded, so ids and attachment names with spaces or slashes work- Add
mimeas a dependency, for attachment content types
0.4.0
- Switch the HTTP client from Tesla and Mint to Req, with JSON via Jason
Sofa.client/2now takesReq.new/1options instead of a Tesla adapter%Sofa{}.clientis aReq.Request- Connections try IPv6 first and fall back to IPv4 by default automatically
- Transport errors are
%Req.TransportError{} - Unit tests fake CouchDB with Bypass instead of
Tesla.Mockas it provides better support for testing_changesfeeds - Integration tests default to the live development CouchDB unless
COUCHDB_URIis set, as CI does - Add
Sofa.Changes, a GenServer behaviour following a database's_changesfeed, built on Req's streaming responses, via 3 modules - Supports heartbeat & reconnection
Sofa.Changes.Querybuilds the HTTP connectionSofa.Changes.Parserconverts the raw feed into a stream of eventsSofa.Changes.Workerhandles a single requestinclude_docsreturns rows as a%Sofa.Doc{}doc_idandselectorfilters
0.3.0
- Update dependencies (mint 1.11, tesla 1.21)
- Fix
Sofa.client/1sending an emptyAuthorization: Basicheader when no credentials are given, which CouchDB rejects rather than treating the request as anonymous - Fix
Sofa.active_tasks/1requesting/active_tasksinstead of/_active_tasks - Fix
Sofa.Doc.new/1silently discardingbodywhen given%{id: id, body: body} - Fix
Sofa.User.reset_password/2storing the new password under an atom key, soSofa.User.put/2did not strip the stale fields - Fix
Sofa.Cushion.untaint_headers/1being exponential in the number of unrecognised response headers Sofa.raw/6now returns{:error, reason}for transport errors such as:econnrefusedor:timeoutinstead of raising. NBSofa.raw!/5still raisesSofa.connect!/1recognises%Mint.TransportError{reason: :econnrefused}- Correct typespecs for
Sofa.all_dbs/1,Sofa.auth_info/1,Sofa.Doc.exists/2andSofa.Doc.delete/2, the:unathorizedtypo inSofa.Doc.delete/2, and an ex_doc markup warning inSofa.Doc.get/2 - Use
+instead of the deprecated,separator formix doin the Makefile, bump the README install snippet to~> 0.2, and formatconfig/config.exs - Add
mix precommitalias (compile with warnings as errors, drop unused lock entries, format, test), a.dialyzer_ignore.exsfile, and--format dialyxirinmake lint Sofa.client/2accepts an optional Tesla adapter, overriding the configured one- Add integration tests against a real CouchDB, excluded by default, and run them
in a GitHub Actions workflow alongside
make lint; seemake integration - Add a sourcehut FreeBSD 15 build manifest running the same lint, unit and
CouchDB integration tests against the
databases/couchdb3package
0.2.0
- Configure Mint transport options to support dual stack inet6/inet configs https://mint.hexdocs.pm/Mint.HTTP.html#connect/4-transport-options
- Add docs targets to Makefile
0.1.4
- Minor dependencies bump for 2026
0.1.3
- Fix module doc
iex>DocTest indentation to make HexDocs look pretty
0.1.2
- Initial release