All notable changes to Keyfob are documented here. The format is based on Keep a Changelog and the project adheres to Semantic Versioning.
0.1.1
Patch — the built-in ETS store keeps its own contract when it isn't running.
Fixed
Reading from
Keyfob.Store.ETSraised instead of answering:error. The behaviour declaresget(key()) :: {:ok, value()} | :error, but the implementation called:ets.lookup/2straight out, which raises on a table that does not exist — so the contract broke whenever the store was not running: during startup before the child begins, between a crash and the supervisor's restart, or in a host that never added it to a supervision tree. A caller cannot reasonably be asked to rescue a documented lookup.take/1,update/2anddelete/1exited instead of reporting. They call a named GenServer, and a call to a process that is not alive exits. For operations that already have a failure value in the behaviour, that exit is strictly worse than the failure they declare:take/1backsconsume/2, so an unreachable store crashed the caller rather than simply not signing anybody in — a 500 on a web login where "this link is invalid or has expired" was both the honest answer and the same outcome.They now return
:error(:okfordelete/1, where an entry in a store that is gone is gone, and which runs as cleanup after a successfultake/1where exiting would fail a flow that had already succeeded).put/3is deliberately unchanged and still fails loudly. It has no failure value in the behaviour, and inventing:okfor a write that did not happen would hand back a token nothing has stored — a request that cannot be approved, failing later and further from the cause.
0.1.0
Initial release.
Added
- QR device-handoff login rendezvous:
create_request/1,peek/2,approve/3,deny/2,consume/2, and thetopic/subscribehelpers. - Secret split — the QR-borne request token can never log anyone in; a separate one-time login token is minted at approval and delivered only to the waiting LiveView over PubSub.
Keyfob.Storebehaviour with a built-in single-nodeKeyfob.Store.ETS(serializedupdate/2+take/1for lost-update and single-use safety, background expiry sweep).Keyfob.QRinline-SVG renderer (viaeqrcode) and headlessKeyfob.Components.panel/1+confirm_screen/1.Keyfob.Liveglue for the desktop panel.- Telemetry for every transition.