Skip to content

Type Reference

This page documents all TypeScript types exported by @omega-flow/editor and @omega-flow/types.

Core Types (@omega-flow/types)

Workflow

typescript
interface Workflow {
  id: string;
  name: string;
  flow: {
    nodes: Node[];
    edges: Edge[];
  };
  options: WorkflowOptions;
}

The main workflow definition containing the flow graph and metadata.

PropertyTypeDescription
idstringUnique workflow identifier
namestringHuman-readable workflow name
flow{ nodes, edges }The workflow graph
optionsWorkflowOptionsConfiguration options

WorkflowOptions

typescript
interface WorkflowOptions {
  frequency?: WorkflowFrequency;
  [key: string]: any;
}

Workflow configuration options.

PropertyTypeDescription
frequencyWorkflowFrequencyExecution frequency settings

WorkflowFrequency

typescript
interface WorkflowFrequency {
  type: "one_time" | "every_rematch";
  interval?: number;
}

Controls how often a subject can enter/re-enter a workflow.

PropertyTypeDescription
type"one_time" | "every_rematch"Frequency type
intervalnumberInterval in seconds (for every_rematch)

Frequency Types:

  • one_time - Subject enters only the first time they meet trigger conditions
  • every_rematch - Subject can re-enter at specified intervals

WorkflowStatus

typescript
enum WorkflowStatus {
  Idle = "idle",
  Waiting = "waiting",
  Processing = "processing",
  Transforming = "transforming",
  Completed = "completed",
}

Workflow execution states.

StatusDescription
idleInitial state, workflow not started
waitingRunning, waiting for events
processingCurrently processing an event
transformingMoving between nodes
completedWorkflow finished

Node

typescript
// Re-exported from @xyflow/react
interface Node {
  id: string;
  type?: string;
  position: { x: number; y: number };
  data: Record<string, unknown>;
  // ...other ReactFlow node properties
}

A node in the workflow graph. Uses ReactFlow's Node type.


Edge

typescript
// Re-exported from @xyflow/react
interface Edge {
  id: string;
  source: string;
  target: string;
  sourceHandle?: string;
  targetHandle?: string;
  // ...other ReactFlow edge properties
}

A connection between nodes. Uses ReactFlow's Edge type.


Event

typescript
interface Event {
  id: string;
  time: number;
  type: string;
  domain?: string;
  subjectId?: string;
  delivery?: EventDelivery;
  data?: any;
}

An event that can trigger or progress a workflow. Everything the engine uses for addressing lives on the envelope (domain, subjectId, delivery) — data belongs to the host.

PropertyTypeDescription
idstringUnique event identifier
timenumberTimestamp (Unix ms)
typestringEvent type for matching
domainstring (optional)Explicit envelope routing: the domain (tenant). When both domain and subjectId are set, they always win over the configured eventExtractor
subjectIdstring (optional)Explicit envelope routing: the subject the event is addressed to (e.g. client:5). Set by the engine on subscription delivery copies
deliveryEventDelivery (optional)Present only on subscription delivery copies (engine-authored): the one instance this copy must resume
dataanyOptional payload data

EventDelivery

typescript
interface EventDelivery {
  workflowId: string;
  instanceId: string;
  nodeId: string;
  sourceSubjectId: string;
}

Delivery metadata carried in event.delivery on events relayed to a subscriber via an event subscription. A delivery event is a copy of the original event, retargeted at one specific workflow instance — WorkflowManager.processEvent recognizes it and performs a targeted resume of exactly that instance instead of normal routing.

PropertyTypeDescription
workflowIdstringWorkflow the subscribing instance belongs to
instanceIdstringInstance that registered the subscription
nodeIdstringThe parked node that declared the subscription
sourceSubjectIdstringSubject id the original event was routed to (e.g. product:456)

Context

typescript
interface Context {
  workflowId: string;
  instanceId: string;
  currentNodeId: string | null;
  nodeState: NodeState;
  history: WorkflowHistoryItem[];
  isCompleted?: boolean;
  startedAt: number;
  version?: number;
  triggerEvent?: Event;
  subscriptions?: ContextSubscription[];
}

Execution state for a workflow instance.

