- register(): sign makeHttpAuth with full URL (/subscription/email),
method PUT, and serialized body so both u-tag and payload tag match
mailship's verifyNip98Auth. Drop pubkey from request body (server
reads it from the auth event).
- unregister(): sign makeHttpAuth with full URL (/subscription/:key)
and method DELETE, matching mailship's u-tag expectation.
Closes PR #4
Mailship's /subscription/email is now an idempotent PUT upsert. Drop the
lookup-before-register dance and always PUT the settings; mailship skips the
confirmation email when nothing changed or only the frequency changed.
- Add error field to EmailNotificationState type
- Set user-friendly error messages in MailNotifications.register() for:
missing signer, missing server config, NIP-98 auth failure,
network errors, and server errors
- Clear error on successful registration
- Show inline error banner in the email settings card
- Return early on registration failure (like push does)
- Clear error when user edits email/frequency or clicks reset
- Add VITE_EMAIL_NOTIFICATION_SERVER env var
- Extend notificationSettings with email, emailFrequency, emailAddress
- Add emailNotificationState store in push/adapters/common.ts
- New src/app/mail/index.ts with MailNotifications class:
register/unregister with mailship via NIP-98 auth,
publish kind 30390 NIP-9a subscription events
- Wired into alerts settings save handler
- Email Digest Settings card in alerts UI