• v0.9.0 4da052c114

    vmanne-poc released this 2026-10-15 01:03:41 -04:00 | 48 commits to main since this release

    Merged in PR #24. Closes #16, #23, #18 and #17.

    Upgrading: back up the database first. On first start, Postak adopts an existing v0.8.0 (or older) database into the new migration history. It refuses any schema change that would lose data.

    Changed

    • Versioned database migrations (#16). prisma db push --accept-data-loss is gone. Schema changes now ship as SQL migrations, applied with prisma migrate deploy on start. 0_init is the v0.8.0 baseline.

    Added

    • Account controls for the administrator (#23), on the Users page:
      • disable or enable an account, which ends its sessions immediately
      • set a temporary password, which the user must change after signing in
      • delete an account; projects where that user was the only owner go to the administrator
    • Forgot password by email (#23). Links are single-use, expire after 1 hour, and are throttled, and the response never reveals whether an account exists. Needs POSTAK_SMTP_URL, POSTAK_MAIL_FROM and POSTAK_APP_URL.
    • SES bounces and complaints (#17) via SNS at POST /api/webhooks/ses:
      • Every message's SNS signature is verified, and only topics listed in POSTAK_SES_SNS_TOPIC_ARNS are accepted. With none listed, the endpoint is off.
      • Hard bounces mark the contact BOUNCED, and complaints mark it COMPLAINED. Neither is mailed again.
      • Reports and daily snapshots now show real bounce and complaint numbers.
    • New migrations user_account_controls and contact_bounce_statuses. Both are additive.

    Testing

    • Frontend tests (#18): Vitest and Testing Library, run with docker compose run --rm --build -T frontend-test.
    • The backend test run now checks both migration paths and fails if a schema change has no migration.

    Security

    • Frontend toolchain upgraded: Vite 8, React Router 7.18 (fixes an open-redirect advisory), Node 22.
    • The backend also runs on Node 22, since Node 20 is end-of-life.
    • npm audit: 0 for the backend (production dependencies) and 0 for the frontend.

    Verified

    • Tests: backend 53 unit and 35 end-to-end; frontend 28.
    • Live stack: the existing v0.8.0 database was adopted with its data intact. Forgot password, temporary password, disable, and delete with project hand-over were all tested through the web server, with email going to Mailpit.
    • Not yet tested against real AWS SNS/SES. That path is covered by tests that use locally signed messages.

    Full details are in CHANGELOG.md.

    Downloads