PropertyTypeDescription
workflowIdstringWhich workflow this instance runs
instanceIdstringUnique instance identifier
currentNodeIdstring | nullNode currently waiting for events
nodeStateNodeStateState data for nodes
historyWorkflowHistoryItem[]Execution history
isCompletedbooleanWhether workflow finished
startedAtnumberStart timestamp (Unix ms)
versionnumberOptimistic-lock version, managed by persistent memory backends
triggerEventEventThe event that started this instance — captured when the start node fires, used e.g. to resolve subscription match templates
subscriptionsContextSubscription[]Active event subscriptions held by this instance; managed by the WorkflowManager

ContextSubscription

typescript
interface ContextSubscription {
  eventType: string;
  matchSubjectId: string;
  nodeId: string;
}

An active event subscription recorded on the Context. The Context is the source of truth for which subscriptions an instance holds in the SubscriptionStore — when the instance advances past the node that declared one, the WorkflowManager deletes exactly these entries.

PropertyTypeDescription
eventTypestringEvent type the instance is waiting for
matchSubjectIdstringSubject id of the source event, or "*" for wildcard
nodeIdstringParked node that declared the subscription

NodeState

typescript
interface NodeState {
  [key: string]: any;
}

Flexible key-value storage for node state.


WorkflowHistoryItem

typescript
interface WorkflowHistoryItem {
  time: number;
  type: "started" | "step" | "completed";
  fromNodeId?: string | null;
  toNodeId?: string | null;
}

A record of workflow execution events.

PropertyTypeDescription
timenumberWhen this occurred
typestringType of history event
fromNodeIdstring | nullSource node
toNodeIdstring | nullDestination node

Editor Types (@omega-flow/editor)

NodeTypeDefinition

typescript
interface NodeTypeDefinition {
  type: string;
  label: string;
  description?: string;
  Icon?: ComponentType<{ size?: number }>;
  defaultData: Record<string, unknown>;
  sourceHandles: HandleDefinition[];
  targetHandles: HandleDefinition[];
  ViewComponent: ComponentType<NodeViewProps>;
  DetailComponent: ComponentType<NodeDetailProps>;
}

Complete definition of a node type.

PropertyTypeDescription
typestringUnique type identifier
labelstringDisplay name
descriptionstringTooltip/description text
IconComponentTypeIcon component
defaultDataRecordInitial data for new nodes
sourceHandlesHandleDefinition[]Output handles
targetHandlesHandleDefinition[]Input handles
ViewComponentComponentTypeCanvas render component
DetailComponentComponentTypeProperties panel component

HandleDefinition

typescript
interface HandleDefinition {
  id: string;
  label?: string;
}

Definition for a connection handle on a node.

PropertyTypeDescription
idstringHandle identifier
labelstringDisplay label

NodeViewProps

typescript
type NodeViewProps = NodeProps; // From @xyflow/react

Props passed to node view components (on canvas). Extends ReactFlow's NodeProps.

Key properties:

  • id: string - Node ID
  • data: Record<string, unknown> - Node data
  • selected: boolean - Selection state
  • dragging: boolean - Drag state

NodeDetailProps

typescript
interface NodeDetailProps {
  node: Node;
  onChange: (data: Record<string, unknown>) => void;
}

Props passed to node detail components (properties panel).

PropertyTypeDescription
nodeNodeThe node being edited
onChange(data) => voidUpdate node data callback

WorkflowEditorState

typescript
interface WorkflowEditorState {
  workflow: Workflow | null;
  nodes: Node[];
  edges: Edge[];
  options: WorkflowOptions;
  name: string;
  selectedNodeId: string | null;
  isDirty: boolean;
  nodeTypes: Map<string, NodeTypeDefinition>;
}

Editor state managed by context.


WorkflowEditorActions

typescript
interface WorkflowEditorActions {
  loadWorkflow: (workflow: Workflow) => void;
  resetWorkflow: () => void;
  addNode: (type: string, position: { x: number; y: number }) => void;
  updateNode: (nodeId: string, data: Record<string, unknown>) => void;
  updateNodePosition: (nodeId: string, position: { x: number; y: number }) => void;
  removeNode: (nodeId: string) => void;
  selectNode: (nodeId: string | null) => void;
  addEdge: (connection: Connection) => void;
  removeEdge: (edgeId: string) => void;
  setName: (name: string) => void;
  setOptions: (options: WorkflowOptions) => void;
  registerNodeType: (definition: NodeTypeDefinition) => void;
  getWorkflow: () => Workflow;
  markClean: () => void;
  onNodesChange: (changes: unknown[]) => void;
  onEdgesChange: (changes: unknown[]) => void;
  onConnect: (connection: unknown) => void;
}

