34 lines
1.0 KiB
TypeScript
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' }
|
|
}
|
|
|