Changelog Cashier

1.2.0 2026-10-12

1.2.0 — 2026-10-12

  • Sign-up support: Cashier now sells plans on the registration page of Sign-up 1.0+ (MediaLab Works) as well as IDRegister 2.1+. RegistrationBridge replaces IdRegisterBridge; RegistrationAccountProvisioner (generic) replaces IdRegisterAccountProvisioner; the checkout records reg_app/reg_token (IDRegister checkouts keep idreg_token too, and 1.1 checkouts still provision through IDRegister). New checkout route /registration/{app}/checkout (/idregister/checkout kept). Rules → "Paid sign-up page" chooses where Cashier's own links go when both apps can sell. Contract: docs/REGISTRATION-CONTRACT.md.
  • Accounts created by Sign-up keep the password chosen in its form: Cashier's welcome e-mail no longer asks them to set one, and is skipped when Sign-up already sent its own.
  • Suspension rule per account: the registration app can ask for unpaid accounts to be suspended (Sign-up does by default) whatever Cashier's global after-grace rule; a payment restores them immediately. Grace period can be 0.
  • Subscriber e-mails: new invoice (renewals, invoice.finalized), receipt (invoice.paid), plus the existing payment failed / suspended / active again messages, which now say explicitly that nothing is deleted. Existing webhooks get the new event automatically (background job); Rules → "E-mail the subscribers about their invoices".
  • "Pay an overdue invoice" public page (/billing), exempt from the licence: e-mails a suspended subscriber the link to Stripe's hosted page of the open invoice; the same answer for every address.
  • Licence classes are resolved lazily outside the controllers (jobs, listener, settings, setup checks, webhook processor): a removed or changed licence module stops new business cleanly and never breaks cron or the settings page. Licence template updated (tampered state on the License section).
  • Setup check "Cashier (registration page)" replaces "Cashier (IDRegister)"; Romanian translations for everything new.