diff --git a/static/js/index.js b/static/js/index.js index 1619854..458c29e 100644 --- a/static/js/index.js +++ b/static/js/index.js @@ -202,11 +202,13 @@ window.app = Vue.createApp({ LNbits.utils.exportCSV(this.ticketsTable.columns, this.tickets) }, getEvents() { + // Try admin endpoint first (shows all events across all wallets) + // Falls back to user's own events if not admin LNbits.api .request( 'GET', - '/events/api/v1/events?all_wallets=true', - this.g.user.wallets[0].inkey + '/events/api/v1/events/all', + this.g.user.wallets[0].adminkey ) .then(response => { this.events = response.data.map(obj => { @@ -214,6 +216,21 @@ window.app = Vue.createApp({ }) this.checkCanceledEvents() }) + .catch(() => { + // Not admin, fall back to own events + LNbits.api + .request( + 'GET', + '/events/api/v1/events?all_wallets=true', + this.g.user.wallets[0].inkey + ) + .then(response => { + this.events = response.data.map(obj => { + return mapEvents(obj) + }) + this.checkCanceledEvents() + }) + }) }, getPendingEvents() { LNbits.api diff --git a/views_api.py b/views_api.py index 7a97a57..b363009 100644 --- a/views_api.py +++ b/views_api.py @@ -63,6 +63,17 @@ async def api_events_public(): return [event.dict() for event in events] +@events_api_router.get("/api/v1/events/all") +async def api_events_all( + wallet: WalletTypeInfo = Depends(require_admin_key), +): + """Get all events across all wallets. Admin only.""" + from .crud import get_all_events + + events = await get_all_events() + return [event.dict() for event in events] + + @events_api_router.post("/api/v1/events") @events_api_router.put("/api/v1/events/{event_id}") async def api_event_create(