Harden admin events and document deployment

This commit is contained in:
Dorian
2026-05-14 12:53:37 -05:00
parent 3d87041f2d
commit 1708bfcf99
3 changed files with 141 additions and 2 deletions

View File

@@ -130,6 +130,7 @@ let facilityBackgroundTimer
let adminToastTimer
let parallaxFrame = 0
let adminEvents = null
let adminEventsReconnectTimer = 0
const currentMember = computed(() =>
members.value.find((member) => member.membershipId === currentMemberId.value) || null,
@@ -765,6 +766,9 @@ const clearSignature = () => {
}
const deleteMember = async (membershipId) => {
const member = members.value.find((item) => item.membershipId === membershipId)
const label = member?.fullName || membershipId
if (!window.confirm(`Delete ${label}? This removes the member, payments, and issued cards from the admin store.`)) return
if (isAdminAuthenticated.value) {
try {
await fetchJson('/api/membership', {
@@ -790,12 +794,16 @@ const refreshAdminState = async () => {
}
const disconnectAdminEvents = () => {
window.clearTimeout(adminEventsReconnectTimer)
adminEventsReconnectTimer = 0
if (!adminEvents) return
adminEvents.close()
adminEvents = null
}
const connectAdminEvents = () => {
window.clearTimeout(adminEventsReconnectTimer)
adminEventsReconnectTimer = 0
if (!isAdminAuthenticated.value || adminEvents || typeof EventSource === 'undefined') return
adminEvents = new EventSource(`/api/admin/events?pubkey=${encodeURIComponent(adminUser.value)}`)
adminEvents.addEventListener('payment-paid', async (event) => {
@@ -810,7 +818,15 @@ const connectAdminEvents = () => {
adminActionMessage.value = 'New member request received.'
await refreshAdminState()
})
adminEvents.onerror = () => {}
adminEvents.onerror = () => {
if (adminEvents) {
adminEvents.close()
adminEvents = null
}
if (isAdminAuthenticated.value && !adminEventsReconnectTimer) {
adminEventsReconnectTimer = window.setTimeout(connectAdminEvents, 3000)
}
}
}
const updateMemberStatus = async (membershipId, status) => {