diff --git a/packages/state-machine/src/machine.ts b/packages/state-machine/src/machine.ts index 02e31e9..5f0919a 100644 --- a/packages/state-machine/src/machine.ts +++ b/packages/state-machine/src/machine.ts @@ -392,6 +392,7 @@ export function createATMMachine( delays: { TIMEOUT_MS: 300000, // 5 minutes COMPLETE_DELAY: 60000, + DISPENSE_TIMEOUT: 120000, // 2 min max for hardware to respond DISPENSE_ERROR_TIMEOUT: 30000, // 30s like brain.js _timedState }, }).createMachine({ @@ -654,6 +655,16 @@ export function createATMMachine( }, }, dispensingCash: { + // Safety timeout: if dispenseCash promise hangs (hardware jam, + // serial port freeze), don't stay here forever. + after: { + DISPENSE_TIMEOUT: { + target: 'dispenseError', + actions: assign({ + error: () => 'Dispense timed out — hardware may be jammed', + }), + }, + }, invoke: { src: 'dispenseCash', input: ({ context }) => context.dispenseAmounts,