JS FSM