@almadar/runtime 1.2.1 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { EventBus, createUnifiedLoader, preprocessSchema, StateMachineManager, createContextFromBindings, EffectExecutor } from './chunk-KUL6GQI5.js';
1
+ import { EventBus, createUnifiedLoader, preprocessSchema, StateMachineManager, createContextFromBindings, EffectExecutor } from './chunk-QBQSJJF6.js';
2
2
  import { Router } from 'express';
3
3
  import { evaluateGuard } from '@almadar/evaluator';
4
4
  import { faker } from '@faker-js/faker';
@@ -480,7 +480,7 @@ var OrbitalServerRuntime = class {
480
480
  * Register a single orbital
481
481
  */
482
482
  async registerOrbitalAsync(orbital) {
483
- const traitDefs = orbital.traits.map((t) => {
483
+ const traitDefs = (orbital.traits || []).map((t) => {
484
484
  const stateMachine = t.stateMachine;
485
485
  const states = t.states || stateMachine?.states || [];
486
486
  const transitions = t.transitions || stateMachine?.transitions || [];
@@ -537,7 +537,7 @@ var OrbitalServerRuntime = class {
537
537
  }
538
538
  if (this.config.debug) {
539
539
  console.log(
540
- `[OrbitalRuntime] Registered orbital: ${orbital.name} with ${orbital.traits.length} trait(s)`
540
+ `[OrbitalRuntime] Registered orbital: ${orbital.name} with ${(orbital.traits || []).length} trait(s)`
541
541
  );
542
542
  }
543
543
  }
@@ -558,7 +558,7 @@ var OrbitalServerRuntime = class {
558
558
  }
559
559
  this.listenerCleanups = [];
560
560
  for (const [orbitalName, registered] of this.orbitals) {
561
- for (const trait of registered.schema.traits) {
561
+ for (const trait of registered.schema.traits || []) {
562
562
  if (!trait.listens) continue;
563
563
  for (const listener of trait.listens) {
564
564
  const cleanup = this.eventBus.on(listener.event, async (event) => {
@@ -597,7 +597,7 @@ var OrbitalServerRuntime = class {
597
597
  setupTicks() {
598
598
  this.cleanupTicks();
599
599
  for (const [orbitalName, registered] of this.orbitals) {
600
- for (const trait of registered.schema.traits) {
600
+ for (const trait of registered.schema.traits || []) {
601
601
  if (!trait.ticks || trait.ticks.length === 0) continue;
602
602
  for (const tick of trait.ticks) {
603
603
  this.registerTick(orbitalName, trait.name, tick, registered);
@@ -1122,8 +1122,8 @@ var OrbitalServerRuntime = class {
1122
1122
  const orbitals = Array.from(this.orbitals.entries()).map(
1123
1123
  ([name, reg]) => ({
1124
1124
  name,
1125
- entity: reg.schema.entity.name,
1126
- traits: reg.schema.traits.map((t) => t.name)
1125
+ entity: reg.schema.entity?.name,
1126
+ traits: (reg.schema.traits || []).map((t) => t.name)
1127
1127
  })
1128
1128
  );
1129
1129
  res.json({ success: true, orbitals });
@@ -1144,11 +1144,11 @@ var OrbitalServerRuntime = class {
1144
1144
  orbital: {
1145
1145
  name: orbitalName,
1146
1146
  entity: registered.schema.entity,
1147
- traits: registered.schema.traits.map((t) => ({
1147
+ traits: (registered.schema.traits || []).map((t) => ({
1148
1148
  name: t.name,
1149
1149
  currentState: states[t.name],
1150
- states: t.states.map((s) => s.name),
1151
- events: [...new Set(t.transitions.map((tr) => tr.event))]
1150
+ states: (t.states || []).map((s) => s.name),
1151
+ events: [...new Set((t.transitions || []).map((tr) => tr.event))]
1152
1152
  }))
1153
1153
  }
1154
1154
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/MockPersistenceAdapter.ts","../src/OrbitalServerRuntime.ts"],"names":[],"mappings":"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","file":"OrbitalServerRuntime.js","sourcesContent":["/**\n * MockPersistenceAdapter - In-memory data store with faker-based mock generation\n *\n * Provides a stateful mock data layer that implements PersistenceAdapter.\n * Uses @faker-js/faker for realistic data generation based on field types.\n *\n * @packageDocumentation\n */\n\nimport { faker } from '@faker-js/faker';\nimport type { PersistenceAdapter } from './OrbitalServerRuntime.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface EntityField {\n name: string;\n type: string;\n required?: boolean;\n values?: string[]; // For enum types\n default?: unknown;\n}\n\nexport interface EntitySchema {\n name: string;\n fields: EntityField[];\n /** Pre-authored instance data from the schema (used instead of faker generation) */\n seedData?: Record<string, unknown>[];\n}\n\nexport interface MockPersistenceConfig {\n /** Seed for deterministic generation */\n seed?: number;\n /** Default number of records to generate per entity */\n defaultSeedCount?: number;\n /** Enable debug logging */\n debug?: boolean;\n}\n\n// ============================================================================\n// MockPersistenceAdapter\n// ============================================================================\n\n/**\n * In-memory mock data store with CRUD operations and faker-based seeding.\n */\nexport class MockPersistenceAdapter implements PersistenceAdapter {\n private stores: Map<string, Map<string, Record<string, unknown>>> = new Map();\n private schemas: Map<string, EntitySchema> = new Map();\n private idCounters: Map<string, number> = new Map();\n private config: MockPersistenceConfig;\n\n constructor(config: MockPersistenceConfig = {}) {\n this.config = {\n defaultSeedCount: 6,\n debug: false,\n ...config,\n };\n\n // Set seed for deterministic generation if provided\n if (config.seed !== undefined) {\n faker.seed(config.seed);\n if (this.config.debug) {\n console.log(`[MockPersistence] Using seed: ${config.seed}`);\n }\n }\n }\n\n // ============================================================================\n // Store Management\n // ============================================================================\n\n private getStore(entityName: string): Map<string, Record<string, unknown>> {\n const normalized = entityName.toLowerCase();\n if (!this.stores.has(normalized)) {\n this.stores.set(normalized, new Map());\n this.idCounters.set(normalized, 0);\n }\n return this.stores.get(normalized)!;\n }\n\n private nextId(entityName: string): string {\n const normalized = entityName.toLowerCase();\n const counter = (this.idCounters.get(normalized) ?? 0) + 1;\n this.idCounters.set(normalized, counter);\n return `${this.capitalizeFirst(entityName)} Id ${counter}`;\n }\n\n // ============================================================================\n // Schema & Seeding\n // ============================================================================\n\n /**\n * Register an entity schema and seed mock data.\n * If the schema has seedData, those instances are used directly.\n * Otherwise, random mock data is generated with faker.\n */\n registerEntity(schema: EntitySchema, seedCount?: number): void {\n const normalized = schema.name.toLowerCase();\n this.schemas.set(normalized, schema);\n\n if (schema.seedData && schema.seedData.length > 0) {\n // Seed with actual pre-authored instances\n this.seedFromInstances(schema.name, schema.seedData);\n } else {\n const count = seedCount ?? this.config.defaultSeedCount ?? 6;\n this.seed(schema.name, schema.fields, count);\n }\n }\n\n /**\n * Seed an entity with pre-authored instance data.\n */\n seedFromInstances(entityName: string, instances: Record<string, unknown>[]): void {\n const store = this.getStore(entityName);\n\n if (this.config.debug) {\n console.log(`[MockPersistence] Seeding ${instances.length} ${entityName} from schema instances...`);\n }\n\n for (const instance of instances) {\n const id = (instance.id as string) || this.nextId(entityName);\n const now = new Date().toISOString();\n const item: Record<string, unknown> = {\n ...instance,\n id,\n createdAt: instance.createdAt as string || now,\n updatedAt: now,\n };\n store.set(id, item);\n }\n }\n\n /**\n * Seed an entity with mock data.\n */\n seed(entityName: string, fields: EntityField[], count: number): void {\n const store = this.getStore(entityName);\n const normalized = entityName.toLowerCase();\n\n if (this.config.debug) {\n console.log(`[MockPersistence] Seeding ${count} ${entityName}...`);\n }\n\n for (let i = 0; i < count; i++) {\n const item = this.generateMockItem(normalized, entityName, fields, i + 1);\n store.set(item.id as string, item);\n }\n }\n\n /**\n * Generate a single mock item based on field schemas.\n */\n private generateMockItem(\n normalizedName: string,\n entityName: string,\n fields: EntityField[],\n index: number\n ): Record<string, unknown> {\n const id = this.nextId(entityName);\n const now = new Date().toISOString();\n const item: Record<string, unknown> = {\n id,\n createdAt: faker.date.past({ years: 1 }).toISOString(),\n updatedAt: now,\n };\n\n for (const field of fields) {\n if (field.name === 'id' || field.name === 'createdAt' || field.name === 'updatedAt') {\n continue;\n }\n item[field.name] = this.generateFieldValue(entityName, field, index);\n }\n\n return item;\n }\n\n /**\n * Generate a mock value for a field based on its schema.\n */\n private generateFieldValue(entityName: string, field: EntityField, index: number): unknown {\n // Handle default values\n if (field.default !== undefined) {\n if (field.default === '@now') {\n return new Date().toISOString();\n }\n return field.default;\n }\n\n // Handle optional fields - 80% chance of having a value\n if (!field.required && Math.random() > 0.8) {\n return null;\n }\n\n const fieldType = field.type.toLowerCase();\n\n switch (fieldType) {\n case 'string':\n return this.generateStringValue(entityName, field, index);\n\n case 'number':\n return faker.number.int({ min: 0, max: 100 });\n\n case 'boolean':\n return faker.datatype.boolean();\n\n case 'date':\n case 'timestamp':\n case 'datetime':\n return this.generateDateValue(field);\n\n case 'enum':\n if (field.values && field.values.length > 0) {\n return faker.helpers.arrayElement(field.values);\n }\n return null;\n\n case 'relation':\n return null; // Relations need special handling\n\n case 'array':\n case 'object':\n return field.type === 'array' ? [] : {};\n\n default:\n // Treat unknown types as strings\n return this.generateStringValue(entityName, field, index);\n }\n }\n\n /**\n * Generate a string value based on field name heuristics.\n */\n private generateStringValue(entityName: string, field: EntityField, index: number): string {\n const name = field.name.toLowerCase();\n\n // If field has enum values, use them\n if (field.values && field.values.length > 0) {\n return faker.helpers.arrayElement(field.values);\n }\n\n // Specific fields - use faker for realistic data\n if (name.includes('email')) return faker.internet.email();\n if (name.includes('phone')) return faker.phone.number();\n if (name.includes('address')) return faker.location.streetAddress();\n if (name.includes('city')) return faker.location.city();\n if (name.includes('country')) return faker.location.country();\n if (name.includes('url') || name.includes('website')) return faker.internet.url();\n if (name.includes('avatar') || name.includes('image')) return faker.image.avatar();\n if (name.includes('color')) return faker.color.human();\n if (name.includes('uuid')) return faker.string.uuid();\n if (name.includes('description') || name.includes('bio')) return faker.lorem.paragraph();\n\n // Generic name/title/text fields - use entity-aware readable format\n const entityLabel = this.capitalizeFirst(entityName);\n const fieldLabel = this.capitalizeFirst(field.name);\n return `${entityLabel} ${fieldLabel} ${index}`;\n }\n\n /**\n * Generate a date value based on field name heuristics.\n */\n private generateDateValue(field: EntityField): string {\n const name = field.name.toLowerCase();\n\n let date: Date;\n if (name.includes('created') || name.includes('start') || name.includes('birth')) {\n date = faker.date.past({ years: 2 });\n } else if (name.includes('updated') || name.includes('modified')) {\n date = faker.date.recent({ days: 30 });\n } else if (name.includes('deadline') || name.includes('due') || name.includes('end') || name.includes('expires')) {\n date = faker.date.future({ years: 1 });\n } else {\n date = faker.date.anytime();\n }\n\n return date.toISOString();\n }\n\n private capitalizeFirst(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n\n // ============================================================================\n // PersistenceAdapter Implementation\n // ============================================================================\n\n async create(\n entityType: string,\n data: Record<string, unknown>\n ): Promise<{ id: string }> {\n const store = this.getStore(entityType);\n const id = this.nextId(entityType);\n const now = new Date().toISOString();\n\n const item = {\n ...data,\n id,\n createdAt: now,\n updatedAt: now,\n };\n\n store.set(id, item);\n return { id };\n }\n\n async update(\n entityType: string,\n id: string,\n data: Record<string, unknown>\n ): Promise<void> {\n const store = this.getStore(entityType);\n const existing = store.get(id);\n\n if (!existing) {\n throw new Error(`Entity ${entityType} with id ${id} not found`);\n }\n\n const updated = {\n ...existing,\n ...data,\n id, // Preserve original ID\n updatedAt: new Date().toISOString(),\n };\n\n store.set(id, updated);\n }\n\n async delete(entityType: string, id: string): Promise<void> {\n const store = this.getStore(entityType);\n if (!store.has(id)) {\n throw new Error(`Entity ${entityType} with id ${id} not found`);\n }\n store.delete(id);\n }\n\n async getById(\n entityType: string,\n id: string\n ): Promise<Record<string, unknown> | null> {\n const store = this.getStore(entityType);\n return store.get(id) ?? null;\n }\n\n async list(entityType: string): Promise<Array<Record<string, unknown>>> {\n const store = this.getStore(entityType);\n return Array.from(store.values());\n }\n\n // ============================================================================\n // Utilities\n // ============================================================================\n\n /**\n * Clear all data for an entity.\n */\n clear(entityName: string): void {\n const normalized = entityName.toLowerCase();\n this.stores.delete(normalized);\n this.idCounters.delete(normalized);\n }\n\n /**\n * Clear all data.\n */\n clearAll(): void {\n this.stores.clear();\n this.idCounters.clear();\n }\n\n /**\n * Get count of items for an entity.\n */\n count(entityName: string): number {\n const store = this.getStore(entityName);\n return store.size;\n }\n}\n\n/**\n * Create a MockPersistenceAdapter instance.\n */\nexport function createMockPersistence(config?: MockPersistenceConfig): MockPersistenceAdapter {\n return new MockPersistenceAdapter(config);\n}\n","/**\n * OrbitalServerRuntime - Dynamic Server-Side Orbital Execution\n *\n * This runtime takes an OrbitalSchema and dynamically:\n * 1. Registers all orbitals and their traits\n * 2. Creates Express routes for trait communication\n * 3. Executes state machines server-side\n * 4. Handles cross-orbital event propagation\n *\n * This is the \"interpreted\" mode - no compilation needed.\n * The compiler generates equivalent static code for production.\n *\n * @example\n * ```typescript\n * import { OrbitalServerRuntime } from '@kflow-builder/shared/runtime';\n * import express from 'express';\n *\n * const app = express();\n * const runtime = new OrbitalServerRuntime();\n *\n * // Register schema (can be loaded from file, API, etc.)\n * runtime.register(orbitalSchema);\n *\n * // Mount orbital routes\n * app.use('/api/orbitals', runtime.router());\n *\n * // Client can now:\n * // POST /api/orbitals/:orbital/events - Send event to orbital\n * // GET /api/orbitals/:orbital/state - Get current state\n * // GET /api/orbitals - List registered orbitals\n * ```\n *\n * @packageDocumentation\n */\n\nimport {\n Router,\n type Request,\n type Response,\n type NextFunction,\n} from \"express\";\nimport { EventBus } from \"./EventBus.js\";\nimport {\n StateMachineManager,\n processEvent,\n createInitialTraitState,\n} from \"./StateMachineCore.js\";\nimport { EffectExecutor } from \"./EffectExecutor.js\";\nimport {\n interpolateProps,\n createContextFromBindings,\n} from \"./BindingResolver.js\";\nimport { evaluateGuard } from \"@almadar/evaluator\";\nimport type {\n TraitDefinition,\n TraitState,\n EffectHandlers,\n BindingContext,\n EffectContext,\n Effect,\n} from \"./types.js\";\nimport { MockPersistenceAdapter } from \"./MockPersistenceAdapter.js\";\nimport {\n preprocessSchema,\n type PreprocessedSchema,\n type EntitySharingMap,\n type EventNamespaceMap,\n} from \"./UsesIntegration.js\";\nimport {\n type SchemaLoader,\n createUnifiedLoader,\n} from \"./loader/index.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Simplified OrbitalSchema for runtime registration\n * (Subset of full OrbitalSchema - just what's needed for execution)\n */\nexport interface RuntimeOrbitalSchema {\n name: string;\n version?: string;\n orbitals: RuntimeOrbital[];\n}\n\nexport interface RuntimeOrbital {\n name: string;\n entity: {\n name: string;\n fields?: Array<{ name: string; type: string }>;\n };\n traits: RuntimeTrait[];\n}\n\n/**\n * Tick definition for scheduled effects\n */\nexport interface RuntimeTraitTick {\n /** Unique name for this tick */\n name: string;\n /** Interval in milliseconds, or cron expression string */\n interval: number | string;\n /** Guard condition (S-expression) - tick only executes if guard passes */\n guard?: unknown;\n /** Effects to execute when tick fires */\n effects: Effect[];\n /** Filter to specific entity IDs (optional) */\n appliesTo?: string[];\n}\n\nexport interface RuntimeTrait {\n name: string;\n states: Array<{ name: string; isInitial?: boolean }>;\n transitions: Array<{\n from: string;\n to: string;\n event: string;\n guard?: unknown;\n effects?: Effect[];\n }>;\n listens?: Array<{\n event: string;\n triggers: string;\n payloadMapping?: Record<string, unknown>;\n }>;\n emits?: string[];\n /** Scheduled ticks for this trait */\n ticks?: RuntimeTraitTick[];\n}\n\n/**\n * Registered orbital with runtime state\n */\ninterface RegisteredOrbital {\n schema: RuntimeOrbital;\n manager: StateMachineManager;\n entityData: Map<string, Record<string, unknown>>; // entityId -> data\n}\n\n/**\n * Event sent from client to server\n */\nexport interface OrbitalEventRequest {\n event: string;\n payload?: Record<string, unknown>;\n entityId?: string;\n /** User context for @user bindings (from Firebase auth) */\n user?: {\n uid: string;\n email?: string;\n displayName?: string;\n [key: string]: unknown;\n };\n}\n\n/**\n * Response from event processing\n */\nexport interface OrbitalEventResponse {\n success: boolean;\n transitioned: boolean;\n states: Record<string, string>;\n emittedEvents: Array<{ event: string; payload?: unknown }>;\n /** Entity data fetched by `fetch` effects - keyed by entity type */\n data?: Record<string, Record<string, unknown> | Record<string, unknown>[]>;\n /** Client-side effects to execute (render-ui, navigate, notify) */\n clientEffects?: Array<unknown>;\n /** Results from server-side effects (persist, call-service, set) */\n effectResults?: EffectResult[];\n error?: string;\n}\n\n/**\n * Result of a server-side effect execution.\n * Closes the circuit by returning effect outcomes to the client.\n */\nexport interface EffectResult {\n /** Effect type that was executed */\n effect: 'persist' | 'call-service' | 'set';\n /** Action performed (e.g., 'create', 'update', 'delete' for persist) */\n action?: string;\n /** Entity type affected (for persist/set) */\n entityType?: string;\n /** Result data from the effect */\n data?: Record<string, unknown>;\n /** Whether the effect succeeded */\n success: boolean;\n /** Error message if failed */\n error?: string;\n}\n\n/**\n * Loader configuration for resolving `uses` imports\n */\nexport interface LoaderConfig {\n /** Base path for schema files */\n basePath: string;\n /** Standard library path (filesystem or URL) */\n stdLibPath?: string;\n /** Scoped package paths */\n scopedPaths?: Record<string, string>;\n /** Custom loader instance (overrides basePath/stdLibPath) */\n loader?: SchemaLoader;\n}\n\n/**\n * Runtime configuration\n */\nexport interface OrbitalServerRuntimeConfig {\n /** Enable debug logging */\n debug?: boolean;\n /** Custom effect handlers (for integrating with your data layer) */\n effectHandlers?: Partial<EffectHandlers>;\n /** Persistence adapter for entity data */\n persistence?: PersistenceAdapter;\n /**\n * Data mode:\n * - 'mock': Use faker-generated mock data (default for preview)\n * - 'real': Use actual persistence layer\n */\n mode?: 'mock' | 'real';\n /** Seed for deterministic mock data generation */\n mockSeed?: number;\n /** Number of mock records to generate per entity */\n mockSeedCount?: number;\n /**\n * Loader configuration for resolving `uses` imports.\n * Required when using `registerWithPreprocess` or `autoPreprocess`.\n */\n loaderConfig?: LoaderConfig;\n /**\n * Automatically preprocess schemas on register() to resolve `uses` imports.\n * Requires `loaderConfig` to be set.\n * Default: false\n */\n autoPreprocess?: boolean;\n /**\n * Apply event namespacing to imported traits.\n * Default: true\n */\n namespaceEvents?: boolean;\n}\n\n/**\n * Adapter for persisting entity data\n */\nexport interface PersistenceAdapter {\n create(\n entityType: string,\n data: Record<string, unknown>,\n ): Promise<{ id: string }>;\n update(\n entityType: string,\n id: string,\n data: Record<string, unknown>,\n ): Promise<void>;\n delete(entityType: string, id: string): Promise<void>;\n getById(\n entityType: string,\n id: string,\n ): Promise<Record<string, unknown> | null>;\n list(entityType: string): Promise<Array<Record<string, unknown>>>;\n}\n\n// ============================================================================\n// In-Memory Persistence (Default)\n// ============================================================================\n\n/**\n * Simple in-memory persistence for development/testing\n */\nclass InMemoryPersistence implements PersistenceAdapter {\n private data = new Map<string, Map<string, Record<string, unknown>>>();\n private idCounter = 0;\n\n async create(\n entityType: string,\n data: Record<string, unknown>,\n ): Promise<{ id: string }> {\n // Use provided ID if it exists, otherwise generate one\n const id = (data.id as string) || `${entityType}-${++this.idCounter}`;\n if (!this.data.has(entityType)) {\n this.data.set(entityType, new Map());\n }\n this.data.get(entityType)!.set(id, { ...data, id });\n return { id };\n }\n\n async update(\n entityType: string,\n id: string,\n data: Record<string, unknown>,\n ): Promise<void> {\n const collection = this.data.get(entityType);\n if (collection?.has(id)) {\n const existing = collection.get(id)!;\n collection.set(id, { ...existing, ...data });\n }\n }\n\n async delete(entityType: string, id: string): Promise<void> {\n this.data.get(entityType)?.delete(id);\n }\n\n async getById(\n entityType: string,\n id: string,\n ): Promise<Record<string, unknown> | null> {\n return this.data.get(entityType)?.get(id) || null;\n }\n\n async list(entityType: string): Promise<Array<Record<string, unknown>>> {\n const collection = this.data.get(entityType);\n return collection ? Array.from(collection.values()) : [];\n }\n}\n\n// ============================================================================\n// OrbitalServerRuntime\n// ============================================================================\n\n/**\n * Dynamic server-side orbital execution runtime\n */\n/**\n * Internal tick binding for tracking active ticks\n */\ninterface TickBinding {\n orbitalName: string;\n traitName: string;\n tick: RuntimeTraitTick;\n timerId: ReturnType<typeof setInterval>;\n}\n\nexport class OrbitalServerRuntime {\n private orbitals = new Map<string, RegisteredOrbital>();\n private eventBus: EventBus;\n private config: OrbitalServerRuntimeConfig;\n private persistence: PersistenceAdapter;\n private listenerCleanups: Array<() => void> = [];\n private tickBindings: TickBinding[] = [];\n private loader: SchemaLoader | null = null;\n private preprocessedCache = new Map<string, PreprocessedSchema>();\n private entitySharingMap: EntitySharingMap = {};\n private eventNamespaceMap: EventNamespaceMap = {};\n\n constructor(config: OrbitalServerRuntimeConfig = {}) {\n this.config = {\n mode: 'mock', // Default to mock mode for preview\n autoPreprocess: false,\n namespaceEvents: true,\n ...config,\n };\n this.eventBus = new EventBus();\n\n // Initialize loader if config provided\n if (config.loaderConfig) {\n this.loader = config.loaderConfig.loader ?? createUnifiedLoader({\n basePath: config.loaderConfig.basePath,\n stdLibPath: config.loaderConfig.stdLibPath,\n scopedPaths: config.loaderConfig.scopedPaths,\n });\n }\n\n // Use MockPersistenceAdapter for mock mode, otherwise use provided or InMemoryPersistence\n if (this.config.mode === 'mock' && !config.persistence) {\n this.persistence = new MockPersistenceAdapter({\n seed: config.mockSeed,\n defaultSeedCount: config.mockSeedCount ?? 6,\n debug: config.debug,\n });\n if (config.debug) {\n console.log('[OrbitalRuntime] Using mock persistence with faker data');\n }\n } else {\n this.persistence = config.persistence || new InMemoryPersistence();\n }\n }\n\n // ==========================================================================\n // Schema Registration\n // ==========================================================================\n\n /**\n * Register an OrbitalSchema for execution.\n *\n * If `autoPreprocess` is enabled in config and schema has `uses` declarations,\n * it will be preprocessed first to resolve imports.\n *\n * For explicit preprocessing control, use `registerWithPreprocess()`.\n */\n async register(schema: RuntimeOrbitalSchema): Promise<void> {\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Registering schema: ${schema.name}`);\n }\n\n // Register all orbitals (await to ensure instance seeding completes)\n for (const orbital of schema.orbitals) {\n await this.registerOrbitalAsync(orbital);\n }\n\n // Set up cross-orbital event listeners\n this.setupEventListeners();\n\n // Set up scheduled ticks\n this.setupTicks();\n }\n\n /**\n * Register an OrbitalSchema synchronously (for backward compatibility).\n * Note: This version doesn't wait for instance seeding to complete.\n * Use async register() for guaranteed instance seeding.\n */\n registerSync(schema: RuntimeOrbitalSchema): void {\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Registering schema (sync): ${schema.name}`);\n }\n\n for (const orbital of schema.orbitals) {\n this.registerOrbital(orbital);\n }\n\n // Set up cross-orbital event listeners\n this.setupEventListeners();\n\n // Set up scheduled ticks\n this.setupTicks();\n }\n\n /**\n * Register an OrbitalSchema with preprocessing to resolve `uses` imports.\n *\n * This method:\n * 1. Loads all external orbitals referenced in `uses` declarations\n * 2. Expands entity/trait/page references to inline definitions\n * 3. Builds entity sharing and event namespace maps\n * 4. Caches the preprocessed result\n * 5. Registers the resolved schema\n *\n * @param schema - Schema with potential `uses` declarations\n * @param options - Optional preprocessing options\n * @returns Preprocessing result with entity sharing info\n *\n * @example\n * ```typescript\n * const runtime = new OrbitalServerRuntime({\n * loaderConfig: {\n * basePath: '/schemas',\n * stdLibPath: '/std',\n * },\n * });\n *\n * const result = await runtime.registerWithPreprocess(schema);\n * if (result.success) {\n * console.log('Registered with', Object.keys(result.entitySharing).length, 'orbitals');\n * }\n * ```\n */\n async registerWithPreprocess(\n schema: RuntimeOrbitalSchema,\n options?: { sourcePath?: string }\n ): Promise<{\n success: boolean;\n entitySharing?: EntitySharingMap;\n eventNamespaces?: EventNamespaceMap;\n warnings?: string[];\n errors?: string[];\n }> {\n // Check if preprocessing is possible\n if (!this.loader && !this.config.loaderConfig) {\n return {\n success: false,\n errors: ['Loader not configured. Set loaderConfig in OrbitalServerRuntimeConfig.'],\n };\n }\n\n // Ensure loader is initialized\n if (!this.loader && this.config.loaderConfig) {\n this.loader = this.config.loaderConfig.loader ?? createUnifiedLoader({\n basePath: this.config.loaderConfig.basePath,\n stdLibPath: this.config.loaderConfig.stdLibPath,\n scopedPaths: this.config.loaderConfig.scopedPaths,\n });\n }\n\n // Check cache\n const cacheKey = `${schema.name}:${schema.version || '1.0.0'}`;\n const cached = this.preprocessedCache.get(cacheKey);\n if (cached) {\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Using cached preprocessed schema: ${schema.name}`);\n }\n this.register(cached.schema as unknown as RuntimeOrbitalSchema);\n this.entitySharingMap = { ...this.entitySharingMap, ...cached.entitySharing };\n this.eventNamespaceMap = { ...this.eventNamespaceMap, ...cached.eventNamespaces };\n return {\n success: true,\n entitySharing: cached.entitySharing,\n eventNamespaces: cached.eventNamespaces,\n warnings: cached.warnings,\n };\n }\n\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Preprocessing schema: ${schema.name}`);\n }\n\n // Preprocess schema\n const result = await preprocessSchema(schema as unknown as import(\"@almadar/core\").OrbitalSchema, {\n basePath: this.config.loaderConfig?.basePath || '.',\n stdLibPath: this.config.loaderConfig?.stdLibPath,\n scopedPaths: this.config.loaderConfig?.scopedPaths,\n loader: this.loader!,\n namespaceEvents: this.config.namespaceEvents,\n });\n\n if (!result.success) {\n return {\n success: false,\n errors: result.errors,\n };\n }\n\n // Cache the result\n this.preprocessedCache.set(cacheKey, result.data);\n\n // Store sharing maps\n this.entitySharingMap = { ...this.entitySharingMap, ...result.data.entitySharing };\n this.eventNamespaceMap = { ...this.eventNamespaceMap, ...result.data.eventNamespaces };\n\n // Register the preprocessed schema\n this.register(result.data.schema as unknown as RuntimeOrbitalSchema);\n\n return {\n success: true,\n entitySharing: result.data.entitySharing,\n eventNamespaces: result.data.eventNamespaces,\n warnings: result.data.warnings,\n };\n }\n\n /**\n * Get entity sharing information for registered orbitals.\n * Useful for determining entity isolation and collection names.\n */\n getEntitySharing(): EntitySharingMap {\n return { ...this.entitySharingMap };\n }\n\n /**\n * Get event namespace mapping for registered orbitals.\n * Useful for debugging cross-orbital event routing.\n */\n getEventNamespaces(): EventNamespaceMap {\n return { ...this.eventNamespaceMap };\n }\n\n /**\n * Clear the preprocessing cache.\n */\n clearPreprocessCache(): void {\n this.preprocessedCache.clear();\n }\n\n /**\n * Register a single orbital\n */\n private async registerOrbitalAsync(orbital: RuntimeOrbital): Promise<void> {\n // Convert traits to TraitDefinition - handle both flat and stateMachine structures\n const traitDefs: TraitDefinition[] = orbital.traits.map((t) => {\n // Support both: t.states (flat) and t.stateMachine.states (OrbitalSchema structure)\n const stateMachine = (t as { stateMachine?: { states?: unknown[]; transitions?: unknown[] } }).stateMachine;\n const states = t.states || stateMachine?.states || [];\n const transitions = t.transitions || stateMachine?.transitions || [];\n\n return {\n name: t.name,\n states: states as TraitDefinition['states'],\n transitions: transitions as TraitDefinition['transitions'],\n listens: t.listens,\n };\n });\n\n const manager = new StateMachineManager(traitDefs);\n\n this.orbitals.set(orbital.name, {\n schema: orbital,\n manager,\n entityData: new Map(),\n });\n\n const entity = orbital.entity;\n \n // Seed entity instances from schema if they exist\n if (entity?.name && (entity as any).instances && Array.isArray((entity as any).instances)) {\n const instances = (entity as any).instances as Array<Record<string, unknown>>;\n if (instances.length > 0) {\n console.log(`[OrbitalRuntime] Seeding ${instances.length} instances for ${entity.name} from schema`);\n \n // Seed each instance (await to ensure they're created)\n const results = await Promise.all(\n instances.map(async (instance) => {\n try {\n const result = await this.persistence.create(entity.name, instance);\n console.log(`[OrbitalRuntime] Seeded instance: ${instance.id || 'no-id'}`);\n return result;\n } catch (err) {\n console.error(`[OrbitalRuntime] Failed to seed instance ${instance.id}:`, err);\n return null;\n }\n })\n );\n \n const successCount = results.filter(r => r !== null).length;\n console.log(`[OrbitalRuntime] Seeded ${successCount}/${instances.length} ${entity.name} instances from schema`);\n }\n } else if (this.config.mode === 'mock' && this.persistence instanceof MockPersistenceAdapter) {\n // Fall back to mock data generation if no instances defined\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] No instances in schema, generating mock data for ${entity?.name}`);\n }\n if (entity?.name && entity.fields) {\n const fields = entity.fields.map((f: { name: string; type: string; required?: boolean; values?: string[]; default?: unknown }) => ({\n name: f.name,\n type: f.type,\n required: f.required,\n values: f.values,\n default: f.default,\n }));\n this.persistence.registerEntity({ name: entity.name, fields });\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Seeded mock data for entity: ${entity.name}, count: ${this.persistence.count(entity.name)}`);\n }\n }\n }\n\n if (this.config.debug) {\n console.log(\n `[OrbitalRuntime] Registered orbital: ${orbital.name} with ${orbital.traits.length} trait(s)`,\n );\n }\n }\n\n /**\n * Register a single orbital (sync wrapper for backward compatibility)\n */\n private registerOrbital(orbital: RuntimeOrbital): void {\n // Create a synchronous version by using a promise that we don't await\n // For truly async registration, use the async register() method\n this.registerOrbitalAsync(orbital).catch((err) => {\n console.error(`[OrbitalRuntime] Failed to register orbital:`, err);\n });\n }\n\n /**\n * Set up event listeners for cross-orbital communication\n */\n private setupEventListeners(): void {\n // Clean up existing listeners\n for (const cleanup of this.listenerCleanups) {\n cleanup();\n }\n this.listenerCleanups = [];\n\n // For each orbital's traits with `listens`\n for (const [orbitalName, registered] of this.orbitals) {\n for (const trait of registered.schema.traits) {\n if (!trait.listens) continue;\n\n for (const listener of trait.listens) {\n const cleanup = this.eventBus.on(listener.event, async (event) => {\n if (this.config.debug) {\n console.log(\n `[OrbitalRuntime] ${orbitalName}.${trait.name} received: ${listener.event}`,\n );\n }\n\n // Apply payload mapping\n let mappedPayload = event.payload;\n if (listener.payloadMapping && event.payload) {\n mappedPayload = {};\n for (const [key, expr] of Object.entries(\n listener.payloadMapping,\n )) {\n if (typeof expr === \"string\" && expr.startsWith(\"@payload.\")) {\n const field = expr.slice(\"@payload.\".length);\n (mappedPayload as Record<string, unknown>)[key] = (\n event.payload as Record<string, unknown>\n )[field];\n } else {\n (mappedPayload as Record<string, unknown>)[key] = expr;\n }\n }\n }\n\n // Trigger the mapped event\n await this.processOrbitalEvent(orbitalName, {\n event: listener.triggers,\n payload: mappedPayload as Record<string, unknown>,\n });\n });\n\n this.listenerCleanups.push(cleanup);\n }\n }\n }\n }\n\n /**\n * Set up scheduled ticks for all traits\n */\n private setupTicks(): void {\n // Clean up existing ticks\n this.cleanupTicks();\n\n // For each orbital's traits with `ticks`\n for (const [orbitalName, registered] of this.orbitals) {\n for (const trait of registered.schema.traits) {\n if (!trait.ticks || trait.ticks.length === 0) continue;\n\n for (const tick of trait.ticks) {\n this.registerTick(orbitalName, trait.name, tick, registered);\n }\n }\n }\n\n if (this.config.debug && this.tickBindings.length > 0) {\n console.log(\n `[OrbitalRuntime] Registered ${this.tickBindings.length} tick(s)`,\n );\n }\n }\n\n /**\n * Register a single tick\n */\n private registerTick(\n orbitalName: string,\n traitName: string,\n tick: RuntimeTraitTick,\n registered: RegisteredOrbital,\n ): void {\n // Determine interval in milliseconds\n let intervalMs: number;\n if (typeof tick.interval === \"number\") {\n intervalMs = tick.interval;\n } else if (typeof tick.interval === \"string\") {\n // Parse cron-like interval strings (e.g., '5s', '1m', '1h')\n intervalMs = this.parseIntervalString(tick.interval);\n } else {\n intervalMs = 1000; // Default to 1 second\n }\n\n if (this.config.debug) {\n console.log(\n `[OrbitalRuntime] Registering tick: ${orbitalName}.${traitName}.${tick.name} (${intervalMs}ms)`,\n );\n }\n\n const timerId = setInterval(async () => {\n await this.executeTick(orbitalName, traitName, tick, registered);\n }, intervalMs);\n\n this.tickBindings.push({\n orbitalName,\n traitName,\n tick,\n timerId,\n });\n }\n\n /**\n * Parse interval string to milliseconds\n * Supports: '5s', '1m', '1h', '30000' (ms)\n */\n private parseIntervalString(interval: string): number {\n const match = interval.match(/^(\\d+)(ms|s|m|h)?$/);\n if (!match) {\n console.warn(\n `[OrbitalRuntime] Invalid interval format: ${interval}, defaulting to 1000ms`,\n );\n return 1000;\n }\n\n const value = parseInt(match[1], 10);\n const unit = match[2] || \"ms\";\n\n switch (unit) {\n case \"ms\":\n return value;\n case \"s\":\n return value * 1000;\n case \"m\":\n return value * 60 * 1000;\n case \"h\":\n return value * 60 * 60 * 1000;\n default:\n return value;\n }\n }\n\n /**\n * Execute a tick for all applicable entities\n */\n private async executeTick(\n orbitalName: string,\n traitName: string,\n tick: RuntimeTraitTick,\n registered: RegisteredOrbital,\n ): Promise<void> {\n const entityType = registered.schema.entity.name;\n const emittedEvents: Array<{ event: string; payload?: unknown }> = [];\n\n try {\n // Get all entities (or filtered by appliesTo)\n let entities = await this.persistence.list(entityType);\n\n if (tick.appliesTo && tick.appliesTo.length > 0) {\n const appliesToSet = new Set(tick.appliesTo);\n entities = entities.filter((e) => appliesToSet.has(e.id as string));\n }\n\n if (this.config.debug && entities.length > 0) {\n console.log(\n `[OrbitalRuntime] Tick ${orbitalName}.${traitName}.${tick.name}: processing ${entities.length} entities`,\n );\n }\n\n for (const entity of entities) {\n // Evaluate guard if present\n if (tick.guard) {\n try {\n const ctx = createContextFromBindings({\n entity,\n payload: {},\n state:\n registered.manager.getState(traitName)?.currentState ||\n \"unknown\",\n });\n\n const guardPasses = evaluateGuard(\n tick.guard as Parameters<typeof evaluateGuard>[0],\n ctx,\n );\n\n if (!guardPasses) {\n if (this.config.debug) {\n console.log(\n `[OrbitalRuntime] Tick ${tick.name}: guard failed for entity ${entity.id}`,\n );\n }\n continue;\n }\n } catch (error) {\n console.error(\n `[OrbitalRuntime] Tick ${tick.name}: guard evaluation error for entity ${entity.id}:`,\n error,\n );\n continue;\n }\n }\n\n // Execute effects for this entity\n if (tick.effects && tick.effects.length > 0) {\n const fetchedData: Record<string, Record<string, unknown> | Record<string, unknown>[]> = {};\n const clientEffects: Array<unknown> = [];\n const tickEffectResults: EffectResult[] = [];\n await this.executeEffects(\n registered,\n traitName,\n tick.effects,\n {}, // No payload for ticks\n entity,\n entity.id as string,\n emittedEvents,\n fetchedData,\n clientEffects,\n tickEffectResults,\n );\n\n if (this.config.debug) {\n console.log(\n `[OrbitalRuntime] Tick ${tick.name}: executed effects for entity ${entity.id}`,\n );\n }\n }\n }\n } catch (error) {\n console.error(\n `[OrbitalRuntime] Tick ${tick.name} execution error:`,\n error,\n );\n }\n }\n\n /**\n * Clean up all active ticks\n */\n private cleanupTicks(): void {\n for (const binding of this.tickBindings) {\n clearInterval(binding.timerId);\n }\n this.tickBindings = [];\n }\n\n /**\n * Unregister all orbitals and clean up\n */\n unregisterAll(): void {\n // Clean up ticks\n this.cleanupTicks();\n\n // Clean up event listeners\n for (const cleanup of this.listenerCleanups) {\n cleanup();\n }\n this.listenerCleanups = [];\n\n this.orbitals.clear();\n this.eventBus.clear();\n }\n\n // ==========================================================================\n // Event Processing\n // ==========================================================================\n\n /**\n * Process an event for an orbital\n */\n async processOrbitalEvent(\n orbitalName: string,\n request: OrbitalEventRequest,\n ): Promise<OrbitalEventResponse> {\n const registered = this.orbitals.get(orbitalName);\n if (!registered) {\n return {\n success: false,\n transitioned: false,\n states: {},\n emittedEvents: [],\n error: `Orbital not found: ${orbitalName}`,\n };\n }\n\n const { event, payload, entityId, user } = request;\n const emittedEvents: Array<{ event: string; payload?: unknown }> = [];\n // Collect data fetched by `fetch` effects\n const fetchedData: Record<string, Record<string, unknown> | Record<string, unknown>[]> = {};\n // Collect client-side effects (render-ui, navigate, notify)\n const clientEffects: Array<unknown> = [];\n // Collect server-side effect results (persist, call-service, set)\n const effectResults: EffectResult[] = [];\n\n // Extract active traits filter from payload (sent by client for page-specific execution)\n const activeTraits = (payload as Record<string, unknown> | undefined)?._activeTraits as string[] | undefined;\n // Remove _activeTraits from payload before processing (internal use only)\n const cleanPayload = payload ? { ...payload } : undefined;\n if (cleanPayload) {\n delete (cleanPayload as Record<string, unknown>)._activeTraits;\n }\n\n // Get entity data if entityId provided\n let entityData: Record<string, unknown> = {};\n if (entityId) {\n const stored = await this.persistence.getById(\n registered.schema.entity.name,\n entityId,\n );\n if (stored) {\n entityData = stored;\n }\n }\n\n // Process event through state machine\n const results = registered.manager.sendEvent(event, cleanPayload, entityData);\n\n // Filter results to only active traits (if specified)\n const filteredResults = activeTraits && activeTraits.length > 0\n ? results.filter(({ traitName }) => activeTraits.includes(traitName))\n : results;\n\n if (this.config.debug && activeTraits) {\n console.log(`[OrbitalRuntime] Filtering traits: ${results.length} total, ${filteredResults.length} active (${activeTraits.join(', ')})`);\n }\n\n // Execute effects only for active traits\n for (const { traitName, result } of filteredResults) {\n if (result.effects.length > 0) {\n await this.executeEffects(\n registered,\n traitName,\n result.effects as Effect[],\n cleanPayload,\n entityData,\n entityId,\n emittedEvents,\n fetchedData,\n clientEffects,\n effectResults,\n user,\n );\n }\n }\n\n // Build current states\n const states: Record<string, string> = {};\n for (const [name, state] of registered.manager.getAllStates()) {\n states[name] = state.currentState;\n }\n\n const response: OrbitalEventResponse = {\n success: true,\n transitioned: results.length > 0,\n states,\n emittedEvents,\n };\n\n // Include fetched data if any\n if (Object.keys(fetchedData).length > 0) {\n response.data = fetchedData;\n }\n\n // Include client effects if any\n if (clientEffects.length > 0) {\n response.clientEffects = clientEffects;\n }\n\n // Include server effect results if any\n if (effectResults.length > 0) {\n response.effectResults = effectResults;\n }\n\n return response;\n }\n\n /**\n * Execute effects from a transition\n */\n private async executeEffects(\n registered: RegisteredOrbital,\n traitName: string,\n effects: Effect[],\n payload: Record<string, unknown> | undefined,\n entityData: Record<string, unknown>,\n entityId: string | undefined,\n emittedEvents: Array<{ event: string; payload?: unknown }>,\n fetchedData: Record<string, Record<string, unknown> | Record<string, unknown>[]>,\n clientEffects: Array<unknown>,\n effectResults: EffectResult[],\n user?: OrbitalEventRequest[\"user\"],\n ): Promise<void> {\n const entityType = registered.schema.entity.name;\n\n const handlers: EffectHandlers = {\n emit: (event, eventPayload) => {\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Emitting: ${event}`, eventPayload);\n }\n this.eventBus.emit(event, eventPayload);\n emittedEvents.push({ event, payload: eventPayload });\n },\n\n set: async (targetId, field, value) => {\n const id = targetId || entityId;\n if (id) {\n try {\n await this.persistence.update(entityType, id, { [field]: value });\n effectResults.push({\n effect: 'set',\n entityType,\n data: { id, field, value },\n success: true,\n });\n } catch (err) {\n effectResults.push({\n effect: 'set',\n entityType,\n data: { id, field, value },\n success: false,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n }\n },\n\n persist: async (action, targetEntityType, data) => {\n const type = targetEntityType || entityType;\n let resultData: Record<string, unknown> | undefined;\n\n try {\n switch (action) {\n case \"create\": {\n const { id } = await this.persistence.create(type, data || {});\n resultData = { id, ...(data || {}) };\n break;\n }\n case \"update\":\n if (data?.id || entityId) {\n const updateId = (data?.id as string) || entityId!;\n await this.persistence.update(type, updateId, data || {});\n // Return the updated entity\n const updated = await this.persistence.getById(type, updateId);\n resultData = updated || { id: updateId, ...(data || {}) };\n }\n break;\n case \"delete\":\n if (data?.id || entityId) {\n const deleteId = (data?.id as string) || entityId!;\n await this.persistence.delete(type, deleteId);\n resultData = { id: deleteId, deleted: true };\n }\n break;\n }\n\n effectResults.push({\n effect: 'persist',\n action,\n entityType: type,\n data: resultData,\n success: true,\n });\n } catch (err) {\n effectResults.push({\n effect: 'persist',\n action,\n entityType: type,\n success: false,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n },\n\n callService: async (service, action, params) => {\n try {\n let result = null;\n // Custom handlers can override this\n if (this.config.effectHandlers?.callService) {\n result = await this.config.effectHandlers.callService(\n service,\n action,\n params,\n );\n } else {\n console.warn(\n `[OrbitalRuntime] call-service not configured: ${service}.${action}`,\n );\n }\n\n effectResults.push({\n effect: 'call-service',\n action: `${service}.${action}`,\n data: result as Record<string, unknown> | undefined,\n success: true,\n });\n\n return result;\n } catch (err) {\n effectResults.push({\n effect: 'call-service',\n action: `${service}.${action}`,\n success: false,\n error: err instanceof Error ? err.message : String(err),\n });\n return null;\n }\n },\n\n fetch: async (fetchEntityType, options) => {\n try {\n let result: Record<string, unknown> | Record<string, unknown>[] | null = null;\n\n if (options?.id) {\n // Single entity fetch\n const entity = await this.persistence.getById(fetchEntityType, options.id);\n if (entity) {\n // Populate relations if include specified\n if (options?.include && options.include.length > 0) {\n await this.populateRelations([entity], fetchEntityType, options.include);\n }\n // Always store as array for consistent access via FetchedDataContext\n fetchedData[fetchEntityType] = [entity];\n result = entity;\n }\n } else {\n // Collection fetch\n let entities = await this.persistence.list(fetchEntityType);\n\n // Apply filter if provided (basic implementation - can be extended)\n // TODO: Implement proper filter evaluation using evaluateGuard\n\n // Apply pagination\n if (options?.offset && options.offset > 0) {\n entities = entities.slice(options.offset);\n }\n if (options?.limit && options.limit > 0) {\n entities = entities.slice(0, options.limit);\n }\n\n // Populate relations if include specified\n if (options?.include && options.include.length > 0) {\n await this.populateRelations(entities, fetchEntityType, options.include);\n }\n\n fetchedData[fetchEntityType] = entities;\n result = entities;\n }\n\n return result;\n } catch (error) {\n console.error(`[OrbitalRuntime] Fetch error for ${fetchEntityType}:`, error);\n return null;\n }\n },\n\n // Client-side effects - collect for forwarding to client\n renderUI: (slot, pattern, props, priority) => {\n clientEffects.push(['render-ui', slot, pattern, props, priority]);\n },\n navigate: (path, params) => {\n clientEffects.push(['navigate', path, params]);\n },\n\n notify: (message, type) => {\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Notification (${type}): ${message}`);\n }\n // Forward notify to client as a client effect\n clientEffects.push(['notify', message, { type }]);\n },\n\n log: (message, level) => {\n const logFn =\n level === \"error\"\n ? console.error\n : level === \"warn\"\n ? console.warn\n : console.log;\n logFn(`[OrbitalRuntime] ${message}`);\n },\n\n // Allow custom handlers to override\n ...this.config.effectHandlers,\n };\n\n const state = registered.manager.getState(traitName);\n const bindings: BindingContext = {\n entity: entityData,\n payload,\n state: state?.currentState || \"unknown\",\n user, // @user bindings from Firebase auth\n };\n\n const context: EffectContext = {\n traitName,\n state: state?.currentState || \"unknown\",\n transition: \"unknown\",\n entityId,\n };\n\n const executor = new EffectExecutor({\n handlers,\n bindings,\n context,\n debug: this.config.debug,\n });\n\n await executor.executeAll(effects);\n }\n\n // ==========================================================================\n // Relation Population\n // ==========================================================================\n\n /**\n * Populate relation fields on entities\n *\n * For each field in `include`, find the relation field configuration and\n * fetch the related entity, attaching it to the parent entity.\n *\n * @param entities - Entities to populate\n * @param entityType - Entity type name\n * @param include - Relation field names to populate\n */\n private async populateRelations(\n entities: Record<string, unknown>[],\n entityType: string,\n include: string[],\n ): Promise<void> {\n // Find the orbital that owns this entity type\n let entityFields: Array<{ name: string; type: string; relation?: { entity: string; cardinality?: string } }> | undefined;\n\n for (const [, registered] of this.orbitals) {\n if (registered.schema.entity.name === entityType) {\n entityFields = registered.schema.entity.fields;\n break;\n }\n }\n\n if (!entityFields) {\n if (this.config.debug) {\n console.warn(`[OrbitalRuntime] No entity definition found for ${entityType}`);\n }\n return;\n }\n\n // Process each include field\n for (const includeField of include) {\n // Find the relation field (check both \"fieldName\" and \"fieldNameId\" patterns)\n const relationField = entityFields.find(f => {\n if (f.type !== 'relation') return false;\n // Match \"company\" against \"company\" or \"companyId\"\n return f.name === includeField ||\n f.name === `${includeField}Id` ||\n f.name.replace(/Id$/, '') === includeField;\n });\n\n if (!relationField?.relation?.entity) {\n if (this.config.debug) {\n console.warn(`[OrbitalRuntime] No relation field found for '${includeField}' on ${entityType}`);\n }\n continue;\n }\n\n const foreignKeyField = relationField.name;\n const relatedEntityType = relationField.relation.entity;\n const cardinality = relationField.relation.cardinality || 'one';\n\n // Collect all foreign key IDs to batch fetch\n const foreignKeyIds = new Set<string>();\n for (const entity of entities) {\n const fkValue = entity[foreignKeyField];\n if (fkValue && typeof fkValue === 'string') {\n foreignKeyIds.add(fkValue);\n }\n }\n\n if (foreignKeyIds.size === 0) continue;\n\n // Fetch all related entities (ideally this would be a batch query)\n const relatedEntities = new Map<string, Record<string, unknown>>();\n for (const fkId of foreignKeyIds) {\n try {\n const related = await this.persistence.getById(relatedEntityType, fkId);\n if (related) {\n relatedEntities.set(fkId, related);\n }\n } catch (error) {\n if (this.config.debug) {\n console.error(`[OrbitalRuntime] Error fetching related ${relatedEntityType}:`, error);\n }\n }\n }\n\n // Attach related entities to parent entities\n // Use the base name without \"Id\" suffix for the populated field\n const populatedFieldName = includeField.endsWith('Id')\n ? includeField.slice(0, -2)\n : includeField;\n\n for (const entity of entities) {\n const fkValue = entity[foreignKeyField] as string;\n if (fkValue && relatedEntities.has(fkValue)) {\n if (cardinality === 'one') {\n entity[populatedFieldName] = relatedEntities.get(fkValue);\n } else {\n // For many relations, we'd need a different approach\n // (reverse lookup from the related entity's foreign key)\n // For now, just set to array with single item\n entity[populatedFieldName] = [relatedEntities.get(fkValue)];\n }\n }\n }\n\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Populated '${populatedFieldName}' on ${entities.length} ${entityType} entities`);\n }\n }\n }\n\n // ==========================================================================\n // Express Router\n // ==========================================================================\n\n /**\n * Create Express router for orbital API endpoints\n *\n * All data access goes through trait events with guards.\n * No direct CRUD routes - use events with `fetch` effects.\n *\n * Routes:\n * - GET / - List registered orbitals\n * - GET /:orbital - Get orbital info and current states\n * - POST /:orbital/events - Send event to orbital (includes data from `fetch` effects)\n */\n router(): Router {\n const router = Router();\n\n // List orbitals\n router.get(\"/\", (_req: Request, res: Response) => {\n const orbitals = Array.from(this.orbitals.entries()).map(\n ([name, reg]) => ({\n name,\n entity: reg.schema.entity.name,\n traits: reg.schema.traits.map((t) => t.name),\n }),\n );\n res.json({ success: true, orbitals });\n });\n\n // Get orbital info\n router.get(\"/:orbital\", (req: Request, res: Response) => {\n const orbitalName = req.params.orbital as string;\n const registered = this.orbitals.get(orbitalName);\n if (!registered) {\n res.status(404).json({ success: false, error: \"Orbital not found\" });\n return;\n }\n\n const states: Record<string, string> = {};\n for (const [name, state] of registered.manager.getAllStates()) {\n states[name] = state.currentState;\n }\n\n res.json({\n success: true,\n orbital: {\n name: orbitalName,\n entity: registered.schema.entity,\n traits: registered.schema.traits.map((t) => ({\n name: t.name,\n currentState: states[t.name],\n states: t.states.map((s) => s.name),\n events: [...new Set(t.transitions.map((tr) => tr.event))],\n })),\n },\n });\n });\n\n // Send event to orbital - this is the ONLY data access point\n // All reads go through `fetch` effects with guard enforcement\n // All writes go through `persist` effects with guard enforcement\n router.post(\n \"/:orbital/events\",\n async (req: Request, res: Response, next: NextFunction) => {\n try {\n const orbitalName = req.params.orbital as string;\n // Extract user from request (set by authenticateFirebase middleware)\n const firebaseUser = (req as Request & { firebaseUser?: Record<string, unknown> }).firebaseUser;\n const user = firebaseUser ? {\n uid: firebaseUser.uid as string,\n email: firebaseUser.email as string | undefined,\n displayName: firebaseUser.name as string | undefined,\n ...firebaseUser,\n } : undefined;\n\n const result = await this.processOrbitalEvent(orbitalName, {\n ...req.body,\n user,\n });\n res.json(result);\n } catch (error) {\n next(error);\n }\n },\n );\n\n // No direct CRUD routes - all data access goes through events\n // This ensures guards are always evaluated for both reads and writes\n\n return router;\n }\n\n // ==========================================================================\n // Direct API (for programmatic use)\n // ==========================================================================\n\n /**\n * Get the event bus for manual event emission\n */\n getEventBus(): EventBus {\n return this.eventBus;\n }\n\n /**\n * Get state for a specific orbital/trait\n */\n getState(\n orbitalName: string,\n traitName?: string,\n ): TraitState | Record<string, TraitState> | undefined {\n const registered = this.orbitals.get(orbitalName);\n if (!registered) return undefined;\n\n if (traitName) {\n return registered.manager.getState(traitName);\n }\n\n // Return all states for the orbital\n const states: Record<string, TraitState> = {};\n for (const [name, state] of registered.manager.getAllStates()) {\n states[name] = state;\n }\n return states;\n }\n\n /**\n * List registered orbitals\n */\n listOrbitals(): string[] {\n return Array.from(this.orbitals.keys());\n }\n\n /**\n * Check if an orbital is registered\n */\n hasOrbital(name: string): boolean {\n return this.orbitals.has(name);\n }\n\n /**\n * Get information about active ticks\n */\n getActiveTicks(): Array<{\n orbital: string;\n trait: string;\n tick: string;\n interval: number | string;\n hasGuard: boolean;\n }> {\n return this.tickBindings.map((binding) => ({\n orbital: binding.orbitalName,\n trait: binding.traitName,\n tick: binding.tick.name,\n interval: binding.tick.interval,\n hasGuard: !!binding.tick.guard,\n }));\n }\n}\n\n/**\n * Factory function to create a runtime instance\n */\nexport function createOrbitalServerRuntime(\n config?: OrbitalServerRuntimeConfig,\n): OrbitalServerRuntime {\n return new OrbitalServerRuntime(config);\n}\n"]}
1
+ {"version":3,"sources":["../src/MockPersistenceAdapter.ts","../src/OrbitalServerRuntime.ts"],"names":[],"mappings":"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","file":"OrbitalServerRuntime.js","sourcesContent":["/**\n * MockPersistenceAdapter - In-memory data store with faker-based mock generation\n *\n * Provides a stateful mock data layer that implements PersistenceAdapter.\n * Uses @faker-js/faker for realistic data generation based on field types.\n *\n * @packageDocumentation\n */\n\nimport { faker } from '@faker-js/faker';\nimport type { PersistenceAdapter } from './OrbitalServerRuntime.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface EntityField {\n name: string;\n type: string;\n required?: boolean;\n values?: string[]; // For enum types\n default?: unknown;\n}\n\nexport interface EntitySchema {\n name: string;\n fields: EntityField[];\n /** Pre-authored instance data from the schema (used instead of faker generation) */\n seedData?: Record<string, unknown>[];\n}\n\nexport interface MockPersistenceConfig {\n /** Seed for deterministic generation */\n seed?: number;\n /** Default number of records to generate per entity */\n defaultSeedCount?: number;\n /** Enable debug logging */\n debug?: boolean;\n}\n\n// ============================================================================\n// MockPersistenceAdapter\n// ============================================================================\n\n/**\n * In-memory mock data store with CRUD operations and faker-based seeding.\n */\nexport class MockPersistenceAdapter implements PersistenceAdapter {\n private stores: Map<string, Map<string, Record<string, unknown>>> = new Map();\n private schemas: Map<string, EntitySchema> = new Map();\n private idCounters: Map<string, number> = new Map();\n private config: MockPersistenceConfig;\n\n constructor(config: MockPersistenceConfig = {}) {\n this.config = {\n defaultSeedCount: 6,\n debug: false,\n ...config,\n };\n\n // Set seed for deterministic generation if provided\n if (config.seed !== undefined) {\n faker.seed(config.seed);\n if (this.config.debug) {\n console.log(`[MockPersistence] Using seed: ${config.seed}`);\n }\n }\n }\n\n // ============================================================================\n // Store Management\n // ============================================================================\n\n private getStore(entityName: string): Map<string, Record<string, unknown>> {\n const normalized = entityName.toLowerCase();\n if (!this.stores.has(normalized)) {\n this.stores.set(normalized, new Map());\n this.idCounters.set(normalized, 0);\n }\n return this.stores.get(normalized)!;\n }\n\n private nextId(entityName: string): string {\n const normalized = entityName.toLowerCase();\n const counter = (this.idCounters.get(normalized) ?? 0) + 1;\n this.idCounters.set(normalized, counter);\n return `${this.capitalizeFirst(entityName)} Id ${counter}`;\n }\n\n // ============================================================================\n // Schema & Seeding\n // ============================================================================\n\n /**\n * Register an entity schema and seed mock data.\n * If the schema has seedData, those instances are used directly.\n * Otherwise, random mock data is generated with faker.\n */\n registerEntity(schema: EntitySchema, seedCount?: number): void {\n const normalized = schema.name.toLowerCase();\n this.schemas.set(normalized, schema);\n\n if (schema.seedData && schema.seedData.length > 0) {\n // Seed with actual pre-authored instances\n this.seedFromInstances(schema.name, schema.seedData);\n } else {\n const count = seedCount ?? this.config.defaultSeedCount ?? 6;\n this.seed(schema.name, schema.fields, count);\n }\n }\n\n /**\n * Seed an entity with pre-authored instance data.\n */\n seedFromInstances(entityName: string, instances: Record<string, unknown>[]): void {\n const store = this.getStore(entityName);\n\n if (this.config.debug) {\n console.log(`[MockPersistence] Seeding ${instances.length} ${entityName} from schema instances...`);\n }\n\n for (const instance of instances) {\n const id = (instance.id as string) || this.nextId(entityName);\n const now = new Date().toISOString();\n const item: Record<string, unknown> = {\n ...instance,\n id,\n createdAt: instance.createdAt as string || now,\n updatedAt: now,\n };\n store.set(id, item);\n }\n }\n\n /**\n * Seed an entity with mock data.\n */\n seed(entityName: string, fields: EntityField[], count: number): void {\n const store = this.getStore(entityName);\n const normalized = entityName.toLowerCase();\n\n if (this.config.debug) {\n console.log(`[MockPersistence] Seeding ${count} ${entityName}...`);\n }\n\n for (let i = 0; i < count; i++) {\n const item = this.generateMockItem(normalized, entityName, fields, i + 1);\n store.set(item.id as string, item);\n }\n }\n\n /**\n * Generate a single mock item based on field schemas.\n */\n private generateMockItem(\n normalizedName: string,\n entityName: string,\n fields: EntityField[],\n index: number\n ): Record<string, unknown> {\n const id = this.nextId(entityName);\n const now = new Date().toISOString();\n const item: Record<string, unknown> = {\n id,\n createdAt: faker.date.past({ years: 1 }).toISOString(),\n updatedAt: now,\n };\n\n for (const field of fields) {\n if (field.name === 'id' || field.name === 'createdAt' || field.name === 'updatedAt') {\n continue;\n }\n item[field.name] = this.generateFieldValue(entityName, field, index);\n }\n\n return item;\n }\n\n /**\n * Generate a mock value for a field based on its schema.\n */\n private generateFieldValue(entityName: string, field: EntityField, index: number): unknown {\n // Handle default values\n if (field.default !== undefined) {\n if (field.default === '@now') {\n return new Date().toISOString();\n }\n return field.default;\n }\n\n // Handle optional fields - 80% chance of having a value\n if (!field.required && Math.random() > 0.8) {\n return null;\n }\n\n const fieldType = field.type.toLowerCase();\n\n switch (fieldType) {\n case 'string':\n return this.generateStringValue(entityName, field, index);\n\n case 'number':\n return faker.number.int({ min: 0, max: 100 });\n\n case 'boolean':\n return faker.datatype.boolean();\n\n case 'date':\n case 'timestamp':\n case 'datetime':\n return this.generateDateValue(field);\n\n case 'enum':\n if (field.values && field.values.length > 0) {\n return faker.helpers.arrayElement(field.values);\n }\n return null;\n\n case 'relation':\n return null; // Relations need special handling\n\n case 'array':\n case 'object':\n return field.type === 'array' ? [] : {};\n\n default:\n // Treat unknown types as strings\n return this.generateStringValue(entityName, field, index);\n }\n }\n\n /**\n * Generate a string value based on field name heuristics.\n */\n private generateStringValue(entityName: string, field: EntityField, index: number): string {\n const name = field.name.toLowerCase();\n\n // If field has enum values, use them\n if (field.values && field.values.length > 0) {\n return faker.helpers.arrayElement(field.values);\n }\n\n // Specific fields - use faker for realistic data\n if (name.includes('email')) return faker.internet.email();\n if (name.includes('phone')) return faker.phone.number();\n if (name.includes('address')) return faker.location.streetAddress();\n if (name.includes('city')) return faker.location.city();\n if (name.includes('country')) return faker.location.country();\n if (name.includes('url') || name.includes('website')) return faker.internet.url();\n if (name.includes('avatar') || name.includes('image')) return faker.image.avatar();\n if (name.includes('color')) return faker.color.human();\n if (name.includes('uuid')) return faker.string.uuid();\n if (name.includes('description') || name.includes('bio')) return faker.lorem.paragraph();\n\n // Generic name/title/text fields - use entity-aware readable format\n const entityLabel = this.capitalizeFirst(entityName);\n const fieldLabel = this.capitalizeFirst(field.name);\n return `${entityLabel} ${fieldLabel} ${index}`;\n }\n\n /**\n * Generate a date value based on field name heuristics.\n */\n private generateDateValue(field: EntityField): string {\n const name = field.name.toLowerCase();\n\n let date: Date;\n if (name.includes('created') || name.includes('start') || name.includes('birth')) {\n date = faker.date.past({ years: 2 });\n } else if (name.includes('updated') || name.includes('modified')) {\n date = faker.date.recent({ days: 30 });\n } else if (name.includes('deadline') || name.includes('due') || name.includes('end') || name.includes('expires')) {\n date = faker.date.future({ years: 1 });\n } else {\n date = faker.date.anytime();\n }\n\n return date.toISOString();\n }\n\n private capitalizeFirst(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n\n // ============================================================================\n // PersistenceAdapter Implementation\n // ============================================================================\n\n async create(\n entityType: string,\n data: Record<string, unknown>\n ): Promise<{ id: string }> {\n const store = this.getStore(entityType);\n const id = this.nextId(entityType);\n const now = new Date().toISOString();\n\n const item = {\n ...data,\n id,\n createdAt: now,\n updatedAt: now,\n };\n\n store.set(id, item);\n return { id };\n }\n\n async update(\n entityType: string,\n id: string,\n data: Record<string, unknown>\n ): Promise<void> {\n const store = this.getStore(entityType);\n const existing = store.get(id);\n\n if (!existing) {\n throw new Error(`Entity ${entityType} with id ${id} not found`);\n }\n\n const updated = {\n ...existing,\n ...data,\n id, // Preserve original ID\n updatedAt: new Date().toISOString(),\n };\n\n store.set(id, updated);\n }\n\n async delete(entityType: string, id: string): Promise<void> {\n const store = this.getStore(entityType);\n if (!store.has(id)) {\n throw new Error(`Entity ${entityType} with id ${id} not found`);\n }\n store.delete(id);\n }\n\n async getById(\n entityType: string,\n id: string\n ): Promise<Record<string, unknown> | null> {\n const store = this.getStore(entityType);\n return store.get(id) ?? null;\n }\n\n async list(entityType: string): Promise<Array<Record<string, unknown>>> {\n const store = this.getStore(entityType);\n return Array.from(store.values());\n }\n\n // ============================================================================\n // Utilities\n // ============================================================================\n\n /**\n * Clear all data for an entity.\n */\n clear(entityName: string): void {\n const normalized = entityName.toLowerCase();\n this.stores.delete(normalized);\n this.idCounters.delete(normalized);\n }\n\n /**\n * Clear all data.\n */\n clearAll(): void {\n this.stores.clear();\n this.idCounters.clear();\n }\n\n /**\n * Get count of items for an entity.\n */\n count(entityName: string): number {\n const store = this.getStore(entityName);\n return store.size;\n }\n}\n\n/**\n * Create a MockPersistenceAdapter instance.\n */\nexport function createMockPersistence(config?: MockPersistenceConfig): MockPersistenceAdapter {\n return new MockPersistenceAdapter(config);\n}\n","/**\n * OrbitalServerRuntime - Dynamic Server-Side Orbital Execution\n *\n * This runtime takes an OrbitalSchema and dynamically:\n * 1. Registers all orbitals and their traits\n * 2. Creates Express routes for trait communication\n * 3. Executes state machines server-side\n * 4. Handles cross-orbital event propagation\n *\n * This is the \"interpreted\" mode - no compilation needed.\n * The compiler generates equivalent static code for production.\n *\n * @example\n * ```typescript\n * import { OrbitalServerRuntime } from '@kflow-builder/shared/runtime';\n * import express from 'express';\n *\n * const app = express();\n * const runtime = new OrbitalServerRuntime();\n *\n * // Register schema (can be loaded from file, API, etc.)\n * runtime.register(orbitalSchema);\n *\n * // Mount orbital routes\n * app.use('/api/orbitals', runtime.router());\n *\n * // Client can now:\n * // POST /api/orbitals/:orbital/events - Send event to orbital\n * // GET /api/orbitals/:orbital/state - Get current state\n * // GET /api/orbitals - List registered orbitals\n * ```\n *\n * @packageDocumentation\n */\n\nimport {\n Router,\n type Request,\n type Response,\n type NextFunction,\n} from \"express\";\nimport { EventBus } from \"./EventBus.js\";\nimport {\n StateMachineManager,\n processEvent,\n createInitialTraitState,\n} from \"./StateMachineCore.js\";\nimport { EffectExecutor } from \"./EffectExecutor.js\";\nimport {\n interpolateProps,\n createContextFromBindings,\n} from \"./BindingResolver.js\";\nimport { evaluateGuard } from \"@almadar/evaluator\";\nimport type {\n TraitDefinition,\n TraitState,\n EffectHandlers,\n BindingContext,\n EffectContext,\n Effect,\n} from \"./types.js\";\nimport { MockPersistenceAdapter } from \"./MockPersistenceAdapter.js\";\nimport {\n preprocessSchema,\n type PreprocessedSchema,\n type EntitySharingMap,\n type EventNamespaceMap,\n} from \"./UsesIntegration.js\";\nimport {\n type SchemaLoader,\n createUnifiedLoader,\n} from \"./loader/index.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Simplified OrbitalSchema for runtime registration\n * (Subset of full OrbitalSchema - just what's needed for execution)\n */\nexport interface RuntimeOrbitalSchema {\n name: string;\n version?: string;\n orbitals: RuntimeOrbital[];\n}\n\nexport interface RuntimeOrbital {\n name: string;\n entity: {\n name: string;\n fields?: Array<{ name: string; type: string }>;\n };\n traits: RuntimeTrait[];\n}\n\n/**\n * Tick definition for scheduled effects\n */\nexport interface RuntimeTraitTick {\n /** Unique name for this tick */\n name: string;\n /** Interval in milliseconds, or cron expression string */\n interval: number | string;\n /** Guard condition (S-expression) - tick only executes if guard passes */\n guard?: unknown;\n /** Effects to execute when tick fires */\n effects: Effect[];\n /** Filter to specific entity IDs (optional) */\n appliesTo?: string[];\n}\n\nexport interface RuntimeTrait {\n name: string;\n states: Array<{ name: string; isInitial?: boolean }>;\n transitions: Array<{\n from: string;\n to: string;\n event: string;\n guard?: unknown;\n effects?: Effect[];\n }>;\n listens?: Array<{\n event: string;\n triggers: string;\n payloadMapping?: Record<string, unknown>;\n }>;\n emits?: string[];\n /** Scheduled ticks for this trait */\n ticks?: RuntimeTraitTick[];\n}\n\n/**\n * Registered orbital with runtime state\n */\ninterface RegisteredOrbital {\n schema: RuntimeOrbital;\n manager: StateMachineManager;\n entityData: Map<string, Record<string, unknown>>; // entityId -> data\n}\n\n/**\n * Event sent from client to server\n */\nexport interface OrbitalEventRequest {\n event: string;\n payload?: Record<string, unknown>;\n entityId?: string;\n /** User context for @user bindings (from Firebase auth) */\n user?: {\n uid: string;\n email?: string;\n displayName?: string;\n [key: string]: unknown;\n };\n}\n\n/**\n * Response from event processing\n */\nexport interface OrbitalEventResponse {\n success: boolean;\n transitioned: boolean;\n states: Record<string, string>;\n emittedEvents: Array<{ event: string; payload?: unknown }>;\n /** Entity data fetched by `fetch` effects - keyed by entity type */\n data?: Record<string, Record<string, unknown> | Record<string, unknown>[]>;\n /** Client-side effects to execute (render-ui, navigate, notify) */\n clientEffects?: Array<unknown>;\n /** Results from server-side effects (persist, call-service, set) */\n effectResults?: EffectResult[];\n error?: string;\n}\n\n/**\n * Result of a server-side effect execution.\n * Closes the circuit by returning effect outcomes to the client.\n */\nexport interface EffectResult {\n /** Effect type that was executed */\n effect: 'persist' | 'call-service' | 'set';\n /** Action performed (e.g., 'create', 'update', 'delete' for persist) */\n action?: string;\n /** Entity type affected (for persist/set) */\n entityType?: string;\n /** Result data from the effect */\n data?: Record<string, unknown>;\n /** Whether the effect succeeded */\n success: boolean;\n /** Error message if failed */\n error?: string;\n}\n\n/**\n * Loader configuration for resolving `uses` imports\n */\nexport interface LoaderConfig {\n /** Base path for schema files */\n basePath: string;\n /** Standard library path (filesystem or URL) */\n stdLibPath?: string;\n /** Scoped package paths */\n scopedPaths?: Record<string, string>;\n /** Custom loader instance (overrides basePath/stdLibPath) */\n loader?: SchemaLoader;\n}\n\n/**\n * Runtime configuration\n */\nexport interface OrbitalServerRuntimeConfig {\n /** Enable debug logging */\n debug?: boolean;\n /** Custom effect handlers (for integrating with your data layer) */\n effectHandlers?: Partial<EffectHandlers>;\n /** Persistence adapter for entity data */\n persistence?: PersistenceAdapter;\n /**\n * Data mode:\n * - 'mock': Use faker-generated mock data (default for preview)\n * - 'real': Use actual persistence layer\n */\n mode?: 'mock' | 'real';\n /** Seed for deterministic mock data generation */\n mockSeed?: number;\n /** Number of mock records to generate per entity */\n mockSeedCount?: number;\n /**\n * Loader configuration for resolving `uses` imports.\n * Required when using `registerWithPreprocess` or `autoPreprocess`.\n */\n loaderConfig?: LoaderConfig;\n /**\n * Automatically preprocess schemas on register() to resolve `uses` imports.\n * Requires `loaderConfig` to be set.\n * Default: false\n */\n autoPreprocess?: boolean;\n /**\n * Apply event namespacing to imported traits.\n * Default: true\n */\n namespaceEvents?: boolean;\n}\n\n/**\n * Adapter for persisting entity data\n */\nexport interface PersistenceAdapter {\n create(\n entityType: string,\n data: Record<string, unknown>,\n ): Promise<{ id: string }>;\n update(\n entityType: string,\n id: string,\n data: Record<string, unknown>,\n ): Promise<void>;\n delete(entityType: string, id: string): Promise<void>;\n getById(\n entityType: string,\n id: string,\n ): Promise<Record<string, unknown> | null>;\n list(entityType: string): Promise<Array<Record<string, unknown>>>;\n}\n\n// ============================================================================\n// In-Memory Persistence (Default)\n// ============================================================================\n\n/**\n * Simple in-memory persistence for development/testing\n */\nclass InMemoryPersistence implements PersistenceAdapter {\n private data = new Map<string, Map<string, Record<string, unknown>>>();\n private idCounter = 0;\n\n async create(\n entityType: string,\n data: Record<string, unknown>,\n ): Promise<{ id: string }> {\n // Use provided ID if it exists, otherwise generate one\n const id = (data.id as string) || `${entityType}-${++this.idCounter}`;\n if (!this.data.has(entityType)) {\n this.data.set(entityType, new Map());\n }\n this.data.get(entityType)!.set(id, { ...data, id });\n return { id };\n }\n\n async update(\n entityType: string,\n id: string,\n data: Record<string, unknown>,\n ): Promise<void> {\n const collection = this.data.get(entityType);\n if (collection?.has(id)) {\n const existing = collection.get(id)!;\n collection.set(id, { ...existing, ...data });\n }\n }\n\n async delete(entityType: string, id: string): Promise<void> {\n this.data.get(entityType)?.delete(id);\n }\n\n async getById(\n entityType: string,\n id: string,\n ): Promise<Record<string, unknown> | null> {\n return this.data.get(entityType)?.get(id) || null;\n }\n\n async list(entityType: string): Promise<Array<Record<string, unknown>>> {\n const collection = this.data.get(entityType);\n return collection ? Array.from(collection.values()) : [];\n }\n}\n\n// ============================================================================\n// OrbitalServerRuntime\n// ============================================================================\n\n/**\n * Dynamic server-side orbital execution runtime\n */\n/**\n * Internal tick binding for tracking active ticks\n */\ninterface TickBinding {\n orbitalName: string;\n traitName: string;\n tick: RuntimeTraitTick;\n timerId: ReturnType<typeof setInterval>;\n}\n\nexport class OrbitalServerRuntime {\n private orbitals = new Map<string, RegisteredOrbital>();\n private eventBus: EventBus;\n private config: OrbitalServerRuntimeConfig;\n private persistence: PersistenceAdapter;\n private listenerCleanups: Array<() => void> = [];\n private tickBindings: TickBinding[] = [];\n private loader: SchemaLoader | null = null;\n private preprocessedCache = new Map<string, PreprocessedSchema>();\n private entitySharingMap: EntitySharingMap = {};\n private eventNamespaceMap: EventNamespaceMap = {};\n\n constructor(config: OrbitalServerRuntimeConfig = {}) {\n this.config = {\n mode: 'mock', // Default to mock mode for preview\n autoPreprocess: false,\n namespaceEvents: true,\n ...config,\n };\n this.eventBus = new EventBus();\n\n // Initialize loader if config provided\n if (config.loaderConfig) {\n this.loader = config.loaderConfig.loader ?? createUnifiedLoader({\n basePath: config.loaderConfig.basePath,\n stdLibPath: config.loaderConfig.stdLibPath,\n scopedPaths: config.loaderConfig.scopedPaths,\n });\n }\n\n // Use MockPersistenceAdapter for mock mode, otherwise use provided or InMemoryPersistence\n if (this.config.mode === 'mock' && !config.persistence) {\n this.persistence = new MockPersistenceAdapter({\n seed: config.mockSeed,\n defaultSeedCount: config.mockSeedCount ?? 6,\n debug: config.debug,\n });\n if (config.debug) {\n console.log('[OrbitalRuntime] Using mock persistence with faker data');\n }\n } else {\n this.persistence = config.persistence || new InMemoryPersistence();\n }\n }\n\n // ==========================================================================\n // Schema Registration\n // ==========================================================================\n\n /**\n * Register an OrbitalSchema for execution.\n *\n * If `autoPreprocess` is enabled in config and schema has `uses` declarations,\n * it will be preprocessed first to resolve imports.\n *\n * For explicit preprocessing control, use `registerWithPreprocess()`.\n */\n async register(schema: RuntimeOrbitalSchema): Promise<void> {\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Registering schema: ${schema.name}`);\n }\n\n // Register all orbitals (await to ensure instance seeding completes)\n for (const orbital of schema.orbitals) {\n await this.registerOrbitalAsync(orbital);\n }\n\n // Set up cross-orbital event listeners\n this.setupEventListeners();\n\n // Set up scheduled ticks\n this.setupTicks();\n }\n\n /**\n * Register an OrbitalSchema synchronously (for backward compatibility).\n * Note: This version doesn't wait for instance seeding to complete.\n * Use async register() for guaranteed instance seeding.\n */\n registerSync(schema: RuntimeOrbitalSchema): void {\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Registering schema (sync): ${schema.name}`);\n }\n\n for (const orbital of schema.orbitals) {\n this.registerOrbital(orbital);\n }\n\n // Set up cross-orbital event listeners\n this.setupEventListeners();\n\n // Set up scheduled ticks\n this.setupTicks();\n }\n\n /**\n * Register an OrbitalSchema with preprocessing to resolve `uses` imports.\n *\n * This method:\n * 1. Loads all external orbitals referenced in `uses` declarations\n * 2. Expands entity/trait/page references to inline definitions\n * 3. Builds entity sharing and event namespace maps\n * 4. Caches the preprocessed result\n * 5. Registers the resolved schema\n *\n * @param schema - Schema with potential `uses` declarations\n * @param options - Optional preprocessing options\n * @returns Preprocessing result with entity sharing info\n *\n * @example\n * ```typescript\n * const runtime = new OrbitalServerRuntime({\n * loaderConfig: {\n * basePath: '/schemas',\n * stdLibPath: '/std',\n * },\n * });\n *\n * const result = await runtime.registerWithPreprocess(schema);\n * if (result.success) {\n * console.log('Registered with', Object.keys(result.entitySharing).length, 'orbitals');\n * }\n * ```\n */\n async registerWithPreprocess(\n schema: RuntimeOrbitalSchema,\n options?: { sourcePath?: string }\n ): Promise<{\n success: boolean;\n entitySharing?: EntitySharingMap;\n eventNamespaces?: EventNamespaceMap;\n warnings?: string[];\n errors?: string[];\n }> {\n // Check if preprocessing is possible\n if (!this.loader && !this.config.loaderConfig) {\n return {\n success: false,\n errors: ['Loader not configured. Set loaderConfig in OrbitalServerRuntimeConfig.'],\n };\n }\n\n // Ensure loader is initialized\n if (!this.loader && this.config.loaderConfig) {\n this.loader = this.config.loaderConfig.loader ?? createUnifiedLoader({\n basePath: this.config.loaderConfig.basePath,\n stdLibPath: this.config.loaderConfig.stdLibPath,\n scopedPaths: this.config.loaderConfig.scopedPaths,\n });\n }\n\n // Check cache\n const cacheKey = `${schema.name}:${schema.version || '1.0.0'}`;\n const cached = this.preprocessedCache.get(cacheKey);\n if (cached) {\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Using cached preprocessed schema: ${schema.name}`);\n }\n this.register(cached.schema as unknown as RuntimeOrbitalSchema);\n this.entitySharingMap = { ...this.entitySharingMap, ...cached.entitySharing };\n this.eventNamespaceMap = { ...this.eventNamespaceMap, ...cached.eventNamespaces };\n return {\n success: true,\n entitySharing: cached.entitySharing,\n eventNamespaces: cached.eventNamespaces,\n warnings: cached.warnings,\n };\n }\n\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Preprocessing schema: ${schema.name}`);\n }\n\n // Preprocess schema\n const result = await preprocessSchema(schema as unknown as import(\"@almadar/core\").OrbitalSchema, {\n basePath: this.config.loaderConfig?.basePath || '.',\n stdLibPath: this.config.loaderConfig?.stdLibPath,\n scopedPaths: this.config.loaderConfig?.scopedPaths,\n loader: this.loader!,\n namespaceEvents: this.config.namespaceEvents,\n });\n\n if (!result.success) {\n return {\n success: false,\n errors: result.errors,\n };\n }\n\n // Cache the result\n this.preprocessedCache.set(cacheKey, result.data);\n\n // Store sharing maps\n this.entitySharingMap = { ...this.entitySharingMap, ...result.data.entitySharing };\n this.eventNamespaceMap = { ...this.eventNamespaceMap, ...result.data.eventNamespaces };\n\n // Register the preprocessed schema\n this.register(result.data.schema as unknown as RuntimeOrbitalSchema);\n\n return {\n success: true,\n entitySharing: result.data.entitySharing,\n eventNamespaces: result.data.eventNamespaces,\n warnings: result.data.warnings,\n };\n }\n\n /**\n * Get entity sharing information for registered orbitals.\n * Useful for determining entity isolation and collection names.\n */\n getEntitySharing(): EntitySharingMap {\n return { ...this.entitySharingMap };\n }\n\n /**\n * Get event namespace mapping for registered orbitals.\n * Useful for debugging cross-orbital event routing.\n */\n getEventNamespaces(): EventNamespaceMap {\n return { ...this.eventNamespaceMap };\n }\n\n /**\n * Clear the preprocessing cache.\n */\n clearPreprocessCache(): void {\n this.preprocessedCache.clear();\n }\n\n /**\n * Register a single orbital\n */\n private async registerOrbitalAsync(orbital: RuntimeOrbital): Promise<void> {\n // Convert traits to TraitDefinition - handle both flat and stateMachine structures\n const traitDefs: TraitDefinition[] = (orbital.traits || []).map((t) => {\n // Support both: t.states (flat) and t.stateMachine.states (OrbitalSchema structure)\n const stateMachine = (t as { stateMachine?: { states?: unknown[]; transitions?: unknown[] } }).stateMachine;\n const states = t.states || stateMachine?.states || [];\n const transitions = t.transitions || stateMachine?.transitions || [];\n\n return {\n name: t.name,\n states: states as TraitDefinition['states'],\n transitions: transitions as TraitDefinition['transitions'],\n listens: t.listens,\n };\n });\n\n const manager = new StateMachineManager(traitDefs);\n\n this.orbitals.set(orbital.name, {\n schema: orbital,\n manager,\n entityData: new Map(),\n });\n\n const entity = orbital.entity;\n \n // Seed entity instances from schema if they exist\n if (entity?.name && (entity as any).instances && Array.isArray((entity as any).instances)) {\n const instances = (entity as any).instances as Array<Record<string, unknown>>;\n if (instances.length > 0) {\n console.log(`[OrbitalRuntime] Seeding ${instances.length} instances for ${entity.name} from schema`);\n \n // Seed each instance (await to ensure they're created)\n const results = await Promise.all(\n instances.map(async (instance) => {\n try {\n const result = await this.persistence.create(entity.name, instance);\n console.log(`[OrbitalRuntime] Seeded instance: ${instance.id || 'no-id'}`);\n return result;\n } catch (err) {\n console.error(`[OrbitalRuntime] Failed to seed instance ${instance.id}:`, err);\n return null;\n }\n })\n );\n \n const successCount = results.filter(r => r !== null).length;\n console.log(`[OrbitalRuntime] Seeded ${successCount}/${instances.length} ${entity.name} instances from schema`);\n }\n } else if (this.config.mode === 'mock' && this.persistence instanceof MockPersistenceAdapter) {\n // Fall back to mock data generation if no instances defined\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] No instances in schema, generating mock data for ${entity?.name}`);\n }\n if (entity?.name && entity.fields) {\n const fields = entity.fields.map((f: { name: string; type: string; required?: boolean; values?: string[]; default?: unknown }) => ({\n name: f.name,\n type: f.type,\n required: f.required,\n values: f.values,\n default: f.default,\n }));\n this.persistence.registerEntity({ name: entity.name, fields });\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Seeded mock data for entity: ${entity.name}, count: ${this.persistence.count(entity.name)}`);\n }\n }\n }\n\n if (this.config.debug) {\n console.log(\n `[OrbitalRuntime] Registered orbital: ${orbital.name} with ${(orbital.traits || []).length} trait(s)`,\n );\n }\n }\n\n /**\n * Register a single orbital (sync wrapper for backward compatibility)\n */\n private registerOrbital(orbital: RuntimeOrbital): void {\n // Create a synchronous version by using a promise that we don't await\n // For truly async registration, use the async register() method\n this.registerOrbitalAsync(orbital).catch((err) => {\n console.error(`[OrbitalRuntime] Failed to register orbital:`, err);\n });\n }\n\n /**\n * Set up event listeners for cross-orbital communication\n */\n private setupEventListeners(): void {\n // Clean up existing listeners\n for (const cleanup of this.listenerCleanups) {\n cleanup();\n }\n this.listenerCleanups = [];\n\n // For each orbital's traits with `listens`\n for (const [orbitalName, registered] of this.orbitals) {\n for (const trait of registered.schema.traits || []) {\n if (!trait.listens) continue;\n\n for (const listener of trait.listens) {\n const cleanup = this.eventBus.on(listener.event, async (event) => {\n if (this.config.debug) {\n console.log(\n `[OrbitalRuntime] ${orbitalName}.${trait.name} received: ${listener.event}`,\n );\n }\n\n // Apply payload mapping\n let mappedPayload = event.payload;\n if (listener.payloadMapping && event.payload) {\n mappedPayload = {};\n for (const [key, expr] of Object.entries(\n listener.payloadMapping,\n )) {\n if (typeof expr === \"string\" && expr.startsWith(\"@payload.\")) {\n const field = expr.slice(\"@payload.\".length);\n (mappedPayload as Record<string, unknown>)[key] = (\n event.payload as Record<string, unknown>\n )[field];\n } else {\n (mappedPayload as Record<string, unknown>)[key] = expr;\n }\n }\n }\n\n // Trigger the mapped event\n await this.processOrbitalEvent(orbitalName, {\n event: listener.triggers,\n payload: mappedPayload as Record<string, unknown>,\n });\n });\n\n this.listenerCleanups.push(cleanup);\n }\n }\n }\n }\n\n /**\n * Set up scheduled ticks for all traits\n */\n private setupTicks(): void {\n // Clean up existing ticks\n this.cleanupTicks();\n\n // For each orbital's traits with `ticks`\n for (const [orbitalName, registered] of this.orbitals) {\n for (const trait of registered.schema.traits || []) {\n if (!trait.ticks || trait.ticks.length === 0) continue;\n\n for (const tick of trait.ticks) {\n this.registerTick(orbitalName, trait.name, tick, registered);\n }\n }\n }\n\n if (this.config.debug && this.tickBindings.length > 0) {\n console.log(\n `[OrbitalRuntime] Registered ${this.tickBindings.length} tick(s)`,\n );\n }\n }\n\n /**\n * Register a single tick\n */\n private registerTick(\n orbitalName: string,\n traitName: string,\n tick: RuntimeTraitTick,\n registered: RegisteredOrbital,\n ): void {\n // Determine interval in milliseconds\n let intervalMs: number;\n if (typeof tick.interval === \"number\") {\n intervalMs = tick.interval;\n } else if (typeof tick.interval === \"string\") {\n // Parse cron-like interval strings (e.g., '5s', '1m', '1h')\n intervalMs = this.parseIntervalString(tick.interval);\n } else {\n intervalMs = 1000; // Default to 1 second\n }\n\n if (this.config.debug) {\n console.log(\n `[OrbitalRuntime] Registering tick: ${orbitalName}.${traitName}.${tick.name} (${intervalMs}ms)`,\n );\n }\n\n const timerId = setInterval(async () => {\n await this.executeTick(orbitalName, traitName, tick, registered);\n }, intervalMs);\n\n this.tickBindings.push({\n orbitalName,\n traitName,\n tick,\n timerId,\n });\n }\n\n /**\n * Parse interval string to milliseconds\n * Supports: '5s', '1m', '1h', '30000' (ms)\n */\n private parseIntervalString(interval: string): number {\n const match = interval.match(/^(\\d+)(ms|s|m|h)?$/);\n if (!match) {\n console.warn(\n `[OrbitalRuntime] Invalid interval format: ${interval}, defaulting to 1000ms`,\n );\n return 1000;\n }\n\n const value = parseInt(match[1], 10);\n const unit = match[2] || \"ms\";\n\n switch (unit) {\n case \"ms\":\n return value;\n case \"s\":\n return value * 1000;\n case \"m\":\n return value * 60 * 1000;\n case \"h\":\n return value * 60 * 60 * 1000;\n default:\n return value;\n }\n }\n\n /**\n * Execute a tick for all applicable entities\n */\n private async executeTick(\n orbitalName: string,\n traitName: string,\n tick: RuntimeTraitTick,\n registered: RegisteredOrbital,\n ): Promise<void> {\n const entityType = registered.schema.entity.name;\n const emittedEvents: Array<{ event: string; payload?: unknown }> = [];\n\n try {\n // Get all entities (or filtered by appliesTo)\n let entities = await this.persistence.list(entityType);\n\n if (tick.appliesTo && tick.appliesTo.length > 0) {\n const appliesToSet = new Set(tick.appliesTo);\n entities = entities.filter((e) => appliesToSet.has(e.id as string));\n }\n\n if (this.config.debug && entities.length > 0) {\n console.log(\n `[OrbitalRuntime] Tick ${orbitalName}.${traitName}.${tick.name}: processing ${entities.length} entities`,\n );\n }\n\n for (const entity of entities) {\n // Evaluate guard if present\n if (tick.guard) {\n try {\n const ctx = createContextFromBindings({\n entity,\n payload: {},\n state:\n registered.manager.getState(traitName)?.currentState ||\n \"unknown\",\n });\n\n const guardPasses = evaluateGuard(\n tick.guard as Parameters<typeof evaluateGuard>[0],\n ctx,\n );\n\n if (!guardPasses) {\n if (this.config.debug) {\n console.log(\n `[OrbitalRuntime] Tick ${tick.name}: guard failed for entity ${entity.id}`,\n );\n }\n continue;\n }\n } catch (error) {\n console.error(\n `[OrbitalRuntime] Tick ${tick.name}: guard evaluation error for entity ${entity.id}:`,\n error,\n );\n continue;\n }\n }\n\n // Execute effects for this entity\n if (tick.effects && tick.effects.length > 0) {\n const fetchedData: Record<string, Record<string, unknown> | Record<string, unknown>[]> = {};\n const clientEffects: Array<unknown> = [];\n const tickEffectResults: EffectResult[] = [];\n await this.executeEffects(\n registered,\n traitName,\n tick.effects,\n {}, // No payload for ticks\n entity,\n entity.id as string,\n emittedEvents,\n fetchedData,\n clientEffects,\n tickEffectResults,\n );\n\n if (this.config.debug) {\n console.log(\n `[OrbitalRuntime] Tick ${tick.name}: executed effects for entity ${entity.id}`,\n );\n }\n }\n }\n } catch (error) {\n console.error(\n `[OrbitalRuntime] Tick ${tick.name} execution error:`,\n error,\n );\n }\n }\n\n /**\n * Clean up all active ticks\n */\n private cleanupTicks(): void {\n for (const binding of this.tickBindings) {\n clearInterval(binding.timerId);\n }\n this.tickBindings = [];\n }\n\n /**\n * Unregister all orbitals and clean up\n */\n unregisterAll(): void {\n // Clean up ticks\n this.cleanupTicks();\n\n // Clean up event listeners\n for (const cleanup of this.listenerCleanups) {\n cleanup();\n }\n this.listenerCleanups = [];\n\n this.orbitals.clear();\n this.eventBus.clear();\n }\n\n // ==========================================================================\n // Event Processing\n // ==========================================================================\n\n /**\n * Process an event for an orbital\n */\n async processOrbitalEvent(\n orbitalName: string,\n request: OrbitalEventRequest,\n ): Promise<OrbitalEventResponse> {\n const registered = this.orbitals.get(orbitalName);\n if (!registered) {\n return {\n success: false,\n transitioned: false,\n states: {},\n emittedEvents: [],\n error: `Orbital not found: ${orbitalName}`,\n };\n }\n\n const { event, payload, entityId, user } = request;\n const emittedEvents: Array<{ event: string; payload?: unknown }> = [];\n // Collect data fetched by `fetch` effects\n const fetchedData: Record<string, Record<string, unknown> | Record<string, unknown>[]> = {};\n // Collect client-side effects (render-ui, navigate, notify)\n const clientEffects: Array<unknown> = [];\n // Collect server-side effect results (persist, call-service, set)\n const effectResults: EffectResult[] = [];\n\n // Extract active traits filter from payload (sent by client for page-specific execution)\n const activeTraits = (payload as Record<string, unknown> | undefined)?._activeTraits as string[] | undefined;\n // Remove _activeTraits from payload before processing (internal use only)\n const cleanPayload = payload ? { ...payload } : undefined;\n if (cleanPayload) {\n delete (cleanPayload as Record<string, unknown>)._activeTraits;\n }\n\n // Get entity data if entityId provided\n let entityData: Record<string, unknown> = {};\n if (entityId) {\n const stored = await this.persistence.getById(\n registered.schema.entity.name,\n entityId,\n );\n if (stored) {\n entityData = stored;\n }\n }\n\n // Process event through state machine\n const results = registered.manager.sendEvent(event, cleanPayload, entityData);\n\n // Filter results to only active traits (if specified)\n const filteredResults = activeTraits && activeTraits.length > 0\n ? results.filter(({ traitName }) => activeTraits.includes(traitName))\n : results;\n\n if (this.config.debug && activeTraits) {\n console.log(`[OrbitalRuntime] Filtering traits: ${results.length} total, ${filteredResults.length} active (${activeTraits.join(', ')})`);\n }\n\n // Execute effects only for active traits\n for (const { traitName, result } of filteredResults) {\n if (result.effects.length > 0) {\n await this.executeEffects(\n registered,\n traitName,\n result.effects as Effect[],\n cleanPayload,\n entityData,\n entityId,\n emittedEvents,\n fetchedData,\n clientEffects,\n effectResults,\n user,\n );\n }\n }\n\n // Build current states\n const states: Record<string, string> = {};\n for (const [name, state] of registered.manager.getAllStates()) {\n states[name] = state.currentState;\n }\n\n const response: OrbitalEventResponse = {\n success: true,\n transitioned: results.length > 0,\n states,\n emittedEvents,\n };\n\n // Include fetched data if any\n if (Object.keys(fetchedData).length > 0) {\n response.data = fetchedData;\n }\n\n // Include client effects if any\n if (clientEffects.length > 0) {\n response.clientEffects = clientEffects;\n }\n\n // Include server effect results if any\n if (effectResults.length > 0) {\n response.effectResults = effectResults;\n }\n\n return response;\n }\n\n /**\n * Execute effects from a transition\n */\n private async executeEffects(\n registered: RegisteredOrbital,\n traitName: string,\n effects: Effect[],\n payload: Record<string, unknown> | undefined,\n entityData: Record<string, unknown>,\n entityId: string | undefined,\n emittedEvents: Array<{ event: string; payload?: unknown }>,\n fetchedData: Record<string, Record<string, unknown> | Record<string, unknown>[]>,\n clientEffects: Array<unknown>,\n effectResults: EffectResult[],\n user?: OrbitalEventRequest[\"user\"],\n ): Promise<void> {\n const entityType = registered.schema.entity.name;\n\n const handlers: EffectHandlers = {\n emit: (event, eventPayload) => {\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Emitting: ${event}`, eventPayload);\n }\n this.eventBus.emit(event, eventPayload);\n emittedEvents.push({ event, payload: eventPayload });\n },\n\n set: async (targetId, field, value) => {\n const id = targetId || entityId;\n if (id) {\n try {\n await this.persistence.update(entityType, id, { [field]: value });\n effectResults.push({\n effect: 'set',\n entityType,\n data: { id, field, value },\n success: true,\n });\n } catch (err) {\n effectResults.push({\n effect: 'set',\n entityType,\n data: { id, field, value },\n success: false,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n }\n },\n\n persist: async (action, targetEntityType, data) => {\n const type = targetEntityType || entityType;\n let resultData: Record<string, unknown> | undefined;\n\n try {\n switch (action) {\n case \"create\": {\n const { id } = await this.persistence.create(type, data || {});\n resultData = { id, ...(data || {}) };\n break;\n }\n case \"update\":\n if (data?.id || entityId) {\n const updateId = (data?.id as string) || entityId!;\n await this.persistence.update(type, updateId, data || {});\n // Return the updated entity\n const updated = await this.persistence.getById(type, updateId);\n resultData = updated || { id: updateId, ...(data || {}) };\n }\n break;\n case \"delete\":\n if (data?.id || entityId) {\n const deleteId = (data?.id as string) || entityId!;\n await this.persistence.delete(type, deleteId);\n resultData = { id: deleteId, deleted: true };\n }\n break;\n }\n\n effectResults.push({\n effect: 'persist',\n action,\n entityType: type,\n data: resultData,\n success: true,\n });\n } catch (err) {\n effectResults.push({\n effect: 'persist',\n action,\n entityType: type,\n success: false,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n },\n\n callService: async (service, action, params) => {\n try {\n let result = null;\n // Custom handlers can override this\n if (this.config.effectHandlers?.callService) {\n result = await this.config.effectHandlers.callService(\n service,\n action,\n params,\n );\n } else {\n console.warn(\n `[OrbitalRuntime] call-service not configured: ${service}.${action}`,\n );\n }\n\n effectResults.push({\n effect: 'call-service',\n action: `${service}.${action}`,\n data: result as Record<string, unknown> | undefined,\n success: true,\n });\n\n return result;\n } catch (err) {\n effectResults.push({\n effect: 'call-service',\n action: `${service}.${action}`,\n success: false,\n error: err instanceof Error ? err.message : String(err),\n });\n return null;\n }\n },\n\n fetch: async (fetchEntityType, options) => {\n try {\n let result: Record<string, unknown> | Record<string, unknown>[] | null = null;\n\n if (options?.id) {\n // Single entity fetch\n const entity = await this.persistence.getById(fetchEntityType, options.id);\n if (entity) {\n // Populate relations if include specified\n if (options?.include && options.include.length > 0) {\n await this.populateRelations([entity], fetchEntityType, options.include);\n }\n // Always store as array for consistent access via FetchedDataContext\n fetchedData[fetchEntityType] = [entity];\n result = entity;\n }\n } else {\n // Collection fetch\n let entities = await this.persistence.list(fetchEntityType);\n\n // Apply filter if provided (basic implementation - can be extended)\n // TODO: Implement proper filter evaluation using evaluateGuard\n\n // Apply pagination\n if (options?.offset && options.offset > 0) {\n entities = entities.slice(options.offset);\n }\n if (options?.limit && options.limit > 0) {\n entities = entities.slice(0, options.limit);\n }\n\n // Populate relations if include specified\n if (options?.include && options.include.length > 0) {\n await this.populateRelations(entities, fetchEntityType, options.include);\n }\n\n fetchedData[fetchEntityType] = entities;\n result = entities;\n }\n\n return result;\n } catch (error) {\n console.error(`[OrbitalRuntime] Fetch error for ${fetchEntityType}:`, error);\n return null;\n }\n },\n\n // Client-side effects - collect for forwarding to client\n renderUI: (slot, pattern, props, priority) => {\n clientEffects.push(['render-ui', slot, pattern, props, priority]);\n },\n navigate: (path, params) => {\n clientEffects.push(['navigate', path, params]);\n },\n\n notify: (message, type) => {\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Notification (${type}): ${message}`);\n }\n // Forward notify to client as a client effect\n clientEffects.push(['notify', message, { type }]);\n },\n\n log: (message, level) => {\n const logFn =\n level === \"error\"\n ? console.error\n : level === \"warn\"\n ? console.warn\n : console.log;\n logFn(`[OrbitalRuntime] ${message}`);\n },\n\n // Allow custom handlers to override\n ...this.config.effectHandlers,\n };\n\n const state = registered.manager.getState(traitName);\n const bindings: BindingContext = {\n entity: entityData,\n payload,\n state: state?.currentState || \"unknown\",\n user, // @user bindings from Firebase auth\n };\n\n const context: EffectContext = {\n traitName,\n state: state?.currentState || \"unknown\",\n transition: \"unknown\",\n entityId,\n };\n\n const executor = new EffectExecutor({\n handlers,\n bindings,\n context,\n debug: this.config.debug,\n });\n\n await executor.executeAll(effects);\n }\n\n // ==========================================================================\n // Relation Population\n // ==========================================================================\n\n /**\n * Populate relation fields on entities\n *\n * For each field in `include`, find the relation field configuration and\n * fetch the related entity, attaching it to the parent entity.\n *\n * @param entities - Entities to populate\n * @param entityType - Entity type name\n * @param include - Relation field names to populate\n */\n private async populateRelations(\n entities: Record<string, unknown>[],\n entityType: string,\n include: string[],\n ): Promise<void> {\n // Find the orbital that owns this entity type\n let entityFields: Array<{ name: string; type: string; relation?: { entity: string; cardinality?: string } }> | undefined;\n\n for (const [, registered] of this.orbitals) {\n if (registered.schema.entity.name === entityType) {\n entityFields = registered.schema.entity.fields;\n break;\n }\n }\n\n if (!entityFields) {\n if (this.config.debug) {\n console.warn(`[OrbitalRuntime] No entity definition found for ${entityType}`);\n }\n return;\n }\n\n // Process each include field\n for (const includeField of include) {\n // Find the relation field (check both \"fieldName\" and \"fieldNameId\" patterns)\n const relationField = entityFields.find(f => {\n if (f.type !== 'relation') return false;\n // Match \"company\" against \"company\" or \"companyId\"\n return f.name === includeField ||\n f.name === `${includeField}Id` ||\n f.name.replace(/Id$/, '') === includeField;\n });\n\n if (!relationField?.relation?.entity) {\n if (this.config.debug) {\n console.warn(`[OrbitalRuntime] No relation field found for '${includeField}' on ${entityType}`);\n }\n continue;\n }\n\n const foreignKeyField = relationField.name;\n const relatedEntityType = relationField.relation.entity;\n const cardinality = relationField.relation.cardinality || 'one';\n\n // Collect all foreign key IDs to batch fetch\n const foreignKeyIds = new Set<string>();\n for (const entity of entities) {\n const fkValue = entity[foreignKeyField];\n if (fkValue && typeof fkValue === 'string') {\n foreignKeyIds.add(fkValue);\n }\n }\n\n if (foreignKeyIds.size === 0) continue;\n\n // Fetch all related entities (ideally this would be a batch query)\n const relatedEntities = new Map<string, Record<string, unknown>>();\n for (const fkId of foreignKeyIds) {\n try {\n const related = await this.persistence.getById(relatedEntityType, fkId);\n if (related) {\n relatedEntities.set(fkId, related);\n }\n } catch (error) {\n if (this.config.debug) {\n console.error(`[OrbitalRuntime] Error fetching related ${relatedEntityType}:`, error);\n }\n }\n }\n\n // Attach related entities to parent entities\n // Use the base name without \"Id\" suffix for the populated field\n const populatedFieldName = includeField.endsWith('Id')\n ? includeField.slice(0, -2)\n : includeField;\n\n for (const entity of entities) {\n const fkValue = entity[foreignKeyField] as string;\n if (fkValue && relatedEntities.has(fkValue)) {\n if (cardinality === 'one') {\n entity[populatedFieldName] = relatedEntities.get(fkValue);\n } else {\n // For many relations, we'd need a different approach\n // (reverse lookup from the related entity's foreign key)\n // For now, just set to array with single item\n entity[populatedFieldName] = [relatedEntities.get(fkValue)];\n }\n }\n }\n\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Populated '${populatedFieldName}' on ${entities.length} ${entityType} entities`);\n }\n }\n }\n\n // ==========================================================================\n // Express Router\n // ==========================================================================\n\n /**\n * Create Express router for orbital API endpoints\n *\n * All data access goes through trait events with guards.\n * No direct CRUD routes - use events with `fetch` effects.\n *\n * Routes:\n * - GET / - List registered orbitals\n * - GET /:orbital - Get orbital info and current states\n * - POST /:orbital/events - Send event to orbital (includes data from `fetch` effects)\n */\n router(): Router {\n const router = Router();\n\n // List orbitals\n router.get(\"/\", (_req: Request, res: Response) => {\n const orbitals = Array.from(this.orbitals.entries()).map(\n ([name, reg]) => ({\n name,\n entity: reg.schema.entity?.name,\n traits: (reg.schema.traits || []).map((t) => t.name),\n }),\n );\n res.json({ success: true, orbitals });\n });\n\n // Get orbital info\n router.get(\"/:orbital\", (req: Request, res: Response) => {\n const orbitalName = req.params.orbital as string;\n const registered = this.orbitals.get(orbitalName);\n if (!registered) {\n res.status(404).json({ success: false, error: \"Orbital not found\" });\n return;\n }\n\n const states: Record<string, string> = {};\n for (const [name, state] of registered.manager.getAllStates()) {\n states[name] = state.currentState;\n }\n\n res.json({\n success: true,\n orbital: {\n name: orbitalName,\n entity: registered.schema.entity,\n traits: (registered.schema.traits || []).map((t) => ({\n name: t.name,\n currentState: states[t.name],\n states: (t.states || []).map((s) => s.name),\n events: [...new Set((t.transitions || []).map((tr) => tr.event))],\n })),\n },\n });\n });\n\n // Send event to orbital - this is the ONLY data access point\n // All reads go through `fetch` effects with guard enforcement\n // All writes go through `persist` effects with guard enforcement\n router.post(\n \"/:orbital/events\",\n async (req: Request, res: Response, next: NextFunction) => {\n try {\n const orbitalName = req.params.orbital as string;\n // Extract user from request (set by authenticateFirebase middleware)\n const firebaseUser = (req as Request & { firebaseUser?: Record<string, unknown> }).firebaseUser;\n const user = firebaseUser ? {\n uid: firebaseUser.uid as string,\n email: firebaseUser.email as string | undefined,\n displayName: firebaseUser.name as string | undefined,\n ...firebaseUser,\n } : undefined;\n\n const result = await this.processOrbitalEvent(orbitalName, {\n ...req.body,\n user,\n });\n res.json(result);\n } catch (error) {\n next(error);\n }\n },\n );\n\n // No direct CRUD routes - all data access goes through events\n // This ensures guards are always evaluated for both reads and writes\n\n return router;\n }\n\n // ==========================================================================\n // Direct API (for programmatic use)\n // ==========================================================================\n\n /**\n * Get the event bus for manual event emission\n */\n getEventBus(): EventBus {\n return this.eventBus;\n }\n\n /**\n * Get state for a specific orbital/trait\n */\n getState(\n orbitalName: string,\n traitName?: string,\n ): TraitState | Record<string, TraitState> | undefined {\n const registered = this.orbitals.get(orbitalName);\n if (!registered) return undefined;\n\n if (traitName) {\n return registered.manager.getState(traitName);\n }\n\n // Return all states for the orbital\n const states: Record<string, TraitState> = {};\n for (const [name, state] of registered.manager.getAllStates()) {\n states[name] = state;\n }\n return states;\n }\n\n /**\n * List registered orbitals\n */\n listOrbitals(): string[] {\n return Array.from(this.orbitals.keys());\n }\n\n /**\n * Check if an orbital is registered\n */\n hasOrbital(name: string): boolean {\n return this.orbitals.has(name);\n }\n\n /**\n * Get information about active ticks\n */\n getActiveTicks(): Array<{\n orbital: string;\n trait: string;\n tick: string;\n interval: number | string;\n hasGuard: boolean;\n }> {\n return this.tickBindings.map((binding) => ({\n orbital: binding.orbitalName,\n trait: binding.traitName,\n tick: binding.tick.name,\n interval: binding.tick.interval,\n hasGuard: !!binding.tick.guard,\n }));\n }\n}\n\n/**\n * Factory function to create a runtime instance\n */\nexport function createOrbitalServerRuntime(\n config?: OrbitalServerRuntimeConfig,\n): OrbitalServerRuntime {\n return new OrbitalServerRuntime(config);\n}\n"]}
@@ -1801,7 +1801,7 @@ async function preprocessSchema(schema, options) {
1801
1801
  // Resolved entity (always inline now)
1802
1802
  entity: resolvedOrbital.entity,
1803
1803
  // Resolved traits (inline definitions)
1804
- traits: resolvedOrbital.traits.map((rt) => {
1804
+ traits: (resolvedOrbital.traits || []).map((rt) => {
1805
1805
  if (rt.config || rt.linkedEntity) {
1806
1806
  return {
1807
1807
  ref: rt.trait.name,
@@ -1868,5 +1868,5 @@ function parseNamespacedEvent(eventName) {
1868
1868
  }
1869
1869
 
1870
1870
  export { EffectExecutor, EventBus, StateMachineManager, containsBindings, createContextFromBindings, createInitialTraitState, createTestExecutor, createUnifiedLoader, extractBindings, findInitialState, findTransition, getIsolatedCollectionName, getNamespacedEvent, interpolateProps, interpolateValue, isNamespacedEvent, normalizeEventKey, parseNamespacedEvent, preprocessSchema, processEvent };
1871
- //# sourceMappingURL=chunk-KUL6GQI5.js.map
1872
- //# sourceMappingURL=chunk-KUL6GQI5.js.map
1871
+ //# sourceMappingURL=chunk-QBQSJJF6.js.map
1872
+ //# sourceMappingURL=chunk-QBQSJJF6.js.map