Repository navigation
v0.4.0
Changelog
- 3a52a6d: Attack script for the account flows, run by CI with the others (@fernandezvara)
- b723914: CI: run the example attack scripts against the local stack (@fernandezvara)
- 520b75b: CI: test the JavaScript client on Node 22 and 26 (@fernandezvara)
- 13a789d: Check the JavaScript client as npm users get it, and publish it on js- tags (@fernandezvara)
- 1194a6d: Custom emails from functions: ctx.email.send, any recipient, bounded by caps (@fernandezvara)
- c7fe50b: Deactivate by default, erase on request: tombstone and policy job (@fernandezvara)
- 1903687: Design documents for the account lifecycle, email delivery and internal functions (@fernandezvara)
- bd2a43d: Design: Prometheus metrics (@fernandezvara)
- 8f6e162: Design: custom emails from functions have no recipient limit (@fernandezvara)
- 47a218d: Design: erasure by deactivation, tombstone and optional policies (@fernandezvara)
- 07121bf: Design: the purge of unverified accounts stays a hard delete (@fernandezvara)
- 8390bfc: Docs: email addresses do change, in guarded ways (@fernandezvara)
- 26ccf94: Docs: list the erasure page in the authentication overview (@fernandezvara)
- 2d0db45: Docs: mount the blog example so the example-file shortcode can quote it (@fernandezvara)
- 23eb4a4: Docs: the workshop tour page and Try it links in the cookbook (@fernandezvara)
- dd02d7f: Email change and emailed invitations (@fernandezvara)
- efc46d5: Email development: Mailbox app, workshop email through email-capture, fakeEmail (@fernandezvara)
- 2de8b30: Email development: dev_only functions, BACKD_DEV_ANY_ADDR, email-capture template (@fernandezvara)
- 0aeaaaf: Email languages: user locale, sign-up mapping, PATCH /_auth/me (@fernandezvara)
- 6f2b82b: Email verification: sign-up sends it, the link verifies, optional gate (@fernandezvara)
- 4ff1d47: Email: email jobs, delivery function contract, hashed tokens, limits (@fernandezvara)
- bec5c78: Email: email section in realm.yaml, templates, BACKD_URL (@fernandezvara)
- 9df4725: Erasure building blocks: policy indexes, the eraser and the owned report (@fernandezvara)
- a17a959: Executor image: apply Alpine security updates; scan it in CI too (@fernandezvara)
- ccd9d4a: Expenses examples require a verified email; the JS client handles a pending sign-up (@fernandezvara)
- ac2ddbd: Fix a flaky metrics test: check the labels, not the sample values (@fernandezvara)
- 68ca689: Grafana dashboards: API, MongoDB, accounts, functions and processes (@fernandezvara)
- d9f85fd: Grafana in the local stack, with the dashboards provisioned (@fernandezvara)
- 78fa888: Hosted pages for email links: GET shows, POST acts, one error page (@fernandezvara)
- cdf8132: Internal functions: ctx.call between functions of a database (@fernandezvara)
- 40d06ba: Internal functions: internal and calls in function.yaml, no HTTP route (@fernandezvara)
- 880f96b: Internal functions: run any function by hand through the admin API (@fernandezvara)
- 0e668e4: Internal functions: workshop example, ctx.call fakes for tests, docs (@fernandezvara)
- 759d695: JavaScript client: the account email flows; examples use them (@fernandezvara)
- 1f9e369: Merge pull request #63 from fernandezvara/design-documents (@fernandezvara)
- a0a5688: Merge pull request #64 from fernandezvara/internal-functions (@fernandezvara)
- 3b35c84: Merge pull request #65 from fernandezvara/55-retries-async-functions (@fernandezvara)
- da96b7d: Merge pull request #66 from fernandezvara/9-send-email-by-function (@fernandezvara)
- b507424: Merge pull request #67 from fernandezvara/57-dev-mailbox (@fernandezvara)
- 3e1119a: Merge pull request #68 from fernandezvara/56-email-languages (@fernandezvara)
- b976ff2: Merge pull request #69 from fernandezvara/58-hosted-pages-for-account-emails (@fernandezvara)
- e6b7ee6: Merge pull request #70 from fernandezvara/11-email-varification (@fernandezvara)
- c552cd2: Merge pull request #71 from fernandezvara/12-password-reset (@fernandezvara)
- 14482cf: Merge pull request #72 from fernandezvara/13-generic-signup-answer (@fernandezvara)
- 0e175a7: Merge pull request #73 from fernandezvara/60-61-email-change-and-invitations (@fernandezvara)
- 1762a9a: Merge pull request #74 from fernandezvara/15-59-client-flows-and-custom-emails (@fernandezvara)
- 1ffd306: Merge pull request #75 from fernandezvara/design-erasure (@fernandezvara)
- d13ebce: Merge pull request #76 from fernandezvara/14-erasure (@fernandezvara)
- 9bf12ab: Merge pull request #77 from fernandezvara/10-postmark-delivery-function (@fernandezvara)
- 8449528: Merge pull request #78 from fernandezvara/17-24-security-review-and-attack-scripts (@fernandezvara)
- 1186a24: Merge pull request #80 from fernandezvara/16-prometheus-metrics (@fernandezvara)
- b0bf24b: Merge pull request #81 from fernandezvara/79-grafana-dashboards (@fernandezvara)
- 2d492e1: Merge pull request #82 from fernandezvara/34-publish-js-client (@fernandezvara)
- 8ceb904: Merge pull request #83 from fernandezvara/release-v0.4.0 (@fernandezvara)
- 3ca7838: Metrics review: cap concurrent scrapes, index for the erase count (@fernandezvara)
- b12d231: Metrics: MongoDB command latency and mongodb_up (@fernandezvara)
- 5c42a20: Metrics: a private /metrics listener and the request metrics (@fernandezvara)
- 17a9543: Metrics: jobs (cached), email and erase outcomes, executor and egress (@fernandezvara)
- 8c38d12: Metrics: sessions, limits, function calls and refusals (@fernandezvara)
- b364233: Mongo tests: use clocks in the future so the TTL monitor can't delete their records (@fernandezvara)
- 38c427e: Optional collection.yaml: what an erase does to a collection (@fernandezvara)
- 6659bb1: Password reset by email: request, hosted form, JSON redeem (@fernandezvara)
- bc591ec: Postmark delivery function (example) and its cookbook recipe (@fernandezvara)
- ec5c2d4: Production edge: the account flows share the strict rate limit (@fernandezvara)
- 9923f48: Prometheus in the production reference and the local stack (@fernandezvara)
- c3d0529: Refuse .invalid email addresses (@fernandezvara)
- ee5f7be: Refuse addresses that would split or break a message header (@fernandezvara)
- cd5e47c: Release prep for v0.4.0: versions, upgrade notes, GoReleaser ignores js- tags (@fernandezvara)
- e3b3e4a: Remove the email files generated into the blog example by mistake (@fernandezvara)
- 2d0fa40: Rename the client to backd-js and make it publishable (@fernandezvara)
- c74ffd1: Retries for async functions: retry in function.yaml, backoff, next attempt (@fernandezvara)
- 8ff15ad: SECURITY.md: the email flows, hosted pages and JS client are in scope (@fernandezvara)
- 2c497eb: Sign-up gives the same answer for registered addresses when it issues no session (@fernandezvara)
- f31e3bf: Workshop app groundwork: demo accounts in the workshop realm, admin secrets and invocations in the JS client (@fernandezvara)
- 28f249d: Workshop tour: a Node script that walks it and checks each step (make workshop-tour) (@fernandezvara)
- 1b56732: Workshop tour: an email verification step (@fernandezvara)
- bb6f527: Workshop tour: app shell with demo accounts and the call inspector (@fernandezvara)
- e3c46a7: Workshop tour: operator panel (secrets, jobs, history, run by hand) and an email panel; admin users read any job (@fernandezvara)
- 65930c2: Workshop tour: panels for order_total, refund, the webhook and the export job (@fernandezvara)
- ae530b6: Workshop tour: sign up first on first use, and label expected refusals in the inspector (@fernandezvara)
Container images: docker pull ghcr.io/fernandezvara/backd:v0.4.0 and ghcr.io/fernandezvara/backd-executor:v0.4.0 (linux/amd64 and linux/arm64), signed with cosign (keyless) and published with their SBOM and provenance.
Verify downloads against checksums.txt; each archive has an SPDX SBOM (*.sbom.json).