19 lines
512 B
JavaScript
19 lines
512 B
JavaScript
import { isWriteOutcomeUnknown } from '@/utils/request-outcome.js'
|
|
|
|
export const createNonIdempotentWriteGuard = () => {
|
|
let uncertainPayloadSnapshot = ''
|
|
|
|
return {
|
|
begin(payload) {
|
|
const payloadSnapshot = JSON.stringify(payload)
|
|
return payloadSnapshot === uncertainPayloadSnapshot ? null : payloadSnapshot
|
|
},
|
|
|
|
recordFailure(payloadSnapshot, error) {
|
|
if (!isWriteOutcomeUnknown(error)) return false
|
|
uncertainPayloadSnapshot = payloadSnapshot
|
|
return true
|
|
}
|
|
}
|
|
}
|