The aiolabs/events extension on its signer-abstraction branch (commit
66076d6) constructs and publishes kind-31922 NIP-52 calendar events
server-side via NostrSigner — POST /events/api/v1/events accepts a
CreateEventRequest payload, signs through the operator's signer, and
broadcasts to configured relays. The webapp no longer needs to sign
calendar events client-side.
Changes:
- ActivitiesNostrService.ts: delete publishCalendarEvent() and its
helper imports (finalizeEvent, EventTemplate, buildCalendarTimeEventTags,
the local hexToUint8Array). The subscribe / query paths stay — the
service still reads NIP-52 events off relays for the activity feed.
Docstring updated to reflect the read-only role and point at the
events extension for the publish path.
- CreateActivityDialog.vue: swap the publish flow.
- Drop ActivitiesNostrService injection + currentUser.value.prvkey read.
- Inject TicketApiService instead; pull invoiceKey from
currentUser.value.wallets[0].inkey (same pattern as EventsPage.vue
handleCreateEvent).
- Build CreateEventRequest with amount_tickets: 0, price_per_ticket: 0
(events extension treats 0 as unlimited/not-ticketed per
models.py:45-46 per lnbits 22:30Z audit).
- Fold summary + description into the events extension's `info`
field since CreateEventRequest has no separate summary slot.
- Update toast on success to "Activity created!" (server publishes
to relays via the signer, not the webapp).
Approval-workflow caveat documented inline in the submit handler:
non-admin users on instances with auto_approve=false (the default)
land in the proposal queue and don't publish to relays until an admin
approves. Admins / auto_approve=true instances publish immediately.
This is the intended new behavior — operators can flip auto_approve
on the events extension config per-instance if they want the legacy
direct-publish moderation posture.
This is webapp's second bucket-A leg per aiolabs/lnbits#9 phase-1.
The remaining `currentUser.value.prvkey` reads stay until the
atomic User.prvkey field-removal PR (Q1.2 Option (b)).
Refs:
- log:2026-05-28T22:30Z (lnbits Q2.1 audit verifying ticket-less
acceptance + approval-workflow caveat)
- ~/dev/coordination/webapp-design-questions.md Q2.1
- aiolabs/events signer-abstraction commit 66076d6 (the server-side
publish path)
- aiolabs/lnbits cascade tip 861f427c deployed to aio-demo
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>