story-research-zapwall/lib/writeService/notificationDecision.ts
2026-01-13 14:49:19 +01:00

34 lines
1.0 KiB
TypeScript

import { isRecord, isWorkerErrorForOperation, isWorkerMessageEnvelope, readWorkerErrorData } from './workerMessage'
export function decideCreateNotificationWorkerMessage(params: {
eventData: unknown
expectedEventId: string
}):
| { status: 'ignore' }
| { status: 'resolve' }
| { status: 'reject'; message: string } {
if (!isWorkerMessageEnvelope(params.eventData)) {
return { status: 'ignore' }
}
const responseType = params.eventData.type
const responseData = params.eventData.data
if (responseType === 'CREATE_NOTIFICATION_SUCCESS') {
if (!isRecord(responseData) || responseData.eventId !== params.expectedEventId) {
return { status: 'ignore' }
}
return { status: 'resolve' }
}
if (responseType !== 'ERROR') {
return { status: 'ignore' }
}
const errorData = readWorkerErrorData(responseData)
if (!isWorkerErrorForOperation(errorData, 'CREATE_NOTIFICATION')) {
return { status: 'ignore' }
}
return { status: 'reject', message: errorData.error ?? 'Write worker error' }
}