Auction Bid Terminal Responses¶
auction.bid.place is synchronous and transactionally serialized. Every request ends with exactly one correlated ack or error; there is no intermediate bid acceptance acknowledgement and no rejection realtime event.
Request¶
{
"id": "bid-request-001",
"type": "auction.bid.place",
"data": {
"auctionId": "auction-1",
"amountMinor": "150000"
}
}
The id is required. Reuse it only when retrying the identical bid after an uncertain transport or database response.
Accepted or replayed¶
{
"id": "bid-request-001",
"type": "ack",
"data": {
"eventType": "auction.bid.place",
"status": "accepted",
"commandId": "bid-request-001",
"auctionId": "auction-1",
"cycleId": "cycle-1",
"bidId": "bid-1",
"amountMinor": "150000",
"stateVersion": 42
}
}
status is accepted for a new commit and replayed when the same scoped id and payload already committed. Both are successful terminal outcomes. Reusing the id with changed bid details returns an error.
Rejected¶
Business, validation, authorization, and infrastructure failures use the existing correlated WebSocket error envelope. Use its safe public code and message; never infer acceptance from a timeout or closed connection.
After an uncertain response, preserve the pending UI state and retry the same payload with the same id. If the original transaction committed, the retry returns replayed; otherwise it is evaluated against the latest committed auction state. A stored bid can still be replayed after the live window or room join window closes; mutable eligibility checks apply only to a new bid.
Realtime feed¶
Successful commits continue to publish auction.bid.created and, when the previous leader is outbid, auction.bid.updated. These events synchronize the room and are ordered by serverSequence. A post-commit publication failure does not invalidate the terminal bid acknowledgement; recover with snapshot/replay.
Client state¶
SUBMITTED ── ack:accepted ──> ACCEPTED
SUBMITTED ── ack:replayed ──> ACCEPTED
SUBMITTED ── error ─────────> REJECTED
SUBMITTED ── disconnect ────> UNCERTAIN ── retry same id ──> terminal response
Checklist:
- Generate one stable id per bid intent.
- Send integer-string
amountMinor; do not send client timing or ordering data. - Clear pending state only on a terminal response.
- Treat
acceptedandreplayedas committed. - Update the shared feed from created/updated events and snapshot replay.