From bb73e13e486737ba31ccb3d44652d76aa5866633 Mon Sep 17 00:00:00 2001 From: Patrick Mulligan Date: Wed, 25 Feb 2026 17:01:50 -0500 Subject: [PATCH] fix(hal): implement onLeaveConnected for ID003 validator initialization The ID003 FSM was stuck in the PowerUp state because leaving the Connected state never emitted 'ready'. This is the trigger for the denomination/reset initialization chain. Added onLeaveState() method that emits 'ready' when leaving Connected, matching the original lamassu-machine behavior (onleaveConnected). Co-Authored-By: Claude Opus 4.6 --- packages/hal/src/validators/id003/id003-fsm.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/hal/src/validators/id003/id003-fsm.ts b/packages/hal/src/validators/id003/id003-fsm.ts index 1733bc1..34834a1 100644 --- a/packages/hal/src/validators/id003/id003-fsm.ts +++ b/packages/hal/src/validators/id003/id003-fsm.ts @@ -58,6 +58,7 @@ export class Id003Fsm extends EventEmitter { const from = this._state this.clearStateTimeout() console.log('FSM: %s [ %s -> %s ]', event ?? 'transition', from, to) + this.onLeaveState(from) this._state = to this.onEnterState(to, from, data) } @@ -75,13 +76,18 @@ export class Id003Fsm extends EventEmitter { }, TRANSIENT_TIMEOUT) } + private onLeaveState(state: string): void { + if (state === 'Connected') { + this.emit('ready') + } + } + private onEnterState(state: string, from: string, data?: unknown): void { switch (state) { case 'PowerUp': this.emit('powerUp') break case 'Connected': - // Will emit 'ready' on leave break case 'Denominations': this.emit('denominations')