Skip to main content

Machine Commands

Commands for managing state machine definitions.

PUT_MACHINE

Registers a new machine definition or version.

Request

{
"op": "PUT_MACHINE",
"params": {
"name": "order",
"version": 1,
"definition": {
"states": ["pending", "paid", "shipped", "delivered"],
"initial": "pending",
"transitions": [
{"from": "pending", "event": "PAY", "to": "paid"},
{"from": "paid", "event": "SHIP", "to": "shipped"},
{"from": "shipped", "event": "DELIVER", "to": "delivered"}
],
"meta": {
"description": "Order lifecycle"
}
}
}
}
ParameterTypeRequiredDescription
namestringYesMachine name
versionintegerYesVersion number (≥ 1)
definitionobjectYesMachine definition

Definition Object

FieldTypeRequiredDescription
statesstring[]YesList of valid states
initialstringYesInitial state for new instances
transitionsTransition[]YesAllowed transitions
metaobjectNoArbitrary metadata

Transition Object

FieldTypeRequiredDescription
fromstring | string[]YesSource state(s)
eventstringYesEvent name
tostringYesTarget state
guardstringNoGuard expression

Response

{
"status": "ok",
"result": {
"name": "order",
"version": 1,
"created": true
}
}
FieldDescription
createdTrue if newly created, false if updated

Errors

CodeDescription
MACHINE_VERSION_EXISTSVersion already exists
MACHINE_VERSION_LIMIT_EXCEEDEDMax versions reached
INVALID_DEFINITIONDefinition validation failed

Validation Rules

The definition is validated:

  1. states must be non-empty
  2. initial must be in states
  3. All transition from states must be in states
  4. All transition to states must be in states
  5. Guard expressions must be syntactically valid

GET_MACHINE

Retrieves a machine definition.

Request

{
"op": "GET_MACHINE",
"params": {
"name": "order",
"version": 1
}
}
ParameterTypeRequiredDescription
namestringYesMachine name
versionintegerNoSpecific version (omit for latest)

Response

{
"status": "ok",
"result": {
"name": "order",
"version": 1,
"definition": {
"states": ["pending", "paid", "shipped", "delivered"],
"initial": "pending",
"transitions": [...]
},
"created_at": "2024-01-15T10:30:00Z"
}
}

Errors

CodeDescription
MACHINE_NOT_FOUNDMachine or version not found

LIST_MACHINES

Lists all registered machines.

Request

{
"op": "LIST_MACHINES",
"params": {
"limit": 100,
"offset": 0
}
}
ParameterTypeRequiredDescription
limitintegerNoMax items (default: 100)
offsetintegerNoSkip items (default: 0)

Response

{
"status": "ok",
"result": {
"machines": [
{
"name": "order",
"versions": [1, 2],
"latest_version": 2,
"instance_count": 500
},
{
"name": "user",
"versions": [1],
"latest_version": 1,
"instance_count": 100
}
],
"total": 2,
"has_more": false
}
}
FieldDescription
machinesList of machine summaries
totalTotal machine count
has_moreMore items available

Machine Summary

FieldDescription
nameMachine name
versionsAvailable versions
latest_versionHighest version number
instance_countNumber of instances

Examples

Create with Guards

{
"op": "PUT_MACHINE",
"params": {
"name": "approval",
"version": 1,
"definition": {
"states": ["pending", "approved", "escalated", "rejected"],
"initial": "pending",
"transitions": [
{
"from": "pending",
"event": "APPROVE",
"to": "approved",
"guard": "ctx.amount <= 1000"
},
{
"from": "pending",
"event": "APPROVE",
"to": "escalated",
"guard": "ctx.amount > 1000"
},
{
"from": "pending",
"event": "REJECT",
"to": "rejected"
},
{
"from": "escalated",
"event": "APPROVE",
"to": "approved"
},
{
"from": "escalated",
"event": "REJECT",
"to": "rejected"
}
]
}
}
}

Multi-Source Transitions

{
"op": "PUT_MACHINE",
"params": {
"name": "task",
"version": 1,
"definition": {
"states": ["todo", "in_progress", "done", "cancelled"],
"initial": "todo",
"transitions": [
{"from": "todo", "event": "START", "to": "in_progress"},
{"from": "in_progress", "event": "COMPLETE", "to": "done"},
{"from": ["todo", "in_progress"], "event": "CANCEL", "to": "cancelled"}
]
}
}
}