***

title: "FSM"
generated: true
---------------

<GenerationInfo sourceFile="packages/core/src/common/finite-state-machine/finite-state-machine.ts" sourceLine="12" packageName="@vendure/core" />

A simple type-safe finite state machine. This is used internally to control the Order process, ensuring that
the state of Orders, Payments, Fulfillments and Refunds follows a well-defined behaviour.

```ts title="Signature"
class FSM<T extends string, Data = any> {
    constructor(config: StateMachineConfig<T, Data>, initialState: T)
    initialState: T
    currentState: T
    transitionTo(state: T, data: Data) => Promise<{ finalize: () => Promise<any> }>;
    jumpTo(state: T) => ;
    getNextStates() => readonly T[];
    canTransitionTo(state: T) => boolean;
}
```

<div className="members-wrapper">

### initialState

\<MemberInfo kind="property" type={`T`}   />

### currentState

\<MemberInfo kind="property" type={`T`}   />

### transitionTo

\<MemberInfo kind="method" type={`(state: T, data: Data) => Promise<{ finalize: () => Promise<any> }>`}   />

### jumpTo

\<MemberInfo kind="method" type={`(state: T) => `}   />

### getNextStates

\<MemberInfo kind="method" type={`() => readonly T[]`}   />

### canTransitionTo

\<MemberInfo kind="method" type={`(state: T) => boolean`}   />

</div>
