envelops v0.1.1
A second pass that tightens the access-control story, drops a piece of scope I
shouldn't have shipped in 0.1.0, and gives the panel a friendlier on-ramp into
the CLI. Wire-protocol still drop-in compatible with dotenvx-ops; the only
behavioral change a CLI sees is that some prior 403s are now 404s.
Highlights
- New
envelops://<slug>/<key>URI scheme for per-org secrets. Any string
is now a validdotenvx-ops set/gettarget. Bare names (LASTPASS_PASSWORD)
route to the caller's personal org;envelops://<slug>/<key>routes to that
team if the caller is a member, otherwise404 not_found— we don't reveal
whether the team or the key exists. Namespaced keys (stripe/prod/key) are
preserved verbatim. SeeDEVIATIONS.md§2 for the rationale. - 404-leak-safe across the board.
/api/set,/get,/keypair,/sync,
/backup,/rotate,/rotate/connect,/panel/reveal, and
/synchronizationnow return404 not_foundinstead of403 forbidden(or
403 device_mismatch) whenever the caller lacks access. We never echo
whether the underlying org/project/secret exists. CLIs that keyed on the old
status codes will need to treat 404 the same way. - Audit log gated to admin/owner. Plain members no longer see the audit
page or its nav link. Public keys inside audit payloads are run through a
newroleBasedPublicKeyguard so even an accidentally-leaked render
truncates to the first 5 bytes for non-admins. - Removed the standalone CLI shim (
packages/cli-shim/). It was research
leftover from before the protocol-compat work landed; shipping it as a
competing client todotenvx-opsdoesn't serve anyone. Use the real
dotenvx-opsCLI against your envelops instance. - No more auto-created
defaultproject. Callers that arrive without a
dotenvxProjectIdand without a cwd name now get a hard error instead of
silently writing into a team-wide "default" bucket. Real CLI paths always
supply one of those; the fallback was a footgun for manual API use. - Panel UX: secrets and projects pages now show CLI examples in a framed
terminal component, with the right URI shape for the team you're viewing
(bare key in personal orgs,envelops://<slug>/<key>in shared teams). The
projects page also previews thedotenvx-ops backuporg-picker so you know
which entry to pick.
Behavior changes worth flagging
403 device_mismatchis gone. Mismatched device public keys return
404 not_foundlike every other access failure./api/setno longer acceptsdotenvx_project_idororgbody fields. The
URI alone determines routing. These weren't actually sent by the client and were
more or less irrelevant / wishful thinking./api/synchronizationreturns{ synced: false }instead of403when the
caller can't access the project — same leak-safety rationale.- README no longer claims master-key rotation works by redeploy. It doesn't —
proper rotation needs design work and is tracked for a future release.
Image
docker pull ghcr.io/itsjustmechris/envelops:0.1.1