Actions available in the editor context.


WorkflowEditorContextValue

typescript
interface WorkflowEditorContextValue
  extends WorkflowEditorState,
    WorkflowEditorActions {}

Complete context value combining state and actions.


Component Props

WorkflowEditorProps

typescript
interface WorkflowEditorProps {
  children: ReactNode;
  workflow?: Workflow;
  nodeTypes?: NodeTypeDefinition[];
  onWorkflowChange?: (workflow: Workflow) => void;
  onDirtyChange?: (isDirty: boolean) => void;
  translationFn?: TranslationFunction;
  translations?: TranslationDictionary;
}
PropertyTypeDescription
translationFnTranslationFunctionCustom translation function (replaces built-in resolver)
translationsTranslationDictionaryDictionary merged on top of defaults (ignored when translationFn is set)

See Localization for usage details.

NodesPanelProps

typescript
interface NodesPanelProps {
  className?: string;
  showDescriptions?: boolean;
  filter?: (nodeType: NodeTypeDefinition) => boolean;
  renderItem?: (nodeType: NodeTypeDefinition) => ReactNode;
}

DetailPanelProps

typescript
interface DetailPanelProps {
  className?: string;
  emptyMessage?: ReactNode;
  showNodeType?: boolean;
  showNodeId?: boolean;
}

OptionsPanelProps

typescript
interface OptionsPanelProps {
  className?: string;
  showFrequency?: boolean;
  customOptions?: ReactNode;
}

ControlPanelProps

typescript
interface ControlPanelProps {
  className?: string;
  showName?: boolean;
  showSaveButton?: boolean;
  saveButtonLabel?: string;
  onSave?: () => Promise<void>;
  renderActions?: (context: { isDirty: boolean; workflow: Workflow }) => ReactNode;
}

BaseNodeViewProps

typescript
interface BaseNodeViewProps {
  id: string;
  data: Record<string, unknown>;
  selected?: boolean;
  label: string;
  color?: string;
  icon?: React.ReactNode;
  sourceHandles?: HandleDefinition[];
  targetHandles?: HandleDefinition[];
  children?: React.ReactNode;
}

Primitive Props

See Primitives API for form field prop types:

  • FieldProps
  • TextFieldProps
  • NumberFieldProps
  • SelectFieldProps
  • SelectOption
  • CheckboxFieldProps
  • TextAreaFieldProps
  • DurationFieldProps
  • JsonFieldProps
  • FieldGroupProps

JSON Schemas

The @omega-flow/types package exports JSON schemas for validation:

typescript
import {
  WorkflowSchema,
  EventSchema,
  ContextSchema,
} from "@omega-flow/types";

Use with Ajv for runtime validation:

typescript
import Ajv from "ajv";
import { WorkflowSchema } from "@omega-flow/types";

const ajv = new Ajv();
const validate = ajv.compile(WorkflowSchema);

if (!validate(workflow)) {
  console.error("Invalid workflow:", validate.errors);
}

Localization Types

TranslationFunction

typescript
type TranslationFunction = (
  key: string,
  params?: Record<string, string>
) => string;

The core function signature for translating strings. Accepts a dot-separated key and optional interpolation parameters ().


TranslationDictionary

typescript
type TranslationDictionary = Record<string, string>;

A flat mapping of keys to translation strings. Supports interpolation placeholders.


TranslationProviderProps

typescript
interface TranslationProviderProps {
  children: ReactNode;
  translationFn?: TranslationFunction;
  translations?: TranslationDictionary;
}

Props for the TranslationProvider component (used internally by WorkflowEditor).


Utility Functions

nodeHasType

typescript
function nodeHasType(node: Node): node is Node & { type: string };

Type guard to check if a node has a type property.

typescript
import { nodeHasType } from "@omega-flow/types";

if (nodeHasType(node)) {
  console.log(node.type); // TypeScript knows type exists
}