@cadenza.io/service 2.18.1 → 2.18.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 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/Cadenza.ts","../../src/graph/definition/DeputyTask.ts","../../src/graph/definition/DatabaseTask.ts","../../src/registry/ServiceRegistry.ts","../../src/utils/environment.ts","../../src/utils/inquiry.ts","../../src/utils/transport.ts","../../src/utils/serviceInstance.ts","../../src/utils/delegation.ts","../../src/utils/readiness.ts","../../src/utils/runtimeStatus.ts","../../src/graph/definition/SignalTransmissionTask.ts","../../src/network/RestController.browser.ts","../../src/network/SocketController.ts","../../src/network/socketClientUtils.ts","../../src/utils/tools.ts","../../src/signals/SignalController.ts","../../src/runtime/RuntimeValidationController.ts","../../src/graph/controllers/registerActorSessionPersistence.ts","../../src/graph/controllers/GraphMetadataController.ts","../../src/database/DatabaseController.browser.ts","../../src/graph/controllers/GraphSyncController.ts","../../src/utils/bootstrap.ts","../../src/ssr/createSSRInquiryBridge.ts"],"sourcesContent":["import CadenzaService, {\n NetworkMode,\n SecurityProfile,\n ServerOptions,\n} from \"./Cadenza\";\nimport {\n Actor,\n type ActorDefinition,\n type ActorSpec,\n type ActorStateDefinition,\n type ActorKeyDefinition,\n type ActorTaskBindingDefinition,\n type ActorFactoryOptions,\n type ActorLoadPolicy,\n type ActorWriteContract,\n type ActorRuntimeReadGuard,\n type ActorTaskMode,\n type ActorKind,\n type ActorConsistencyProfileName,\n type ActorInvocationOptions,\n type ActorStateStore,\n type ActorTaskBindingOptions,\n type ActorTaskContext,\n type ActorTaskHandler,\n type ActorStateReducer,\n type RetryPolicy,\n type IdempotencyPolicy,\n type SessionPolicy,\n type RuntimeValidationPolicy,\n type RuntimeValidationScope,\n DebounceTask,\n EphemeralTask,\n GraphRoutine,\n Task,\n} from \"@cadenza.io/core\";\nimport type {\n AnyObject,\n DebounceOptions,\n EphemeralTaskOptions,\n TaskFunction,\n TaskOptions,\n ThrottleTagGetter,\n} from \"@cadenza.io/core\";\nimport GraphMetadataController from \"./graph/controllers/GraphMetadataController\";\nimport DatabaseTask from \"./graph/definition/DatabaseTask\";\nimport DeputyTask from \"./graph/definition/DeputyTask\";\nimport SignalTransmissionTask from \"./graph/definition/SignalTransmissionTask\";\nimport RestController from \"@service-rest-controller\";\nimport SocketController from \"./network/SocketController\";\nimport ServiceRegistry, {\n DeputyDescriptor,\n} from \"./registry/ServiceRegistry\";\nimport SignalController from \"./signals/SignalController\";\nimport {\n RUNTIME_VALIDATION_INTENTS,\n RUNTIME_VALIDATION_SIGNALS,\n} from \"./runtime/RuntimeValidationController\";\nimport DatabaseController from \"@service-database-controller\";\nimport {\n BootstrapOptions,\n HydrationOptions,\n ResolvedBootstrapEndpoint,\n} from \"./utils/bootstrap\";\nimport {\n createSSRInquiryBridge,\n SSRInquiryBridge,\n SSRInquiryBridgeOptions,\n} from \"./ssr/createSSRInquiryBridge\";\nimport {\n AggregateDefinition,\n AggregateFunction,\n DbOperationType,\n DbOperationPayload,\n JoinDefinition,\n OpEffect,\n QueryMode,\n SortDirection,\n SubOperation,\n SubOperationType,\n ValueOrSubOp,\n} from \"./types/queryData\";\nimport type {\n DistributedInquiryMeta,\n DistributedInquiryOptions,\n InquiryResponderDescriptor,\n InquiryResponderStatus,\n} from \"./types/inquiry\";\nimport type { ServiceInstanceDescriptor } from \"./types/serviceRegistry\";\nimport type {\n ServiceTransportConfig,\n ServiceTransportDescriptor,\n ServiceTransportProtocol,\n ServiceTransportRole,\n ServiceTransportSecurityProfile,\n} from \"./types/transport\";\n\nexport default CadenzaService;\nexport type {\n BootstrapOptions,\n HydrationOptions,\n ResolvedBootstrapEndpoint,\n SSRInquiryBridge,\n SSRInquiryBridgeOptions,\n ActorDefinition,\n ActorSpec,\n ActorStateDefinition,\n ActorKeyDefinition,\n ActorTaskBindingDefinition,\n ActorFactoryOptions,\n ActorLoadPolicy,\n ActorWriteContract,\n ActorRuntimeReadGuard,\n ActorTaskMode,\n ActorKind,\n ActorConsistencyProfileName,\n ActorInvocationOptions,\n ActorStateStore,\n ActorTaskBindingOptions,\n ActorTaskContext,\n ActorTaskHandler,\n ActorStateReducer,\n RetryPolicy,\n IdempotencyPolicy,\n SessionPolicy,\n ServiceInstanceDescriptor,\n ServiceTransportConfig,\n ServiceTransportDescriptor,\n ServiceTransportProtocol,\n ServiceTransportRole,\n ServiceTransportSecurityProfile,\n DeputyDescriptor,\n DbOperationType,\n QueryMode,\n AggregateFunction,\n AggregateDefinition,\n SortDirection,\n JoinDefinition,\n SubOperationType,\n SubOperation,\n OpEffect,\n ValueOrSubOp,\n DbOperationPayload,\n SecurityProfile,\n NetworkMode,\n ServerOptions,\n DistributedInquiryOptions,\n DistributedInquiryMeta,\n InquiryResponderDescriptor,\n InquiryResponderStatus,\n AnyObject,\n TaskOptions,\n ThrottleTagGetter,\n TaskFunction,\n DebounceOptions,\n EphemeralTaskOptions,\n RuntimeValidationPolicy,\n RuntimeValidationScope,\n};\nexport {\n Actor,\n GraphMetadataController,\n DeputyTask,\n DatabaseController,\n DatabaseTask,\n SignalTransmissionTask,\n RestController,\n SocketController,\n ServiceRegistry,\n SignalController,\n createSSRInquiryBridge,\n Task,\n DebounceTask,\n EphemeralTask,\n GraphRoutine,\n RUNTIME_VALIDATION_INTENTS,\n RUNTIME_VALIDATION_SIGNALS,\n};\n","import Cadenza, {\n Actor,\n ActorDefinition,\n ActorFactoryOptions,\n ActorSpec,\n AnyObject,\n CadenzaMode,\n DebounceOptions,\n DebounceTask,\n EmitOptions,\n EphemeralTask,\n EphemeralTaskOptions,\n GraphRegistry,\n GraphRoutine,\n GraphRunner,\n InquiryBroker,\n Intent,\n RuntimeValidationPolicy,\n RuntimeValidationScope,\n SignalBroker,\n Task,\n TaskFunction,\n TaskOptions,\n ThrottleTagGetter,\n} from \"@cadenza.io/core\";\nimport DeputyTask from \"./graph/definition/DeputyTask\";\nimport DatabaseTask from \"./graph/definition/DatabaseTask\";\nimport ServiceRegistry from \"./registry/ServiceRegistry\";\nimport SignalTransmissionTask from \"./graph/definition/SignalTransmissionTask\";\nimport RestController from \"@service-rest-controller\";\nimport SocketController from \"./network/SocketController\";\nimport SignalController from \"./signals/SignalController\";\nimport RuntimeValidationController from \"./runtime/RuntimeValidationController\";\nimport { DbOperationPayload, DbOperationType } from \"./types/queryData\";\nimport GraphMetadataController from \"./graph/controllers/GraphMetadataController\";\nimport { registerActorSessionPersistenceTasks } from \"./graph/controllers/registerActorSessionPersistence\";\nimport { DatabaseSchemaDefinition } from \"./types/database\";\nimport { camelCase, snakeCase } from \"lodash-es\";\nimport DatabaseController from \"@service-database-controller\";\nimport { v4 as uuid } from \"uuid\";\nimport GraphSyncController from \"./graph/controllers/GraphSyncController\";\nimport { isBrowser } from \"./utils/environment\";\nimport { formatTimestamp } from \"./utils/tools\";\nimport {\n BootstrapOptions,\n HydrationOptions,\n readIntegerEnv,\n readListEnv,\n readStringEnv,\n resolveBootstrapEndpoint,\n} from \"./utils/bootstrap\";\nimport {\n DistributedInquiryMeta,\n DistributedInquiryOptions,\n InquiryResponderDescriptor,\n InquiryResponderStatus,\n} from \"./types/inquiry\";\nimport type {\n ServiceTransportConfig,\n ServiceTransportRole,\n} from \"./types/transport\";\nimport {\n compareResponderDescriptors,\n isMetaIntentName,\n mergeInquiryContexts,\n shouldExecuteInquiryResponder,\n summarizeResponderStatuses,\n} from \"./utils/inquiry\";\nimport { normalizeServiceTransportConfig } from \"./utils/transport\";\n\nexport type SecurityProfile = \"low\" | \"medium\" | \"high\";\nexport type NetworkMode =\n | \"internal\"\n | \"exposed\"\n | \"exposed-high-sec\"\n | \"auto\"\n | \"dev\";\n\nexport type ServerOptions = {\n customServiceId?: string; // TODO\n loadBalance?: boolean;\n useSocket?: boolean;\n log?: boolean;\n displayName?: string;\n isMeta?: boolean;\n port?: number; // for internal network\n securityProfile?: SecurityProfile;\n networkMode?: NetworkMode;\n retryCount?: number;\n cadenzaDB?: { connect?: boolean; address?: string; port?: number };\n bootstrap?: BootstrapOptions;\n hydration?: HydrationOptions;\n transports?: ServiceTransportConfig[];\n relatedServices?: string[][];\n isDatabase?: boolean;\n isFrontend?: boolean;\n};\n\nexport interface DatabaseOptions {\n databaseType?: \"postgres\";\n databaseName?: string;\n poolSize?: number;\n ownerServiceName?: string | null;\n}\n\n/**\n * The CadenzaService class serves as a central service layer providing various utility methods for managing tasks, signals, logging, and service interactions.\n * This class handles the initialization (`bootstrap`) and validation of services, as well as the creation of tasks associated with services and signals.\n */\nexport default class CadenzaService {\n public static signalBroker: SignalBroker;\n public static inquiryBroker: InquiryBroker;\n public static runner: GraphRunner;\n public static metaRunner: GraphRunner;\n public static registry: GraphRegistry;\n public static serviceRegistry: ServiceRegistry;\n protected static isBootstrapped = false;\n protected static serviceCreated = false;\n protected static defaultDatabaseServiceName: string | null = null;\n protected static warnedInvalidMetaIntentResponderKeys: Set<string> = new Set();\n protected static hydratedInquiryResults: Map<string, AnyObject> = new Map();\n protected static frontendSyncScheduled = false;\n\n private static buildLegacyLocalCadenzaDBTaskName(\n tableName: string,\n operation: DbOperationType,\n ): string {\n const operationPrefix =\n operation.charAt(0).toUpperCase() + operation.slice(1);\n const helperSuffix = camelCase(String(tableName ?? \"\").trim());\n\n return `db${operationPrefix}${helperSuffix.charAt(0).toUpperCase() + helperSuffix.slice(1)}`;\n }\n\n private static buildGeneratedLocalCadenzaDBTaskName(\n tableName: string,\n operation: DbOperationType,\n ): string {\n const operationPrefix =\n operation.charAt(0).toUpperCase() + operation.slice(1);\n return `${operationPrefix} ${String(tableName ?? \"\").trim()}`;\n }\n\n /**\n * Initializes the application by setting up necessary components and configurations.\n * This method ensures the initialization process is only executed once throughout the application lifecycle.\n *\n * @return {void} This method does not return any value.\n */\n static bootstrap(): void {\n if (this.isBootstrapped) return;\n this.isBootstrapped = true;\n\n Cadenza.bootstrap();\n Cadenza.setRuntimeInquiryDelegate((inquiry, context, options) =>\n this.inquire(\n inquiry,\n context,\n (options ?? {}) as DistributedInquiryOptions,\n ),\n );\n this.signalBroker = Cadenza.signalBroker;\n this.inquiryBroker = Cadenza.inquiryBroker;\n this.runner = Cadenza.runner;\n this.metaRunner = Cadenza.metaRunner;\n this.registry = Cadenza.registry;\n this.serviceRegistry = ServiceRegistry.instance;\n RestController.instance;\n SocketController.instance;\n RuntimeValidationController.instance;\n }\n\n private static ensureTransportControllers(isFrontend: boolean): void {\n if (!isFrontend) {\n SignalController.instance;\n }\n }\n\n private static setHydrationResults(\n hydration?: HydrationOptions,\n ): void {\n this.hydratedInquiryResults = new Map();\n\n const initialInquiryResults = hydration?.initialInquiryResults ?? {};\n for (const [key, value] of Object.entries(initialInquiryResults)) {\n this.hydratedInquiryResults.set(key, value as AnyObject);\n }\n }\n\n private static consumeHydratedInquiryResult(\n hydrationKey?: string,\n ): AnyObject | undefined {\n if (!hydrationKey) {\n return undefined;\n }\n\n const result = this.hydratedInquiryResults.get(hydrationKey);\n if (result === undefined) {\n return undefined;\n }\n\n this.hydratedInquiryResults.delete(hydrationKey);\n return result;\n }\n\n private static ensureFrontendSyncLoop(): void {\n if (this.frontendSyncScheduled) {\n return;\n }\n\n this.frontendSyncScheduled = true;\n Cadenza.interval(\"meta.sync_requested\", { __syncing: false }, 180000);\n Cadenza.schedule(\"meta.sync_requested\", { __syncing: false }, 250);\n }\n\n private static normalizeDeclaredTransports(\n transports: ServiceTransportConfig[] | undefined,\n serviceId: string,\n useSocket: boolean,\n ): Array<\n ServiceTransportConfig & {\n uuid: string;\n }\n > {\n return (transports ?? [])\n .map((transport) => normalizeServiceTransportConfig(transport))\n .filter(\n (\n transport,\n ): transport is ServiceTransportConfig =>\n !!transport,\n )\n .map((transport) => ({\n ...transport,\n protocols:\n transport.protocols && transport.protocols.length > 0\n ? transport.protocols\n : useSocket\n ? [\"rest\", \"socket\"]\n : [\"rest\"],\n uuid: uuid(),\n }));\n }\n\n private static createBootstrapTransport(\n serviceInstanceId: string,\n role: ServiceTransportRole,\n endpoint: ReturnType<typeof resolveBootstrapEndpoint>,\n ) {\n return {\n uuid: `${serviceInstanceId}-${role}-bootstrap`,\n service_instance_id: serviceInstanceId,\n role,\n origin: endpoint.url,\n protocols: [\"rest\", \"socket\"] as const,\n security_profile: null,\n auth_strategy: null,\n };\n }\n\n /**\n * Validates the provided service name based on specific rules.\n *\n * @param {string} serviceName - The service name to validate. Must be less than 100 characters,\n * must not contain spaces, dots, or backslashes, and must start with a capital letter.\n * @return {void} Throws an error if the service name does not meet the validation criteria.\n * @throws {Error} If the service name exceeds 100 characters.\n * @throws {Error} If the service name contains spaces.\n * @throws {Error} If the service name contains dots.\n * @throws {Error} If the service name contains backslashes.\n * @throws {Error} If the service name does not start with a capital letter.\n */\n protected static validateServiceName(serviceName: string) {\n if (serviceName.length > 100) {\n throw new Error(\"Service name must be less than 100 characters\");\n }\n\n if (serviceName.includes(\" \")) {\n throw new Error(\"Service name must not contain spaces\");\n }\n\n if (serviceName.includes(\".\")) {\n throw new Error(\"Service name must not contain dots\");\n }\n\n if (serviceName.includes(\"\\\\\")) {\n throw new Error(\"Service name must not contain backslashes\");\n }\n\n if (\n serviceName.charAt(0) !== serviceName.charAt(0).toUpperCase() &&\n serviceName.charAt(0) === serviceName.charAt(0).toLowerCase()\n ) {\n throw new Error(\"Service name must start with a capital letter\");\n }\n }\n\n /**\n * Validates the provided name to ensure it meets the required criteria.\n *\n * @param {string} name - The name to be validated.\n * @return {void} Does not return any value.\n */\n protected static validateName(name: string): void {\n Cadenza.validateName(name);\n }\n\n /**\n * Gets the current run strategy from the Cadenza configuration.\n *\n * @return {Function} The run strategy function defined in the Cadenza configuration.\n */\n public static get runStrategy() {\n return Cadenza.runStrategy;\n }\n\n /**\n * Sets the mode for the Cadenza application.\n *\n * @param {CadenzaMode} mode - The mode to be set for the application.\n * @return {void} This method does not return a value.\n */\n public static setMode(mode: CadenzaMode) {\n Cadenza.setMode(mode);\n }\n\n /**\n * Emits a signal with the specified data using the associated broker.\n *\n * @param {string} signal - The name of the event or signal to emit.\n * @param {AnyObject} [data={}] - The data to be emitted along with the signal.\n * @param options\n * @return {void} No return value.\n *\n * @example\n * This is meant to be used as a global event emitter.\n * If you want to emit an event from within a task, you can use the `emit` method provided to the task function. See {@link TaskFunction}.\n * ```ts\n * Cadenza.emit('main.my_event', { foo: 'bar' });\n * ```\n */\n static emit(signal: string, data: AnyObject = {}, options: EmitOptions = {}) {\n Cadenza.emit(signal, data, options);\n }\n\n static debounce(signal: string, context: any = {}, delayMs: number = 500) {\n Cadenza.debounce(signal, context, delayMs);\n }\n\n public static schedule(\n signal: string,\n context: AnyObject,\n timeoutMs: number,\n exactDateTime?: Date,\n ) {\n Cadenza.schedule(signal, context, timeoutMs, exactDateTime);\n }\n\n public static interval(\n signal: string,\n context: AnyObject,\n intervalMs: number,\n leading = false,\n startDateTime?: Date,\n ) {\n Cadenza.interval(signal, context, intervalMs, leading, startDateTime);\n }\n\n public static defineIntent(intent: Intent): Intent {\n this.inquiryBroker?.addIntent(intent);\n return intent;\n }\n\n public static getRuntimeValidationPolicy(): RuntimeValidationPolicy {\n this.bootstrap();\n return Cadenza.getRuntimeValidationPolicy();\n }\n\n public static setRuntimeValidationPolicy(\n policy: RuntimeValidationPolicy = {},\n ): RuntimeValidationPolicy {\n this.bootstrap();\n return Cadenza.setRuntimeValidationPolicy(policy);\n }\n\n public static replaceRuntimeValidationPolicy(\n policy: RuntimeValidationPolicy = {},\n ): RuntimeValidationPolicy {\n this.bootstrap();\n return Cadenza.replaceRuntimeValidationPolicy(policy);\n }\n\n public static clearRuntimeValidationPolicy(): void {\n this.bootstrap();\n Cadenza.clearRuntimeValidationPolicy();\n }\n\n public static getRuntimeValidationScopes(): RuntimeValidationScope[] {\n this.bootstrap();\n return Cadenza.getRuntimeValidationScopes();\n }\n\n public static upsertRuntimeValidationScope(\n scope: RuntimeValidationScope,\n ): RuntimeValidationScope {\n this.bootstrap();\n return Cadenza.upsertRuntimeValidationScope(scope);\n }\n\n public static removeRuntimeValidationScope(id: string): void {\n this.bootstrap();\n Cadenza.removeRuntimeValidationScope(id);\n }\n\n public static clearRuntimeValidationScopes(): void {\n this.bootstrap();\n Cadenza.clearRuntimeValidationScopes();\n }\n\n private static getInquiryResponderDescriptor(task: Task): InquiryResponderDescriptor {\n return this.serviceRegistry.getInquiryResponderDescriptor(task);\n }\n\n private static compareInquiryResponders(\n left: { task: Task; descriptor: InquiryResponderDescriptor },\n right: { task: Task; descriptor: InquiryResponderDescriptor },\n ) {\n return compareResponderDescriptors(left.descriptor, right.descriptor);\n }\n\n private static buildInquirySummary(\n inquiry: string,\n startedAt: number,\n statuses: InquiryResponderStatus[],\n totalResponders: number,\n ): DistributedInquiryMeta {\n const counts = summarizeResponderStatuses(statuses);\n const isMetaInquiry = isMetaIntentName(inquiry);\n const eligibleResponders = statuses.length;\n return {\n inquiry,\n isMetaInquiry,\n totalResponders,\n eligibleResponders,\n filteredOutResponders: Math.max(0, totalResponders - eligibleResponders),\n responded: counts.responded,\n failed: counts.failed,\n timedOut: counts.timedOut,\n pending: counts.pending,\n durationMs: Date.now() - startedAt,\n responders: statuses,\n };\n }\n\n public static async inquire(\n inquiry: string,\n context: AnyObject,\n options: DistributedInquiryOptions = {},\n ): Promise<AnyObject> {\n this.bootstrap();\n\n const hydratedResult = this.consumeHydratedInquiryResult(\n options.hydrationKey,\n );\n if (hydratedResult !== undefined) {\n return hydratedResult;\n }\n\n const observer = this.inquiryBroker?.inquiryObservers.get(inquiry);\n const allResponders = observer\n ? Array.from(observer.tasks).map((task) => ({\n task,\n descriptor: this.getInquiryResponderDescriptor(task),\n }))\n : [];\n const isMetaInquiry = isMetaIntentName(inquiry);\n const responders = allResponders.filter(({ task, descriptor }) => {\n const shouldExecute = shouldExecuteInquiryResponder(inquiry, task.isMeta);\n\n if (shouldExecute) {\n return true;\n }\n\n const warningKey = `${inquiry}|${descriptor.serviceName}|${descriptor.taskName}|${descriptor.taskVersion}|${descriptor.localTaskName}`;\n if (!this.warnedInvalidMetaIntentResponderKeys.has(warningKey)) {\n this.warnedInvalidMetaIntentResponderKeys.add(warningKey);\n this.log(\n \"Skipping non-meta task for meta intent inquiry.\",\n {\n inquiry,\n responder: descriptor,\n },\n \"warning\",\n descriptor.serviceName,\n );\n }\n\n return false;\n });\n\n if (responders.length === 0) {\n const inquiryMeta = {\n inquiry,\n isMetaInquiry,\n totalResponders: allResponders.length,\n eligibleResponders: 0,\n filteredOutResponders: allResponders.length,\n responded: 0,\n failed: 0,\n timedOut: 0,\n pending: 0,\n durationMs: 0,\n responders: [],\n } as DistributedInquiryMeta;\n\n if (options.requireComplete) {\n throw {\n __inquiryMeta: inquiryMeta,\n __error: `Inquiry '${inquiry}' had no eligible responders`,\n errored: true,\n };\n }\n\n return {\n __inquiryMeta: inquiryMeta,\n };\n }\n\n responders.sort(this.compareInquiryResponders.bind(this));\n\n const overallTimeoutMs = options.overallTimeoutMs ?? options.timeout ?? 0;\n const requireComplete = options.requireComplete ?? false;\n const perResponderTimeoutMs = options.perResponderTimeoutMs;\n\n const startedAt = Date.now();\n const statuses: InquiryResponderStatus[] = [];\n const statusByTask = new Map<Task, InquiryResponderStatus>();\n for (const responder of responders) {\n const status: InquiryResponderStatus = {\n ...responder.descriptor,\n status: \"timed_out\",\n durationMs: 0,\n };\n statuses.push(status);\n statusByTask.set(responder.task, status);\n }\n\n const resultsByTask = new Map<Task, AnyObject>();\n const resolverTasks: Task[] = [];\n const pending = new Set(responders.map((r) => r.task));\n const startTimeByTask = new Map<Task, number>();\n\n this.emit(\"meta.inquiry_broker.inquire\", { inquiry, context });\n\n return new Promise((resolve, reject) => {\n let finalized = false;\n let timeoutId: NodeJS.Timeout | undefined;\n\n const finalize = (timedOut: boolean) => {\n if (finalized) return;\n finalized = true;\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n\n for (const resolverTask of resolverTasks) {\n resolverTask.destroy();\n }\n\n if (timedOut && pending.size > 0) {\n for (const task of pending) {\n const status = statusByTask.get(task);\n if (!status) continue;\n status.status = \"timed_out\";\n status.durationMs = Date.now() - (startTimeByTask.get(task) ?? startedAt);\n }\n }\n\n const fulfilledContexts = responders\n .filter((responder) => resultsByTask.has(responder.task))\n .map((responder) => resultsByTask.get(responder.task)!);\n\n const mergedContext = mergeInquiryContexts(fulfilledContexts);\n const inquiryMeta = this.buildInquirySummary(\n inquiry,\n startedAt,\n statuses,\n allResponders.length,\n );\n const responseContext = {\n ...mergedContext,\n __inquiryMeta: inquiryMeta,\n };\n\n if (\n requireComplete &&\n (timedOut ||\n inquiryMeta.failed > 0 ||\n inquiryMeta.timedOut > 0 ||\n inquiryMeta.pending > 0)\n ) {\n reject({\n ...responseContext,\n __error: `Inquiry '${inquiry}' did not complete successfully`,\n errored: true,\n });\n return;\n }\n\n resolve(responseContext);\n };\n\n if (overallTimeoutMs > 0) {\n timeoutId = setTimeout(() => finalize(true), overallTimeoutMs);\n }\n\n for (const responder of responders) {\n const { task, descriptor } = responder;\n const inquiryId = uuid();\n startTimeByTask.set(task, Date.now());\n\n const resolverTask = this.createEphemeralMetaTask(\n `Resolve inquiry ${inquiry} for ${descriptor.localTaskName}`,\n (resultCtx) => {\n if (finalized) {\n return;\n }\n\n pending.delete(task);\n\n const status = statusByTask.get(task);\n\n if (status) {\n status.durationMs =\n Date.now() -\n (startTimeByTask.get(task) ?? startedAt);\n\n if (resultCtx?.errored || resultCtx?.failed) {\n status.status = \"failed\";\n status.error = String(\n resultCtx?.__error ?? resultCtx?.error ?? \"Inquiry responder failed\",\n );\n } else {\n status.status = \"fulfilled\";\n resultsByTask.set(task, resultCtx);\n }\n }\n\n if (pending.size === 0) {\n finalize(false);\n }\n },\n \"Resolves distributed inquiry responder result\",\n { register: false },\n ).doOn(`meta.node.graph_completed:${inquiryId}`);\n\n resolverTasks.push(resolverTask);\n\n const executionContext: AnyObject = {\n ...context,\n __routineExecId: inquiryId,\n __isInquiry: true,\n };\n\n if (perResponderTimeoutMs !== undefined) {\n executionContext.__timeout = perResponderTimeoutMs;\n }\n\n if (task.isMeta) {\n this.metaRunner?.run(task, executionContext);\n } else {\n this.runner?.run(task, executionContext);\n }\n }\n });\n }\n\n /**\n * Executes the given task or graph routine within the provided context using the configured runner.\n *\n * @param {Task | GraphRoutine} task - The task or graph routine to be executed.\n * @param {AnyObject} context - The context within which the task will be executed.\n * @return {void}\n *\n * @example\n * ```ts\n * const task = Cadenza.createTask('My task', (ctx) => {\n * console.log('My task executed with context:', ctx);\n * });\n *\n * Cadenza.run(task, { foo: 'bar' });\n *\n * const routine = Cadenza.createRoutine('My routine', [task], 'My routine description');\n *\n * Cadenza.run(routine, { foo: 'bar' });\n * ```\n */\n static run(task: Task | GraphRoutine, context: AnyObject) {\n this.runner?.run(task, context);\n }\n /**\n * Logs a message with a specified log level and additional contextual data.\n * Records in the CadenzaDB when available.\n *\n * @param {string} message - The main message to be logged.\n * @param {any} [data={}] - Additional data or metadata to include with the log.\n * @param {\"info\"|\"warning\"|\"error\"|\"critical\"} [level=\"info\"] - The severity level of the log message.\n * @param {string|null} [subjectServiceName=null] - The name of the subject service related to the log.\n * @param {string|null} [subjectServiceInstanceId=null] - The instance ID of the subject service related to the log.\n * @return {void} No return value.\n */\n static log(\n message: string,\n data: any = {},\n level: \"info\" | \"warning\" | \"error\" | \"critical\" = \"info\",\n subjectServiceName: string | null = null,\n subjectServiceInstanceId: string | null = null,\n ) {\n if (level === \"critical\") {\n console.error(\"CRITICAL:\", message, data);\n } else if (level === \"error\") {\n console.error(message, data);\n } else if (level === \"warning\") {\n console.warn(message, data);\n } else {\n console.log(message, data);\n }\n\n this.emit(\"global.meta.system_log.log\", {\n data: {\n data,\n level,\n message,\n serviceName: this.serviceRegistry?.serviceName,\n serviceInstanceId: this.serviceRegistry?.serviceInstanceId,\n subjectServiceName,\n subjectServiceInstanceId,\n created: formatTimestamp(Date.now()),\n },\n });\n }\n\n public static get(taskName: string): Task | undefined {\n return Cadenza.get(taskName);\n }\n\n public static getLocalCadenzaDBTask(\n tableName: string,\n operation: DbOperationType,\n ): Task | undefined {\n const generatedTaskName = this.buildGeneratedLocalCadenzaDBTaskName(\n tableName,\n operation,\n );\n const legacyTaskName = this.buildLegacyLocalCadenzaDBTaskName(\n tableName,\n operation,\n );\n\n return Cadenza.get(generatedTaskName) ?? Cadenza.get(legacyTaskName);\n }\n\n public static getLocalCadenzaDBInsertTask(\n tableName: string,\n ): Task | undefined {\n return this.getLocalCadenzaDBTask(tableName, \"insert\");\n }\n\n public static getLocalCadenzaDBQueryTask(\n tableName: string,\n ): Task | undefined {\n return this.getLocalCadenzaDBTask(tableName, \"query\");\n }\n\n public static getActor<\n D extends Record<string, any> = AnyObject,\n R = AnyObject,\n >(actorName: string): Actor<D, R> | undefined {\n const cadenzaWithActors = Cadenza as unknown as {\n getActor?: <D extends Record<string, any>, R = AnyObject>(\n actorName: string,\n ) => Actor<D, R> | undefined;\n };\n return cadenzaWithActors.getActor?.<D, R>(actorName);\n }\n\n public static getAllActors<\n D extends Record<string, any> = AnyObject,\n R = AnyObject,\n >(): Actor<D, R>[] {\n const cadenzaWithActors = Cadenza as unknown as {\n getAllActors?: <D extends Record<string, any>, R = AnyObject>() => Actor<\n D,\n R\n >[];\n };\n return cadenzaWithActors.getAllActors?.<D, R>() ?? [];\n }\n\n public static getRoutine(routineName: string): GraphRoutine | undefined {\n return Cadenza.getRoutine(routineName);\n }\n\n /**\n * Creates a new DeputyTask instance based on the provided routine name, service name, and options.\n * This method ensures proper task initialization, including setting a unique name,\n * validation of the routine name, and applying default option values.\n *\n * @param {string} routineName - The name of the routine the task references. This is mandatory and should be a valid string.\n * @param {string|undefined} [serviceName] - The name of the service that the routine belongs to. This is optional and defaults to undefined.\n * @param {TaskOptions} [options={}] - A configuration object for the task, allowing various properties such as concurrency, timeout, and retry settings to be customized.\n * @return {DeputyTask} - A new DeputyTask instance initialized with the specified parameters.\n *\n * @example\n * Let's say we are writing the code for a Service called \"Service1\".\n * We also have an additional service called \"Service2\" with a routine called \"My Routine\".\n * A flow on Service1 depends on the result of \"My Routine\" on Service2.\n * We can create a deputy task for the routine using the following code:\n * ```ts\n * Cadenza.createDeputyTask(\"My Routine\", \"Service2\").then(\n * Cadenza.createTask(\"Handle result\", (ctx) => {\n * console.log(\"'Handle result' executed with context:\", ctx);\n * }),\n * );\n * ```\n * Internally, this will send a request to an available \"Service2\" instance to execute the \"My Routine\" routine.\n * The deputy task will wait for the response and then execute the next task(s) in the chain.\n *\n * You can visualize the execution of the deputy task as follows:\n * ```\n * Service1 flow = [Deputy tasks for \"My Routine\"] -> [\"Handle result\"]\n * || A\n * V ||\n * Service2 flow = [[My Routine]]\n * ```\n *\n * Deputy tasks are useful for delegating flows to other services, allowing for parallel execution and load balancing.\n * But it creates tight coupling between the services, which may not be desirable in some cases.\n * In cases where an event on one service should simply trigger a flow on another service, without the need for a result,\n * it is recommended to use signals instead. Like this:\n *\n * Service1\n * ```ts\n * Cadenza.createTask(\"Generate event\", (ctx, emit) => {\n * // Do something\n * emit(\"some.event\");\n * });\n * ```\n *\n * Service2\n * ```ts\n * Cadenza.createTask(\"Handle event\", (ctx) => {\n * console.log(\"Handle event executed with context:\", ctx);\n * }).doOn(\"Service1.some.event\");\n * ```\n *\n * Every time the \"Generate event\" task is executed, it will emit a signal \"Service1.some.event\" to one Service2 instance and trigger the \"Handle event\" task.\n */\n static createDeputyTask(\n routineName: string,\n serviceName: string | undefined = undefined,\n options: TaskOptions = {},\n ): DeputyTask {\n this.bootstrap();\n this.validateName(routineName);\n const name = `${routineName} (Proxy)`;\n\n options = {\n concurrency: 100,\n timeout: 0,\n register: true,\n isUnique: false,\n isMeta: false,\n isSubMeta: false,\n isHidden: false,\n getTagCallback: undefined,\n inputSchema: undefined,\n validateInputContext: false,\n outputSchema: undefined,\n validateOutputContext: false,\n retryCount: 0,\n retryDelay: 0,\n retryDelayMax: 0,\n retryDelayFactor: 1,\n ...options,\n };\n\n return new DeputyTask(\n name,\n routineName,\n serviceName,\n `Referencing routine in service: ${routineName} on service: ${serviceName}.`,\n options.concurrency,\n options.timeout,\n options.register,\n options.isUnique,\n options.isMeta,\n options.isSubMeta,\n options.isHidden,\n options.getTagCallback,\n options.inputSchema,\n options.validateInputContext,\n options.outputSchema,\n options.validateOutputContext,\n options.retryCount,\n options.retryDelay,\n options.retryDelayMax,\n options.retryDelayFactor,\n );\n }\n\n /**\n * Creates a meta deputy task by setting the `isMeta` property in the options to true,\n * and delegating task creation to the `createDeputyTask` method.\n * See {@link createDeputyTask} and {@link createMetaTask} for more information.\n *\n * @param {string} routineName - The name of the routine associated with the task.\n * @param {string | undefined} [serviceName] - The optional name of the service associated with the task.\n * @param {TaskOptions} [options={}] - Additional options for the task. Defaults to an empty object if not provided.\n * @return {DeputyTask} - The created meta deputy task.\n */\n static createMetaDeputyTask(\n routineName: string,\n serviceName: string | undefined = undefined,\n options: TaskOptions = {},\n ): DeputyTask {\n options.isMeta = true;\n return this.createDeputyTask(routineName, serviceName, options);\n }\n\n /**\n * Creates a throttled deputy task with the specified parameters.\n * See {@link createThrottledTask} and {@link createDeputyTask} for more information.\n *\n * @param {string} routineName - The name of the routine to be executed.\n * @param {string | undefined} [serviceName=undefined] - The name of the service, if applicable.\n * @param {ThrottleTagGetter} [throttledIdGetter=() => \"default\"] - A function to get the throttled tag for the task.\n * @param {TaskOptions} [options={}] - The options for task configuration, including concurrency and callbacks.\n * @return {DeputyTask} The created throttled deputy task.\n */\n static createThrottledDeputyTask(\n routineName: string,\n serviceName: string | undefined = undefined,\n throttledIdGetter: ThrottleTagGetter = () => \"default\",\n options: TaskOptions = {},\n ) {\n options.concurrency = 1;\n options.getTagCallback = throttledIdGetter;\n return this.createDeputyTask(routineName, serviceName, options);\n }\n\n /**\n * Creates a throttled deputy task with meta-task settings enabled.\n * See {@link createThrottledTask},{@link createDeputyTask} and {@link createMetaTask} for more information.\n *\n * @param {string} routineName - The name of the routine for which the task is being created.\n * @param {string|undefined} [serviceName=undefined] - The name of the service associated with the task, or undefined if not applicable.\n * @param {ThrottleTagGetter} [throttledIdGetter=() => \"default\"] - A function to compute or return the throttling identifier.\n * @param {TaskOptions} [options={}] - Additional options for the task configuration.\n * @return {any} Returns the created throttled deputy task instance.\n */\n static createMetaThrottledDeputyTask(\n routineName: string,\n serviceName: string | undefined = undefined,\n throttledIdGetter: ThrottleTagGetter = () => \"default\",\n options: TaskOptions = {},\n ) {\n options.isMeta = true;\n return this.createThrottledDeputyTask(\n routineName,\n serviceName,\n throttledIdGetter,\n options,\n );\n }\n\n /**\n * Creates and configures a signal transmission task that handles the transmission\n * of a specified signal to a target service with a set of customizable options.\n * This is only used for internal purposes and is not exposed to the business logic layer.\n *\n * @param {string} signalName - The name of the signal to be transmitted.\n * @param {string} serviceName - The name of the target service to transmit the signal to.\n * @param {TaskOptions} [options={}] - A set of optional parameters to further configure the task.\n * @return {SignalTransmissionTask} A new instance of SignalTransmissionTask configured with the given parameters.\n */\n static createSignalTransmissionTask(\n signalName: string,\n serviceName: string,\n options: TaskOptions = {},\n ): SignalTransmissionTask | undefined {\n this.bootstrap();\n this.validateName(signalName);\n this.validateName(serviceName);\n\n const name = `Transmit signal: ${signalName} to ${serviceName}`;\n if (this.get(name)) {\n return;\n }\n\n options = {\n concurrency: 100,\n timeout: 0,\n register: true,\n isUnique: false,\n isMeta: true,\n isSubMeta: false,\n isHidden: false,\n getTagCallback: undefined,\n inputSchema: undefined,\n validateInputContext: false,\n outputSchema: undefined,\n validateOutputContext: false,\n retryCount: 1,\n retryDelay: 0,\n retryDelayMax: 0,\n retryDelayFactor: 1,\n ...options,\n };\n\n options.isMeta = true;\n\n return new SignalTransmissionTask(\n name,\n signalName,\n serviceName,\n `Transmits signal ${signalName} to ${serviceName} service.`,\n options.concurrency,\n options.timeout,\n options.register,\n options.isUnique,\n options.isMeta,\n options.isSubMeta,\n options.isHidden,\n options.getTagCallback,\n options.inputSchema,\n options.validateInputContext,\n options.outputSchema,\n options.validateOutputContext,\n options.retryCount,\n options.retryDelay,\n options.retryDelayMax,\n options.retryDelayFactor,\n );\n }\n\n /**\n * Creates and configures a database task that performs an operation on a specified table.\n *\n * @param {string} tableName - The name of the database table on which the operation will be performed.\n * @param {DbOperationType} operation - The type of database operation to execute (e.g., insert, update, delete).\n * @param {string|undefined} [databaseServiceName=undefined] - The name of the database service; defaults to \"default database service\" if not provided.\n * @param {DbOperationPayload} queryData - The data payload required for executing the specified database operation.\n * @param {TaskOptions} [options={}] - Optional configuration for the task, including concurrency, timeout, and retry policies.\n * @return {DatabaseTask} A configured database task instance ready for execution.\n */\n static createDatabaseTask(\n tableName: string,\n operation: DbOperationType,\n databaseServiceName: string | undefined = undefined,\n queryData: DbOperationPayload,\n options: TaskOptions = {},\n ) {\n this.bootstrap();\n this.validateName(tableName);\n this.validateName(operation);\n const resolvedDatabaseServiceName =\n databaseServiceName ?? this.defaultDatabaseServiceName ?? undefined;\n const targetDatabaseServiceName =\n resolvedDatabaseServiceName ?? \"default database service\";\n const name = `${operation.charAt(0).toUpperCase() + operation.slice(1)} ${tableName} in ${targetDatabaseServiceName}`;\n const description = `Executes a ${operation} on table ${tableName} in ${targetDatabaseServiceName}`;\n const taskName = `${operation.charAt(0).toUpperCase() + operation.slice(1)} ${tableName}`;\n\n options = {\n concurrency: 100,\n timeout: 0,\n register: true,\n isUnique: false,\n isMeta: false,\n isSubMeta: false,\n isHidden: false,\n getTagCallback: undefined,\n inputSchema: undefined,\n validateInputContext: false,\n outputSchema: undefined,\n validateOutputContext: false,\n retryCount: 3,\n retryDelay: 100,\n retryDelayMax: 0,\n retryDelayFactor: 1,\n ...options,\n };\n\n return new DatabaseTask(\n name,\n taskName,\n resolvedDatabaseServiceName,\n description,\n queryData,\n options.concurrency,\n options.timeout,\n options.register,\n options.isUnique,\n options.isMeta,\n options.isSubMeta,\n options.isHidden,\n options.getTagCallback,\n options.inputSchema,\n options.validateInputContext,\n options.outputSchema,\n options.validateOutputContext,\n options.retryCount,\n options.retryDelay,\n options.retryDelayMax,\n options.retryDelayFactor,\n );\n }\n\n /**\n * Creates a task for performing a database insert operation.\n *\n * @param {string} tableName - The name of the table where the insert operation will be performed.\n * @param {string | undefined} [databaseServiceName=undefined] - The name of the database service to use. Optional parameter, defaults to undefined.\n * @param {DbOperationPayload} [queryData={}] - The data payload for the insert operation. Defaults to an empty object.\n * @param {TaskOptions} [options={}] - Additional task options to configure the insert operation. Defaults to an empty object.\n * @return {object} A task configuration object for the database insert operation.\n */\n static createDatabaseInsertTask(\n tableName: string,\n databaseServiceName: string | undefined = undefined,\n queryData: DbOperationPayload = {},\n options: TaskOptions = {},\n ) {\n return this.createDatabaseTask(\n tableName,\n \"insert\",\n databaseServiceName,\n queryData,\n options,\n );\n }\n\n /**\n * Creates a database query task for the specified table and configuration.\n *\n * @param {string} tableName - The name of the database table to execute the query on.\n * @param {string | undefined} [databaseServiceName=undefined] - The name of the database service to use. If undefined, the default service will be used.\n * @param {DbOperationPayload} queryData - The payload containing the query data to be executed.\n * @param {TaskOptions} [options={}] - Optional parameters to configure the task execution.\n * @return {Task} The created database query task.\n */\n static createDatabaseQueryTask(\n tableName: string,\n databaseServiceName: string | undefined = undefined,\n queryData: DbOperationPayload,\n options: TaskOptions = {},\n ) {\n return this.createDatabaseTask(\n tableName,\n \"query\",\n databaseServiceName,\n queryData,\n options,\n );\n }\n\n /**\n * Creates a database task for the CadenzaDB with the specified parameters.\n *\n * @param {string} tableName - The name of the database table on which the operation will be performed.\n * @param {DbOperationType} operation - The type of database operation to execute (e.g., INSERT, UPDATE, DELETE).\n * @param {DbOperationPayload} queryData - The payload or data required to perform the database operation.\n * @param {TaskOptions} [options={}] - Additional options for the task, such as configuration settings.\n * @return {any} The result of creating the database task.\n */\n static createCadenzaDBTask(\n tableName: string,\n operation: DbOperationType,\n queryData: DbOperationPayload,\n options: TaskOptions = {},\n ) {\n options.isMeta = true;\n return this.createDatabaseTask(\n tableName,\n operation,\n \"CadenzaDB\",\n queryData,\n options,\n );\n }\n\n /**\n * Creates a database insert task specifically for the CadenzaDB database.\n *\n * @param {string} tableName - The name of the table into which the data will be inserted.\n * @param {DbOperationPayload} [queryData={}] - An object representing the data to be inserted.\n * @param {TaskOptions} [options={}] - Additional options to customize the task. The `isMeta` property is set to true by default.\n * @return {Task} A task object configured to perform an insert operation in the CadenzaDB database.\n */\n static createCadenzaDBInsertTask(\n tableName: string,\n queryData: DbOperationPayload = {},\n options: TaskOptions = {},\n ) {\n options.isMeta = true;\n return this.createDatabaseInsertTask(\n tableName,\n \"CadenzaDB\",\n queryData,\n options,\n );\n }\n\n /**\n * Creates a database query task specifically for the CadenzaDB.\n *\n * @param {string} tableName - The name of the database table to execute the query on.\n * @param {DbOperationPayload} queryData - The payload containing data and parameters for the database operation.\n * @param {TaskOptions} [options={}] - Additional options for the task configuration.\n * @return {any} The created task for executing a database query.\n */\n static createCadenzaDBQueryTask(\n tableName: string,\n queryData: DbOperationPayload,\n options: TaskOptions = {},\n ) {\n options.isMeta = true;\n return this.createDatabaseQueryTask(\n tableName,\n \"CadenzaDB\",\n queryData,\n options,\n );\n }\n\n /**\n * Creates a new Cadenza service with the specified configuration.\n *\n * @param {string} serviceName - The unique name of the service to create.\n * @param {string} [description] - An optional description of the service.\n * @param {ServerOptions} [options] - An optional object containing configuration options for the service.\n * @return {boolean} Returns true when the service is successfully created.\n */\n static createCadenzaService(\n serviceName: string,\n description: string = \"\",\n options: ServerOptions = {},\n ) {\n if (this.serviceCreated) return;\n this.bootstrap();\n this.validateName(serviceName);\n this.validateServiceName(serviceName);\n\n const serviceId = options.customServiceId ?? uuid();\n this.serviceRegistry.serviceName = serviceName;\n this.serviceRegistry.serviceInstanceId = serviceId;\n this.setHydrationResults(options.hydration);\n\n const explicitFrontendMode = options.isFrontend;\n\n options = {\n loadBalance: true,\n useSocket: true,\n displayName: undefined,\n isMeta: false,\n port: readIntegerEnv(\"HTTP_PORT\", 3000),\n securityProfile:\n (readStringEnv(\"SECURITY_PROFILE\") as SecurityProfile) ?? \"medium\",\n networkMode: (readStringEnv(\"NETWORK_MODE\") as NetworkMode) ?? \"dev\",\n retryCount: 3,\n cadenzaDB: {\n connect: true,\n },\n relatedServices: readListEnv(\"RELATED_SERVICES\"),\n isFrontend:\n typeof explicitFrontendMode === \"boolean\"\n ? explicitFrontendMode\n : isBrowser,\n ...options,\n };\n\n const isFrontend = !!options.isFrontend;\n const declaredTransports = this.normalizeDeclaredTransports(\n options.transports,\n serviceId,\n !!options.useSocket,\n );\n this.serviceRegistry.isFrontend = isFrontend;\n this.serviceRegistry.useSocket = !!options.useSocket;\n this.serviceRegistry.retryCount = options.retryCount ?? 3;\n this.ensureTransportControllers(isFrontend);\n\n const resolvedBootstrapEndpoint = options.cadenzaDB?.connect\n ? resolveBootstrapEndpoint({\n runtime: isFrontend ? \"browser\" : \"server\",\n bootstrap: options.bootstrap,\n cadenzaDB: options.cadenzaDB,\n })\n : undefined;\n\n if (resolvedBootstrapEndpoint) {\n options.cadenzaDB = {\n ...options.cadenzaDB,\n connect: true,\n address: resolvedBootstrapEndpoint.address,\n port: resolvedBootstrapEndpoint.port,\n };\n }\n\n if (options.cadenzaDB?.connect) {\n this.emit(\"meta.initializing_service\", {\n // Seed the CadenzaDB\n serviceInstance: {\n uuid: \"cadenza-db\",\n serviceName: \"CadenzaDB\",\n numberOfRunningGraphs: 0,\n isActive: true, // Assume it is deployed\n isNonResponsive: false,\n isBlocked: false,\n health: {},\n isFrontend: false,\n isBootstrapPlaceholder: true,\n transports: resolvedBootstrapEndpoint\n ? [\n this.createBootstrapTransport(\n \"cadenza-db\",\n isFrontend ? \"public\" : \"internal\",\n resolvedBootstrapEndpoint,\n ),\n ]\n : [],\n },\n });\n }\n\n options.relatedServices?.forEach((service) => {\n const relatedTransport = normalizeServiceTransportConfig({\n role: isFrontend ? \"public\" : \"internal\",\n origin: service[2].includes(\"://\") ? service[2] : `http://${service[2]}`,\n protocols: options.useSocket ? [\"rest\", \"socket\"] : [\"rest\"],\n });\n this.emit(\"meta.initializing_service\", {\n serviceInstance: {\n uuid: service[0],\n serviceName: service[1],\n numberOfRunningGraphs: 0,\n isActive: true, // Assume it is deployed\n isNonResponsive: false,\n isBlocked: false,\n health: {},\n isFrontend: false,\n isBootstrapPlaceholder: true,\n transports: relatedTransport\n ? [\n {\n uuid: `${service[0]}-${relatedTransport.role}`,\n service_instance_id: service[0],\n role: relatedTransport.role,\n origin: relatedTransport.origin,\n protocols: relatedTransport.protocols ?? [\"rest\", \"socket\"],\n security_profile: relatedTransport.securityProfile ?? null,\n auth_strategy: relatedTransport.authStrategy ?? null,\n },\n ]\n : [],\n },\n });\n });\n\n const initContext = {\n data: {\n name: serviceName,\n description: description,\n displayName: options.displayName ?? \"\",\n isMeta: options.isMeta,\n },\n __registrationData: {\n name: serviceName,\n description: description,\n displayName: options.displayName ?? \"\",\n isMeta: options.isMeta,\n },\n __serviceName: serviceName,\n __serviceInstanceId: serviceId,\n __port: options.port,\n __loadBalance: options.loadBalance,\n __useSocket: options.useSocket,\n __securityProfile: options.securityProfile,\n __networkMode: options.networkMode,\n __retryCount: options.retryCount,\n __cadenzaDBConnect: options.cadenzaDB?.connect,\n __isDatabase: options.isDatabase,\n __isFrontend: isFrontend,\n __declaredTransports: declaredTransports,\n };\n\n if (options.cadenzaDB?.connect) {\n this.createEphemeralMetaTask(\"Create service\", async (context, emit) => {\n emit(\"meta.create_service_requested\", initContext);\n }).doOn(\"meta.fetch.handshake_complete\");\n } else {\n this.emit(\"meta.create_service_requested\", initContext);\n this.createMetaTask(\"Create signal transmission for sync\", (ctx, emit) => {\n emit(\n \"meta.service_registry.gathered_sync_transmission_reconcile_requested\",\n {\n serviceName: ctx.serviceName,\n __reason: \"handshake\",\n },\n );\n }).doOn(\"meta.rest.handshake\", \"meta.socket.handshake\");\n }\n\n this.createMetaTask(\"Handle service setup completion\", () => {\n if (isFrontend) {\n registerActorSessionPersistenceTasks();\n this.ensureFrontendSyncLoop();\n } else {\n GraphMetadataController.instance;\n GraphSyncController.instance.isCadenzaDBReady =\n serviceName === \"CadenzaDB\" || !!options.cadenzaDB?.connect;\n GraphSyncController.instance.init();\n }\n\n this.log(\"Service created.\");\n\n return true;\n }).doOn(\"meta.service_registry.instance_inserted\");\n\n if (!options.cadenzaDB?.connect && isFrontend) {\n Cadenza.schedule(\n \"meta.service_registry.instance_registration_requested\",\n {\n data: {\n uuid: serviceId,\n process_pid: 1,\n service_name: serviceName,\n is_frontend: true,\n is_active: true,\n is_non_responsive: false,\n is_blocked: false,\n health: {},\n },\n __registrationData: {\n uuid: serviceId,\n process_pid: 1,\n service_name: serviceName,\n is_frontend: true,\n is_active: true,\n is_non_responsive: false,\n is_blocked: false,\n health: {},\n },\n __transportData: [],\n __serviceName: serviceName,\n __serviceInstanceId: serviceId,\n __useSocket: options.useSocket,\n __retryCount: options.retryCount,\n __isFrontend: true,\n __skipRemoteExecution: true,\n },\n 0,\n );\n }\n\n this.serviceCreated = true;\n }\n\n /**\n * Creates a Cadenza metadata service with the specified name, description, and options.\n *\n * @param {string} serviceName - The name of the metadata service to be created.\n * @param {string} description - A brief description of the metadata service.\n * @param {ServerOptions} [options={}] - Optional configuration for the metadata service. Defaults to an empty object.\n * @return {void} Does not return a value.\n */\n static createCadenzaMetaService(\n serviceName: string,\n description: string,\n options: ServerOptions = {},\n ) {\n options.isMeta = true;\n this.createCadenzaService(serviceName, description, options);\n }\n\n /**\n * Creates and initializes a specialized PostgresActor.\n * This is actor-only and does not create or register a network service.\n *\n * @param {string} name - Logical PostgresActor name.\n * @param {DatabaseSchemaDefinition} schema - Database schema definition.\n * @param {string} [description=\"\"] - Optional human-readable actor description.\n * @param {ServerOptions & DatabaseOptions} [options={}] - Actor/database runtime options.\n * @return {void}\n */\n static createPostgresActor(\n name: string,\n schema: DatabaseSchemaDefinition,\n description: string = \"\",\n options: ServerOptions & DatabaseOptions = {},\n ) {\n if (isBrowser || options.isFrontend) {\n console.warn(\n \"PostgresActor creation is not supported in frontend mode.\",\n );\n return;\n }\n\n this.bootstrap();\n this.validateName(name);\n const databaseController = DatabaseController.instance;\n\n const normalizedOptions = this.normalizePostgresActorOptions(name, options);\n\n const registration = databaseController.createPostgresActor(\n name,\n schema,\n description,\n normalizedOptions,\n );\n\n console.log(\"Creating PostgresActor\", {\n name,\n actorName: registration.actorName,\n ownerServiceName: normalizedOptions.ownerServiceName ?? null,\n options: normalizedOptions,\n });\n\n databaseController.requestPostgresActorSetup(registration, {\n actorName: registration.actorName,\n actorToken: registration.actorToken,\n databaseName: normalizedOptions.databaseName,\n ownerServiceName: normalizedOptions.ownerServiceName ?? null,\n });\n }\n\n /**\n * Creates a meta PostgresActor.\n *\n * @param {string} name - Logical PostgresActor name.\n * @param {DatabaseSchemaDefinition} schema - Database schema definition.\n * @param {string} [description=\"\"] - Optional description.\n * @param {ServerOptions & DatabaseOptions} [options={}] - Optional actor/database options.\n * @return {void}\n */\n static createMetaPostgresActor(\n name: string,\n schema: DatabaseSchemaDefinition,\n description: string = \"\",\n options: ServerOptions & DatabaseOptions = {},\n ) {\n this.bootstrap();\n options.isMeta = true;\n this.createPostgresActor(name, schema, description, options);\n }\n\n /**\n * Creates a dedicated database service by composing a PostgresActor and a Cadenza service.\n */\n static createDatabaseService(\n name: string,\n schema: DatabaseSchemaDefinition,\n description: string = \"\",\n options: ServerOptions & DatabaseOptions = {},\n ) {\n if (isBrowser || options.isFrontend) {\n console.warn(\n \"Database service creation is not supported in frontend mode. Use the CadenzaDB service instead.\",\n );\n return;\n }\n if (this.serviceCreated) return;\n\n this.bootstrap();\n this.validateName(name);\n this.validateServiceName(name);\n this.defaultDatabaseServiceName = name;\n\n const databaseController = DatabaseController.instance;\n const actorOptions = this.normalizePostgresActorOptions(name, {\n ...options,\n ownerServiceName: options.ownerServiceName ?? name,\n });\n const serviceOptions = this.normalizeDatabaseServiceOptions(name, {\n ...options,\n ownerServiceName: actorOptions.ownerServiceName,\n });\n\n const registration = databaseController.createPostgresActor(\n name,\n schema,\n description,\n actorOptions,\n );\n\n this.registerDatabaseServiceBridgeTask(\n name,\n description,\n schema,\n Boolean(serviceOptions.isMeta),\n registration.actorName,\n );\n\n const createServiceTaskName = `Create database service ${name} after ${registration.actorName} setup`;\n if (!this.get(createServiceTaskName)) {\n this.createMetaTask(\n createServiceTaskName,\n () => {\n this.createCadenzaService(name, description, serviceOptions);\n return true;\n },\n \"Creates the networked database service after PostgresActor setup completes.\",\n ).doOn(registration.setupDoneSignal);\n }\n\n const setupFailureTaskName = `Handle database service ${name} bootstrap failure`;\n if (!this.get(setupFailureTaskName)) {\n this.createMetaTask(\n setupFailureTaskName,\n (ctx) => {\n this.log(\n \"Database service bootstrap failed before service creation.\",\n {\n serviceName: name,\n actorName: registration.actorName,\n databaseName: registration.databaseName,\n error: ctx.__error,\n },\n \"error\",\n );\n return true;\n },\n \"Logs PostgresActor setup failures for database service bootstrap.\",\n ).doOn(registration.setupFailedSignal);\n }\n\n console.log(\"Creating database service wrapper\", {\n serviceName: name,\n actorName: registration.actorName,\n actorOptions,\n serviceOptions,\n });\n\n databaseController.requestPostgresActorSetup(registration, {\n actorName: registration.actorName,\n actorToken: registration.actorToken,\n databaseName: actorOptions.databaseName,\n ownerServiceName: actorOptions.ownerServiceName ?? name,\n });\n }\n\n /**\n * Creates a meta database service with the specified configuration.\n *\n * @param {string} name - The name of the database service to be created.\n * @param {DatabaseSchemaDefinition} schema - The schema definition for the database.\n * @param {string} [description=\"\"] - An optional description of the database service.\n * @param {ServerOptions & DatabaseOptions} [options={}] - Optional server and database configuration options. The `isMeta` flag will be automatically set to true.\n * @return {void} - This method does not return a value.\n */\n static createMetaDatabaseService(\n name: string,\n schema: DatabaseSchemaDefinition,\n description: string = \"\",\n options: ServerOptions & DatabaseOptions = {},\n ) {\n this.createDatabaseService(name, schema, description, {\n ...options,\n isMeta: true,\n });\n }\n\n private static normalizePostgresActorOptions(\n name: string,\n options: ServerOptions & DatabaseOptions = {},\n ): ServerOptions & DatabaseOptions {\n return {\n isMeta: false,\n retryCount: 3,\n databaseType: \"postgres\",\n databaseName: snakeCase(name),\n poolSize: readIntegerEnv(\"DATABASE_POOL_SIZE\", 10),\n ownerServiceName:\n options.ownerServiceName ?? this.serviceRegistry?.serviceName ?? null,\n ...options,\n };\n }\n\n private static normalizeDatabaseServiceOptions(\n name: string,\n options: ServerOptions & DatabaseOptions = {},\n ): ServerOptions & DatabaseOptions {\n return {\n loadBalance: true,\n useSocket: true,\n displayName: undefined,\n isMeta: false,\n port: readIntegerEnv(\"HTTP_PORT\", 3000),\n securityProfile:\n (readStringEnv(\"SECURITY_PROFILE\") as SecurityProfile) ?? \"medium\",\n networkMode: (readStringEnv(\"NETWORK_MODE\") as NetworkMode) ?? \"dev\",\n retryCount: 3,\n cadenzaDB: {\n connect: true,\n },\n databaseType: \"postgres\",\n databaseName: snakeCase(name),\n poolSize: readIntegerEnv(\"DATABASE_POOL_SIZE\", 10),\n isDatabase: true,\n ownerServiceName: options.ownerServiceName ?? name,\n ...options,\n };\n }\n\n private static registerDatabaseServiceBridgeTask(\n serviceName: string,\n description: string,\n schema: DatabaseSchemaDefinition,\n isMeta: boolean,\n actorName: string,\n ): void {\n const taskName = `Insert database service bridge ${serviceName}`;\n if (this.get(taskName)) {\n return;\n }\n\n this.createMetaTask(\n taskName,\n (ctx, emit) => {\n if (ctx.__serviceName && ctx.__serviceName !== serviceName) {\n return false;\n }\n\n emit(\"global.meta.created_database_service\", {\n data: {\n service_name: serviceName,\n description,\n schema,\n is_meta: isMeta,\n },\n });\n this.log(\"Database service created\", {\n name: serviceName,\n isMeta,\n actorName,\n });\n return true;\n },\n \"Bridges database service creation into the global metadata signal.\",\n ).doOn(\"meta.service_registry.service_inserted\");\n }\n\n static createActor<\n D extends Record<string, any> = AnyObject,\n R = AnyObject,\n >(\n spec: ActorSpec<D, R>,\n options: ActorFactoryOptions = {},\n ): Actor<D, R> {\n this.bootstrap();\n return Cadenza.createActor(spec, options as ActorFactoryOptions<D, R>);\n }\n\n static createActorFromDefinition<\n D extends Record<string, any> = AnyObject,\n R = AnyObject,\n >(\n definition: ActorDefinition<D, R>,\n options: ActorFactoryOptions<D, R> = {},\n ): Actor<D, R> {\n this.bootstrap();\n return Cadenza.createActorFromDefinition(definition, options);\n }\n\n /**\n * Creates and registers a new task with the provided name, function, and optional details.\n *\n * @param {string} name - The name of the task to be created.\n * @param {TaskFunction} func - The function that contains the task execution logic.\n * @param {string} [description] - An optional description of what the task does.\n * @param {TaskOptions} [options={}] - An optional configuration object specifying additional task options.\n * @return {Task} - The created task instance.\n *\n * @example\n * You can use arrow functions to create tasks.\n * ```ts\n * const task = Cadenza.createTask('My task', (ctx) => {\n * console.log('My task executed with context:', ctx);\n * }, 'My task description');\n * ```\n *\n * You can also use named functions to create tasks.\n * This is the preferred way to create tasks since it allows for code inspection in the CadenzaUI.\n * ```ts\n * function myTask(ctx) {\n * console.log('My task executed with context:', ctx);\n * }\n *\n * const task = Cadenza.createTask('My task', myTask);\n * ```\n *\n * ** Use the TaskOptions object to configure the task. **\n *\n * With concurrency limit, timeout limit and retry settings.\n * ```ts\n * Cadenza.createTask('My task', (ctx) => {\n * console.log('My task executed with context:', ctx);\n * }, 'My task description', {\n * concurrency: 10,\n * timeout: 10000,\n * retryCount: 3,\n * retryDelay: 1000,\n * retryDelayFactor: 1.5,\n * });\n * ```\n *\n * You can specify the input and output context schemas for the task.\n * ```ts\n * Cadenza.createTask('My task', (ctx) => {\n * return { bar: 'foo' + ctx.foo };\n * }, 'My task description', {\n * inputContextSchema: {\n * type: 'object',\n * properties: {\n * foo: {\n * type: 'string',\n * },\n * },\n * required: ['foo'],\n * },\n * validateInputContext: true, // default is false\n * outputContextSchema: {\n * type: 'object',\n * properties: {\n * bar: {\n * type: 'string',\n * },\n * },\n * required: ['bar'],\n * },\n * validateOutputContext: true, // default is false\n * });\n * ```\n */\n static createTask(\n name: string,\n func: TaskFunction,\n description?: string,\n options: TaskOptions = {},\n ): Task {\n this.bootstrap();\n return Cadenza.createTask(name, func, description, options);\n }\n\n /**\n * Creates a meta task with the specified name, functionality, description, and options.\n * This is used for creating tasks that lives on the meta layer.\n * The meta layer is a special layer that is executed separately from the business logic layer and is used for extending Cadenzas core functionality.\n * See {@link Task} or {@link createTask} for more information.\n *\n * @param {string} name - The name of the meta task.\n * @param {TaskFunction} func - The function to be executed by the meta task.\n * @param {string} [description] - An optional description of the meta task.\n * @param {TaskOptions} [options={}] - Additional optional task configuration. Automatically sets `isMeta` to true.\n * @return {Task} A task instance configured as a meta task.\n */\n static createMetaTask(\n name: string,\n func: TaskFunction,\n description?: string,\n options: TaskOptions = {},\n ): Task {\n this.bootstrap();\n return Cadenza.createMetaTask(name, func, description, options);\n }\n\n /**\n * Creates a unique task by wrapping the provided task function with a uniqueness constraint.\n * Unique tasks are designed to execute once per execution ID, merging parents. This is useful for\n * tasks that require fan-in/joins after parallel branches.\n * See {@link Task} for more information.\n * @param {string} name Unique identifier.\n * @param {TaskFunction} func Function receiving joinedContexts as a list (context.joinedContexts).\n * @param {string} [description] Optional description.\n * @param {TaskOptions} [options={}] Optional task options.\n * @returns {Task} The created UniqueTask.\n *\n * @example\n * ```ts\n * const splitTask = Cadenza.createTask('Split foos', function* (ctx) {\n * for (const foo of ctx.foos) {\n * yield { foo };\n * }\n * }, 'Splits a list of foos into multiple sub-branches');\n *\n * const processTask = Cadenza.createTask('Process foo', (ctx) => {\n * return { bar: 'foo' + ctx.foo };\n * }, 'Process a foo');\n *\n * const uniqueTask = Cadenza.createUniqueTask('Gather processed foos', (ctx) => {\n * // A unique task will always be provided with a list of contexts (ctx.joinedContexts) from its predecessors.\n * const processedFoos = ctx.joinedContexts.map((c) => c.bar);\n * return { foos: processedFoos };\n * }, 'Gathers together the processed foos.');\n *\n * splitTask.then(\n * processTask.then(\n * uniqueTask,\n * ),\n * );\n *\n * // Give the flow a name using a routine\n * Cadenza.createRoutine(\n * 'Process foos',\n * [splitTask],\n * 'Processes a list of foos'\n * ).doOn('main.received_foos'); // Subscribe to a signal\n *\n * // Trigger the flow from anywhere\n * Cadenza.emit('main.received_foos', { foos: ['foo1', 'foo2', 'foo3'] });\n * ```\n */\n static createUniqueTask(\n name: string,\n func: TaskFunction,\n description?: string,\n options: TaskOptions = {},\n ): Task {\n this.bootstrap();\n return Cadenza.createUniqueTask(name, func, description, options);\n }\n\n /**\n * Creates a unique meta task with the specified name, function, description, and options.\n * See {@link createUniqueTask} and {@link createMetaTask} for more information.\n *\n * @param {string} name - The name of the task to create.\n * @param {TaskFunction} func - The function to execute when the task is run.\n * @param {string} [description] - An optional description of the task.\n * @param {TaskOptions} [options={}] - Optional settings for the task. Defaults to an empty object. Automatically sets `isMeta` and `isUnique` to true.\n * @return {Task} The created unique meta task.\n */\n static createUniqueMetaTask(\n name: string,\n func: TaskFunction,\n description?: string,\n options: TaskOptions = {},\n ): Task {\n this.bootstrap();\n return Cadenza.createUniqueMetaTask(name, func, description, options);\n }\n\n /**\n * Creates a throttled task with a concurrency limit of 1, ensuring that only one instance of the task can run at a time for a specific throttle tag.\n * This is useful for ensuring execution order and preventing race conditions.\n * See {@link Task} for more information.\n *\n * @param {string} name - The name of the task.\n * @param {TaskFunction} func - The function to be executed when the task runs.\n * @param {ThrottleTagGetter} [throttledIdGetter=() => \"default\"] - A function that generates a throttle tag identifier to group tasks for throttling.\n * @param {string} [description] - An optional description of the task.\n * @param {TaskOptions} [options={}] - Additional options to customize the task behavior.\n * @return {Task} The created throttled task.\n *\n * @example\n * ```ts\n * const task = Cadenza.createThrottledTask(\n * 'My task',\n * async (ctx) => {\n * await new Promise((resolve) => setTimeout(resolve, 1000));\n * console.log('My task executed with context:', ctx);\n * },\n * // Will throttle by the value of ctx.foo to make sure tasks with the same value are executed sequentially\n * (ctx) => ctx.foo,\n * );\n *\n * Cadenza.run(task, { foo: 'bar' }); // (First execution)\n * Cadenza.run(task, { foo: 'bar' }); // This will be executed after the first execution is finished\n * Cadenza.run(task, { foo: 'baz' }); // This will be executed in parallel with the first execution\n * ```\n */\n static createThrottledTask(\n name: string,\n func: TaskFunction,\n throttledIdGetter: ThrottleTagGetter = () => \"default\",\n description?: string,\n options: TaskOptions = {},\n ): Task {\n this.bootstrap();\n return Cadenza.createThrottledTask(\n name,\n func,\n throttledIdGetter,\n description,\n options,\n );\n }\n\n /**\n * Creates a throttled meta task with the specified configuration.\n * See {@link createThrottledTask} and {@link createMetaTask} for more information.\n *\n * @param {string} name - The name of the throttled meta task.\n * @param {TaskFunction} func - The task function to be executed.\n * @param {ThrottleTagGetter} throttledIdGetter - A function to retrieve the throttling identifier.\n * @param {string} [description] - An optional description of the task.\n * @param {TaskOptions} [options={}] - Additional options for configuring the task.\n * @return {Task} The created throttled meta task.\n */\n static createThrottledMetaTask(\n name: string,\n func: TaskFunction,\n throttledIdGetter: ThrottleTagGetter = () => \"default\",\n description?: string,\n options: TaskOptions = {},\n ): Task {\n this.bootstrap();\n return Cadenza.createThrottledMetaTask(\n name,\n func,\n throttledIdGetter,\n description,\n options,\n );\n }\n\n /**\n * Creates and returns a new debounced task with the specified parameters.\n * This is useful to prevent rapid execution of tasks that may be triggered by multiple events within a certain time frame.\n * See {@link DebounceTask} for more information.\n *\n * @param {string} name - The unique name of the task to be created.\n * @param {TaskFunction} func - The function to be executed by the task.\n * @param {string} [description] - An optional description of the task.\n * @param {number} [debounceTime=1000] - The debounce time in milliseconds to delay the execution of the task.\n * @param {TaskOptions & DebounceOptions} [options={}] - Additional configuration options for the task, including debounce behavior and other task properties.\n * @return {DebounceTask} A new instance of the DebounceTask with the specified configuration.\n *\n * @example\n * ```ts\n * const task = Cadenza.createDebounceTask(\n * 'My debounced task',\n * (ctx) => {\n * console.log('My task executed with context:', ctx);\n * },\n * 'My debounced task description',\n * 100, // Debounce time in milliseconds. Default is 1000\n * {\n * leading: false, // Should the first execution of a burst be executed immediately? Default is false\n * trailing: true, // Should the last execution of a burst be executed? Default is true\n * maxWait: 1000, // Maximum time in milliseconds to wait for the next execution. Default is 0\n * },\n * );\n *\n * Cadenza.run(task, { foo: 'bar' }); // This will not be executed\n * Cadenza.run(task, { foo: 'bar' }); // This will not be executed\n * Cadenza.run(task, { foo: 'baz' }); // This execution will be delayed by 100ms\n * ```\n */\n static createDebounceTask(\n name: string,\n func: TaskFunction,\n description?: string,\n debounceTime: number = 1000,\n options: TaskOptions & DebounceOptions = {},\n ): DebounceTask {\n this.bootstrap();\n return Cadenza.createDebounceTask(\n name,\n func,\n description,\n debounceTime,\n options,\n );\n }\n\n /**\n * Creates a debounced meta task with the specified parameters.\n * See {@link createDebounceTask} and {@link createMetaTask} for more information.\n *\n * @param {string} name - The name of the task.\n * @param {TaskFunction} func - The function to be executed by the task.\n * @param {string} [description] - Optional description of the task.\n * @param {number} [debounceTime=1000] - The debounce delay in milliseconds.\n * @param {TaskOptions & DebounceOptions} [options={}] - Additional configuration options for the task.\n * @return {DebounceTask} Returns an instance of the debounced meta task.\n */\n static createDebounceMetaTask(\n name: string,\n func: TaskFunction,\n description?: string,\n debounceTime: number = 1000,\n options: TaskOptions & DebounceOptions = {},\n ): DebounceTask {\n this.bootstrap();\n return Cadenza.createDebounceMetaTask(\n name,\n func,\n description,\n debounceTime,\n options,\n );\n }\n\n /**\n * Creates an ephemeral task with the specified configuration.\n * Ephemeral tasks are designed to self-destruct after execution or a certain condition is met.\n * This is useful for transient tasks such as resolving promises or performing cleanup operations.\n * They are not registered by default.\n * See {@link EphemeralTask} for more information.\n *\n * @param {string} name - The name of the task to be created.\n * @param {TaskFunction} func - The function that defines the logic of the task.\n * @param {string} [description] - An optional description of the task.\n * @param {TaskOptions & EphemeralTaskOptions} [options={}] - The configuration options for the task, including concurrency, timeouts, and retry policies.\n * @return {EphemeralTask} The created ephemeral task instance.\n *\n * @example\n * By default, ephemeral tasks are executed once and destroyed after execution.\n * ```ts\n * const task = Cadenza.createEphemeralTask('My ephemeral task', (ctx) => {\n * console.log('My task executed with context:', ctx);\n * });\n *\n * Cadenza.run(task); // Executes the task once and destroys it after execution\n * Cadenza.run(task); // Does nothing, since the task is destroyed\n * ```\n *\n * Use destroy condition to conditionally destroy the task\n * ```ts\n * const task = Cadenza.createEphemeralTask(\n * 'My ephemeral task',\n * (ctx) => {\n * console.log('My task executed with context:', ctx);\n * },\n * 'My ephemeral task description',\n * {\n * once: false, // Should the task be executed only once? Default is true\n * destroyCondition: (ctx) => ctx.foo > 10, // Should the task be destroyed after execution? Default is undefined\n * },\n * );\n *\n * Cadenza.run(task, { foo: 5 }); // The task will not be destroyed and can still be executed\n * Cadenza.run(task, { foo: 10 }); // The task will not be destroyed and can still be executed\n * Cadenza.run(task, { foo: 20 }); // The task will be destroyed after execution and cannot be executed anymore\n * Cadenza.run(task, { foo: 30 }); // This will not be executed\n * ```\n *\n * A practical use case for ephemeral tasks is to resolve a promise upon some external event.\n * ```ts\n * const task = Cadenza.createTask('Confirm something', (ctx, emit) => {\n * return new Promise((resolve) => {\n * ctx.foo = uuid();\n *\n * Cadenza.createEphemeralTask(`Resolve promise of ${ctx.foo}`, (c) => {\n * console.log('My task executed with context:', ctx);\n * resolve(c);\n * }).doOn(`socket.confirmation_received:${ctx.foo}`);\n *\n * emit('this_domain.confirmation_requested', ctx);\n * });\n * });\n * ```\n */\n static createEphemeralTask(\n name: string,\n func: TaskFunction,\n description?: string,\n options: TaskOptions & EphemeralTaskOptions = {},\n ): EphemeralTask {\n this.bootstrap();\n return Cadenza.createEphemeralTask(name, func, description, options);\n }\n\n /**\n * Creates an ephemeral meta-task with the specified name, function, description, and options.\n * See {@link createEphemeralTask} and {@link createMetaTask} for more details.\n *\n * @param {string} name - The name of the task to be created.\n * @param {TaskFunction} func - The function to be executed as part of the task.\n * @param {string} [description] - An optional description of the task.\n * @param {TaskOptions & EphemeralTaskOptions} [options={}] - Additional options for configuring the task.\n * @return {EphemeralTask} The created ephemeral meta-task.\n */\n static createEphemeralMetaTask(\n name: string,\n func: TaskFunction,\n description?: string,\n options: TaskOptions & EphemeralTaskOptions = {},\n ): EphemeralTask {\n this.bootstrap();\n return Cadenza.createEphemeralMetaTask(name, func, description, options);\n }\n\n /**\n * Creates a new routine with the specified name, tasks, and an optional description.\n * Routines are named entry points to starting tasks and are registered in the GraphRegistry.\n * They are used to group tasks together and provide a high-level structure for organizing and managing the execution of a set of tasks.\n * See {@link GraphRoutine} for more information.\n *\n * @param {string} name - The name of the routine to create.\n * @param {Task[]} tasks - A list of tasks to include in the routine.\n * @param {string} [description=\"\"] - An optional description for the routine.\n * @return {GraphRoutine} A new instance of the GraphRoutine containing the specified tasks and description.\n *\n * @example\n * ```ts\n * const task1 = Cadenza.createTask(\"Task 1\", () => {});\n * const task2 = Cadenza.createTask(\"Task 2\", () => {});\n *\n * task1.then(task2);\n *\n * const routine = Cadenza.createRoutine(\"Some routine\", [task1]);\n *\n * Cadenza.run(routine);\n *\n * // Or, routines can be triggered by signals\n * routine.doOn(\"some.signal\");\n *\n * Cadenza.emit(\"some.signal\", {});\n * ```\n */\n static createRoutine(\n name: string,\n tasks: Task[],\n description: string = \"\",\n ): GraphRoutine {\n this.bootstrap();\n return Cadenza.createRoutine(name, tasks, description);\n }\n\n /**\n * Creates a meta routine with a given name, tasks, and optional description.\n * Routines are named entry points to starting tasks and are registered in the GraphRegistry.\n * They are used to group tasks together and provide a high-level structure for organizing and managing the execution of a set of tasks.\n * See {@link GraphRoutine} and {@link createRoutine} for more information.\n *\n * @param {string} name - The name of the routine to be created.\n * @param {Task[]} tasks - An array of tasks that the routine will consist of.\n * @param {string} [description=\"\"] - An optional description for the routine.\n * @return {GraphRoutine} A new instance of the `GraphRoutine` representing the created routine.\n */\n static createMetaRoutine(\n name: string,\n tasks: Task[],\n description: string = \"\",\n ): GraphRoutine {\n this.bootstrap();\n return Cadenza.createMetaRoutine(name, tasks, description);\n }\n\n static reset() {\n Cadenza.reset();\n this.serviceRegistry?.reset();\n this.isBootstrapped = false;\n this.serviceCreated = false;\n this.defaultDatabaseServiceName = null;\n this.warnedInvalidMetaIntentResponderKeys = new Set();\n this.hydratedInquiryResults = new Map();\n this.frontendSyncScheduled = false;\n }\n}\n","import { v4 as uuid } from \"uuid\";\nimport { GraphContext, InquiryOptions, Task } from \"@cadenza.io/core\";\nimport type {\n AnyObject,\n Schema,\n TaskResult,\n ThrottleTagGetter,\n} from \"@cadenza.io/core\";\nimport Cadenza from \"../../Cadenza\";\n\n/**\n * Represents a task that delegates execution of a routine to a remote system or service.\n * The `DeputyTask` serves as a proxy to perform and track the progress of a remote workflow.\n * It extends the `Task` class with additional delegation capabilities.\n *\n * Emits various meta-signals for monitoring delegation progress and resolution.\n */\nexport default class DeputyTask extends Task {\n readonly isDeputy: boolean = true;\n\n protected readonly remoteRoutineName: string;\n protected serviceName: string | undefined;\n\n registeredDeputyMap: boolean = false;\n\n /**\n * Constructs a new instance of the class with the specified parameters.\n *\n * @param {string} name - The name of the task.\n * @param {string} remoteRoutineName - The name of the remote routine to delegate tasks to.\n * @param {string | undefined} [serviceName=undefined] - The name of the service associated with the task.\n * @param {string} [description=\"\"] - A brief description of the task.\n * @param {number} [concurrency=0] - The concurrency level of the task.\n * @param {number} [timeout=0] - The timeout duration for the task.\n * @param {boolean} [register=true] - Whether the task should be registered in the system.\n * @param {boolean} [isUnique=false] - Whether the task is unique.\n * @param {boolean} [isMeta=false] - Whether the task is a meta task.\n * @param {boolean} [isSubMeta=false] - Whether the task is a sub-meta task.\n * @param {boolean} [isHidden=false] - Whether the task is hidden from the system.\n * @param {ThrottleTagGetter | undefined} [getTagCallback=undefined] - A callback function to retrieve throttle tags.\n * @param {SchemaDefinition | undefined} [inputSchema=undefined] - The input schema definition for the task.\n * @param {boolean} [validateInputContext=false] - Whether to validate the input context against the input schema.\n * @param {SchemaDefinition | undefined} [outputSchema=undefined] - The output schema definition for the task.\n * @param {boolean} [validateOutputContext=false] - Whether to validate the output context against the output schema.\n * @param {number} [retryCount=0] - The number of retries allowed for task execution.\n * @param {number} [retryDelay=0] - The initial delay between retries in milliseconds.\n * @param {number} [retryDelayMax=0] - The maximum retry delay in milliseconds.\n * @param {number} [retryDelayFactor=1] - The factor by which to increase the retry delay for subsequent retries.\n * @return {void} This constructor does not return a value.\n */\n constructor(\n name: string,\n remoteRoutineName: string,\n serviceName: string | undefined = undefined,\n description: string = \"\",\n concurrency: number = 0,\n timeout: number = 0,\n register: boolean = true,\n isUnique: boolean = false,\n isMeta: boolean = false,\n isSubMeta: boolean = false,\n isHidden: boolean = false,\n getTagCallback: ThrottleTagGetter | undefined = undefined,\n inputSchema: Schema | undefined = undefined,\n validateInputContext: boolean = false,\n outputSchema: Schema | undefined = undefined,\n validateOutputContext: boolean = false,\n retryCount: number = 0,\n retryDelay: number = 0,\n retryDelayMax: number = 0,\n retryDelayFactor: number = 1,\n ) {\n const taskFunction = (\n context: AnyObject,\n emit: (signal: string, ctx: AnyObject) => void,\n inquire: (\n inquiry: string,\n context: AnyObject,\n options: InquiryOptions,\n ) => Promise<AnyObject>,\n progressCallback: (progress: number) => void,\n ): Promise<TaskResult> => {\n return new Promise((resolve, reject) => {\n if (context.__metadata.__blockRemoteExecution) {\n reject(new Error(\"Blocked remote execution\"));\n return;\n }\n\n if (context.__metadata.__skipRemoteExecution) {\n resolve(context);\n return;\n }\n\n const processId = uuid();\n\n context.__metadata.__deputyExecId = processId;\n emit(\"meta.deputy.delegation_requested\", {\n ...context,\n });\n\n // Ephemeral meta-task for progress\n Cadenza.createEphemeralMetaTask(\n `On progress deputy ${this.remoteRoutineName}`,\n (ctx) => {\n if (ctx.progress) progressCallback(ctx.progress * ctx.weight);\n },\n `Ephemeral task for deputy process ${processId}`,\n {\n once: false,\n destroyCondition: (ctx: AnyObject) =>\n ctx.progress === 1 || ctx.progress === undefined,\n register: false,\n },\n ).doOn(\n `meta.socket_client.delegation_progress:${processId}`,\n `meta.socket_client.delegated:${processId}`,\n `meta.fetch.delegated:${processId}`,\n `meta.service_registry.load_balance_failed:${processId}`,\n );\n\n // Ephemeral meta-task for resolution\n Cadenza.createEphemeralMetaTask(\n `Resolve deputy ${this.remoteRoutineName}`,\n (responseCtx) => {\n if (responseCtx?.errored) {\n reject(new Error(responseCtx.__error));\n } else {\n // TODO clean up metadata\n delete responseCtx.__isDeputy;\n resolve(responseCtx);\n }\n },\n `Ephemeral resolver for deputy process ${processId}`,\n { register: false },\n ).doOn(\n `meta.socket_client.delegated:${processId}`,\n `meta.fetch.delegated:${processId}`,\n `meta.service_registry.load_balance_failed:${processId}`,\n );\n });\n };\n\n super(\n name,\n taskFunction,\n description,\n concurrency,\n timeout,\n register,\n isUnique,\n isMeta,\n isSubMeta,\n isHidden,\n getTagCallback,\n inputSchema,\n validateInputContext,\n outputSchema,\n validateOutputContext,\n retryCount,\n retryDelay,\n retryDelayMax,\n retryDelayFactor,\n );\n\n this.remoteRoutineName = remoteRoutineName;\n this.serviceName = serviceName;\n\n this.attachSignal(\"meta.deputy.delegation_requested\");\n\n this.emit(\"meta.deputy.created\", {\n localTaskName: this.name,\n localTaskVersion: this.version,\n remoteRoutineName: this.remoteRoutineName,\n serviceName: this.serviceName,\n communicationType: \"delegation\",\n });\n }\n\n /**\n * Executes the specified task function within the provided execution context.\n *\n * @param {GraphContext} context - The execution context containing methods and metadata for task execution.\n * @param {function(string, AnyObject): void} emit - A function for emitting signals with associated data during execution.\n * @param inquire\n * @param {function(number): void} progressCallback - A callback function to report progress updates during task processing.\n * @param {{ nodeId: string, routineExecId: string }} nodeData - Object containing identifiers for the node and routine execution.\n * @return {TaskResult} Returns the result of the task function execution.\n */\n execute(\n context: GraphContext,\n emit: (signal: string, ctx: AnyObject) => void,\n inquire: (\n inquiry: string,\n context: AnyObject,\n options: InquiryOptions,\n ) => Promise<AnyObject>,\n progressCallback: (progress: number) => void,\n nodeData: { nodeId: string; routineExecId: string },\n ): TaskResult {\n const ctx = context.getContext();\n const metadata = context.getMetadata();\n\n const deputyContext = {\n __timeout: this.timeout,\n __localTaskName: this.name,\n __localTaskVersion: this.version,\n __localServiceName: Cadenza.serviceRegistry.serviceName,\n __previousTaskExecutionId: nodeData.nodeId,\n __remoteRoutineName: this.remoteRoutineName,\n __serviceName: this.serviceName,\n __localRoutineExecId:\n metadata.__routineExecId ?? metadata.__metadata?.__routineExecId,\n __executionTraceId: metadata.__executionTraceId ?? null,\n __metadata: {\n ...metadata,\n __skipRemoteExecution:\n metadata.__skipRemoteExecution ?? ctx.__skipRemoteExecution ?? false,\n __blockRemoteExecution:\n metadata.__blockRemoteExecution ?? ctx.__blockRemoteExecution ?? false,\n __deputyTaskName: this.name,\n },\n ...ctx,\n };\n\n return this.taskFunction(deputyContext, emit, inquire, progressCallback);\n }\n}\n","import DeputyTask from \"./DeputyTask\";\nimport { GraphContext, InquiryOptions } from \"@cadenza.io/core\";\nimport type {\n AnyObject,\n Schema,\n TaskResult,\n ThrottleTagGetter,\n} from \"@cadenza.io/core\";\nimport { DbOperationPayload } from \"../../types/queryData\";\nimport Cadenza from \"../../Cadenza\";\n\n/**\n * Represents a specialized task for delegating database operations. Extends `DeputyTask`.\n * This class is designed to abstract database operation requests, delegating execution to a meta-layer system.\n */\nexport default class DatabaseTask extends DeputyTask {\n private readonly queryData: DbOperationPayload;\n\n /**\n * Constructs an instance of the class with the provided parameters, defining\n * various configuration options and behaviors for the task.\n *\n * @param {string} name - The unique name of the task.\n * @param {string} taskName - The specific name of the task.\n * @param {string | undefined} serviceName - The associated service name. Defaults to undefined.\n * @param {string} description - A brief description of the task. Defaults to an empty string.\n * @param {DbOperationPayload} queryData - The data payload for database operations.\n * @param {number} concurrency - The level of concurrency allowed. Defaults to 0.\n * @param {number} timeout - The timeout duration in milliseconds. Defaults to 0.\n * @param {boolean} register - A flag indicating whether to register the task. Defaults to true.\n * @param {boolean} isUnique - Indicates if the task instance is unique. Defaults to false.\n * @param {boolean} isMeta - Indicates if the task is meta. Defaults to false.\n * @param {boolean} isSubMeta - Indicates if the task is a sub-meta task. Defaults to false.\n * @param {boolean} isHidden - Indicates if the task is hidden. Defaults to false.\n * @param {ThrottleTagGetter | undefined} getTagCallback - A callback used for throttling. Defaults to undefined.\n * @param {SchemaDefinition | undefined} inputSchema - The schema definition for input validation. Defaults to undefined.\n * @param {boolean} validateInputContext - Whether to validate the input context. Defaults to false.\n * @param {SchemaDefinition | undefined} outputSchema - The schema definition for output validation. Defaults to undefined.\n * @param {boolean} validateOutputContext - Whether to validate the output context. Defaults to false.\n * @param {number} retryCount - The maximum number of retry attempts. Defaults to 0.\n * @param {number} retryDelay - The delay between retries in milliseconds. Defaults to 0.\n * @param {number} retryDelayMax - The maximum delay between retries in milliseconds. Defaults to 0.\n * @param {number} retryDelayFactor - The factor for exponential backoff. Defaults to 1.\n * @return {void}\n */\n constructor(\n name: string,\n taskName: string,\n serviceName: string | undefined = undefined,\n description: string = \"\",\n queryData: DbOperationPayload,\n concurrency: number = 0,\n timeout: number = 0,\n register: boolean = true,\n isUnique: boolean = false,\n isMeta: boolean = false,\n isSubMeta: boolean = false,\n isHidden: boolean = false,\n getTagCallback: ThrottleTagGetter | undefined = undefined,\n inputSchema: Schema | undefined = undefined,\n validateInputContext: boolean = false,\n outputSchema: Schema | undefined = undefined,\n validateOutputContext: boolean = false,\n retryCount: number = 0,\n retryDelay: number = 0,\n retryDelayMax: number = 0,\n retryDelayFactor: number = 1,\n ) {\n super(\n name,\n taskName,\n serviceName,\n description,\n concurrency,\n timeout,\n register,\n isUnique,\n isMeta,\n isSubMeta,\n isHidden,\n getTagCallback,\n inputSchema,\n validateInputContext,\n outputSchema,\n validateOutputContext,\n retryCount,\n retryDelay,\n retryDelayMax,\n retryDelayFactor,\n );\n this.queryData = queryData;\n }\n\n /**\n * Executes the specified task within the given context.\n *\n * @param {GraphContext} context - The execution context for the current task, which includes data and metadata required for processing.\n * @param {(signal: string, ctx: AnyObject) => void} emit - A function used to send signals or events during task execution.\n * @param inquire\n * @param {(progress: number) => void} progressCallback - A function to report execution progress as a percentage (0-100).\n * @param {{ nodeId: string; routineExecId: string }} nodeData - An object containing identifiers for the current node and routine execution.\n * @return {TaskResult} The result of the task execution.\n */\n execute(\n context: GraphContext,\n emit: (signal: string, ctx: AnyObject) => void,\n inquire: (\n inquiry: string,\n context: AnyObject,\n options: InquiryOptions,\n ) => Promise<AnyObject>,\n progressCallback: (progress: number) => void,\n nodeData: { nodeId: string; routineExecId: string },\n ): TaskResult {\n const ctx = context.getContext();\n const metadata = context.getMetadata();\n const dynamicQueryData = ctx.queryData ?? {};\n delete ctx.queryData;\n const nextQueryData: DbOperationPayload = {\n ...this.queryData,\n data: {\n ...ctx.data,\n },\n ...dynamicQueryData,\n };\n\n const deputyContext = {\n ...ctx,\n __localTaskName: this.name,\n __localTaskVersion: this.version,\n __localServiceName: Cadenza.serviceRegistry.serviceName,\n __previousTaskExecutionId: nodeData.nodeId,\n __remoteRoutineName: this.remoteRoutineName,\n __serviceName: this.serviceName,\n __executionTraceId: metadata.__executionTraceId ?? null,\n __localRoutineExecId:\n metadata.__routineExecId ?? metadata.__metadata?.__routineExecId,\n __metadata: {\n ...metadata,\n __skipRemoteExecution:\n metadata.__skipRemoteExecution ?? ctx.__skipRemoteExecution ?? false,\n __blockRemoteExecution:\n metadata.__blockRemoteExecution ?? ctx.__blockRemoteExecution ?? false,\n __deputyTaskName: this.name,\n },\n data: nextQueryData.data ?? ctx.data,\n batch: nextQueryData.batch ?? ctx.batch,\n transaction: nextQueryData.transaction ?? ctx.transaction,\n onConflict: Object.prototype.hasOwnProperty.call(nextQueryData, \"onConflict\")\n ? nextQueryData.onConflict\n : undefined,\n filter: nextQueryData.filter ?? ctx.filter,\n fields: nextQueryData.fields ?? ctx.fields,\n queryData: nextQueryData,\n };\n\n return this.taskFunction(deputyContext, emit, inquire, progressCallback);\n }\n}\n","import { GraphRoutine, Task } from \"@cadenza.io/core\";\nimport type { AnyObject } from \"@cadenza.io/core\";\nimport { v4 as uuid } from \"uuid\";\nimport Cadenza from \"../Cadenza\";\nimport { isBrowser } from \"../utils/environment\";\nimport { InquiryResponderDescriptor } from \"../types/inquiry\";\nimport type { ServiceInstanceDescriptor } from \"../types/serviceRegistry\";\nimport type {\n ServiceTransportDescriptor,\n ServiceTransportProtocol,\n ServiceTransportRole,\n} from \"../types/transport\";\nimport {\n isMetaIntentName,\n META_READINESS_INTENT,\n META_RUNTIME_STATUS_INTENT,\n META_RUNTIME_TRANSPORT_DIAGNOSTICS_INTENT,\n} from \"../utils/inquiry\";\nimport {\n getRouteableTransport,\n normalizeServiceInstanceDescriptor,\n} from \"../utils/serviceInstance\";\nimport {\n buildTransportClientKey,\n normalizeServiceTransportDescriptor,\n transportSupportsProtocol,\n} from \"../utils/transport\";\nimport { ensureDelegationContextMetadata } from \"../utils/delegation\";\nimport {\n evaluateDependencyReadiness,\n resolveServiceReadinessState,\n summarizeDependencyReadiness,\n type DependencyReadinessState,\n type ReadinessState,\n} from \"../utils/readiness\";\nimport {\n hasSignificantRuntimeStatusChange,\n resolveRuntimeStatus,\n runtimeStatusPriority,\n type RuntimeStatusSnapshot,\n type RuntimeStatusState,\n} from \"../utils/runtimeStatus\";\n\nconst META_SERVICE_REGISTRY_FULL_SYNC_INTENT =\n \"meta-service-registry-full-sync\";\nconst CADENZA_DB_GATHERED_SYNC_SIGNAL =\n \"global.meta.cadenza_db.gathered_sync_data\";\nconst META_GATHERED_SYNC_TRANSMISSION_RECONCILE_SIGNAL =\n \"meta.service_registry.gathered_sync_transmission_reconcile_requested\";\nconst META_RUNTIME_STATUS_HEARTBEAT_TICK_SIGNAL =\n \"meta.service_registry.runtime_status.heartbeat_tick\";\nconst META_RUNTIME_STATUS_MONITOR_TICK_SIGNAL =\n \"meta.service_registry.runtime_status.monitor_tick\";\nconst INTERNAL_RUNTIME_STATUS_TASK_NAMES = new Set([\n \"Track local routine start\",\n \"Track local routine end\",\n \"Start runtime status sharing intervals\",\n \"Broadcast runtime status\",\n \"Monitor dependee heartbeat freshness\",\n \"Resolve runtime status fallback inquiry\",\n \"Respond runtime status inquiry\",\n \"Respond readiness inquiry\",\n \"Collect distributed readiness\",\n \"Get status\",\n]);\n\nfunction buildServiceRegistryInsertQueryData(\n ctx: AnyObject,\n queryData: Record<string, unknown>,\n): Record<string, unknown> {\n const joinedContexts = Array.isArray((ctx as AnyObject).joinedContexts)\n ? ((ctx as AnyObject).joinedContexts as AnyObject[])\n : [];\n const getJoinedValue = (key: \"data\" | \"batch\" | \"__registrationData\") => {\n for (let index = joinedContexts.length - 1; index >= 0; index -= 1) {\n const joinedContext = joinedContexts[index];\n if (\n joinedContext &&\n typeof joinedContext === \"object\" &&\n (Object.prototype.hasOwnProperty.call(joinedContext, key) ||\n joinedContext[key] !== undefined)\n ) {\n return joinedContext[key];\n }\n }\n\n return undefined;\n };\n const registrationData =\n Object.prototype.hasOwnProperty.call(ctx, \"__registrationData\") &&\n ctx.__registrationData !== undefined\n ? ctx.__registrationData\n : getJoinedValue(\"__registrationData\");\n const existingQueryData =\n ctx.queryData && typeof ctx.queryData === \"object\" ? ctx.queryData : {};\n const nextQueryData: Record<string, unknown> = {\n ...existingQueryData,\n ...queryData,\n };\n if (!Object.prototype.hasOwnProperty.call(queryData, \"onConflict\")) {\n delete nextQueryData.onConflict;\n }\n const resolvedData =\n Object.prototype.hasOwnProperty.call(ctx, \"data\") || ctx.data !== undefined\n ? ctx.data\n : getJoinedValue(\"data\");\n const resolvedBatch =\n Object.prototype.hasOwnProperty.call(ctx, \"batch\") || ctx.batch !== undefined\n ? ctx.batch\n : getJoinedValue(\"batch\");\n const nextData =\n resolvedData !== undefined\n ? resolvedData && typeof resolvedData === \"object\"\n ? { ...resolvedData }\n : resolvedData\n : registrationData &&\n typeof registrationData === \"object\" &&\n !Array.isArray(registrationData)\n ? { ...registrationData }\n : registrationData;\n\n if (nextData !== undefined) {\n nextQueryData.data = nextData;\n }\n\n if (resolvedBatch !== undefined) {\n nextQueryData.batch = Array.isArray(resolvedBatch)\n ? resolvedBatch.map((row) =>\n row && typeof row === \"object\" ? { ...row } : row,\n )\n : resolvedBatch;\n }\n\n return nextQueryData;\n}\n\nfunction normalizeServiceRegistryInsertResult(\n tableName: string,\n ctx: AnyObject,\n queryData: Record<string, unknown>,\n rawResult: unknown,\n): unknown {\n if (!rawResult || typeof rawResult !== \"object\") {\n return rawResult;\n }\n\n const result = { ...(rawResult as AnyObject) };\n delete result.__resolverOriginalContext;\n delete result.__resolverQueryData;\n const normalizedQueryData =\n result.queryData && typeof result.queryData === \"object\"\n ? { ...(result.queryData as AnyObject) }\n : { ...queryData };\n const resolvedData =\n result.data ??\n normalizedQueryData.data ??\n queryData.data ??\n ctx.data ??\n ctx.__registrationData;\n\n if (resolvedData !== undefined && result.data === undefined) {\n result.data = resolvedData;\n }\n\n if (\n resolvedData !== undefined &&\n (normalizedQueryData.data === undefined || normalizedQueryData.data === null)\n ) {\n normalizedQueryData.data = resolvedData;\n }\n\n result.queryData = normalizedQueryData;\n\n if (tableName === \"service\") {\n const resolvedServiceName = String(\n ctx.__serviceName ??\n result.__serviceName ??\n (resolvedData as AnyObject | undefined)?.name ??\n (resolvedData as AnyObject | undefined)?.service_name ??\n \"\",\n ).trim();\n\n if (resolvedServiceName) {\n result.__serviceName = resolvedServiceName;\n }\n }\n\n const resolvedLocalServiceInstanceId = String(\n ctx.__serviceInstanceId ??\n (resolvedData as AnyObject | undefined)?.uuid ??\n (resolvedData as AnyObject | undefined)?.service_instance_id ??\n \"\",\n ).trim();\n\n if (resolvedLocalServiceInstanceId) {\n result.__serviceInstanceId = resolvedLocalServiceInstanceId;\n }\n\n if (\n tableName === \"service_instance\" ||\n tableName === \"service_instance_transport\"\n ) {\n const resolvedUuid = String(\n result.uuid ??\n (resolvedData as AnyObject | undefined)?.uuid ??\n ctx.__serviceInstanceId ??\n \"\",\n ).trim();\n\n if (resolvedUuid) {\n result.uuid = resolvedUuid;\n }\n }\n\n return result;\n}\n\nfunction summarizeTransportDescriptors(\n transports: Array<\n Pick<\n ServiceTransportDescriptor,\n \"uuid\" | \"serviceInstanceId\" | \"role\" | \"origin\" | \"protocols\"\n >\n >,\n) {\n return transports.map((transport) => ({\n uuid: transport.uuid,\n serviceInstanceId: transport.serviceInstanceId,\n role: transport.role,\n origin: transport.origin,\n protocols: transport.protocols,\n }));\n}\n\nfunction resolveServiceRegistryInsertTask(\n tableName: string,\n queryData: Record<string, unknown> = {},\n options: Record<string, unknown> = {},\n): Task {\n const remoteInsertTask = Cadenza.createCadenzaDBInsertTask(\n tableName,\n queryData,\n options,\n );\n\n const localExecutionRequestedSignal = `meta.service_registry.insert_execution_requested:${tableName}:local`;\n const remoteExecutionRequestedSignal = `meta.service_registry.insert_execution_requested:${tableName}:remote`;\n const executionResolvedSignal = `meta.service_registry.insert_execution_resolved:${tableName}`;\n const executionFailedSignal = `meta.service_registry.insert_execution_failed:${tableName}`;\n\n const createPrepareExecutionTask = (signalName: string) =>\n Cadenza.createMetaTask(\n `Prepare service registry insert execution for ${tableName} (${signalName})`,\n (ctx) => {\n const nextQueryData = buildServiceRegistryInsertQueryData(ctx, queryData);\n\n const delegationContext = ensureDelegationContextMetadata({\n ...ctx,\n data:\n nextQueryData.data !== undefined ? nextQueryData.data : ctx.data,\n batch:\n nextQueryData.batch !== undefined ? nextQueryData.batch : ctx.batch,\n onConflict:\n Object.prototype.hasOwnProperty.call(nextQueryData, \"onConflict\")\n ? nextQueryData.onConflict\n : undefined,\n transaction:\n nextQueryData.transaction !== undefined\n ? nextQueryData.transaction\n : ctx.transaction,\n queryData: nextQueryData,\n }) as AnyObject & {\n __deputyExecId: string;\n __metadata: AnyObject;\n };\n delegationContext.__metadata.__skipRemoteExecution =\n delegationContext.__metadata.__skipRemoteExecution ??\n delegationContext.__skipRemoteExecution ??\n false;\n delegationContext.__metadata.__blockRemoteExecution =\n delegationContext.__metadata.__blockRemoteExecution ??\n delegationContext.__blockRemoteExecution ??\n false;\n\n return {\n ...delegationContext,\n __resolverOriginalContext: {\n ...ctx,\n },\n __resolverQueryData: nextQueryData,\n };\n },\n `Prepares ${tableName} service-registry insert payloads for runner execution.`,\n {\n register: false,\n isHidden: true,\n },\n )\n .doOn(signalName)\n .emitsOnFail(executionFailedSignal);\n\n const prepareLocalExecutionTask = createPrepareExecutionTask(\n localExecutionRequestedSignal,\n );\n const prepareRemoteExecutionTask = createPrepareExecutionTask(\n remoteExecutionRequestedSignal,\n );\n\n const finalizeExecutionTask = Cadenza.createMetaTask(\n `Finalize service registry insert execution for ${tableName}`,\n (ctx, emit) => {\n if (!ctx.__resolverRequestId) {\n return false;\n }\n\n const normalized = normalizeServiceRegistryInsertResult(\n tableName,\n (ctx.__resolverOriginalContext as AnyObject) ?? ctx,\n (ctx.__resolverQueryData as Record<string, unknown>) ?? ctx.queryData ?? {},\n ctx,\n );\n\n if (!normalized || typeof normalized !== \"object\") {\n return normalized as any;\n }\n\n emit(executionResolvedSignal, normalized as AnyObject);\n return normalized;\n },\n `Normalizes ${tableName} service-registry insert results for resolver callers.`,\n {\n register: false,\n isHidden: true,\n },\n );\n\n const wiredLocalTaskNames = new Set<string>();\n const wireExecutionTarget = (targetTask: Task, prepareTask: Task) => {\n targetTask.then(finalizeExecutionTask).emitsOnFail(executionFailedSignal);\n prepareTask.then(targetTask);\n };\n\n wireExecutionTarget(remoteInsertTask, prepareRemoteExecutionTask);\n\n return Cadenza.createMetaTask(\n `Resolve service registry insert for ${tableName}`,\n (ctx, emit) =>\n new Promise((resolve) => {\n const resolverRequestId = uuid();\n\n Cadenza.createEphemeralMetaTask(\n `Resolve service registry insert execution for ${tableName} (${resolverRequestId})`,\n (resultCtx) => {\n if (resultCtx.__resolverRequestId !== resolverRequestId) {\n return false;\n }\n\n const normalizedResult = {\n ...resultCtx,\n };\n delete normalizedResult.__resolverRequestId;\n delete normalizedResult.__resolverOriginalContext;\n delete normalizedResult.__resolverQueryData;\n\n resolve(normalizedResult);\n return normalizedResult;\n },\n `Resolves signal-driven ${tableName} service-registry insert execution.`,\n {\n register: false,\n },\n ).doOn(executionResolvedSignal, executionFailedSignal);\n\n const localInsertTask = Cadenza.getLocalCadenzaDBInsertTask(tableName);\n const executionSignal = localInsertTask\n ? localExecutionRequestedSignal\n : remoteExecutionRequestedSignal;\n\n if (\n localInsertTask &&\n !wiredLocalTaskNames.has(localInsertTask.name)\n ) {\n wireExecutionTarget(localInsertTask, prepareLocalExecutionTask);\n wiredLocalTaskNames.add(localInsertTask.name);\n }\n\n emit(executionSignal, {\n ...ctx,\n __resolverRequestId: resolverRequestId,\n });\n }),\n `Resolves ${tableName} inserts through the local CadenzaDB task when available.`,\n options,\n );\n}\n\nfunction readPositiveIntegerEnv(name: string, fallback: number): number {\n if (typeof process === \"undefined\") {\n return fallback;\n }\n\n const raw = process.env?.[name];\n const parsed = Number(raw);\n if (!Number.isFinite(parsed)) {\n return fallback;\n }\n\n const normalized = Math.trunc(parsed);\n if (normalized <= 0) {\n return fallback;\n }\n\n return normalized;\n}\n\nexport interface DeputyDescriptor {\n serviceName: string;\n remoteRoutineName?: string;\n signalName?: string;\n localTaskName: string;\n communicationType: string;\n}\n\ninterface RemoteIntentDeputyDescriptor {\n key: string;\n intentName: string;\n serviceName: string;\n remoteTaskName: string;\n remoteTaskVersion: number;\n localTaskName: string;\n localTask: Task;\n}\n\ninterface RuntimeStatusReport {\n serviceName: string;\n serviceInstanceId: string;\n transportId?: string;\n transportRole?: ServiceTransportRole;\n transportOrigin?: string;\n transportProtocols?: ServiceTransportProtocol[];\n isFrontend?: boolean;\n reportedAt: string;\n state: RuntimeStatusState;\n acceptingWork: boolean;\n numberOfRunningGraphs: number;\n isActive: boolean;\n isNonResponsive: boolean;\n isBlocked: boolean;\n health?: AnyObject;\n}\n\ninterface RuntimeStatusFallbackRestDiagnostic {\n attempted: boolean;\n outcome:\n | \"instance_missing\"\n | \"fetch_unavailable\"\n | \"no_rest_transport\"\n | \"http_error\"\n | \"invalid_report\"\n | \"identity_mismatch\"\n | \"fetch_error\"\n | \"matched\";\n transport?: {\n uuid: string;\n role: ServiceTransportRole;\n origin: string;\n protocols: ServiceTransportProtocol[];\n clientCreated?: boolean;\n };\n responseStatus?: number;\n responseStatusText?: string;\n payloadServiceName?: string;\n payloadServiceInstanceId?: string;\n payloadKeys?: string[];\n error?: string;\n}\n\ninterface RuntimeStatusFallbackFailureDiagnostics {\n target: {\n serviceName: string;\n serviceInstanceId: string;\n };\n instance: {\n exists: boolean;\n runtimeState?: RuntimeStatusState;\n acceptingWork?: boolean;\n reportedAt?: string | null;\n isDatabase?: boolean;\n isFrontend?: boolean;\n isBootstrapPlaceholder?: boolean;\n transports: Array<{\n uuid: string;\n role: ServiceTransportRole;\n origin: string;\n protocols: ServiceTransportProtocol[];\n clientCreated?: boolean;\n }>;\n };\n directStatusCheck: RuntimeStatusFallbackRestDiagnostic;\n inquiry: {\n meta: AnyObject;\n reportTargets: Array<{\n serviceName?: string;\n serviceInstanceId?: string;\n transportId?: string;\n state?: RuntimeStatusState;\n acceptingWork?: boolean;\n reportedAt?: string;\n }>;\n };\n}\n\ninterface DependencyReadinessDetail {\n serviceName: string;\n serviceInstanceId: string;\n dependencyState: DependencyReadinessState;\n runtimeState: RuntimeStatusState;\n acceptingWork: boolean;\n missedHeartbeats: number;\n stale: boolean;\n blocked: boolean;\n reason:\n | \"missing\"\n | \"heartbeat-timeout\"\n | \"heartbeat-stale\"\n | \"runtime-unavailable\"\n | \"runtime-overloaded\"\n | \"runtime-degraded\"\n | \"runtime-healthy\";\n lastHeartbeatAt: string | null;\n reportedAt: string | null;\n}\n\ninterface ReadinessReport {\n serviceName: string;\n serviceInstanceId: string;\n reportedAt: string;\n readinessState: ReadinessState;\n runtimeState: RuntimeStatusState;\n acceptingWork: boolean;\n dependencySummary: {\n total: number;\n ready: number;\n degraded: number;\n overloaded: number;\n unavailable: number;\n stale: number;\n };\n dependencies?: DependencyReadinessDetail[];\n}\n\n/**\n * The ServiceRegistry class is a singleton that manages the registration and lifecycle of\n * service instances, deputies, and remote signals in a distributed service architecture.\n * It handles various tasks such as instance updates, remote signal registration,\n * service status synchronization, and error/event broadcasting.\n */\nexport default class ServiceRegistry {\n private static _instance: ServiceRegistry;\n public static get instance(): ServiceRegistry {\n if (!this._instance) this._instance = new ServiceRegistry();\n return this._instance;\n }\n\n private instances: Map<string, ServiceInstanceDescriptor[]> = new Map();\n private deputies: Map<string, DeputyDescriptor[]> = new Map();\n private remoteSignals: Map<string, Set<string>> = new Map();\n private remoteIntents: Map<string, Set<string>> = new Map();\n private gatheredSyncTransmissionServices: Set<string> = new Set();\n private remoteIntentDeputiesByKey: Map<string, RemoteIntentDeputyDescriptor> =\n new Map();\n private remoteIntentDeputiesByTask: Map<Task, RemoteIntentDeputyDescriptor> =\n new Map();\n private dependeesByService: Map<string, Set<string>> = new Map();\n private dependeeByInstance: Map<string, string> = new Map();\n private readinessDependeesByService: Map<string, Set<string>> = new Map();\n private readinessDependeeByInstance: Map<string, string> = new Map();\n private lastHeartbeatAtByInstance: Map<string, number> = new Map();\n private missedHeartbeatsByInstance: Map<string, number> = new Map();\n private runtimeStatusFallbackInFlightByInstance: Set<string> = new Set();\n private activeRoutineExecutionIds: Set<string> = new Set();\n private runtimeStatusHeartbeatStarted = false;\n private lastRuntimeStatusSnapshot: RuntimeStatusSnapshot | null = null;\n private readonly runtimeStatusHeartbeatIntervalMs = readPositiveIntegerEnv(\n \"CADENZA_RUNTIME_STATUS_HEARTBEAT_MS\",\n 30_000,\n );\n private readonly runtimeStatusMissThreshold = readPositiveIntegerEnv(\n \"CADENZA_RUNTIME_STATUS_MISSED_HEARTBEATS\",\n 3,\n );\n private readonly runtimeStatusFallbackTimeoutMs = readPositiveIntegerEnv(\n \"CADENZA_RUNTIME_STATUS_FALLBACK_TIMEOUT_MS\",\n 1_500,\n );\n private readonly degradedGraphThreshold = readPositiveIntegerEnv(\n \"CADENZA_RUNTIME_STATUS_DEGRADED_GRAPH_THRESHOLD\",\n 10,\n );\n private readonly overloadedGraphThreshold = readPositiveIntegerEnv(\n \"CADENZA_RUNTIME_STATUS_OVERLOADED_GRAPH_THRESHOLD\",\n 20,\n );\n serviceName: string | null = null;\n serviceInstanceId: string | null = null;\n numberOfRunningGraphs: number = 0;\n useSocket: boolean = false;\n retryCount: number = 3;\n isFrontend: boolean = false;\n\n handleInstanceUpdateTask: Task;\n handleTransportUpdateTask: Task;\n handleGlobalSignalRegistrationTask: Task;\n handleGlobalIntentRegistrationTask: Task;\n reconcileGatheredSyncTransmissionsTask: Task;\n handleSocketStatusUpdateTask: Task;\n fullSyncTask: GraphRoutine | Task;\n getAllInstances: Task;\n doForEachInstance: Task;\n deleteInstance: Task;\n getBalancedInstance: Task;\n getInstanceById: Task;\n getInstancesByServiceName: Task;\n handleDeputyRegistrationTask: Task;\n getStatusTask: Task;\n insertServiceTask: Task;\n insertServiceInstanceTask: Task;\n insertServiceTransportTask: Task;\n handleServiceNotRespondingTask: Task;\n handleServiceHandshakeTask: Task;\n collectTransportDiagnosticsTask: Task;\n collectReadinessTask: Task;\n\n private buildRemoteIntentDeputyKey(map: {\n intentName: string;\n serviceName: string;\n taskName: string;\n taskVersion?: number;\n }): string {\n return `${map.intentName}|${map.serviceName}|${map.taskName}|${map.taskVersion ?? 1}`;\n }\n\n private readArrayPayload(\n ctx: AnyObject,\n keys: string[],\n ): Array<Record<string, unknown>> {\n for (const key of keys) {\n const value = (ctx as any)?.[key];\n if (Array.isArray(value)) {\n return value as Array<Record<string, unknown>>;\n }\n }\n\n if (Array.isArray((ctx as any)?.rows)) {\n return (ctx as any).rows as Array<Record<string, unknown>>;\n }\n\n if (Array.isArray((ctx as any)?.data)) {\n return (ctx as any).data as Array<Record<string, unknown>>;\n }\n\n return [];\n }\n\n private normalizeSignalMaps(ctx: AnyObject): Array<{\n signalName: string;\n serviceName: string;\n isGlobal: boolean;\n deleted?: boolean;\n }> {\n return this.readArrayPayload(ctx, [\n \"signalToTaskMaps\",\n \"signal_to_task_maps\",\n \"signalToTaskMap\",\n \"signal_to_task_map\",\n ])\n .map((map) => ({\n signalName: String(\n map.signalName ?? map.signal_name ?? \"\",\n ).trim(),\n serviceName: String(\n map.serviceName ?? map.service_name ?? \"\",\n ).trim(),\n isGlobal: Boolean(map.isGlobal ?? map.is_global ?? false),\n deleted: Boolean(map.deleted),\n }))\n .filter((map) => map.signalName && map.serviceName);\n }\n\n private normalizeIntentMaps(ctx: AnyObject): Array<{\n intentName: string;\n serviceName: string;\n taskName: string;\n taskVersion: number;\n deleted?: boolean;\n }> {\n const arrayPayload = this.readArrayPayload(ctx, [\n \"intentToTaskMaps\",\n \"intent_to_task_maps\",\n \"intentToTaskMap\",\n \"intent_to_task_map\",\n ]);\n\n if (arrayPayload.length > 0) {\n return arrayPayload\n .map((m: any) => ({\n intentName: m.intentName ?? m.intent_name,\n serviceName: m.serviceName ?? m.service_name,\n taskName: m.taskName ?? m.task_name,\n taskVersion: m.taskVersion ?? m.task_version ?? 1,\n deleted: !!m.deleted,\n }))\n .filter((m: any) => m.intentName && m.serviceName && m.taskName);\n }\n\n const single =\n (ctx as any).intentToTaskMap ??\n (ctx as any).intent_to_task_map ??\n (ctx as any).data ??\n ((ctx as any).intentName ? ctx : undefined);\n\n if (!single) return [];\n\n const normalized = {\n intentName: single.intentName ?? single.intent_name,\n serviceName: single.serviceName ?? single.service_name,\n taskName: single.taskName ?? single.task_name,\n taskVersion: single.taskVersion ?? single.task_version ?? 1,\n deleted: !!single.deleted,\n };\n\n if (!normalized.intentName || !normalized.serviceName || !normalized.taskName)\n return [];\n\n return [normalized];\n }\n\n private normalizeServiceInstancesFromSync(\n ctx: AnyObject,\n ): ServiceInstanceDescriptor[] {\n const rawTransports = this.readArrayPayload(ctx, [\n \"serviceInstanceTransports\",\n \"service_instance_transports\",\n \"serviceInstanceTransport\",\n \"service_instance_transport\",\n ])\n .map((transport) => normalizeServiceTransportDescriptor(transport))\n .filter(\n (transport): transport is ServiceTransportDescriptor =>\n !!transport && !transport.deleted,\n );\n\n const transportsByInstance = new Map<string, ServiceTransportDescriptor[]>();\n for (const transport of rawTransports) {\n if (!transportsByInstance.has(transport.serviceInstanceId)) {\n transportsByInstance.set(transport.serviceInstanceId, []);\n }\n\n transportsByInstance.get(transport.serviceInstanceId)!.push(transport);\n }\n\n return this.readArrayPayload(ctx, [\n \"serviceInstances\",\n \"service_instances\",\n \"serviceInstance\",\n \"service_instance\",\n ])\n .map((instance: AnyObject) =>\n normalizeServiceInstanceDescriptor({\n ...instance,\n transports:\n Array.isArray((instance as any)?.transports) &&\n (instance as any).transports.length > 0\n ? (instance as any).transports\n : transportsByInstance.get(\n String(\n (instance as any)?.uuid ??\n (instance as any)?.serviceInstanceId ??\n (instance as any)?.service_instance_id ??\n \"\",\n ).trim(),\n ) ?? [],\n }),\n )\n .filter(\n (instance: ServiceInstanceDescriptor | null): instance is ServiceInstanceDescriptor =>\n !!instance &&\n !!instance.isActive &&\n !instance.isNonResponsive &&\n !instance.isBlocked,\n );\n }\n\n private shouldReconcileGatheredSyncTransmissions(): boolean {\n return this.serviceName === \"CadenzaDB\";\n }\n\n private collectGatheredSyncTransmissionRecipients(\n ctx: AnyObject,\n ): Set<string> {\n const recipients = new Set<string>();\n const addRecipient = (serviceName: unknown) => {\n const normalizedServiceName = String(serviceName ?? \"\").trim();\n if (\n !normalizedServiceName ||\n normalizedServiceName === this.serviceName\n ) {\n return;\n }\n\n recipients.add(normalizedServiceName);\n };\n\n addRecipient(ctx.serviceName ?? ctx.__serviceName);\n\n for (const instance of this.normalizeServiceInstancesFromSync(ctx)) {\n addRecipient(instance.serviceName);\n }\n\n for (const [serviceName, instances] of this.instances.entries()) {\n if (!instances?.length) {\n continue;\n }\n\n addRecipient(serviceName);\n }\n\n return recipients;\n }\n\n private reconcileGatheredSyncTransmissions(ctx: AnyObject, emit: any): boolean {\n if (!this.shouldReconcileGatheredSyncTransmissions()) {\n return false;\n }\n\n const desiredRecipients =\n this.collectGatheredSyncTransmissionRecipients(ctx);\n const createdRecipients: string[] = [];\n\n for (const serviceName of desiredRecipients) {\n if (this.gatheredSyncTransmissionServices.has(serviceName)) {\n continue;\n }\n\n Cadenza.createSignalTransmissionTask(\n CADENZA_DB_GATHERED_SYNC_SIGNAL,\n serviceName,\n );\n this.gatheredSyncTransmissionServices.add(serviceName);\n createdRecipients.push(serviceName);\n }\n\n for (const serviceName of Array.from(this.gatheredSyncTransmissionServices)) {\n if (desiredRecipients.has(serviceName)) {\n continue;\n }\n\n Cadenza.get(\n `Transmit signal: ${CADENZA_DB_GATHERED_SYNC_SIGNAL} to ${serviceName}`,\n )?.destroy();\n this.gatheredSyncTransmissionServices.delete(serviceName);\n }\n\n if (\n createdRecipients.length > 0 &&\n ctx.__signalName === CADENZA_DB_GATHERED_SYNC_SIGNAL\n ) {\n emit(\"meta.cadenza_db.sync_tick\", {\n __syncing: true,\n __reason: \"gathered_sync_transmissions_reconciled\",\n });\n }\n\n return (\n createdRecipients.length > 0 ||\n this.gatheredSyncTransmissionServices.size > 0\n );\n }\n\n private registerRemoteIntentDeputy(map: {\n intentName: string;\n serviceName: string;\n taskName: string;\n taskVersion: number;\n }) {\n if (!this.serviceName || map.serviceName === this.serviceName) {\n return;\n }\n\n const key = this.buildRemoteIntentDeputyKey(map);\n if (this.remoteIntentDeputiesByKey.has(key)) {\n return;\n }\n\n const deputyTaskName = `Inquire ${map.intentName} via ${map.serviceName} (${map.taskName} v${map.taskVersion})`;\n\n const deputyTask = isMetaIntentName(map.intentName)\n ? Cadenza.createMetaDeputyTask(map.taskName, map.serviceName, {\n register: false,\n isHidden: true,\n retryCount: 1,\n retryDelay: 50,\n retryDelayFactor: 1.2,\n })\n : Cadenza.createDeputyTask(map.taskName, map.serviceName, {\n register: false,\n isHidden: true,\n retryCount: 1,\n retryDelay: 50,\n retryDelayFactor: 1.2,\n });\n\n deputyTask.respondsTo(map.intentName);\n\n if (!this.remoteIntents.has(map.serviceName)) {\n this.remoteIntents.set(map.serviceName, new Set());\n }\n this.remoteIntents.get(map.serviceName)!.add(map.intentName);\n\n const descriptor: RemoteIntentDeputyDescriptor = {\n key,\n intentName: map.intentName,\n serviceName: map.serviceName,\n remoteTaskName: map.taskName,\n remoteTaskVersion: map.taskVersion,\n localTaskName: deputyTask.name || deputyTaskName,\n localTask: deputyTask,\n };\n\n this.remoteIntentDeputiesByKey.set(key, descriptor);\n this.remoteIntentDeputiesByTask.set(deputyTask, descriptor);\n }\n\n private unregisterRemoteIntentDeputy(map: {\n intentName: string;\n serviceName: string;\n taskName: string;\n taskVersion?: number;\n }) {\n const key = this.buildRemoteIntentDeputyKey(map);\n const descriptor = this.remoteIntentDeputiesByKey.get(key);\n if (!descriptor) {\n return;\n }\n\n const task = descriptor.localTask;\n if (task) {\n Cadenza.inquiryBroker.unsubscribe(descriptor.intentName, task);\n task.destroy();\n }\n\n this.remoteIntentDeputiesByTask.delete(descriptor.localTask);\n this.remoteIntentDeputiesByKey.delete(key);\n\n this.remoteIntents.get(descriptor.serviceName)?.delete(descriptor.intentName);\n if (!this.remoteIntents.get(descriptor.serviceName)?.size) {\n this.remoteIntents.delete(descriptor.serviceName);\n }\n\n const deputies = this.deputies.get(descriptor.serviceName);\n if (deputies) {\n this.deputies.set(\n descriptor.serviceName,\n deputies.filter((d) => d.localTaskName !== descriptor.localTaskName),\n );\n\n if (this.deputies.get(descriptor.serviceName)?.length === 0) {\n this.deputies.delete(descriptor.serviceName);\n }\n }\n }\n\n public getInquiryResponderDescriptor(task: Task): InquiryResponderDescriptor {\n const remote = this.remoteIntentDeputiesByTask.get(task);\n\n if (remote) {\n return {\n isRemote: true,\n serviceName: remote.serviceName,\n taskName: remote.remoteTaskName,\n taskVersion: remote.remoteTaskVersion,\n localTaskName: remote.localTaskName,\n };\n }\n\n return {\n isRemote: false,\n serviceName: this.serviceName ?? \"UnknownService\",\n taskName: task.name,\n taskVersion: task.version,\n localTaskName: task.name,\n };\n }\n\n private getInstance(serviceName: string, instanceId: string) {\n return this.instances\n .get(serviceName)\n ?.find((instance) => instance.uuid === instanceId);\n }\n\n private getLocalInstance() {\n if (!this.serviceName || !this.serviceInstanceId) {\n return undefined;\n }\n\n return this.getInstance(this.serviceName, this.serviceInstanceId);\n }\n\n private summarizeTransportForDebug(\n transport: ServiceTransportDescriptor | undefined,\n ) {\n if (!transport) {\n return undefined;\n }\n\n return {\n uuid: transport.uuid,\n role: transport.role,\n origin: transport.origin,\n protocols: transport.protocols,\n clientCreated: transport.clientCreated,\n };\n }\n\n private summarizeInstanceForRuntimeStatusFallback(\n instance: ServiceInstanceDescriptor | undefined,\n ): RuntimeStatusFallbackFailureDiagnostics[\"instance\"] {\n return {\n exists: Boolean(instance),\n runtimeState: instance?.runtimeState,\n acceptingWork: instance?.acceptingWork,\n reportedAt: instance?.reportedAt ?? null,\n isDatabase: instance?.isDatabase,\n isFrontend: instance?.isFrontend,\n isBootstrapPlaceholder: instance?.isBootstrapPlaceholder,\n transports: (instance?.transports ?? []).map((transport) => ({\n uuid: transport.uuid,\n role: transport.role,\n origin: transport.origin,\n protocols: transport.protocols,\n clientCreated: transport.clientCreated,\n })),\n };\n }\n\n private summarizeRuntimeStatusInquiryReports(inquiryResult: AnyObject) {\n const reports = Array.isArray(inquiryResult.runtimeStatusReports)\n ? inquiryResult.runtimeStatusReports\n : [];\n\n return reports.map((candidate) => {\n const normalized = this.normalizeRuntimeStatusReport(candidate);\n if (normalized) {\n return {\n serviceName: normalized.serviceName,\n serviceInstanceId: normalized.serviceInstanceId,\n transportId: normalized.transportId,\n state: normalized.state,\n acceptingWork: normalized.acceptingWork,\n reportedAt: normalized.reportedAt,\n };\n }\n\n const raw =\n candidate && typeof candidate === \"object\"\n ? (candidate as Record<string, unknown>)\n : {};\n const rawState: RuntimeStatusState | undefined =\n raw.state === \"healthy\" ||\n raw.state === \"degraded\" ||\n raw.state === \"overloaded\" ||\n raw.state === \"unavailable\"\n ? raw.state\n : undefined;\n\n return {\n serviceName:\n typeof raw.serviceName === \"string\"\n ? raw.serviceName\n : typeof raw.__serviceName === \"string\"\n ? raw.__serviceName\n : undefined,\n serviceInstanceId:\n typeof raw.serviceInstanceId === \"string\"\n ? raw.serviceInstanceId\n : typeof raw.__serviceInstanceId === \"string\"\n ? raw.__serviceInstanceId\n : undefined,\n transportId:\n typeof raw.transportId === \"string\"\n ? raw.transportId\n : typeof raw.serviceTransportId === \"string\"\n ? raw.serviceTransportId\n : undefined,\n state: rawState,\n acceptingWork:\n typeof raw.acceptingWork === \"boolean\" ? raw.acceptingWork : undefined,\n reportedAt:\n typeof raw.reportedAt === \"string\" ? raw.reportedAt : undefined,\n };\n });\n }\n\n private createRuntimeStatusFallbackError(\n message: string,\n diagnostics: RuntimeStatusFallbackFailureDiagnostics,\n ): Error & { runtimeStatusFallback: RuntimeStatusFallbackFailureDiagnostics } {\n return Object.assign(new Error(message), {\n runtimeStatusFallback: diagnostics,\n });\n }\n\n public resolveLocalStatusCheck(ctx: AnyObject = {}) {\n if (!this.serviceName) {\n return {\n __status: \"error\",\n __error: \"No service name defined\",\n errored: true,\n };\n }\n\n if (!this.serviceInstanceId) {\n return {\n __status: \"error\",\n __error: \"No service instance id defined\",\n errored: true,\n };\n }\n\n const report = this.buildLocalRuntimeStatusReport(\"full\");\n if (!report) {\n return {\n ...ctx,\n __status: \"error\",\n __error: \"No local service instance available for status check\",\n errored: true,\n };\n }\n\n return {\n ...ctx,\n __status: \"ok\",\n __serviceName: report.serviceName,\n __serviceInstanceId: report.serviceInstanceId,\n __numberOfRunningGraphs: report.numberOfRunningGraphs,\n __health: report.health ?? {},\n __active: report.isActive,\n reportedAt: report.reportedAt,\n serviceName: report.serviceName,\n serviceInstanceId: report.serviceInstanceId,\n numberOfRunningGraphs: report.numberOfRunningGraphs,\n health: report.health ?? {},\n isActive: report.isActive,\n isNonResponsive: report.isNonResponsive,\n isBlocked: report.isBlocked,\n state: report.state,\n acceptingWork: report.acceptingWork,\n };\n }\n\n private resolveTransportProtocolOrder(\n ctx: AnyObject,\n ): ServiceTransportProtocol[] {\n const explicit =\n ctx.__preferredTransportProtocol === \"rest\" ||\n ctx.__preferredTransportProtocol === \"socket\"\n ? ctx.__preferredTransportProtocol\n : undefined;\n\n const preferred = explicit ?? (this.useSocket ? \"socket\" : \"rest\");\n const fallback = preferred === \"socket\" ? \"rest\" : \"socket\";\n\n return [preferred, fallback];\n }\n\n private selectTransportForInstance(\n instance: ServiceInstanceDescriptor,\n ctx: AnyObject,\n role: ServiceTransportRole = this.getRoutingTransportRole(),\n ): ServiceTransportDescriptor | undefined {\n for (const protocol of this.resolveTransportProtocolOrder(ctx)) {\n const transport = this.getRouteableTransport(instance, protocol, role);\n if (transport) {\n return transport;\n }\n }\n\n return undefined;\n }\n\n private getRoutingTransportRole(): ServiceTransportRole {\n return this.isFrontend ? \"public\" : \"internal\";\n }\n\n private getTransportById(\n instance: ServiceInstanceDescriptor,\n transportId: string,\n ): ServiceTransportDescriptor | undefined {\n return instance.transports.find((transport) => transport.uuid === transportId);\n }\n\n private getRouteableTransport(\n instance: ServiceInstanceDescriptor,\n protocol?: ServiceTransportProtocol,\n role: ServiceTransportRole = this.getRoutingTransportRole(),\n ): ServiceTransportDescriptor | undefined {\n return getRouteableTransport(instance, role, protocol);\n }\n\n private getTransportClientKey(\n instance: ServiceInstanceDescriptor,\n protocol?: ServiceTransportProtocol,\n role: ServiceTransportRole = this.getRoutingTransportRole(),\n ): string | null {\n const transport = this.getRouteableTransport(instance, protocol, role);\n if (!transport) {\n return null;\n }\n\n return buildTransportClientKey(transport);\n }\n\n private resolveCommunicationTypesForService(serviceName: string): string[] {\n const communicationTypes = Array.from(\n new Set(\n this.deputies\n .get(serviceName)\n ?.map((descriptor) => descriptor.communicationType) ?? [],\n ),\n );\n\n if (\n !communicationTypes.includes(\"signal\") &&\n this.remoteSignals.has(serviceName)\n ) {\n communicationTypes.push(\"signal\");\n }\n\n return communicationTypes;\n }\n\n private ensureDependeeClientForInstance(\n instance: ServiceInstanceDescriptor,\n emit: (signal: string, ctx: AnyObject) => void,\n ctx?: AnyObject,\n ): boolean {\n if (\n !instance ||\n instance.uuid === this.serviceInstanceId ||\n instance.isFrontend ||\n !instance.isActive ||\n instance.isNonResponsive ||\n instance.isBlocked\n ) {\n return false;\n }\n\n if (\n !this.deputies.has(instance.serviceName) &&\n !this.remoteIntents.has(instance.serviceName) &&\n !this.remoteSignals.has(instance.serviceName)\n ) {\n return false;\n }\n\n const transport = this.selectTransportForInstance(\n instance,\n ctx ?? {},\n this.getRoutingTransportRole(),\n );\n\n if (!transport || this.hasTransportClientCreated(instance, transport.uuid)) {\n return false;\n }\n\n emit(\"meta.service_registry.dependee_registered\", {\n serviceName: instance.serviceName,\n serviceInstanceId: instance.uuid,\n serviceTransportId: transport.uuid,\n serviceOrigin: transport.origin,\n transportProtocols: transport.protocols,\n communicationTypes: this.resolveCommunicationTypesForService(\n instance.serviceName,\n ),\n });\n this.markTransportClientCreated(instance, transport.uuid);\n return true;\n }\n\n private ensureDependeeClientsForService(\n serviceName: string,\n emit: (signal: string, ctx: AnyObject) => void,\n ctx?: AnyObject,\n ): void {\n for (const instance of this.instances.get(serviceName) ?? []) {\n this.ensureDependeeClientForInstance(instance, emit, ctx);\n }\n }\n\n private hasTransportClientCreated(\n instance: ServiceInstanceDescriptor,\n transportId: string,\n ): boolean {\n return (instance.clientCreatedTransportIds ?? []).includes(transportId);\n }\n\n private markTransportClientCreated(\n instance: ServiceInstanceDescriptor,\n transportId: string,\n ): void {\n if (!instance.clientCreatedTransportIds) {\n instance.clientCreatedTransportIds = [];\n }\n\n if (!instance.clientCreatedTransportIds.includes(transportId)) {\n instance.clientCreatedTransportIds.push(transportId);\n }\n }\n\n private registerDependee(\n serviceName: string,\n serviceInstanceId: string,\n options: {\n requiredForReadiness?: boolean;\n } = {},\n ) {\n if (!serviceName || !serviceInstanceId) {\n return;\n }\n\n if (!this.dependeesByService.has(serviceName)) {\n this.dependeesByService.set(serviceName, new Set());\n }\n\n this.dependeesByService.get(serviceName)!.add(serviceInstanceId);\n this.dependeeByInstance.set(serviceInstanceId, serviceName);\n\n if (options.requiredForReadiness) {\n if (!this.readinessDependeesByService.has(serviceName)) {\n this.readinessDependeesByService.set(serviceName, new Set());\n }\n this.readinessDependeesByService.get(serviceName)!.add(serviceInstanceId);\n this.readinessDependeeByInstance.set(serviceInstanceId, serviceName);\n }\n\n this.lastHeartbeatAtByInstance.set(serviceInstanceId, Date.now());\n this.missedHeartbeatsByInstance.set(serviceInstanceId, 0);\n }\n\n private unregisterDependee(serviceInstanceId: string, serviceName?: string) {\n const dependeeServiceName =\n serviceName ?? this.dependeeByInstance.get(serviceInstanceId);\n if (dependeeServiceName) {\n this.dependeesByService.get(dependeeServiceName)?.delete(serviceInstanceId);\n if (!this.dependeesByService.get(dependeeServiceName)?.size) {\n this.dependeesByService.delete(dependeeServiceName);\n }\n }\n\n this.dependeeByInstance.delete(serviceInstanceId);\n const readinessDependeeServiceName =\n serviceName ?? this.readinessDependeeByInstance.get(serviceInstanceId);\n if (readinessDependeeServiceName) {\n this.readinessDependeesByService\n .get(readinessDependeeServiceName)\n ?.delete(serviceInstanceId);\n if (!this.readinessDependeesByService.get(readinessDependeeServiceName)?.size) {\n this.readinessDependeesByService.delete(readinessDependeeServiceName);\n }\n }\n\n this.readinessDependeeByInstance.delete(serviceInstanceId);\n this.lastHeartbeatAtByInstance.delete(serviceInstanceId);\n this.missedHeartbeatsByInstance.delete(serviceInstanceId);\n this.runtimeStatusFallbackInFlightByInstance.delete(serviceInstanceId);\n }\n\n private reconcileBootstrapPlaceholderInstance(\n serviceName: string,\n resolvedInstanceId: string,\n emit: (signalName: string, ctx: AnyObject) => void,\n ) {\n const instances = this.instances.get(serviceName);\n if (!instances?.length) {\n return;\n }\n\n const resolvedInstance = instances.find(\n (instance) => instance.uuid === resolvedInstanceId,\n );\n const frontendRoutingRole = this.isFrontend\n ? this.getRoutingTransportRole()\n : null;\n\n const placeholders = instances.filter(\n (instance) =>\n instance.uuid !== resolvedInstanceId && instance.isBootstrapPlaceholder,\n );\n\n if (!placeholders.length) {\n return;\n }\n\n for (const placeholder of placeholders) {\n const wasDependee = this.dependeeByInstance.has(placeholder.uuid);\n const requiredForReadiness = this.readinessDependeeByInstance.has(\n placeholder.uuid,\n );\n const preservedTransportIds = new Set<string>();\n\n if (resolvedInstance && frontendRoutingRole) {\n const resolvedHasFrontendRoute = resolvedInstance.transports.some(\n (transport) => transport.role === frontendRoutingRole && !transport.deleted,\n );\n\n if (!resolvedHasFrontendRoute) {\n const transportsToPreserve = placeholder.transports.filter(\n (transport) =>\n transport.role === frontendRoutingRole && !transport.deleted,\n );\n\n for (const transport of transportsToPreserve) {\n if (\n resolvedInstance.transports.some(\n (existingTransport) =>\n existingTransport.role === transport.role &&\n existingTransport.origin === transport.origin,\n )\n ) {\n continue;\n }\n\n resolvedInstance.transports.push({\n ...transport,\n serviceInstanceId: resolvedInstanceId,\n });\n preservedTransportIds.add(transport.uuid);\n }\n }\n }\n\n for (const transport of placeholder.transports) {\n if (preservedTransportIds.has(transport.uuid)) {\n continue;\n }\n const transportKey = buildTransportClientKey(transport);\n emit(`meta.socket_shutdown_requested:${transportKey}`, {});\n emit(`meta.fetch.destroy_requested:${transportKey}`, {});\n }\n\n this.unregisterDependee(placeholder.uuid, serviceName);\n\n if (wasDependee) {\n this.registerDependee(serviceName, resolvedInstanceId, {\n requiredForReadiness,\n });\n }\n }\n\n this.instances.set(\n serviceName,\n instances.filter((instance) => !instance.isBootstrapPlaceholder),\n );\n }\n\n private adoptBootstrapPlaceholderInstanceId(\n serviceName: string,\n placeholderInstanceId: string,\n resolvedInstanceId: string,\n ): ServiceInstanceDescriptor | undefined {\n if (!serviceName || !placeholderInstanceId || !resolvedInstanceId) {\n return undefined;\n }\n\n const instances = this.instances.get(serviceName);\n if (!instances?.length) {\n return undefined;\n }\n\n const resolvedInstance = instances.find(\n (instance) => instance.uuid === resolvedInstanceId,\n );\n if (resolvedInstance) {\n return resolvedInstance;\n }\n\n const placeholder = instances.find(\n (instance) =>\n instance.uuid === placeholderInstanceId && instance.isBootstrapPlaceholder,\n );\n if (!placeholder) {\n return undefined;\n }\n\n const wasDependee = this.dependeeByInstance.has(placeholderInstanceId);\n const dependeeServiceName =\n this.dependeeByInstance.get(placeholderInstanceId) ?? serviceName;\n const requiredForReadiness = this.readinessDependeeByInstance.has(\n placeholderInstanceId,\n );\n const lastHeartbeatAt =\n this.lastHeartbeatAtByInstance.get(placeholderInstanceId) ?? Date.now();\n const missedHeartbeats =\n this.missedHeartbeatsByInstance.get(placeholderInstanceId) ?? 0;\n const inFlight = this.runtimeStatusFallbackInFlightByInstance.has(\n placeholderInstanceId,\n );\n\n this.dependeeByInstance.delete(placeholderInstanceId);\n this.readinessDependeeByInstance.delete(placeholderInstanceId);\n this.lastHeartbeatAtByInstance.delete(placeholderInstanceId);\n this.missedHeartbeatsByInstance.delete(placeholderInstanceId);\n this.runtimeStatusFallbackInFlightByInstance.delete(placeholderInstanceId);\n\n placeholder.uuid = resolvedInstanceId;\n placeholder.isBootstrapPlaceholder = false;\n placeholder.transports = placeholder.transports.map((transport) => ({\n ...transport,\n serviceInstanceId: resolvedInstanceId,\n }));\n\n if (wasDependee) {\n this.dependeeByInstance.set(resolvedInstanceId, dependeeServiceName);\n if (this.dependeesByService.has(dependeeServiceName)) {\n this.dependeesByService.get(dependeeServiceName)!.delete(\n placeholderInstanceId,\n );\n this.dependeesByService.get(dependeeServiceName)!.add(resolvedInstanceId);\n }\n this.lastHeartbeatAtByInstance.set(resolvedInstanceId, lastHeartbeatAt);\n this.missedHeartbeatsByInstance.set(resolvedInstanceId, missedHeartbeats);\n }\n\n if (requiredForReadiness) {\n this.readinessDependeeByInstance.set(resolvedInstanceId, serviceName);\n if (this.readinessDependeesByService.has(serviceName)) {\n this.readinessDependeesByService.get(serviceName)!.delete(\n placeholderInstanceId,\n );\n this.readinessDependeesByService.get(serviceName)!.add(resolvedInstanceId);\n }\n }\n\n if (inFlight) {\n this.runtimeStatusFallbackInFlightByInstance.add(resolvedInstanceId);\n }\n\n return placeholder;\n }\n\n private getHeartbeatMisses(serviceInstanceId: string, now = Date.now()): number {\n const observedMisses = this.missedHeartbeatsByInstance.get(serviceInstanceId) ?? 0;\n const lastHeartbeatAt = this.lastHeartbeatAtByInstance.get(serviceInstanceId) ?? 0;\n if (lastHeartbeatAt <= 0) {\n return Math.max(observedMisses, this.runtimeStatusMissThreshold);\n }\n\n const estimatedMisses = Math.max(\n 0,\n Math.floor((now - lastHeartbeatAt) / this.runtimeStatusHeartbeatIntervalMs),\n );\n\n return Math.max(observedMisses, estimatedMisses);\n }\n\n private shouldRequireReadinessFromCommunicationTypes(\n communicationTypes: unknown,\n ): boolean {\n if (!Array.isArray(communicationTypes)) {\n return false;\n }\n\n return communicationTypes.some((type) => {\n const normalized = String(type).toLowerCase();\n return normalized === \"delegation\" || normalized === \"inquiry\";\n });\n }\n\n private resolveRuntimeStatusSnapshot(\n numberOfRunningGraphs: number,\n isActive: boolean,\n isNonResponsive: boolean,\n isBlocked: boolean,\n ): RuntimeStatusSnapshot {\n return resolveRuntimeStatus({\n numberOfRunningGraphs,\n isActive,\n isNonResponsive,\n isBlocked,\n degradedGraphThreshold: this.degradedGraphThreshold,\n overloadedGraphThreshold: this.overloadedGraphThreshold,\n });\n }\n\n private normalizeRuntimeStatusReport(ctx: AnyObject): RuntimeStatusReport | null {\n const serviceName =\n ctx.serviceName ?? ctx.__serviceName ?? ctx.serviceInstance?.serviceName;\n const serviceInstanceId =\n ctx.serviceInstanceId ??\n ctx.__serviceInstanceId ??\n ctx.serviceInstance?.uuid;\n if (!serviceName || !serviceInstanceId) {\n return null;\n }\n const transportId =\n ctx.transportId ??\n ctx.serviceTransportId ??\n ctx.serviceTransport?.uuid ??\n undefined;\n const transportRole =\n ctx.transportRole ??\n ctx.transport_role ??\n ctx.serviceTransport?.role ??\n undefined;\n const transportOrigin =\n ctx.transportOrigin ??\n ctx.serviceOrigin ??\n ctx.serviceTransport?.origin ??\n undefined;\n const transportProtocols = Array.isArray(\n ctx.transportProtocols ?? ctx.serviceTransport?.protocols,\n )\n ? ((ctx.transportProtocols ?? ctx.serviceTransport?.protocols) as unknown[])\n .map((entry) => String(entry))\n .filter(\n (entry): entry is ServiceTransportProtocol =>\n entry === \"rest\" || entry === \"socket\",\n )\n : undefined;\n\n const numberOfRunningGraphs = Math.max(\n 0,\n Math.trunc(\n Number(ctx.numberOfRunningGraphs ?? ctx.__numberOfRunningGraphs ?? 0),\n ),\n );\n const isActive = Boolean(ctx.isActive ?? ctx.__active ?? true);\n const isNonResponsive = Boolean(ctx.isNonResponsive ?? false);\n const isBlocked = Boolean(ctx.isBlocked ?? false);\n\n const resolved = this.resolveRuntimeStatusSnapshot(\n numberOfRunningGraphs,\n isActive,\n isNonResponsive,\n isBlocked,\n );\n\n return {\n serviceName,\n serviceInstanceId,\n transportId:\n typeof transportId === \"string\" && transportId.trim().length > 0\n ? transportId\n : undefined,\n transportRole:\n transportRole === \"internal\" || transportRole === \"public\"\n ? transportRole\n : undefined,\n transportOrigin:\n typeof transportOrigin === \"string\" && transportOrigin.trim().length > 0\n ? transportOrigin\n : undefined,\n transportProtocols:\n transportProtocols && transportProtocols.length > 0\n ? Array.from(new Set(transportProtocols))\n : undefined,\n isFrontend:\n typeof ctx.isFrontend === \"boolean\"\n ? ctx.isFrontend\n : typeof ctx.serviceInstance?.isFrontend === \"boolean\"\n ? ctx.serviceInstance.isFrontend\n : undefined,\n reportedAt:\n ctx.reportedAt ??\n (typeof ctx.__reportedAt === \"string\" ? ctx.__reportedAt : undefined) ??\n new Date().toISOString(),\n state:\n ctx.state === \"healthy\" ||\n ctx.state === \"degraded\" ||\n ctx.state === \"overloaded\" ||\n ctx.state === \"unavailable\"\n ? ctx.state\n : resolved.state,\n acceptingWork:\n typeof ctx.acceptingWork === \"boolean\"\n ? ctx.acceptingWork\n : resolved.acceptingWork,\n numberOfRunningGraphs,\n isActive,\n isNonResponsive,\n isBlocked,\n health: (ctx.health ?? ctx.__health ?? {}) as AnyObject,\n };\n }\n\n private applyRuntimeStatusReport(report: RuntimeStatusReport): boolean {\n const instance = this.getInstance(report.serviceName, report.serviceInstanceId);\n if (!instance) {\n return false;\n }\n\n if (report.transportId && report.transportOrigin) {\n const protocols =\n report.transportProtocols && report.transportProtocols.length > 0\n ? report.transportProtocols\n : ([\"rest\", \"socket\"] as ServiceTransportProtocol[]);\n const existingTransport = this.getTransportById(instance, report.transportId);\n if (existingTransport) {\n if (report.transportRole) {\n existingTransport.role = report.transportRole;\n }\n existingTransport.origin = report.transportOrigin;\n existingTransport.protocols = protocols;\n } else {\n instance.transports.push({\n uuid: report.transportId,\n serviceInstanceId: report.serviceInstanceId,\n role: report.transportRole ?? this.getRoutingTransportRole(),\n origin: report.transportOrigin,\n protocols,\n securityProfile: null,\n authStrategy: null,\n });\n }\n }\n\n if (typeof report.isFrontend === \"boolean\") {\n instance.isFrontend = report.isFrontend;\n }\n\n instance.numberOfRunningGraphs = report.numberOfRunningGraphs;\n instance.isActive = report.isActive;\n instance.isNonResponsive = report.isNonResponsive;\n instance.isBlocked = report.isBlocked;\n instance.runtimeState = report.state;\n instance.acceptingWork = report.acceptingWork;\n instance.reportedAt = report.reportedAt;\n instance.health = {\n ...(instance.health ?? {}),\n ...(report.health ?? {}),\n runtimeStatus: {\n state: report.state,\n acceptingWork: report.acceptingWork,\n reportedAt: report.reportedAt,\n },\n };\n\n return true;\n }\n\n private buildLocalRuntimeStatusReport(\n detailLevel: \"minimal\" | \"full\" = \"minimal\",\n ): RuntimeStatusReport | null {\n if (!this.serviceName || !this.serviceInstanceId) {\n return null;\n }\n\n const localInstance = this.getLocalInstance();\n if (!localInstance) {\n return null;\n }\n\n const numberOfRunningGraphs =\n this.activeRoutineExecutionIds.size || this.numberOfRunningGraphs || 0;\n this.numberOfRunningGraphs = numberOfRunningGraphs;\n\n const snapshot = this.resolveRuntimeStatusSnapshot(\n numberOfRunningGraphs,\n localInstance.isActive,\n localInstance.isNonResponsive,\n localInstance.isBlocked,\n );\n const reportedAt = new Date().toISOString();\n\n const transport = this.getRouteableTransport(\n localInstance,\n this.useSocket ? \"socket\" : \"rest\",\n \"internal\",\n );\n\n const report: RuntimeStatusReport = {\n serviceName: this.serviceName,\n serviceInstanceId: this.serviceInstanceId,\n transportId: transport?.uuid ?? undefined,\n transportRole: transport?.role ?? undefined,\n transportOrigin: transport?.origin ?? undefined,\n transportProtocols: transport?.protocols ?? undefined,\n isFrontend: localInstance.isFrontend,\n reportedAt,\n state: snapshot.state,\n acceptingWork: snapshot.acceptingWork,\n numberOfRunningGraphs: snapshot.numberOfRunningGraphs,\n isActive: snapshot.isActive,\n isNonResponsive: snapshot.isNonResponsive,\n isBlocked: snapshot.isBlocked,\n health: {\n ...(localInstance.health ?? {}),\n runtimeStatus: {\n state: snapshot.state,\n acceptingWork: snapshot.acceptingWork,\n reportedAt,\n },\n },\n };\n\n this.applyRuntimeStatusReport(report);\n if (detailLevel !== \"full\") {\n delete report.health;\n }\n\n return report;\n }\n\n private selectRuntimeStatusReportForTarget(\n inquiryResult: AnyObject,\n targetServiceName: string,\n targetServiceInstanceId: string,\n ): RuntimeStatusReport | null {\n const reports = Array.isArray(inquiryResult.runtimeStatusReports)\n ? inquiryResult.runtimeStatusReports\n : [];\n\n for (const candidate of reports) {\n const report = this.normalizeRuntimeStatusReport(candidate);\n if (!report) {\n continue;\n }\n\n if (\n report.serviceName === targetServiceName &&\n report.serviceInstanceId === targetServiceInstanceId\n ) {\n return report;\n }\n }\n\n return null;\n }\n\n private async resolveRuntimeStatusFallbackInquiry(\n serviceName: string,\n serviceInstanceId: string,\n options: {\n detailLevel?: \"minimal\" | \"full\";\n overallTimeoutMs?: number;\n perResponderTimeoutMs?: number;\n requireComplete?: boolean;\n } = {},\n ): Promise<{ report: RuntimeStatusReport; inquiryMeta: AnyObject }> {\n const instance = this.getInstance(serviceName, serviceInstanceId);\n const directStatusCheck = instance\n ? await this.requestRuntimeStatusViaRest(\n instance,\n serviceName,\n serviceInstanceId,\n )\n : {\n report: null,\n diagnostic: {\n attempted: false,\n outcome: \"instance_missing\",\n } satisfies RuntimeStatusFallbackRestDiagnostic,\n };\n\n if (directStatusCheck.report) {\n if (!this.applyRuntimeStatusReport(directStatusCheck.report)) {\n throw this.createRuntimeStatusFallbackError(\n `No tracked instance for runtime fallback ${serviceName}/${serviceInstanceId}`,\n {\n target: {\n serviceName,\n serviceInstanceId,\n },\n instance: this.summarizeInstanceForRuntimeStatusFallback(instance),\n directStatusCheck: directStatusCheck.diagnostic,\n inquiry: {\n meta: {},\n reportTargets: [],\n },\n },\n );\n }\n\n this.lastHeartbeatAtByInstance.set(serviceInstanceId, Date.now());\n this.missedHeartbeatsByInstance.set(serviceInstanceId, 0);\n\n return {\n report: directStatusCheck.report,\n inquiryMeta: {\n inquiry: META_RUNTIME_STATUS_INTENT,\n responded: 1,\n failed: 0,\n timedOut: 0,\n pending: 0,\n directStatusCheck: true,\n },\n };\n }\n\n const inquiryResult = await Cadenza.inquire(\n META_RUNTIME_STATUS_INTENT,\n {\n targetServiceName: serviceName,\n targetServiceInstanceId: serviceInstanceId,\n detailLevel: options.detailLevel ?? \"minimal\",\n __preferredTransportProtocol: \"rest\",\n },\n {\n overallTimeoutMs:\n options.overallTimeoutMs ?? this.runtimeStatusFallbackTimeoutMs,\n perResponderTimeoutMs:\n options.perResponderTimeoutMs ??\n Math.max(250, Math.floor(this.runtimeStatusFallbackTimeoutMs * 0.75)),\n requireComplete: options.requireComplete ?? false,\n },\n );\n\n const report = this.selectRuntimeStatusReportForTarget(\n inquiryResult,\n serviceName,\n serviceInstanceId,\n );\n\n if (!report) {\n throw this.createRuntimeStatusFallbackError(\n `No runtime status report for ${serviceName}/${serviceInstanceId}`,\n {\n target: {\n serviceName,\n serviceInstanceId,\n },\n instance: this.summarizeInstanceForRuntimeStatusFallback(instance),\n directStatusCheck: directStatusCheck.diagnostic,\n inquiry: {\n meta:\n inquiryResult.__inquiryMeta &&\n typeof inquiryResult.__inquiryMeta === \"object\"\n ? inquiryResult.__inquiryMeta\n : {},\n reportTargets: this.summarizeRuntimeStatusInquiryReports(inquiryResult),\n },\n },\n );\n }\n\n if (!this.applyRuntimeStatusReport(report)) {\n throw this.createRuntimeStatusFallbackError(\n `No tracked instance for runtime fallback ${serviceName}/${serviceInstanceId}`,\n {\n target: {\n serviceName,\n serviceInstanceId,\n },\n instance: this.summarizeInstanceForRuntimeStatusFallback(instance),\n directStatusCheck: directStatusCheck.diagnostic,\n inquiry: {\n meta:\n inquiryResult.__inquiryMeta &&\n typeof inquiryResult.__inquiryMeta === \"object\"\n ? inquiryResult.__inquiryMeta\n : {},\n reportTargets: this.summarizeRuntimeStatusInquiryReports(inquiryResult),\n },\n },\n );\n }\n\n this.lastHeartbeatAtByInstance.set(serviceInstanceId, Date.now());\n this.missedHeartbeatsByInstance.set(serviceInstanceId, 0);\n\n return {\n report,\n inquiryMeta: inquiryResult.__inquiryMeta ?? {},\n };\n }\n\n private async requestRuntimeStatusViaRest(\n instance: ServiceInstanceDescriptor,\n serviceName: string,\n serviceInstanceId: string,\n ): Promise<{\n report: RuntimeStatusReport | null;\n diagnostic: RuntimeStatusFallbackRestDiagnostic;\n }> {\n if (typeof globalThis.fetch !== \"function\") {\n return {\n report: null,\n diagnostic: {\n attempted: false,\n outcome: \"fetch_unavailable\",\n },\n };\n }\n\n const transport = this.getRouteableTransport(instance, \"rest\");\n if (!transport) {\n return {\n report: null,\n diagnostic: {\n attempted: false,\n outcome: \"no_rest_transport\",\n },\n };\n }\n\n const controller =\n typeof AbortController === \"function\" ? new AbortController() : null;\n const timeoutId = controller\n ? setTimeout(() => controller.abort(), this.runtimeStatusFallbackTimeoutMs)\n : null;\n\n try {\n const response = await globalThis.fetch(`${transport.origin}/status`, {\n method: \"GET\",\n signal: controller?.signal,\n });\n\n if (\"ok\" in response && response.ok === false) {\n return {\n report: null,\n diagnostic: {\n attempted: true,\n outcome: \"http_error\",\n transport: this.summarizeTransportForDebug(transport),\n responseStatus:\n typeof response.status === \"number\" ? response.status : undefined,\n responseStatusText:\n typeof response.statusText === \"string\"\n ? response.statusText\n : undefined,\n },\n };\n }\n\n const payload =\n typeof response.json === \"function\" ? await response.json() : response;\n const report = this.normalizeRuntimeStatusReport({\n ...payload,\n serviceTransportId: payload?.serviceTransportId ?? transport.uuid,\n serviceOrigin: payload?.serviceOrigin ?? transport.origin,\n transportProtocols: payload?.transportProtocols ?? transport.protocols,\n });\n\n if (!report) {\n return {\n report: null,\n diagnostic: {\n attempted: true,\n outcome: \"invalid_report\",\n transport: this.summarizeTransportForDebug(transport),\n payloadKeys:\n payload && typeof payload === \"object\"\n ? Object.keys(payload as Record<string, unknown>).sort()\n : [],\n },\n };\n }\n\n if (\n report.serviceName !== serviceName ||\n report.serviceInstanceId !== serviceInstanceId\n ) {\n return {\n report: null,\n diagnostic: {\n attempted: true,\n outcome: \"identity_mismatch\",\n transport: this.summarizeTransportForDebug(transport),\n payloadServiceName: report.serviceName,\n payloadServiceInstanceId: report.serviceInstanceId,\n },\n };\n }\n\n return {\n report,\n diagnostic: {\n attempted: true,\n outcome: \"matched\",\n transport: this.summarizeTransportForDebug(transport),\n },\n };\n } catch (error) {\n return {\n report: null,\n diagnostic: {\n attempted: true,\n outcome: \"fetch_error\",\n transport: this.summarizeTransportForDebug(transport),\n error: error instanceof Error ? error.message : String(error),\n },\n };\n } finally {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n }\n }\n\n private evaluateDependencyReadinessDetail(\n serviceName: string,\n serviceInstanceId: string,\n now = Date.now(),\n ): DependencyReadinessDetail {\n const instance = this.getInstance(serviceName, serviceInstanceId);\n const missedHeartbeats = this.getHeartbeatMisses(serviceInstanceId, now);\n const runtimeState = instance\n ? (instance.runtimeState ??\n this.resolveRuntimeStatusSnapshot(\n instance.numberOfRunningGraphs ?? 0,\n instance.isActive,\n instance.isNonResponsive,\n instance.isBlocked,\n ).state)\n : \"unavailable\";\n const acceptingWork = instance\n ? (typeof instance.acceptingWork === \"boolean\"\n ? instance.acceptingWork\n : this.resolveRuntimeStatusSnapshot(\n instance.numberOfRunningGraphs ?? 0,\n instance.isActive,\n instance.isNonResponsive,\n instance.isBlocked,\n ).acceptingWork)\n : false;\n\n const evaluation = evaluateDependencyReadiness({\n exists: Boolean(instance),\n runtimeState,\n acceptingWork,\n missedHeartbeats,\n missThreshold: this.runtimeStatusMissThreshold,\n });\n\n const lastHeartbeat = this.lastHeartbeatAtByInstance.get(serviceInstanceId);\n return {\n serviceName,\n serviceInstanceId,\n dependencyState: evaluation.state,\n runtimeState,\n acceptingWork,\n missedHeartbeats,\n stale: evaluation.stale,\n blocked: evaluation.blocked,\n reason: evaluation.reason,\n lastHeartbeatAt: lastHeartbeat\n ? new Date(lastHeartbeat).toISOString()\n : null,\n reportedAt: instance?.reportedAt ?? null,\n };\n }\n\n private async buildLocalReadinessReport(\n options: {\n detailLevel?: \"minimal\" | \"full\";\n includeDependencies?: boolean;\n refreshStaleDependencies?: boolean;\n } = {},\n ): Promise<ReadinessReport | null> {\n const localRuntime = this.buildLocalRuntimeStatusReport(\"minimal\");\n if (!localRuntime) {\n return null;\n }\n\n const detailLevel = options.detailLevel ?? \"minimal\";\n const includeDependencies =\n options.includeDependencies ?? detailLevel === \"full\";\n const refreshStaleDependencies = options.refreshStaleDependencies ?? true;\n const dependencyPairs = Array.from(this.readinessDependeesByService.entries())\n .flatMap(([serviceName, instanceIds]) =>\n Array.from(instanceIds).map((serviceInstanceId) => ({\n serviceName,\n serviceInstanceId,\n })),\n )\n .sort((left, right) => {\n if (left.serviceName !== right.serviceName) {\n return left.serviceName.localeCompare(right.serviceName);\n }\n return left.serviceInstanceId.localeCompare(right.serviceInstanceId);\n });\n\n if (refreshStaleDependencies) {\n for (const dependency of dependencyPairs) {\n const misses = this.getHeartbeatMisses(dependency.serviceInstanceId);\n if (misses < this.runtimeStatusMissThreshold) {\n continue;\n }\n\n if (\n this.runtimeStatusFallbackInFlightByInstance.has(\n dependency.serviceInstanceId,\n )\n ) {\n continue;\n }\n\n this.runtimeStatusFallbackInFlightByInstance.add(\n dependency.serviceInstanceId,\n );\n try {\n await this.resolveRuntimeStatusFallbackInquiry(\n dependency.serviceName,\n dependency.serviceInstanceId,\n );\n } catch (error) {\n Cadenza.log(\n \"Readiness dependency fallback failed.\",\n {\n serviceName: dependency.serviceName,\n serviceInstanceId: dependency.serviceInstanceId,\n error: error instanceof Error ? error.message : String(error),\n },\n \"warning\",\n );\n } finally {\n this.runtimeStatusFallbackInFlightByInstance.delete(\n dependency.serviceInstanceId,\n );\n }\n }\n }\n\n const now = Date.now();\n const dependencyDetails = dependencyPairs.map((dependency) =>\n this.evaluateDependencyReadinessDetail(\n dependency.serviceName,\n dependency.serviceInstanceId,\n now,\n ),\n );\n const dependencySummary = summarizeDependencyReadiness(\n dependencyDetails.map((detail) => ({\n state: detail.dependencyState,\n stale: detail.stale,\n blocked: detail.blocked,\n reason: detail.reason,\n })),\n );\n const readinessState = resolveServiceReadinessState(\n localRuntime.state,\n localRuntime.acceptingWork,\n dependencySummary,\n );\n\n return {\n serviceName: localRuntime.serviceName,\n serviceInstanceId: localRuntime.serviceInstanceId,\n reportedAt: new Date(now).toISOString(),\n readinessState,\n runtimeState: localRuntime.state,\n acceptingWork: localRuntime.acceptingWork,\n dependencySummary,\n ...(includeDependencies ? { dependencies: dependencyDetails } : {}),\n };\n }\n\n /**\n * Initializes a private constructor for managing service instances, remote signals,\n * service health, and handling updates or synchronization tasks. The constructor\n * creates a variety of meta tasks that process different lifecycle events and\n * service-related updates in a distributed service registry model.\n *\n * @return {Object} An instance of the constructed class with initialized tasks\n * and state management necessary to process service-related events.\n */\n private constructor() {\n Cadenza.defineIntent({\n name: META_RUNTIME_TRANSPORT_DIAGNOSTICS_INTENT,\n description:\n \"Gather transport diagnostics across all services and communication clients.\",\n input: {\n type: \"object\",\n properties: {\n detailLevel: {\n type: \"string\",\n constraints: {\n oneOf: [\"summary\", \"full\"],\n },\n },\n includeErrorHistory: {\n type: \"boolean\",\n },\n errorHistoryLimit: {\n type: \"number\",\n constraints: {\n min: 1,\n max: 200,\n },\n },\n },\n },\n output: {\n type: \"object\",\n properties: {\n transportDiagnostics: {\n type: \"object\",\n },\n },\n },\n });\n\n Cadenza.defineIntent({\n name: META_RUNTIME_STATUS_INTENT,\n description:\n \"Gather lightweight runtime status reports from services in the distributed runtime.\",\n input: {\n type: \"object\",\n properties: {\n detailLevel: {\n type: \"string\",\n constraints: {\n oneOf: [\"minimal\", \"full\"],\n },\n },\n targetServiceName: {\n type: \"string\",\n },\n targetServiceInstanceId: {\n type: \"string\",\n },\n },\n },\n output: {\n type: \"object\",\n properties: {\n runtimeStatusReports: {\n type: \"array\",\n },\n },\n },\n });\n\n Cadenza.createMetaTask(\n \"Respond runtime status inquiry\",\n (ctx) => {\n const targetServiceName = ctx.targetServiceName;\n const targetServiceInstanceId = ctx.targetServiceInstanceId;\n const detailLevel: \"minimal\" | \"full\" =\n ctx.detailLevel === \"full\" ? \"full\" : \"minimal\";\n const report = this.buildLocalRuntimeStatusReport(detailLevel);\n if (!report) {\n return {};\n }\n\n if (\n targetServiceName &&\n targetServiceName !== report.serviceName\n ) {\n return {};\n }\n\n if (\n targetServiceInstanceId &&\n targetServiceInstanceId !== report.serviceInstanceId\n ) {\n return {};\n }\n\n return {\n runtimeStatusReports: [report],\n };\n },\n \"Responds to runtime-status inquiries with local service instance status.\",\n ).respondsTo(META_RUNTIME_STATUS_INTENT);\n\n Cadenza.defineIntent({\n name: META_READINESS_INTENT,\n description:\n \"Gather service readiness reports derived from local runtime status and required dependees.\",\n input: {\n type: \"object\",\n properties: {\n detailLevel: {\n type: \"string\",\n constraints: {\n oneOf: [\"minimal\", \"full\"],\n },\n },\n includeDependencies: {\n type: \"boolean\",\n },\n refreshStaleDependencies: {\n type: \"boolean\",\n },\n targetServiceName: {\n type: \"string\",\n },\n targetServiceInstanceId: {\n type: \"string\",\n },\n },\n },\n output: {\n type: \"object\",\n properties: {\n readinessReports: {\n type: \"array\",\n },\n },\n },\n });\n\n Cadenza.createMetaTask(\n \"Respond readiness inquiry\",\n async (ctx) => {\n const targetServiceName = ctx.targetServiceName;\n const targetServiceInstanceId = ctx.targetServiceInstanceId;\n const report = await this.buildLocalReadinessReport({\n detailLevel: ctx.detailLevel === \"full\" ? \"full\" : \"minimal\",\n includeDependencies: ctx.includeDependencies,\n refreshStaleDependencies: ctx.refreshStaleDependencies,\n });\n if (!report) {\n return {};\n }\n\n if (targetServiceName && targetServiceName !== report.serviceName) {\n return {};\n }\n\n if (\n targetServiceInstanceId &&\n targetServiceInstanceId !== report.serviceInstanceId\n ) {\n return {};\n }\n\n return {\n readinessReports: [report],\n };\n },\n \"Responds to distributed readiness inquiries using required dependee health.\",\n ).respondsTo(META_READINESS_INTENT);\n\n this.handleInstanceUpdateTask = Cadenza.createMetaTask(\n \"Handle Instance Update\",\n (ctx, emit) => {\n const serviceInstance = normalizeServiceInstanceDescriptor(\n ctx.serviceInstance ??\n ctx.data ??\n ctx.queryData?.data ??\n (ctx.__serviceInstanceId || ctx.serviceInstanceId\n ? {\n uuid: ctx.__serviceInstanceId ?? ctx.serviceInstanceId,\n serviceName: ctx.__serviceName ?? ctx.serviceName,\n isFrontend: !!ctx.isFrontend,\n isActive:\n typeof ctx.isActive === \"boolean\"\n ? ctx.isActive\n : typeof ctx.__active === \"boolean\"\n ? ctx.__active\n : true,\n isNonResponsive: !!ctx.isNonResponsive,\n isBlocked: !!ctx.isBlocked,\n health: (ctx.health ?? ctx.__health ?? {}) as AnyObject,\n numberOfRunningGraphs:\n ctx.numberOfRunningGraphs ?? ctx.__numberOfRunningGraphs ?? 0,\n isPrimary: false,\n isBootstrapPlaceholder: !!ctx.isBootstrapPlaceholder,\n transports: ctx.transports ?? [],\n }\n : undefined),\n );\n if (!serviceInstance) {\n return false;\n }\n const uuid = serviceInstance.uuid;\n const serviceName = serviceInstance.serviceName;\n const deleted = Boolean(\n ctx.deleted ?? ctx.serviceInstance?.deleted ?? ctx.data?.deleted,\n );\n if (uuid === this.serviceInstanceId) return;\n\n if (deleted) {\n const existingInstance = this.instances\n .get(serviceName)\n ?.find((instance) => instance.uuid === uuid);\n const indexToDelete =\n this.instances.get(serviceName)?.findIndex((i) => i.uuid === uuid) ?? -1;\n if (indexToDelete >= 0 && existingInstance) {\n this.instances.get(serviceName)?.splice(indexToDelete, 1);\n for (const transport of existingInstance.transports) {\n const transportKey = buildTransportClientKey(transport);\n emit(`meta.socket_shutdown_requested:${transportKey}`, {});\n emit(`meta.fetch.destroy_requested:${transportKey}`, {});\n }\n }\n\n if (this.instances.get(serviceName)?.length === 0) {\n this.instances.delete(serviceName);\n }\n\n this.unregisterDependee(uuid, serviceName);\n\n return;\n }\n\n if (!this.instances.has(serviceName))\n this.instances.set(serviceName, []);\n const instances = this.instances.get(serviceName)!;\n const existing = instances.find((i) => i.uuid === uuid);\n\n if (existing) {\n Object.assign(existing, {\n ...serviceInstance,\n transports:\n serviceInstance.transports.length > 0\n ? serviceInstance.transports\n : existing.transports,\n clientCreatedTransportIds: existing.clientCreatedTransportIds ?? [],\n });\n } else {\n instances.push(serviceInstance);\n }\n\n const trackedInstance =\n existing ?? instances.find((instance) => instance.uuid === uuid);\n if (trackedInstance) {\n const snapshot = this.resolveRuntimeStatusSnapshot(\n trackedInstance.numberOfRunningGraphs ?? 0,\n trackedInstance.isActive,\n trackedInstance.isNonResponsive,\n trackedInstance.isBlocked,\n );\n trackedInstance.runtimeState = snapshot.state;\n trackedInstance.acceptingWork = snapshot.acceptingWork;\n trackedInstance.reportedAt =\n trackedInstance.reportedAt ?? new Date().toISOString();\n }\n\n if (!serviceInstance.isBootstrapPlaceholder) {\n this.reconcileBootstrapPlaceholderInstance(serviceName, uuid, emit);\n }\n\n if (this.serviceName === serviceName) {\n return false;\n }\n\n if (trackedInstance?.isFrontend) {\n return true;\n }\n\n if (\n this.deputies.has(serviceName) ||\n this.remoteIntents.has(serviceName) ||\n this.remoteSignals.has(serviceName)\n ) {\n const connected = this.ensureDependeeClientForInstance(\n trackedInstance!,\n emit,\n ctx,\n );\n\n if (!connected) {\n emit(\"meta.service_registry.routeable_transport_missing\", {\n serviceName,\n serviceInstanceId: uuid,\n requiredRole: this.getRoutingTransportRole(),\n isFrontend: this.isFrontend,\n });\n }\n }\n\n return true;\n },\n \"Handles instance updates to service instances\",\n )\n .emits(\"meta.service_registry.service_discovered\")\n .doOn(\n \"meta.initializing_service\",\n \"global.meta.service_instance.inserted\",\n \"global.meta.service_instance.updated\",\n \"meta.service_instance.inserted\",\n \"meta.service_instance.updated\",\n )\n .attachSignal(\n \"meta.service_registry.dependee_registered\",\n \"meta.socket_shutdown_requested\",\n \"meta.fetch.destroy_requested\",\n );\n\n this.handleTransportUpdateTask = Cadenza.createMetaTask(\n \"Handle Transport Update\",\n (ctx, emit) => {\n const transport = normalizeServiceTransportDescriptor(\n ctx.serviceTransport ?? ctx.data ?? ctx.queryData?.data ?? ctx,\n );\n if (!transport) {\n return false;\n }\n\n let ownerInstance: ServiceInstanceDescriptor | undefined;\n for (const instances of this.instances.values()) {\n ownerInstance = instances.find(\n (instance) => instance.uuid === transport.serviceInstanceId,\n );\n if (ownerInstance) {\n break;\n }\n }\n\n if (!ownerInstance) {\n return false;\n }\n\n if (transport.deleted) {\n ownerInstance.transports = ownerInstance.transports.filter(\n (existingTransport) => existingTransport.uuid !== transport.uuid,\n );\n const transportKey = buildTransportClientKey(transport);\n emit(`meta.socket_shutdown_requested:${transportKey}`, {});\n emit(`meta.fetch.destroy_requested:${transportKey}`, {});\n return true;\n }\n\n const existingTransport = this.getTransportById(ownerInstance, transport.uuid);\n if (existingTransport) {\n Object.assign(existingTransport, transport);\n } else {\n ownerInstance.transports.push(transport);\n }\n\n if (ownerInstance.uuid === this.serviceInstanceId) {\n return true;\n }\n\n const hasRemoteInterest =\n !ownerInstance.isFrontend &&\n (this.deputies.has(ownerInstance.serviceName) ||\n this.remoteIntents.has(ownerInstance.serviceName) ||\n this.remoteSignals.has(ownerInstance.serviceName)) &&\n transport.role === this.getRoutingTransportRole();\n\n if (!hasRemoteInterest) {\n return true;\n }\n\n this.ensureDependeeClientForInstance(ownerInstance, emit, ctx);\n\n return true;\n },\n \"Handles service transport updates independently from instance rows.\",\n )\n .doOn(\n \"global.meta.service_instance_transport.inserted\",\n \"global.meta.service_instance_transport.updated\",\n \"meta.service_instance_transport.inserted\",\n \"meta.service_instance_transport.updated\",\n )\n .attachSignal(\n \"meta.service_registry.dependee_registered\",\n \"meta.socket_shutdown_requested\",\n \"meta.fetch.destroy_requested\",\n );\n\n Cadenza.createMetaTask(\n \"Track dependee registration\",\n (ctx) => {\n if (!ctx.serviceName || !ctx.serviceInstanceId) {\n return false;\n }\n\n this.registerDependee(ctx.serviceName, ctx.serviceInstanceId, {\n requiredForReadiness: this.shouldRequireReadinessFromCommunicationTypes(\n ctx.communicationTypes,\n ),\n });\n return true;\n },\n \"Tracks remote dependency instances for runtime heartbeat monitoring.\",\n ).doOn(\"meta.service_registry.dependee_registered\");\n\n const normalizeServiceInstancesFromSync = (ctx: AnyObject) =>\n this.normalizeServiceInstancesFromSync(ctx);\n Cadenza.createMetaTask(\"Split service instances\", function* (ctx: any) {\n const serviceInstances = normalizeServiceInstancesFromSync(ctx);\n if (serviceInstances.length === 0) {\n return;\n }\n\n for (const serviceInstance of serviceInstances) {\n yield { serviceInstance };\n }\n })\n .doOn(\n \"meta.service_registry.registered_global_signals\",\n \"meta.service_registry.registered_global_intents\",\n )\n .then(this.handleInstanceUpdateTask);\n\n this.handleGlobalSignalRegistrationTask = Cadenza.createMetaTask(\n \"Handle global Signal Registration\",\n (ctx) => {\n const sortedSignalToTaskMap = this.normalizeSignalMaps(ctx).sort(\n (a: any, b: any) => {\n if (a.deleted && !b.deleted) return -1;\n if (!a.deleted && b.deleted) return 1;\n return 0;\n },\n );\n\n const locallyEmittedSignals = Cadenza.signalBroker\n .listEmittedSignals()\n .filter((s: any) => s.startsWith(\"global.\"));\n\n for (const map of sortedSignalToTaskMap) {\n if (map.deleted) {\n this.remoteSignals.get(map.serviceName)?.delete(map.signalName);\n\n if (!this.remoteSignals.get(map.serviceName)?.size) {\n this.remoteSignals.delete(map.serviceName);\n }\n\n Cadenza.get(\n `Transmit signal: ${map.signalName} to ${map.serviceName}`,\n )?.destroy();\n continue;\n }\n\n if (locallyEmittedSignals.includes(map.signalName)) {\n if (!this.remoteSignals.get(map.serviceName)) {\n this.remoteSignals.set(map.serviceName, new Set());\n }\n\n if (!this.remoteSignals.get(map.serviceName)?.has(map.signalName)) {\n Cadenza.createSignalTransmissionTask(\n map.signalName,\n map.serviceName,\n );\n }\n\n this.remoteSignals.get(map.serviceName)?.add(map.signalName);\n }\n }\n\n return true;\n },\n \"Handles registration of remote signals\",\n )\n .emits(\"meta.service_registry.registered_global_signals\")\n .doOn(\"global.meta.cadenza_db.gathered_sync_data\");\n\n this.reconcileGatheredSyncTransmissionsTask = Cadenza.createMetaTask(\n \"Reconcile gathered sync signal transmissions\",\n (ctx, emit) => this.reconcileGatheredSyncTransmissions(ctx, emit),\n \"Keeps gathered sync transmitters aligned with known remote service instances.\",\n ).doOn(\n CADENZA_DB_GATHERED_SYNC_SIGNAL,\n META_GATHERED_SYNC_TRANSMISSION_RECONCILE_SIGNAL,\n \"meta.service_registry.service_discovered\",\n );\n\n this.handleGlobalIntentRegistrationTask = Cadenza.createMetaTask(\n \"Handle global intent registration\",\n (ctx, emit) => {\n const intentToTaskMaps = this.normalizeIntentMaps(ctx);\n const sorted = intentToTaskMaps.sort((a, b) => {\n if (a.deleted && !b.deleted) return -1;\n if (!a.deleted && b.deleted) return 1;\n return 0;\n });\n\n for (const map of sorted) {\n try {\n if (map.deleted) {\n this.unregisterRemoteIntentDeputy(map);\n continue;\n }\n\n Cadenza.inquiryBroker.addIntent({\n name: map.intentName,\n });\n\n this.registerRemoteIntentDeputy(map);\n\n this.ensureDependeeClientsForService(map.serviceName, emit);\n } catch (error) {\n throw error;\n }\n }\n\n return true;\n },\n \"Handles registration of remote inquiry intent responders\",\n )\n .emits(\"meta.service_registry.registered_global_intents\")\n .doOn(\n \"global.meta.cadenza_db.gathered_sync_data\",\n \"global.meta.graph_metadata.task_intent_associated\",\n );\n\n this.handleServiceNotRespondingTask = Cadenza.createMetaTask(\n \"Handle service not responding\",\n (ctx, emit) => {\n const { serviceName, serviceInstanceId, serviceTransportId } = ctx;\n const serviceInstances = this.instances.get(serviceName);\n const instances = serviceInstances?.filter((instance) => {\n if (serviceInstanceId && instance.uuid === serviceInstanceId) {\n return true;\n }\n\n if (serviceTransportId) {\n return instance.transports.some(\n (transport) => transport.uuid === serviceTransportId,\n );\n }\n\n return false;\n });\n\n Cadenza.log(\n \"Service not responding.\",\n {\n serviceName,\n serviceInstanceId,\n serviceTransportId,\n instances,\n },\n \"warning\",\n serviceName,\n );\n\n for (const instance of instances ?? []) {\n instance.isActive = false;\n instance.isNonResponsive = true;\n const snapshot = this.resolveRuntimeStatusSnapshot(\n instance.numberOfRunningGraphs ?? 0,\n instance.isActive,\n instance.isNonResponsive,\n instance.isBlocked,\n );\n instance.runtimeState = snapshot.state;\n instance.acceptingWork = snapshot.acceptingWork;\n instance.reportedAt = new Date().toISOString();\n emit(\"global.meta.service_registry.service_not_responding\", {\n data: {\n isActive: false,\n isNonResponsive: true,\n },\n filter: {\n uuid: instance.uuid,\n },\n });\n }\n\n return true;\n },\n \"Handles service not responding\",\n )\n .doOn(\n \"meta.fetch.handshake_failed\",\n \"meta.fetch.handshake_failed.*\",\n \"meta.socket_client.disconnected\",\n \"meta.socket_client.disconnected.*\",\n \"meta.service_registry.runtime_status_unreachable\",\n )\n .attachSignal(\"global.meta.service_registry.service_not_responding\");\n\n this.handleServiceHandshakeTask = Cadenza.createMetaTask(\n \"Handle service handshake\",\n (ctx, emit) => {\n const { serviceName, serviceInstanceId } = ctx;\n const serviceInstances = this.instances.get(serviceName);\n let instance = serviceInstances?.find(\n (i) => i.uuid === serviceInstanceId,\n );\n\n if (!instance && serviceName && serviceInstanceId) {\n const bootstrapPlaceholder = serviceInstances?.find(\n (candidate) =>\n candidate.isBootstrapPlaceholder &&\n (!ctx.serviceTransportId ||\n candidate.transports.some(\n (transport) => transport.uuid === ctx.serviceTransportId,\n )),\n );\n\n if (bootstrapPlaceholder) {\n instance = this.adoptBootstrapPlaceholderInstanceId(\n serviceName,\n bootstrapPlaceholder.uuid,\n serviceInstanceId,\n );\n }\n }\n\n if (!instance) {\n return false;\n }\n\n instance.isActive = true;\n instance.isNonResponsive = false;\n const snapshot = this.resolveRuntimeStatusSnapshot(\n instance.numberOfRunningGraphs ?? 0,\n instance.isActive,\n instance.isNonResponsive,\n instance.isBlocked,\n );\n instance.runtimeState = snapshot.state;\n instance.acceptingWork = snapshot.acceptingWork;\n instance.reportedAt = new Date().toISOString();\n emit(\"global.meta.service_registry.service_handshake\", {\n data: {\n isActive: instance.isActive,\n isNonResponsive: instance.isNonResponsive,\n },\n filter: {\n uuid: instance.uuid,\n },\n });\n\n return true;\n },\n \"Handles service handshake\",\n )\n .doOn(\"meta.fetch.handshake_complete\")\n .attachSignal(\n \"global.meta.service_registry.service_handshake\",\n \"global.meta.service_registry.deleted\",\n );\n\n this.handleSocketStatusUpdateTask = Cadenza.createMetaTask(\n \"Handle Socket Status Update\",\n (ctx) => {\n const report = this.normalizeRuntimeStatusReport(ctx);\n if (!report) {\n return false;\n }\n\n if (\n report.serviceName === this.serviceName &&\n report.serviceInstanceId === this.serviceInstanceId\n ) {\n return false;\n }\n\n let applied = this.applyRuntimeStatusReport(report);\n if (\n !applied &&\n report.transportId &&\n report.transportOrigin\n ) {\n if (!this.instances.has(report.serviceName)) {\n this.instances.set(report.serviceName, []);\n }\n\n this.instances.get(report.serviceName)!.push({\n uuid: report.serviceInstanceId,\n serviceName: report.serviceName,\n isFrontend: !!report.isFrontend,\n isActive: report.isActive,\n isNonResponsive: report.isNonResponsive,\n isBlocked: report.isBlocked,\n numberOfRunningGraphs: report.numberOfRunningGraphs,\n runtimeState: report.state,\n acceptingWork: report.acceptingWork,\n reportedAt: report.reportedAt,\n health: report.health ?? {},\n isPrimary: false,\n transports: [\n {\n uuid: report.transportId,\n serviceInstanceId: report.serviceInstanceId,\n role: report.transportRole ?? this.getRoutingTransportRole(),\n origin: report.transportOrigin,\n protocols:\n report.transportProtocols && report.transportProtocols.length > 0\n ? report.transportProtocols\n : ([\"rest\", \"socket\"] as ServiceTransportProtocol[]),\n securityProfile: null,\n authStrategy: null,\n },\n ],\n });\n applied = true;\n }\n\n if (!applied) {\n return false;\n }\n\n this.registerDependee(report.serviceName, report.serviceInstanceId);\n this.lastHeartbeatAtByInstance.set(report.serviceInstanceId, Date.now());\n this.missedHeartbeatsByInstance.set(report.serviceInstanceId, 0);\n this.runtimeStatusFallbackInFlightByInstance.delete(\n report.serviceInstanceId,\n );\n return true;\n },\n \"Handles status update from socket broadcast\",\n ).doOn(\"meta.socket_client.status_received\");\n\n this.fullSyncTask = Cadenza.createMetaTask(\n \"Full sync\",\n async (ctx) => {\n const inquiryResult = await Cadenza.inquire(\n META_SERVICE_REGISTRY_FULL_SYNC_INTENT,\n {\n syncScope: \"service-registry-full-sync\",\n },\n ctx.inquiryOptions ?? ctx.__inquiryOptions ?? {},\n );\n\n const signalToTaskMaps = this.normalizeSignalMaps(\n inquiryResult as AnyObject,\n ).filter((m) => !!m.isGlobal);\n\n const intentToTaskMaps = this.normalizeIntentMaps(\n inquiryResult as AnyObject,\n );\n\n const serviceInstances = this.normalizeServiceInstancesFromSync(\n inquiryResult as AnyObject,\n );\n\n return {\n ...ctx,\n signalToTaskMaps,\n intentToTaskMaps,\n serviceInstances,\n __inquiryMeta: inquiryResult.__inquiryMeta,\n };\n },\n \"Runs service registry full sync through one distributed inquiry intent.\",\n )\n .doOn(\"meta.sync_requested\")\n .emits(\"meta.service_registry.initial_sync_complete\")\n .then(\n this.handleGlobalSignalRegistrationTask,\n this.handleGlobalIntentRegistrationTask,\n );\n\n this.getInstanceById = Cadenza.createMetaTask(\n \"Get instance by id\",\n (context) => {\n const { __id } = context;\n let instance;\n for (const instances of this.instances.values()) {\n instance = instances.find((i) => i.uuid === __id);\n if (instance) break;\n }\n return { ...context, __instance: instance };\n },\n \"Gets instance by id.\",\n );\n\n this.getInstancesByServiceName = Cadenza.createMetaTask(\n \"Get instances by name\",\n (context) => {\n const { __serviceName } = context;\n const instances = this.instances.get(__serviceName);\n if (!instances) {\n return false;\n }\n\n return { ...context, __instances: instances };\n },\n \"Gets instances by name.\",\n );\n\n this.handleDeputyRegistrationTask = Cadenza.createMetaTask(\n \"Handle Deputy Registration\",\n (ctx) => {\n const { serviceName } = ctx;\n\n if (!this.deputies.has(serviceName)) this.deputies.set(serviceName, []);\n\n this.deputies.get(serviceName)!.push({\n serviceName,\n remoteRoutineName: ctx.remoteRoutineName,\n signalName: ctx.signalName,\n localTaskName: ctx.localTaskName,\n communicationType: ctx.communicationType,\n });\n },\n ).doOn(\"meta.deputy.created\");\n\n this.getAllInstances = Cadenza.createMetaTask(\n \"Get all instances\",\n (context) => ({\n ...context,\n __instances: Array.from(this.instances.values()).flat(),\n }),\n \"Gets all instances.\",\n );\n\n this.doForEachInstance = Cadenza.createMetaTask(\n \"Do for each instance\",\n function* (context: AnyObject) {\n // @ts-ignore\n for (const instances of this.instances.values()) {\n for (const instance of instances) {\n yield { ...context, __instance: instance };\n }\n }\n }.bind(this),\n \"Yields each instance for branching.\",\n );\n\n this.deleteInstance = Cadenza.createMetaTask(\n \"Delete instance\",\n (context) => {\n const { __id } = context;\n this.instances.delete(__id);\n return context;\n },\n \"Deletes instance.\",\n ).doOn(\"global.meta.service_instance.deleted\");\n\n this.getBalancedInstance = Cadenza.createMetaTask(\n \"Get balanced instance\",\n (context, emit) => {\n if (context.__remoteRoutineName !== undefined) {\n context = ensureDelegationContextMetadata(context);\n }\n\n const {\n __serviceName,\n __triedInstances,\n __retries,\n __broadcast,\n targetServiceInstanceId,\n } = context;\n let retries = __retries ?? 0;\n let triedInstances = __triedInstances ?? [];\n const preferredRole = this.getRoutingTransportRole();\n const instances = this.instances\n .get(__serviceName)\n ?.filter((instance) => {\n if (\n targetServiceInstanceId &&\n instance.uuid !== targetServiceInstanceId\n ) {\n return false;\n }\n\n if (\n !instance.isActive ||\n instance.isNonResponsive ||\n instance.isBlocked\n ) {\n return false;\n }\n\n if (instance.isFrontend) {\n return true;\n }\n\n return Boolean(\n this.selectTransportForInstance(instance, context, preferredRole),\n );\n })\n .sort((a, b) => {\n const leftStatus = this.resolveRuntimeStatusSnapshot(\n a.numberOfRunningGraphs ?? 0,\n a.isActive,\n a.isNonResponsive,\n a.isBlocked,\n );\n const rightStatus = this.resolveRuntimeStatusSnapshot(\n b.numberOfRunningGraphs ?? 0,\n b.isActive,\n b.isNonResponsive,\n b.isBlocked,\n );\n\n const priorityDelta =\n runtimeStatusPriority(leftStatus.state) -\n runtimeStatusPriority(rightStatus.state);\n if (priorityDelta !== 0) {\n return priorityDelta;\n }\n\n return (\n (a.numberOfRunningGraphs ?? 0) - (b.numberOfRunningGraphs ?? 0)\n );\n });\n\n if (!instances || instances.length === 0 || retries > this.retryCount) {\n context.errored = true;\n context.__error =\n this.isFrontend && preferredRole === \"public\"\n ? `No public transport available for ${__serviceName}.`\n : `No routeable ${preferredRole} transport available for ${__serviceName}. Retries: ${retries}.`;\n emit(\n `meta.service_registry.load_balance_failed:${context.__metadata.__deputyExecId}`,\n context,\n );\n return context;\n }\n\n if (__broadcast || instances[0].isFrontend) {\n for (const instance of instances) {\n if (instance.isFrontend) {\n const fetchId = `browser:${instance.uuid}`;\n emit(\n `meta.service_registry.selected_instance_for_socket:${fetchId}`,\n {\n ...context,\n __instance: instance.uuid,\n __transportId: undefined,\n __transportOrigin: undefined,\n __transportProtocols: [\"socket\"],\n __fetchId: fetchId,\n },\n );\n continue;\n }\n\n const selectedTransport = this.selectTransportForInstance(\n instance,\n context,\n preferredRole,\n );\n if (!selectedTransport) {\n continue;\n }\n\n const transportKey = buildTransportClientKey(selectedTransport);\n emit(\n `${\n this.resolveTransportProtocolOrder(context)[0] === \"socket\" &&\n transportSupportsProtocol(selectedTransport, \"socket\")\n ? \"meta.service_registry.selected_instance_for_socket\"\n : \"meta.service_registry.selected_instance_for_fetch\"\n }:${transportKey}`,\n {\n ...context,\n __instance: instance.uuid,\n __transportId: selectedTransport.uuid,\n __transportOrigin: selectedTransport.origin,\n __transportProtocols: selectedTransport.protocols,\n __fetchId: transportKey,\n },\n );\n }\n\n return context;\n }\n\n let instancesToTry = instances.filter(\n (i) => !__triedInstances?.includes(i.uuid),\n );\n\n if (instancesToTry.length === 0) {\n if (this.useSocket) {\n emit(\n `meta.service_registry.socket_failed:${context.__fetchId}`,\n context,\n );\n }\n retries++;\n instancesToTry = instances;\n triedInstances = [];\n }\n\n let selected = instancesToTry[0];\n if (retries > 0) {\n selected =\n instancesToTry[Math.floor(Math.random() * instancesToTry.length)];\n }\n\n if (selected.isFrontend) {\n context.__instance = selected.uuid;\n context.__transportId = undefined;\n context.__transportOrigin = undefined;\n context.__transportProtocols = [\"socket\"];\n context.__fetchId = `browser:${selected.uuid}`;\n context.__triedInstances = triedInstances;\n context.__triedInstances.push(selected.uuid);\n context.__retries = retries;\n\n emit(\n `meta.service_registry.selected_instance_for_socket:${context.__fetchId}`,\n context,\n );\n return context;\n }\n\n const selectedTransport = this.selectTransportForInstance(\n selected,\n context,\n preferredRole,\n );\n\n if (!selectedTransport) {\n context.errored = true;\n context.__error = `No routeable ${preferredRole} transport available for ${selected.serviceName}/${selected.uuid}.`;\n emit(\n `meta.service_registry.load_balance_failed:${context.__metadata.__deputyExecId}`,\n context,\n );\n return context;\n }\n\n context.__instance = selected.uuid;\n context.__transportId = selectedTransport.uuid;\n context.__transportOrigin = selectedTransport.origin;\n context.__transportProtocols = selectedTransport.protocols;\n context.__fetchId = buildTransportClientKey(selectedTransport);\n context.__triedInstances = triedInstances;\n context.__triedInstances.push(selected.uuid);\n context.__retries = retries;\n\n if (\n this.resolveTransportProtocolOrder(context)[0] === \"socket\" &&\n transportSupportsProtocol(selectedTransport, \"socket\")\n ) {\n emit(\n `meta.service_registry.selected_instance_for_socket:${context.__fetchId}`,\n context,\n );\n } else {\n emit(\n `meta.service_registry.selected_instance_for_fetch:${context.__fetchId}`,\n context,\n );\n }\n\n return context;\n },\n \"Gets a balanced instance for load balancing\",\n )\n .doOn(\n \"meta.deputy.delegation_requested\",\n \"meta.signal_transmission.requested\",\n \"meta.socket_client.delegate_failed\",\n \"meta.fetch.delegate_failed\",\n \"meta.socket_client.signal_transmission_failed\",\n )\n .attachSignal(\n \"meta.service_registry.load_balance_failed\",\n \"meta.service_registry.selected_instance_for_socket\",\n \"meta.service_registry.selected_instance_for_fetch\",\n \"meta.service_registry.socket_failed\",\n );\n\n this.getStatusTask = Cadenza.createMetaTask(\n \"Get status\",\n (ctx) => this.resolveLocalStatusCheck(ctx),\n ).doOn(\n \"meta.socket.status_check_requested\",\n \"meta.rest.status_check_requested\",\n );\n\n Cadenza.createMetaTask(\n \"Track local routine start\",\n (ctx, emit) => {\n const sourceTaskName = String(ctx.__signalEmission?.taskName ?? \"\");\n if (INTERNAL_RUNTIME_STATUS_TASK_NAMES.has(sourceTaskName)) {\n return false;\n }\n\n const routineId = String(\n ctx.filter?.uuid ?? ctx.__routineExecId ?? \"\",\n );\n if (!routineId) {\n return false;\n }\n\n this.activeRoutineExecutionIds.add(routineId);\n this.numberOfRunningGraphs = this.activeRoutineExecutionIds.size;\n const localInstance = this.getLocalInstance();\n if (!localInstance) {\n return true;\n }\n\n const snapshot = this.resolveRuntimeStatusSnapshot(\n this.numberOfRunningGraphs,\n localInstance.isActive,\n localInstance.isNonResponsive,\n localInstance.isBlocked,\n );\n if (\n hasSignificantRuntimeStatusChange(this.lastRuntimeStatusSnapshot, snapshot)\n ) {\n emit(\"meta.service_registry.runtime_status_broadcast_requested\", {\n reason: \"runtime-state-change\",\n });\n }\n return true;\n },\n \"Tracks local routine starts for runtime load status.\",\n ).doOn(\"meta.node.started_routine_execution\");\n\n Cadenza.createMetaTask(\n \"Track local routine end\",\n (ctx, emit) => {\n const sourceTaskName = String(ctx.__signalEmission?.taskName ?? \"\");\n if (INTERNAL_RUNTIME_STATUS_TASK_NAMES.has(sourceTaskName)) {\n return false;\n }\n\n const routineId = String(\n ctx.filter?.uuid ?? ctx.__routineExecId ?? \"\",\n );\n if (!routineId) {\n return false;\n }\n\n this.activeRoutineExecutionIds.delete(routineId);\n this.numberOfRunningGraphs = this.activeRoutineExecutionIds.size;\n const localInstance = this.getLocalInstance();\n if (!localInstance) {\n return true;\n }\n\n const snapshot = this.resolveRuntimeStatusSnapshot(\n this.numberOfRunningGraphs,\n localInstance.isActive,\n localInstance.isNonResponsive,\n localInstance.isBlocked,\n );\n if (\n hasSignificantRuntimeStatusChange(this.lastRuntimeStatusSnapshot, snapshot)\n ) {\n emit(\"meta.service_registry.runtime_status_broadcast_requested\", {\n reason: \"runtime-state-change\",\n });\n }\n return true;\n },\n \"Tracks local routine completion for runtime load status.\",\n ).doOn(\"meta.node.ended_routine_execution\");\n\n Cadenza.createMetaTask(\n \"Start runtime status sharing intervals\",\n () => {\n if (this.runtimeStatusHeartbeatStarted) {\n return false;\n }\n\n this.runtimeStatusHeartbeatStarted = true;\n Cadenza.interval(\n META_RUNTIME_STATUS_HEARTBEAT_TICK_SIGNAL,\n { reason: \"heartbeat\" },\n this.runtimeStatusHeartbeatIntervalMs,\n true,\n );\n Cadenza.interval(\n META_RUNTIME_STATUS_MONITOR_TICK_SIGNAL,\n {},\n this.runtimeStatusHeartbeatIntervalMs,\n );\n return true;\n },\n \"Starts runtime status heartbeat and heartbeat-monitor loops once per service instance.\",\n ).doOn(\"meta.service_registry.instance_inserted\");\n\n Cadenza.createMetaTask(\n \"Broadcast runtime status\",\n (ctx, emit) => {\n const report = this.buildLocalRuntimeStatusReport(\n ctx.detailLevel === \"full\" ? \"full\" : \"minimal\",\n );\n if (!report) {\n return false;\n }\n\n const snapshot = this.resolveRuntimeStatusSnapshot(\n report.numberOfRunningGraphs,\n report.isActive,\n report.isNonResponsive,\n report.isBlocked,\n );\n const force =\n ctx.reason === \"heartbeat\" ||\n ctx.force === true ||\n this.lastRuntimeStatusSnapshot === null;\n\n if (\n !force &&\n !hasSignificantRuntimeStatusChange(this.lastRuntimeStatusSnapshot, snapshot)\n ) {\n return false;\n }\n\n this.lastRuntimeStatusSnapshot = snapshot;\n emit(\"meta.service.updated\", {\n __serviceName: report.serviceName,\n __serviceInstanceId: report.serviceInstanceId,\n __reportedAt: report.reportedAt,\n __numberOfRunningGraphs: report.numberOfRunningGraphs,\n __health: report.health ?? {},\n __active: report.isActive,\n serviceName: report.serviceName,\n serviceInstanceId: report.serviceInstanceId,\n transportId: report.transportId,\n transportRole: report.transportRole,\n transportOrigin: report.transportOrigin,\n transportProtocols: report.transportProtocols,\n isFrontend: report.isFrontend,\n reportedAt: report.reportedAt,\n numberOfRunningGraphs: report.numberOfRunningGraphs,\n health: report.health ?? {},\n isActive: report.isActive,\n isNonResponsive: report.isNonResponsive,\n isBlocked: report.isBlocked,\n state: report.state,\n acceptingWork: report.acceptingWork,\n });\n return true;\n },\n \"Broadcasts local runtime status to connected dependees.\",\n ).doOn(\n META_RUNTIME_STATUS_HEARTBEAT_TICK_SIGNAL,\n \"meta.service_registry.runtime_status_broadcast_requested\",\n );\n\n Cadenza.createMetaTask(\n \"Monitor dependee heartbeat freshness\",\n (ctx, emit) => {\n if (!this.useSocket) {\n return false;\n }\n\n const now = Date.now();\n for (const [serviceName, instanceIds] of this.dependeesByService) {\n for (const serviceInstanceId of instanceIds) {\n const instance = this.getInstance(serviceName, serviceInstanceId);\n if (!instance || !instance.isActive || instance.isBlocked) {\n continue;\n }\n\n const lastHeartbeat =\n this.lastHeartbeatAtByInstance.get(serviceInstanceId) ?? 0;\n const misses = this.missedHeartbeatsByInstance.get(serviceInstanceId) ?? 0;\n const heartbeatBudget =\n this.runtimeStatusHeartbeatIntervalMs * (misses + 1);\n\n if (lastHeartbeat > 0 && now - lastHeartbeat < heartbeatBudget) {\n continue;\n }\n\n const nextMisses = misses + 1;\n this.missedHeartbeatsByInstance.set(serviceInstanceId, nextMisses);\n\n if (\n nextMisses < this.runtimeStatusMissThreshold ||\n this.runtimeStatusFallbackInFlightByInstance.has(serviceInstanceId)\n ) {\n continue;\n }\n\n this.runtimeStatusFallbackInFlightByInstance.add(serviceInstanceId);\n const transport = this.getRouteableTransport(\n instance,\n this.useSocket ? \"socket\" : \"rest\",\n );\n emit(\"meta.service_registry.runtime_status_fallback_requested\", {\n ...ctx,\n serviceName,\n serviceInstanceId,\n serviceTransportId: transport?.uuid,\n serviceOrigin: transport?.origin,\n transportProtocols: transport?.protocols,\n });\n }\n }\n\n return true;\n },\n \"Monitors dependee heartbeat freshness and requests inquiry fallback after repeated misses.\",\n ).doOn(META_RUNTIME_STATUS_MONITOR_TICK_SIGNAL);\n\n Cadenza.createMetaTask(\n \"Resolve runtime status fallback inquiry\",\n async (ctx, emit) => {\n const serviceName = ctx.serviceName;\n const serviceInstanceId = ctx.serviceInstanceId;\n if (!serviceName || !serviceInstanceId) {\n return false;\n }\n\n try {\n const { report, inquiryMeta } =\n await this.resolveRuntimeStatusFallbackInquiry(\n serviceName,\n serviceInstanceId,\n {\n detailLevel: ctx.detailLevel === \"full\" ? \"full\" : \"minimal\",\n overallTimeoutMs: ctx.overallTimeoutMs,\n perResponderTimeoutMs: ctx.perResponderTimeoutMs,\n requireComplete: ctx.requireComplete,\n },\n );\n\n return {\n ...ctx,\n runtimeStatusReport: report,\n __inquiryMeta: inquiryMeta,\n };\n } catch (error) {\n const instance = this.getInstance(serviceName, serviceInstanceId);\n const transport = instance\n ? this.getRouteableTransport(\n instance,\n this.useSocket ? \"socket\" : \"rest\",\n )\n : undefined;\n const message =\n error instanceof Error ? error.message : String(error);\n const diagnostics =\n error &&\n typeof error === \"object\" &&\n \"runtimeStatusFallback\" in error &&\n (error as AnyObject).runtimeStatusFallback &&\n typeof (error as AnyObject).runtimeStatusFallback === \"object\"\n ? (error as AnyObject).runtimeStatusFallback\n : undefined;\n\n Cadenza.log(\n \"Runtime status fallback inquiry failed.\",\n {\n serviceName,\n serviceInstanceId,\n error: message,\n diagnostics,\n },\n \"warning\",\n );\n\n emit(\"meta.service_registry.runtime_status_unreachable\", {\n ...ctx,\n serviceName,\n serviceInstanceId,\n serviceTransportId: transport?.uuid ?? ctx.serviceTransportId,\n serviceOrigin: transport?.origin ?? ctx.serviceOrigin,\n transportProtocols: transport?.protocols ?? ctx.transportProtocols,\n __error: message,\n errored: true,\n });\n\n return {\n ...ctx,\n __error: message,\n errored: true,\n };\n } finally {\n this.runtimeStatusFallbackInFlightByInstance.delete(serviceInstanceId);\n }\n },\n \"Runs runtime-status inquiry fallback for a dependee instance after missed heartbeats.\",\n )\n .doOn(\"meta.service_registry.runtime_status_fallback_requested\")\n .emits(\"meta.service_registry.runtime_status_fallback_resolved\")\n .emitsOnFail(\"meta.service_registry.runtime_status_fallback_failed\");\n\n this.collectReadinessTask = Cadenza.createMetaTask(\n \"Collect distributed readiness\",\n async (ctx) => {\n const inquiryResult = await Cadenza.inquire(\n META_READINESS_INTENT,\n {\n detailLevel: ctx.detailLevel === \"full\" ? \"full\" : \"minimal\",\n includeDependencies: ctx.includeDependencies,\n refreshStaleDependencies: ctx.refreshStaleDependencies,\n targetServiceName: ctx.targetServiceName,\n targetServiceInstanceId: ctx.targetServiceInstanceId,\n },\n ctx.inquiryOptions ?? ctx.__inquiryOptions ?? {},\n );\n\n return {\n ...ctx,\n ...inquiryResult,\n };\n },\n \"Collects distributed readiness reports from services.\",\n )\n .doOn(\"meta.service_registry.readiness_requested\")\n .emits(\"meta.service_registry.readiness_collected\")\n .emitsOnFail(\"meta.service_registry.readiness_failed\");\n\n this.collectTransportDiagnosticsTask = Cadenza.createMetaTask(\n \"Collect transport diagnostics\",\n async (ctx) => {\n const inquiryResult = await Cadenza.inquire(\n META_RUNTIME_TRANSPORT_DIAGNOSTICS_INTENT,\n {\n detailLevel: ctx.detailLevel,\n includeErrorHistory: ctx.includeErrorHistory,\n errorHistoryLimit: ctx.errorHistoryLimit,\n },\n ctx.inquiryOptions ?? ctx.__inquiryOptions ?? {},\n );\n\n return {\n ...ctx,\n ...inquiryResult,\n };\n },\n \"Collects distributed transport diagnostics using inquiry responders.\",\n )\n .doOn(\"meta.service_registry.transport_diagnostics_requested\")\n .emits(\"meta.service_registry.transport_diagnostics_collected\")\n .emitsOnFail(\"meta.service_registry.transport_diagnostics_failed\");\n\n this.insertServiceTask = resolveServiceRegistryInsertTask(\n \"service\",\n {\n onConflict: {\n target: [\"name\"],\n action: {\n do: \"nothing\",\n },\n },\n },\n {\n // validateInputContext: true,\n inputSchema: {\n type: \"object\",\n properties: {\n data: {\n type: \"object\",\n properties: {\n name: {\n type: \"string\",\n },\n description: {\n type: \"string\",\n },\n display_name: {\n type: \"string\",\n },\n is_meta: {\n type: \"boolean\",\n },\n },\n required: [\"name\"],\n },\n },\n required: [\"data\"],\n },\n outputSchema: {\n type: \"object\",\n properties: {\n __serviceName: {\n type: \"string\",\n },\n },\n required: [\"__serviceName\"],\n },\n retryCount: 100,\n retryDelay: 10000,\n retryDelayMax: 60000,\n retryDelayFactor: 1.3,\n },\n )\n .emits(\"meta.service_registry.service_inserted\")\n .emitsOnFail(\"meta.service_registry.service_insertion_failed\");\n\n this.insertServiceInstanceTask = resolveServiceRegistryInsertTask(\n \"service_instance\",\n {},\n {\n inputSchema: {\n type: \"object\",\n properties: {\n data: {\n type: \"object\",\n properties: {\n uuid: {\n type: \"string\",\n },\n process_pid: {\n type: \"number\",\n },\n is_primary: {\n type: \"boolean\",\n },\n service_name: {\n type: \"string\",\n },\n is_active: {\n type: \"boolean\",\n },\n is_frontend: {\n type: \"boolean\",\n },\n is_database: {\n type: \"boolean\",\n },\n is_non_responsive: {\n type: \"boolean\",\n },\n is_blocked: {\n type: \"boolean\",\n },\n health: {\n type: \"object\",\n },\n },\n required: [\"uuid\", \"process_pid\", \"service_name\"],\n },\n },\n required: [\"data\"],\n },\n outputSchema: {\n type: \"object\",\n properties: {\n uuid: {\n type: \"string\",\n },\n },\n required: [\"uuid\"],\n },\n retryCount: 5,\n retryDelay: 1000,\n },\n ).then(\n Cadenza.createMetaTask(\n \"Setup service\",\n (ctx) => {\n const {\n serviceInstance,\n data,\n queryData,\n __useSocket,\n __retryCount,\n __isFrontend,\n } = ctx;\n const normalizedLocalInstance = normalizeServiceInstanceDescriptor({\n ...(serviceInstance ?? data ?? queryData?.data ?? {}),\n transports: ctx.__transportData ?? ctx.transportData ?? [],\n });\n\n if (\n !normalizedLocalInstance?.uuid ||\n !normalizedLocalInstance.serviceName\n ) {\n return false;\n }\n\n this.serviceInstanceId = normalizedLocalInstance.uuid;\n this.instances.set(\n normalizedLocalInstance.serviceName,\n [{ ...normalizedLocalInstance }],\n );\n this.useSocket = __useSocket;\n this.retryCount = __retryCount;\n this.isFrontend =\n typeof __isFrontend === \"boolean\"\n ? __isFrontend\n : !!normalizedLocalInstance.isFrontend;\n return {\n ...ctx,\n serviceInstance: normalizedLocalInstance,\n data: {\n ...(ctx.data ?? {}),\n uuid: normalizedLocalInstance.uuid,\n service_name: normalizedLocalInstance.serviceName,\n },\n __serviceName: normalizedLocalInstance.serviceName,\n __serviceInstanceId: normalizedLocalInstance.uuid,\n };\n },\n \"Sets service instance id after insertion\",\n )\n .emits(\"meta.service_registry.instance_inserted\")\n .then(\n Cadenza.createMetaTask(\n \"Prepare service transport inserts\",\n function* (ctx: AnyObject, emit) {\n const transportData = Array.isArray(ctx.__transportData)\n ? ctx.__transportData\n : Array.isArray(ctx.transportData)\n ? ctx.transportData\n : [];\n\n for (const transport of transportData) {\n const transportContext = {\n ...ctx,\n data: {\n ...transport,\n service_instance_id:\n transport.service_instance_id ?? ctx.__serviceInstanceId,\n },\n __registrationData: {\n ...transport,\n service_instance_id:\n transport.service_instance_id ?? ctx.__serviceInstanceId,\n },\n };\n emit(\n \"meta.service_registry.transport_registration_requested\",\n transportContext,\n );\n yield transportContext;\n }\n },\n \"Splits declared service transports into individual insert payloads.\",\n ).attachSignal(\"meta.service_registry.transport_registration_requested\"),\n ),\n );\n\n Cadenza.createMetaTask(\n \"Prepare service instance registration\",\n (ctx) => {\n const serviceName = String(\n ctx.data?.service_name ?? ctx.__serviceName ?? this.serviceName ?? \"\",\n ).trim();\n\n if (\n serviceName === \"CadenzaDB\" &&\n !Cadenza.getLocalCadenzaDBInsertTask(\"service_instance\")\n ) {\n Cadenza.schedule(\n \"meta.service_registry.instance_registration_requested\",\n { ...ctx },\n 250,\n );\n return false;\n }\n\n return ctx;\n },\n \"Waits for the exact local CadenzaDB service instance insert task during self-bootstrap.\",\n )\n .doOn(\"meta.service_registry.instance_registration_requested\")\n .then(this.insertServiceInstanceTask);\n\n this.insertServiceTransportTask = resolveServiceRegistryInsertTask(\n \"service_instance_transport\",\n {\n onConflict: {\n target: [\"service_instance_id\", \"role\", \"origin\"],\n action: {\n do: \"update\",\n set: {\n protocols: \"excluded\",\n security_profile: \"excluded\",\n auth_strategy: \"excluded\",\n deleted: \"false\",\n },\n },\n },\n },\n {\n inputSchema: {\n type: \"object\",\n properties: {\n data: {\n type: \"object\",\n properties: {\n uuid: {\n type: \"string\",\n },\n service_instance_id: {\n type: \"string\",\n },\n role: {\n type: \"string\",\n },\n origin: {\n type: \"string\",\n },\n protocols: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n security_profile: {\n type: \"string\",\n },\n auth_strategy: {\n type: \"string\",\n },\n },\n required: [\"uuid\", \"service_instance_id\", \"role\", \"origin\"],\n },\n },\n required: [\"data\"],\n },\n outputSchema: {\n type: \"object\",\n properties: {\n uuid: {\n type: \"string\",\n },\n },\n required: [\"uuid\"],\n },\n retryCount: 5,\n retryDelay: 1000,\n },\n )\n .emits(\"meta.service_registry.transport_registered\")\n .emitsOnFail(\"meta.service_registry.transport_registration_failed\");\n\n Cadenza.createMetaTask(\n \"Prepare service transport registration\",\n (ctx) => {\n const serviceName = String(\n ctx.__serviceName ?? this.serviceName ?? \"\",\n ).trim();\n\n if (\n serviceName === \"CadenzaDB\" &&\n !Cadenza.getLocalCadenzaDBInsertTask(\"service_instance_transport\")\n ) {\n Cadenza.schedule(\n \"meta.service_registry.transport_registration_requested\",\n { ...ctx },\n 250,\n );\n return false;\n }\n\n return ctx;\n },\n \"Waits for the exact local CadenzaDB service transport insert task during self-bootstrap.\",\n )\n .doOn(\"meta.service_registry.transport_registration_requested\")\n .then(this.insertServiceTransportTask);\n\n Cadenza.createMetaTask(\n \"Handle service creation\",\n (ctx) => {\n if (!ctx.__cadenzaDBConnect) {\n ctx.__skipRemoteExecution = true;\n }\n\n if (isBrowser || ctx.__isFrontend) {\n Cadenza.createMetaTask(\"Prepare for signal sync\", () => {\n return {};\n })\n // .doAfter(this.fullSyncTask)\n .then(\n Cadenza.createCadenzaDBQueryTask(\"signal_registry\", {\n fields: [\"name\"],\n filter: {\n global: true,\n },\n }).then(\n Cadenza.createMetaTask(\n // TODO this is outdated. Fix it.\n \"Create signal transmission tasks\",\n (ctx, emit) => {\n const signalRegistry = ctx.signalRegistry;\n for (const signal of signalRegistry) {\n emit(\"meta.service_registry.foreign_signal_registered\", {\n __emitterSignalName: signal.name,\n __listenerServiceName: signal.serviceName,\n });\n }\n\n return true;\n },\n ).then(\n Cadenza.createMetaTask(\"Connect to services\", (ctx, emit) => {\n const services: string[] = Array.from(\n new Set(\n ctx.signalRegistry.map((s: any) => s.serviceName),\n ),\n );\n for (const service of services) {\n const instances = this.instances\n .get(service)!\n .filter((i) => i.isActive && !i.isFrontend);\n for (const instance of instances) {\n const transport = this.getRouteableTransport(\n instance,\n this.useSocket ? \"socket\" : \"rest\",\n );\n if (!transport) {\n continue;\n }\n\n if (\n !this.hasTransportClientCreated(instance, transport.uuid)\n ) {\n emit(\"meta.service_registry.dependee_registered\", {\n serviceName: service,\n serviceInstanceId: instance.uuid,\n serviceTransportId: transport.uuid,\n serviceOrigin: transport.origin,\n transportProtocols: transport.protocols,\n communicationTypes: [\"signal\"],\n });\n this.markTransportClientCreated(instance, transport.uuid);\n }\n }\n }\n return {};\n }),\n ),\n ),\n );\n }\n\n return ctx;\n },\n \"Handles the request to create a service instance\",\n )\n .doOn(\"meta.create_service_requested\")\n .then(this.insertServiceTask);\n }\n\n reset() {\n this.instances.clear();\n this.deputies.clear();\n this.remoteSignals.clear();\n this.remoteIntents.clear();\n this.gatheredSyncTransmissionServices.clear();\n this.remoteIntentDeputiesByKey.clear();\n this.remoteIntentDeputiesByTask.clear();\n this.dependeesByService.clear();\n this.dependeeByInstance.clear();\n this.readinessDependeesByService.clear();\n this.readinessDependeeByInstance.clear();\n this.lastHeartbeatAtByInstance.clear();\n this.missedHeartbeatsByInstance.clear();\n this.runtimeStatusFallbackInFlightByInstance.clear();\n this.activeRoutineExecutionIds.clear();\n this.numberOfRunningGraphs = 0;\n this.runtimeStatusHeartbeatStarted = false;\n this.lastRuntimeStatusSnapshot = null;\n this.isFrontend = false;\n }\n}\n","/**\n * A boolean variable indicating whether the current runtime environment is Node.js.\n *\n * This variable checks for the presence of the `process` object, which is specific to Node.js,\n * and verifies if the `process.versions.node` property is defined to confirm the environment.\n *\n * If the runtime is Node.js, `isNode` will be `true`; otherwise, it will be `false`.\n */\nexport const isNode =\n typeof process !== \"undefined\" && process.versions?.node != null;\n\n/**\n * A boolean variable that indicates whether the current runtime environment\n * is a browser. It checks for the presence of the `window` object and the\n * `document` property within it to determine if the code is running in a\n * browser context.\n *\n * - Returns `true` if the `window` object and its `document` property are\n * both defined, which typically indicates a browser environment.\n * - Returns `false` if the `window` object or `document` property is\n * undefined, which typically signifies a non-browser environment such\n * as a Node.js environment.\n */\nexport const isBrowser =\n typeof window !== \"undefined\" && typeof window.document !== \"undefined\";\n","import type { AnyObject } from \"@cadenza.io/core\";\nimport type {\n InquiryResponderDescriptor,\n InquiryResponderStatus,\n} from \"../types/inquiry\";\n\nexport const META_INTENT_PREFIX = \"meta-\";\nexport const META_RUNTIME_TRANSPORT_DIAGNOSTICS_INTENT =\n \"meta-runtime-transport-diagnostics\";\nexport const META_RUNTIME_STATUS_INTENT = \"meta-runtime-status\";\nexport const META_READINESS_INTENT = \"meta-readiness\";\n\nfunction isPlainObject(value: unknown): value is Record<string, any> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n Object.getPrototypeOf(value) === Object.prototype\n );\n}\n\nfunction deepMergeDeterministic(left: any, right: any): any {\n if (Array.isArray(left) && Array.isArray(right)) {\n return [...left, ...right];\n }\n\n if (isPlainObject(left) && isPlainObject(right)) {\n const merged: Record<string, any> = { ...left };\n const keys = Array.from(new Set([...Object.keys(left), ...Object.keys(right)])).sort();\n\n for (const key of keys) {\n if (!(key in left)) {\n merged[key] = right[key];\n continue;\n }\n\n if (!(key in right)) {\n merged[key] = left[key];\n continue;\n }\n\n merged[key] = deepMergeDeterministic(left[key], right[key]);\n }\n\n return merged;\n }\n\n return right;\n}\n\nexport function mergeInquiryContexts(contexts: AnyObject[]): AnyObject {\n return contexts.reduce((acc, next) => deepMergeDeterministic(acc, next), {});\n}\n\nexport function isMetaIntentName(intentName: string): boolean {\n return intentName.startsWith(META_INTENT_PREFIX);\n}\n\nexport function shouldExecuteInquiryResponder(\n inquiry: string,\n responderIsMeta: boolean,\n): boolean {\n if (!isMetaIntentName(inquiry)) {\n return true;\n }\n\n return responderIsMeta;\n}\n\nexport function compareResponderDescriptors(\n left: InquiryResponderDescriptor,\n right: InquiryResponderDescriptor,\n): number {\n if (left.serviceName !== right.serviceName) {\n return left.serviceName.localeCompare(right.serviceName);\n }\n\n if (left.taskName !== right.taskName) {\n return left.taskName.localeCompare(right.taskName);\n }\n\n if (left.taskVersion !== right.taskVersion) {\n return left.taskVersion - right.taskVersion;\n }\n\n return left.localTaskName.localeCompare(right.localTaskName);\n}\n\nexport function summarizeResponderStatuses(\n statuses: InquiryResponderStatus[],\n): {\n responded: number;\n failed: number;\n timedOut: number;\n pending: number;\n} {\n let responded = 0;\n let failed = 0;\n let timedOut = 0;\n let pending = 0;\n\n for (const status of statuses) {\n if (status.status === \"fulfilled\") responded++;\n if (status.status === \"failed\") failed++;\n if (status.status === \"timed_out\") timedOut++;\n }\n\n pending = Math.max(0, statuses.length - responded - failed - timedOut);\n\n return { responded, failed, timedOut, pending };\n}\n","import type {\n ServiceTransportConfig,\n ServiceTransportDescriptor,\n ServiceTransportProtocol,\n ServiceTransportRole,\n ServiceTransportSecurityProfile,\n} from \"../types/transport\";\n\nconst DEFAULT_PROTOCOLS: ServiceTransportProtocol[] = [\"rest\", \"socket\"];\n\nfunction normalizeString(value: unknown): string {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\n\nexport function normalizeTransportProtocols(\n value: unknown,\n): ServiceTransportProtocol[] {\n const rawValues = Array.isArray(value)\n ? value\n : typeof value === \"string\"\n ? value.split(\",\")\n : [];\n\n const normalized = rawValues\n .map((entry) => normalizeString(entry))\n .filter(\n (entry): entry is ServiceTransportProtocol =>\n entry === \"rest\" || entry === \"socket\",\n );\n\n return Array.from(new Set(normalized));\n}\n\nexport function normalizeTransportOrigin(origin: unknown): string | null {\n const raw = normalizeString(origin);\n if (!raw) {\n return null;\n }\n\n let parsed: URL;\n try {\n parsed = new URL(raw);\n } catch {\n return null;\n }\n\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n return null;\n }\n\n if (parsed.pathname && parsed.pathname !== \"/\") {\n return null;\n }\n\n if (parsed.search || parsed.hash) {\n return null;\n }\n\n return parsed.origin;\n}\n\nfunction normalizeSecurityProfile(\n value: unknown,\n): ServiceTransportSecurityProfile | null {\n const normalized = normalizeString(value);\n if (\n normalized === \"low\" ||\n normalized === \"medium\" ||\n normalized === \"high\"\n ) {\n return normalized;\n }\n\n return null;\n}\n\nexport function normalizeServiceTransportConfig(\n value: unknown,\n): ServiceTransportConfig | null {\n const raw = (value ?? {}) as Record<string, unknown>;\n const role = normalizeString(raw.role) as ServiceTransportRole;\n const origin = normalizeTransportOrigin(raw.origin);\n const protocols = normalizeTransportProtocols(raw.protocols);\n\n if (!origin) {\n return null;\n }\n\n if (role !== \"internal\" && role !== \"public\") {\n return null;\n }\n\n return {\n role,\n origin,\n protocols: protocols.length > 0 ? protocols : [...DEFAULT_PROTOCOLS],\n securityProfile: normalizeSecurityProfile(raw.securityProfile),\n authStrategy: normalizeString(raw.authStrategy) || null,\n };\n}\n\nexport function normalizeServiceTransportDescriptor(\n value: unknown,\n): ServiceTransportDescriptor | null {\n const raw = (value ?? {}) as Record<string, unknown>;\n const uuid = normalizeString(raw.uuid);\n const serviceInstanceId = normalizeString(\n raw.serviceInstanceId ?? raw.service_instance_id,\n );\n const config = normalizeServiceTransportConfig(raw);\n\n if (!uuid || !serviceInstanceId || !config) {\n return null;\n }\n\n return {\n uuid,\n serviceInstanceId,\n role: config.role,\n origin: config.origin,\n protocols: config.protocols ?? [...DEFAULT_PROTOCOLS],\n securityProfile: config.securityProfile ?? null,\n authStrategy: config.authStrategy ?? null,\n deleted: Boolean(raw.deleted),\n clientCreated: Boolean(raw.clientCreated ?? raw.client_created ?? false),\n };\n}\n\nexport function transportSupportsProtocol(\n transport: ServiceTransportDescriptor | null | undefined,\n protocol: ServiceTransportProtocol,\n): boolean {\n return !!transport && transport.protocols.includes(protocol);\n}\n\nexport function selectTransportForRole(\n transports: ServiceTransportDescriptor[],\n role: ServiceTransportRole,\n protocol?: ServiceTransportProtocol,\n): ServiceTransportDescriptor | undefined {\n const filtered = transports.filter(\n (transport) =>\n !transport.deleted &&\n transport.role === role &&\n (!protocol || transportSupportsProtocol(transport, protocol)),\n );\n\n return filtered.sort((left, right) => {\n const leftIsBootstrap = left.uuid.endsWith(\"-bootstrap\") ? 1 : 0;\n const rightIsBootstrap = right.uuid.endsWith(\"-bootstrap\") ? 1 : 0;\n if (leftIsBootstrap !== rightIsBootstrap) {\n return leftIsBootstrap - rightIsBootstrap;\n }\n\n return left.origin.localeCompare(right.origin);\n })[0];\n}\n\nexport function buildTransportClientKey(\n transport: Pick<ServiceTransportDescriptor, \"uuid\">,\n): string {\n return transport.uuid;\n}\n\nexport function parseTransportOrigin(\n origin: string,\n): { protocol: \"http\" | \"https\"; hostname: string; port: number } | null {\n const normalized = normalizeTransportOrigin(origin);\n if (!normalized) {\n return null;\n }\n\n const parsed = new URL(normalized);\n const protocol = parsed.protocol === \"https:\" ? \"https\" : \"http\";\n const port = parsed.port\n ? Number(parsed.port)\n : protocol === \"https\"\n ? 443\n : 80;\n\n return {\n protocol,\n hostname: parsed.hostname,\n port,\n };\n}\n","import type { AnyObject } from \"@cadenza.io/core\";\nimport type { ServiceInstanceDescriptor } from \"../types/serviceRegistry\";\nimport type {\n ServiceTransportDescriptor,\n ServiceTransportProtocol,\n ServiceTransportRole,\n} from \"../types/transport\";\nimport {\n buildTransportClientKey,\n normalizeServiceTransportDescriptor,\n selectTransportForRole,\n} from \"./transport\";\n\nfunction normalizeString(value: unknown): string {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\n\nfunction normalizeTransportArray(\n value: unknown,\n serviceInstanceId: string,\n): ServiceTransportDescriptor[] {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return value\n .map((entry) =>\n normalizeServiceTransportDescriptor({\n ...((entry ?? {}) as Record<string, unknown>),\n service_instance_id:\n (entry as Record<string, unknown> | undefined)?.service_instance_id ??\n (entry as Record<string, unknown> | undefined)?.serviceInstanceId ??\n serviceInstanceId,\n }),\n )\n .filter((transport): transport is ServiceTransportDescriptor => !!transport)\n .sort((left, right) => left.origin.localeCompare(right.origin));\n}\n\nexport function normalizeServiceInstanceDescriptor(\n value: unknown,\n): ServiceInstanceDescriptor | null {\n const raw = (value ?? {}) as Record<string, unknown>;\n const uuid = normalizeString(raw.uuid);\n const serviceName = normalizeString(raw.serviceName ?? raw.service_name);\n\n if (!uuid || !serviceName) {\n return null;\n }\n\n const transports = normalizeTransportArray(raw.transports, uuid);\n\n return {\n uuid,\n serviceName,\n numberOfRunningGraphs: Math.max(\n 0,\n Math.trunc(\n Number(raw.numberOfRunningGraphs ?? raw.number_of_running_graphs ?? 0) ||\n 0,\n ),\n ),\n isPrimary: Boolean(raw.isPrimary ?? raw.is_primary ?? false),\n isActive: Boolean(raw.isActive ?? raw.is_active ?? true),\n isNonResponsive: Boolean(\n raw.isNonResponsive ?? raw.is_non_responsive ?? false,\n ),\n isBlocked: Boolean(raw.isBlocked ?? raw.is_blocked ?? false),\n runtimeState:\n raw.runtimeState === \"healthy\" ||\n raw.runtimeState === \"degraded\" ||\n raw.runtimeState === \"overloaded\" ||\n raw.runtimeState === \"unavailable\"\n ? raw.runtimeState\n : undefined,\n acceptingWork:\n typeof raw.acceptingWork === \"boolean\" ? raw.acceptingWork : undefined,\n reportedAt:\n typeof raw.reportedAt === \"string\"\n ? raw.reportedAt\n : typeof raw.reported_at === \"string\"\n ? raw.reported_at\n : undefined,\n health: (raw.health ?? {}) as AnyObject,\n isFrontend: Boolean(raw.isFrontend ?? raw.is_frontend ?? false),\n isDatabase: Boolean(raw.isDatabase ?? raw.is_database ?? false),\n isBootstrapPlaceholder: Boolean(\n raw.isBootstrapPlaceholder ?? raw.is_bootstrap_placeholder ?? false,\n ),\n transports,\n clientCreatedTransportIds: Array.isArray(raw.clientCreatedTransportIds)\n ? raw.clientCreatedTransportIds\n .map((entry) => normalizeString(entry))\n .filter((entry) => entry.length > 0)\n : undefined,\n };\n}\n\nexport function getRouteableTransport(\n instance: ServiceInstanceDescriptor,\n role: ServiceTransportRole,\n protocol?: ServiceTransportProtocol,\n): ServiceTransportDescriptor | undefined {\n return selectTransportForRole(instance.transports ?? [], role, protocol);\n}\n\nexport function getTransportClientKeyForRole(\n instance: ServiceInstanceDescriptor,\n role: ServiceTransportRole,\n protocol?: ServiceTransportProtocol,\n): string | null {\n const transport = getRouteableTransport(instance, role, protocol);\n if (!transport) {\n return null;\n }\n\n return buildTransportClientKey(transport);\n}\n","import type { AnyObject } from \"@cadenza.io/core\";\nimport { v4 as uuid } from \"uuid\";\n\nexport function ensureDelegationContextMetadata<T extends AnyObject>(\n input: T | undefined,\n): T & {\n __deputyExecId: string;\n __metadata: AnyObject;\n} {\n const context =\n input && typeof input === \"object\" ? ({ ...input } as T) : ({} as T);\n const metadata =\n context.__metadata && typeof context.__metadata === \"object\"\n ? { ...context.__metadata }\n : {};\n const deputyExecId =\n typeof metadata.__deputyExecId === \"string\" &&\n metadata.__deputyExecId.length > 0\n ? metadata.__deputyExecId\n : typeof context.__deputyExecId === \"string\" &&\n context.__deputyExecId.length > 0\n ? context.__deputyExecId\n : uuid();\n\n return {\n ...context,\n __deputyExecId: deputyExecId,\n __metadata: {\n ...metadata,\n __deputyExecId: deputyExecId,\n },\n };\n}\n","import type { RuntimeStatusState } from \"./runtimeStatus\";\n\nexport type ReadinessState = \"ready\" | \"degraded\" | \"blocked\";\nexport type DependencyReadinessState =\n | \"ready\"\n | \"degraded\"\n | \"overloaded\"\n | \"unavailable\";\n\nexport interface DependencyReadinessEvaluationInput {\n exists: boolean;\n runtimeState: RuntimeStatusState;\n acceptingWork: boolean;\n missedHeartbeats: number;\n missThreshold: number;\n}\n\nexport interface DependencyReadinessEvaluation {\n state: DependencyReadinessState;\n stale: boolean;\n blocked: boolean;\n reason:\n | \"missing\"\n | \"heartbeat-timeout\"\n | \"heartbeat-stale\"\n | \"runtime-unavailable\"\n | \"runtime-overloaded\"\n | \"runtime-degraded\"\n | \"runtime-healthy\";\n}\n\nexport interface DependencyReadinessSummary {\n total: number;\n ready: number;\n degraded: number;\n overloaded: number;\n unavailable: number;\n stale: number;\n}\n\nexport function evaluateDependencyReadiness(\n input: DependencyReadinessEvaluationInput,\n): DependencyReadinessEvaluation {\n const missedHeartbeats = Math.max(\n 0,\n Math.trunc(Number(input.missedHeartbeats) || 0),\n );\n const stale = missedHeartbeats > 0;\n const timeoutReached = missedHeartbeats >= Math.max(1, input.missThreshold);\n\n if (!input.exists) {\n return {\n state: \"unavailable\",\n stale: true,\n blocked: true,\n reason: \"missing\",\n };\n }\n\n if (timeoutReached) {\n return {\n state: \"unavailable\",\n stale: true,\n blocked: true,\n reason: \"heartbeat-timeout\",\n };\n }\n\n if (input.runtimeState === \"unavailable\" || !input.acceptingWork) {\n return {\n state: \"unavailable\",\n stale,\n blocked: true,\n reason: \"runtime-unavailable\",\n };\n }\n\n if (stale) {\n return {\n state: \"degraded\",\n stale: true,\n blocked: false,\n reason: \"heartbeat-stale\",\n };\n }\n\n if (input.runtimeState === \"overloaded\") {\n return {\n state: \"overloaded\",\n stale: false,\n blocked: false,\n reason: \"runtime-overloaded\",\n };\n }\n\n if (input.runtimeState === \"degraded\") {\n return {\n state: \"degraded\",\n stale: false,\n blocked: false,\n reason: \"runtime-degraded\",\n };\n }\n\n return {\n state: \"ready\",\n stale: false,\n blocked: false,\n reason: \"runtime-healthy\",\n };\n}\n\nexport function summarizeDependencyReadiness(\n evaluations: DependencyReadinessEvaluation[],\n): DependencyReadinessSummary {\n const summary: DependencyReadinessSummary = {\n total: evaluations.length,\n ready: 0,\n degraded: 0,\n overloaded: 0,\n unavailable: 0,\n stale: 0,\n };\n\n for (const evaluation of evaluations) {\n if (evaluation.state === \"ready\") summary.ready++;\n if (evaluation.state === \"degraded\") summary.degraded++;\n if (evaluation.state === \"overloaded\") summary.overloaded++;\n if (evaluation.state === \"unavailable\") summary.unavailable++;\n if (evaluation.stale) summary.stale++;\n }\n\n return summary;\n}\n\nexport function resolveServiceReadinessState(\n localRuntimeState: RuntimeStatusState,\n localAcceptingWork: boolean,\n dependencySummary: DependencyReadinessSummary,\n): ReadinessState {\n if (localRuntimeState === \"unavailable\" || !localAcceptingWork) {\n return \"blocked\";\n }\n\n if (dependencySummary.unavailable > 0) {\n return \"blocked\";\n }\n\n if (\n dependencySummary.degraded > 0 ||\n dependencySummary.overloaded > 0 ||\n dependencySummary.stale > 0\n ) {\n return \"degraded\";\n }\n\n return \"ready\";\n}\n","export type RuntimeStatusState =\n | \"healthy\"\n | \"degraded\"\n | \"overloaded\"\n | \"unavailable\";\n\nexport interface RuntimeStatusSnapshot {\n state: RuntimeStatusState;\n acceptingWork: boolean;\n numberOfRunningGraphs: number;\n isActive: boolean;\n isNonResponsive: boolean;\n isBlocked: boolean;\n}\n\nexport interface ResolveRuntimeStatusInput {\n numberOfRunningGraphs: number;\n isActive: boolean;\n isNonResponsive: boolean;\n isBlocked: boolean;\n degradedGraphThreshold: number;\n overloadedGraphThreshold: number;\n}\n\nexport function resolveRuntimeStatus(\n input: ResolveRuntimeStatusInput,\n): RuntimeStatusSnapshot {\n const numberOfRunningGraphs = Math.max(\n 0,\n Math.trunc(Number(input.numberOfRunningGraphs) || 0),\n );\n\n const isActive = Boolean(input.isActive);\n const isNonResponsive = Boolean(input.isNonResponsive);\n const isBlocked = Boolean(input.isBlocked);\n\n if (!isActive || isNonResponsive || isBlocked) {\n return {\n state: \"unavailable\",\n acceptingWork: false,\n numberOfRunningGraphs,\n isActive,\n isNonResponsive,\n isBlocked,\n };\n }\n\n if (numberOfRunningGraphs >= input.overloadedGraphThreshold) {\n return {\n state: \"overloaded\",\n acceptingWork: true,\n numberOfRunningGraphs,\n isActive,\n isNonResponsive,\n isBlocked,\n };\n }\n\n if (numberOfRunningGraphs >= input.degradedGraphThreshold) {\n return {\n state: \"degraded\",\n acceptingWork: true,\n numberOfRunningGraphs,\n isActive,\n isNonResponsive,\n isBlocked,\n };\n }\n\n return {\n state: \"healthy\",\n acceptingWork: true,\n numberOfRunningGraphs,\n isActive,\n isNonResponsive,\n isBlocked,\n };\n}\n\nexport function runtimeStatusPriority(state: RuntimeStatusState): number {\n switch (state) {\n case \"healthy\":\n return 0;\n case \"degraded\":\n return 1;\n case \"overloaded\":\n return 2;\n case \"unavailable\":\n return 3;\n default:\n return 4;\n }\n}\n\nexport function hasSignificantRuntimeStatusChange(\n previous: RuntimeStatusSnapshot | null,\n next: RuntimeStatusSnapshot,\n): boolean {\n if (!previous) {\n return true;\n }\n\n return (\n previous.state !== next.state ||\n previous.acceptingWork !== next.acceptingWork ||\n previous.isActive !== next.isActive ||\n previous.isNonResponsive !== next.isNonResponsive ||\n previous.isBlocked !== next.isBlocked\n );\n}\n","import { GraphContext, InquiryOptions, Task } from \"@cadenza.io/core\";\nimport type {\n AnyObject,\n Schema,\n TaskResult,\n ThrottleTagGetter,\n} from \"@cadenza.io/core\";\nimport { v4 as uuid } from \"uuid\";\nimport Cadenza from \"../../Cadenza\";\n\n/**\n * Represents a task responsible for transmitting signals to a remote service\n * through the meta-layer for operations delegation.\n *\n * @class\n * @extends Task\n */\nexport default class SignalTransmissionTask extends Task {\n readonly isDeputy: boolean = true;\n\n protected readonly signalName: string;\n protected readonly serviceName: string;\n\n /**\n * Constructs a new instance of the class and initializes it with the provided parameters.\n *\n * @param {string} name - The name of the task being created.\n * @param {string} signalName - The name of the signal associated with this task.\n * @param {string} serviceName - The name of the service associated with this task.\n * @param {string} [description=\"\"] - An optional description of the task.\n * @param {number} [concurrency=0] - The maximum allowed concurrency for this task.\n * @param {number} [timeout=0] - The maximum execution time for this task, in milliseconds.\n * @param {boolean} [register=true] - Whether the task should be registered upon creation.\n * @param {boolean} [isUnique=false] - Indicates if the task should enforce uniqueness.\n * @param {boolean} [isMeta=false] - Specifies if the task is a meta-task.\n * @param {boolean} [isSubMeta=false] - Specifies if the task is a sub-meta-task.\n * @param {boolean} [isHidden=false] - Indicates if the task is hidden from visibility.\n * @param {ThrottleTagGetter|undefined} [getTagCallback=undefined] - A callback for tag throttling logic.\n * @param {SchemaDefinition|undefined} [inputSchema=undefined] - An optional schema for validating input data.\n * @param {boolean} [validateInputContext=false] - Whether to validate the input context against the input schema.\n * @param {SchemaDefinition|undefined} [outputSchema=undefined] - An optional schema for validating output data.\n * @param {boolean} [validateOutputContext=false] - Whether to validate the output context against the output schema.\n * @param {number} [retryCount=0] - The number of retry attempts allowed in case of task failure.\n * @param {number} [retryDelay=0] - The initial delay before retrying a failed task, in milliseconds.\n * @param {number} [retryDelayMax=0] - The maximum delay between retry attempts, in milliseconds.\n * @param {number} [retryDelayFactor=1] - A multiplier applied to retry delay for exponential backoff.\n * @return {void} Does not return a value.\n */\n constructor(\n name: string,\n signalName: string,\n serviceName: string,\n description: string = \"\",\n concurrency: number = 0,\n timeout: number = 0,\n register: boolean = true,\n isUnique: boolean = false,\n isMeta: boolean = true,\n isSubMeta: boolean = false,\n isHidden: boolean = false,\n getTagCallback: ThrottleTagGetter | undefined = undefined,\n inputSchema: Schema | undefined = undefined,\n validateInputContext: boolean = false,\n outputSchema: Schema | undefined = undefined,\n validateOutputContext: boolean = false,\n retryCount: number = 0,\n retryDelay: number = 0,\n retryDelayMax: number = 0,\n retryDelayFactor: number = 1,\n ) {\n const taskFunction = (context: AnyObject): TaskResult => {\n context.__routineExecId = uuid();\n return context;\n };\n\n super(\n name,\n taskFunction,\n description,\n concurrency,\n timeout,\n register,\n isUnique,\n isMeta,\n isSubMeta,\n isHidden,\n getTagCallback,\n inputSchema,\n validateInputContext,\n outputSchema,\n validateOutputContext,\n retryCount,\n retryDelay,\n retryDelayMax,\n retryDelayFactor,\n );\n\n this.serviceName = serviceName;\n this.signalName = signalName;\n\n this.doOn(signalName);\n this.then(Cadenza.serviceRegistry.getBalancedInstance);\n }\n\n /**\n * Executes the given task function within the provided execution context.\n *\n * @param {GraphContext} context - The context object providing the graph execution environment and metadata.\n * @param {Function} emit - A function to emit signals with the provided name and context.\n * @param inquire\n * @param {Function} progressCallback - A callback function to report the progress of the task execution as a number between 0 and 1.\n * @return {TaskResult} The result of the executed task function.\n */\n execute(\n context: GraphContext,\n emit: (signal: string, ctx: AnyObject) => void,\n inquire: (\n inquiry: string,\n context: AnyObject,\n options: InquiryOptions,\n ) => Promise<AnyObject>,\n progressCallback: (progress: number) => void,\n ): TaskResult {\n const ctx = context.getContext();\n const metadata = context.getMetadata();\n\n const deputyContext = {\n __localTaskName: this.name,\n __localServiceName: Cadenza.serviceRegistry.serviceName,\n __serviceName: this.serviceName,\n __executionTraceId: metadata.__executionTraceId ?? null,\n __localRoutineExecId:\n metadata.__routineExecId ?? metadata.__metadata?.__routineExecId,\n __metadata: {\n ...metadata,\n __deputyTaskName: this.name,\n },\n __signalName: this.signalName,\n __signalEmissionId: metadata.__signalEmission?.uuid,\n ...ctx,\n };\n\n return this.taskFunction(deputyContext, emit, inquire, progressCallback);\n }\n}\n","import Cadenza from \"../Cadenza\";\nimport { META_RUNTIME_TRANSPORT_DIAGNOSTICS_INTENT } from \"../utils/inquiry\";\nimport { ensureDelegationContextMetadata } from \"../utils/delegation\";\nimport type { AnyObject } from \"@cadenza.io/core\";\n\ntype TransportDetailLevel = \"summary\" | \"full\";\n\ninterface TransportDiagnosticErrorEntry {\n at: string;\n message: string;\n}\n\ninterface FetchClientDiagnosticsState {\n fetchId: string;\n serviceName: string;\n url: string;\n connected: boolean;\n destroyed: boolean;\n lastHandshakeAt: string | null;\n lastHandshakeError: string | null;\n lastError: string | null;\n lastErrorAt: number;\n errorHistory: TransportDiagnosticErrorEntry[];\n delegationRequests: number;\n delegationFailures: number;\n signalTransmissions: number;\n signalFailures: number;\n statusChecks: number;\n statusFailures: number;\n updatedAt: number;\n}\n\ninterface ParsedFetchResponse {\n ok: boolean;\n status: number;\n statusText: string;\n headers: Record<string, string>;\n data: any;\n}\n\nexport default class RestController {\n private static _instance: RestController;\n public static get instance(): RestController {\n if (!this._instance) this._instance = new RestController();\n return this._instance;\n }\n\n private fetchClientDiagnostics: Map<string, FetchClientDiagnosticsState> =\n new Map();\n private readonly diagnosticsErrorHistoryLimit = 100;\n private readonly diagnosticsMaxClientEntries = 500;\n private readonly destroyedDiagnosticsTtlMs = 15 * 60_000;\n\n private pruneFetchClientDiagnostics(now = Date.now()): void {\n for (const [fetchId, state] of this.fetchClientDiagnostics.entries()) {\n if (state.destroyed && now - state.updatedAt > this.destroyedDiagnosticsTtlMs) {\n this.fetchClientDiagnostics.delete(fetchId);\n }\n }\n\n if (this.fetchClientDiagnostics.size <= this.diagnosticsMaxClientEntries) {\n return;\n }\n\n const entriesByEvictionPriority = Array.from(\n this.fetchClientDiagnostics.entries(),\n ).sort((left, right) => {\n if (left[1].destroyed !== right[1].destroyed) {\n return left[1].destroyed ? -1 : 1;\n }\n\n return left[1].updatedAt - right[1].updatedAt;\n });\n\n while (\n this.fetchClientDiagnostics.size > this.diagnosticsMaxClientEntries &&\n entriesByEvictionPriority.length > 0\n ) {\n const [fetchId] = entriesByEvictionPriority.shift()!;\n this.fetchClientDiagnostics.delete(fetchId);\n }\n }\n\n private resolveTransportDiagnosticsOptions(ctx: AnyObject): {\n detailLevel: TransportDetailLevel;\n includeErrorHistory: boolean;\n errorHistoryLimit: number;\n } {\n const detailLevel: TransportDetailLevel =\n ctx.detailLevel === \"full\" ? \"full\" : \"summary\";\n const includeErrorHistory = Boolean(ctx.includeErrorHistory);\n const requestedLimit = Number(ctx.errorHistoryLimit);\n const errorHistoryLimit = Number.isFinite(requestedLimit)\n ? Math.max(1, Math.min(200, Math.trunc(requestedLimit)))\n : 10;\n\n return {\n detailLevel,\n includeErrorHistory,\n errorHistoryLimit,\n };\n }\n\n private ensureFetchClientDiagnostics(\n fetchId: string,\n serviceName: string,\n url: string,\n ): FetchClientDiagnosticsState {\n const now = Date.now();\n this.pruneFetchClientDiagnostics(now);\n\n let state = this.fetchClientDiagnostics.get(fetchId);\n if (!state) {\n state = {\n fetchId,\n serviceName,\n url,\n connected: false,\n destroyed: false,\n lastHandshakeAt: null,\n lastHandshakeError: null,\n lastError: null,\n lastErrorAt: 0,\n errorHistory: [],\n delegationRequests: 0,\n delegationFailures: 0,\n signalTransmissions: 0,\n signalFailures: 0,\n statusChecks: 0,\n statusFailures: 0,\n updatedAt: now,\n };\n this.fetchClientDiagnostics.set(fetchId, state);\n } else {\n state.serviceName = serviceName;\n state.url = url;\n }\n\n this.pruneFetchClientDiagnostics(now);\n return state;\n }\n\n private getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n if (typeof error === \"string\") {\n return error;\n }\n try {\n return JSON.stringify(error);\n } catch {\n return String(error);\n }\n }\n\n private async parseFetchResponse(response: Response): Promise<ParsedFetchResponse> {\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n const rawText = await response.text();\n const headers = Object.fromEntries(response.headers.entries());\n\n if (rawText.length === 0) {\n return {\n ok: response.ok,\n status: response.status,\n statusText: response.statusText,\n headers,\n data: {},\n };\n }\n\n if (!contentType.toLowerCase().includes(\"application/json\")) {\n throw new Error(\n `Expected JSON response from ${response.url ?? \"remote service\"} but received ${contentType || \"unknown content type\"} (HTTP ${response.status}). Body preview: ${rawText.slice(0, 200)}`,\n );\n }\n\n try {\n return {\n ok: response.ok,\n status: response.status,\n statusText: response.statusText,\n headers,\n data: JSON.parse(rawText),\n };\n } catch (error) {\n throw new Error(\n `Failed to parse JSON response from ${response.url ?? \"remote service\"} (HTTP ${response.status}). Body preview: ${rawText.slice(0, 200)}. Parse error: ${this.getErrorMessage(error)}`,\n );\n }\n }\n\n private recordFetchClientError(\n fetchId: string,\n serviceName: string,\n url: string,\n error: unknown,\n ): void {\n const state = this.ensureFetchClientDiagnostics(fetchId, serviceName, url);\n const message = this.getErrorMessage(error);\n const now = Date.now();\n\n state.lastError = message;\n state.lastErrorAt = now;\n state.updatedAt = now;\n state.errorHistory.push({ at: new Date(now).toISOString(), message });\n\n if (state.errorHistory.length > this.diagnosticsErrorHistoryLimit) {\n state.errorHistory.splice(\n 0,\n state.errorHistory.length - this.diagnosticsErrorHistoryLimit,\n );\n }\n }\n\n private collectFetchTransportDiagnostics(ctx: AnyObject): AnyObject {\n this.pruneFetchClientDiagnostics();\n const { detailLevel, includeErrorHistory, errorHistoryLimit } =\n this.resolveTransportDiagnosticsOptions(ctx);\n const serviceName = Cadenza.serviceRegistry.serviceName ?? \"UnknownService\";\n const states = Array.from(this.fetchClientDiagnostics.values()).sort((a, b) =>\n a.fetchId.localeCompare(b.fetchId),\n );\n\n const summary = {\n detailLevel,\n totalClients: states.length,\n connectedClients: states.filter((state) => state.connected).length,\n destroyedClients: states.filter((state) => state.destroyed).length,\n delegationRequests: states.reduce(\n (acc, state) => acc + state.delegationRequests,\n 0,\n ),\n delegationFailures: states.reduce(\n (acc, state) => acc + state.delegationFailures,\n 0,\n ),\n signalTransmissions: states.reduce(\n (acc, state) => acc + state.signalTransmissions,\n 0,\n ),\n signalFailures: states.reduce((acc, state) => acc + state.signalFailures, 0),\n statusChecks: states.reduce((acc, state) => acc + state.statusChecks, 0),\n statusFailures: states.reduce((acc, state) => acc + state.statusFailures, 0),\n latestError:\n states\n .slice()\n .sort((a, b) => b.lastErrorAt - a.lastErrorAt)\n .find((state) => state.lastError)?.lastError ?? null,\n };\n\n if (detailLevel === \"summary\") {\n return {\n transportDiagnostics: {\n [serviceName]: {\n fetchClient: summary,\n },\n },\n };\n }\n\n return {\n transportDiagnostics: {\n [serviceName]: {\n fetchClient: {\n ...summary,\n clients: states.map((state) => {\n const details: AnyObject = {\n fetchId: state.fetchId,\n serviceName: state.serviceName,\n url: state.url,\n connected: state.connected,\n destroyed: state.destroyed,\n lastHandshakeAt: state.lastHandshakeAt,\n lastHandshakeError: state.lastHandshakeError,\n latestError: state.lastError,\n delegationRequests: state.delegationRequests,\n delegationFailures: state.delegationFailures,\n signalTransmissions: state.signalTransmissions,\n signalFailures: state.signalFailures,\n statusChecks: state.statusChecks,\n statusFailures: state.statusFailures,\n };\n\n if (includeErrorHistory) {\n details.errorHistory = state.errorHistory.slice(-errorHistoryLimit);\n }\n\n return details;\n }),\n },\n },\n },\n };\n }\n\n fetchDataWithTimeout = async (\n url: string,\n requestInit: RequestInit,\n timeoutMs: number,\n ): Promise<any> => {\n if (typeof globalThis.fetch !== \"function\") {\n throw new Error(\"Browser REST controller requires global fetch.\");\n }\n\n const signal = AbortSignal.timeout(timeoutMs);\n const response = await globalThis.fetch(url, { ...requestInit, signal });\n const parsedResponse = await this.parseFetchResponse(response);\n return parsedResponse.data;\n };\n\n constructor() {\n Cadenza.createMetaTask(\n \"Collect fetch transport diagnostics\",\n (ctx) => this.collectFetchTransportDiagnostics(ctx),\n \"Responds to distributed transport diagnostics inquiries with REST/fetch client data.\",\n ).respondsTo(META_RUNTIME_TRANSPORT_DIAGNOSTICS_INTENT);\n\n Cadenza.createMetaTask(\n \"Declare browser network\",\n (ctx, emit) => {\n emit(\"meta.service_registry.instance_registration_requested\", {\n ...ctx,\n data: {\n uuid: ctx.__serviceInstanceId,\n process_pid: 1,\n service_name: ctx.__serviceName,\n is_frontend: true,\n is_active: true,\n is_non_responsive: false,\n is_blocked: false,\n health: {},\n },\n __registrationData: {\n uuid: ctx.__serviceInstanceId,\n process_pid: 1,\n service_name: ctx.__serviceName,\n is_frontend: true,\n is_active: true,\n is_non_responsive: false,\n is_blocked: false,\n health: {},\n },\n __transportData: [],\n });\n\n return true;\n },\n \"Declares frontend runtime network metadata without creating a server.\",\n ).doOn(\"meta.service_registry.service_inserted\");\n\n Cadenza.createMetaTask(\n \"Setup fetch client\",\n (ctx) => {\n const serviceName = String(ctx.serviceName ?? \"\");\n const URL = String(ctx.serviceOrigin ?? \"\");\n const fetchId = String(ctx.serviceTransportId ?? \"\");\n if (!serviceName || !URL || !fetchId) {\n return false;\n }\n const fetchDiagnostics = this.ensureFetchClientDiagnostics(\n fetchId,\n serviceName,\n URL,\n );\n fetchDiagnostics.destroyed = false;\n fetchDiagnostics.updatedAt = Date.now();\n\n if (Cadenza.get(`Send Handshake to ${URL}`)) {\n return;\n }\n\n const handshakeTask = Cadenza.createMetaTask(\n `Send Handshake to ${URL}`,\n async (handshakeCtx, emit) => {\n try {\n const response = await this.fetchDataWithTimeout(\n `${URL}/handshake`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n method: \"POST\",\n body: JSON.stringify(handshakeCtx.handshakeData),\n },\n 1000,\n );\n if (response.__status !== \"success\") {\n const error =\n response.__error ??\n `Failed to connect to service ${serviceName} ${handshakeCtx.serviceInstanceId}`;\n fetchDiagnostics.connected = false;\n fetchDiagnostics.lastHandshakeError = error;\n fetchDiagnostics.updatedAt = Date.now();\n this.recordFetchClientError(fetchId, serviceName, URL, error);\n emit(`meta.fetch.handshake_failed:${fetchId}`, response);\n return { ...handshakeCtx, __error: error, errored: true };\n }\n\n handshakeCtx.serviceInstanceId = response.__serviceInstanceId;\n fetchDiagnostics.connected = true;\n fetchDiagnostics.destroyed = false;\n fetchDiagnostics.lastHandshakeAt = new Date().toISOString();\n fetchDiagnostics.lastHandshakeError = null;\n fetchDiagnostics.updatedAt = Date.now();\n\n for (const communicationType of handshakeCtx.communicationTypes) {\n emit(\"global.meta.fetch.service_communication_established\", {\n data: {\n serviceInstanceId: handshakeCtx.serviceInstanceId,\n serviceInstanceClientId:\n Cadenza.serviceRegistry.serviceInstanceId,\n communicationType,\n },\n });\n }\n } catch (error) {\n fetchDiagnostics.connected = false;\n fetchDiagnostics.lastHandshakeError = this.getErrorMessage(error);\n fetchDiagnostics.updatedAt = Date.now();\n this.recordFetchClientError(fetchId, serviceName, URL, error);\n return { ...handshakeCtx, __error: error, errored: true };\n }\n\n return handshakeCtx;\n },\n \"Sends handshake request\",\n { retryCount: 5, retryDelay: 1000, retryDelayFactor: 1.5 },\n )\n .doOn(`meta.fetch.handshake_requested:${fetchId}`)\n .emits(\"meta.fetch.handshake_complete\")\n .attachSignal(\n \"meta.fetch.handshake_failed\",\n \"global.meta.fetch.service_communication_established\",\n );\n\n const delegateTask = Cadenza.createMetaTask(\n `Delegate flow to REST server ${URL}`,\n async (delegateCtx, emit) => {\n if (delegateCtx.__remoteRoutineName === undefined) {\n return;\n }\n\n const normalizedDelegateCtx =\n ensureDelegationContextMetadata(delegateCtx);\n const deputyExecId =\n normalizedDelegateCtx.__metadata.__deputyExecId;\n\n fetchDiagnostics.delegationRequests++;\n fetchDiagnostics.updatedAt = Date.now();\n\n let resultContext;\n try {\n resultContext = await this.fetchDataWithTimeout(\n `${URL}/delegation`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n method: \"POST\",\n body: JSON.stringify(normalizedDelegateCtx),\n },\n 30_000,\n );\n } catch (error) {\n fetchDiagnostics.delegationFailures++;\n fetchDiagnostics.updatedAt = Date.now();\n this.recordFetchClientError(fetchId, serviceName, URL, error);\n resultContext = {\n __error: `Error: ${error}`,\n errored: true,\n ...normalizedDelegateCtx,\n ...normalizedDelegateCtx.__metadata,\n };\n } finally {\n emit(`meta.fetch.delegated:${deputyExecId}`, resultContext);\n }\n\n return resultContext;\n },\n \"Sends delegation request\",\n )\n .doOn(\n `meta.service_registry.selected_instance_for_fetch:${fetchId}`,\n `meta.service_registry.socket_failed:${fetchId}`,\n )\n .emitsOnFail(\"meta.fetch.delegate_failed\")\n .attachSignal(\"meta.fetch.delegated\");\n\n const transmitTask = Cadenza.createMetaTask(\n `Transmit signal to server ${URL}`,\n async (signalCtx, emit) => {\n if (signalCtx.__signalName === undefined) {\n return;\n }\n\n fetchDiagnostics.signalTransmissions++;\n fetchDiagnostics.updatedAt = Date.now();\n\n let response;\n try {\n response = await this.fetchDataWithTimeout(\n `${URL}/signal`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n method: \"POST\",\n body: JSON.stringify(signalCtx),\n },\n 1000,\n );\n\n if (signalCtx.__routineExecId) {\n emit(`meta.fetch.transmitted:${signalCtx.__routineExecId}`, response);\n }\n } catch (error) {\n fetchDiagnostics.signalFailures++;\n fetchDiagnostics.updatedAt = Date.now();\n this.recordFetchClientError(fetchId, serviceName, URL, error);\n response = {\n __error: `Error: ${error}`,\n errored: true,\n ...signalCtx,\n };\n }\n\n return response;\n },\n \"Sends signal request\",\n )\n .doOn(`meta.service_registry.selected_instance_for_fetch:${fetchId}`)\n .emitsOnFail(\"meta.fetch.signal_transmission_failed\")\n .attachSignal(\"meta.fetch.transmitted\");\n\n const statusTask = Cadenza.createMetaTask(\n `Request status from ${URL}`,\n async (statusCtx) => {\n fetchDiagnostics.statusChecks++;\n fetchDiagnostics.updatedAt = Date.now();\n\n try {\n return await this.fetchDataWithTimeout(\n `${URL}/status`,\n {\n method: \"GET\",\n },\n 1000,\n );\n } catch (error) {\n fetchDiagnostics.statusFailures++;\n fetchDiagnostics.updatedAt = Date.now();\n this.recordFetchClientError(fetchId, serviceName, URL, error);\n return {\n __error: `Error: ${error}`,\n errored: true,\n ...statusCtx,\n };\n }\n },\n \"Requests status\",\n )\n .doOn(\"meta.fetch.status_check_requested\")\n .emits(\"meta.fetch.status_checked\")\n .emitsOnFail(\"meta.fetch.status_check_failed\");\n\n Cadenza.createEphemeralMetaTask(\"Destroy fetch client\", () => {\n fetchDiagnostics.connected = false;\n fetchDiagnostics.destroyed = true;\n fetchDiagnostics.updatedAt = Date.now();\n handshakeTask.destroy();\n delegateTask.destroy();\n transmitTask.destroy();\n statusTask.destroy();\n })\n .doOn(\n `meta.fetch.destroy_requested:${fetchId}`,\n `meta.socket_client.disconnected:${fetchId}`,\n `meta.fetch.handshake_failed:${fetchId}`,\n )\n .emits(\"meta.fetch.destroyed\");\n\n return true;\n },\n \"Manages REST client requests as fallback\",\n )\n .then(\n Cadenza.createMetaTask(\n \"Prepare handshake\",\n (ctx, emit) => {\n const {\n serviceName,\n serviceInstanceId,\n communicationTypes,\n serviceTransportId,\n serviceOrigin,\n transportProtocols,\n } = ctx;\n\n const fetchId = String(serviceTransportId ?? \"\");\n\n emit(`meta.fetch.handshake_requested:${fetchId}`, {\n serviceInstanceId,\n serviceName,\n communicationTypes,\n serviceTransportId,\n serviceOrigin,\n transportProtocols,\n handshakeData: {\n instanceId: Cadenza.serviceRegistry.serviceInstanceId,\n serviceName: Cadenza.serviceRegistry.serviceName,\n },\n });\n },\n \"Prepares handshake\",\n ).attachSignal(\"meta.fetch.handshake_requested\"),\n )\n .doOn(\"meta.service_registry.dependee_registered\")\n .emitsOnFail(\"meta.fetch.connect_failed\");\n }\n}\n","import Cadenza from \"../Cadenza\";\nimport { IRateLimiterOptions, RateLimiterMemory } from \"rate-limiter-flexible\";\nimport type { AnyObject, Task } from \"@cadenza.io/core\";\nimport { io, Socket } from \"socket.io-client\";\nimport { isBrowser } from \"../utils/environment\";\nimport { waitForSocketConnection } from \"./socketClientUtils\";\nimport { META_RUNTIME_TRANSPORT_DIAGNOSTICS_INTENT } from \"../utils/inquiry\";\nimport { ensureDelegationContextMetadata } from \"../utils/delegation\";\nimport { parseTransportOrigin } from \"../utils/transport\";\n\nconst dynamicImport = new Function(\n \"specifier\",\n \"return import(specifier);\",\n) as <T>(specifier: string) => Promise<T>;\n\nasync function importNodeModule<T>(specifier: string): Promise<T> {\n return dynamicImport(specifier);\n}\n\ntype TransportDetailLevel = \"summary\" | \"full\";\n\ninterface TransportDiagnosticErrorEntry {\n at: string;\n message: string;\n}\n\ninterface SocketClientDiagnosticsState {\n fetchId: string;\n serviceName: string;\n url: string;\n socketId: string | null;\n connected: boolean;\n handshake: boolean;\n reconnectAttempts: number;\n connectErrors: number;\n reconnectErrors: number;\n socketErrors: number;\n pendingDelegations: number;\n pendingTimers: number;\n destroyed: boolean;\n lastHandshakeAt: string | null;\n lastHandshakeError: string | null;\n lastDisconnectAt: string | null;\n lastError: string | null;\n lastErrorAt: number;\n errorHistory: TransportDiagnosticErrorEntry[];\n updatedAt: number;\n}\n\ntype SocketClientSessionOperation =\n | \"connect\"\n | \"handshake\"\n | \"delegate\"\n | \"transmit\"\n | \"shutdown\";\n\ninterface SocketClientSessionState {\n fetchId: string;\n serviceInstanceId: string;\n communicationTypes: string[];\n serviceName: string;\n serviceTransportId: string;\n serviceOrigin: string;\n transportProtocols: string[];\n url: string;\n socketId: string | null;\n connected: boolean;\n handshake: boolean;\n pendingDelegations: number;\n pendingTimers: number;\n reconnectAttempts: number;\n connectErrors: number;\n reconnectErrors: number;\n socketErrors: number;\n errorCount: number;\n destroyed: boolean;\n lastHandshakeAt: string | null;\n lastHandshakeError: string | null;\n lastDisconnectAt: string | null;\n updatedAt: number;\n}\n\ntype SocketEmitWhenReady = <T>(\n event: string,\n data: AnyObject,\n timeoutMs: number,\n ack?: (response: T) => void,\n) => Promise<T>;\n\nfunction isSocketAckCallback<T = AnyObject>(\n value: unknown,\n): value is (context: T) => void {\n return typeof value === \"function\";\n}\n\ninterface SocketClientRuntimeHandle {\n url: string;\n socket: Socket;\n initialized: boolean;\n handshake: boolean;\n errorCount: number;\n pendingDelegationIds: Set<string>;\n pendingTimers: Set<NodeJS.Timeout>;\n emitWhenReady: SocketEmitWhenReady | null;\n handshakeTask: Task | null;\n delegateTask: Task | null;\n transmitTask: Task | null;\n}\n\ninterface SocketServerSessionState {\n serverKey: string;\n useSocket: boolean;\n status: \"inactive\" | \"active\" | \"shutdown\";\n securityProfile: string;\n networkType: string;\n connectionCount: number;\n lastStartedAt: string | null;\n lastConnectedAt: string | null;\n lastDisconnectedAt: string | null;\n lastShutdownAt: string | null;\n updatedAt: number;\n}\n\ninterface SocketServerRuntimeHandle {\n server: any;\n initialized: boolean;\n connectedSocketIds: Set<string>;\n broadcastStatusTask: Task | null;\n shutdownTask: Task | null;\n}\n\n/**\n * Socket transport orchestration in the Cadenza primitive ecosystem.\n *\n * - setup is signal-triggered\n * - state/runtime ownership is actor-backed\n * - dynamic runtime tasks are still allowed for advanced orchestration (ephemeral resolvers etc.)\n */\nexport default class SocketController {\n private static _instance: SocketController;\n public static get instance(): SocketController {\n if (!this._instance) this._instance = new SocketController();\n return this._instance;\n }\n\n private readonly diagnosticsErrorHistoryLimit = 100;\n private readonly diagnosticsMaxClientEntries = 500;\n private readonly destroyedDiagnosticsTtlMs = 15 * 60_000;\n private readonly socketServerDefaultKey = \"socket-server-default\";\n private readonly socketServerInitialSessionState: SocketServerSessionState = {\n serverKey: this.socketServerDefaultKey,\n useSocket: false,\n status: \"inactive\",\n securityProfile: \"medium\",\n networkType: \"internal\",\n connectionCount: 0,\n lastStartedAt: null,\n lastConnectedAt: null,\n lastDisconnectedAt: null,\n lastShutdownAt: null,\n updatedAt: 0,\n };\n private readonly socketClientInitialSessionState: SocketClientSessionState = {\n fetchId: \"\",\n serviceInstanceId: \"\",\n communicationTypes: [],\n serviceName: \"\",\n serviceTransportId: \"\",\n serviceOrigin: \"\",\n transportProtocols: [],\n url: \"\",\n socketId: null,\n connected: false,\n handshake: false,\n pendingDelegations: 0,\n pendingTimers: 0,\n reconnectAttempts: 0,\n connectErrors: 0,\n reconnectErrors: 0,\n socketErrors: 0,\n errorCount: 0,\n destroyed: false,\n lastHandshakeAt: null,\n lastHandshakeError: null,\n lastDisconnectAt: null,\n updatedAt: 0,\n };\n\n private readonly socketServerActor = Cadenza.createActor<\n SocketServerSessionState,\n SocketServerRuntimeHandle | null\n >(\n {\n name: \"SocketServerActor\",\n description:\n \"Holds durable socket server session state and runtime socket server handle\",\n defaultKey: this.socketServerDefaultKey,\n keyResolver: (input) => this.resolveSocketServerKey(input),\n loadPolicy: \"lazy\",\n writeContract: \"overwrite\",\n initState: this.socketServerInitialSessionState,\n },\n { isMeta: true },\n );\n\n private readonly socketClientActor = Cadenza.createActor<\n SocketClientSessionState,\n SocketClientRuntimeHandle | null\n >(\n {\n name: \"SocketClientActor\",\n description:\n \"Holds durable socket client session state and runtime socket connection handles\",\n defaultKey: \"socket-client-default\",\n keyResolver: (input) => this.resolveSocketClientFetchId(input),\n loadPolicy: \"lazy\",\n writeContract: \"overwrite\",\n initState: this.socketClientInitialSessionState,\n },\n { isMeta: true },\n );\n\n private readonly socketClientDiagnosticsActor = Cadenza.createActor<{\n entries: Record<string, SocketClientDiagnosticsState>;\n }>(\n {\n name: \"SocketClientDiagnosticsActor\",\n description:\n \"Tracks socket client diagnostics snapshots per fetchId for transport observability\",\n defaultKey: \"socket-client-diagnostics\",\n loadPolicy: \"eager\",\n writeContract: \"overwrite\",\n initState: {\n entries: {},\n },\n },\n { isMeta: true },\n );\n\n constructor() {\n Cadenza.registry.getTaskByName.doOn(\"meta.socket.delegation_requested\");\n Cadenza.registry.getRoutineByName.doOn(\"meta.socket.delegation_requested\");\n Cadenza.createMetaTask(\n \"Forward socket delegations to runner\",\n (context, emit: any) => {\n if (!isBrowser && !Cadenza.serviceRegistry.isFrontend) {\n return false;\n }\n\n if (context.task || context.routine) {\n const routine = context.task ?? context.routine;\n delete context.task;\n delete context.routine;\n context.__routineExecId = context.__metadata?.__deputyExecId ?? null;\n context.__isDeputy = true;\n Cadenza.runner.run(routine, context);\n return true;\n }\n\n const deputyExecId =\n context.__metadata?.__deputyExecId ?? context.__deputyExecId;\n const remoteRoutineName =\n context.__remoteRoutineName ?? context.__name ?? \"unknown\";\n context.errored = true;\n context.__error = `No task or routine registered for delegation target ${remoteRoutineName}.`;\n if (deputyExecId) {\n emit(`meta.socket.delegation_target_not_found:${deputyExecId}`, context);\n }\n emit(\"meta.runner.failed\", context);\n return false;\n },\n \"Forwards socket delegated lookups to the local runner in frontend runtimes.\",\n )\n .attachSignal(\"meta.runner.failed\")\n .doAfter(Cadenza.registry.getTaskByName, Cadenza.registry.getRoutineByName);\n\n this.registerDiagnosticsTasks();\n this.registerSocketServerTasks();\n this.registerSocketClientTasks();\n\n Cadenza.createMetaTask(\n \"Collect socket transport diagnostics\",\n this.socketClientDiagnosticsActor.task(\n ({ state, input }) =>\n this.collectSocketTransportDiagnostics(input, state.entries),\n { mode: \"read\" },\n ),\n \"Responds to distributed transport diagnostics inquiries with socket client data.\",\n ).respondsTo(META_RUNTIME_TRANSPORT_DIAGNOSTICS_INTENT);\n }\n\n private registerDiagnosticsTasks(): void {\n Cadenza.createThrottledMetaTask(\n \"SocketClientDiagnosticsActor.Upsert\",\n this.socketClientDiagnosticsActor.task(\n ({ state, input, setState }) => {\n const fetchId = String(input.fetchId ?? \"\").trim();\n if (!fetchId) {\n return;\n }\n\n const now = Date.now();\n const entries = { ...state.entries };\n const existing = entries[fetchId];\n\n const base: SocketClientDiagnosticsState = existing\n ? {\n ...existing,\n errorHistory: [...existing.errorHistory],\n }\n : {\n fetchId,\n serviceName: String(input.serviceName ?? \"\"),\n url: String(input.url ?? \"\"),\n socketId: null,\n connected: false,\n handshake: false,\n reconnectAttempts: 0,\n connectErrors: 0,\n reconnectErrors: 0,\n socketErrors: 0,\n pendingDelegations: 0,\n pendingTimers: 0,\n destroyed: false,\n lastHandshakeAt: null,\n lastHandshakeError: null,\n lastDisconnectAt: null,\n lastError: null,\n lastErrorAt: 0,\n errorHistory: [],\n updatedAt: now,\n };\n\n if (input.serviceName !== undefined) {\n base.serviceName = String(input.serviceName);\n }\n if (input.url !== undefined) {\n base.url = String(input.url);\n }\n\n const patch =\n input.patch && typeof input.patch === \"object\"\n ? (input.patch as Partial<SocketClientDiagnosticsState>)\n : {};\n\n Object.assign(base, patch);\n base.fetchId = fetchId;\n base.updatedAt = now;\n\n const errorMessage =\n input.error !== undefined ? this.getErrorMessage(input.error) : undefined;\n if (errorMessage) {\n base.lastError = errorMessage;\n base.lastErrorAt = now;\n base.errorHistory.push({\n at: new Date(now).toISOString(),\n message: errorMessage,\n });\n if (base.errorHistory.length > this.diagnosticsErrorHistoryLimit) {\n base.errorHistory.splice(\n 0,\n base.errorHistory.length - this.diagnosticsErrorHistoryLimit,\n );\n }\n }\n\n entries[fetchId] = base;\n\n this.pruneDiagnosticsEntries(entries, now);\n\n setState({ entries });\n },\n { mode: \"write\" },\n ),\n (context) => String(context?.fetchId ?? \"default\"),\n \"Upserts socket client diagnostics in actor state.\",\n ).doOn(\"meta.socket_client.diagnostics_upsert_requested\");\n }\n\n private registerSocketServerTasks(): void {\n Cadenza.createThrottledMetaTask(\n \"SocketServerActor.PatchSession\",\n this.socketServerActor.task(\n ({ state, input, setState }) => {\n const patch =\n input.patch && typeof input.patch === \"object\"\n ? (input.patch as Partial<SocketServerSessionState>)\n : {};\n setState({\n ...state,\n ...patch,\n updatedAt: Date.now(),\n });\n },\n { mode: \"write\" },\n ),\n (context) => String(context?.serverKey ?? this.socketServerDefaultKey),\n \"Applies partial durable session updates for socket server actor.\",\n ).doOn(\"meta.socket_server.session_patch_requested\");\n\n Cadenza.createMetaTask(\n \"SocketServerActor.ClearRuntime\",\n this.socketServerActor.task(\n ({ setRuntimeState }) => {\n setRuntimeState(null);\n },\n { mode: \"write\" },\n ),\n \"Clears socket server runtime handle after shutdown.\",\n ).doOn(\"meta.socket_server.runtime_clear_requested\");\n\n const setupSocketServerTask = Cadenza.createMetaTask(\n \"Setup SocketServer\",\n this.socketServerActor.task(\n async ({ state, runtimeState, input, actor, setState, setRuntimeState, emit }) => {\n const serverKey =\n this.resolveSocketServerKey(input) ?? actor.key ?? this.socketServerDefaultKey;\n const shouldUseSocket = Boolean(input.__useSocket);\n\n if (!shouldUseSocket) {\n this.destroySocketServerRuntimeHandle(runtimeState);\n setRuntimeState(null);\n setState({\n ...state,\n serverKey,\n useSocket: false,\n status: \"inactive\",\n connectionCount: 0,\n lastShutdownAt: new Date().toISOString(),\n updatedAt: Date.now(),\n });\n return;\n }\n\n let runtimeHandle = runtimeState;\n if (!runtimeHandle) {\n runtimeHandle = await this.createSocketServerRuntimeHandleFromContext(\n input,\n );\n setRuntimeState(runtimeHandle);\n }\n\n const profile = String(input.__securityProfile ?? state.securityProfile ?? \"medium\");\n const networkType = String(input.__networkType ?? state.networkType ?? \"internal\");\n\n const schedulePatch = (patch: Partial<SocketServerSessionState>) => {\n Cadenza.emit(\"meta.socket_server.session_patch_requested\", {\n serverKey,\n patch,\n });\n };\n\n if (runtimeHandle.initialized) {\n schedulePatch({\n status: \"active\",\n useSocket: true,\n securityProfile: profile,\n networkType,\n connectionCount: runtimeHandle.connectedSocketIds.size,\n lastStartedAt: state.lastStartedAt ?? new Date().toISOString(),\n });\n return;\n }\n\n const server = runtimeHandle.server;\n runtimeHandle.initialized = true;\n\n setState({\n ...state,\n serverKey,\n useSocket: true,\n status: \"active\",\n securityProfile: profile,\n networkType,\n connectionCount: runtimeHandle.connectedSocketIds.size,\n lastStartedAt: state.lastStartedAt ?? new Date().toISOString(),\n updatedAt: Date.now(),\n });\n\n server.use((socket: any, next: any) => {\n const origin = socket?.handshake?.headers?.origin;\n const allowedOrigins = [\"*\"];\n let effectiveOrigin = origin || \"unknown\";\n if (networkType === \"internal\") effectiveOrigin = \"internal\";\n\n if (\n profile !== \"low\" &&\n !allowedOrigins.includes(effectiveOrigin) &&\n !allowedOrigins.includes(\"*\")\n ) {\n return next(new Error(\"Unauthorized origin\"));\n }\n\n const limiterOptions: { [key: string]: IRateLimiterOptions } = {\n low: { points: Infinity, duration: 1 },\n medium: { points: 10000, duration: 10 },\n high: { points: 1000, duration: 60, blockDuration: 300 },\n };\n\n const limiter = new RateLimiterMemory(\n limiterOptions[profile] ?? limiterOptions.medium,\n );\n const clientKey = socket?.handshake?.address || \"unknown\";\n\n socket.use((packet: any, packetNext: any) => {\n limiter\n .consume(clientKey)\n .then(() => packetNext())\n .catch((rej) => {\n if (rej.msBeforeNext > 0) {\n Cadenza.log(\n \"SocketServer: Rate limit exceeded\",\n {\n retryAfter: rej.msBeforeNext / 1000,\n clientKey,\n socketId: socket.id,\n },\n \"warning\",\n );\n socket.emit(\"error\", {\n message: \"Rate limit exceeded\",\n retryAfter: rej.msBeforeNext / 1000,\n });\n packetNext(new Error(\"Rate limit exceeded\"));\n } else {\n Cadenza.log(\n \"SocketServer: Rate limit exceeded, blocked\",\n {\n clientKey,\n socketId: socket.id,\n },\n \"critical\",\n );\n socket.disconnect(true);\n packetNext(new Error(\"Blocked\"));\n }\n });\n });\n\n next();\n });\n\n server.on(\"connection\", (ws: any) => {\n runtimeHandle.connectedSocketIds.add(ws.id);\n schedulePatch({\n connectionCount: runtimeHandle.connectedSocketIds.size,\n lastConnectedAt: new Date().toISOString(),\n status: \"active\",\n });\n\n try {\n ws.on(\"handshake\", (ctx: AnyObject, callback: (result: AnyObject) => void) => {\n Cadenza.log(\"SocketServer: New connection\", {\n ...ctx,\n socketId: ws.id,\n });\n\n callback({\n status: \"success\",\n serviceName: Cadenza.serviceRegistry.serviceName,\n });\n\n if (ctx.isFrontend) {\n const fetchId = `browser:${ctx.serviceInstanceId}`;\n const frontendDelegateTaskName = `Delegate flow to frontend ${fetchId}`;\n const frontendTransmitTaskName = `Transmit signal to ${fetchId}`;\n\n Cadenza.get(frontendDelegateTaskName)?.destroy();\n Cadenza.get(frontendTransmitTaskName)?.destroy();\n\n Cadenza.createMetaTask(\n frontendDelegateTaskName,\n async (delegateCtx, emitter) => {\n if (delegateCtx.__remoteRoutineName === undefined) {\n return;\n }\n\n const normalizedDelegateCtx =\n ensureDelegationContextMetadata(delegateCtx);\n delete normalizedDelegateCtx.__isSubMeta;\n delete normalizedDelegateCtx.__broadcast;\n\n const deputyExecId =\n normalizedDelegateCtx.__metadata?.__deputyExecId;\n\n const resultContext = await new Promise<AnyObject>((resolve) => {\n ws.timeout(normalizedDelegateCtx.__timeout ?? 60_000).emit(\n \"delegation\",\n normalizedDelegateCtx,\n (err: AnyObject, response: AnyObject) => {\n if (err) {\n resolve({\n ...normalizedDelegateCtx,\n errored: true,\n __error: `Frontend delegation timed out: ${err.message ?? err}`,\n });\n return;\n }\n\n resolve(\n response ?? {\n errored: true,\n __error: \"Frontend delegation returned no response\",\n },\n );\n },\n );\n });\n\n if (deputyExecId) {\n const metadata = resultContext.__metadata;\n delete resultContext.__metadata;\n\n emitter(`meta.socket_client.delegated:${deputyExecId}`, {\n ...resultContext,\n ...(metadata && typeof metadata === \"object\"\n ? metadata\n : {}),\n });\n }\n\n return resultContext;\n },\n \"Delegates work to a connected frontend runtime through its active websocket.\",\n )\n .doOn(`meta.service_registry.selected_instance_for_socket:${fetchId}`)\n .attachSignal(\"meta.socket_client.delegated\");\n\n Cadenza.createMetaTask(\n frontendTransmitTaskName,\n (c, emitter) => {\n if (c.__signalName === undefined) {\n return;\n }\n\n ws.emit(\"signal\", c);\n\n if (c.__routineExecId) {\n emitter(`meta.socket_client.transmitted:${c.__routineExecId}`, {});\n }\n },\n \"Transmit frontend bound signal through active websocket.\",\n )\n .doOn(`meta.service_registry.selected_instance_for_socket:${fetchId}`)\n .attachSignal(\"meta.socket_client.transmitted\");\n }\n\n Cadenza.emit(\"meta.socket.handshake\", ctx);\n });\n\n ws.on(\"delegation\", (ctx: AnyObject, callback: (context: AnyObject) => void) => {\n const delegationCtx = ensureDelegationContextMetadata(ctx);\n const deputyExecId = delegationCtx.__metadata.__deputyExecId;\n\n Cadenza.createEphemeralMetaTask(\n \"Resolve delegation\",\n (delegationCtx: AnyObject) => {\n callback(delegationCtx);\n },\n \"Resolves a delegation request using client callback.\",\n { register: false },\n )\n .doOn(`meta.node.graph_completed:${deputyExecId}`)\n .emits(`meta.socket.delegation_resolved:${deputyExecId}`);\n\n Cadenza.createEphemeralMetaTask(\n \"Delegation progress update\",\n (progressCtx) => {\n if (progressCtx.__progress !== undefined) {\n ws.emit(\"delegation_progress\", progressCtx);\n }\n },\n \"Updates delegation progress to client.\",\n {\n once: false,\n destroyCondition: (progressCtx: AnyObject) =>\n progressCtx.data.progress === 1.0 ||\n progressCtx.data?.progress === undefined,\n register: false,\n },\n )\n .doOn(\n `meta.node.routine_execution_progress:${deputyExecId}`,\n `meta.node.graph_completed:${deputyExecId}`,\n )\n .emitsOnFail(`meta.socket.progress_failed:${deputyExecId}`);\n\n Cadenza.emit(\"meta.socket.delegation_requested\", {\n ...delegationCtx,\n __name: delegationCtx.__remoteRoutineName,\n });\n });\n\n ws.on(\"signal\", (ctx: AnyObject, callback: unknown) => {\n if (Cadenza.signalBroker.listObservedSignals().includes(ctx.__signalName)) {\n if (isSocketAckCallback(callback)) {\n callback({\n __status: \"success\",\n __signalName: ctx.__signalName,\n });\n }\n\n Cadenza.emit(ctx.__signalName, ctx);\n } else {\n Cadenza.log(\n `No such signal ${ctx.__signalName} on ${ctx.__serviceName}`,\n \"warning\",\n );\n if (isSocketAckCallback(callback)) {\n callback({\n ...ctx,\n __status: \"error\",\n __error: `No such signal: ${ctx.__signalName}`,\n errored: true,\n });\n }\n }\n });\n\n ws.on(\n \"status_check\",\n (ctx: AnyObject, callback: (context: AnyObject) => void) => {\n callback(Cadenza.serviceRegistry.resolveLocalStatusCheck(ctx));\n },\n );\n\n ws.on(\"disconnect\", () => {\n runtimeHandle.connectedSocketIds.delete(ws.id);\n schedulePatch({\n connectionCount: runtimeHandle.connectedSocketIds.size,\n lastDisconnectedAt: new Date().toISOString(),\n });\n Cadenza.log(\n \"Socket client disconnected\",\n { socketId: ws.id },\n \"warning\",\n );\n Cadenza.emit(\"meta.socket.disconnected\", {\n __wsId: ws.id,\n });\n });\n } catch (error) {\n Cadenza.log(\n \"SocketServer: Error in socket event\",\n { error },\n \"error\",\n );\n }\n\n Cadenza.emit(\"meta.socket.connected\", { __wsId: ws.id });\n });\n\n runtimeHandle.broadcastStatusTask = Cadenza.createMetaTask(\n `Broadcast status ${serverKey}`,\n (ctx) => server.emit(\"status_update\", ctx),\n \"Broadcasts the status of the server to all clients\",\n ).doOn(\"meta.service.updated\");\n\n runtimeHandle.shutdownTask = Cadenza.createMetaTask(\n `Shutdown SocketServer ${serverKey}`,\n async () => {\n this.destroySocketServerRuntimeHandle(runtimeHandle);\n\n Cadenza.emit(\"meta.socket_server.runtime_clear_requested\", {\n serverKey,\n });\n Cadenza.emit(\"meta.socket_server.session_patch_requested\", {\n serverKey,\n patch: {\n useSocket: false,\n status: \"shutdown\",\n connectionCount: 0,\n lastShutdownAt: new Date().toISOString(),\n },\n });\n },\n \"Shuts down the socket server\",\n )\n .doOn(\"meta.socket_server_shutdown_requested\")\n .emits(\"meta.socket.shutdown\");\n\n return true;\n },\n { mode: \"write\" },\n ),\n \"Initializes socket server runtime through actor state.\",\n );\n\n setupSocketServerTask.doOn(\"global.meta.rest.network_configured\");\n }\n\n private registerSocketClientTasks(): void {\n Cadenza.createThrottledMetaTask(\n \"SocketClientActor.ApplySessionOperation\",\n this.socketClientActor.task(\n ({ state, input, setState }) => {\n const operation = String(\n input.operation ?? \"transmit\",\n ) as SocketClientSessionOperation;\n const patch =\n input.patch && typeof input.patch === \"object\"\n ? (input.patch as Partial<SocketClientSessionState>)\n : {};\n\n let next: SocketClientSessionState = {\n ...state,\n ...patch,\n communicationTypes:\n patch.communicationTypes !== undefined\n ? this.normalizeCommunicationTypes(patch.communicationTypes)\n : state.communicationTypes,\n updatedAt: Date.now(),\n };\n\n if (input.serviceName !== undefined) {\n next.serviceName = String(input.serviceName);\n }\n if (input.serviceTransportId !== undefined) {\n next.serviceTransportId = String(input.serviceTransportId);\n }\n if (input.serviceInstanceId !== undefined) {\n next.serviceInstanceId = String(input.serviceInstanceId);\n }\n if (input.serviceOrigin !== undefined) {\n next.serviceOrigin = String(input.serviceOrigin);\n }\n if (input.transportProtocols !== undefined) {\n next.transportProtocols = Array.isArray(input.transportProtocols)\n ? input.transportProtocols.map((entry: unknown) => String(entry))\n : [];\n }\n if (input.url !== undefined) {\n next.url = String(input.url);\n }\n if (input.fetchId !== undefined) {\n next.fetchId = String(input.fetchId);\n }\n\n if (operation === \"connect\") {\n next.destroyed = false;\n } else if (operation === \"handshake\") {\n next.destroyed = false;\n next.connected = patch.connected ?? true;\n next.handshake = patch.handshake ?? true;\n } else if (operation === \"shutdown\") {\n next.connected = false;\n next.handshake = false;\n next.destroyed = true;\n next.pendingDelegations = 0;\n next.pendingTimers = 0;\n }\n\n setState(next);\n return next;\n },\n { mode: \"write\" },\n ),\n (context) =>\n String(this.resolveSocketClientFetchId(context ?? {}) ?? \"default\"),\n \"Applies socket client session operation patch in actor durable state.\",\n ).doOn(\"meta.socket_client.session_operation_requested\");\n\n Cadenza.createMetaTask(\n \"SocketClientActor.ClearRuntime\",\n this.socketClientActor.task(\n ({ setRuntimeState }) => {\n setRuntimeState(null);\n },\n { mode: \"write\" },\n ),\n \"Clears socket client runtime handle.\",\n ).doOn(\"meta.socket_client.runtime_clear_requested\");\n\n Cadenza.createMetaTask(\n \"Connect to socket server\",\n this.socketClientActor.task(\n ({ state, runtimeState, input, setState, setRuntimeState, emit }) => {\n const serviceInstanceId = String(input.serviceInstanceId ?? \"\");\n const communicationTypes = this.normalizeCommunicationTypes(\n input.communicationTypes,\n );\n const transportProtocols = Array.isArray(input.transportProtocols)\n ? input.transportProtocols.map((entry: unknown) => String(entry))\n : [];\n const serviceName = String(input.serviceName ?? \"\");\n const serviceTransportId = String(input.serviceTransportId ?? \"\");\n const serviceOrigin = String(input.serviceOrigin ?? \"\");\n const parsedOrigin = parseTransportOrigin(serviceOrigin);\n\n if (!transportProtocols.includes(\"socket\")) {\n return false;\n }\n\n if (!serviceTransportId || !serviceOrigin || !parsedOrigin) {\n Cadenza.log(\n \"Socket client setup skipped due to missing transport origin\",\n {\n serviceName,\n serviceTransportId,\n serviceOrigin,\n },\n \"warning\",\n );\n return false;\n }\n\n const socketProtocol =\n parsedOrigin.protocol === \"https\" ? \"wss\" : \"ws\";\n const url = `${socketProtocol}://${parsedOrigin.hostname}:${parsedOrigin.port}`;\n const fetchId = serviceTransportId;\n\n const applySessionOperation = (\n operation: SocketClientSessionOperation,\n patch: Partial<SocketClientSessionState> = {},\n ) => {\n Cadenza.emit(\"meta.socket_client.session_operation_requested\", {\n fetchId,\n operation,\n patch,\n serviceInstanceId,\n communicationTypes,\n serviceName,\n serviceTransportId,\n serviceOrigin,\n transportProtocols,\n url,\n });\n };\n\n const upsertDiagnostics = (\n patch: Partial<SocketClientDiagnosticsState>,\n error?: unknown,\n ) => {\n Cadenza.emit(\"meta.socket_client.diagnostics_upsert_requested\", {\n fetchId,\n serviceName,\n url,\n patch,\n error,\n });\n };\n\n setState({\n ...state,\n fetchId,\n serviceInstanceId,\n communicationTypes,\n serviceName,\n serviceTransportId,\n serviceOrigin,\n transportProtocols,\n url,\n destroyed: false,\n updatedAt: Date.now(),\n });\n\n let runtimeHandle = runtimeState;\n if (!runtimeHandle || runtimeHandle.url !== url) {\n this.destroySocketClientRuntimeHandle(runtimeHandle);\n runtimeHandle = this.createSocketClientRuntimeHandle(url);\n setRuntimeState(runtimeHandle);\n }\n\n upsertDiagnostics({\n destroyed: false,\n connected: false,\n handshake: false,\n socketId: runtimeHandle.socket.id ?? null,\n });\n applySessionOperation(\"connect\", {\n destroyed: false,\n connected: false,\n handshake: false,\n socketId: runtimeHandle.socket.id ?? null,\n pendingDelegations: runtimeHandle.pendingDelegationIds.size,\n pendingTimers: runtimeHandle.pendingTimers.size,\n errorCount: runtimeHandle.errorCount,\n });\n\n if (runtimeHandle.initialized) {\n return true;\n }\n\n runtimeHandle.initialized = true;\n runtimeHandle.handshake = false;\n runtimeHandle.errorCount = 0;\n\n const syncPendingCounts = () => {\n const pendingDelegations = runtimeHandle.pendingDelegationIds.size;\n const pendingTimers = runtimeHandle.pendingTimers.size;\n upsertDiagnostics({\n pendingDelegations,\n pendingTimers,\n });\n applySessionOperation(\"delegate\", {\n pendingDelegations,\n pendingTimers,\n });\n };\n\n runtimeHandle.emitWhenReady = <T>(\n event: string,\n data: AnyObject,\n timeoutMs: number = 60_000,\n ack?: (response: T) => void,\n ): Promise<T> => {\n return new Promise((resolve) => {\n const parsedTimeout = Number(timeoutMs);\n const normalizedTimeoutMs =\n Number.isFinite(parsedTimeout) && parsedTimeout > 0\n ? Math.trunc(parsedTimeout)\n : 60_000;\n\n let timer: NodeJS.Timeout | null = null;\n let settled = false;\n\n const clearPendingTimer = () => {\n if (!timer) {\n return;\n }\n clearTimeout(timer);\n runtimeHandle.pendingTimers.delete(timer);\n syncPendingCounts();\n timer = null;\n };\n\n const settle = (response: T) => {\n if (settled) {\n return;\n }\n settled = true;\n clearPendingTimer();\n if (ack) ack(response);\n resolve(response);\n };\n\n const resolveWithError = (errorMessage: string, fallbackError?: unknown) => {\n settle({\n ...data,\n errored: true,\n __error: errorMessage,\n error:\n fallbackError instanceof Error\n ? fallbackError.message\n : errorMessage,\n socketId: runtimeHandle.socket.id,\n serviceName,\n url,\n } as T);\n };\n\n const tryEmit = async () => {\n const waitResult = await waitForSocketConnection(\n runtimeHandle.socket,\n normalizedTimeoutMs + 10,\n (reason, error) => {\n if (reason === \"connect_timeout\") {\n return `Socket connect timed out before '${event}'`;\n }\n if (reason === \"connect_error\") {\n const errMessage =\n error instanceof Error ? error.message : String(error);\n return `Socket connect error before '${event}': ${errMessage}`;\n }\n return `Socket disconnected before '${event}'`;\n },\n );\n\n if (!waitResult.ok) {\n Cadenza.log(\n waitResult.error,\n {\n socketId: runtimeHandle.socket.id,\n serviceName,\n url,\n event,\n },\n \"error\",\n );\n upsertDiagnostics({}, waitResult.error);\n resolveWithError(waitResult.error);\n return;\n }\n\n timer = setTimeout(() => {\n if (settled) {\n return;\n }\n clearPendingTimer();\n const message = `Socket event '${event}' timed out`;\n Cadenza.log(\n message,\n { socketId: runtimeHandle.socket.id, serviceName, url },\n \"error\",\n );\n upsertDiagnostics(\n {\n lastHandshakeError: message,\n },\n message,\n );\n applySessionOperation(\"transmit\", {\n lastHandshakeError: message,\n });\n resolveWithError(message);\n }, normalizedTimeoutMs + 10);\n\n runtimeHandle.pendingTimers.add(timer);\n syncPendingCounts();\n\n runtimeHandle.socket\n .timeout(normalizedTimeoutMs)\n .emit(event, data, (err: any, response: T) => {\n if (err) {\n Cadenza.log(\n \"Socket timeout.\",\n {\n event,\n error: err.message,\n socketId: runtimeHandle.socket.id,\n serviceName,\n },\n \"warning\",\n );\n upsertDiagnostics(\n {\n lastHandshakeError: err.message,\n },\n err,\n );\n applySessionOperation(\"transmit\", {\n lastHandshakeError: err.message,\n });\n response = {\n __error: `Timeout error: ${err}`,\n errored: true,\n ...data,\n } as T;\n }\n settle(response);\n });\n };\n\n void tryEmit().catch((error) => {\n Cadenza.log(\n \"Socket emit failed unexpectedly\",\n {\n event,\n error:\n error instanceof Error ? error.message : String(error),\n socketId: runtimeHandle.socket.id,\n serviceName,\n url,\n },\n \"error\",\n );\n const message = `Socket event '${event}' failed`;\n upsertDiagnostics(\n {\n lastHandshakeError:\n error instanceof Error ? error.message : String(error),\n },\n error,\n );\n applySessionOperation(\"transmit\", {\n lastHandshakeError:\n error instanceof Error ? error.message : String(error),\n });\n resolveWithError(message, error);\n });\n });\n };\n\n const socket = runtimeHandle.socket;\n\n socket.on(\"connect\", () => {\n if (runtimeHandle.handshake) return;\n upsertDiagnostics({\n connected: true,\n destroyed: false,\n socketId: socket.id ?? null,\n });\n applySessionOperation(\"connect\", {\n connected: true,\n destroyed: false,\n socketId: socket.id ?? null,\n });\n Cadenza.emit(`meta.socket_client.connected:${fetchId}`, input);\n });\n\n socket.on(\"delegation_progress\", (delegationCtx) => {\n Cadenza.emit(\n `meta.socket_client.delegation_progress:${delegationCtx.__metadata.__deputyExecId}`,\n delegationCtx,\n );\n });\n\n socket.on(\"delegation\", (delegationCtx, callback) => {\n const normalizedDelegationCtx =\n ensureDelegationContextMetadata(delegationCtx);\n const deputyExecId = normalizedDelegationCtx.__metadata.__deputyExecId;\n const targetNotFoundSignal =\n `meta.socket.delegation_target_not_found:${deputyExecId}`;\n\n Cadenza.createEphemeralMetaTask(\n `Resolve frontend socket delegation ${deputyExecId}`,\n (completedCtx: AnyObject) => {\n callback(completedCtx);\n return completedCtx;\n },\n \"Resolves a server-routed delegation request through the frontend runtime.\",\n {\n register: false,\n },\n ).doOn(`meta.node.graph_completed:${deputyExecId}`, targetNotFoundSignal);\n\n if (\n !Cadenza.get(normalizedDelegationCtx.__remoteRoutineName) &&\n !Cadenza.registry.routines.get(\n normalizedDelegationCtx.__remoteRoutineName,\n )\n ) {\n Cadenza.emit(targetNotFoundSignal, {\n ...normalizedDelegationCtx,\n __error: `No task or routine registered for delegation target ${normalizedDelegationCtx.__remoteRoutineName}.`,\n errored: true,\n });\n return;\n }\n\n Cadenza.emit(\"meta.socket.delegation_requested\", {\n ...normalizedDelegationCtx,\n __name: normalizedDelegationCtx.__remoteRoutineName,\n });\n });\n\n socket.on(\"signal\", (signalCtx, callback?: unknown) => {\n if (Cadenza.signalBroker.listObservedSignals().includes(signalCtx.__signalName)) {\n if (isSocketAckCallback(callback)) {\n callback({\n __status: \"success\",\n __signalName: signalCtx.__signalName,\n });\n }\n Cadenza.emit(signalCtx.__signalName, signalCtx);\n return;\n }\n\n if (isSocketAckCallback(callback)) {\n callback({\n ...signalCtx,\n __status: \"error\",\n __error: `No such signal: ${signalCtx.__signalName}`,\n errored: true,\n });\n }\n });\n\n socket.on(\"status_check\", (statusCtx, callback) => {\n callback(Cadenza.serviceRegistry.resolveLocalStatusCheck(statusCtx));\n });\n\n socket.on(\"status_update\", (status) => {\n Cadenza.emit(\"meta.socket_client.status_received\", status);\n });\n\n socket.on(\"connect_error\", (err) => {\n runtimeHandle.handshake = false;\n upsertDiagnostics(\n {\n connected: false,\n handshake: false,\n connectErrors: state.connectErrors + 1,\n lastHandshakeError: err.message,\n },\n err,\n );\n applySessionOperation(\"connect\", {\n connected: false,\n handshake: false,\n connectErrors: state.connectErrors + 1,\n lastHandshakeError: err.message,\n });\n Cadenza.log(\n \"Socket connect error\",\n {\n error: err.message,\n serviceName,\n socketId: socket.id,\n url,\n },\n \"error\",\n );\n Cadenza.emit(`meta.socket_client.connect_error:${fetchId}`, err);\n });\n\n socket.on(\"reconnect_attempt\", (attempt) => {\n upsertDiagnostics({ reconnectAttempts: attempt });\n applySessionOperation(\"connect\", {\n reconnectAttempts: attempt,\n });\n Cadenza.log(`Reconnect attempt: ${attempt}`);\n });\n\n socket.on(\"reconnect\", (attempt) => {\n upsertDiagnostics({ connected: true });\n applySessionOperation(\"connect\", {\n connected: true,\n });\n Cadenza.log(`Socket reconnected after ${attempt} tries`, {\n socketId: socket.id,\n url,\n serviceName,\n });\n });\n\n socket.on(\"reconnect_error\", (err) => {\n runtimeHandle.handshake = false;\n upsertDiagnostics(\n {\n connected: false,\n handshake: false,\n reconnectErrors: state.reconnectErrors + 1,\n lastHandshakeError: err.message,\n },\n err,\n );\n applySessionOperation(\"connect\", {\n connected: false,\n handshake: false,\n reconnectErrors: state.reconnectErrors + 1,\n lastHandshakeError: err.message,\n });\n Cadenza.log(\n \"Socket reconnect failed.\",\n { error: err.message, serviceName, url, socketId: socket.id },\n \"warning\",\n );\n });\n\n socket.on(\"error\", (err) => {\n runtimeHandle.errorCount += 1;\n upsertDiagnostics(\n {\n socketErrors: state.socketErrors + 1,\n lastHandshakeError: this.getErrorMessage(err),\n },\n err,\n );\n applySessionOperation(\"transmit\", {\n socketErrors: state.socketErrors + 1,\n errorCount: runtimeHandle.errorCount,\n lastHandshakeError: this.getErrorMessage(err),\n });\n Cadenza.log(\n \"Socket error\",\n { error: err, socketId: socket.id, url, serviceName },\n \"error\",\n );\n Cadenza.emit(\"meta.socket_client.error\", err);\n });\n\n socket.on(\"disconnect\", () => {\n const disconnectedAt = new Date().toISOString();\n upsertDiagnostics({\n connected: false,\n handshake: false,\n lastDisconnectAt: disconnectedAt,\n });\n applySessionOperation(\"connect\", {\n connected: false,\n handshake: false,\n lastDisconnectAt: disconnectedAt,\n });\n Cadenza.log(\n \"Socket disconnected.\",\n { url, serviceName, socketId: socket.id },\n \"warning\",\n );\n Cadenza.emit(`meta.socket_client.disconnected:${fetchId}`, {\n serviceName,\n serviceTransportId,\n serviceOrigin,\n });\n runtimeHandle.handshake = false;\n });\n\n socket.connect();\n\n runtimeHandle.handshakeTask = Cadenza.createMetaTask(\n `Socket handshake with ${url}`,\n async (_ctx, emitter) => {\n if (runtimeHandle.handshake) return;\n runtimeHandle.handshake = true;\n\n upsertDiagnostics({\n handshake: true,\n });\n applySessionOperation(\"handshake\", {\n handshake: true,\n });\n\n await runtimeHandle.emitWhenReady?.(\n \"handshake\",\n {\n serviceInstanceId: Cadenza.serviceRegistry.serviceInstanceId,\n serviceName: Cadenza.serviceRegistry.serviceName,\n isFrontend: Cadenza.serviceRegistry.isFrontend || isBrowser,\n __status: \"success\",\n },\n 10_000,\n (result: any) => {\n if (result.status === \"success\") {\n const handshakeAt = new Date().toISOString();\n upsertDiagnostics({\n connected: true,\n handshake: true,\n lastHandshakeAt: handshakeAt,\n lastHandshakeError: null,\n socketId: socket.id ?? null,\n });\n applySessionOperation(\"handshake\", {\n connected: true,\n handshake: true,\n lastHandshakeAt: handshakeAt,\n lastHandshakeError: null,\n socketId: socket.id ?? null,\n });\n Cadenza.log(\"Socket client connected\", {\n result,\n serviceName,\n socketId: socket.id,\n url,\n });\n } else {\n const errorMessage =\n result?.__error ?? result?.error ?? \"Socket handshake failed\";\n upsertDiagnostics(\n {\n connected: false,\n handshake: false,\n lastHandshakeError: errorMessage,\n },\n errorMessage,\n );\n applySessionOperation(\"handshake\", {\n connected: false,\n handshake: false,\n lastHandshakeError: errorMessage,\n });\n Cadenza.log(\n \"Socket handshake failed\",\n { result, serviceName, socketId: socket.id, url },\n \"warning\",\n );\n }\n\n // If needed in future:\n // runtimeHandle.errorCount threshold can request shutdown signal.\n void emitter;\n },\n );\n },\n \"Handshakes with socket server\",\n ).doOn(`meta.socket_client.connected:${fetchId}`);\n\n runtimeHandle.delegateTask = Cadenza.createMetaTask(\n `Delegate flow to Socket service ${url}`,\n async (delegateCtx, emitter) => {\n if (delegateCtx.__remoteRoutineName === undefined) {\n return;\n }\n\n const normalizedDelegateCtx =\n ensureDelegationContextMetadata(delegateCtx);\n delete normalizedDelegateCtx.__isSubMeta;\n delete normalizedDelegateCtx.__broadcast;\n\n const deputyExecId =\n normalizedDelegateCtx.__metadata?.__deputyExecId;\n const requestSentAt = Date.now();\n if (deputyExecId) {\n runtimeHandle.pendingDelegationIds.add(deputyExecId);\n syncPendingCounts();\n }\n\n try {\n const resultContext =\n ((await runtimeHandle.emitWhenReady?.(\n \"delegation\",\n normalizedDelegateCtx,\n normalizedDelegateCtx.__timeout ?? 60_000,\n )) as AnyObject | undefined) ??\n ({\n errored: true,\n __error: \"Socket delegation returned no response\",\n } as AnyObject);\n\n const requestDuration = Date.now() - requestSentAt;\n const metadata = resultContext.__metadata;\n delete resultContext.__metadata;\n\n if (deputyExecId) {\n emitter(`meta.socket_client.delegated:${deputyExecId}`, {\n ...resultContext,\n ...metadata,\n __requestDuration: requestDuration,\n });\n }\n\n if (resultContext?.errored || resultContext?.failed) {\n const errorMessage =\n resultContext?.__error ??\n resultContext?.error ??\n \"Socket delegation failed\";\n upsertDiagnostics(\n {\n lastHandshakeError: String(errorMessage),\n },\n errorMessage,\n );\n applySessionOperation(\"delegate\", {\n lastHandshakeError: String(errorMessage),\n });\n }\n\n return resultContext;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n const failedContext = {\n errored: true,\n __error: message,\n };\n\n if (deputyExecId) {\n emitter(`meta.socket_client.delegated:${deputyExecId}`, {\n ...failedContext,\n __requestDuration: Date.now() - requestSentAt,\n });\n }\n\n upsertDiagnostics(\n {\n lastHandshakeError: message,\n },\n error,\n );\n applySessionOperation(\"delegate\", {\n lastHandshakeError: message,\n });\n return failedContext;\n } finally {\n if (deputyExecId) {\n runtimeHandle.pendingDelegationIds.delete(deputyExecId);\n syncPendingCounts();\n }\n }\n },\n `Delegate flow to service ${serviceName} with address ${url}`,\n )\n .doOn(`meta.service_registry.selected_instance_for_socket:${fetchId}`)\n .attachSignal(\n \"meta.socket_client.delegated\",\n \"meta.socket_shutdown_requested\",\n );\n\n runtimeHandle.transmitTask = Cadenza.createMetaTask(\n `Transmit signal to socket server ${url}`,\n async (signalCtx, emitter) => {\n if (signalCtx.__signalName === undefined) {\n return;\n }\n\n delete signalCtx.__broadcast;\n\n const response =\n ((await runtimeHandle.emitWhenReady?.(\"signal\", signalCtx, 5_000)) as\n | AnyObject\n | undefined) ??\n ({\n errored: true,\n __error: \"Socket signal transmission returned no response\",\n } as AnyObject);\n\n applySessionOperation(\"transmit\", {});\n\n if (signalCtx.__routineExecId) {\n emitter(`meta.socket_client.transmitted:${signalCtx.__routineExecId}`, {\n ...response,\n });\n }\n\n return response;\n },\n `Transmits signal to service ${serviceName} with address ${url}`,\n )\n .doOn(`meta.service_registry.selected_instance_for_socket:${fetchId}`)\n .attachSignal(\"meta.socket_client.transmitted\");\n\n Cadenza.createEphemeralMetaTask(\n `Shutdown SocketClient ${url}`,\n (_ctx, emitter) => {\n runtimeHandle.handshake = false;\n\n upsertDiagnostics({\n connected: false,\n handshake: false,\n destroyed: true,\n pendingDelegations: 0,\n pendingTimers: 0,\n });\n applySessionOperation(\"shutdown\", {\n connected: false,\n handshake: false,\n destroyed: true,\n pendingDelegations: 0,\n pendingTimers: 0,\n });\n\n Cadenza.log(\"Shutting down socket client\", { url, serviceName });\n\n emitter(`meta.fetch.handshake_requested:${fetchId}`, {\n serviceInstanceId,\n serviceName,\n communicationTypes,\n serviceTransportId,\n serviceOrigin,\n transportProtocols,\n handshakeData: {\n instanceId: Cadenza.serviceRegistry.serviceInstanceId,\n serviceName: Cadenza.serviceRegistry.serviceName,\n },\n });\n\n for (const id of runtimeHandle.pendingDelegationIds) {\n emitter(`meta.socket_client.delegated:${id}`, {\n errored: true,\n __error: \"Shutting down socket client\",\n });\n }\n\n this.destroySocketClientRuntimeHandle(runtimeHandle);\n emitter(\"meta.socket_client.runtime_clear_requested\", {\n fetchId,\n });\n },\n \"Shuts down the socket client\",\n )\n .doOn(\n `meta.socket_shutdown_requested:${fetchId}`,\n `meta.socket_client.disconnected:${fetchId}`,\n `meta.fetch.handshake_failed:${fetchId}`,\n `meta.socket_client.connect_error:${fetchId}`,\n )\n .attachSignal(\"meta.fetch.handshake_requested\")\n .emits(\"meta.socket_client_shutdown_complete\");\n\n return true;\n },\n { mode: \"write\" },\n ),\n \"Connects to a specified socket server and wires runtime tasks.\",\n )\n .doOn(\"meta.fetch.handshake_complete\")\n .emitsOnFail(\"meta.socket_client.connect_failed\");\n }\n\n private resolveSocketServerKey(input: AnyObject): string {\n return (\n String(input.serverKey ?? input.__socketServerKey ?? this.socketServerDefaultKey)\n .trim() || this.socketServerDefaultKey\n );\n }\n\n private resolveSocketClientFetchId(input: AnyObject): string | undefined {\n const explicitFetchId = String(input.fetchId ?? \"\").trim();\n if (explicitFetchId) {\n return explicitFetchId;\n }\n\n const transportId = String(\n input.serviceTransportId ?? input.transportId ?? \"\",\n ).trim();\n return transportId || undefined;\n }\n\n private async createSocketServerRuntimeHandleFromContext(\n context: AnyObject,\n ): Promise<SocketServerRuntimeHandle> {\n const baseServer = context.httpsServer ?? context.httpServer;\n if (!baseServer) {\n throw new Error(\n \"Socket server runtime setup requires either httpsServer or httpServer\",\n );\n }\n\n const socketServerModule = await importNodeModule<{\n Server: new (server: any, options: AnyObject) => any;\n }>(\"socket.io\");\n const Server = socketServerModule.Server;\n const server = new Server(baseServer, {\n pingInterval: 30_000,\n pingTimeout: 20_000,\n maxHttpBufferSize: 1e7,\n connectionStateRecovery: {\n maxDisconnectionDuration: 2 * 60 * 1000,\n skipMiddlewares: true,\n },\n });\n\n return {\n server,\n initialized: false,\n connectedSocketIds: new Set<string>(),\n broadcastStatusTask: null,\n shutdownTask: null,\n };\n }\n\n private destroySocketServerRuntimeHandle(\n runtimeHandle: SocketServerRuntimeHandle | null,\n ): void {\n if (!runtimeHandle) {\n return;\n }\n\n runtimeHandle.broadcastStatusTask?.destroy();\n runtimeHandle.shutdownTask?.destroy();\n runtimeHandle.broadcastStatusTask = null;\n runtimeHandle.shutdownTask = null;\n runtimeHandle.connectedSocketIds.clear();\n runtimeHandle.initialized = false;\n runtimeHandle.server.close();\n runtimeHandle.server.removeAllListeners();\n }\n\n private createSocketClientRuntimeHandle(url: string): SocketClientRuntimeHandle {\n return {\n url,\n socket: io(url, {\n reconnection: true,\n reconnectionAttempts: 5,\n reconnectionDelay: 2000,\n reconnectionDelayMax: 10000,\n randomizationFactor: 0.5,\n transports: [\"websocket\"],\n autoConnect: false,\n }),\n initialized: false,\n handshake: false,\n errorCount: 0,\n pendingDelegationIds: new Set<string>(),\n pendingTimers: new Set<NodeJS.Timeout>(),\n emitWhenReady: null,\n handshakeTask: null,\n delegateTask: null,\n transmitTask: null,\n };\n }\n\n private destroySocketClientRuntimeHandle(\n runtimeHandle: SocketClientRuntimeHandle | null,\n ): void {\n if (!runtimeHandle) {\n return;\n }\n\n runtimeHandle.initialized = false;\n runtimeHandle.handshake = false;\n runtimeHandle.emitWhenReady = null;\n\n runtimeHandle.handshakeTask?.destroy();\n runtimeHandle.delegateTask?.destroy();\n runtimeHandle.transmitTask?.destroy();\n\n runtimeHandle.handshakeTask = null;\n runtimeHandle.delegateTask = null;\n runtimeHandle.transmitTask = null;\n\n for (const timer of runtimeHandle.pendingTimers) {\n clearTimeout(timer);\n }\n\n runtimeHandle.pendingTimers.clear();\n runtimeHandle.pendingDelegationIds.clear();\n\n runtimeHandle.socket.close();\n runtimeHandle.socket.removeAllListeners();\n }\n\n private normalizeCommunicationTypes(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return value\n .map((item) => String(item))\n .filter((item) => item.trim().length > 0);\n }\n\n private getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n\n if (typeof error === \"string\") {\n return error;\n }\n\n try {\n return JSON.stringify(error);\n } catch {\n return String(error);\n }\n }\n\n private pruneDiagnosticsEntries(\n entries: Record<string, SocketClientDiagnosticsState>,\n now = Date.now(),\n ): void {\n for (const [fetchId, state] of Object.entries(entries)) {\n if (state.destroyed && now - state.updatedAt > this.destroyedDiagnosticsTtlMs) {\n delete entries[fetchId];\n }\n }\n\n if (Object.keys(entries).length <= this.diagnosticsMaxClientEntries) {\n return;\n }\n\n const entriesByEvictionPriority = Object.entries(entries).sort((left, right) => {\n if (left[1].destroyed !== right[1].destroyed) {\n return left[1].destroyed ? -1 : 1;\n }\n\n return left[1].updatedAt - right[1].updatedAt;\n });\n\n while (\n Object.keys(entries).length > this.diagnosticsMaxClientEntries &&\n entriesByEvictionPriority.length > 0\n ) {\n const [fetchId] = entriesByEvictionPriority.shift()!;\n delete entries[fetchId];\n }\n }\n\n public async getSocketClientDiagnosticsEntry(\n fetchId: string,\n ): Promise<SocketClientDiagnosticsState | undefined> {\n const normalized = String(fetchId ?? \"\").trim();\n if (!normalized) {\n return undefined;\n }\n\n const snapshot = this.socketClientDiagnosticsActor.getState();\n const entries = { ...snapshot.entries };\n this.pruneDiagnosticsEntries(entries);\n return entries[normalized];\n }\n\n private resolveTransportDiagnosticsOptions(ctx: AnyObject): {\n detailLevel: TransportDetailLevel;\n includeErrorHistory: boolean;\n errorHistoryLimit: number;\n } {\n const detailLevel: TransportDetailLevel =\n ctx.detailLevel === \"full\" ? \"full\" : \"summary\";\n const includeErrorHistory = Boolean(ctx.includeErrorHistory);\n\n const requestedLimit = Number(ctx.errorHistoryLimit);\n const errorHistoryLimit = Number.isFinite(requestedLimit)\n ? Math.max(1, Math.min(200, Math.trunc(requestedLimit)))\n : 10;\n\n return {\n detailLevel,\n includeErrorHistory,\n errorHistoryLimit,\n };\n }\n\n private collectSocketTransportDiagnostics(\n ctx: AnyObject,\n diagnosticsEntries: Record<string, SocketClientDiagnosticsState>,\n ): AnyObject {\n const { detailLevel, includeErrorHistory, errorHistoryLimit } =\n this.resolveTransportDiagnosticsOptions(ctx);\n const serviceName = Cadenza.serviceRegistry.serviceName ?? \"UnknownService\";\n\n const entries = { ...diagnosticsEntries };\n this.pruneDiagnosticsEntries(entries);\n\n const states = Object.values(entries).sort((a, b) =>\n a.fetchId.localeCompare(b.fetchId),\n );\n\n const summary = {\n detailLevel,\n totalClients: states.length,\n connectedClients: states.filter((state) => state.connected).length,\n activeHandshakes: states.filter((state) => state.handshake).length,\n pendingDelegations: states.reduce(\n (acc, state) => acc + state.pendingDelegations,\n 0,\n ),\n pendingTimers: states.reduce((acc, state) => acc + state.pendingTimers, 0),\n reconnectAttempts: states.reduce(\n (acc, state) => acc + state.reconnectAttempts,\n 0,\n ),\n connectErrors: states.reduce((acc, state) => acc + state.connectErrors, 0),\n reconnectErrors: states.reduce((acc, state) => acc + state.reconnectErrors, 0),\n socketErrors: states.reduce((acc, state) => acc + state.socketErrors, 0),\n latestError:\n states\n .slice()\n .sort((a, b) => b.lastErrorAt - a.lastErrorAt)\n .find((state) => state.lastError)?.lastError ?? null,\n };\n\n if (detailLevel === \"summary\") {\n return {\n transportDiagnostics: {\n [serviceName]: {\n socketClient: summary,\n },\n },\n };\n }\n\n const clients = states.map((state) => {\n const details: AnyObject = {\n fetchId: state.fetchId,\n serviceName: state.serviceName,\n url: state.url,\n socketId: state.socketId,\n connected: state.connected,\n handshake: state.handshake,\n reconnectAttempts: state.reconnectAttempts,\n connectErrors: state.connectErrors,\n reconnectErrors: state.reconnectErrors,\n socketErrors: state.socketErrors,\n pendingDelegations: state.pendingDelegations,\n pendingTimers: state.pendingTimers,\n destroyed: state.destroyed,\n lastHandshakeAt: state.lastHandshakeAt,\n lastHandshakeError: state.lastHandshakeError,\n lastDisconnectAt: state.lastDisconnectAt,\n latestError: state.lastError,\n };\n\n if (includeErrorHistory) {\n details.errorHistory = state.errorHistory.slice(-errorHistoryLimit);\n }\n\n return details;\n });\n\n return {\n transportDiagnostics: {\n [serviceName]: {\n socketClient: {\n ...summary,\n clients,\n },\n },\n },\n };\n }\n}\n","type WaitOutcome<TError> =\n | { ok: true }\n | { ok: false; error: TError };\n\ntype SocketLike = {\n connected?: boolean;\n once: (event: string, listener: (...args: any[]) => void) => any;\n off: (event: string, listener: (...args: any[]) => void) => any;\n};\n\n/**\n * Waits for a socket to become connected with explicit timeout/error outcomes.\n * Ensures listeners are removed in all exit paths to avoid accumulation across retries.\n */\nexport const waitForSocketConnection = async <TError>(\n socket: SocketLike | null,\n timeoutMs: number,\n createError: (reason: \"connect_timeout\" | \"connect_error\" | \"disconnected\", error?: unknown) => TError,\n): Promise<WaitOutcome<TError>> => {\n if (!socket) {\n return { ok: false, error: createError(\"disconnected\") };\n }\n\n if (socket.connected) {\n return { ok: true };\n }\n\n return new Promise((resolve) => {\n let timer: NodeJS.Timeout | null = null;\n let settled = false;\n\n const cleanup = () => {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n\n socket.off(\"connect\", onConnect);\n socket.off(\"connect_error\", onConnectError);\n socket.off(\"disconnect\", onDisconnect);\n };\n\n const settle = (outcome: WaitOutcome<TError>) => {\n if (settled) return;\n settled = true;\n cleanup();\n resolve(outcome);\n };\n\n const onConnect = () => settle({ ok: true });\n const onConnectError = (error: unknown) =>\n settle({ ok: false, error: createError(\"connect_error\", error) });\n const onDisconnect = () =>\n settle({ ok: false, error: createError(\"disconnected\") });\n\n socket.once(\"connect\", onConnect);\n socket.once(\"connect_error\", onConnectError);\n socket.once(\"disconnect\", onDisconnect);\n\n timer = setTimeout(() => {\n settle({ ok: false, error: createError(\"connect_timeout\") });\n }, timeoutMs);\n });\n};\n","/**\n * Formats a given timestamp into an ISO 8601 date string.\n *\n * @param {number} timestamp - The timestamp to format, represented as the number of milliseconds since the UNIX epoch.\n * @return {string} The formatted ISO 8601 string representing the date and time corresponding to the provided timestamp.\n */\nexport function formatTimestamp(timestamp: number) {\n return new Date(timestamp).toISOString();\n}\n\n/**\n * Decomposes a signal name into its constituent parts such as metadata indicator, source service name, domain, and action.\n *\n * @param {string} signalName - The signal name string to be decomposed. Typically a dot-separated string.\n * @return {Object} An object containing the decomposed parts:\n * - `isMeta` {boolean} - Indicates whether the signal is a metadata signal.\n * - `sourceServiceName` {string|null} - The name of the source service, or null if not applicable.\n * - `domain` {string} - The domain extracted from the signal name.\n * - `action` {string} - The action or last component of the signal name.\n */\nexport function decomposeSignalName(signalName: string) {\n const parts = signalName.split(\".\");\n let isMeta =\n parts[0] === \"meta\" ||\n parts[0] === \"sub_meta\" ||\n parts[1] === \"meta\" ||\n parts[1] === \"sub_meta\";\n let isGlobal = parts[0] === \"global\";\n let domain = isGlobal\n ? isMeta\n ? parts.length === 4\n ? parts[2]\n : \"\"\n : parts.length === 3\n ? parts[1]\n : \"\"\n : isMeta\n ? parts.length === 3\n ? parts[1]\n : \"\"\n : parts.length === 2\n ? parts[0]\n : \"\";\n const action = parts[parts.length - 1];\n\n return {\n isMeta,\n isGlobal,\n domain,\n action,\n };\n}\n","import Cadenza from \"../Cadenza\";\nimport { decomposeSignalName } from \"../utils/tools\";\n\nfunction buildSignalDatabaseTriggerContext(\n data: Record<string, unknown>,\n): Record<string, unknown> {\n return {\n data: { ...data },\n queryData: {\n data: { ...data },\n },\n };\n}\n\n/**\n * SignalController is a singleton class that manages signal registration, transmission,\n * and metadata handling within a service instance.\n *\n * This class utilizes the Cadenza framework to handle various tasks related to signals,\n * such as registering signals, transmitting signals to remote services, adding metadata,\n * and maintaining clean-forwarding and processing of signals.\n *\n * Features:\n * - Ensures signals are properly registered and metadata is propagated.\n * - Handles foreign signal registration for cross-service communication.\n * - Forwards signal observations and manages their metadata.\n * - Adds metadata during signal emission and consumption.\n * - Implements a meta-task-based system for handling complex workflows.\n *\n * Constructor initializes the necessary meta-tasks and tasks required for signal management.\n */\nexport default class SignalController {\n private static _instance: SignalController;\n public static get instance(): SignalController {\n if (!this._instance) this._instance = new SignalController();\n return this._instance;\n }\n\n /**\n * Constructor method for initializing the signal registration and data transmission process.\n * This method defines multiple meta tasks to manage signals, forwarding, and adding metadata\n * for service instances in a distributed system.\n *\n * Some key functionalities include:\n * - Registering signals from a service instance.\n * - Handling foreign signal registration from remote services.\n * - Forwarding signal observations between services.\n * - Adding metadata to signal emissions for better traceability.\n * - Adding metadata to signal consumption events.\n *\n * It serves as an initializer for signals and tasks.\n */\n constructor() {\n Cadenza.createMetaTask(\n \"Handle Signal Registration\",\n (ctx, emit) => {\n const { signalName } = ctx;\n const { isMeta, isGlobal, domain, action } =\n decomposeSignalName(signalName);\n\n emit(\n \"global.meta.signal_controller.signal_added\",\n buildSignalDatabaseTriggerContext({\n name: signalName,\n isGlobal,\n domain,\n action,\n isMeta,\n }),\n );\n\n return ctx;\n },\n \"Handles signal registration from a service instance\",\n )\n .doOn(\"meta.signal_broker.added\")\n .attachSignal(\"global.meta.signal_controller.signal_added\");\n\n Cadenza.createMetaTask(\n \"Add data to signal emission\",\n (ctx) => {\n const signalEmission = ctx.__signalEmission;\n delete ctx.__signalEmission;\n\n if (!signalEmission) {\n return false;\n }\n\n return {\n data: {\n uuid: signalEmission.uuid,\n signal_name: signalEmission.signalName,\n signal_tag: signalEmission.signalTag,\n task_name: signalEmission.taskName,\n task_version: signalEmission.taskVersion,\n task_execution_id: signalEmission.taskExecutionId,\n is_meta: signalEmission.isMeta,\n is_metric: signalEmission.isMetric ?? false,\n routine_execution_id: signalEmission.routineExecutionId,\n execution_trace_id: signalEmission.executionTraceId,\n context: ctx,\n metadata: signalEmission,\n service_name: Cadenza.serviceRegistry.serviceName,\n service_instance_id: Cadenza.serviceRegistry.serviceInstanceId,\n },\n };\n },\n \"\",\n { isSubMeta: true, concurrency: 100 },\n )\n .doOn(\"sub_meta.signal_broker.emitting_signal\")\n .emits(\"global.sub_meta.signal_controller.signal_emitted\");\n }\n}\n","import type {\n RuntimeValidationPolicy,\n RuntimeValidationScope,\n} from \"@cadenza.io/core\";\nimport Cadenza from \"../Cadenza\";\n\nexport const RUNTIME_VALIDATION_INTENTS = {\n getPolicy: \"meta-runtime-validation-policy-get\",\n setPolicy: \"meta-runtime-validation-policy-set\",\n replacePolicy: \"meta-runtime-validation-policy-replace\",\n clearPolicy: \"meta-runtime-validation-policy-clear\",\n listScopes: \"meta-runtime-validation-scope-list\",\n upsertScope: \"meta-runtime-validation-scope-upsert\",\n removeScope: \"meta-runtime-validation-scope-remove\",\n clearScopes: \"meta-runtime-validation-scope-clear\",\n} as const;\n\nexport const RUNTIME_VALIDATION_SIGNALS = {\n setPolicyRequested: \"meta.runtime_validation.policy_set_requested\",\n replacePolicyRequested: \"meta.runtime_validation.policy_replace_requested\",\n clearPolicyRequested: \"meta.runtime_validation.policy_clear_requested\",\n upsertScopeRequested: \"meta.runtime_validation.scope_upsert_requested\",\n removeScopeRequested: \"meta.runtime_validation.scope_remove_requested\",\n clearScopesRequested: \"meta.runtime_validation.scope_clear_requested\",\n policyUpdated: \"meta.runtime_validation.policy_updated\",\n policyCleared: \"meta.runtime_validation.policy_cleared\",\n scopeUpserted: \"meta.runtime_validation.scope_upserted\",\n scopeRemoved: \"meta.runtime_validation.scope_removed\",\n scopesCleared: \"meta.runtime_validation.scopes_cleared\",\n} as const;\n\nfunction normalizePolicyContext(ctx: Record<string, any>): RuntimeValidationPolicy {\n const source =\n ctx.policy && typeof ctx.policy === \"object\" && !Array.isArray(ctx.policy)\n ? ctx.policy\n : ctx;\n const policy: RuntimeValidationPolicy = {};\n\n for (const key of [\n \"metaInput\",\n \"metaOutput\",\n \"businessInput\",\n \"businessOutput\",\n \"warnOnMissingMetaInputSchema\",\n \"warnOnMissingMetaOutputSchema\",\n \"warnOnMissingBusinessInputSchema\",\n \"warnOnMissingBusinessOutputSchema\",\n ] as const) {\n if (source[key] !== undefined) {\n policy[key] = source[key];\n }\n }\n\n return policy;\n}\n\nfunction normalizeScopeContext(ctx: Record<string, any>): RuntimeValidationScope {\n const source =\n ctx.scope && typeof ctx.scope === \"object\" && !Array.isArray(ctx.scope)\n ? ctx.scope\n : ctx;\n\n return {\n id: source.id,\n active: source.active,\n startTaskNames: Array.isArray(source.startTaskNames)\n ? source.startTaskNames\n : undefined,\n startRoutineNames: Array.isArray(source.startRoutineNames)\n ? source.startRoutineNames\n : undefined,\n policy:\n source.policy && typeof source.policy === \"object\"\n ? normalizePolicyContext({ policy: source.policy })\n : undefined,\n };\n}\n\nexport default class RuntimeValidationController {\n private static _instance: RuntimeValidationController;\n\n public static get instance(): RuntimeValidationController {\n if (!this._instance) {\n this._instance = new RuntimeValidationController();\n }\n\n return this._instance;\n }\n\n constructor() {\n Cadenza.defineIntent({\n name: RUNTIME_VALIDATION_INTENTS.getPolicy,\n description: \"Get the active runtime validation policy.\",\n input: { type: \"object\" },\n output: { type: \"object\" },\n });\n Cadenza.defineIntent({\n name: RUNTIME_VALIDATION_INTENTS.setPolicy,\n description: \"Merge fields into the active runtime validation policy.\",\n input: { type: \"object\" },\n output: { type: \"object\" },\n });\n Cadenza.defineIntent({\n name: RUNTIME_VALIDATION_INTENTS.replacePolicy,\n description: \"Replace the active runtime validation policy.\",\n input: { type: \"object\" },\n output: { type: \"object\" },\n });\n Cadenza.defineIntent({\n name: RUNTIME_VALIDATION_INTENTS.clearPolicy,\n description: \"Clear the active runtime validation policy.\",\n input: { type: \"object\" },\n output: { type: \"object\" },\n });\n Cadenza.defineIntent({\n name: RUNTIME_VALIDATION_INTENTS.listScopes,\n description: \"List active runtime validation scopes.\",\n input: { type: \"object\" },\n output: { type: \"object\" },\n });\n Cadenza.defineIntent({\n name: RUNTIME_VALIDATION_INTENTS.upsertScope,\n description:\n \"Create or update a runtime validation scope for targeted subflow validation.\",\n input: { type: \"object\" },\n output: { type: \"object\" },\n });\n Cadenza.defineIntent({\n name: RUNTIME_VALIDATION_INTENTS.removeScope,\n description: \"Remove a runtime validation scope by id.\",\n input: { type: \"object\" },\n output: { type: \"object\" },\n });\n Cadenza.defineIntent({\n name: RUNTIME_VALIDATION_INTENTS.clearScopes,\n description: \"Clear all runtime validation scopes.\",\n input: { type: \"object\" },\n output: { type: \"object\" },\n });\n\n Cadenza.createMetaTask(\"Get runtime validation policy\", () => {\n return {\n policy: Cadenza.getRuntimeValidationPolicy(),\n };\n }).respondsTo(RUNTIME_VALIDATION_INTENTS.getPolicy);\n\n Cadenza.createMetaTask(\n \"Set runtime validation policy\",\n (ctx, emit) => {\n const policy = normalizePolicyContext(ctx);\n const nextPolicy = Cadenza.setRuntimeValidationPolicy(policy);\n emit(RUNTIME_VALIDATION_SIGNALS.policyUpdated, {\n policy: nextPolicy,\n });\n return {\n policy: nextPolicy,\n };\n },\n \"Merges runtime validation policy fields at runtime.\",\n )\n .respondsTo(RUNTIME_VALIDATION_INTENTS.setPolicy)\n .doOn(RUNTIME_VALIDATION_SIGNALS.setPolicyRequested);\n\n Cadenza.createMetaTask(\n \"Replace runtime validation policy\",\n (ctx, emit) => {\n const policy = normalizePolicyContext(ctx);\n const nextPolicy = Cadenza.replaceRuntimeValidationPolicy(policy);\n emit(RUNTIME_VALIDATION_SIGNALS.policyUpdated, {\n policy: nextPolicy,\n });\n return {\n policy: nextPolicy,\n };\n },\n \"Replaces runtime validation policy fields at runtime.\",\n )\n .respondsTo(RUNTIME_VALIDATION_INTENTS.replacePolicy)\n .doOn(RUNTIME_VALIDATION_SIGNALS.replacePolicyRequested);\n\n Cadenza.createMetaTask(\n \"Clear runtime validation policy\",\n (_ctx, emit) => {\n Cadenza.clearRuntimeValidationPolicy();\n emit(RUNTIME_VALIDATION_SIGNALS.policyCleared, {});\n return {\n policy: Cadenza.getRuntimeValidationPolicy(),\n };\n },\n \"Clears the runtime validation policy.\",\n )\n .respondsTo(RUNTIME_VALIDATION_INTENTS.clearPolicy)\n .doOn(RUNTIME_VALIDATION_SIGNALS.clearPolicyRequested);\n\n Cadenza.createMetaTask(\"List runtime validation scopes\", () => {\n return {\n scopes: Cadenza.getRuntimeValidationScopes(),\n };\n }).respondsTo(RUNTIME_VALIDATION_INTENTS.listScopes);\n\n Cadenza.createMetaTask(\n \"Upsert runtime validation scope\",\n (ctx, emit) => {\n const scope = normalizeScopeContext(ctx);\n const nextScope = Cadenza.upsertRuntimeValidationScope(scope);\n emit(RUNTIME_VALIDATION_SIGNALS.scopeUpserted, {\n scope: nextScope,\n });\n return {\n scope: nextScope,\n };\n },\n \"Upserts a runtime validation scope for targeted debugging.\",\n )\n .respondsTo(RUNTIME_VALIDATION_INTENTS.upsertScope)\n .doOn(RUNTIME_VALIDATION_SIGNALS.upsertScopeRequested);\n\n Cadenza.createMetaTask(\n \"Remove runtime validation scope\",\n (ctx, emit) => {\n if (!ctx.id) {\n throw new Error(\"Runtime validation scope id is required\");\n }\n\n Cadenza.removeRuntimeValidationScope(ctx.id);\n emit(RUNTIME_VALIDATION_SIGNALS.scopeRemoved, {\n id: ctx.id,\n });\n return {\n id: ctx.id,\n scopes: Cadenza.getRuntimeValidationScopes(),\n };\n },\n \"Removes a runtime validation scope.\",\n )\n .respondsTo(RUNTIME_VALIDATION_INTENTS.removeScope)\n .doOn(RUNTIME_VALIDATION_SIGNALS.removeScopeRequested);\n\n Cadenza.createMetaTask(\n \"Clear runtime validation scopes\",\n (_ctx, emit) => {\n Cadenza.clearRuntimeValidationScopes();\n emit(RUNTIME_VALIDATION_SIGNALS.scopesCleared, {});\n return {\n scopes: Cadenza.getRuntimeValidationScopes(),\n };\n },\n \"Clears all runtime validation scopes.\",\n )\n .respondsTo(RUNTIME_VALIDATION_INTENTS.clearScopes)\n .doOn(RUNTIME_VALIDATION_SIGNALS.clearScopesRequested);\n }\n}\n","import { META_ACTOR_SESSION_STATE_PERSIST_INTENT } from \"@cadenza.io/core\";\nimport Cadenza from \"../../Cadenza\";\n\nexport function registerActorSessionPersistenceTasks(): void {\n if (Cadenza.get(\"Persist actor session state\")) {\n return;\n }\n\n const actorSessionStateInsertTask =\n Cadenza.getLocalCadenzaDBInsertTask(\"actor_session_state\") ??\n Cadenza.get(\"dbInsertActorSessionState\") ??\n Cadenza.get(\"Insert actor_session_state in CadenzaDB\") ??\n Cadenza.createCadenzaDBInsertTask(\n \"actor_session_state\",\n {},\n { concurrency: 100, isSubMeta: true },\n );\n\n const validateActorSessionStatePersistenceTask =\n Cadenza.createMetaTask(\n \"Validate actor session state persistence\",\n (ctx) => {\n if (ctx.errored || ctx.failed || ctx.__success !== true) {\n throw new Error(\n String(\n ctx.__error ??\n ctx.error ??\n \"actor_session_state persistence query failed\",\n ),\n );\n }\n\n const rowCount = Number(ctx.rowCount ?? 0);\n if (!Number.isFinite(rowCount) || rowCount <= 0) {\n throw new Error(\n \"actor_session_state persistence did not affect any rows (possible stale durable_version)\",\n );\n }\n\n return {\n __success: true,\n persisted: true,\n actor_name: ctx.actor_name,\n actor_version: ctx.actor_version,\n actor_key: ctx.actor_key,\n service_name: ctx.service_name,\n durable_version: ctx.durable_version,\n };\n },\n \"Enforces strict actor session persistence success contract.\",\n { isSubMeta: true, concurrency: 100 },\n );\n\n const insertAndValidateActorSessionStateTask = actorSessionStateInsertTask.then(\n validateActorSessionStatePersistenceTask,\n );\n\n Cadenza.createMetaTask(\n \"Persist actor session state\",\n (ctx) => {\n const actorName =\n typeof ctx.actor_name === \"string\" ? ctx.actor_name.trim() : \"\";\n const actorKey =\n typeof ctx.actor_key === \"string\" ? ctx.actor_key.trim() : \"\";\n const actorVersion = Number(ctx.actor_version ?? 1);\n const durableVersion = Number(ctx.durable_version);\n\n if (!actorName) {\n throw new Error(\"actor_name is required for actor session persistence\");\n }\n\n if (!actorKey) {\n throw new Error(\"actor_key is required for actor session persistence\");\n }\n\n if (!Number.isInteger(actorVersion) || actorVersion < 1) {\n throw new Error(\"actor_version must be a positive integer\");\n }\n\n if (!Number.isInteger(durableVersion) || durableVersion < 0) {\n throw new Error(\"durable_version must be a non-negative integer\");\n }\n\n if (\n typeof ctx.durable_state !== \"object\" ||\n ctx.durable_state === null ||\n Array.isArray(ctx.durable_state)\n ) {\n throw new Error(\"durable_state must be a non-null object\");\n }\n\n const serviceName = Cadenza.serviceRegistry.serviceName;\n if (!serviceName) {\n throw new Error(\"service_name is not available for actor session persistence\");\n }\n\n let expiresAt: string | null = null;\n if (ctx.expires_at !== undefined && ctx.expires_at !== null) {\n if (ctx.expires_at instanceof Date) {\n expiresAt = ctx.expires_at.toISOString();\n } else if (\n typeof ctx.expires_at === \"string\" &&\n ctx.expires_at.trim().length > 0\n ) {\n expiresAt = ctx.expires_at;\n } else {\n throw new Error(\"expires_at must be null, Date, or non-empty string\");\n }\n }\n\n const updatedAt = new Date().toISOString();\n\n return {\n ...ctx,\n actor_name: actorName,\n actor_key: actorKey,\n actor_version: actorVersion,\n durable_version: durableVersion,\n expires_at: expiresAt,\n service_name: serviceName,\n queryData: {\n data: {\n actor_name: actorName,\n actor_version: actorVersion,\n actor_key: actorKey,\n service_name: serviceName,\n durable_state: ctx.durable_state,\n durable_version: durableVersion,\n expires_at: expiresAt,\n updated: updatedAt,\n },\n onConflict: {\n target: [\n \"actor_name\",\n \"actor_version\",\n \"actor_key\",\n \"service_name\",\n ],\n action: {\n do: \"update\",\n set: {\n durable_state: \"excluded\",\n durable_version: \"excluded\",\n expires_at: \"excluded\",\n updated: \"excluded\",\n },\n where:\n \"actor_session_state.durable_version <= excluded.durable_version\",\n },\n },\n },\n };\n },\n \"Validates and prepares actor_session_state payload for strict write-through persistence.\",\n { isSubMeta: true, concurrency: 100 },\n )\n .then(insertAndValidateActorSessionStateTask)\n .respondsTo(META_ACTOR_SESSION_STATE_PERSIST_INTENT);\n}\n","import Cadenza from \"../../Cadenza\";\nimport { formatTimestamp } from \"../../utils/tools\";\nimport { isMetaIntentName } from \"../../utils/inquiry\";\nimport { registerActorSessionPersistenceTasks } from \"./registerActorSessionPersistence\";\n\nfunction buildDatabaseTriggerContext(\n data?: Record<string, unknown> | null,\n filter?: Record<string, unknown> | null,\n extra: Record<string, unknown> = {},\n): Record<string, unknown> {\n const nextData =\n data && typeof data === \"object\" ? { ...data } : undefined;\n const nextFilter =\n filter && typeof filter === \"object\" ? { ...filter } : undefined;\n const queryData: Record<string, unknown> = {};\n\n if (nextData !== undefined) {\n queryData.data = nextData;\n }\n\n if (nextFilter !== undefined) {\n queryData.filter = nextFilter;\n }\n\n return {\n ...extra,\n ...(nextData !== undefined ? { data: nextData } : {}),\n ...(nextFilter !== undefined ? { filter: nextFilter } : {}),\n ...(Object.keys(queryData).length > 0 ? { queryData } : {}),\n };\n}\n\nexport default class GraphMetadataController {\n private static _instance: GraphMetadataController;\n public static get instance(): GraphMetadataController {\n if (!this._instance) this._instance = new GraphMetadataController();\n return this._instance;\n }\n\n constructor() {\n Cadenza.createMetaTask(\"Handle task creation\", (ctx) => {\n return buildDatabaseTriggerContext({\n ...ctx.data,\n serviceName: Cadenza.serviceRegistry.serviceName,\n });\n })\n .doOn(\"meta.task.created\")\n .emits(\"global.meta.graph_metadata.task_created\");\n\n Cadenza.createMetaTask(\"Handle task update\", (ctx) => {\n return buildDatabaseTriggerContext(\n (ctx.data as Record<string, unknown> | undefined) ?? undefined,\n {\n ...ctx.filter,\n serviceName: Cadenza.serviceRegistry.serviceName,\n },\n );\n })\n .doOn(\"meta.task.layer_index_changed\", \"meta.task.destroyed\")\n .emits(\"global.meta.graph_metadata.task_updated\");\n\n Cadenza.createMetaTask(\"Handle task relationship creation\", (ctx) => {\n const taskName = ctx.data?.taskName ?? ctx.data?.task_name;\n const predecessorTaskName =\n ctx.data?.predecessorTaskName ?? ctx.data?.predecessor_task_name;\n const task = taskName ? Cadenza.get(taskName) : undefined;\n const predecessorTask = predecessorTaskName\n ? Cadenza.get(predecessorTaskName)\n : undefined;\n\n if (!task?.registered || !predecessorTask?.registered) {\n return false;\n }\n\n return buildDatabaseTriggerContext({\n ...ctx.data,\n serviceName: Cadenza.serviceRegistry.serviceName,\n predecessorServiceName: Cadenza.serviceRegistry.serviceName,\n });\n })\n .doOn(\"meta.task.relationship_added\")\n .emits(\"global.meta.graph_metadata.task_relationship_created\");\n\n Cadenza.createMetaTask(\"Handle task error\", (ctx) => {\n Cadenza.log(`Error in task ${ctx.data.taskName}`, ctx.data, \"error\");\n }).doOn(\"meta.node.errored\");\n\n Cadenza.createMetaTask(\"Handle task signal observation\", (ctx) => {\n const isGlobal = ctx.signalName.startsWith(\"global.\");\n return buildDatabaseTriggerContext({\n ...ctx.data,\n isGlobal,\n serviceName: Cadenza.serviceRegistry.serviceName,\n });\n })\n .doOn(\"meta.task.observed_signal\")\n .emits(\"global.meta.graph_metadata.task_signal_observed\");\n\n Cadenza.createMetaTask(\"Handle task signal attachment\", (ctx) => {\n return buildDatabaseTriggerContext(\n (ctx.data as Record<string, unknown> | undefined) ?? undefined,\n {\n ...ctx.filter,\n serviceName: Cadenza.serviceRegistry.serviceName,\n },\n );\n })\n .doOn(\"meta.task.attached_signal\")\n .emits(\"global.meta.graph_metadata.task_attached_signal\");\n\n Cadenza.createMetaTask(\"Handle task unsubscribing signal\", (ctx) => {\n return buildDatabaseTriggerContext(\n {\n deleted: true,\n },\n {\n ...ctx.filter,\n serviceName: Cadenza.serviceRegistry.serviceName,\n },\n );\n })\n .doOn(\"meta.task.unsubscribed_signal\")\n .emits(\"meta.graph_metadata.task_unsubscribed_signal\");\n\n Cadenza.createMetaTask(\"Handle task detaching signal\", (ctx) => {\n return buildDatabaseTriggerContext(\n {\n deleted: true,\n },\n {\n ...ctx.filter,\n serviceName: Cadenza.serviceRegistry.serviceName,\n },\n );\n })\n .doOn(\"meta.task.detached_signal\")\n .emits(\"global.meta.graph_metadata.task_detached_signal\");\n\n Cadenza.createMetaTask(\"Handle routine creation\", (ctx) => {\n return buildDatabaseTriggerContext({\n ...ctx.data,\n serviceName: Cadenza.serviceRegistry.serviceName,\n });\n })\n .doAfter(Cadenza.registry.registerRoutine)\n .emits(\"global.meta.graph_metadata.routine_created\");\n\n Cadenza.createMetaTask(\"Handle routine update\", (ctx) => {\n return buildDatabaseTriggerContext(\n (ctx.data as Record<string, unknown> | undefined) ?? undefined,\n {\n ...ctx.filter,\n serviceName: Cadenza.serviceRegistry.serviceName,\n },\n );\n })\n .doOn(\"meta.routine.destroyed\")\n .emits(\"global.meta.graph_metadata.routine_updated\");\n\n Cadenza.createMetaTask(\"Handle adding task to routine\", (ctx) => {\n return buildDatabaseTriggerContext({\n ...ctx.data,\n serviceName: Cadenza.serviceRegistry.serviceName,\n });\n })\n .doOn(\"meta.routine.task_added\")\n .emits(\"global.meta.graph_metadata.task_added_to_routine\");\n\n Cadenza.createMetaTask(\"Handle new trace\", (ctx) => {\n return buildDatabaseTriggerContext({\n ...ctx.data,\n service_name: Cadenza.serviceRegistry.serviceName,\n service_instance_id: Cadenza.serviceRegistry.serviceInstanceId,\n });\n })\n .doOn(\"meta.runner.new_trace\", \"sub_meta.signal_broker.new_trace\")\n .emits(\"global.meta.graph_metadata.execution_trace_created\");\n\n Cadenza.createMetaTask(\n \"Handle routine execution creation\",\n (ctx) => {\n return buildDatabaseTriggerContext({\n ...ctx.data,\n serviceName: Cadenza.serviceRegistry.serviceName,\n serviceInstanceId: Cadenza.serviceRegistry.serviceInstanceId,\n });\n },\n \"Handles routine execution creation\",\n { concurrency: 100, isSubMeta: true },\n )\n .doOn(\"meta.runner.added_tasks\")\n .emits(\"global.meta.graph_metadata.routine_execution_created\");\n\n Cadenza.createMetaTask(\n \"Handle routine execution started\",\n (ctx) => {\n return buildDatabaseTriggerContext(\n (ctx.data as Record<string, unknown> | undefined) ?? undefined,\n (ctx.filter as Record<string, unknown> | undefined) ?? undefined,\n );\n },\n \"Handles routine execution started\",\n { concurrency: 100, isSubMeta: true },\n )\n .doOn(\"meta.node.started_routine_execution\")\n .emits(\"global.meta.graph_metadata.routine_execution_started\");\n\n Cadenza.createMetaTask(\n \"Handle routine execution ended\",\n (ctx) => {\n return buildDatabaseTriggerContext(\n {\n ...ctx.data,\n serviceName: Cadenza.serviceRegistry.serviceName,\n serviceInstanceId: Cadenza.serviceRegistry.serviceInstanceId,\n },\n (ctx.filter as Record<string, unknown> | undefined) ?? undefined,\n );\n },\n \"Handles routine execution ended\",\n { concurrency: 100, isSubMeta: true },\n )\n .doOn(\"meta.node.ended_routine_execution\")\n .emits(\"global.meta.graph_metadata.routine_execution_ended\");\n\n Cadenza.createMetaTask(\n \"Handle task execution creation\",\n (ctx) => {\n return buildDatabaseTriggerContext({\n ...ctx.data,\n serviceName: Cadenza.serviceRegistry.serviceName,\n serviceInstanceId: Cadenza.serviceRegistry.serviceInstanceId,\n });\n },\n \"Handles task execution creation\",\n { concurrency: 100, isSubMeta: true },\n )\n .doOn(\"meta.node.scheduled\")\n .emits(\"global.meta.graph_metadata.task_execution_created\");\n\n Cadenza.createMetaTask(\n \"Handle task execution mapped\",\n (ctx) => {\n return buildDatabaseTriggerContext(\n (ctx.data as Record<string, unknown> | undefined) ?? undefined,\n (ctx.filter as Record<string, unknown> | undefined) ?? undefined,\n );\n },\n \"Handles task execution mapping\",\n { concurrency: 100, isSubMeta: true },\n )\n .doOn(\"meta.node.mapped\", \"meta.node.detected_previous_task_execution\")\n .emits(\"global.meta.graph_metadata.task_execution_mapped\");\n\n Cadenza.createMetaTask(\n \"Handle task execution started\",\n (ctx) => {\n return buildDatabaseTriggerContext(\n (ctx.data as Record<string, unknown> | undefined) ?? undefined,\n (ctx.filter as Record<string, unknown> | undefined) ?? undefined,\n );\n },\n \"Handles task execution started\",\n { concurrency: 100, isSubMeta: true },\n )\n .doOn(\"meta.node.started\")\n .emits(\"global.meta.graph_metadata.task_execution_started\");\n\n Cadenza.createMetaTask(\n \"Handle task execution ended\",\n (ctx) => {\n return buildDatabaseTriggerContext(\n {\n ...ctx.data,\n serviceName: Cadenza.serviceRegistry.serviceName,\n serviceInstanceId: Cadenza.serviceRegistry.serviceInstanceId,\n },\n (ctx.filter as Record<string, unknown> | undefined) ?? undefined,\n );\n },\n \"Handles task execution ended\",\n { concurrency: 100, isSubMeta: true },\n )\n .doOn(\"meta.node.ended\")\n .emits(\"global.meta.graph_metadata.task_execution_ended\");\n\n Cadenza.createMetaTask(\n \"Handle task execution relationship creation\",\n (ctx) => {\n return buildDatabaseTriggerContext(\n {\n executionCount: \"increment\",\n lastExecuted: formatTimestamp(Date.now()),\n },\n {\n ...ctx.filter,\n serviceName: Cadenza.serviceRegistry.serviceName,\n },\n );\n },\n \"Handles task execution relationship creation\",\n { concurrency: 100, isSubMeta: true },\n )\n .doOn(\"meta.node.mapped\", \"meta.node.detected_previous_task_execution\")\n .emits(\"global.meta.graph_metadata.relationship_executed\");\n\n Cadenza.createMetaTask(\"Handle actor creation\", (ctx) => {\n return buildDatabaseTriggerContext({\n ...ctx.data,\n service_name: Cadenza.serviceRegistry.serviceName,\n });\n })\n .doOn(\"meta.actor.created\")\n .emits(\"global.meta.graph_metadata.actor_created\");\n\n Cadenza.createMetaTask(\"Handle actor task association\", (ctx) => {\n return buildDatabaseTriggerContext({\n ...ctx.data,\n service_name: Cadenza.serviceRegistry.serviceName,\n });\n })\n .doOn(\"meta.actor.task_associated\")\n .emits(\"global.meta.graph_metadata.actor_task_associated\");\n\n registerActorSessionPersistenceTasks();\n\n Cadenza.createMetaTask(\"Handle Intent Creation\", (ctx) => {\n const intentName = ctx.data?.name;\n return buildDatabaseTriggerContext({\n ...ctx.data,\n isMeta: intentName ? isMetaIntentName(intentName) : false,\n });\n })\n .doOn(\"meta.inquiry_broker.added\")\n .emits(\"global.meta.graph_metadata.intent_created\");\n }\n}\n","export default class DatabaseController {\n private static _instance: DatabaseController;\n\n public static get instance(): DatabaseController {\n if (!this._instance) {\n this._instance = new DatabaseController();\n }\n\n return this._instance;\n }\n\n private unsupported(message: string): never {\n throw new Error(message);\n }\n\n createPostgresActor(): never {\n return this.unsupported(\n \"PostgresActor creation is not supported in the browser runtime.\",\n );\n }\n\n requestPostgresActorSetup(): never {\n return this.unsupported(\n \"PostgresActor setup is not supported in the browser runtime.\",\n );\n }\n}\n","import Cadenza from \"../../Cadenza\";\nimport {\n META_ACTOR_SESSION_STATE_PERSIST_INTENT,\n Task,\n} from \"@cadenza.io/core\";\nimport ServiceRegistry from \"../../registry/ServiceRegistry\";\nimport { decomposeSignalName, formatTimestamp } from \"../../utils/tools\";\nimport { DeputyTask } from \"../../index\";\nimport { isMetaIntentName } from \"../../utils/inquiry\";\n\ntype ActorTaskRuntimeMetadata = {\n actorName: string;\n actorDescription?: string;\n actorKind: \"standard\" | \"meta\";\n mode: \"read\" | \"write\" | \"meta\";\n forceMeta: boolean;\n};\n\nconst ACTOR_TASK_METADATA = Symbol.for(\"@cadenza.io/core/actor-task-meta\");\n\nfunction getActorTaskRuntimeMetadata(\n taskFunction: unknown,\n): ActorTaskRuntimeMetadata | undefined {\n if (typeof taskFunction !== \"function\") {\n return undefined;\n }\n\n return (taskFunction as { [ACTOR_TASK_METADATA]?: ActorTaskRuntimeMetadata })[\n ACTOR_TASK_METADATA\n ];\n}\n\nfunction sanitizeActorMetadataValue(value: unknown): unknown {\n if (value === null) {\n return null;\n }\n if (value === undefined || typeof value === \"function\") {\n return undefined;\n }\n if (Array.isArray(value)) {\n const items: unknown[] = [];\n for (const item of value) {\n const sanitizedItem = sanitizeActorMetadataValue(item);\n if (sanitizedItem !== undefined) {\n items.push(sanitizedItem);\n }\n }\n return items;\n }\n if (typeof value === \"object\") {\n const output: Record<string, unknown> = {};\n for (const [key, nestedValue] of Object.entries(value)) {\n const sanitizedNestedValue = sanitizeActorMetadataValue(nestedValue);\n if (sanitizedNestedValue !== undefined) {\n output[key] = sanitizedNestedValue;\n }\n }\n return output;\n }\n\n return value;\n}\n\nfunction buildActorRegistrationData(actor: any): Record<string, unknown> {\n const definition = sanitizeActorMetadataValue(\n typeof actor?.toDefinition === \"function\" ? actor.toDefinition() : {},\n ) as Record<string, unknown>;\n const stateDefinition =\n definition?.state && typeof definition.state === \"object\"\n ? definition.state\n : {};\n const actorKind =\n typeof definition?.kind === \"string\" ? definition.kind : actor?.kind;\n\n return {\n name: definition?.name ?? actor?.spec?.name ?? \"\",\n description: definition?.description ?? actor?.spec?.description ?? \"\",\n default_key:\n definition?.defaultKey ?? actor?.spec?.defaultKey ?? \"default\",\n load_policy: definition?.loadPolicy ?? actor?.spec?.loadPolicy ?? \"eager\",\n write_contract:\n definition?.writeContract ?? actor?.spec?.writeContract ?? \"overwrite\",\n runtime_read_guard:\n definition?.runtimeReadGuard ?? actor?.spec?.runtimeReadGuard ?? \"none\",\n consistency_profile:\n definition?.consistencyProfile ?? actor?.spec?.consistencyProfile ?? null,\n key_definition: definition?.key ?? null,\n state_definition: stateDefinition,\n retry_policy: definition?.retry ?? {},\n idempotency_policy: definition?.idempotency ?? {},\n session_policy: definition?.session ?? {},\n is_meta: actorKind === \"meta\",\n version: 1,\n };\n}\n\nfunction resolveSyncServiceName(\n task?:\n | {\n serviceName?: string;\n ownerServiceName?: string | null;\n isDeputy?: boolean;\n }\n | null,\n):\n | string\n | undefined {\n const ownerServiceName =\n typeof task?.ownerServiceName === \"string\"\n ? task.ownerServiceName.trim()\n : \"\";\n const taskServiceName =\n typeof task?.serviceName === \"string\" ? task.serviceName.trim() : \"\";\n const registryServiceName =\n typeof ServiceRegistry.instance.serviceName === \"string\"\n ? ServiceRegistry.instance.serviceName.trim()\n : \"\";\n\n if (task?.isDeputy) {\n return ownerServiceName || registryServiceName || taskServiceName || undefined;\n }\n\n return ownerServiceName || taskServiceName || registryServiceName || undefined;\n}\n\nfunction isLocalOnlySyncIntent(intentName: string): boolean {\n return intentName === META_ACTOR_SESSION_STATE_PERSIST_INTENT;\n}\n\nfunction buildIntentRegistryData(intent: any): Record<string, unknown> | null {\n const name = String(intent?.name ?? \"\").trim();\n if (!name) {\n return null;\n }\n\n return {\n name,\n description:\n typeof intent?.description === \"string\" ? intent.description : \"\",\n input:\n intent?.input && typeof intent.input === \"object\"\n ? intent.input\n : { type: \"object\" },\n output:\n intent?.output && typeof intent.output === \"object\"\n ? intent.output\n : { type: \"object\" },\n isMeta: isMetaIntentName(name),\n };\n}\n\nfunction getJoinedContextValue(\n ctx: Record<string, any>,\n key: \"data\" | \"batch\" | \"queryData\",\n): unknown {\n const joinedContexts = Array.isArray(ctx.joinedContexts) ? ctx.joinedContexts : [];\n for (let index = joinedContexts.length - 1; index >= 0; index -= 1) {\n const joinedContext = joinedContexts[index];\n if (\n joinedContext &&\n typeof joinedContext === \"object\" &&\n (Object.prototype.hasOwnProperty.call(joinedContext, key) ||\n joinedContext[key] !== undefined)\n ) {\n return joinedContext[key];\n }\n }\n\n return undefined;\n}\n\nfunction didSyncInsertSucceed(ctx: Record<string, any>): boolean {\n if (ctx.errored || ctx.__success === false) {\n return false;\n }\n\n const inquiryMeta =\n ctx.__inquiryMeta && typeof ctx.__inquiryMeta === \"object\"\n ? (ctx.__inquiryMeta as Record<string, unknown>)\n : null;\n\n if (!inquiryMeta) {\n return true;\n }\n\n const eligibleResponders = Number(inquiryMeta.eligibleResponders);\n if (Number.isFinite(eligibleResponders) && eligibleResponders === 0) {\n return false;\n }\n\n const responded = Number(inquiryMeta.responded);\n if (Number.isFinite(responded) && responded === 0) {\n return false;\n }\n\n return true;\n}\n\nfunction buildMinimalSyncSignalContext(\n ctx: Record<string, unknown>,\n extra: Record<string, unknown> = {},\n): Record<string, unknown> {\n const nextContext: Record<string, unknown> = {\n __syncing: ctx.__syncing === true,\n ...extra,\n };\n\n if (typeof ctx.__reason === \"string\" && ctx.__reason.trim().length > 0) {\n nextContext.__reason = ctx.__reason;\n }\n\n return nextContext;\n}\n\nfunction buildSyncInsertQueryData(\n ctx: Record<string, any>,\n queryData: Record<string, unknown> = {},\n): Record<string, unknown> {\n const pickQueryData = (\n source: Record<string, unknown>,\n allowedKeys: string[],\n ): Record<string, unknown> => {\n const next: Record<string, unknown> = {};\n\n for (const key of allowedKeys) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n next[key] = source[key];\n }\n }\n\n return next;\n };\n const joinedQueryData = getJoinedContextValue(ctx, \"queryData\");\n const existingQueryData =\n ctx.queryData && typeof ctx.queryData === \"object\"\n ? ctx.queryData\n : joinedQueryData && typeof joinedQueryData === \"object\"\n ? joinedQueryData\n : {};\n const nextQueryData: Record<string, unknown> = {\n ...pickQueryData(existingQueryData, [\"transaction\"]),\n ...queryData,\n };\n const resolvedData =\n Object.prototype.hasOwnProperty.call(ctx, \"data\") || ctx.data !== undefined\n ? ctx.data\n : getJoinedContextValue(ctx, \"data\");\n const resolvedBatch =\n Object.prototype.hasOwnProperty.call(ctx, \"batch\") || ctx.batch !== undefined\n ? ctx.batch\n : getJoinedContextValue(ctx, \"batch\");\n\n if (resolvedData !== undefined) {\n nextQueryData.data =\n resolvedData && typeof resolvedData === \"object\" && !Array.isArray(resolvedData)\n ? { ...resolvedData }\n : resolvedData;\n } else {\n delete nextQueryData.data;\n }\n\n if (resolvedBatch !== undefined) {\n nextQueryData.batch = Array.isArray(resolvedBatch)\n ? resolvedBatch.map((row: unknown) =>\n row && typeof row === \"object\"\n ? { ...(row as Record<string, unknown>) }\n : row,\n )\n : resolvedBatch;\n } else {\n delete nextQueryData.batch;\n }\n\n return nextQueryData;\n}\n\nfunction buildSyncQueryQueryData(\n ctx: Record<string, any>,\n queryData: Record<string, unknown> = {},\n): Record<string, unknown> {\n const joinedQueryData = getJoinedContextValue(ctx, \"queryData\");\n const existingQueryData =\n ctx.queryData && typeof ctx.queryData === \"object\"\n ? ctx.queryData\n : joinedQueryData && typeof joinedQueryData === \"object\"\n ? joinedQueryData\n : {};\n const nextQueryData: Record<string, unknown> = {};\n const allowedKeys = [\n \"transaction\",\n \"filter\",\n \"fields\",\n \"joins\",\n \"sort\",\n \"limit\",\n \"offset\",\n \"queryMode\",\n \"aggregates\",\n \"groupBy\",\n ];\n\n for (const key of allowedKeys) {\n if (Object.prototype.hasOwnProperty.call(existingQueryData, key)) {\n nextQueryData[key] = existingQueryData[key];\n }\n }\n\n return {\n ...nextQueryData,\n ...queryData,\n };\n}\n\ntype SyncTaskGraph = {\n entryTask: Task;\n completionTask: Task;\n};\n\nconst REMOTE_AUTHORITY_SYNC_INSERT_CONCURRENCY = 5;\nconst REMOTE_AUTHORITY_SYNC_QUERY_CONCURRENCY = 3;\n\nfunction wireSyncTaskGraph(\n predecessorTask: Task,\n graph: SyncTaskGraph | undefined,\n ...completionTasks: (Task | undefined)[]\n): Task | undefined {\n if (!graph) {\n return undefined;\n }\n\n predecessorTask.then(graph.entryTask);\n if (completionTasks.length > 0) {\n graph.completionTask.then(...completionTasks);\n }\n\n return graph.completionTask;\n}\n\nfunction buildSyncExecutionEnvelope(\n ctx: Record<string, any>,\n queryData: Record<string, unknown>,\n): Record<string, unknown> {\n const originalContext = { ...ctx };\n const nextContext: Record<string, unknown> = {\n __syncing:\n ctx.__syncing === true || ctx.__metadata?.__syncing === true || false,\n __preferredTransportProtocol: \"rest\",\n __resolverOriginalContext: originalContext,\n __resolverQueryData: queryData,\n queryData,\n };\n\n if (typeof ctx.__reason === \"string\" && ctx.__reason.trim().length > 0) {\n nextContext.__reason = ctx.__reason;\n }\n\n return nextContext;\n}\n\nfunction resolveSyncInsertTask(\n isCadenzaDBReady: boolean,\n tableName: string,\n queryData: Record<string, unknown> = {},\n options: Record<string, unknown> = {},\n): SyncTaskGraph | undefined {\n const localInsertTask = Cadenza.getLocalCadenzaDBInsertTask(tableName);\n\n if (!localInsertTask && !isCadenzaDBReady) {\n return undefined;\n }\n const targetTask =\n localInsertTask ??\n Cadenza.createCadenzaDBInsertTask(tableName, queryData, {\n ...options,\n concurrency:\n Number(options.concurrency) > 0\n ? Math.min(\n Number(options.concurrency),\n REMOTE_AUTHORITY_SYNC_INSERT_CONCURRENCY,\n )\n : REMOTE_AUTHORITY_SYNC_INSERT_CONCURRENCY,\n register: false,\n isHidden: true,\n });\n\n const prepareExecutionTask = Cadenza.createMetaTask(\n `Prepare graph sync insert for ${tableName}`,\n (ctx) => {\n const originalQueryData = buildSyncInsertQueryData(\n ctx as Record<string, any>,\n queryData,\n );\n\n if (\n (tableName === \"signal_registry\" ||\n tableName === \"directional_task_graph_map\") &&\n originalQueryData.data &&\n typeof originalQueryData.data === \"object\" &&\n !Array.isArray(originalQueryData.data) &&\n Object.keys(originalQueryData.data as Record<string, unknown>).length === 0\n ) {\n console.warn(\n \"[CADENZA_SYNC_EMPTY_INSERT]\",\n {\n tableName,\n queryData: originalQueryData,\n ctx,\n joinedContexts: Array.isArray((ctx as Record<string, any>).joinedContexts)\n ? (ctx as Record<string, any>).joinedContexts\n : [],\n },\n );\n }\n\n return buildSyncExecutionEnvelope(\n ctx as Record<string, any>,\n originalQueryData,\n );\n },\n `Prepares ${tableName} graph-sync insert payloads for runner execution.`,\n {\n register: false,\n isHidden: true,\n },\n );\n\n const finalizeExecutionTask = Cadenza.createMetaTask(\n `Finalize graph sync insert for ${tableName}`,\n (ctx) => {\n const originalContext =\n ctx.__resolverOriginalContext &&\n typeof ctx.__resolverOriginalContext === \"object\"\n ? (ctx.__resolverOriginalContext as Record<string, unknown>)\n : {};\n const originalQueryData =\n ctx.__resolverQueryData && typeof ctx.__resolverQueryData === \"object\"\n ? (ctx.__resolverQueryData as Record<string, unknown>)\n : undefined;\n const normalizedContext = {\n ...originalContext,\n ...ctx,\n queryData:\n ctx.queryData && typeof ctx.queryData === \"object\"\n ? ctx.queryData\n : originalQueryData,\n };\n\n return normalizedContext;\n },\n `Finalizes ${tableName} graph-sync insert execution after the authority task finishes.`,\n {\n register: false,\n isHidden: true,\n },\n );\n\n prepareExecutionTask.then(targetTask);\n targetTask.then(finalizeExecutionTask);\n\n return {\n entryTask: prepareExecutionTask,\n completionTask: finalizeExecutionTask,\n };\n}\n\nconst CADENZA_DB_REQUIRED_LOCAL_SYNC_INSERT_TABLES = [\n \"intent_registry\",\n \"routine\",\n \"task_to_routine_map\",\n \"signal_registry\",\n \"task\",\n \"actor\",\n \"actor_task_map\",\n \"signal_to_task_map\",\n \"intent_to_task_map\",\n \"directional_task_graph_map\",\n] as const;\n\nconst AUTHORITY_QUERY_RESULT_KEYS = {\n task: \"tasks\",\n routine: \"routines\",\n signal_registry: \"signalRegistrys\",\n intent_registry: \"intentRegistrys\",\n} as const;\n\nconst EARLY_SYNC_REQUEST_DELAYS_MS = [2000, 10000, 30000] as const;\n\ntype AuthorityQueryTableName = keyof typeof AUTHORITY_QUERY_RESULT_KEYS;\n\nfunction resolveSyncQueryRows<T extends Record<string, unknown>>(\n ctx: Record<string, any>,\n tableName: AuthorityQueryTableName,\n): T[] {\n const resultKey = AUTHORITY_QUERY_RESULT_KEYS[tableName];\n const rows = ctx?.[resultKey];\n return Array.isArray(rows) ? (rows as T[]) : [];\n}\n\nfunction resolveSyncQueryTask(\n isCadenzaDBReady: boolean,\n tableName: AuthorityQueryTableName,\n queryData: Record<string, unknown> = {},\n options: Record<string, unknown> = {},\n): SyncTaskGraph | undefined {\n const localQueryTask = Cadenza.getLocalCadenzaDBQueryTask(tableName);\n\n if (!localQueryTask && !isCadenzaDBReady) {\n return undefined;\n }\n const targetTask =\n localQueryTask ??\n Cadenza.createCadenzaDBQueryTask(tableName, queryData, {\n ...options,\n concurrency:\n Number(options.concurrency) > 0\n ? Math.min(\n Number(options.concurrency),\n REMOTE_AUTHORITY_SYNC_QUERY_CONCURRENCY,\n )\n : REMOTE_AUTHORITY_SYNC_QUERY_CONCURRENCY,\n register: false,\n isHidden: true,\n });\n\n const prepareQueryTask = Cadenza.createMetaTask(\n `Prepare graph sync query for ${tableName}`,\n (ctx) =>\n buildSyncExecutionEnvelope(\n ctx as Record<string, any>,\n buildSyncQueryQueryData(ctx as Record<string, any>, queryData),\n ),\n `Prepares ${tableName} graph-sync query payloads.`,\n {\n register: false,\n isHidden: true,\n },\n );\n const finalizeQueryTask = Cadenza.createMetaTask(\n `Finalize graph sync query for ${tableName}`,\n (ctx) => ctx,\n `Finalizes ${tableName} graph-sync query payloads after authority lookup.`,\n {\n register: false,\n isHidden: true,\n },\n );\n\n prepareQueryTask.then(targetTask);\n targetTask.then(finalizeQueryTask);\n\n return {\n entryTask: prepareQueryTask,\n completionTask: finalizeQueryTask,\n };\n}\n\nfunction getRegistrableTasks(): Task[] {\n return Array.from(Cadenza.registry.tasks.values()).filter(\n (task) => task.register && !task.isHidden,\n );\n}\n\nfunction getRegistrableRoutines() {\n return Array.from(Cadenza.registry.routines.values());\n}\n\nfunction isAuthoritySyncSignal(signalName: string): boolean {\n return decomposeSignalName(signalName).isGlobal;\n}\n\nfunction getRegistrableSignalObservers(): Array<{\n signalName: string;\n registered?: boolean;\n}> {\n const signalObservers = (Cadenza.signalBroker as any)\n .signalObservers as Map<string, { registered?: boolean }> | undefined;\n if (!signalObservers) {\n return [];\n }\n\n return Array.from(signalObservers.entries())\n .filter(([signalName]) => isAuthoritySyncSignal(signalName))\n .map(([signalName, observer]) => ({\n signalName,\n ...observer,\n }));\n}\n\nfunction getRegistrableIntentNames(): string[] {\n return Array.from(Cadenza.inquiryBroker.intents.values())\n .map((intent) => buildIntentRegistryData(intent))\n .filter(\n (intentDefinition): intentDefinition is Record<string, unknown> =>\n intentDefinition !== null,\n )\n .map((intentDefinition) => String(intentDefinition.name));\n}\n\nfunction buildActorRegistrationKey(\n actor: any,\n serviceName: string,\n): string | null {\n const data = buildActorRegistrationData(actor);\n const name =\n typeof data.name === \"string\" && data.name.trim().length > 0\n ? data.name.trim()\n : \"\";\n\n if (!name) {\n return null;\n }\n\n return `${name}|${data.version}|${serviceName}`;\n}\n\nfunction resolveLocalTaskFromSyncContext(ctx: Record<string, any>): Task | undefined {\n const taskName =\n typeof ctx.__taskName === \"string\" && ctx.__taskName.trim().length > 0\n ? ctx.__taskName\n : typeof ctx.data?.name === \"string\" && ctx.data.name.trim().length > 0\n ? ctx.data.name\n : undefined;\n\n return taskName ? Cadenza.get(taskName) : undefined;\n}\n\nfunction resolveLocalRoutineFromSyncContext(\n ctx: Record<string, any>,\n): ReturnType<typeof Cadenza.getRoutine> | undefined {\n const routineName =\n typeof ctx.__routineName === \"string\" && ctx.__routineName.trim().length > 0\n ? ctx.__routineName\n : typeof ctx.data?.name === \"string\" && ctx.data.name.trim().length > 0\n ? ctx.data.name\n : undefined;\n\n return routineName ? Cadenza.getRoutine(routineName) : undefined;\n}\n\nfunction resolveSignalNameFromSyncContext(ctx: Record<string, any>): string | undefined {\n const candidateSignalNames = [\n ctx.signalName,\n ctx.__signal,\n ctx.data?.name,\n ctx.queryData?.data?.name,\n getJoinedContextValue(ctx, \"data\") &&\n typeof getJoinedContextValue(ctx, \"data\") === \"object\"\n ? (getJoinedContextValue(ctx, \"data\") as Record<string, unknown>).name\n : undefined,\n ];\n\n for (const candidate of candidateSignalNames) {\n if (typeof candidate === \"string\" && candidate.trim().length > 0) {\n return candidate;\n }\n }\n\n return undefined;\n}\n\nexport default class GraphSyncController {\n private static _instance: GraphSyncController;\n public static get instance(): GraphSyncController {\n if (!this._instance) this._instance = new GraphSyncController();\n return this._instance;\n }\n\n splitSignalsTask: Task | undefined;\n splitTasksForRegistration: Task | undefined;\n splitIntentsTask: Task | undefined;\n registerSignalToTaskMapTask: Task | undefined;\n registerIntentToTaskMapTask: Task | undefined;\n registerTaskMapTask: Task | undefined;\n registerDeputyRelationshipTask: Task | undefined;\n splitRoutinesTask: Task | undefined;\n splitTasksInRoutines: Task | undefined;\n splitActorsForRegistration: Task | undefined;\n registerActorTaskMapTask: Task | undefined;\n\n registeredActors: Set<string> = new Set();\n registeredActorTaskMaps: Set<string> = new Set();\n registeredIntentDefinitions: Set<string> = new Set();\n tasksSynced: boolean = false;\n actorsSynced: boolean = false;\n signalsSynced: boolean = false;\n intentsSynced: boolean = false;\n routinesSynced: boolean = false;\n\n isCadenzaDBReady: boolean = false;\n initialized: boolean = false;\n initRetryScheduled: boolean = false;\n initRetryTask: Task | undefined;\n lastMissingLocalCadenzaDBInsertTablesKey: string = \"\";\n\n private getMissingLocalCadenzaDBInsertTables(): string[] {\n return CADENZA_DB_REQUIRED_LOCAL_SYNC_INSERT_TABLES.filter(\n (tableName) => !Cadenza.getLocalCadenzaDBInsertTask(tableName),\n );\n }\n\n private ensureRetryInitTask(): Task {\n if (this.initRetryTask) {\n return this.initRetryTask;\n }\n\n this.initRetryTask =\n Cadenza.get(\"Retry graph sync init\") ??\n Cadenza.createUniqueMetaTask(\n \"Retry graph sync init\",\n () => {\n this.initRetryScheduled = false;\n this.init();\n return true;\n },\n \"Retries graph sync controller initialization once local authority tasks exist.\",\n ).doOn(\"meta.sync_controller.init_retry\");\n\n return this.initRetryTask;\n }\n\n init() {\n if (this.initialized) {\n return;\n }\n\n const serviceName = resolveSyncServiceName();\n if (serviceName === \"CadenzaDB\") {\n const missingLocalInsertTables = this.getMissingLocalCadenzaDBInsertTables();\n if (missingLocalInsertTables.length > 0) {\n this.ensureRetryInitTask();\n const missingKey = missingLocalInsertTables.join(\",\");\n if (missingKey !== this.lastMissingLocalCadenzaDBInsertTablesKey) {\n this.lastMissingLocalCadenzaDBInsertTablesKey = missingKey;\n Cadenza.log(\n \"Waiting for local CadenzaDB sync insert tasks before initializing graph sync controller.\",\n {\n missingLocalInsertTables,\n },\n \"info\",\n );\n }\n\n if (!this.initRetryScheduled) {\n this.initRetryScheduled = true;\n Cadenza.schedule(\n \"meta.sync_controller.init_retry\",\n {\n __missingLocalInsertTables: missingLocalInsertTables,\n },\n 250,\n );\n }\n return;\n }\n\n this.lastMissingLocalCadenzaDBInsertTablesKey = \"\";\n }\n\n this.initialized = true;\n const insertIntentRegistryTask = resolveSyncInsertTask(\n this.isCadenzaDBReady,\n \"intent_registry\",\n {\n onConflict: {\n target: [\"name\"],\n action: {\n do: \"nothing\",\n },\n },\n },\n { concurrency: 30 },\n );\n const ensureIntentRegistryBeforeIntentMapTask = resolveSyncInsertTask(\n this.isCadenzaDBReady,\n \"intent_registry\",\n {\n onConflict: {\n target: [\"name\"],\n action: {\n do: \"nothing\",\n },\n },\n },\n { concurrency: 30 },\n );\n const authoritativeTaskQueryGraph = resolveSyncQueryTask(\n this.isCadenzaDBReady,\n \"task\",\n {},\n { concurrency: 10 },\n );\n const authoritativeRoutineQueryGraph = resolveSyncQueryTask(\n this.isCadenzaDBReady,\n \"routine\",\n {},\n { concurrency: 10 },\n );\n const authoritativeSignalQueryGraph = resolveSyncQueryTask(\n this.isCadenzaDBReady,\n \"signal_registry\",\n {},\n { concurrency: 10 },\n );\n const authoritativeIntentQueryGraph = resolveSyncQueryTask(\n this.isCadenzaDBReady,\n \"intent_registry\",\n {},\n { concurrency: 10 },\n );\n const finalizeTaskSync = (emit: any, ctx: Record<string, unknown>) => {\n const pendingTasks = getRegistrableTasks().filter((task) => !task.registered);\n if (pendingTasks.length > 0) {\n this.tasksSynced = false;\n return false;\n }\n\n const shouldEmit = !this.tasksSynced;\n this.tasksSynced = true;\n if (shouldEmit) {\n emit(\n \"meta.sync_controller.synced_tasks\",\n buildMinimalSyncSignalContext(ctx),\n );\n }\n\n return true;\n };\n const finalizeRoutineSync = (emit: any, ctx: Record<string, unknown>) => {\n const pendingRoutines = getRegistrableRoutines().filter(\n (routine) => !routine.registered,\n );\n if (pendingRoutines.length > 0) {\n this.routinesSynced = false;\n return false;\n }\n\n const shouldEmit = !this.routinesSynced;\n this.routinesSynced = true;\n if (shouldEmit) {\n emit(\n \"meta.sync_controller.synced_routines\",\n buildMinimalSyncSignalContext(ctx),\n );\n }\n\n return true;\n };\n const finalizeSignalSync = (emit: any, ctx: Record<string, unknown>) => {\n const pendingSignals = getRegistrableSignalObservers().filter(\n (observer) => observer.registered !== true,\n );\n if (pendingSignals.length > 0) {\n this.signalsSynced = false;\n return false;\n }\n\n const shouldEmit = !this.signalsSynced;\n this.signalsSynced = true;\n if (shouldEmit) {\n emit(\n \"meta.sync_controller.synced_signals\",\n buildMinimalSyncSignalContext(ctx),\n );\n }\n\n return true;\n };\n const finalizeIntentSync = (emit: any, ctx: Record<string, unknown>) => {\n const pendingIntentNames = getRegistrableIntentNames().filter(\n (intentName) => !this.registeredIntentDefinitions.has(intentName),\n );\n if (pendingIntentNames.length > 0) {\n this.intentsSynced = false;\n return false;\n }\n\n const shouldEmit = !this.intentsSynced;\n this.intentsSynced = true;\n if (shouldEmit) {\n emit(\n \"meta.sync_controller.synced_intents\",\n buildMinimalSyncSignalContext(ctx),\n );\n }\n\n return true;\n };\n const finalizeActorSync = (emit: any, ctx: Record<string, unknown>) => {\n const syncServiceName = resolveSyncServiceName();\n if (!syncServiceName) {\n this.actorsSynced = false;\n return false;\n }\n\n const pendingActorKeys = Cadenza.getAllActors()\n .map((actor) => buildActorRegistrationKey(actor, syncServiceName))\n .filter((registrationKey): registrationKey is string => Boolean(registrationKey))\n .filter((registrationKey) => !this.registeredActors.has(registrationKey));\n\n if (pendingActorKeys.length > 0) {\n this.actorsSynced = false;\n return false;\n }\n\n const shouldEmit = !this.actorsSynced;\n this.actorsSynced = true;\n if (shouldEmit) {\n emit(\n \"meta.sync_controller.synced_actors\",\n buildMinimalSyncSignalContext(ctx),\n );\n }\n\n return true;\n };\n const gatherTaskRegistrationTask = Cadenza.createUniqueMetaTask(\n \"Gather task registration\",\n (ctx, emit) => finalizeTaskSync(emit, ctx),\n \"Completes task registration when all registrable tasks are marked registered.\",\n {\n register: false,\n isHidden: true,\n },\n );\n const gatherRoutineRegistrationTask = Cadenza.createUniqueMetaTask(\n \"Gather routine registration\",\n (ctx, emit) => finalizeRoutineSync(emit, ctx),\n \"Completes routine registration when all registrable routines are marked registered.\",\n {\n register: false,\n isHidden: true,\n },\n );\n const gatherSignalRegistrationTask = Cadenza.createUniqueMetaTask(\n \"Gather signal registration\",\n (ctx, emit) => finalizeSignalSync(emit, ctx),\n \"Completes signal registration when all signal observers are marked registered.\",\n {\n register: false,\n isHidden: true,\n },\n );\n const gatherIntentRegistrationTask = Cadenza.createUniqueMetaTask(\n \"Gather intent registration\",\n (ctx, emit) => finalizeIntentSync(emit, ctx),\n \"Completes intent registration when all registrable intents are marked registered.\",\n {\n register: false,\n isHidden: true,\n },\n );\n const gatherActorRegistrationTask = Cadenza.createUniqueMetaTask(\n \"Gather actor registration\",\n (ctx, emit) => finalizeActorSync(emit, ctx),\n \"Completes actor registration when all registrable actors are marked registered.\",\n {\n register: false,\n isHidden: true,\n },\n );\n\n this.splitRoutinesTask = Cadenza.createMetaTask(\n \"Split routines for registration\",\n function* (this: GraphSyncController, ctx: any) {\n const { routines } = ctx;\n if (!routines) return;\n const serviceName = resolveSyncServiceName();\n if (!serviceName) {\n return;\n }\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 2000,\n });\n\n for (const routine of routines) {\n if (routine.registered) continue;\n this.routinesSynced = false;\n yield {\n __syncing: ctx.__syncing,\n data: {\n name: routine.name,\n version: routine.version,\n description: routine.description,\n serviceName,\n isMeta: routine.isMeta,\n },\n __routineName: routine.name,\n };\n }\n }.bind(this),\n );\n\n const routineRegistrationGraph = resolveSyncInsertTask(\n this.isCadenzaDBReady,\n \"routine\",\n {\n onConflict: {\n target: [\"name\", \"version\", \"service_name\"],\n action: {\n do: \"nothing\",\n },\n },\n },\n { concurrency: 30 },\n );\n const registerRoutineTask = Cadenza.createMetaTask(\"Register routine\", (ctx) => {\n if (!didSyncInsertSucceed(ctx)) {\n return;\n }\n\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 3000,\n });\n const routine = resolveLocalRoutineFromSyncContext(ctx);\n if (!routine) {\n return true;\n }\n routine.registered = true;\n\n return true;\n }).then(gatherRoutineRegistrationTask);\n wireSyncTaskGraph(this.splitRoutinesTask, routineRegistrationGraph, registerRoutineTask);\n\n this.splitTasksInRoutines = Cadenza.createMetaTask(\n \"Split tasks in routines\",\n function* (ctx: any) {\n const { routines } = ctx;\n if (!routines) return;\n const serviceName = resolveSyncServiceName();\n if (!serviceName) {\n return;\n }\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 3000,\n });\n\n for (const routine of routines) {\n if (!routine.registered) continue;\n\n for (const task of routine.tasks) {\n if (!task) {\n continue;\n }\n\n if (routine.registeredTasks.has(task.name)) continue;\n\n const tasks = task.getIterator();\n\n while (tasks.hasNext()) {\n const nextTask = tasks.next();\n if (!nextTask?.registered) {\n continue;\n }\n\n yield {\n __syncing: ctx.__syncing,\n data: {\n taskName: nextTask.name,\n taskVersion: nextTask.version,\n routineName: routine.name,\n routineVersion: routine.version,\n serviceName,\n },\n __routineName: routine.name,\n __taskName: nextTask.name,\n };\n }\n }\n }\n },\n );\n\n const registerTaskToRoutineMapGraph = resolveSyncInsertTask(\n this.isCadenzaDBReady,\n \"task_to_routine_map\",\n {\n onConflict: {\n target: [\n \"task_name\",\n \"routine_name\",\n \"task_version\",\n \"routine_version\",\n \"service_name\",\n ],\n action: {\n do: \"nothing\",\n },\n },\n },\n { concurrency: 30 },\n );\n const registerTaskToRoutineMapTask = Cadenza.createMetaTask(\n \"Register routine task\",\n (ctx) => {\n if (!didSyncInsertSucceed(ctx)) {\n return;\n }\n\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 2000,\n });\n const routine = resolveLocalRoutineFromSyncContext(ctx);\n if (!routine) {\n return true;\n }\n routine.registeredTasks.add(ctx.__taskName);\n },\n );\n wireSyncTaskGraph(\n this.splitTasksInRoutines,\n registerTaskToRoutineMapGraph,\n registerTaskToRoutineMapTask,\n );\n\n this.splitSignalsTask = Cadenza.createMetaTask(\n \"Split signals for registration\",\n function* (this: GraphSyncController, ctx: any) {\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 3000,\n });\n\n const { signals } = ctx;\n if (!signals) return;\n\n const filteredSignals = signals\n .filter((signal: { signal: string; data: any }) => {\n if (signal.data.registered) {\n return false;\n }\n\n return isAuthoritySyncSignal(signal.signal);\n })\n .map((signal: { signal: string; data: any }) => signal.signal);\n\n for (const signal of filteredSignals) {\n const { isMeta, isGlobal, domain, action } =\n decomposeSignalName(signal);\n this.signalsSynced = false;\n\n yield {\n __syncing: ctx.__syncing,\n data: {\n name: signal,\n isGlobal,\n domain,\n action,\n isMeta,\n },\n __signal: signal,\n };\n }\n }.bind(this),\n );\n\n const signalRegistrationGraph = resolveSyncInsertTask(\n this.isCadenzaDBReady,\n \"signal_registry\",\n {\n onConflict: {\n target: [\"name\"],\n action: {\n do: \"nothing\",\n },\n },\n },\n { concurrency: 30 },\n );\n const processSignalRegistrationTask = Cadenza.createMetaTask(\n \"Process signal registration\",\n (ctx) => {\n if (!didSyncInsertSucceed(ctx)) {\n return;\n }\n\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 3000,\n });\n\n const signalName = resolveSignalNameFromSyncContext(ctx);\n if (!signalName) {\n return false;\n }\n\n const signalObservers = (Cadenza.signalBroker as any).signalObservers;\n if (!signalObservers?.has(signalName)) {\n Cadenza.signalBroker.addSignal(signalName);\n }\n\n const observer = signalObservers?.get(signalName);\n if (observer) {\n observer.registered = true;\n }\n\n return { signalName };\n },\n )\n .then(Cadenza.signalBroker.registerSignalTask!)\n .then(gatherSignalRegistrationTask);\n wireSyncTaskGraph(\n this.splitSignalsTask,\n signalRegistrationGraph,\n processSignalRegistrationTask,\n );\n\n this.splitTasksForRegistration = Cadenza.createMetaTask(\n \"Split tasks for registration\",\n function* (this: GraphSyncController, ctx: any) {\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 3000,\n });\n\n const tasks = ctx.tasks;\n const serviceName = resolveSyncServiceName();\n if (!serviceName) {\n return;\n }\n\n for (const task of tasks) {\n if (task.registered) continue;\n const { __functionString, __getTagCallback } = task.export();\n this.tasksSynced = false;\n\n yield {\n __syncing: ctx.__syncing,\n data: {\n name: task.name,\n version: task.version,\n description: task.description,\n functionString: __functionString,\n tagIdGetter: __getTagCallback,\n layerIndex: task.layerIndex,\n concurrency: task.concurrency,\n timeout: task.timeout,\n isUnique: task.isUnique,\n isSignal: task.isSignal,\n isThrottled: task.isThrottled,\n isDebounce: task.isDebounce,\n isEphemeral: task.isEphemeral,\n isMeta: task.isMeta,\n isSubMeta: task.isSubMeta,\n isHidden: task.isHidden,\n validateInputContext: task.validateInputContext,\n validateOutputContext: task.validateOutputContext,\n retryCount: task.retryCount,\n retryDelay: task.retryDelay,\n retryDelayMax: task.retryDelayMax,\n retryDelayFactor: task.retryDelayFactor,\n service_name: serviceName,\n signals: {\n emits: Array.from(task.emitsSignals),\n signalsToEmitAfter: Array.from(task.signalsToEmitAfter),\n signalsToEmitOnFail: Array.from(task.signalsToEmitOnFail),\n observed: Array.from(task.observedSignals),\n },\n },\n __taskName: task.name,\n };\n }\n }.bind(this),\n );\n\n const registerTaskGraph = resolveSyncInsertTask(\n this.isCadenzaDBReady,\n \"task\",\n {\n onConflict: {\n target: [\"name\", \"service_name\", \"version\"],\n action: {\n do: \"nothing\",\n },\n },\n },\n { concurrency: 30 },\n );\n const registerTaskTask = Cadenza.createMetaTask(\n \"Record registration\",\n (ctx, emit) => {\n if (!didSyncInsertSucceed(ctx)) {\n return;\n }\n\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 3000,\n });\n\n const task = resolveLocalTaskFromSyncContext(ctx);\n if (!task) {\n return true;\n }\n\n task.registered = true;\n emit(\n \"meta.sync_controller.task_registered\",\n buildMinimalSyncSignalContext(ctx, {\n __taskName: ctx.__taskName,\n }),\n );\n\n return true;\n },\n ).then(gatherTaskRegistrationTask);\n wireSyncTaskGraph(this.splitTasksForRegistration, registerTaskGraph, registerTaskTask);\n\n Cadenza.createMetaTask(\n \"Prepare created task for immediate sync\",\n (ctx) => {\n const task =\n ctx.taskInstance ??\n (ctx.data?.name ? Cadenza.get(String(ctx.data.name)) : undefined);\n\n if (!task || task.hidden || !task.register || task.registered) {\n return false;\n }\n\n return {\n __syncing: true,\n tasks: [task],\n };\n },\n \"Schedules newly created tasks into the graph sync registration flow without waiting for the next periodic tick.\",\n {\n register: false,\n isHidden: true,\n },\n )\n .doOn(\"meta.task.created\")\n .then(this.splitTasksForRegistration);\n\n this.splitActorsForRegistration = Cadenza.createMetaTask(\n \"Split actors for registration\",\n function* (this: GraphSyncController, ctx: any) {\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 3000,\n });\n\n const serviceName = resolveSyncServiceName();\n if (!serviceName) {\n return;\n }\n\n const actors = ctx.actors ?? [];\n for (const actor of actors) {\n const data: Record<string, any> = {\n ...buildActorRegistrationData(actor),\n service_name: serviceName,\n };\n if (!data.name) {\n continue;\n }\n\n const registrationKey = `${data.name}|${data.version}|${data.service_name}`;\n if (this.registeredActors.has(registrationKey)) {\n continue;\n }\n this.actorsSynced = false;\n\n yield {\n data,\n __actorRegistrationKey: registrationKey,\n };\n }\n }.bind(this),\n );\n const actorRegistrationGraph = resolveSyncInsertTask(\n this.isCadenzaDBReady,\n \"actor\",\n {\n onConflict: {\n target: [\"name\", \"service_name\", \"version\"],\n action: {\n do: \"nothing\",\n },\n },\n },\n { concurrency: 30 },\n );\n const recordActorRegistrationTask = Cadenza.createMetaTask(\n \"Record actor registration\",\n (ctx) => {\n if (!didSyncInsertSucceed(ctx)) {\n return;\n }\n\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 3000,\n });\n this.registeredActors.add(ctx.__actorRegistrationKey);\n return true;\n },\n ).then(gatherActorRegistrationTask);\n wireSyncTaskGraph(\n this.splitActorsForRegistration,\n actorRegistrationGraph,\n recordActorRegistrationTask,\n );\n\n this.registerActorTaskMapTask = Cadenza.createMetaTask(\n \"Split actor task maps\",\n function* (this: GraphSyncController, ctx: any) {\n const task = ctx.task;\n if (!this.tasksSynced || !this.actorsSynced) {\n return;\n }\n\n if (task.hidden || !task.register || !task.registered) {\n return;\n }\n\n const metadata = getActorTaskRuntimeMetadata(task.taskFunction);\n if (!metadata?.actorName) {\n return;\n }\n\n const serviceName = resolveSyncServiceName(task);\n if (!serviceName) {\n return;\n }\n\n const registrationKey = `${metadata.actorName}|${task.name}|${task.version}|${serviceName}`;\n if (this.registeredActorTaskMaps.has(registrationKey)) {\n return;\n }\n\n yield {\n data: {\n actor_name: metadata.actorName,\n actor_version: 1,\n task_name: task.name,\n task_version: task.version,\n service_name: serviceName,\n mode: metadata.mode,\n description: task.description ?? metadata.actorDescription ?? \"\",\n is_meta: metadata.actorKind === \"meta\" || task.isMeta === true,\n },\n __actorTaskMapRegistrationKey: registrationKey,\n };\n }.bind(this),\n );\n const actorTaskMapRegistrationGraph = resolveSyncInsertTask(\n this.isCadenzaDBReady,\n \"actor_task_map\",\n {\n onConflict: {\n target: [\n \"actor_name\",\n \"actor_version\",\n \"task_name\",\n \"task_version\",\n \"service_name\",\n ],\n action: {\n do: \"nothing\",\n },\n },\n },\n { concurrency: 30 },\n );\n const recordActorTaskMapRegistrationTask = Cadenza.createMetaTask(\n \"Record actor task map registration\",\n (ctx) => {\n if (!didSyncInsertSucceed(ctx)) {\n return;\n }\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 3000,\n });\n this.registeredActorTaskMaps.add(ctx.__actorTaskMapRegistrationKey);\n },\n );\n wireSyncTaskGraph(\n this.registerActorTaskMapTask,\n actorTaskMapRegistrationGraph,\n recordActorTaskMapRegistrationTask,\n );\n\n const registerSignalTask = Cadenza.createMetaTask(\n \"Record signal registration\",\n (ctx) => {\n if (!didSyncInsertSucceed(ctx)) {\n return;\n }\n\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 3000,\n });\n\n const task = resolveLocalTaskFromSyncContext(ctx);\n const signalName = resolveSignalNameFromSyncContext(ctx);\n if (!task || !signalName) {\n return true;\n }\n\n task.registeredSignals.add(signalName);\n },\n );\n\n this.registerSignalToTaskMapTask = Cadenza.createMetaTask(\n \"Split observed signals of task\",\n function* (ctx) {\n const task = ctx.task;\n if (task.hidden || !task.register || !task.registered) return false;\n\n const serviceName = resolveSyncServiceName(task);\n if (!serviceName) {\n return false;\n }\n\n let emittedCount = 0;\n for (const signal of task.observedSignals) {\n const _signal = signal.split(\":\")[0];\n if (task.registeredSignals.has(signal)) continue;\n if (\n !(Cadenza.signalBroker as any).signalObservers?.get(_signal)\n ?.registered\n ) {\n continue;\n }\n\n const { isGlobal } = decomposeSignalName(_signal);\n if (!isGlobal) {\n continue;\n }\n\n yield {\n __syncing: ctx.__syncing,\n data: {\n signalName: _signal,\n isGlobal,\n taskName: task.name,\n taskVersion: task.version,\n serviceName,\n },\n __taskName: task.name,\n __signal: signal,\n };\n emittedCount += 1;\n }\n return emittedCount > 0;\n },\n );\n const signalToTaskMapGraph = resolveSyncInsertTask(\n this.isCadenzaDBReady,\n \"signal_to_task_map\",\n {\n onConflict: {\n target: [\n \"task_name\",\n \"task_version\",\n \"service_name\",\n \"signal_name\",\n ],\n action: {\n do: \"nothing\",\n },\n },\n },\n { concurrency: 30 },\n );\n wireSyncTaskGraph(\n this.registerSignalToTaskMapTask,\n signalToTaskMapGraph,\n registerSignalTask,\n );\n\n this.splitIntentsTask = Cadenza.createMetaTask(\n \"Split intents for registration\",\n function* (this: GraphSyncController, ctx: any) {\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 3000,\n });\n\n const intents = Array.isArray(ctx.intents)\n ? ctx.intents\n : Array.from(Cadenza.inquiryBroker.intents.values());\n\n for (const intent of intents) {\n const intentData = buildIntentRegistryData(intent);\n if (!intentData) {\n continue;\n }\n\n if (this.registeredIntentDefinitions.has(intentData.name as string)) {\n continue;\n }\n\n this.intentsSynced = false;\n yield {\n __syncing: ctx.__syncing,\n data: intentData,\n __intentName: intentData.name,\n };\n }\n }.bind(this),\n );\n\n const recordIntentDefinitionRegistrationTask = Cadenza.createMetaTask(\n \"Record intent definition registration\",\n (ctx) => {\n if (!didSyncInsertSucceed(ctx)) {\n return;\n }\n\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 3000,\n });\n\n this.registeredIntentDefinitions.add(ctx.__intentName);\n\n return true;\n },\n ).then(gatherIntentRegistrationTask);\n wireSyncTaskGraph(\n this.splitIntentsTask,\n insertIntentRegistryTask,\n recordIntentDefinitionRegistrationTask,\n );\n\n const registerIntentTask = Cadenza.createMetaTask(\n \"Record intent registration\",\n (ctx) => {\n if (!didSyncInsertSucceed(ctx)) {\n return;\n }\n\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 3000,\n });\n\n const task = resolveLocalTaskFromSyncContext(ctx) as any;\n if (!task) {\n return true;\n }\n task.__registeredIntents = task.__registeredIntents ?? new Set<string>();\n task.__registeredIntents.add(ctx.__intent);\n },\n );\n\n this.registerIntentToTaskMapTask = Cadenza.createMetaTask(\n \"Split intents of task\",\n function* (this: GraphSyncController, ctx: any) {\n const task = ctx.task as any;\n if (task.hidden || !task.register || !task.registered) return false;\n\n const serviceName = resolveSyncServiceName(task);\n if (!serviceName) {\n return false;\n }\n\n task.__registeredIntents = task.__registeredIntents ?? new Set<string>();\n task.__invalidMetaIntentWarnings =\n task.__invalidMetaIntentWarnings ?? new Set<string>();\n let emittedCount = 0;\n for (const intent of task.handlesIntents as Set<string>) {\n if (task.__registeredIntents.has(intent)) continue;\n\n if (isLocalOnlySyncIntent(intent)) {\n continue;\n }\n\n if (isMetaIntentName(intent) && !task.isMeta) {\n if (!task.__invalidMetaIntentWarnings.has(intent)) {\n task.__invalidMetaIntentWarnings.add(intent);\n Cadenza.log(\n \"Skipping intent-to-task registration: non-meta task cannot handle meta intent.\",\n {\n intent,\n taskName: task.name,\n taskVersion: task.version,\n },\n \"warning\",\n );\n }\n continue;\n }\n\n const intentDefinition =\n buildIntentRegistryData(Cadenza.inquiryBroker.intents.get(intent)) ??\n buildIntentRegistryData({ name: intent });\n if (!intentDefinition) {\n continue;\n }\n\n yield {\n __syncing: ctx.__syncing,\n data: {\n intentName: intent,\n taskName: task.name,\n taskVersion: task.version,\n serviceName,\n },\n __taskName: task.name,\n __intent: intent,\n __intentDefinition: intentDefinition,\n __intentMapData: {\n intentName: intent,\n taskName: task.name,\n taskVersion: task.version,\n serviceName,\n },\n };\n emittedCount += 1;\n }\n\n return emittedCount > 0;\n }.bind(this),\n );\n const prepareIntentDefinitionForIntentMapTask = Cadenza.createMetaTask(\n \"Prepare intent definition for intent-to-task map\",\n (ctx) => {\n if (!ctx.__intentDefinition || !ctx.__intentMapData) {\n return false;\n }\n\n return {\n ...ctx,\n data: ctx.__intentDefinition,\n };\n },\n );\n const restoreIntentToTaskMapPayloadTask = Cadenza.createMetaTask(\n \"Restore intent-to-task map payload\",\n (ctx) => {\n if (!ctx.__intentMapData) {\n return false;\n }\n\n return {\n ...ctx,\n data: ctx.__intentMapData,\n };\n },\n );\n const intentToTaskMapGraph = resolveSyncInsertTask(\n this.isCadenzaDBReady,\n \"intent_to_task_map\",\n {\n onConflict: {\n target: [\n \"intent_name\",\n \"task_name\",\n \"task_version\",\n \"service_name\",\n ],\n action: {\n do: \"nothing\",\n },\n },\n },\n { concurrency: 30 },\n );\n this.registerIntentToTaskMapTask.then(prepareIntentDefinitionForIntentMapTask);\n if (ensureIntentRegistryBeforeIntentMapTask) {\n wireSyncTaskGraph(\n prepareIntentDefinitionForIntentMapTask,\n ensureIntentRegistryBeforeIntentMapTask,\n restoreIntentToTaskMapPayloadTask,\n );\n } else {\n prepareIntentDefinitionForIntentMapTask.then(\n restoreIntentToTaskMapPayloadTask,\n );\n }\n wireSyncTaskGraph(\n restoreIntentToTaskMapPayloadTask,\n intentToTaskMapGraph,\n registerIntentTask,\n );\n\n this.registerTaskMapTask = Cadenza.createMetaTask(\n \"Register task map to DB\",\n function* (ctx) {\n const task = ctx.task;\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 3000,\n });\n if (task.hidden || !task.register) return;\n\n const predecessorServiceName = resolveSyncServiceName(task);\n if (!predecessorServiceName) {\n return;\n }\n\n for (const t of task.nextTasks) {\n if (\n task.taskMapRegistration.has(t.name) ||\n t.hidden ||\n !t.register ||\n !t.registered\n ) {\n continue;\n }\n\n const serviceName = resolveSyncServiceName(t as any);\n if (!serviceName) {\n continue;\n }\n\n yield {\n data: {\n taskName: t.name,\n taskVersion: t.version,\n predecessorTaskName: task.name,\n predecessorTaskVersion: task.version,\n serviceName,\n predecessorServiceName,\n },\n __taskName: task.name,\n __nextTaskName: t.name,\n };\n }\n },\n );\n const taskMapRegistrationGraph = resolveSyncInsertTask(\n this.isCadenzaDBReady,\n \"directional_task_graph_map\",\n {\n onConflict: {\n target: [\n \"task_name\",\n \"predecessor_task_name\",\n \"task_version\",\n \"predecessor_task_version\",\n \"service_name\",\n \"predecessor_service_name\",\n ],\n action: {\n do: \"nothing\",\n },\n },\n },\n { concurrency: 30 },\n );\n const recordTaskMapRegistrationTask = Cadenza.createMetaTask(\n \"Record task map registration\",\n (ctx) => {\n if (!didSyncInsertSucceed(ctx)) {\n return;\n }\n\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 3000,\n });\n\n Cadenza.get(ctx.__taskName)?.taskMapRegistration.add(\n ctx.__nextTaskName,\n );\n },\n );\n wireSyncTaskGraph(\n this.registerTaskMapTask,\n taskMapRegistrationGraph,\n recordTaskMapRegistrationTask,\n );\n\n this.registerDeputyRelationshipTask = Cadenza.createMetaTask(\n \"Register deputy relationship\",\n (ctx) => {\n const task = ctx.task;\n if (task.hidden || !task.register) return;\n\n if (task.isDeputy && !task.signalName) {\n if (task.registeredDeputyMap) return;\n\n const serviceName = resolveSyncServiceName(task);\n const predecessorServiceName = resolveSyncServiceName();\n if (!serviceName || !predecessorServiceName) {\n return;\n }\n\n return {\n data: {\n task_name: task.remoteRoutineName,\n task_version: 1,\n service_name: serviceName,\n predecessor_task_name: task.name,\n predecessor_task_version: task.version,\n predecessor_service_name: predecessorServiceName,\n },\n __taskName: task.name,\n };\n }\n },\n );\n const deputyRelationshipRegistrationGraph = resolveSyncInsertTask(\n this.isCadenzaDBReady,\n \"directional_task_graph_map\",\n {\n onConflict: {\n target: [\n \"task_name\",\n \"predecessor_task_name\",\n \"task_version\",\n \"predecessor_task_version\",\n \"service_name\",\n \"predecessor_service_name\",\n ],\n action: {\n do: \"nothing\",\n },\n },\n },\n { concurrency: 30 },\n );\n const recordDeputyRelationshipRegistrationTask = Cadenza.createMetaTask(\n \"Record deputy relationship registration\",\n (ctx) => {\n if (!didSyncInsertSucceed(ctx)) {\n return;\n }\n\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 3000,\n });\n\n const task = resolveLocalTaskFromSyncContext(ctx) as DeputyTask | undefined;\n if (!task) {\n return true;\n }\n task.registeredDeputyMap = true;\n },\n );\n wireSyncTaskGraph(\n this.registerDeputyRelationshipTask,\n deputyRelationshipRegistrationGraph,\n recordDeputyRelationshipRegistrationTask,\n );\n\n const reconcileTaskRegistrationFromAuthorityTask = Cadenza.createMetaTask(\n \"Reconcile task registration from authority\",\n (ctx, emit) => {\n const authoritativeTasks = resolveSyncQueryRows<{\n name?: string;\n version?: number;\n serviceName?: string;\n }>(ctx, \"task\");\n let changed = false;\n\n for (const row of authoritativeTasks) {\n const taskName = typeof row.name === \"string\" ? row.name : \"\";\n if (!taskName) {\n continue;\n }\n\n const task = Cadenza.get(taskName);\n if (!task || task.registered) {\n continue;\n }\n\n task.registered = true;\n changed = true;\n emit(\"meta.sync_controller.task_registered\", {\n ...ctx,\n __taskName: task.name,\n task,\n __authoritativeReconciliation: true,\n });\n }\n\n if (authoritativeTasks.length > 0 || changed) {\n finalizeTaskSync(emit, {\n ...ctx,\n __authoritativeReconciliation: true,\n });\n }\n\n return changed;\n },\n \"Marks local tasks as registered when authority rows already exist.\",\n {\n register: false,\n isHidden: true,\n },\n );\n\n const reconcileRoutineRegistrationFromAuthorityTask = Cadenza.createMetaTask(\n \"Reconcile routine registration from authority\",\n (ctx, emit) => {\n const authoritativeRoutines = resolveSyncQueryRows<{\n name?: string;\n version?: number;\n serviceName?: string;\n }>(ctx, \"routine\");\n let changed = false;\n\n for (const row of authoritativeRoutines) {\n const routineName = typeof row.name === \"string\" ? row.name : \"\";\n if (!routineName) {\n continue;\n }\n\n const routine = Cadenza.getRoutine(routineName);\n if (!routine || routine.registered) {\n continue;\n }\n\n routine.registered = true;\n changed = true;\n }\n\n if (authoritativeRoutines.length > 0 || changed) {\n finalizeRoutineSync(emit, {\n ...ctx,\n __authoritativeReconciliation: true,\n });\n }\n\n return changed;\n },\n \"Marks local routines as registered when authority rows already exist.\",\n {\n register: false,\n isHidden: true,\n },\n );\n\n const reconcileSignalRegistrationFromAuthorityTask = Cadenza.createMetaTask(\n \"Reconcile signal registration from authority\",\n (ctx, emit) => {\n const authoritativeSignals = resolveSyncQueryRows<{\n name?: string;\n }>(ctx, \"signal_registry\");\n const signalObservers = (Cadenza.signalBroker as any).signalObservers;\n let changed = false;\n\n for (const row of authoritativeSignals) {\n const signalName = typeof row.name === \"string\" ? row.name : \"\";\n if (!signalName) {\n continue;\n }\n\n const observer = signalObservers?.get(signalName);\n if (!observer || observer.registered) {\n continue;\n }\n\n observer.registered = true;\n changed = true;\n }\n\n if (authoritativeSignals.length > 0 || changed) {\n finalizeSignalSync(emit, {\n ...ctx,\n __authoritativeReconciliation: true,\n });\n }\n\n return changed;\n },\n \"Marks local signals as registered when authority rows already exist.\",\n {\n register: false,\n isHidden: true,\n },\n );\n\n const reconcileIntentRegistrationFromAuthorityTask = Cadenza.createMetaTask(\n \"Reconcile intent registration from authority\",\n (ctx, emit) => {\n const authoritativeIntents = resolveSyncQueryRows<{\n name?: string;\n }>(ctx, \"intent_registry\");\n let changed = false;\n\n for (const row of authoritativeIntents) {\n const intentName = typeof row.name === \"string\" ? row.name : \"\";\n if (!intentName || !Cadenza.inquiryBroker.intents.has(intentName)) {\n continue;\n }\n\n if (this.registeredIntentDefinitions.has(intentName)) {\n continue;\n }\n\n this.registeredIntentDefinitions.add(intentName);\n changed = true;\n }\n\n if (authoritativeIntents.length > 0 || changed) {\n finalizeIntentSync(emit, {\n ...ctx,\n __authoritativeReconciliation: true,\n });\n }\n\n return changed;\n },\n \"Marks local intents as registered when authority rows already exist.\",\n {\n register: false,\n isHidden: true,\n },\n );\n\n const skipAuthoritativeTaskReconciliationTask = Cadenza.createMetaTask(\n \"Skip authoritative task reconciliation\",\n () => false,\n \"Skips task reconciliation when no authority query task is available.\",\n {\n register: false,\n isHidden: true,\n },\n );\n const skipAuthoritativeRoutineReconciliationTask = Cadenza.createMetaTask(\n \"Skip authoritative routine reconciliation\",\n () => false,\n \"Skips routine reconciliation when no authority query task is available.\",\n {\n register: false,\n isHidden: true,\n },\n );\n const skipAuthoritativeSignalReconciliationTask = Cadenza.createMetaTask(\n \"Skip authoritative signal reconciliation\",\n () => false,\n \"Skips signal reconciliation when no authority query task is available.\",\n {\n register: false,\n isHidden: true,\n },\n );\n const skipAuthoritativeIntentReconciliationTask = Cadenza.createMetaTask(\n \"Skip authoritative intent reconciliation\",\n () => false,\n \"Skips intent reconciliation when no authority query task is available.\",\n {\n register: false,\n isHidden: true,\n },\n );\n\n if (authoritativeTaskQueryGraph) {\n authoritativeTaskQueryGraph.completionTask.then(\n reconcileTaskRegistrationFromAuthorityTask,\n );\n }\n if (authoritativeRoutineQueryGraph) {\n authoritativeRoutineQueryGraph.completionTask.then(\n reconcileRoutineRegistrationFromAuthorityTask,\n );\n }\n if (authoritativeSignalQueryGraph) {\n authoritativeSignalQueryGraph.completionTask.then(\n reconcileSignalRegistrationFromAuthorityTask,\n );\n }\n if (authoritativeIntentQueryGraph) {\n authoritativeIntentQueryGraph.completionTask.then(\n reconcileIntentRegistrationFromAuthorityTask,\n );\n }\n const authoritativeRegistrationTriggers = [\n \"meta.service_registry.initial_sync_complete\",\n \"meta.sync_requested\",\n \"meta.sync_controller.synced_resource\",\n \"meta.sync_controller.authority_registration_reconciliation_requested\",\n ] as const;\n\n Cadenza.createMetaTask(\n \"Prepare authoritative task registration query\",\n (ctx) => {\n if (!this.isCadenzaDBReady) {\n return false;\n }\n\n const serviceName = resolveSyncServiceName();\n if (!serviceName) {\n return false;\n }\n\n return {\n ...ctx,\n __syncServiceName: serviceName,\n queryData: {\n filter: {\n service_name: serviceName,\n },\n fields: [\"name\", \"version\", \"service_name\"],\n },\n };\n },\n \"Builds the authority task query payload for the current service.\",\n {\n register: false,\n isHidden: true,\n },\n )\n .doOn(...authoritativeRegistrationTriggers)\n .then(\n authoritativeTaskQueryGraph?.entryTask ??\n skipAuthoritativeTaskReconciliationTask,\n );\n\n Cadenza.createMetaTask(\n \"Prepare authoritative routine registration query\",\n (ctx) => {\n if (!this.isCadenzaDBReady) {\n return false;\n }\n\n const serviceName = resolveSyncServiceName();\n if (!serviceName) {\n return false;\n }\n\n return {\n ...ctx,\n __syncServiceName: serviceName,\n queryData: {\n filter: {\n service_name: serviceName,\n },\n fields: [\"name\", \"version\", \"service_name\"],\n },\n };\n },\n \"Builds the authority routine query payload for the current service.\",\n {\n register: false,\n isHidden: true,\n },\n )\n .doOn(...authoritativeRegistrationTriggers)\n .then(\n authoritativeRoutineQueryGraph?.entryTask ??\n skipAuthoritativeRoutineReconciliationTask,\n );\n\n Cadenza.createMetaTask(\n \"Prepare authoritative signal registration query\",\n (ctx) => {\n if (!this.isCadenzaDBReady) {\n return false;\n }\n\n return {\n ...ctx,\n queryData: {\n fields: [\"name\"],\n },\n };\n },\n \"Builds the authority signal query payload for local reconciliation.\",\n {\n register: false,\n isHidden: true,\n },\n )\n .doOn(...authoritativeRegistrationTriggers)\n .then(\n authoritativeSignalQueryGraph?.entryTask ??\n skipAuthoritativeSignalReconciliationTask,\n );\n\n Cadenza.createMetaTask(\n \"Prepare authoritative intent registration query\",\n (ctx) => {\n if (!this.isCadenzaDBReady) {\n return false;\n }\n\n return {\n ...ctx,\n queryData: {\n fields: [\"name\"],\n },\n };\n },\n \"Builds the authority intent query payload for local reconciliation.\",\n {\n register: false,\n isHidden: true,\n },\n )\n .doOn(...authoritativeRegistrationTriggers)\n .then(\n authoritativeIntentQueryGraph?.entryTask ??\n skipAuthoritativeIntentReconciliationTask,\n );\n\n Cadenza.signalBroker\n .getSignalsTask!.clone()\n .doOn(\n \"meta.sync_controller.sync_tick\",\n \"meta.service_registry.initial_sync_complete\",\n \"meta.sync_requested\",\n )\n .then(this.splitSignalsTask);\n\n Cadenza.registry\n .getAllTasks!.clone()\n .doOn(\n \"meta.sync_controller.sync_tick\",\n \"meta.sync_controller.synced_signals\",\n \"meta.sync_requested\",\n )\n .then(this.splitTasksForRegistration);\n\n Cadenza.createMetaTask(\"Get all intents\", (ctx) => {\n return {\n ...ctx,\n intents: Array.from(Cadenza.inquiryBroker.intents.values()),\n };\n })\n .doOn(\n \"meta.sync_controller.sync_tick\",\n \"meta.service_registry.initial_sync_complete\",\n \"meta.sync_requested\",\n )\n .then(this.splitIntentsTask);\n\n Cadenza.registry\n .getAllRoutines!.clone()\n .doOn(\n \"meta.sync_controller.sync_tick\",\n \"meta.service_registry.initial_sync_complete\",\n \"meta.sync_requested\",\n )\n .then(this.splitRoutinesTask);\n\n Cadenza.createMetaTask(\"Get all actors\", (ctx) => {\n return {\n ...ctx,\n actors: Cadenza.getAllActors(),\n };\n })\n .doOn(\n \"meta.sync_controller.sync_tick\",\n \"meta.service_registry.initial_sync_complete\",\n \"meta.sync_requested\",\n )\n .then(this.splitActorsForRegistration);\n\n Cadenza.createMetaTask(\"Get registered task for task graph sync\", (ctx) => {\n const task = ctx.task ?? (ctx.__taskName ? Cadenza.get(ctx.__taskName) : undefined);\n if (!task) {\n return false;\n }\n\n return {\n ...ctx,\n task,\n };\n })\n .doOn(\"meta.sync_controller.task_registered\")\n .then(\n this.registerTaskMapTask,\n this.registerDeputyRelationshipTask,\n );\n\n Cadenza.registry\n .doForEachTask!.clone()\n .doOn(\n \"meta.sync_controller.synced_signals\",\n \"meta.sync_controller.synced_tasks\",\n \"meta.sync_requested\",\n )\n .then(this.registerSignalToTaskMapTask);\n\n Cadenza.createMetaTask(\"Get registered task for signal sync\", (ctx) => {\n const task = ctx.task ?? (ctx.__taskName ? Cadenza.get(ctx.__taskName) : undefined);\n if (!task) {\n return false;\n }\n\n return {\n ...ctx,\n task,\n };\n })\n .doOn(\"meta.sync_controller.task_registered\")\n .then(this.registerSignalToTaskMapTask);\n\n Cadenza.registry\n .doForEachTask!.clone()\n .doOn(\n \"meta.sync_controller.synced_intents\",\n \"meta.sync_controller.synced_tasks\",\n \"meta.sync_requested\",\n )\n .then(this.registerIntentToTaskMapTask);\n\n Cadenza.createMetaTask(\"Get registered task for intent sync\", (ctx) => {\n const task = ctx.task ?? (ctx.__taskName ? Cadenza.get(ctx.__taskName) : undefined);\n if (!task) {\n return false;\n }\n\n return {\n ...ctx,\n task,\n };\n })\n .doOn(\"meta.sync_controller.task_registered\")\n .then(this.registerIntentToTaskMapTask);\n\n Cadenza.registry\n .doForEachTask!.clone()\n .doOn(\n \"meta.sync_controller.synced_actors\",\n \"meta.sync_controller.synced_tasks\",\n \"meta.sync_requested\",\n )\n .then(this.registerActorTaskMapTask);\n\n Cadenza.createMetaTask(\"Get registered task for actor sync\", (ctx) => {\n const task = ctx.task ?? (ctx.__taskName ? Cadenza.get(ctx.__taskName) : undefined);\n if (!task) {\n return false;\n }\n\n return {\n ...ctx,\n task,\n };\n })\n .doOn(\"meta.sync_controller.task_registered\")\n .then(\n Cadenza.createMetaTask(\n \"Ensure actor and task sync ready from task registration\",\n (ctx) => {\n if (!this.tasksSynced || !this.actorsSynced) {\n return false;\n }\n\n return ctx;\n },\n ).then(this.registerActorTaskMapTask),\n );\n\n Cadenza.registry\n .getAllRoutines!.clone()\n .doOn(\n \"meta.sync_controller.synced_routines\",\n \"meta.sync_controller.synced_tasks\",\n \"meta.sync_requested\",\n )\n .then(\n Cadenza.createMetaTask(\n \"Ensure routine and task sync ready\",\n (ctx) => {\n if (!this.tasksSynced || !this.routinesSynced) {\n return false;\n }\n\n return ctx;\n },\n ).then(this.splitTasksInRoutines),\n );\n\n Cadenza.createMetaTask(\"Finish sync\", (ctx, emit) => {\n emit(\"global.meta.sync_controller.synced\", {\n data: {\n is_active: true,\n is_non_responsive: false,\n is_blocked: false,\n last_active: formatTimestamp(Date.now()),\n },\n filter: {\n uuid: Cadenza.serviceRegistry.serviceInstanceId,\n },\n });\n\n Cadenza.log(\"Synced resources...\");\n })\n .attachSignal(\"global.meta.sync_controller.synced\")\n .doOn(\"meta.sync_controller.synced_resource\");\n\n if (!this.isCadenzaDBReady) {\n Cadenza.interval(\n \"meta.sync_controller.sync_tick\",\n { __syncing: true },\n 300000,\n true,\n );\n } else {\n Cadenza.interval(\n \"meta.sync_controller.sync_tick\",\n { __syncing: true },\n 180000,\n );\n Cadenza.schedule(\n \"meta.sync_controller.sync_tick\",\n { __syncing: true },\n 250,\n );\n for (const delayMs of EARLY_SYNC_REQUEST_DELAYS_MS) {\n Cadenza.schedule(\"meta.sync_requested\", { __syncing: true }, delayMs);\n }\n }\n }\n}\n","export interface BootstrapOptions {\n url?: string;\n injectedGlobalKey?: string;\n}\n\nexport interface HydrationOptions {\n initialInquiryResults?: Record<string, unknown>;\n}\n\nexport interface ResolvedBootstrapEndpoint {\n url: string;\n protocol: \"http\" | \"https\";\n address: string;\n port: number;\n exposed: boolean;\n injectedGlobalKey: string;\n}\n\nconst DEFAULT_BOOTSTRAP_GLOBAL_KEY = \"__CADENZA_RUNTIME__\";\n\ntype ResolveBootstrapEndpointOptions = {\n runtime: \"browser\" | \"server\";\n bootstrap?: BootstrapOptions;\n cadenzaDB?: { address?: string; port?: number };\n};\n\nfunction normalizeString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readEnvString(name: string): string | undefined {\n if (typeof process === \"undefined\") {\n return undefined;\n }\n\n return normalizeString(process.env?.[name]);\n}\n\nfunction readConfiguredPort(value: unknown): number | undefined {\n if (value === undefined || value === null || value === \"\") {\n return undefined;\n }\n\n const parsed = Number(value);\n if (!Number.isFinite(parsed)) {\n throw new Error(`Invalid port value: ${String(value)}`);\n }\n\n const normalized = Math.trunc(parsed);\n if (normalized <= 0) {\n throw new Error(`Port must be a positive integer: ${String(value)}`);\n }\n\n return normalized;\n}\n\nfunction buildBootstrapUrl(\n protocol: \"http\" | \"https\",\n address: string,\n port: number,\n): string {\n return `${protocol}://${address}:${port}`;\n}\n\nfunction readExplicitPortFromOrigin(raw: string): number | undefined {\n const match = raw.match(\n /^[a-z]+:\\/\\/(?:\\[[^\\]]+\\]|[^\\/?#:]+):(\\d+)(?:\\/)?$/i,\n );\n\n if (!match?.[1]) {\n return undefined;\n }\n\n return readConfiguredPort(match[1]);\n}\n\nfunction resolveInjectedBootstrapUrl(injectedGlobalKey: string): string | undefined {\n if (typeof globalThis === \"undefined\") {\n return undefined;\n }\n\n const runtimeConfig = (globalThis as Record<string, any>)[injectedGlobalKey];\n return normalizeString(runtimeConfig?.bootstrapUrl);\n}\n\nfunction resolveExplicitBootstrapValue(options: ResolveBootstrapEndpointOptions): {\n value?: string;\n port?: number;\n injectedGlobalKey: string;\n} {\n const injectedGlobalKey =\n normalizeString(options.bootstrap?.injectedGlobalKey) ??\n DEFAULT_BOOTSTRAP_GLOBAL_KEY;\n\n const explicitBootstrapUrl = normalizeString(options.bootstrap?.url);\n if (explicitBootstrapUrl) {\n return {\n value: explicitBootstrapUrl,\n port: readConfiguredPort(options.cadenzaDB?.port),\n injectedGlobalKey,\n };\n }\n\n if (options.runtime === \"browser\") {\n const injected = resolveInjectedBootstrapUrl(injectedGlobalKey);\n if (injected) {\n return {\n value: injected,\n port: readConfiguredPort(options.cadenzaDB?.port),\n injectedGlobalKey,\n };\n }\n }\n\n const explicitAddress = normalizeString(options.cadenzaDB?.address);\n if (explicitAddress) {\n return {\n value: explicitAddress,\n port: readConfiguredPort(options.cadenzaDB?.port),\n injectedGlobalKey,\n };\n }\n\n const envAddress = readEnvString(\"CADENZA_DB_ADDRESS\");\n return {\n value: envAddress,\n port: readConfiguredPort(options.cadenzaDB?.port ?? readEnvString(\"CADENZA_DB_PORT\")),\n injectedGlobalKey,\n };\n}\n\nexport function readIntegerEnv(name: string, fallback: number): number {\n const raw = readEnvString(name);\n if (!raw) {\n return fallback;\n }\n\n const parsed = Number(raw);\n if (!Number.isFinite(parsed)) {\n return fallback;\n }\n\n const normalized = Math.trunc(parsed);\n if (normalized <= 0) {\n return fallback;\n }\n\n return normalized;\n}\n\nexport function readStringEnv(name: string): string | undefined {\n return readEnvString(name);\n}\n\nexport function readListEnv(name: string): string[][] {\n const raw = readEnvString(name);\n if (!raw) {\n return [];\n }\n\n return raw\n .split(\"|\")\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0)\n .map((entry) => entry.split(\",\").map((part) => part.trim()));\n}\n\nexport function resolveBootstrapEndpoint(\n options: ResolveBootstrapEndpointOptions,\n): ResolvedBootstrapEndpoint {\n const { value, port: fallbackPort, injectedGlobalKey } =\n resolveExplicitBootstrapValue(options);\n\n if (!value) {\n throw new Error(\n options.runtime === \"browser\"\n ? `No bootstrap URL available. Pass bootstrap.url or inject globalThis.${injectedGlobalKey}.bootstrapUrl.`\n : \"No bootstrap URL available. Set CADENZA_DB_ADDRESS or pass bootstrap.url.\",\n );\n }\n\n const raw = value.trim();\n if (raw.length === 0) {\n throw new Error(\"Bootstrap URL cannot be empty\");\n }\n\n if (raw.includes(\"://\")) {\n const parsed = new URL(raw);\n const protocol = parsed.protocol.replace(\":\", \"\");\n if (protocol !== \"http\" && protocol !== \"https\") {\n throw new Error(`Unsupported bootstrap protocol: ${parsed.protocol}`);\n }\n\n if (\n parsed.pathname &&\n parsed.pathname !== \"/\" &&\n parsed.pathname.trim().length > 0\n ) {\n throw new Error(\n \"Bootstrap URL must be an origin without a path component.\",\n );\n }\n\n const explicitPort = readExplicitPortFromOrigin(raw);\n const port = explicitPort ?? (parsed.port ? readConfiguredPort(parsed.port) : fallbackPort);\n if (!port) {\n throw new Error(\n \"Bootstrap URL must include a port or CADENZA_DB_PORT must be provided.\",\n );\n }\n\n return {\n url: buildBootstrapUrl(protocol, parsed.hostname, port),\n protocol,\n address: parsed.hostname,\n port,\n exposed: protocol === \"https\",\n injectedGlobalKey,\n };\n }\n\n if (raw.includes(\"/\") || raw.includes(\"?\") || raw.includes(\"#\")) {\n throw new Error(\n \"Bootstrap address without protocol must not include a path, query, or hash.\",\n );\n }\n\n const parsed = new URL(`http://${raw}`);\n const protocol: \"http\" = \"http\";\n const port = parsed.port ? readConfiguredPort(parsed.port) : fallbackPort;\n if (!port) {\n throw new Error(\n \"Bootstrap address must include a port or CADENZA_DB_PORT must be provided.\",\n );\n }\n\n return {\n url: buildBootstrapUrl(protocol, parsed.hostname, port),\n protocol,\n address: parsed.hostname,\n port,\n exposed: false,\n injectedGlobalKey,\n };\n}\n","import type { AnyObject } from \"@cadenza.io/core\";\nimport { v4 as uuid } from \"uuid\";\nimport type { BootstrapOptions, HydrationOptions } from \"../utils/bootstrap\";\nimport { resolveBootstrapEndpoint } from \"../utils/bootstrap\";\nimport type {\n DistributedInquiryMeta,\n DistributedInquiryOptions,\n InquiryResponderStatus,\n} from \"../types/inquiry\";\nimport type { ServiceInstanceDescriptor } from \"../types/serviceRegistry\";\nimport {\n isMetaIntentName,\n mergeInquiryContexts,\n summarizeResponderStatuses,\n} from \"../utils/inquiry\";\nimport { normalizeServiceInstanceDescriptor } from \"../utils/serviceInstance\";\nimport { selectTransportForRole } from \"../utils/transport\";\n\nexport interface SSRInquiryBridgeOptions {\n bootstrap?: BootstrapOptions;\n cadenzaDB?: {\n address?: string;\n port?: number;\n };\n}\n\nexport interface SSRInquiryBridge {\n inquire: (\n inquiry: string,\n context?: AnyObject,\n options?: DistributedInquiryOptions,\n ) => Promise<AnyObject>;\n dehydrate: () => HydrationOptions;\n}\n\ntype NormalizedIntentMap = {\n intentName: string;\n serviceName: string;\n taskName: string;\n taskVersion: number;\n deleted: boolean;\n};\n\nfunction ensureFetch(): typeof fetch {\n if (typeof globalThis.fetch !== \"function\") {\n throw new Error(\"SSR inquiry bridge requires global fetch support.\");\n }\n\n return globalThis.fetch.bind(globalThis);\n}\n\nfunction normalizeArrayResponse(\n value: AnyObject,\n keys: string[],\n): AnyObject[] {\n for (const key of keys) {\n if (Array.isArray((value as any)?.[key])) {\n return (value as any)[key];\n }\n }\n\n if (Array.isArray((value as any)?.rows)) {\n return (value as any).rows;\n }\n\n if (Array.isArray((value as any)?.data)) {\n return (value as any).data;\n }\n\n return [];\n}\n\nfunction buildQueryResponseKeys(tableName: string): string[] {\n const camelCased = tableName.replace(/_([a-z])/g, (_match, char) =>\n char.toUpperCase(),\n );\n\n return [\n `${tableName}Rows`,\n `${tableName}s`,\n tableName,\n `${camelCased}s`,\n camelCased,\n ];\n}\n\nfunction normalizeIntentMap(raw: AnyObject): NormalizedIntentMap | null {\n const intentName = String(raw.intentName ?? raw.intent_name ?? \"\").trim();\n const serviceName = String(raw.serviceName ?? raw.service_name ?? \"\").trim();\n const taskName = String(raw.taskName ?? raw.task_name ?? \"\").trim();\n const taskVersion = Math.max(\n 1,\n Math.trunc(Number(raw.taskVersion ?? raw.task_version ?? 1) || 1),\n );\n\n if (!intentName || !serviceName || !taskName) {\n return null;\n }\n\n return {\n intentName,\n serviceName,\n taskName,\n taskVersion,\n deleted: Boolean(raw.deleted),\n };\n}\n\nfunction buildInquiryMeta(\n inquiry: string,\n startedAt: number,\n statuses: InquiryResponderStatus[],\n): DistributedInquiryMeta {\n const counts = summarizeResponderStatuses(statuses);\n return {\n inquiry,\n isMetaInquiry: isMetaIntentName(inquiry),\n totalResponders: statuses.length,\n eligibleResponders: statuses.length,\n filteredOutResponders: 0,\n responded: counts.responded,\n failed: counts.failed,\n timedOut: counts.timedOut,\n pending: counts.pending,\n durationMs: Date.now() - startedAt,\n responders: statuses,\n };\n}\n\nexport function createSSRInquiryBridge(\n options: SSRInquiryBridgeOptions = {},\n): SSRInquiryBridge {\n const bootstrapEndpoint = resolveBootstrapEndpoint({\n runtime: \"server\",\n bootstrap: options.bootstrap,\n cadenzaDB: options.cadenzaDB,\n });\n const fetchImplementation = ensureFetch();\n const initialInquiryResults: Record<string, unknown> = {};\n\n const postDelegation = async (\n targetUrl: string,\n remoteRoutineName: string,\n context: AnyObject,\n timeoutMs: number,\n ): Promise<AnyObject> => {\n const signal = AbortSignal.timeout(timeoutMs);\n const response = await fetchImplementation(`${targetUrl}/delegation`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n ...context,\n __remoteRoutineName: remoteRoutineName,\n __metadata: {\n ...(context.__metadata ?? {}),\n __deputyExecId: uuid(),\n },\n }),\n signal,\n });\n\n return (await response.json()) as AnyObject;\n };\n\n const queryTable = async (\n tableName: string,\n queryData: AnyObject,\n timeoutMs: number,\n ): Promise<AnyObject[]> => {\n const response = await postDelegation(\n bootstrapEndpoint.url,\n `Query ${tableName}`,\n { queryData },\n timeoutMs,\n );\n return normalizeArrayResponse(response, buildQueryResponseKeys(tableName));\n };\n\n return {\n async inquire(\n inquiry: string,\n context: AnyObject = {},\n inquiryOptions: DistributedInquiryOptions = {},\n ): Promise<AnyObject> {\n const startedAt = Date.now();\n const overallTimeoutMs =\n inquiryOptions.overallTimeoutMs ?? inquiryOptions.timeout ?? 30_000;\n const perResponderTimeoutMs =\n inquiryOptions.perResponderTimeoutMs ?? overallTimeoutMs;\n\n const intentMaps = (\n await queryTable(\n \"intent_to_task_map\",\n {\n filter: {\n intent_name: inquiry,\n },\n },\n overallTimeoutMs,\n )\n )\n .map(normalizeIntentMap)\n .filter(\n (item): item is NormalizedIntentMap =>\n !!item && item.intentName === inquiry && !item.deleted,\n );\n\n if (intentMaps.length === 0) {\n return {\n __inquiryMeta: buildInquiryMeta(inquiry, startedAt, []),\n };\n }\n\n const relevantServiceNames = Array.from(\n new Set(intentMaps.map((item) => item.serviceName)),\n );\n\n const rawServiceInstances = (\n await queryTable(\n \"service_instance\",\n {\n filter: {\n service_name: relevantServiceNames,\n },\n },\n overallTimeoutMs,\n )\n );\n\n const rawServiceTransports = await queryTable(\n \"service_instance_transport\",\n {\n filter: {\n deleted: false,\n },\n },\n overallTimeoutMs,\n );\n\n const transportsByInstance = new Map<string, AnyObject[]>();\n for (const transport of rawServiceTransports) {\n const serviceInstanceId = String(\n transport.serviceInstanceId ?? transport.service_instance_id ?? \"\",\n ).trim();\n if (!serviceInstanceId) {\n continue;\n }\n\n if (!transportsByInstance.has(serviceInstanceId)) {\n transportsByInstance.set(serviceInstanceId, []);\n }\n transportsByInstance.get(serviceInstanceId)!.push(transport);\n }\n\n const serviceInstances = rawServiceInstances\n .map((instance) =>\n normalizeServiceInstanceDescriptor({\n ...instance,\n transports:\n transportsByInstance.get(String(instance.uuid ?? \"\").trim()) ?? [],\n }),\n )\n .filter(\n (item): item is ServiceInstanceDescriptor =>\n !!item &&\n relevantServiceNames.includes(item.serviceName) &&\n item.isActive &&\n !item.isNonResponsive &&\n !item.isBlocked,\n )\n .sort((left, right) => {\n if (left.serviceName !== right.serviceName) {\n return left.serviceName.localeCompare(right.serviceName);\n }\n if (left.isPrimary !== right.isPrimary) {\n return left.isPrimary ? -1 : 1;\n }\n return (\n (left.numberOfRunningGraphs ?? 0) - (right.numberOfRunningGraphs ?? 0)\n );\n });\n\n const statuses: InquiryResponderStatus[] = intentMaps.map((map) => ({\n isRemote: true,\n serviceName: map.serviceName,\n taskName: map.taskName,\n taskVersion: map.taskVersion,\n localTaskName: `SSR inquiry via ${map.serviceName} (${map.taskName} v${map.taskVersion})`,\n status: \"timed_out\",\n durationMs: 0,\n }));\n\n const fulfilledContexts = await Promise.all(\n intentMaps.map(async (map, index) => {\n const status = statuses[index];\n const startedAtForResponder = Date.now();\n const selectedInstance = serviceInstances.find(\n (instance) => instance.serviceName === map.serviceName,\n );\n\n if (!selectedInstance) {\n status.status = \"failed\";\n status.error = `No active instances for ${map.serviceName}`;\n status.durationMs = Date.now() - startedAtForResponder;\n return null;\n }\n\n const targetTransport = selectTransportForRole(\n selectedInstance.transports,\n \"internal\",\n \"rest\",\n );\n if (!targetTransport) {\n status.status = \"failed\";\n status.error = `No internal transport for ${selectedInstance.serviceName}/${selectedInstance.uuid}`;\n status.durationMs = Date.now() - startedAtForResponder;\n return null;\n }\n\n const targetUrl = targetTransport.origin;\n\n try {\n const result = await postDelegation(\n targetUrl,\n map.taskName,\n context,\n perResponderTimeoutMs,\n );\n status.durationMs = Date.now() - startedAtForResponder;\n if (result?.errored || result?.failed) {\n status.status = \"failed\";\n status.error = String(\n result?.__error ?? result?.error ?? \"Remote inquiry failed\",\n );\n return null;\n }\n\n status.status = \"fulfilled\";\n return result;\n } catch (error) {\n status.durationMs = Date.now() - startedAtForResponder;\n if (\n error instanceof Error &&\n (error.name === \"AbortError\" || /timed out/i.test(error.message))\n ) {\n status.status = \"timed_out\";\n status.error = error.message;\n return null;\n }\n\n status.status = \"failed\";\n status.error =\n error instanceof Error ? error.message : String(error);\n return null;\n }\n }),\n );\n\n const mergedContext = mergeInquiryContexts(\n fulfilledContexts.filter(\n (item): item is AnyObject => item !== null,\n ),\n );\n const responseContext = {\n ...mergedContext,\n __inquiryMeta: buildInquiryMeta(inquiry, startedAt, statuses),\n };\n\n if (inquiryOptions.hydrationKey) {\n initialInquiryResults[inquiryOptions.hydrationKey] = responseContext;\n }\n\n if (\n inquiryOptions.requireComplete &&\n statuses.some((status) => status.status !== \"fulfilled\")\n ) {\n throw {\n ...responseContext,\n __error: `Inquiry '${inquiry}' did not complete successfully`,\n errored: true,\n };\n }\n\n return responseContext;\n },\n\n dehydrate(): HydrationOptions {\n return {\n initialInquiryResults: { ...initialInquiryResults },\n };\n },\n };\n}\n"],"mappings":"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","names":["import_core","uuid","import_uuid","uuid","normalizeString","uuid","import_uuid","uuid","uuid","existingTransport","selectedTransport","ctx","import_core","import_uuid","uuid","URL","delegationCtx","import_core","import_uuid","import_core","serviceName","normalizeString","parsed","protocol","port","Cadenza","uuid","import_core","import_uuid","uuid"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/Cadenza.ts","../../src/graph/definition/DeputyTask.ts","../../src/graph/definition/DatabaseTask.ts","../../src/registry/ServiceRegistry.ts","../../src/utils/environment.ts","../../src/utils/inquiry.ts","../../src/utils/transport.ts","../../src/utils/serviceInstance.ts","../../src/utils/delegation.ts","../../src/utils/readiness.ts","../../src/utils/runtimeStatus.ts","../../src/graph/definition/SignalTransmissionTask.ts","../../src/network/RestController.browser.ts","../../src/network/SocketController.ts","../../src/network/socketClientUtils.ts","../../src/utils/tools.ts","../../src/signals/SignalController.ts","../../src/runtime/RuntimeValidationController.ts","../../src/graph/controllers/registerActorSessionPersistence.ts","../../src/graph/controllers/GraphMetadataController.ts","../../src/database/DatabaseController.browser.ts","../../src/graph/controllers/GraphSyncController.ts","../../src/utils/bootstrap.ts","../../src/ssr/createSSRInquiryBridge.ts"],"sourcesContent":["import CadenzaService, {\n NetworkMode,\n SecurityProfile,\n ServerOptions,\n} from \"./Cadenza\";\nimport {\n Actor,\n type ActorDefinition,\n type ActorSpec,\n type ActorStateDefinition,\n type ActorKeyDefinition,\n type ActorTaskBindingDefinition,\n type ActorFactoryOptions,\n type ActorLoadPolicy,\n type ActorWriteContract,\n type ActorRuntimeReadGuard,\n type ActorTaskMode,\n type ActorKind,\n type ActorConsistencyProfileName,\n type ActorInvocationOptions,\n type ActorStateStore,\n type ActorTaskBindingOptions,\n type ActorTaskContext,\n type ActorTaskHandler,\n type ActorStateReducer,\n type RetryPolicy,\n type IdempotencyPolicy,\n type SessionPolicy,\n type RuntimeValidationPolicy,\n type RuntimeValidationScope,\n DebounceTask,\n EphemeralTask,\n GraphRoutine,\n Task,\n} from \"@cadenza.io/core\";\nimport type {\n AnyObject,\n DebounceOptions,\n EphemeralTaskOptions,\n TaskFunction,\n TaskOptions,\n ThrottleTagGetter,\n} from \"@cadenza.io/core\";\nimport GraphMetadataController from \"./graph/controllers/GraphMetadataController\";\nimport DatabaseTask from \"./graph/definition/DatabaseTask\";\nimport DeputyTask from \"./graph/definition/DeputyTask\";\nimport SignalTransmissionTask from \"./graph/definition/SignalTransmissionTask\";\nimport RestController from \"@service-rest-controller\";\nimport SocketController from \"./network/SocketController\";\nimport ServiceRegistry, {\n DeputyDescriptor,\n} from \"./registry/ServiceRegistry\";\nimport SignalController from \"./signals/SignalController\";\nimport {\n RUNTIME_VALIDATION_INTENTS,\n RUNTIME_VALIDATION_SIGNALS,\n} from \"./runtime/RuntimeValidationController\";\nimport DatabaseController from \"@service-database-controller\";\nimport {\n BootstrapOptions,\n HydrationOptions,\n ResolvedBootstrapEndpoint,\n} from \"./utils/bootstrap\";\nimport {\n createSSRInquiryBridge,\n SSRInquiryBridge,\n SSRInquiryBridgeOptions,\n} from \"./ssr/createSSRInquiryBridge\";\nimport {\n AggregateDefinition,\n AggregateFunction,\n DbOperationType,\n DbOperationPayload,\n JoinDefinition,\n OpEffect,\n QueryMode,\n SortDirection,\n SubOperation,\n SubOperationType,\n ValueOrSubOp,\n} from \"./types/queryData\";\nimport type {\n DistributedInquiryMeta,\n DistributedInquiryOptions,\n InquiryResponderDescriptor,\n InquiryResponderStatus,\n} from \"./types/inquiry\";\nimport type { ServiceInstanceDescriptor } from \"./types/serviceRegistry\";\nimport type {\n ServiceTransportConfig,\n ServiceTransportDescriptor,\n ServiceTransportProtocol,\n ServiceTransportRole,\n ServiceTransportSecurityProfile,\n} from \"./types/transport\";\n\nexport default CadenzaService;\nexport type {\n BootstrapOptions,\n HydrationOptions,\n ResolvedBootstrapEndpoint,\n SSRInquiryBridge,\n SSRInquiryBridgeOptions,\n ActorDefinition,\n ActorSpec,\n ActorStateDefinition,\n ActorKeyDefinition,\n ActorTaskBindingDefinition,\n ActorFactoryOptions,\n ActorLoadPolicy,\n ActorWriteContract,\n ActorRuntimeReadGuard,\n ActorTaskMode,\n ActorKind,\n ActorConsistencyProfileName,\n ActorInvocationOptions,\n ActorStateStore,\n ActorTaskBindingOptions,\n ActorTaskContext,\n ActorTaskHandler,\n ActorStateReducer,\n RetryPolicy,\n IdempotencyPolicy,\n SessionPolicy,\n ServiceInstanceDescriptor,\n ServiceTransportConfig,\n ServiceTransportDescriptor,\n ServiceTransportProtocol,\n ServiceTransportRole,\n ServiceTransportSecurityProfile,\n DeputyDescriptor,\n DbOperationType,\n QueryMode,\n AggregateFunction,\n AggregateDefinition,\n SortDirection,\n JoinDefinition,\n SubOperationType,\n SubOperation,\n OpEffect,\n ValueOrSubOp,\n DbOperationPayload,\n SecurityProfile,\n NetworkMode,\n ServerOptions,\n DistributedInquiryOptions,\n DistributedInquiryMeta,\n InquiryResponderDescriptor,\n InquiryResponderStatus,\n AnyObject,\n TaskOptions,\n ThrottleTagGetter,\n TaskFunction,\n DebounceOptions,\n EphemeralTaskOptions,\n RuntimeValidationPolicy,\n RuntimeValidationScope,\n};\nexport {\n Actor,\n GraphMetadataController,\n DeputyTask,\n DatabaseController,\n DatabaseTask,\n SignalTransmissionTask,\n RestController,\n SocketController,\n ServiceRegistry,\n SignalController,\n createSSRInquiryBridge,\n Task,\n DebounceTask,\n EphemeralTask,\n GraphRoutine,\n RUNTIME_VALIDATION_INTENTS,\n RUNTIME_VALIDATION_SIGNALS,\n};\n","import Cadenza, {\n Actor,\n ActorDefinition,\n ActorFactoryOptions,\n ActorSpec,\n AnyObject,\n CadenzaMode,\n DebounceOptions,\n DebounceTask,\n EmitOptions,\n EphemeralTask,\n EphemeralTaskOptions,\n GraphRegistry,\n GraphRoutine,\n GraphRunner,\n InquiryBroker,\n Intent,\n RuntimeValidationPolicy,\n RuntimeValidationScope,\n SignalBroker,\n Task,\n TaskFunction,\n TaskOptions,\n ThrottleTagGetter,\n} from \"@cadenza.io/core\";\nimport DeputyTask from \"./graph/definition/DeputyTask\";\nimport DatabaseTask from \"./graph/definition/DatabaseTask\";\nimport ServiceRegistry from \"./registry/ServiceRegistry\";\nimport SignalTransmissionTask from \"./graph/definition/SignalTransmissionTask\";\nimport RestController from \"@service-rest-controller\";\nimport SocketController from \"./network/SocketController\";\nimport SignalController from \"./signals/SignalController\";\nimport RuntimeValidationController from \"./runtime/RuntimeValidationController\";\nimport { DbOperationPayload, DbOperationType } from \"./types/queryData\";\nimport GraphMetadataController from \"./graph/controllers/GraphMetadataController\";\nimport { registerActorSessionPersistenceTasks } from \"./graph/controllers/registerActorSessionPersistence\";\nimport { DatabaseSchemaDefinition } from \"./types/database\";\nimport { camelCase, snakeCase } from \"lodash-es\";\nimport DatabaseController from \"@service-database-controller\";\nimport { v4 as uuid } from \"uuid\";\nimport GraphSyncController from \"./graph/controllers/GraphSyncController\";\nimport { isBrowser } from \"./utils/environment\";\nimport { formatTimestamp } from \"./utils/tools\";\nimport {\n BootstrapOptions,\n HydrationOptions,\n readIntegerEnv,\n readListEnv,\n readStringEnv,\n resolveBootstrapEndpoint,\n} from \"./utils/bootstrap\";\nimport {\n DistributedInquiryMeta,\n DistributedInquiryOptions,\n InquiryResponderDescriptor,\n InquiryResponderStatus,\n} from \"./types/inquiry\";\nimport type {\n ServiceTransportConfig,\n ServiceTransportRole,\n} from \"./types/transport\";\nimport {\n compareResponderDescriptors,\n isMetaIntentName,\n mergeInquiryContexts,\n shouldExecuteInquiryResponder,\n summarizeResponderStatuses,\n} from \"./utils/inquiry\";\nimport { normalizeServiceTransportConfig } from \"./utils/transport\";\n\nexport type SecurityProfile = \"low\" | \"medium\" | \"high\";\nexport type NetworkMode =\n | \"internal\"\n | \"exposed\"\n | \"exposed-high-sec\"\n | \"auto\"\n | \"dev\";\n\nexport type ServerOptions = {\n customServiceId?: string; // TODO\n loadBalance?: boolean;\n useSocket?: boolean;\n log?: boolean;\n displayName?: string;\n isMeta?: boolean;\n port?: number; // for internal network\n securityProfile?: SecurityProfile;\n networkMode?: NetworkMode;\n retryCount?: number;\n cadenzaDB?: { connect?: boolean; address?: string; port?: number };\n bootstrap?: BootstrapOptions;\n hydration?: HydrationOptions;\n transports?: ServiceTransportConfig[];\n relatedServices?: string[][];\n isDatabase?: boolean;\n isFrontend?: boolean;\n};\n\nexport interface DatabaseOptions {\n databaseType?: \"postgres\";\n databaseName?: string;\n poolSize?: number;\n ownerServiceName?: string | null;\n}\n\n/**\n * The CadenzaService class serves as a central service layer providing various utility methods for managing tasks, signals, logging, and service interactions.\n * This class handles the initialization (`bootstrap`) and validation of services, as well as the creation of tasks associated with services and signals.\n */\nexport default class CadenzaService {\n public static signalBroker: SignalBroker;\n public static inquiryBroker: InquiryBroker;\n public static runner: GraphRunner;\n public static metaRunner: GraphRunner;\n public static registry: GraphRegistry;\n public static serviceRegistry: ServiceRegistry;\n protected static isBootstrapped = false;\n protected static serviceCreated = false;\n protected static defaultDatabaseServiceName: string | null = null;\n protected static warnedInvalidMetaIntentResponderKeys: Set<string> = new Set();\n protected static hydratedInquiryResults: Map<string, AnyObject> = new Map();\n protected static frontendSyncScheduled = false;\n\n private static replayRegisteredTaskIntentAssociations(): void {\n for (const task of this.registry.tasks.values()) {\n if (!task.register || task.isHidden || task.handlesIntents.size === 0) {\n continue;\n }\n\n for (const intentName of task.handlesIntents) {\n task.emitWithMetadata(\"meta.task.intent_associated\", {\n data: {\n intentName,\n taskName: task.name,\n taskVersion: task.version,\n },\n taskInstance: task,\n __isSubMeta: task.isSubMeta,\n });\n }\n }\n }\n\n private static replayRegisteredTaskSignalObservations(): void {\n for (const task of this.registry.tasks.values()) {\n if (!task.register || task.isHidden || task.observedSignals.size === 0) {\n continue;\n }\n\n for (const signalName of task.observedSignals) {\n task.emitWithMetadata(\"meta.task.observed_signal\", {\n data: {\n signalName,\n taskName: task.name,\n taskVersion: task.version,\n },\n taskInstance: task,\n signalName,\n __isSubMeta: task.isSubMeta,\n });\n }\n }\n }\n\n private static replayRegisteredTaskGraphMetadata(): void {\n this.replayRegisteredTaskSignalObservations();\n this.replayRegisteredTaskIntentAssociations();\n }\n\n private static buildLegacyLocalCadenzaDBTaskName(\n tableName: string,\n operation: DbOperationType,\n ): string {\n const operationPrefix =\n operation.charAt(0).toUpperCase() + operation.slice(1);\n const helperSuffix = camelCase(String(tableName ?? \"\").trim());\n\n return `db${operationPrefix}${helperSuffix.charAt(0).toUpperCase() + helperSuffix.slice(1)}`;\n }\n\n private static buildGeneratedLocalCadenzaDBTaskName(\n tableName: string,\n operation: DbOperationType,\n ): string {\n const operationPrefix =\n operation.charAt(0).toUpperCase() + operation.slice(1);\n return `${operationPrefix} ${String(tableName ?? \"\").trim()}`;\n }\n\n /**\n * Initializes the application by setting up necessary components and configurations.\n * This method ensures the initialization process is only executed once throughout the application lifecycle.\n *\n * @return {void} This method does not return any value.\n */\n static bootstrap(): void {\n if (this.isBootstrapped) return;\n this.isBootstrapped = true;\n\n Cadenza.bootstrap();\n Cadenza.setRuntimeInquiryDelegate((inquiry, context, options) =>\n this.inquire(\n inquiry,\n context,\n (options ?? {}) as DistributedInquiryOptions,\n ),\n );\n this.signalBroker = Cadenza.signalBroker;\n this.inquiryBroker = Cadenza.inquiryBroker;\n this.runner = Cadenza.runner;\n this.metaRunner = Cadenza.metaRunner;\n this.registry = Cadenza.registry;\n this.serviceRegistry = ServiceRegistry.instance;\n RestController.instance;\n SocketController.instance;\n RuntimeValidationController.instance;\n }\n\n private static ensureTransportControllers(isFrontend: boolean): void {\n if (!isFrontend) {\n SignalController.instance;\n }\n }\n\n private static setHydrationResults(\n hydration?: HydrationOptions,\n ): void {\n this.hydratedInquiryResults = new Map();\n\n const initialInquiryResults = hydration?.initialInquiryResults ?? {};\n for (const [key, value] of Object.entries(initialInquiryResults)) {\n this.hydratedInquiryResults.set(key, value as AnyObject);\n }\n }\n\n private static consumeHydratedInquiryResult(\n hydrationKey?: string,\n ): AnyObject | undefined {\n if (!hydrationKey) {\n return undefined;\n }\n\n const result = this.hydratedInquiryResults.get(hydrationKey);\n if (result === undefined) {\n return undefined;\n }\n\n this.hydratedInquiryResults.delete(hydrationKey);\n return result;\n }\n\n private static ensureFrontendSyncLoop(): void {\n if (this.frontendSyncScheduled) {\n return;\n }\n\n this.frontendSyncScheduled = true;\n Cadenza.interval(\"meta.sync_requested\", { __syncing: false }, 180000);\n Cadenza.schedule(\"meta.sync_requested\", { __syncing: false }, 250);\n }\n\n private static normalizeDeclaredTransports(\n transports: ServiceTransportConfig[] | undefined,\n serviceId: string,\n useSocket: boolean,\n ): Array<\n ServiceTransportConfig & {\n uuid: string;\n }\n > {\n return (transports ?? [])\n .map((transport) => normalizeServiceTransportConfig(transport))\n .filter(\n (\n transport,\n ): transport is ServiceTransportConfig =>\n !!transport,\n )\n .map((transport) => ({\n ...transport,\n protocols:\n transport.protocols && transport.protocols.length > 0\n ? transport.protocols\n : useSocket\n ? [\"rest\", \"socket\"]\n : [\"rest\"],\n uuid: uuid(),\n }));\n }\n\n private static createBootstrapTransport(\n serviceInstanceId: string,\n role: ServiceTransportRole,\n endpoint: ReturnType<typeof resolveBootstrapEndpoint>,\n ) {\n return {\n uuid: `${serviceInstanceId}-${role}-bootstrap`,\n service_instance_id: serviceInstanceId,\n role,\n origin: endpoint.url,\n protocols: [\"rest\", \"socket\"] as const,\n security_profile: null,\n auth_strategy: null,\n };\n }\n\n /**\n * Validates the provided service name based on specific rules.\n *\n * @param {string} serviceName - The service name to validate. Must be less than 100 characters,\n * must not contain spaces, dots, or backslashes, and must start with a capital letter.\n * @return {void} Throws an error if the service name does not meet the validation criteria.\n * @throws {Error} If the service name exceeds 100 characters.\n * @throws {Error} If the service name contains spaces.\n * @throws {Error} If the service name contains dots.\n * @throws {Error} If the service name contains backslashes.\n * @throws {Error} If the service name does not start with a capital letter.\n */\n protected static validateServiceName(serviceName: string) {\n if (serviceName.length > 100) {\n throw new Error(\"Service name must be less than 100 characters\");\n }\n\n if (serviceName.includes(\" \")) {\n throw new Error(\"Service name must not contain spaces\");\n }\n\n if (serviceName.includes(\".\")) {\n throw new Error(\"Service name must not contain dots\");\n }\n\n if (serviceName.includes(\"\\\\\")) {\n throw new Error(\"Service name must not contain backslashes\");\n }\n\n if (\n serviceName.charAt(0) !== serviceName.charAt(0).toUpperCase() &&\n serviceName.charAt(0) === serviceName.charAt(0).toLowerCase()\n ) {\n throw new Error(\"Service name must start with a capital letter\");\n }\n }\n\n /**\n * Validates the provided name to ensure it meets the required criteria.\n *\n * @param {string} name - The name to be validated.\n * @return {void} Does not return any value.\n */\n protected static validateName(name: string): void {\n Cadenza.validateName(name);\n }\n\n /**\n * Gets the current run strategy from the Cadenza configuration.\n *\n * @return {Function} The run strategy function defined in the Cadenza configuration.\n */\n public static get runStrategy() {\n return Cadenza.runStrategy;\n }\n\n /**\n * Sets the mode for the Cadenza application.\n *\n * @param {CadenzaMode} mode - The mode to be set for the application.\n * @return {void} This method does not return a value.\n */\n public static setMode(mode: CadenzaMode) {\n Cadenza.setMode(mode);\n }\n\n /**\n * Emits a signal with the specified data using the associated broker.\n *\n * @param {string} signal - The name of the event or signal to emit.\n * @param {AnyObject} [data={}] - The data to be emitted along with the signal.\n * @param options\n * @return {void} No return value.\n *\n * @example\n * This is meant to be used as a global event emitter.\n * If you want to emit an event from within a task, you can use the `emit` method provided to the task function. See {@link TaskFunction}.\n * ```ts\n * Cadenza.emit('main.my_event', { foo: 'bar' });\n * ```\n */\n static emit(signal: string, data: AnyObject = {}, options: EmitOptions = {}) {\n Cadenza.emit(signal, data, options);\n }\n\n static debounce(signal: string, context: any = {}, delayMs: number = 500) {\n Cadenza.debounce(signal, context, delayMs);\n }\n\n public static schedule(\n signal: string,\n context: AnyObject,\n timeoutMs: number,\n exactDateTime?: Date,\n ) {\n Cadenza.schedule(signal, context, timeoutMs, exactDateTime);\n }\n\n public static interval(\n signal: string,\n context: AnyObject,\n intervalMs: number,\n leading = false,\n startDateTime?: Date,\n ) {\n Cadenza.interval(signal, context, intervalMs, leading, startDateTime);\n }\n\n public static defineIntent(intent: Intent): Intent {\n this.inquiryBroker?.addIntent(intent);\n return intent;\n }\n\n public static getRuntimeValidationPolicy(): RuntimeValidationPolicy {\n this.bootstrap();\n return Cadenza.getRuntimeValidationPolicy();\n }\n\n public static setRuntimeValidationPolicy(\n policy: RuntimeValidationPolicy = {},\n ): RuntimeValidationPolicy {\n this.bootstrap();\n return Cadenza.setRuntimeValidationPolicy(policy);\n }\n\n public static replaceRuntimeValidationPolicy(\n policy: RuntimeValidationPolicy = {},\n ): RuntimeValidationPolicy {\n this.bootstrap();\n return Cadenza.replaceRuntimeValidationPolicy(policy);\n }\n\n public static clearRuntimeValidationPolicy(): void {\n this.bootstrap();\n Cadenza.clearRuntimeValidationPolicy();\n }\n\n public static getRuntimeValidationScopes(): RuntimeValidationScope[] {\n this.bootstrap();\n return Cadenza.getRuntimeValidationScopes();\n }\n\n public static upsertRuntimeValidationScope(\n scope: RuntimeValidationScope,\n ): RuntimeValidationScope {\n this.bootstrap();\n return Cadenza.upsertRuntimeValidationScope(scope);\n }\n\n public static removeRuntimeValidationScope(id: string): void {\n this.bootstrap();\n Cadenza.removeRuntimeValidationScope(id);\n }\n\n public static clearRuntimeValidationScopes(): void {\n this.bootstrap();\n Cadenza.clearRuntimeValidationScopes();\n }\n\n private static getInquiryResponderDescriptor(task: Task): InquiryResponderDescriptor {\n return this.serviceRegistry.getInquiryResponderDescriptor(task);\n }\n\n private static compareInquiryResponders(\n left: { task: Task; descriptor: InquiryResponderDescriptor },\n right: { task: Task; descriptor: InquiryResponderDescriptor },\n ) {\n return compareResponderDescriptors(left.descriptor, right.descriptor);\n }\n\n private static buildInquirySummary(\n inquiry: string,\n startedAt: number,\n statuses: InquiryResponderStatus[],\n totalResponders: number,\n ): DistributedInquiryMeta {\n const counts = summarizeResponderStatuses(statuses);\n const isMetaInquiry = isMetaIntentName(inquiry);\n const eligibleResponders = statuses.length;\n return {\n inquiry,\n isMetaInquiry,\n totalResponders,\n eligibleResponders,\n filteredOutResponders: Math.max(0, totalResponders - eligibleResponders),\n responded: counts.responded,\n failed: counts.failed,\n timedOut: counts.timedOut,\n pending: counts.pending,\n durationMs: Date.now() - startedAt,\n responders: statuses,\n };\n }\n\n public static async inquire(\n inquiry: string,\n context: AnyObject,\n options: DistributedInquiryOptions = {},\n ): Promise<AnyObject> {\n this.bootstrap();\n\n const hydratedResult = this.consumeHydratedInquiryResult(\n options.hydrationKey,\n );\n if (hydratedResult !== undefined) {\n return hydratedResult;\n }\n\n const observer = this.inquiryBroker?.inquiryObservers.get(inquiry);\n const allResponders = observer\n ? Array.from(observer.tasks).map((task) => ({\n task,\n descriptor: this.getInquiryResponderDescriptor(task),\n }))\n : [];\n const isMetaInquiry = isMetaIntentName(inquiry);\n const responders = allResponders.filter(({ task, descriptor }) => {\n const shouldExecute = shouldExecuteInquiryResponder(inquiry, task.isMeta);\n\n if (shouldExecute) {\n return true;\n }\n\n const warningKey = `${inquiry}|${descriptor.serviceName}|${descriptor.taskName}|${descriptor.taskVersion}|${descriptor.localTaskName}`;\n if (!this.warnedInvalidMetaIntentResponderKeys.has(warningKey)) {\n this.warnedInvalidMetaIntentResponderKeys.add(warningKey);\n this.log(\n \"Skipping non-meta task for meta intent inquiry.\",\n {\n inquiry,\n responder: descriptor,\n },\n \"warning\",\n descriptor.serviceName,\n );\n }\n\n return false;\n });\n\n if (responders.length === 0) {\n const inquiryMeta = {\n inquiry,\n isMetaInquiry,\n totalResponders: allResponders.length,\n eligibleResponders: 0,\n filteredOutResponders: allResponders.length,\n responded: 0,\n failed: 0,\n timedOut: 0,\n pending: 0,\n durationMs: 0,\n responders: [],\n } as DistributedInquiryMeta;\n\n if (options.requireComplete) {\n throw {\n __inquiryMeta: inquiryMeta,\n __error: `Inquiry '${inquiry}' had no eligible responders`,\n errored: true,\n };\n }\n\n return {\n __inquiryMeta: inquiryMeta,\n };\n }\n\n responders.sort(this.compareInquiryResponders.bind(this));\n\n const overallTimeoutMs = options.overallTimeoutMs ?? options.timeout ?? 0;\n const requireComplete = options.requireComplete ?? false;\n const perResponderTimeoutMs = options.perResponderTimeoutMs;\n\n const startedAt = Date.now();\n const statuses: InquiryResponderStatus[] = [];\n const statusByTask = new Map<Task, InquiryResponderStatus>();\n for (const responder of responders) {\n const status: InquiryResponderStatus = {\n ...responder.descriptor,\n status: \"timed_out\",\n durationMs: 0,\n };\n statuses.push(status);\n statusByTask.set(responder.task, status);\n }\n\n const resultsByTask = new Map<Task, AnyObject>();\n const resolverTasks: Task[] = [];\n const pending = new Set(responders.map((r) => r.task));\n const startTimeByTask = new Map<Task, number>();\n\n this.emit(\"meta.inquiry_broker.inquire\", { inquiry, context });\n\n return new Promise((resolve, reject) => {\n let finalized = false;\n let timeoutId: NodeJS.Timeout | undefined;\n\n const finalize = (timedOut: boolean) => {\n if (finalized) return;\n finalized = true;\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n\n for (const resolverTask of resolverTasks) {\n resolverTask.destroy();\n }\n\n if (timedOut && pending.size > 0) {\n for (const task of pending) {\n const status = statusByTask.get(task);\n if (!status) continue;\n status.status = \"timed_out\";\n status.durationMs = Date.now() - (startTimeByTask.get(task) ?? startedAt);\n }\n }\n\n const fulfilledContexts = responders\n .filter((responder) => resultsByTask.has(responder.task))\n .map((responder) => resultsByTask.get(responder.task)!);\n\n const mergedContext = mergeInquiryContexts(fulfilledContexts);\n const inquiryMeta = this.buildInquirySummary(\n inquiry,\n startedAt,\n statuses,\n allResponders.length,\n );\n const responseContext = {\n ...mergedContext,\n __inquiryMeta: inquiryMeta,\n };\n\n if (\n requireComplete &&\n (timedOut ||\n inquiryMeta.failed > 0 ||\n inquiryMeta.timedOut > 0 ||\n inquiryMeta.pending > 0)\n ) {\n reject({\n ...responseContext,\n __error: `Inquiry '${inquiry}' did not complete successfully`,\n errored: true,\n });\n return;\n }\n\n resolve(responseContext);\n };\n\n if (overallTimeoutMs > 0) {\n timeoutId = setTimeout(() => finalize(true), overallTimeoutMs);\n }\n\n for (const responder of responders) {\n const { task, descriptor } = responder;\n const inquiryId = uuid();\n startTimeByTask.set(task, Date.now());\n\n const resolverTask = this.createEphemeralMetaTask(\n `Resolve inquiry ${inquiry} for ${descriptor.localTaskName}`,\n (resultCtx) => {\n if (finalized) {\n return;\n }\n\n pending.delete(task);\n\n const status = statusByTask.get(task);\n\n if (status) {\n status.durationMs =\n Date.now() -\n (startTimeByTask.get(task) ?? startedAt);\n\n if (resultCtx?.errored || resultCtx?.failed) {\n status.status = \"failed\";\n status.error = String(\n resultCtx?.__error ?? resultCtx?.error ?? \"Inquiry responder failed\",\n );\n } else {\n status.status = \"fulfilled\";\n resultsByTask.set(task, resultCtx);\n }\n }\n\n if (pending.size === 0) {\n finalize(false);\n }\n },\n \"Resolves distributed inquiry responder result\",\n { register: false },\n ).doOn(`meta.node.graph_completed:${inquiryId}`);\n\n resolverTasks.push(resolverTask);\n\n const executionContext: AnyObject = {\n ...context,\n __routineExecId: inquiryId,\n __isInquiry: true,\n };\n\n if (perResponderTimeoutMs !== undefined) {\n executionContext.__timeout = perResponderTimeoutMs;\n }\n\n if (task.isMeta) {\n this.metaRunner?.run(task, executionContext);\n } else {\n this.runner?.run(task, executionContext);\n }\n }\n });\n }\n\n /**\n * Executes the given task or graph routine within the provided context using the configured runner.\n *\n * @param {Task | GraphRoutine} task - The task or graph routine to be executed.\n * @param {AnyObject} context - The context within which the task will be executed.\n * @return {void}\n *\n * @example\n * ```ts\n * const task = Cadenza.createTask('My task', (ctx) => {\n * console.log('My task executed with context:', ctx);\n * });\n *\n * Cadenza.run(task, { foo: 'bar' });\n *\n * const routine = Cadenza.createRoutine('My routine', [task], 'My routine description');\n *\n * Cadenza.run(routine, { foo: 'bar' });\n * ```\n */\n static run(task: Task | GraphRoutine, context: AnyObject) {\n this.runner?.run(task, context);\n }\n /**\n * Logs a message with a specified log level and additional contextual data.\n * Records in the CadenzaDB when available.\n *\n * @param {string} message - The main message to be logged.\n * @param {any} [data={}] - Additional data or metadata to include with the log.\n * @param {\"info\"|\"warning\"|\"error\"|\"critical\"} [level=\"info\"] - The severity level of the log message.\n * @param {string|null} [subjectServiceName=null] - The name of the subject service related to the log.\n * @param {string|null} [subjectServiceInstanceId=null] - The instance ID of the subject service related to the log.\n * @return {void} No return value.\n */\n static log(\n message: string,\n data: any = {},\n level: \"info\" | \"warning\" | \"error\" | \"critical\" = \"info\",\n subjectServiceName: string | null = null,\n subjectServiceInstanceId: string | null = null,\n ) {\n if (level === \"critical\") {\n console.error(\"CRITICAL:\", message, data);\n } else if (level === \"error\") {\n console.error(message, data);\n } else if (level === \"warning\") {\n console.warn(message, data);\n } else {\n console.log(message, data);\n }\n\n this.emit(\"global.meta.system_log.log\", {\n data: {\n data,\n level,\n message,\n serviceName: this.serviceRegistry?.serviceName,\n serviceInstanceId: this.serviceRegistry?.serviceInstanceId,\n subjectServiceName,\n subjectServiceInstanceId,\n created: formatTimestamp(Date.now()),\n },\n });\n }\n\n public static get(taskName: string): Task | undefined {\n return Cadenza.get(taskName);\n }\n\n public static getLocalCadenzaDBTask(\n tableName: string,\n operation: DbOperationType,\n ): Task | undefined {\n const generatedTaskName = this.buildGeneratedLocalCadenzaDBTaskName(\n tableName,\n operation,\n );\n const legacyTaskName = this.buildLegacyLocalCadenzaDBTaskName(\n tableName,\n operation,\n );\n\n return Cadenza.get(generatedTaskName) ?? Cadenza.get(legacyTaskName);\n }\n\n public static getLocalCadenzaDBInsertTask(\n tableName: string,\n ): Task | undefined {\n return this.getLocalCadenzaDBTask(tableName, \"insert\");\n }\n\n public static getLocalCadenzaDBQueryTask(\n tableName: string,\n ): Task | undefined {\n return this.getLocalCadenzaDBTask(tableName, \"query\");\n }\n\n public static getActor<\n D extends Record<string, any> = AnyObject,\n R = AnyObject,\n >(actorName: string): Actor<D, R> | undefined {\n const cadenzaWithActors = Cadenza as unknown as {\n getActor?: <D extends Record<string, any>, R = AnyObject>(\n actorName: string,\n ) => Actor<D, R> | undefined;\n };\n return cadenzaWithActors.getActor?.<D, R>(actorName);\n }\n\n public static getAllActors<\n D extends Record<string, any> = AnyObject,\n R = AnyObject,\n >(): Actor<D, R>[] {\n const cadenzaWithActors = Cadenza as unknown as {\n getAllActors?: <D extends Record<string, any>, R = AnyObject>() => Actor<\n D,\n R\n >[];\n };\n return cadenzaWithActors.getAllActors?.<D, R>() ?? [];\n }\n\n public static getRoutine(routineName: string): GraphRoutine | undefined {\n return Cadenza.getRoutine(routineName);\n }\n\n /**\n * Creates a new DeputyTask instance based on the provided routine name, service name, and options.\n * This method ensures proper task initialization, including setting a unique name,\n * validation of the routine name, and applying default option values.\n *\n * @param {string} routineName - The name of the routine the task references. This is mandatory and should be a valid string.\n * @param {string|undefined} [serviceName] - The name of the service that the routine belongs to. This is optional and defaults to undefined.\n * @param {TaskOptions} [options={}] - A configuration object for the task, allowing various properties such as concurrency, timeout, and retry settings to be customized.\n * @return {DeputyTask} - A new DeputyTask instance initialized with the specified parameters.\n *\n * @example\n * Let's say we are writing the code for a Service called \"Service1\".\n * We also have an additional service called \"Service2\" with a routine called \"My Routine\".\n * A flow on Service1 depends on the result of \"My Routine\" on Service2.\n * We can create a deputy task for the routine using the following code:\n * ```ts\n * Cadenza.createDeputyTask(\"My Routine\", \"Service2\").then(\n * Cadenza.createTask(\"Handle result\", (ctx) => {\n * console.log(\"'Handle result' executed with context:\", ctx);\n * }),\n * );\n * ```\n * Internally, this will send a request to an available \"Service2\" instance to execute the \"My Routine\" routine.\n * The deputy task will wait for the response and then execute the next task(s) in the chain.\n *\n * You can visualize the execution of the deputy task as follows:\n * ```\n * Service1 flow = [Deputy tasks for \"My Routine\"] -> [\"Handle result\"]\n * || A\n * V ||\n * Service2 flow = [[My Routine]]\n * ```\n *\n * Deputy tasks are useful for delegating flows to other services, allowing for parallel execution and load balancing.\n * But it creates tight coupling between the services, which may not be desirable in some cases.\n * In cases where an event on one service should simply trigger a flow on another service, without the need for a result,\n * it is recommended to use signals instead. Like this:\n *\n * Service1\n * ```ts\n * Cadenza.createTask(\"Generate event\", (ctx, emit) => {\n * // Do something\n * emit(\"some.event\");\n * });\n * ```\n *\n * Service2\n * ```ts\n * Cadenza.createTask(\"Handle event\", (ctx) => {\n * console.log(\"Handle event executed with context:\", ctx);\n * }).doOn(\"Service1.some.event\");\n * ```\n *\n * Every time the \"Generate event\" task is executed, it will emit a signal \"Service1.some.event\" to one Service2 instance and trigger the \"Handle event\" task.\n */\n static createDeputyTask(\n routineName: string,\n serviceName: string | undefined = undefined,\n options: TaskOptions = {},\n ): DeputyTask {\n this.bootstrap();\n this.validateName(routineName);\n const name = `${routineName} (Proxy)`;\n\n options = {\n concurrency: 100,\n timeout: 0,\n register: true,\n isUnique: false,\n isMeta: false,\n isSubMeta: false,\n isHidden: false,\n getTagCallback: undefined,\n inputSchema: undefined,\n validateInputContext: false,\n outputSchema: undefined,\n validateOutputContext: false,\n retryCount: 0,\n retryDelay: 0,\n retryDelayMax: 0,\n retryDelayFactor: 1,\n ...options,\n };\n\n return new DeputyTask(\n name,\n routineName,\n serviceName,\n `Referencing routine in service: ${routineName} on service: ${serviceName}.`,\n options.concurrency,\n options.timeout,\n options.register,\n options.isUnique,\n options.isMeta,\n options.isSubMeta,\n options.isHidden,\n options.getTagCallback,\n options.inputSchema,\n options.validateInputContext,\n options.outputSchema,\n options.validateOutputContext,\n options.retryCount,\n options.retryDelay,\n options.retryDelayMax,\n options.retryDelayFactor,\n );\n }\n\n /**\n * Creates a meta deputy task by setting the `isMeta` property in the options to true,\n * and delegating task creation to the `createDeputyTask` method.\n * See {@link createDeputyTask} and {@link createMetaTask} for more information.\n *\n * @param {string} routineName - The name of the routine associated with the task.\n * @param {string | undefined} [serviceName] - The optional name of the service associated with the task.\n * @param {TaskOptions} [options={}] - Additional options for the task. Defaults to an empty object if not provided.\n * @return {DeputyTask} - The created meta deputy task.\n */\n static createMetaDeputyTask(\n routineName: string,\n serviceName: string | undefined = undefined,\n options: TaskOptions = {},\n ): DeputyTask {\n options.isMeta = true;\n return this.createDeputyTask(routineName, serviceName, options);\n }\n\n /**\n * Creates a throttled deputy task with the specified parameters.\n * See {@link createThrottledTask} and {@link createDeputyTask} for more information.\n *\n * @param {string} routineName - The name of the routine to be executed.\n * @param {string | undefined} [serviceName=undefined] - The name of the service, if applicable.\n * @param {ThrottleTagGetter} [throttledIdGetter=() => \"default\"] - A function to get the throttled tag for the task.\n * @param {TaskOptions} [options={}] - The options for task configuration, including concurrency and callbacks.\n * @return {DeputyTask} The created throttled deputy task.\n */\n static createThrottledDeputyTask(\n routineName: string,\n serviceName: string | undefined = undefined,\n throttledIdGetter: ThrottleTagGetter = () => \"default\",\n options: TaskOptions = {},\n ) {\n options.concurrency = 1;\n options.getTagCallback = throttledIdGetter;\n return this.createDeputyTask(routineName, serviceName, options);\n }\n\n /**\n * Creates a throttled deputy task with meta-task settings enabled.\n * See {@link createThrottledTask},{@link createDeputyTask} and {@link createMetaTask} for more information.\n *\n * @param {string} routineName - The name of the routine for which the task is being created.\n * @param {string|undefined} [serviceName=undefined] - The name of the service associated with the task, or undefined if not applicable.\n * @param {ThrottleTagGetter} [throttledIdGetter=() => \"default\"] - A function to compute or return the throttling identifier.\n * @param {TaskOptions} [options={}] - Additional options for the task configuration.\n * @return {any} Returns the created throttled deputy task instance.\n */\n static createMetaThrottledDeputyTask(\n routineName: string,\n serviceName: string | undefined = undefined,\n throttledIdGetter: ThrottleTagGetter = () => \"default\",\n options: TaskOptions = {},\n ) {\n options.isMeta = true;\n return this.createThrottledDeputyTask(\n routineName,\n serviceName,\n throttledIdGetter,\n options,\n );\n }\n\n /**\n * Creates and configures a signal transmission task that handles the transmission\n * of a specified signal to a target service with a set of customizable options.\n * This is only used for internal purposes and is not exposed to the business logic layer.\n *\n * @param {string} signalName - The name of the signal to be transmitted.\n * @param {string} serviceName - The name of the target service to transmit the signal to.\n * @param {TaskOptions} [options={}] - A set of optional parameters to further configure the task.\n * @return {SignalTransmissionTask} A new instance of SignalTransmissionTask configured with the given parameters.\n */\n static createSignalTransmissionTask(\n signalName: string,\n serviceName: string,\n options: TaskOptions = {},\n ): SignalTransmissionTask | undefined {\n this.bootstrap();\n this.validateName(signalName);\n this.validateName(serviceName);\n\n const name = `Transmit signal: ${signalName} to ${serviceName}`;\n if (this.get(name)) {\n return;\n }\n\n options = {\n concurrency: 100,\n timeout: 0,\n register: true,\n isUnique: false,\n isMeta: true,\n isSubMeta: false,\n isHidden: false,\n getTagCallback: undefined,\n inputSchema: undefined,\n validateInputContext: false,\n outputSchema: undefined,\n validateOutputContext: false,\n retryCount: 1,\n retryDelay: 0,\n retryDelayMax: 0,\n retryDelayFactor: 1,\n ...options,\n };\n\n options.isMeta = true;\n\n return new SignalTransmissionTask(\n name,\n signalName,\n serviceName,\n `Transmits signal ${signalName} to ${serviceName} service.`,\n options.concurrency,\n options.timeout,\n options.register,\n options.isUnique,\n options.isMeta,\n options.isSubMeta,\n options.isHidden,\n options.getTagCallback,\n options.inputSchema,\n options.validateInputContext,\n options.outputSchema,\n options.validateOutputContext,\n options.retryCount,\n options.retryDelay,\n options.retryDelayMax,\n options.retryDelayFactor,\n );\n }\n\n /**\n * Creates and configures a database task that performs an operation on a specified table.\n *\n * @param {string} tableName - The name of the database table on which the operation will be performed.\n * @param {DbOperationType} operation - The type of database operation to execute (e.g., insert, update, delete).\n * @param {string|undefined} [databaseServiceName=undefined] - The name of the database service; defaults to \"default database service\" if not provided.\n * @param {DbOperationPayload} queryData - The data payload required for executing the specified database operation.\n * @param {TaskOptions} [options={}] - Optional configuration for the task, including concurrency, timeout, and retry policies.\n * @return {DatabaseTask} A configured database task instance ready for execution.\n */\n static createDatabaseTask(\n tableName: string,\n operation: DbOperationType,\n databaseServiceName: string | undefined = undefined,\n queryData: DbOperationPayload,\n options: TaskOptions = {},\n ) {\n this.bootstrap();\n this.validateName(tableName);\n this.validateName(operation);\n const resolvedDatabaseServiceName =\n databaseServiceName ?? this.defaultDatabaseServiceName ?? undefined;\n const targetDatabaseServiceName =\n resolvedDatabaseServiceName ?? \"default database service\";\n const name = `${operation.charAt(0).toUpperCase() + operation.slice(1)} ${tableName} in ${targetDatabaseServiceName}`;\n const description = `Executes a ${operation} on table ${tableName} in ${targetDatabaseServiceName}`;\n const taskName = `${operation.charAt(0).toUpperCase() + operation.slice(1)} ${tableName}`;\n\n options = {\n concurrency: 100,\n timeout: 0,\n register: true,\n isUnique: false,\n isMeta: false,\n isSubMeta: false,\n isHidden: false,\n getTagCallback: undefined,\n inputSchema: undefined,\n validateInputContext: false,\n outputSchema: undefined,\n validateOutputContext: false,\n retryCount: 3,\n retryDelay: 100,\n retryDelayMax: 0,\n retryDelayFactor: 1,\n ...options,\n };\n\n return new DatabaseTask(\n name,\n taskName,\n resolvedDatabaseServiceName,\n description,\n queryData,\n options.concurrency,\n options.timeout,\n options.register,\n options.isUnique,\n options.isMeta,\n options.isSubMeta,\n options.isHidden,\n options.getTagCallback,\n options.inputSchema,\n options.validateInputContext,\n options.outputSchema,\n options.validateOutputContext,\n options.retryCount,\n options.retryDelay,\n options.retryDelayMax,\n options.retryDelayFactor,\n );\n }\n\n /**\n * Creates a task for performing a database insert operation.\n *\n * @param {string} tableName - The name of the table where the insert operation will be performed.\n * @param {string | undefined} [databaseServiceName=undefined] - The name of the database service to use. Optional parameter, defaults to undefined.\n * @param {DbOperationPayload} [queryData={}] - The data payload for the insert operation. Defaults to an empty object.\n * @param {TaskOptions} [options={}] - Additional task options to configure the insert operation. Defaults to an empty object.\n * @return {object} A task configuration object for the database insert operation.\n */\n static createDatabaseInsertTask(\n tableName: string,\n databaseServiceName: string | undefined = undefined,\n queryData: DbOperationPayload = {},\n options: TaskOptions = {},\n ) {\n return this.createDatabaseTask(\n tableName,\n \"insert\",\n databaseServiceName,\n queryData,\n options,\n );\n }\n\n /**\n * Creates a database query task for the specified table and configuration.\n *\n * @param {string} tableName - The name of the database table to execute the query on.\n * @param {string | undefined} [databaseServiceName=undefined] - The name of the database service to use. If undefined, the default service will be used.\n * @param {DbOperationPayload} queryData - The payload containing the query data to be executed.\n * @param {TaskOptions} [options={}] - Optional parameters to configure the task execution.\n * @return {Task} The created database query task.\n */\n static createDatabaseQueryTask(\n tableName: string,\n databaseServiceName: string | undefined = undefined,\n queryData: DbOperationPayload,\n options: TaskOptions = {},\n ) {\n return this.createDatabaseTask(\n tableName,\n \"query\",\n databaseServiceName,\n queryData,\n options,\n );\n }\n\n /**\n * Creates a database task for the CadenzaDB with the specified parameters.\n *\n * @param {string} tableName - The name of the database table on which the operation will be performed.\n * @param {DbOperationType} operation - The type of database operation to execute (e.g., INSERT, UPDATE, DELETE).\n * @param {DbOperationPayload} queryData - The payload or data required to perform the database operation.\n * @param {TaskOptions} [options={}] - Additional options for the task, such as configuration settings.\n * @return {any} The result of creating the database task.\n */\n static createCadenzaDBTask(\n tableName: string,\n operation: DbOperationType,\n queryData: DbOperationPayload,\n options: TaskOptions = {},\n ) {\n options.isMeta = true;\n return this.createDatabaseTask(\n tableName,\n operation,\n \"CadenzaDB\",\n queryData,\n options,\n );\n }\n\n /**\n * Creates a database insert task specifically for the CadenzaDB database.\n *\n * @param {string} tableName - The name of the table into which the data will be inserted.\n * @param {DbOperationPayload} [queryData={}] - An object representing the data to be inserted.\n * @param {TaskOptions} [options={}] - Additional options to customize the task. The `isMeta` property is set to true by default.\n * @return {Task} A task object configured to perform an insert operation in the CadenzaDB database.\n */\n static createCadenzaDBInsertTask(\n tableName: string,\n queryData: DbOperationPayload = {},\n options: TaskOptions = {},\n ) {\n options.isMeta = true;\n return this.createDatabaseInsertTask(\n tableName,\n \"CadenzaDB\",\n queryData,\n options,\n );\n }\n\n /**\n * Creates a database query task specifically for the CadenzaDB.\n *\n * @param {string} tableName - The name of the database table to execute the query on.\n * @param {DbOperationPayload} queryData - The payload containing data and parameters for the database operation.\n * @param {TaskOptions} [options={}] - Additional options for the task configuration.\n * @return {any} The created task for executing a database query.\n */\n static createCadenzaDBQueryTask(\n tableName: string,\n queryData: DbOperationPayload,\n options: TaskOptions = {},\n ) {\n options.isMeta = true;\n return this.createDatabaseQueryTask(\n tableName,\n \"CadenzaDB\",\n queryData,\n options,\n );\n }\n\n /**\n * Creates a new Cadenza service with the specified configuration.\n *\n * @param {string} serviceName - The unique name of the service to create.\n * @param {string} [description] - An optional description of the service.\n * @param {ServerOptions} [options] - An optional object containing configuration options for the service.\n * @return {boolean} Returns true when the service is successfully created.\n */\n static createCadenzaService(\n serviceName: string,\n description: string = \"\",\n options: ServerOptions = {},\n ) {\n if (this.serviceCreated) return;\n this.bootstrap();\n this.validateName(serviceName);\n this.validateServiceName(serviceName);\n\n const serviceId = options.customServiceId ?? uuid();\n this.serviceRegistry.serviceName = serviceName;\n this.serviceRegistry.serviceInstanceId = serviceId;\n this.serviceRegistry.connectsToCadenzaDB = !!options.cadenzaDB?.connect;\n this.setHydrationResults(options.hydration);\n\n const explicitFrontendMode = options.isFrontend;\n\n options = {\n loadBalance: true,\n useSocket: true,\n displayName: undefined,\n isMeta: false,\n port: readIntegerEnv(\"HTTP_PORT\", 3000),\n securityProfile:\n (readStringEnv(\"SECURITY_PROFILE\") as SecurityProfile) ?? \"medium\",\n networkMode: (readStringEnv(\"NETWORK_MODE\") as NetworkMode) ?? \"dev\",\n retryCount: 3,\n cadenzaDB: {\n connect: true,\n },\n relatedServices: readListEnv(\"RELATED_SERVICES\"),\n isFrontend:\n typeof explicitFrontendMode === \"boolean\"\n ? explicitFrontendMode\n : isBrowser,\n ...options,\n };\n\n const isFrontend = !!options.isFrontend;\n const declaredTransports = this.normalizeDeclaredTransports(\n options.transports,\n serviceId,\n !!options.useSocket,\n );\n this.serviceRegistry.isFrontend = isFrontend;\n this.serviceRegistry.useSocket = !!options.useSocket;\n this.serviceRegistry.retryCount = options.retryCount ?? 3;\n this.ensureTransportControllers(isFrontend);\n\n if (!isFrontend) {\n this.createMetaTask(\n \"Initialize graph metadata controller after initial sync\",\n () => {\n GraphMetadataController.instance;\n return true;\n },\n \"Delays direct graph-metadata registration until the bootstrap sync has completed.\",\n {\n register: false,\n isHidden: true,\n },\n ).doOn(\"meta.service_registry.initial_sync_complete\");\n GraphSyncController.instance.isCadenzaDBReady =\n serviceName === \"CadenzaDB\";\n GraphSyncController.instance.init();\n }\n\n const resolvedBootstrapEndpoint = options.cadenzaDB?.connect\n ? resolveBootstrapEndpoint({\n runtime: isFrontend ? \"browser\" : \"server\",\n bootstrap: options.bootstrap,\n cadenzaDB: options.cadenzaDB,\n })\n : undefined;\n\n if (resolvedBootstrapEndpoint) {\n options.cadenzaDB = {\n ...options.cadenzaDB,\n connect: true,\n address: resolvedBootstrapEndpoint.address,\n port: resolvedBootstrapEndpoint.port,\n };\n }\n\n if (options.cadenzaDB?.connect) {\n this.emit(\"meta.initializing_service\", {\n // Seed the CadenzaDB\n serviceInstance: {\n uuid: \"cadenza-db\",\n serviceName: \"CadenzaDB\",\n numberOfRunningGraphs: 0,\n isActive: true, // Assume it is deployed\n isNonResponsive: false,\n isBlocked: false,\n health: {},\n isFrontend: false,\n isBootstrapPlaceholder: true,\n transports: resolvedBootstrapEndpoint\n ? [\n this.createBootstrapTransport(\n \"cadenza-db\",\n isFrontend ? \"public\" : \"internal\",\n resolvedBootstrapEndpoint,\n ),\n ]\n : [],\n },\n });\n }\n\n options.relatedServices?.forEach((service) => {\n const relatedTransport = normalizeServiceTransportConfig({\n role: isFrontend ? \"public\" : \"internal\",\n origin: service[2].includes(\"://\") ? service[2] : `http://${service[2]}`,\n protocols: options.useSocket ? [\"rest\", \"socket\"] : [\"rest\"],\n });\n this.emit(\"meta.initializing_service\", {\n serviceInstance: {\n uuid: service[0],\n serviceName: service[1],\n numberOfRunningGraphs: 0,\n isActive: true, // Assume it is deployed\n isNonResponsive: false,\n isBlocked: false,\n health: {},\n isFrontend: false,\n isBootstrapPlaceholder: true,\n transports: relatedTransport\n ? [\n {\n uuid: `${service[0]}-${relatedTransport.role}`,\n service_instance_id: service[0],\n role: relatedTransport.role,\n origin: relatedTransport.origin,\n protocols: relatedTransport.protocols ?? [\"rest\", \"socket\"],\n security_profile: relatedTransport.securityProfile ?? null,\n auth_strategy: relatedTransport.authStrategy ?? null,\n },\n ]\n : [],\n },\n });\n });\n\n const initContext = {\n data: {\n name: serviceName,\n description: description,\n displayName: options.displayName ?? \"\",\n isMeta: options.isMeta,\n },\n __registrationData: {\n name: serviceName,\n description: description,\n displayName: options.displayName ?? \"\",\n isMeta: options.isMeta,\n },\n __serviceName: serviceName,\n __serviceInstanceId: serviceId,\n __port: options.port,\n __loadBalance: options.loadBalance,\n __useSocket: options.useSocket,\n __securityProfile: options.securityProfile,\n __networkMode: options.networkMode,\n __retryCount: options.retryCount,\n __cadenzaDBConnect: options.cadenzaDB?.connect,\n __isDatabase: options.isDatabase,\n __isFrontend: isFrontend,\n __declaredTransports: declaredTransports,\n };\n\n if (options.cadenzaDB?.connect) {\n this.createEphemeralMetaTask(\"Create service\", async (context, emit) => {\n emit(\"meta.create_service_requested\", initContext);\n }).doOn(\"meta.fetch.handshake_complete\");\n } else {\n this.emit(\"meta.create_service_requested\", initContext);\n this.createMetaTask(\"Create signal transmission for sync\", (ctx, emit) => {\n emit(\n \"meta.service_registry.gathered_sync_transmission_reconcile_requested\",\n {\n serviceName: ctx.serviceName,\n __reason: \"handshake\",\n },\n );\n }).doOn(\"meta.rest.handshake\", \"meta.socket.handshake\");\n }\n\n this.createMetaTask(\"Handle service setup completion\", (ctx, emit) => {\n if (options.cadenzaDB?.connect) {\n this.serviceRegistry.bootstrapFullSync(emit, ctx, \"service_setup_completed\");\n }\n\n if (isFrontend) {\n registerActorSessionPersistenceTasks();\n this.ensureFrontendSyncLoop();\n }\n\n this.log(\"Service created.\");\n\n return true;\n }).doOn(\"meta.service_registry.instance_inserted\");\n\n if (!options.cadenzaDB?.connect && isFrontend) {\n Cadenza.schedule(\n \"meta.service_registry.instance_registration_requested\",\n {\n data: {\n uuid: serviceId,\n process_pid: 1,\n service_name: serviceName,\n is_frontend: true,\n is_active: true,\n is_non_responsive: false,\n is_blocked: false,\n health: {},\n },\n __registrationData: {\n uuid: serviceId,\n process_pid: 1,\n service_name: serviceName,\n is_frontend: true,\n is_active: true,\n is_non_responsive: false,\n is_blocked: false,\n health: {},\n },\n __transportData: declaredTransports.map((transport) => ({\n uuid: transport.uuid,\n service_instance_id: serviceId,\n role: transport.role,\n origin: transport.origin,\n protocols: transport.protocols ?? [\"rest\", \"socket\"],\n ...(transport.securityProfile\n ? { security_profile: transport.securityProfile }\n : {}),\n ...(transport.authStrategy\n ? { auth_strategy: transport.authStrategy }\n : {}),\n })),\n __serviceName: serviceName,\n __serviceInstanceId: serviceId,\n __useSocket: options.useSocket,\n __retryCount: options.retryCount,\n __isFrontend: true,\n __skipRemoteExecution: true,\n },\n 0,\n );\n }\n\n this.serviceCreated = true;\n }\n\n /**\n * Creates a Cadenza metadata service with the specified name, description, and options.\n *\n * @param {string} serviceName - The name of the metadata service to be created.\n * @param {string} description - A brief description of the metadata service.\n * @param {ServerOptions} [options={}] - Optional configuration for the metadata service. Defaults to an empty object.\n * @return {void} Does not return a value.\n */\n static createCadenzaMetaService(\n serviceName: string,\n description: string,\n options: ServerOptions = {},\n ) {\n options.isMeta = true;\n this.createCadenzaService(serviceName, description, options);\n }\n\n /**\n * Creates and initializes a specialized PostgresActor.\n * This is actor-only and does not create or register a network service.\n *\n * @param {string} name - Logical PostgresActor name.\n * @param {DatabaseSchemaDefinition} schema - Database schema definition.\n * @param {string} [description=\"\"] - Optional human-readable actor description.\n * @param {ServerOptions & DatabaseOptions} [options={}] - Actor/database runtime options.\n * @return {void}\n */\n static createPostgresActor(\n name: string,\n schema: DatabaseSchemaDefinition,\n description: string = \"\",\n options: ServerOptions & DatabaseOptions = {},\n ) {\n if (isBrowser || options.isFrontend) {\n console.warn(\n \"PostgresActor creation is not supported in frontend mode.\",\n );\n return;\n }\n\n this.bootstrap();\n this.validateName(name);\n const databaseController = DatabaseController.instance;\n\n const normalizedOptions = this.normalizePostgresActorOptions(name, options);\n\n const registration = databaseController.createPostgresActor(\n name,\n schema,\n description,\n normalizedOptions,\n );\n\n console.log(\"Creating PostgresActor\", {\n name,\n actorName: registration.actorName,\n ownerServiceName: normalizedOptions.ownerServiceName ?? null,\n options: normalizedOptions,\n });\n\n databaseController.requestPostgresActorSetup(registration, {\n actorName: registration.actorName,\n actorToken: registration.actorToken,\n databaseName: normalizedOptions.databaseName,\n ownerServiceName: normalizedOptions.ownerServiceName ?? null,\n });\n }\n\n /**\n * Creates a meta PostgresActor.\n *\n * @param {string} name - Logical PostgresActor name.\n * @param {DatabaseSchemaDefinition} schema - Database schema definition.\n * @param {string} [description=\"\"] - Optional description.\n * @param {ServerOptions & DatabaseOptions} [options={}] - Optional actor/database options.\n * @return {void}\n */\n static createMetaPostgresActor(\n name: string,\n schema: DatabaseSchemaDefinition,\n description: string = \"\",\n options: ServerOptions & DatabaseOptions = {},\n ) {\n this.bootstrap();\n options.isMeta = true;\n this.createPostgresActor(name, schema, description, options);\n }\n\n /**\n * Creates a dedicated database service by composing a PostgresActor and a Cadenza service.\n */\n static createDatabaseService(\n name: string,\n schema: DatabaseSchemaDefinition,\n description: string = \"\",\n options: ServerOptions & DatabaseOptions = {},\n ) {\n if (isBrowser || options.isFrontend) {\n console.warn(\n \"Database service creation is not supported in frontend mode. Use the CadenzaDB service instead.\",\n );\n return;\n }\n if (this.serviceCreated) return;\n\n this.bootstrap();\n this.validateName(name);\n this.validateServiceName(name);\n this.defaultDatabaseServiceName = name;\n\n const databaseController = DatabaseController.instance;\n const actorOptions = this.normalizePostgresActorOptions(name, {\n ...options,\n ownerServiceName: options.ownerServiceName ?? name,\n });\n const serviceOptions = this.normalizeDatabaseServiceOptions(name, {\n ...options,\n ownerServiceName: actorOptions.ownerServiceName,\n });\n\n const registration = databaseController.createPostgresActor(\n name,\n schema,\n description,\n actorOptions,\n );\n\n this.registerDatabaseServiceBridgeTask(\n name,\n description,\n schema,\n Boolean(serviceOptions.isMeta),\n registration.actorName,\n );\n\n const createServiceTaskName = `Create database service ${name} after ${registration.actorName} setup`;\n if (!this.get(createServiceTaskName)) {\n this.createMetaTask(\n createServiceTaskName,\n () => {\n this.createCadenzaService(name, description, serviceOptions);\n return true;\n },\n \"Creates the networked database service after PostgresActor setup completes.\",\n ).doOn(registration.setupDoneSignal);\n }\n\n const setupFailureTaskName = `Handle database service ${name} bootstrap failure`;\n if (!this.get(setupFailureTaskName)) {\n this.createMetaTask(\n setupFailureTaskName,\n (ctx) => {\n this.log(\n \"Database service bootstrap failed before service creation.\",\n {\n serviceName: name,\n actorName: registration.actorName,\n databaseName: registration.databaseName,\n error: ctx.__error,\n },\n \"error\",\n );\n return true;\n },\n \"Logs PostgresActor setup failures for database service bootstrap.\",\n ).doOn(registration.setupFailedSignal);\n }\n\n console.log(\"Creating database service wrapper\", {\n serviceName: name,\n actorName: registration.actorName,\n actorOptions,\n serviceOptions,\n });\n\n databaseController.requestPostgresActorSetup(registration, {\n actorName: registration.actorName,\n actorToken: registration.actorToken,\n databaseName: actorOptions.databaseName,\n ownerServiceName: actorOptions.ownerServiceName ?? name,\n });\n }\n\n /**\n * Creates a meta database service with the specified configuration.\n *\n * @param {string} name - The name of the database service to be created.\n * @param {DatabaseSchemaDefinition} schema - The schema definition for the database.\n * @param {string} [description=\"\"] - An optional description of the database service.\n * @param {ServerOptions & DatabaseOptions} [options={}] - Optional server and database configuration options. The `isMeta` flag will be automatically set to true.\n * @return {void} - This method does not return a value.\n */\n static createMetaDatabaseService(\n name: string,\n schema: DatabaseSchemaDefinition,\n description: string = \"\",\n options: ServerOptions & DatabaseOptions = {},\n ) {\n this.createDatabaseService(name, schema, description, {\n ...options,\n isMeta: true,\n });\n }\n\n private static normalizePostgresActorOptions(\n name: string,\n options: ServerOptions & DatabaseOptions = {},\n ): ServerOptions & DatabaseOptions {\n return {\n isMeta: false,\n retryCount: 3,\n databaseType: \"postgres\",\n databaseName: snakeCase(name),\n poolSize: readIntegerEnv(\"DATABASE_POOL_SIZE\", 10),\n ownerServiceName:\n options.ownerServiceName ?? this.serviceRegistry?.serviceName ?? null,\n ...options,\n };\n }\n\n private static normalizeDatabaseServiceOptions(\n name: string,\n options: ServerOptions & DatabaseOptions = {},\n ): ServerOptions & DatabaseOptions {\n return {\n loadBalance: true,\n useSocket: true,\n displayName: undefined,\n isMeta: false,\n port: readIntegerEnv(\"HTTP_PORT\", 3000),\n securityProfile:\n (readStringEnv(\"SECURITY_PROFILE\") as SecurityProfile) ?? \"medium\",\n networkMode: (readStringEnv(\"NETWORK_MODE\") as NetworkMode) ?? \"dev\",\n retryCount: 3,\n cadenzaDB: {\n connect: true,\n },\n databaseType: \"postgres\",\n databaseName: snakeCase(name),\n poolSize: readIntegerEnv(\"DATABASE_POOL_SIZE\", 10),\n isDatabase: true,\n ownerServiceName: options.ownerServiceName ?? name,\n ...options,\n };\n }\n\n private static registerDatabaseServiceBridgeTask(\n serviceName: string,\n description: string,\n schema: DatabaseSchemaDefinition,\n isMeta: boolean,\n actorName: string,\n ): void {\n const taskName = `Insert database service bridge ${serviceName}`;\n if (this.get(taskName)) {\n return;\n }\n\n this.createMetaTask(\n taskName,\n (ctx, emit) => {\n if (ctx.__serviceName && ctx.__serviceName !== serviceName) {\n return false;\n }\n\n emit(\"global.meta.created_database_service\", {\n data: {\n service_name: serviceName,\n description,\n schema,\n is_meta: isMeta,\n },\n });\n this.log(\"Database service created\", {\n name: serviceName,\n isMeta,\n actorName,\n });\n return true;\n },\n \"Bridges database service creation into the global metadata signal.\",\n ).doOn(\"meta.service_registry.service_inserted\");\n }\n\n static createActor<\n D extends Record<string, any> = AnyObject,\n R = AnyObject,\n >(\n spec: ActorSpec<D, R>,\n options: ActorFactoryOptions = {},\n ): Actor<D, R> {\n this.bootstrap();\n return Cadenza.createActor(spec, options as ActorFactoryOptions<D, R>);\n }\n\n static createActorFromDefinition<\n D extends Record<string, any> = AnyObject,\n R = AnyObject,\n >(\n definition: ActorDefinition<D, R>,\n options: ActorFactoryOptions<D, R> = {},\n ): Actor<D, R> {\n this.bootstrap();\n return Cadenza.createActorFromDefinition(definition, options);\n }\n\n /**\n * Creates and registers a new task with the provided name, function, and optional details.\n *\n * @param {string} name - The name of the task to be created.\n * @param {TaskFunction} func - The function that contains the task execution logic.\n * @param {string} [description] - An optional description of what the task does.\n * @param {TaskOptions} [options={}] - An optional configuration object specifying additional task options.\n * @return {Task} - The created task instance.\n *\n * @example\n * You can use arrow functions to create tasks.\n * ```ts\n * const task = Cadenza.createTask('My task', (ctx) => {\n * console.log('My task executed with context:', ctx);\n * }, 'My task description');\n * ```\n *\n * You can also use named functions to create tasks.\n * This is the preferred way to create tasks since it allows for code inspection in the CadenzaUI.\n * ```ts\n * function myTask(ctx) {\n * console.log('My task executed with context:', ctx);\n * }\n *\n * const task = Cadenza.createTask('My task', myTask);\n * ```\n *\n * ** Use the TaskOptions object to configure the task. **\n *\n * With concurrency limit, timeout limit and retry settings.\n * ```ts\n * Cadenza.createTask('My task', (ctx) => {\n * console.log('My task executed with context:', ctx);\n * }, 'My task description', {\n * concurrency: 10,\n * timeout: 10000,\n * retryCount: 3,\n * retryDelay: 1000,\n * retryDelayFactor: 1.5,\n * });\n * ```\n *\n * You can specify the input and output context schemas for the task.\n * ```ts\n * Cadenza.createTask('My task', (ctx) => {\n * return { bar: 'foo' + ctx.foo };\n * }, 'My task description', {\n * inputContextSchema: {\n * type: 'object',\n * properties: {\n * foo: {\n * type: 'string',\n * },\n * },\n * required: ['foo'],\n * },\n * validateInputContext: true, // default is false\n * outputContextSchema: {\n * type: 'object',\n * properties: {\n * bar: {\n * type: 'string',\n * },\n * },\n * required: ['bar'],\n * },\n * validateOutputContext: true, // default is false\n * });\n * ```\n */\n static createTask(\n name: string,\n func: TaskFunction,\n description?: string,\n options: TaskOptions = {},\n ): Task {\n this.bootstrap();\n return Cadenza.createTask(name, func, description, options);\n }\n\n /**\n * Creates a meta task with the specified name, functionality, description, and options.\n * This is used for creating tasks that lives on the meta layer.\n * The meta layer is a special layer that is executed separately from the business logic layer and is used for extending Cadenzas core functionality.\n * See {@link Task} or {@link createTask} for more information.\n *\n * @param {string} name - The name of the meta task.\n * @param {TaskFunction} func - The function to be executed by the meta task.\n * @param {string} [description] - An optional description of the meta task.\n * @param {TaskOptions} [options={}] - Additional optional task configuration. Automatically sets `isMeta` to true.\n * @return {Task} A task instance configured as a meta task.\n */\n static createMetaTask(\n name: string,\n func: TaskFunction,\n description?: string,\n options: TaskOptions = {},\n ): Task {\n this.bootstrap();\n return Cadenza.createMetaTask(name, func, description, options);\n }\n\n /**\n * Creates a unique task by wrapping the provided task function with a uniqueness constraint.\n * Unique tasks are designed to execute once per execution ID, merging parents. This is useful for\n * tasks that require fan-in/joins after parallel branches.\n * See {@link Task} for more information.\n * @param {string} name Unique identifier.\n * @param {TaskFunction} func Function receiving joinedContexts as a list (context.joinedContexts).\n * @param {string} [description] Optional description.\n * @param {TaskOptions} [options={}] Optional task options.\n * @returns {Task} The created UniqueTask.\n *\n * @example\n * ```ts\n * const splitTask = Cadenza.createTask('Split foos', function* (ctx) {\n * for (const foo of ctx.foos) {\n * yield { foo };\n * }\n * }, 'Splits a list of foos into multiple sub-branches');\n *\n * const processTask = Cadenza.createTask('Process foo', (ctx) => {\n * return { bar: 'foo' + ctx.foo };\n * }, 'Process a foo');\n *\n * const uniqueTask = Cadenza.createUniqueTask('Gather processed foos', (ctx) => {\n * // A unique task will always be provided with a list of contexts (ctx.joinedContexts) from its predecessors.\n * const processedFoos = ctx.joinedContexts.map((c) => c.bar);\n * return { foos: processedFoos };\n * }, 'Gathers together the processed foos.');\n *\n * splitTask.then(\n * processTask.then(\n * uniqueTask,\n * ),\n * );\n *\n * // Give the flow a name using a routine\n * Cadenza.createRoutine(\n * 'Process foos',\n * [splitTask],\n * 'Processes a list of foos'\n * ).doOn('main.received_foos'); // Subscribe to a signal\n *\n * // Trigger the flow from anywhere\n * Cadenza.emit('main.received_foos', { foos: ['foo1', 'foo2', 'foo3'] });\n * ```\n */\n static createUniqueTask(\n name: string,\n func: TaskFunction,\n description?: string,\n options: TaskOptions = {},\n ): Task {\n this.bootstrap();\n return Cadenza.createUniqueTask(name, func, description, options);\n }\n\n /**\n * Creates a unique meta task with the specified name, function, description, and options.\n * See {@link createUniqueTask} and {@link createMetaTask} for more information.\n *\n * @param {string} name - The name of the task to create.\n * @param {TaskFunction} func - The function to execute when the task is run.\n * @param {string} [description] - An optional description of the task.\n * @param {TaskOptions} [options={}] - Optional settings for the task. Defaults to an empty object. Automatically sets `isMeta` and `isUnique` to true.\n * @return {Task} The created unique meta task.\n */\n static createUniqueMetaTask(\n name: string,\n func: TaskFunction,\n description?: string,\n options: TaskOptions = {},\n ): Task {\n this.bootstrap();\n return Cadenza.createUniqueMetaTask(name, func, description, options);\n }\n\n /**\n * Creates a throttled task with a concurrency limit of 1, ensuring that only one instance of the task can run at a time for a specific throttle tag.\n * This is useful for ensuring execution order and preventing race conditions.\n * See {@link Task} for more information.\n *\n * @param {string} name - The name of the task.\n * @param {TaskFunction} func - The function to be executed when the task runs.\n * @param {ThrottleTagGetter} [throttledIdGetter=() => \"default\"] - A function that generates a throttle tag identifier to group tasks for throttling.\n * @param {string} [description] - An optional description of the task.\n * @param {TaskOptions} [options={}] - Additional options to customize the task behavior.\n * @return {Task} The created throttled task.\n *\n * @example\n * ```ts\n * const task = Cadenza.createThrottledTask(\n * 'My task',\n * async (ctx) => {\n * await new Promise((resolve) => setTimeout(resolve, 1000));\n * console.log('My task executed with context:', ctx);\n * },\n * // Will throttle by the value of ctx.foo to make sure tasks with the same value are executed sequentially\n * (ctx) => ctx.foo,\n * );\n *\n * Cadenza.run(task, { foo: 'bar' }); // (First execution)\n * Cadenza.run(task, { foo: 'bar' }); // This will be executed after the first execution is finished\n * Cadenza.run(task, { foo: 'baz' }); // This will be executed in parallel with the first execution\n * ```\n */\n static createThrottledTask(\n name: string,\n func: TaskFunction,\n throttledIdGetter: ThrottleTagGetter = () => \"default\",\n description?: string,\n options: TaskOptions = {},\n ): Task {\n this.bootstrap();\n return Cadenza.createThrottledTask(\n name,\n func,\n throttledIdGetter,\n description,\n options,\n );\n }\n\n /**\n * Creates a throttled meta task with the specified configuration.\n * See {@link createThrottledTask} and {@link createMetaTask} for more information.\n *\n * @param {string} name - The name of the throttled meta task.\n * @param {TaskFunction} func - The task function to be executed.\n * @param {ThrottleTagGetter} throttledIdGetter - A function to retrieve the throttling identifier.\n * @param {string} [description] - An optional description of the task.\n * @param {TaskOptions} [options={}] - Additional options for configuring the task.\n * @return {Task} The created throttled meta task.\n */\n static createThrottledMetaTask(\n name: string,\n func: TaskFunction,\n throttledIdGetter: ThrottleTagGetter = () => \"default\",\n description?: string,\n options: TaskOptions = {},\n ): Task {\n this.bootstrap();\n return Cadenza.createThrottledMetaTask(\n name,\n func,\n throttledIdGetter,\n description,\n options,\n );\n }\n\n /**\n * Creates and returns a new debounced task with the specified parameters.\n * This is useful to prevent rapid execution of tasks that may be triggered by multiple events within a certain time frame.\n * See {@link DebounceTask} for more information.\n *\n * @param {string} name - The unique name of the task to be created.\n * @param {TaskFunction} func - The function to be executed by the task.\n * @param {string} [description] - An optional description of the task.\n * @param {number} [debounceTime=1000] - The debounce time in milliseconds to delay the execution of the task.\n * @param {TaskOptions & DebounceOptions} [options={}] - Additional configuration options for the task, including debounce behavior and other task properties.\n * @return {DebounceTask} A new instance of the DebounceTask with the specified configuration.\n *\n * @example\n * ```ts\n * const task = Cadenza.createDebounceTask(\n * 'My debounced task',\n * (ctx) => {\n * console.log('My task executed with context:', ctx);\n * },\n * 'My debounced task description',\n * 100, // Debounce time in milliseconds. Default is 1000\n * {\n * leading: false, // Should the first execution of a burst be executed immediately? Default is false\n * trailing: true, // Should the last execution of a burst be executed? Default is true\n * maxWait: 1000, // Maximum time in milliseconds to wait for the next execution. Default is 0\n * },\n * );\n *\n * Cadenza.run(task, { foo: 'bar' }); // This will not be executed\n * Cadenza.run(task, { foo: 'bar' }); // This will not be executed\n * Cadenza.run(task, { foo: 'baz' }); // This execution will be delayed by 100ms\n * ```\n */\n static createDebounceTask(\n name: string,\n func: TaskFunction,\n description?: string,\n debounceTime: number = 1000,\n options: TaskOptions & DebounceOptions = {},\n ): DebounceTask {\n this.bootstrap();\n return Cadenza.createDebounceTask(\n name,\n func,\n description,\n debounceTime,\n options,\n );\n }\n\n /**\n * Creates a debounced meta task with the specified parameters.\n * See {@link createDebounceTask} and {@link createMetaTask} for more information.\n *\n * @param {string} name - The name of the task.\n * @param {TaskFunction} func - The function to be executed by the task.\n * @param {string} [description] - Optional description of the task.\n * @param {number} [debounceTime=1000] - The debounce delay in milliseconds.\n * @param {TaskOptions & DebounceOptions} [options={}] - Additional configuration options for the task.\n * @return {DebounceTask} Returns an instance of the debounced meta task.\n */\n static createDebounceMetaTask(\n name: string,\n func: TaskFunction,\n description?: string,\n debounceTime: number = 1000,\n options: TaskOptions & DebounceOptions = {},\n ): DebounceTask {\n this.bootstrap();\n return Cadenza.createDebounceMetaTask(\n name,\n func,\n description,\n debounceTime,\n options,\n );\n }\n\n /**\n * Creates an ephemeral task with the specified configuration.\n * Ephemeral tasks are designed to self-destruct after execution or a certain condition is met.\n * This is useful for transient tasks such as resolving promises or performing cleanup operations.\n * They are not registered by default.\n * See {@link EphemeralTask} for more information.\n *\n * @param {string} name - The name of the task to be created.\n * @param {TaskFunction} func - The function that defines the logic of the task.\n * @param {string} [description] - An optional description of the task.\n * @param {TaskOptions & EphemeralTaskOptions} [options={}] - The configuration options for the task, including concurrency, timeouts, and retry policies.\n * @return {EphemeralTask} The created ephemeral task instance.\n *\n * @example\n * By default, ephemeral tasks are executed once and destroyed after execution.\n * ```ts\n * const task = Cadenza.createEphemeralTask('My ephemeral task', (ctx) => {\n * console.log('My task executed with context:', ctx);\n * });\n *\n * Cadenza.run(task); // Executes the task once and destroys it after execution\n * Cadenza.run(task); // Does nothing, since the task is destroyed\n * ```\n *\n * Use destroy condition to conditionally destroy the task\n * ```ts\n * const task = Cadenza.createEphemeralTask(\n * 'My ephemeral task',\n * (ctx) => {\n * console.log('My task executed with context:', ctx);\n * },\n * 'My ephemeral task description',\n * {\n * once: false, // Should the task be executed only once? Default is true\n * destroyCondition: (ctx) => ctx.foo > 10, // Should the task be destroyed after execution? Default is undefined\n * },\n * );\n *\n * Cadenza.run(task, { foo: 5 }); // The task will not be destroyed and can still be executed\n * Cadenza.run(task, { foo: 10 }); // The task will not be destroyed and can still be executed\n * Cadenza.run(task, { foo: 20 }); // The task will be destroyed after execution and cannot be executed anymore\n * Cadenza.run(task, { foo: 30 }); // This will not be executed\n * ```\n *\n * A practical use case for ephemeral tasks is to resolve a promise upon some external event.\n * ```ts\n * const task = Cadenza.createTask('Confirm something', (ctx, emit) => {\n * return new Promise((resolve) => {\n * ctx.foo = uuid();\n *\n * Cadenza.createEphemeralTask(`Resolve promise of ${ctx.foo}`, (c) => {\n * console.log('My task executed with context:', ctx);\n * resolve(c);\n * }).doOn(`socket.confirmation_received:${ctx.foo}`);\n *\n * emit('this_domain.confirmation_requested', ctx);\n * });\n * });\n * ```\n */\n static createEphemeralTask(\n name: string,\n func: TaskFunction,\n description?: string,\n options: TaskOptions & EphemeralTaskOptions = {},\n ): EphemeralTask {\n this.bootstrap();\n return Cadenza.createEphemeralTask(name, func, description, options);\n }\n\n /**\n * Creates an ephemeral meta-task with the specified name, function, description, and options.\n * See {@link createEphemeralTask} and {@link createMetaTask} for more details.\n *\n * @param {string} name - The name of the task to be created.\n * @param {TaskFunction} func - The function to be executed as part of the task.\n * @param {string} [description] - An optional description of the task.\n * @param {TaskOptions & EphemeralTaskOptions} [options={}] - Additional options for configuring the task.\n * @return {EphemeralTask} The created ephemeral meta-task.\n */\n static createEphemeralMetaTask(\n name: string,\n func: TaskFunction,\n description?: string,\n options: TaskOptions & EphemeralTaskOptions = {},\n ): EphemeralTask {\n this.bootstrap();\n return Cadenza.createEphemeralMetaTask(name, func, description, options);\n }\n\n /**\n * Creates a new routine with the specified name, tasks, and an optional description.\n * Routines are named entry points to starting tasks and are registered in the GraphRegistry.\n * They are used to group tasks together and provide a high-level structure for organizing and managing the execution of a set of tasks.\n * See {@link GraphRoutine} for more information.\n *\n * @param {string} name - The name of the routine to create.\n * @param {Task[]} tasks - A list of tasks to include in the routine.\n * @param {string} [description=\"\"] - An optional description for the routine.\n * @return {GraphRoutine} A new instance of the GraphRoutine containing the specified tasks and description.\n *\n * @example\n * ```ts\n * const task1 = Cadenza.createTask(\"Task 1\", () => {});\n * const task2 = Cadenza.createTask(\"Task 2\", () => {});\n *\n * task1.then(task2);\n *\n * const routine = Cadenza.createRoutine(\"Some routine\", [task1]);\n *\n * Cadenza.run(routine);\n *\n * // Or, routines can be triggered by signals\n * routine.doOn(\"some.signal\");\n *\n * Cadenza.emit(\"some.signal\", {});\n * ```\n */\n static createRoutine(\n name: string,\n tasks: Task[],\n description: string = \"\",\n ): GraphRoutine {\n this.bootstrap();\n return Cadenza.createRoutine(name, tasks, description);\n }\n\n /**\n * Creates a meta routine with a given name, tasks, and optional description.\n * Routines are named entry points to starting tasks and are registered in the GraphRegistry.\n * They are used to group tasks together and provide a high-level structure for organizing and managing the execution of a set of tasks.\n * See {@link GraphRoutine} and {@link createRoutine} for more information.\n *\n * @param {string} name - The name of the routine to be created.\n * @param {Task[]} tasks - An array of tasks that the routine will consist of.\n * @param {string} [description=\"\"] - An optional description for the routine.\n * @return {GraphRoutine} A new instance of the `GraphRoutine` representing the created routine.\n */\n static createMetaRoutine(\n name: string,\n tasks: Task[],\n description: string = \"\",\n ): GraphRoutine {\n this.bootstrap();\n return Cadenza.createMetaRoutine(name, tasks, description);\n }\n\n static reset() {\n Cadenza.reset();\n this.serviceRegistry?.reset();\n this.isBootstrapped = false;\n this.serviceCreated = false;\n this.defaultDatabaseServiceName = null;\n this.warnedInvalidMetaIntentResponderKeys = new Set();\n this.hydratedInquiryResults = new Map();\n this.frontendSyncScheduled = false;\n }\n}\n","import { v4 as uuid } from \"uuid\";\nimport { GraphContext, InquiryOptions, Task } from \"@cadenza.io/core\";\nimport type {\n AnyObject,\n Schema,\n TaskResult,\n ThrottleTagGetter,\n} from \"@cadenza.io/core\";\nimport Cadenza from \"../../Cadenza\";\n\n/**\n * Represents a task that delegates execution of a routine to a remote system or service.\n * The `DeputyTask` serves as a proxy to perform and track the progress of a remote workflow.\n * It extends the `Task` class with additional delegation capabilities.\n *\n * Emits various meta-signals for monitoring delegation progress and resolution.\n */\nexport default class DeputyTask extends Task {\n readonly isDeputy: boolean = true;\n\n protected readonly remoteRoutineName: string;\n protected serviceName: string | undefined;\n\n registeredDeputyMap: boolean = false;\n\n /**\n * Constructs a new instance of the class with the specified parameters.\n *\n * @param {string} name - The name of the task.\n * @param {string} remoteRoutineName - The name of the remote routine to delegate tasks to.\n * @param {string | undefined} [serviceName=undefined] - The name of the service associated with the task.\n * @param {string} [description=\"\"] - A brief description of the task.\n * @param {number} [concurrency=0] - The concurrency level of the task.\n * @param {number} [timeout=0] - The timeout duration for the task.\n * @param {boolean} [register=true] - Whether the task should be registered in the system.\n * @param {boolean} [isUnique=false] - Whether the task is unique.\n * @param {boolean} [isMeta=false] - Whether the task is a meta task.\n * @param {boolean} [isSubMeta=false] - Whether the task is a sub-meta task.\n * @param {boolean} [isHidden=false] - Whether the task is hidden from the system.\n * @param {ThrottleTagGetter | undefined} [getTagCallback=undefined] - A callback function to retrieve throttle tags.\n * @param {SchemaDefinition | undefined} [inputSchema=undefined] - The input schema definition for the task.\n * @param {boolean} [validateInputContext=false] - Whether to validate the input context against the input schema.\n * @param {SchemaDefinition | undefined} [outputSchema=undefined] - The output schema definition for the task.\n * @param {boolean} [validateOutputContext=false] - Whether to validate the output context against the output schema.\n * @param {number} [retryCount=0] - The number of retries allowed for task execution.\n * @param {number} [retryDelay=0] - The initial delay between retries in milliseconds.\n * @param {number} [retryDelayMax=0] - The maximum retry delay in milliseconds.\n * @param {number} [retryDelayFactor=1] - The factor by which to increase the retry delay for subsequent retries.\n * @return {void} This constructor does not return a value.\n */\n constructor(\n name: string,\n remoteRoutineName: string,\n serviceName: string | undefined = undefined,\n description: string = \"\",\n concurrency: number = 0,\n timeout: number = 0,\n register: boolean = true,\n isUnique: boolean = false,\n isMeta: boolean = false,\n isSubMeta: boolean = false,\n isHidden: boolean = false,\n getTagCallback: ThrottleTagGetter | undefined = undefined,\n inputSchema: Schema | undefined = undefined,\n validateInputContext: boolean = false,\n outputSchema: Schema | undefined = undefined,\n validateOutputContext: boolean = false,\n retryCount: number = 0,\n retryDelay: number = 0,\n retryDelayMax: number = 0,\n retryDelayFactor: number = 1,\n ) {\n const taskFunction = (\n context: AnyObject,\n emit: (signal: string, ctx: AnyObject) => void,\n inquire: (\n inquiry: string,\n context: AnyObject,\n options: InquiryOptions,\n ) => Promise<AnyObject>,\n progressCallback: (progress: number) => void,\n ): Promise<TaskResult> => {\n return new Promise((resolve, reject) => {\n if (context.__metadata.__blockRemoteExecution) {\n reject(new Error(\"Blocked remote execution\"));\n return;\n }\n\n if (context.__metadata.__skipRemoteExecution) {\n resolve(context);\n return;\n }\n\n const processId = uuid();\n\n context.__metadata.__deputyExecId = processId;\n emit(\"meta.deputy.delegation_requested\", {\n ...context,\n });\n\n // Ephemeral meta-task for progress\n Cadenza.createEphemeralMetaTask(\n `On progress deputy ${this.remoteRoutineName}`,\n (ctx) => {\n if (ctx.progress) progressCallback(ctx.progress * ctx.weight);\n },\n `Ephemeral task for deputy process ${processId}`,\n {\n once: false,\n destroyCondition: (ctx: AnyObject) =>\n ctx.progress === 1 || ctx.progress === undefined,\n register: false,\n },\n ).doOn(\n `meta.socket_client.delegation_progress:${processId}`,\n `meta.socket_client.delegated:${processId}`,\n `meta.fetch.delegated:${processId}`,\n `meta.service_registry.load_balance_failed:${processId}`,\n );\n\n // Ephemeral meta-task for resolution\n Cadenza.createEphemeralMetaTask(\n `Resolve deputy ${this.remoteRoutineName}`,\n (responseCtx) => {\n if (responseCtx?.errored) {\n reject(new Error(responseCtx.__error));\n } else {\n // TODO clean up metadata\n delete responseCtx.__isDeputy;\n resolve(responseCtx);\n }\n },\n `Ephemeral resolver for deputy process ${processId}`,\n { register: false },\n ).doOn(\n `meta.socket_client.delegated:${processId}`,\n `meta.fetch.delegated:${processId}`,\n `meta.service_registry.load_balance_failed:${processId}`,\n );\n });\n };\n\n super(\n name,\n taskFunction,\n description,\n concurrency,\n timeout,\n register,\n isUnique,\n isMeta,\n isSubMeta,\n isHidden,\n getTagCallback,\n inputSchema,\n validateInputContext,\n outputSchema,\n validateOutputContext,\n retryCount,\n retryDelay,\n retryDelayMax,\n retryDelayFactor,\n );\n\n this.remoteRoutineName = remoteRoutineName;\n this.serviceName = serviceName;\n\n this.attachSignal(\"meta.deputy.delegation_requested\");\n\n this.emit(\"meta.deputy.created\", {\n localTaskName: this.name,\n localTaskVersion: this.version,\n remoteRoutineName: this.remoteRoutineName,\n serviceName: this.serviceName,\n communicationType: \"delegation\",\n });\n }\n\n /**\n * Executes the specified task function within the provided execution context.\n *\n * @param {GraphContext} context - The execution context containing methods and metadata for task execution.\n * @param {function(string, AnyObject): void} emit - A function for emitting signals with associated data during execution.\n * @param inquire\n * @param {function(number): void} progressCallback - A callback function to report progress updates during task processing.\n * @param {{ nodeId: string, routineExecId: string }} nodeData - Object containing identifiers for the node and routine execution.\n * @return {TaskResult} Returns the result of the task function execution.\n */\n execute(\n context: GraphContext,\n emit: (signal: string, ctx: AnyObject) => void,\n inquire: (\n inquiry: string,\n context: AnyObject,\n options: InquiryOptions,\n ) => Promise<AnyObject>,\n progressCallback: (progress: number) => void,\n nodeData: { nodeId: string; routineExecId: string },\n ): TaskResult {\n const ctx = context.getContext();\n const metadata = context.getMetadata();\n\n const deputyContext = {\n __timeout: this.timeout,\n __localTaskName: this.name,\n __localTaskVersion: this.version,\n __localServiceName: Cadenza.serviceRegistry.serviceName,\n __previousTaskExecutionId: nodeData.nodeId,\n __remoteRoutineName: this.remoteRoutineName,\n __serviceName: this.serviceName,\n __localRoutineExecId:\n metadata.__routineExecId ?? metadata.__metadata?.__routineExecId,\n __executionTraceId: metadata.__executionTraceId ?? null,\n __metadata: {\n ...metadata,\n __skipRemoteExecution:\n metadata.__skipRemoteExecution ?? ctx.__skipRemoteExecution ?? false,\n __blockRemoteExecution:\n metadata.__blockRemoteExecution ?? ctx.__blockRemoteExecution ?? false,\n __deputyTaskName: this.name,\n },\n ...ctx,\n };\n\n return this.taskFunction(deputyContext, emit, inquire, progressCallback);\n }\n}\n","import DeputyTask from \"./DeputyTask\";\nimport { GraphContext, InquiryOptions } from \"@cadenza.io/core\";\nimport type {\n AnyObject,\n Schema,\n TaskResult,\n ThrottleTagGetter,\n} from \"@cadenza.io/core\";\nimport { DbOperationPayload } from \"../../types/queryData\";\nimport Cadenza from \"../../Cadenza\";\n\n/**\n * Represents a specialized task for delegating database operations. Extends `DeputyTask`.\n * This class is designed to abstract database operation requests, delegating execution to a meta-layer system.\n */\nexport default class DatabaseTask extends DeputyTask {\n private readonly queryData: DbOperationPayload;\n\n /**\n * Constructs an instance of the class with the provided parameters, defining\n * various configuration options and behaviors for the task.\n *\n * @param {string} name - The unique name of the task.\n * @param {string} taskName - The specific name of the task.\n * @param {string | undefined} serviceName - The associated service name. Defaults to undefined.\n * @param {string} description - A brief description of the task. Defaults to an empty string.\n * @param {DbOperationPayload} queryData - The data payload for database operations.\n * @param {number} concurrency - The level of concurrency allowed. Defaults to 0.\n * @param {number} timeout - The timeout duration in milliseconds. Defaults to 0.\n * @param {boolean} register - A flag indicating whether to register the task. Defaults to true.\n * @param {boolean} isUnique - Indicates if the task instance is unique. Defaults to false.\n * @param {boolean} isMeta - Indicates if the task is meta. Defaults to false.\n * @param {boolean} isSubMeta - Indicates if the task is a sub-meta task. Defaults to false.\n * @param {boolean} isHidden - Indicates if the task is hidden. Defaults to false.\n * @param {ThrottleTagGetter | undefined} getTagCallback - A callback used for throttling. Defaults to undefined.\n * @param {SchemaDefinition | undefined} inputSchema - The schema definition for input validation. Defaults to undefined.\n * @param {boolean} validateInputContext - Whether to validate the input context. Defaults to false.\n * @param {SchemaDefinition | undefined} outputSchema - The schema definition for output validation. Defaults to undefined.\n * @param {boolean} validateOutputContext - Whether to validate the output context. Defaults to false.\n * @param {number} retryCount - The maximum number of retry attempts. Defaults to 0.\n * @param {number} retryDelay - The delay between retries in milliseconds. Defaults to 0.\n * @param {number} retryDelayMax - The maximum delay between retries in milliseconds. Defaults to 0.\n * @param {number} retryDelayFactor - The factor for exponential backoff. Defaults to 1.\n * @return {void}\n */\n constructor(\n name: string,\n taskName: string,\n serviceName: string | undefined = undefined,\n description: string = \"\",\n queryData: DbOperationPayload,\n concurrency: number = 0,\n timeout: number = 0,\n register: boolean = true,\n isUnique: boolean = false,\n isMeta: boolean = false,\n isSubMeta: boolean = false,\n isHidden: boolean = false,\n getTagCallback: ThrottleTagGetter | undefined = undefined,\n inputSchema: Schema | undefined = undefined,\n validateInputContext: boolean = false,\n outputSchema: Schema | undefined = undefined,\n validateOutputContext: boolean = false,\n retryCount: number = 0,\n retryDelay: number = 0,\n retryDelayMax: number = 0,\n retryDelayFactor: number = 1,\n ) {\n super(\n name,\n taskName,\n serviceName,\n description,\n concurrency,\n timeout,\n register,\n isUnique,\n isMeta,\n isSubMeta,\n isHidden,\n getTagCallback,\n inputSchema,\n validateInputContext,\n outputSchema,\n validateOutputContext,\n retryCount,\n retryDelay,\n retryDelayMax,\n retryDelayFactor,\n );\n this.queryData = queryData;\n }\n\n /**\n * Executes the specified task within the given context.\n *\n * @param {GraphContext} context - The execution context for the current task, which includes data and metadata required for processing.\n * @param {(signal: string, ctx: AnyObject) => void} emit - A function used to send signals or events during task execution.\n * @param inquire\n * @param {(progress: number) => void} progressCallback - A function to report execution progress as a percentage (0-100).\n * @param {{ nodeId: string; routineExecId: string }} nodeData - An object containing identifiers for the current node and routine execution.\n * @return {TaskResult} The result of the task execution.\n */\n execute(\n context: GraphContext,\n emit: (signal: string, ctx: AnyObject) => void,\n inquire: (\n inquiry: string,\n context: AnyObject,\n options: InquiryOptions,\n ) => Promise<AnyObject>,\n progressCallback: (progress: number) => void,\n nodeData: { nodeId: string; routineExecId: string },\n ): TaskResult {\n const ctx = context.getContext();\n const metadata = context.getMetadata();\n const dynamicQueryData = ctx.queryData ?? {};\n delete ctx.queryData;\n const nextQueryData: DbOperationPayload = {\n ...this.queryData,\n data: {\n ...ctx.data,\n },\n ...dynamicQueryData,\n };\n\n const deputyContext = {\n ...ctx,\n __localTaskName: this.name,\n __localTaskVersion: this.version,\n __localServiceName: Cadenza.serviceRegistry.serviceName,\n __previousTaskExecutionId: nodeData.nodeId,\n __remoteRoutineName: this.remoteRoutineName,\n __serviceName: this.serviceName,\n __executionTraceId: metadata.__executionTraceId ?? null,\n __localRoutineExecId:\n metadata.__routineExecId ?? metadata.__metadata?.__routineExecId,\n __metadata: {\n ...metadata,\n __skipRemoteExecution:\n metadata.__skipRemoteExecution ?? ctx.__skipRemoteExecution ?? false,\n __blockRemoteExecution:\n metadata.__blockRemoteExecution ?? ctx.__blockRemoteExecution ?? false,\n __deputyTaskName: this.name,\n },\n data: nextQueryData.data ?? ctx.data,\n batch: nextQueryData.batch ?? ctx.batch,\n transaction: nextQueryData.transaction ?? ctx.transaction,\n onConflict: Object.prototype.hasOwnProperty.call(nextQueryData, \"onConflict\")\n ? nextQueryData.onConflict\n : undefined,\n filter: nextQueryData.filter ?? ctx.filter,\n fields: nextQueryData.fields ?? ctx.fields,\n queryData: nextQueryData,\n };\n\n return this.taskFunction(deputyContext, emit, inquire, progressCallback);\n }\n}\n","import { GraphRoutine, Task } from \"@cadenza.io/core\";\nimport type { AnyObject } from \"@cadenza.io/core\";\nimport { v4 as uuid } from \"uuid\";\nimport Cadenza from \"../Cadenza\";\nimport { isBrowser } from \"../utils/environment\";\nimport { InquiryResponderDescriptor } from \"../types/inquiry\";\nimport type { ServiceInstanceDescriptor } from \"../types/serviceRegistry\";\nimport type {\n ServiceTransportDescriptor,\n ServiceTransportProtocol,\n ServiceTransportRole,\n} from \"../types/transport\";\nimport {\n isMetaIntentName,\n META_READINESS_INTENT,\n META_RUNTIME_STATUS_INTENT,\n META_RUNTIME_TRANSPORT_DIAGNOSTICS_INTENT,\n} from \"../utils/inquiry\";\nimport {\n getRouteableTransport,\n normalizeServiceInstanceDescriptor,\n} from \"../utils/serviceInstance\";\nimport {\n buildTransportClientKey,\n normalizeServiceTransportDescriptor,\n transportSupportsProtocol,\n} from \"../utils/transport\";\nimport { ensureDelegationContextMetadata } from \"../utils/delegation\";\nimport {\n evaluateDependencyReadiness,\n resolveServiceReadinessState,\n summarizeDependencyReadiness,\n type DependencyReadinessState,\n type ReadinessState,\n} from \"../utils/readiness\";\nimport {\n hasSignificantRuntimeStatusChange,\n resolveRuntimeStatus,\n runtimeStatusPriority,\n type RuntimeStatusSnapshot,\n type RuntimeStatusState,\n} from \"../utils/runtimeStatus\";\n\nconst META_SERVICE_REGISTRY_FULL_SYNC_INTENT =\n \"meta-service-registry-full-sync\";\nconst CADENZA_DB_GATHERED_SYNC_SIGNAL =\n \"global.meta.cadenza_db.gathered_sync_data\";\nconst META_GATHERED_SYNC_TRANSMISSION_RECONCILE_SIGNAL =\n \"meta.service_registry.gathered_sync_transmission_reconcile_requested\";\nconst META_RUNTIME_STATUS_HEARTBEAT_TICK_SIGNAL =\n \"meta.service_registry.runtime_status.heartbeat_tick\";\nconst META_RUNTIME_STATUS_MONITOR_TICK_SIGNAL =\n \"meta.service_registry.runtime_status.monitor_tick\";\nconst EARLY_FULL_SYNC_DELAYS_MS = [\n 100,\n 1500,\n 5000,\n 12000,\n 25000,\n 45000,\n 70000,\n] as const;\nconst BOOTSTRAP_FULL_SYNC_RESPONDER_TASKS = [\n \"Query service_instance\",\n \"Query service_instance_transport\",\n \"Query signal_to_task_map\",\n \"Query intent_to_task_map\",\n] as const;\nconst INTERNAL_RUNTIME_STATUS_TASK_NAMES = new Set([\n \"Track local routine start\",\n \"Track local routine end\",\n \"Start runtime status sharing intervals\",\n \"Broadcast runtime status\",\n \"Monitor dependee heartbeat freshness\",\n \"Resolve runtime status fallback inquiry\",\n \"Respond runtime status inquiry\",\n \"Respond readiness inquiry\",\n \"Collect distributed readiness\",\n \"Get status\",\n]);\n\nfunction buildServiceRegistryInsertQueryData(\n ctx: AnyObject,\n queryData: Record<string, unknown>,\n): Record<string, unknown> {\n const joinedContexts = Array.isArray((ctx as AnyObject).joinedContexts)\n ? ((ctx as AnyObject).joinedContexts as AnyObject[])\n : [];\n const getJoinedValue = (key: \"data\" | \"batch\" | \"__registrationData\") => {\n for (let index = joinedContexts.length - 1; index >= 0; index -= 1) {\n const joinedContext = joinedContexts[index];\n if (\n joinedContext &&\n typeof joinedContext === \"object\" &&\n (Object.prototype.hasOwnProperty.call(joinedContext, key) ||\n joinedContext[key] !== undefined)\n ) {\n return joinedContext[key];\n }\n }\n\n return undefined;\n };\n const registrationData =\n Object.prototype.hasOwnProperty.call(ctx, \"__registrationData\") &&\n ctx.__registrationData !== undefined\n ? ctx.__registrationData\n : getJoinedValue(\"__registrationData\");\n const existingQueryData =\n ctx.queryData && typeof ctx.queryData === \"object\" ? ctx.queryData : {};\n const nextQueryData: Record<string, unknown> = {\n ...existingQueryData,\n ...queryData,\n };\n if (!Object.prototype.hasOwnProperty.call(queryData, \"onConflict\")) {\n delete nextQueryData.onConflict;\n }\n const resolvedData =\n Object.prototype.hasOwnProperty.call(ctx, \"data\") || ctx.data !== undefined\n ? ctx.data\n : getJoinedValue(\"data\");\n const resolvedBatch =\n Object.prototype.hasOwnProperty.call(ctx, \"batch\") || ctx.batch !== undefined\n ? ctx.batch\n : getJoinedValue(\"batch\");\n const nextData =\n resolvedData !== undefined\n ? resolvedData && typeof resolvedData === \"object\"\n ? { ...resolvedData }\n : resolvedData\n : registrationData &&\n typeof registrationData === \"object\" &&\n !Array.isArray(registrationData)\n ? { ...registrationData }\n : registrationData;\n\n if (nextData !== undefined) {\n nextQueryData.data = nextData;\n }\n\n if (resolvedBatch !== undefined) {\n nextQueryData.batch = Array.isArray(resolvedBatch)\n ? resolvedBatch.map((row) =>\n row && typeof row === \"object\" ? { ...row } : row,\n )\n : resolvedBatch;\n }\n\n return nextQueryData;\n}\n\nfunction normalizeServiceRegistryInsertResult(\n tableName: string,\n ctx: AnyObject,\n queryData: Record<string, unknown>,\n rawResult: unknown,\n): unknown {\n if (!rawResult || typeof rawResult !== \"object\") {\n return rawResult;\n }\n\n const result = { ...(rawResult as AnyObject) };\n delete result.__resolverOriginalContext;\n delete result.__resolverQueryData;\n const normalizedQueryData =\n result.queryData && typeof result.queryData === \"object\"\n ? { ...(result.queryData as AnyObject) }\n : { ...queryData };\n const resolvedData =\n result.data ??\n normalizedQueryData.data ??\n queryData.data ??\n ctx.data ??\n ctx.__registrationData;\n\n if (resolvedData !== undefined && result.data === undefined) {\n result.data = resolvedData;\n }\n\n if (\n resolvedData !== undefined &&\n (normalizedQueryData.data === undefined || normalizedQueryData.data === null)\n ) {\n normalizedQueryData.data = resolvedData;\n }\n\n result.queryData = normalizedQueryData;\n\n if (tableName === \"service\") {\n const resolvedServiceName = String(\n ctx.__serviceName ??\n result.__serviceName ??\n (resolvedData as AnyObject | undefined)?.name ??\n (resolvedData as AnyObject | undefined)?.service_name ??\n \"\",\n ).trim();\n\n if (resolvedServiceName) {\n result.__serviceName = resolvedServiceName;\n }\n }\n\n const resolvedLocalServiceInstanceId = String(\n ctx.__serviceInstanceId ??\n (resolvedData as AnyObject | undefined)?.uuid ??\n (resolvedData as AnyObject | undefined)?.service_instance_id ??\n \"\",\n ).trim();\n\n if (resolvedLocalServiceInstanceId) {\n result.__serviceInstanceId = resolvedLocalServiceInstanceId;\n }\n\n if (\n tableName === \"service_instance\" ||\n tableName === \"service_instance_transport\"\n ) {\n const resolvedUuid = String(\n result.uuid ??\n (resolvedData as AnyObject | undefined)?.uuid ??\n ctx.__serviceInstanceId ??\n \"\",\n ).trim();\n\n if (resolvedUuid) {\n result.uuid = resolvedUuid;\n }\n }\n\n return result;\n}\n\nfunction summarizeTransportDescriptors(\n transports: Array<\n Pick<\n ServiceTransportDescriptor,\n \"uuid\" | \"serviceInstanceId\" | \"role\" | \"origin\" | \"protocols\"\n >\n >,\n) {\n return transports.map((transport) => ({\n uuid: transport.uuid,\n serviceInstanceId: transport.serviceInstanceId,\n role: transport.role,\n origin: transport.origin,\n protocols: transport.protocols,\n }));\n}\n\nfunction resolveServiceRegistryInsertTask(\n tableName: string,\n queryData: Record<string, unknown> = {},\n options: Record<string, unknown> = {},\n): Task {\n const remoteInsertTask = Cadenza.createCadenzaDBInsertTask(\n tableName,\n queryData,\n options,\n );\n\n const localExecutionRequestedSignal = `meta.service_registry.insert_execution_requested:${tableName}:local`;\n const remoteExecutionRequestedSignal = `meta.service_registry.insert_execution_requested:${tableName}:remote`;\n const executionResolvedSignal = `meta.service_registry.insert_execution_resolved:${tableName}`;\n const executionFailedSignal = `meta.service_registry.insert_execution_failed:${tableName}`;\n\n const createPrepareExecutionTask = (signalName: string) =>\n Cadenza.createMetaTask(\n `Prepare service registry insert execution for ${tableName} (${signalName})`,\n (ctx) => {\n const nextQueryData = buildServiceRegistryInsertQueryData(ctx, queryData);\n\n const delegationContext = ensureDelegationContextMetadata({\n ...ctx,\n data:\n nextQueryData.data !== undefined ? nextQueryData.data : ctx.data,\n batch:\n nextQueryData.batch !== undefined ? nextQueryData.batch : ctx.batch,\n onConflict:\n Object.prototype.hasOwnProperty.call(nextQueryData, \"onConflict\")\n ? nextQueryData.onConflict\n : undefined,\n transaction:\n nextQueryData.transaction !== undefined\n ? nextQueryData.transaction\n : ctx.transaction,\n queryData: nextQueryData,\n }) as AnyObject & {\n __deputyExecId: string;\n __metadata: AnyObject;\n };\n delegationContext.__metadata.__skipRemoteExecution =\n delegationContext.__metadata.__skipRemoteExecution ??\n delegationContext.__skipRemoteExecution ??\n false;\n delegationContext.__metadata.__blockRemoteExecution =\n delegationContext.__metadata.__blockRemoteExecution ??\n delegationContext.__blockRemoteExecution ??\n false;\n\n return {\n ...delegationContext,\n __resolverOriginalContext: {\n ...ctx,\n },\n __resolverQueryData: nextQueryData,\n };\n },\n `Prepares ${tableName} service-registry insert payloads for runner execution.`,\n {\n register: false,\n isHidden: true,\n },\n )\n .doOn(signalName)\n .emitsOnFail(executionFailedSignal);\n\n const prepareLocalExecutionTask = createPrepareExecutionTask(\n localExecutionRequestedSignal,\n );\n const prepareRemoteExecutionTask = createPrepareExecutionTask(\n remoteExecutionRequestedSignal,\n );\n\n const finalizeExecutionTask = Cadenza.createMetaTask(\n `Finalize service registry insert execution for ${tableName}`,\n (ctx, emit) => {\n if (!ctx.__resolverRequestId) {\n return false;\n }\n\n const normalized = normalizeServiceRegistryInsertResult(\n tableName,\n (ctx.__resolverOriginalContext as AnyObject) ?? ctx,\n (ctx.__resolverQueryData as Record<string, unknown>) ?? ctx.queryData ?? {},\n ctx,\n );\n\n if (\n tableName === \"service_instance\" &&\n (process.env.CADENZA_INSTANCE_DEBUG === \"1\" ||\n process.env.CADENZA_INSTANCE_DEBUG === \"true\")\n ) {\n console.log(\"[CADENZA_INSTANCE_DEBUG] finalize_service_registry_insert\", {\n tableName,\n hasNormalized: !!normalized,\n normalizedKeys:\n normalized && typeof normalized === \"object\"\n ? Object.keys(normalized as AnyObject)\n : [],\n uuid:\n normalized && typeof normalized === \"object\"\n ? (normalized as AnyObject).uuid ??\n (normalized as AnyObject).data?.uuid ??\n (normalized as AnyObject).queryData?.data?.uuid ??\n null\n : null,\n serviceName:\n normalized && typeof normalized === \"object\"\n ? (normalized as AnyObject).__serviceName ??\n (normalized as AnyObject).data?.service_name ??\n (normalized as AnyObject).queryData?.data?.service_name ??\n null\n : null,\n errored:\n normalized && typeof normalized === \"object\"\n ? (normalized as AnyObject).errored === true\n : false,\n error:\n normalized && typeof normalized === \"object\"\n ? (normalized as AnyObject).__error ?? null\n : null,\n inquiryMeta:\n normalized && typeof normalized === \"object\"\n ? (normalized as AnyObject).__inquiryMeta ?? null\n : null,\n });\n }\n\n if (!normalized || typeof normalized !== \"object\") {\n return normalized as any;\n }\n\n emit(executionResolvedSignal, normalized as AnyObject);\n return normalized;\n },\n `Normalizes ${tableName} service-registry insert results for resolver callers.`,\n {\n register: false,\n isHidden: true,\n },\n );\n\n const wiredLocalTaskNames = new Set<string>();\n const wireExecutionTarget = (targetTask: Task, prepareTask: Task) => {\n targetTask.then(finalizeExecutionTask).emitsOnFail(executionFailedSignal);\n prepareTask.then(targetTask);\n };\n\n wireExecutionTarget(remoteInsertTask, prepareRemoteExecutionTask);\n\n return Cadenza.createMetaTask(\n `Resolve service registry insert for ${tableName}`,\n (ctx, emit) =>\n new Promise((resolve) => {\n const resolverRequestId = uuid();\n\n Cadenza.createEphemeralMetaTask(\n `Resolve service registry insert execution for ${tableName} (${resolverRequestId})`,\n (resultCtx) => {\n if (resultCtx.__resolverRequestId !== resolverRequestId) {\n return false;\n }\n\n const normalizedResult = {\n ...resultCtx,\n };\n delete normalizedResult.__resolverRequestId;\n delete normalizedResult.__resolverOriginalContext;\n delete normalizedResult.__resolverQueryData;\n\n resolve(normalizedResult);\n return normalizedResult;\n },\n `Resolves signal-driven ${tableName} service-registry insert execution.`,\n {\n register: false,\n },\n ).doOn(executionResolvedSignal, executionFailedSignal);\n\n const localInsertTask = Cadenza.getLocalCadenzaDBInsertTask(tableName);\n const executionSignal = localInsertTask\n ? localExecutionRequestedSignal\n : remoteExecutionRequestedSignal;\n\n if (\n tableName === \"service_instance\" &&\n (process.env.CADENZA_INSTANCE_DEBUG === \"1\" ||\n process.env.CADENZA_INSTANCE_DEBUG === \"true\")\n ) {\n console.log(\"[CADENZA_INSTANCE_DEBUG] resolve_service_registry_insert\", {\n tableName,\n executionSignal,\n hasLocalInsertTask: !!localInsertTask,\n serviceName: ctx.__serviceName ?? ctx.data?.service_name ?? null,\n serviceInstanceId: ctx.__serviceInstanceId ?? ctx.data?.uuid ?? null,\n hasData: !!ctx.data,\n dataKeys:\n ctx.data && typeof ctx.data === \"object\"\n ? Object.keys(ctx.data)\n : [],\n registrationKeys:\n ctx.__registrationData &&\n typeof ctx.__registrationData === \"object\"\n ? Object.keys(ctx.__registrationData)\n : [],\n });\n }\n\n if (\n localInsertTask &&\n !wiredLocalTaskNames.has(localInsertTask.name)\n ) {\n wireExecutionTarget(localInsertTask, prepareLocalExecutionTask);\n wiredLocalTaskNames.add(localInsertTask.name);\n }\n\n emit(executionSignal, {\n ...ctx,\n __resolverRequestId: resolverRequestId,\n });\n }),\n `Resolves ${tableName} inserts through the local CadenzaDB task when available.`,\n options,\n );\n}\n\nfunction readPositiveIntegerEnv(name: string, fallback: number): number {\n if (typeof process === \"undefined\") {\n return fallback;\n }\n\n const raw = process.env?.[name];\n const parsed = Number(raw);\n if (!Number.isFinite(parsed)) {\n return fallback;\n }\n\n const normalized = Math.trunc(parsed);\n if (normalized <= 0) {\n return fallback;\n }\n\n return normalized;\n}\n\nexport interface DeputyDescriptor {\n serviceName: string;\n remoteRoutineName?: string;\n signalName?: string;\n localTaskName: string;\n communicationType: string;\n}\n\ninterface RemoteIntentDeputyDescriptor {\n key: string;\n intentName: string;\n serviceName: string;\n remoteTaskName: string;\n remoteTaskVersion: number;\n localTaskName: string;\n localTask: Task;\n}\n\ninterface RuntimeStatusReport {\n serviceName: string;\n serviceInstanceId: string;\n transportId?: string;\n transportRole?: ServiceTransportRole;\n transportOrigin?: string;\n transportProtocols?: ServiceTransportProtocol[];\n isFrontend?: boolean;\n reportedAt: string;\n state: RuntimeStatusState;\n acceptingWork: boolean;\n numberOfRunningGraphs: number;\n isActive: boolean;\n isNonResponsive: boolean;\n isBlocked: boolean;\n health?: AnyObject;\n}\n\ninterface RuntimeStatusFallbackRestDiagnostic {\n attempted: boolean;\n outcome:\n | \"instance_missing\"\n | \"fetch_unavailable\"\n | \"no_rest_transport\"\n | \"http_error\"\n | \"invalid_report\"\n | \"identity_mismatch\"\n | \"fetch_error\"\n | \"matched\";\n transport?: {\n uuid: string;\n role: ServiceTransportRole;\n origin: string;\n protocols: ServiceTransportProtocol[];\n clientCreated?: boolean;\n };\n responseStatus?: number;\n responseStatusText?: string;\n payloadServiceName?: string;\n payloadServiceInstanceId?: string;\n payloadKeys?: string[];\n error?: string;\n}\n\ninterface RuntimeStatusFallbackFailureDiagnostics {\n target: {\n serviceName: string;\n serviceInstanceId: string;\n };\n instance: {\n exists: boolean;\n runtimeState?: RuntimeStatusState;\n acceptingWork?: boolean;\n reportedAt?: string | null;\n isDatabase?: boolean;\n isFrontend?: boolean;\n isBootstrapPlaceholder?: boolean;\n transports: Array<{\n uuid: string;\n role: ServiceTransportRole;\n origin: string;\n protocols: ServiceTransportProtocol[];\n clientCreated?: boolean;\n }>;\n };\n directStatusCheck: RuntimeStatusFallbackRestDiagnostic;\n inquiry: {\n meta: AnyObject;\n reportTargets: Array<{\n serviceName?: string;\n serviceInstanceId?: string;\n transportId?: string;\n state?: RuntimeStatusState;\n acceptingWork?: boolean;\n reportedAt?: string;\n }>;\n };\n}\n\ninterface DependencyReadinessDetail {\n serviceName: string;\n serviceInstanceId: string;\n dependencyState: DependencyReadinessState;\n runtimeState: RuntimeStatusState;\n acceptingWork: boolean;\n missedHeartbeats: number;\n stale: boolean;\n blocked: boolean;\n reason:\n | \"missing\"\n | \"heartbeat-timeout\"\n | \"heartbeat-stale\"\n | \"runtime-unavailable\"\n | \"runtime-overloaded\"\n | \"runtime-degraded\"\n | \"runtime-healthy\";\n lastHeartbeatAt: string | null;\n reportedAt: string | null;\n}\n\ninterface ReadinessReport {\n serviceName: string;\n serviceInstanceId: string;\n reportedAt: string;\n readinessState: ReadinessState;\n runtimeState: RuntimeStatusState;\n acceptingWork: boolean;\n dependencySummary: {\n total: number;\n ready: number;\n degraded: number;\n overloaded: number;\n unavailable: number;\n stale: number;\n };\n dependencies?: DependencyReadinessDetail[];\n}\n\n/**\n * The ServiceRegistry class is a singleton that manages the registration and lifecycle of\n * service instances, deputies, and remote signals in a distributed service architecture.\n * It handles various tasks such as instance updates, remote signal registration,\n * service status synchronization, and error/event broadcasting.\n */\nexport default class ServiceRegistry {\n private static _instance: ServiceRegistry;\n public static get instance(): ServiceRegistry {\n if (!this._instance) this._instance = new ServiceRegistry();\n return this._instance;\n }\n\n private instances: Map<string, ServiceInstanceDescriptor[]> = new Map();\n private deputies: Map<string, DeputyDescriptor[]> = new Map();\n private remoteSignals: Map<string, Set<string>> = new Map();\n private remoteIntents: Map<string, Set<string>> = new Map();\n private gatheredSyncTransmissionServices: Set<string> = new Set();\n private remoteIntentDeputiesByKey: Map<string, RemoteIntentDeputyDescriptor> =\n new Map();\n private remoteIntentDeputiesByTask: Map<Task, RemoteIntentDeputyDescriptor> =\n new Map();\n private dependeesByService: Map<string, Set<string>> = new Map();\n private dependeeByInstance: Map<string, string> = new Map();\n private readinessDependeesByService: Map<string, Set<string>> = new Map();\n private readinessDependeeByInstance: Map<string, string> = new Map();\n private lastHeartbeatAtByInstance: Map<string, number> = new Map();\n private missedHeartbeatsByInstance: Map<string, number> = new Map();\n private runtimeStatusFallbackInFlightByInstance: Set<string> = new Set();\n private activeRoutineExecutionIds: Set<string> = new Set();\n private runtimeStatusHeartbeatStarted = false;\n private lastRuntimeStatusSnapshot: RuntimeStatusSnapshot | null = null;\n private readonly runtimeStatusHeartbeatIntervalMs = readPositiveIntegerEnv(\n \"CADENZA_RUNTIME_STATUS_HEARTBEAT_MS\",\n 30_000,\n );\n private readonly runtimeStatusMissThreshold = readPositiveIntegerEnv(\n \"CADENZA_RUNTIME_STATUS_MISSED_HEARTBEATS\",\n 3,\n );\n private readonly runtimeStatusFallbackTimeoutMs = readPositiveIntegerEnv(\n \"CADENZA_RUNTIME_STATUS_FALLBACK_TIMEOUT_MS\",\n 1_500,\n );\n private readonly degradedGraphThreshold = readPositiveIntegerEnv(\n \"CADENZA_RUNTIME_STATUS_DEGRADED_GRAPH_THRESHOLD\",\n 10,\n );\n private readonly overloadedGraphThreshold = readPositiveIntegerEnv(\n \"CADENZA_RUNTIME_STATUS_OVERLOADED_GRAPH_THRESHOLD\",\n 20,\n );\n serviceName: string | null = null;\n serviceInstanceId: string | null = null;\n numberOfRunningGraphs: number = 0;\n useSocket: boolean = false;\n retryCount: number = 3;\n isFrontend: boolean = false;\n connectsToCadenzaDB: boolean = false;\n\n handleInstanceUpdateTask: Task;\n handleTransportUpdateTask: Task;\n handleGlobalSignalRegistrationTask: Task;\n handleGlobalIntentRegistrationTask: Task;\n reconcileGatheredSyncTransmissionsTask: Task;\n handleSocketStatusUpdateTask: Task;\n fullSyncTask: GraphRoutine | Task;\n getAllInstances: Task;\n doForEachInstance: Task;\n deleteInstance: Task;\n getBalancedInstance: Task;\n getInstanceById: Task;\n getInstancesByServiceName: Task;\n handleDeputyRegistrationTask: Task;\n getStatusTask: Task;\n insertServiceTask: Task;\n insertServiceInstanceTask: Task;\n insertServiceTransportTask: Task;\n handleServiceNotRespondingTask: Task;\n handleServiceHandshakeTask: Task;\n collectTransportDiagnosticsTask: Task;\n collectReadinessTask: Task;\n\n private buildRemoteIntentDeputyKey(map: {\n intentName: string;\n serviceName: string;\n taskName: string;\n taskVersion?: number;\n }): string {\n return `${map.intentName}|${map.serviceName}|${map.taskName}|${map.taskVersion ?? 1}`;\n }\n\n private readArrayPayload(\n ctx: AnyObject,\n keys: string[],\n ): Array<Record<string, unknown>> {\n for (const key of keys) {\n const value = (ctx as any)?.[key];\n if (Array.isArray(value)) {\n return value as Array<Record<string, unknown>>;\n }\n }\n\n if (Array.isArray((ctx as any)?.rows)) {\n return (ctx as any).rows as Array<Record<string, unknown>>;\n }\n\n if (Array.isArray((ctx as any)?.data)) {\n return (ctx as any).data as Array<Record<string, unknown>>;\n }\n\n return [];\n }\n\n private normalizeSignalMaps(ctx: AnyObject): Array<{\n signalName: string;\n serviceName: string;\n isGlobal: boolean;\n deleted?: boolean;\n }> {\n const arrayPayload = this.readArrayPayload(ctx, [\n \"signalToTaskMaps\",\n \"signal_to_task_maps\",\n \"signalToTaskMap\",\n \"signal_to_task_map\",\n ]);\n\n if (arrayPayload.length > 0) {\n return arrayPayload\n .map((map) => ({\n signalName: String(\n map.signalName ?? map.signal_name ?? \"\",\n ).trim(),\n serviceName: String(\n map.serviceName ?? map.service_name ?? \"\",\n ).trim(),\n isGlobal: Boolean(map.isGlobal ?? map.is_global ?? false),\n deleted: Boolean(map.deleted),\n }))\n .filter((map) => map.signalName && map.serviceName);\n }\n\n const single =\n (ctx as any).signalToTaskMap ??\n (ctx as any).signal_to_task_map ??\n (ctx as any).data ??\n (((ctx as any).signalName ?? (ctx as any).signal_name)\n ? ctx\n : undefined);\n\n if (!single || typeof single !== \"object\") {\n return [];\n }\n\n return [\n {\n signalName: String(\n (single as any).signalName ?? (single as any).signal_name ?? \"\",\n ).trim(),\n serviceName: String(\n (single as any).serviceName ?? (single as any).service_name ?? \"\",\n ).trim(),\n isGlobal: Boolean((single as any).isGlobal ?? (single as any).is_global ?? false),\n deleted: Boolean((single as any).deleted),\n },\n ].filter((map) => map.signalName && map.serviceName);\n }\n\n private normalizeIntentMaps(ctx: AnyObject): Array<{\n intentName: string;\n serviceName: string;\n taskName: string;\n taskVersion: number;\n deleted?: boolean;\n }> {\n const arrayPayload = this.readArrayPayload(ctx, [\n \"intentToTaskMaps\",\n \"intent_to_task_maps\",\n \"intentToTaskMap\",\n \"intent_to_task_map\",\n ]);\n\n if (arrayPayload.length > 0) {\n return arrayPayload\n .map((m: any) => ({\n intentName: m.intentName ?? m.intent_name,\n serviceName: m.serviceName ?? m.service_name,\n taskName: m.taskName ?? m.task_name,\n taskVersion: m.taskVersion ?? m.task_version ?? 1,\n deleted: !!m.deleted,\n }))\n .filter((m: any) => m.intentName && m.serviceName && m.taskName);\n }\n\n const single =\n (ctx as any).intentToTaskMap ??\n (ctx as any).intent_to_task_map ??\n (ctx as any).data ??\n ((ctx as any).intentName ? ctx : undefined);\n\n if (!single) return [];\n\n const normalized = {\n intentName: single.intentName ?? single.intent_name,\n serviceName: single.serviceName ?? single.service_name,\n taskName: single.taskName ?? single.task_name,\n taskVersion: single.taskVersion ?? single.task_version ?? 1,\n deleted: !!single.deleted,\n };\n\n if (!normalized.intentName || !normalized.serviceName || !normalized.taskName)\n return [];\n\n return [normalized];\n }\n\n private normalizeServiceInstancesFromSync(\n ctx: AnyObject,\n ): ServiceInstanceDescriptor[] {\n const rawTransports = this.readArrayPayload(ctx, [\n \"serviceInstanceTransports\",\n \"service_instance_transports\",\n \"serviceInstanceTransport\",\n \"service_instance_transport\",\n ])\n .map((transport) => normalizeServiceTransportDescriptor(transport))\n .filter(\n (transport): transport is ServiceTransportDescriptor =>\n !!transport && !transport.deleted,\n );\n\n const transportsByInstance = new Map<string, ServiceTransportDescriptor[]>();\n for (const transport of rawTransports) {\n if (!transportsByInstance.has(transport.serviceInstanceId)) {\n transportsByInstance.set(transport.serviceInstanceId, []);\n }\n\n transportsByInstance.get(transport.serviceInstanceId)!.push(transport);\n }\n\n return this.readArrayPayload(ctx, [\n \"serviceInstances\",\n \"service_instances\",\n \"serviceInstance\",\n \"service_instance\",\n ])\n .map((instance: AnyObject) =>\n normalizeServiceInstanceDescriptor({\n ...instance,\n transports:\n Array.isArray((instance as any)?.transports) &&\n (instance as any).transports.length > 0\n ? (instance as any).transports\n : transportsByInstance.get(\n String(\n (instance as any)?.uuid ??\n (instance as any)?.serviceInstanceId ??\n (instance as any)?.service_instance_id ??\n \"\",\n ).trim(),\n ) ?? [],\n }),\n )\n .filter(\n (instance: ServiceInstanceDescriptor | null): instance is ServiceInstanceDescriptor =>\n !!instance &&\n !!instance.isActive &&\n !instance.isNonResponsive &&\n !instance.isBlocked,\n );\n }\n\n private shouldReconcileGatheredSyncTransmissions(): boolean {\n return this.serviceName === \"CadenzaDB\";\n }\n\n private collectGatheredSyncTransmissionRecipients(\n ctx: AnyObject,\n ): Set<string> {\n const recipients = new Set<string>();\n const addRecipient = (serviceName: unknown) => {\n const normalizedServiceName = String(serviceName ?? \"\").trim();\n if (\n !normalizedServiceName ||\n normalizedServiceName === this.serviceName\n ) {\n return;\n }\n\n recipients.add(normalizedServiceName);\n };\n\n addRecipient(ctx.serviceName ?? ctx.__serviceName);\n\n for (const instance of this.normalizeServiceInstancesFromSync(ctx)) {\n addRecipient(instance.serviceName);\n }\n\n for (const [serviceName, instances] of this.instances.entries()) {\n if (!instances?.length) {\n continue;\n }\n\n addRecipient(serviceName);\n }\n\n return recipients;\n }\n\n private reconcileGatheredSyncTransmissions(ctx: AnyObject, emit: any): boolean {\n if (!this.shouldReconcileGatheredSyncTransmissions()) {\n return false;\n }\n\n const desiredRecipients =\n this.collectGatheredSyncTransmissionRecipients(ctx);\n const createdRecipients: string[] = [];\n\n for (const serviceName of desiredRecipients) {\n if (this.gatheredSyncTransmissionServices.has(serviceName)) {\n continue;\n }\n\n Cadenza.createSignalTransmissionTask(\n CADENZA_DB_GATHERED_SYNC_SIGNAL,\n serviceName,\n );\n this.gatheredSyncTransmissionServices.add(serviceName);\n createdRecipients.push(serviceName);\n }\n\n for (const serviceName of Array.from(this.gatheredSyncTransmissionServices)) {\n if (desiredRecipients.has(serviceName)) {\n continue;\n }\n\n Cadenza.get(\n `Transmit signal: ${CADENZA_DB_GATHERED_SYNC_SIGNAL} to ${serviceName}`,\n )?.destroy();\n this.gatheredSyncTransmissionServices.delete(serviceName);\n }\n\n if (createdRecipients.length > 0) {\n emit(\"meta.cadenza_db.sync_tick\", {\n __syncing: true,\n __reason: \"gathered_sync_transmissions_reconciled\",\n });\n }\n\n return (\n createdRecipients.length > 0 ||\n this.gatheredSyncTransmissionServices.size > 0\n );\n }\n\n private registerRemoteIntentDeputy(map: {\n intentName: string;\n serviceName: string;\n taskName: string;\n taskVersion: number;\n }) {\n if (!this.serviceName || map.serviceName === this.serviceName) {\n return;\n }\n\n const key = this.buildRemoteIntentDeputyKey(map);\n if (this.remoteIntentDeputiesByKey.has(key)) {\n return;\n }\n\n const deputyTaskName = `Inquire ${map.intentName} via ${map.serviceName} (${map.taskName} v${map.taskVersion})`;\n\n const deputyTask = isMetaIntentName(map.intentName)\n ? Cadenza.createMetaDeputyTask(map.taskName, map.serviceName, {\n register: false,\n isHidden: true,\n retryCount: 1,\n retryDelay: 50,\n retryDelayFactor: 1.2,\n })\n : Cadenza.createDeputyTask(map.taskName, map.serviceName, {\n register: false,\n isHidden: true,\n retryCount: 1,\n retryDelay: 50,\n retryDelayFactor: 1.2,\n });\n\n deputyTask.respondsTo(map.intentName);\n\n if (!this.remoteIntents.has(map.serviceName)) {\n this.remoteIntents.set(map.serviceName, new Set());\n }\n this.remoteIntents.get(map.serviceName)!.add(map.intentName);\n\n const descriptor: RemoteIntentDeputyDescriptor = {\n key,\n intentName: map.intentName,\n serviceName: map.serviceName,\n remoteTaskName: map.taskName,\n remoteTaskVersion: map.taskVersion,\n localTaskName: deputyTask.name || deputyTaskName,\n localTask: deputyTask,\n };\n\n this.remoteIntentDeputiesByKey.set(key, descriptor);\n this.remoteIntentDeputiesByTask.set(deputyTask, descriptor);\n }\n\n private unregisterRemoteIntentDeputy(map: {\n intentName: string;\n serviceName: string;\n taskName: string;\n taskVersion?: number;\n }) {\n const key = this.buildRemoteIntentDeputyKey(map);\n const descriptor = this.remoteIntentDeputiesByKey.get(key);\n if (!descriptor) {\n return;\n }\n\n const task = descriptor.localTask;\n if (task) {\n Cadenza.inquiryBroker.unsubscribe(descriptor.intentName, task);\n task.destroy();\n }\n\n this.remoteIntentDeputiesByTask.delete(descriptor.localTask);\n this.remoteIntentDeputiesByKey.delete(key);\n\n this.remoteIntents.get(descriptor.serviceName)?.delete(descriptor.intentName);\n if (!this.remoteIntents.get(descriptor.serviceName)?.size) {\n this.remoteIntents.delete(descriptor.serviceName);\n }\n\n const deputies = this.deputies.get(descriptor.serviceName);\n if (deputies) {\n this.deputies.set(\n descriptor.serviceName,\n deputies.filter((d) => d.localTaskName !== descriptor.localTaskName),\n );\n\n if (this.deputies.get(descriptor.serviceName)?.length === 0) {\n this.deputies.delete(descriptor.serviceName);\n }\n }\n }\n\n private registerBootstrapFullSyncDeputies(\n emit: (signal: string, ctx: AnyObject) => void,\n ctx?: AnyObject,\n ): boolean {\n if (!this.serviceName || this.serviceName === \"CadenzaDB\") {\n return false;\n }\n\n Cadenza.inquiryBroker.addIntent({\n name: META_SERVICE_REGISTRY_FULL_SYNC_INTENT,\n });\n\n for (const taskName of BOOTSTRAP_FULL_SYNC_RESPONDER_TASKS) {\n this.registerRemoteIntentDeputy({\n intentName: META_SERVICE_REGISTRY_FULL_SYNC_INTENT,\n serviceName: \"CadenzaDB\",\n taskName,\n taskVersion: 1,\n });\n }\n\n this.ensureDependeeClientsForService(\"CadenzaDB\", emit, ctx);\n return true;\n }\n\n private hasBootstrapFullSyncDeputies(): boolean {\n if (!this.serviceName || this.serviceName === \"CadenzaDB\") {\n return true;\n }\n\n return BOOTSTRAP_FULL_SYNC_RESPONDER_TASKS.every((taskName) =>\n this.remoteIntentDeputiesByKey.has(\n this.buildRemoteIntentDeputyKey({\n intentName: META_SERVICE_REGISTRY_FULL_SYNC_INTENT,\n serviceName: \"CadenzaDB\",\n taskName,\n taskVersion: 1,\n }),\n ),\n );\n }\n\n private scheduleEarlyFullSyncRequests(reason: string): boolean {\n for (const delayMs of EARLY_FULL_SYNC_DELAYS_MS) {\n Cadenza.schedule(\n \"meta.sync_requested\",\n {\n __syncing: false,\n __reason: reason,\n },\n delayMs,\n );\n }\n\n return true;\n }\n\n public bootstrapFullSync(\n emit: (signal: string, ctx: AnyObject) => void,\n ctx?: AnyObject,\n reason = \"local_instance_inserted\",\n ): boolean {\n this.registerBootstrapFullSyncDeputies(emit, ctx);\n return this.scheduleEarlyFullSyncRequests(reason);\n }\n\n public getInquiryResponderDescriptor(task: Task): InquiryResponderDescriptor {\n const remote = this.remoteIntentDeputiesByTask.get(task);\n\n if (remote) {\n return {\n isRemote: true,\n serviceName: remote.serviceName,\n taskName: remote.remoteTaskName,\n taskVersion: remote.remoteTaskVersion,\n localTaskName: remote.localTaskName,\n };\n }\n\n return {\n isRemote: false,\n serviceName: this.serviceName ?? \"UnknownService\",\n taskName: task.name,\n taskVersion: task.version,\n localTaskName: task.name,\n };\n }\n\n private getInstance(serviceName: string, instanceId: string) {\n return this.instances\n .get(serviceName)\n ?.find((instance) => instance.uuid === instanceId);\n }\n\n private getLocalInstance() {\n if (!this.serviceName || !this.serviceInstanceId) {\n return undefined;\n }\n\n return this.getInstance(this.serviceName, this.serviceInstanceId);\n }\n\n hasLocalInstanceRegistered() {\n return Boolean(this.getLocalInstance());\n }\n\n private summarizeTransportForDebug(\n transport: ServiceTransportDescriptor | undefined,\n ) {\n if (!transport) {\n return undefined;\n }\n\n return {\n uuid: transport.uuid,\n role: transport.role,\n origin: transport.origin,\n protocols: transport.protocols,\n clientCreated: transport.clientCreated,\n };\n }\n\n private summarizeInstanceForRuntimeStatusFallback(\n instance: ServiceInstanceDescriptor | undefined,\n ): RuntimeStatusFallbackFailureDiagnostics[\"instance\"] {\n return {\n exists: Boolean(instance),\n runtimeState: instance?.runtimeState,\n acceptingWork: instance?.acceptingWork,\n reportedAt: instance?.reportedAt ?? null,\n isDatabase: instance?.isDatabase,\n isFrontend: instance?.isFrontend,\n isBootstrapPlaceholder: instance?.isBootstrapPlaceholder,\n transports: (instance?.transports ?? []).map((transport) => ({\n uuid: transport.uuid,\n role: transport.role,\n origin: transport.origin,\n protocols: transport.protocols,\n clientCreated: transport.clientCreated,\n })),\n };\n }\n\n private summarizeRuntimeStatusInquiryReports(inquiryResult: AnyObject) {\n const reports = Array.isArray(inquiryResult.runtimeStatusReports)\n ? inquiryResult.runtimeStatusReports\n : [];\n\n return reports.map((candidate) => {\n const normalized = this.normalizeRuntimeStatusReport(candidate);\n if (normalized) {\n return {\n serviceName: normalized.serviceName,\n serviceInstanceId: normalized.serviceInstanceId,\n transportId: normalized.transportId,\n state: normalized.state,\n acceptingWork: normalized.acceptingWork,\n reportedAt: normalized.reportedAt,\n };\n }\n\n const raw =\n candidate && typeof candidate === \"object\"\n ? (candidate as Record<string, unknown>)\n : {};\n const rawState: RuntimeStatusState | undefined =\n raw.state === \"healthy\" ||\n raw.state === \"degraded\" ||\n raw.state === \"overloaded\" ||\n raw.state === \"unavailable\"\n ? raw.state\n : undefined;\n\n return {\n serviceName:\n typeof raw.serviceName === \"string\"\n ? raw.serviceName\n : typeof raw.__serviceName === \"string\"\n ? raw.__serviceName\n : undefined,\n serviceInstanceId:\n typeof raw.serviceInstanceId === \"string\"\n ? raw.serviceInstanceId\n : typeof raw.__serviceInstanceId === \"string\"\n ? raw.__serviceInstanceId\n : undefined,\n transportId:\n typeof raw.transportId === \"string\"\n ? raw.transportId\n : typeof raw.serviceTransportId === \"string\"\n ? raw.serviceTransportId\n : undefined,\n state: rawState,\n acceptingWork:\n typeof raw.acceptingWork === \"boolean\" ? raw.acceptingWork : undefined,\n reportedAt:\n typeof raw.reportedAt === \"string\" ? raw.reportedAt : undefined,\n };\n });\n }\n\n private createRuntimeStatusFallbackError(\n message: string,\n diagnostics: RuntimeStatusFallbackFailureDiagnostics,\n ): Error & { runtimeStatusFallback: RuntimeStatusFallbackFailureDiagnostics } {\n return Object.assign(new Error(message), {\n runtimeStatusFallback: diagnostics,\n });\n }\n\n public resolveLocalStatusCheck(ctx: AnyObject = {}) {\n if (!this.serviceName) {\n return {\n __status: \"error\",\n __error: \"No service name defined\",\n errored: true,\n };\n }\n\n if (!this.serviceInstanceId) {\n return {\n __status: \"error\",\n __error: \"No service instance id defined\",\n errored: true,\n };\n }\n\n const report = this.buildLocalRuntimeStatusReport(\"full\");\n if (!report) {\n return {\n ...ctx,\n __status: \"error\",\n __error: \"No local service instance available for status check\",\n errored: true,\n };\n }\n\n return {\n ...ctx,\n __status: \"ok\",\n __serviceName: report.serviceName,\n __serviceInstanceId: report.serviceInstanceId,\n __numberOfRunningGraphs: report.numberOfRunningGraphs,\n __health: report.health ?? {},\n __active: report.isActive,\n reportedAt: report.reportedAt,\n serviceName: report.serviceName,\n serviceInstanceId: report.serviceInstanceId,\n numberOfRunningGraphs: report.numberOfRunningGraphs,\n health: report.health ?? {},\n isActive: report.isActive,\n isNonResponsive: report.isNonResponsive,\n isBlocked: report.isBlocked,\n state: report.state,\n acceptingWork: report.acceptingWork,\n };\n }\n\n private resolveTransportProtocolOrder(\n ctx: AnyObject,\n ): ServiceTransportProtocol[] {\n const explicit =\n ctx.__preferredTransportProtocol === \"rest\" ||\n ctx.__preferredTransportProtocol === \"socket\"\n ? ctx.__preferredTransportProtocol\n : undefined;\n\n const preferred = explicit ?? (this.useSocket ? \"socket\" : \"rest\");\n const fallback = preferred === \"socket\" ? \"rest\" : \"socket\";\n\n return [preferred, fallback];\n }\n\n private selectTransportForInstance(\n instance: ServiceInstanceDescriptor,\n ctx: AnyObject,\n role: ServiceTransportRole = this.getRoutingTransportRole(),\n ): ServiceTransportDescriptor | undefined {\n for (const protocol of this.resolveTransportProtocolOrder(ctx)) {\n const transport = this.getRouteableTransport(instance, protocol, role);\n if (transport) {\n return transport;\n }\n }\n\n return undefined;\n }\n\n private getRoutingTransportRole(): ServiceTransportRole {\n return this.isFrontend ? \"public\" : \"internal\";\n }\n\n private getTransportById(\n instance: ServiceInstanceDescriptor,\n transportId: string,\n ): ServiceTransportDescriptor | undefined {\n return instance.transports.find((transport) => transport.uuid === transportId);\n }\n\n private getRouteableTransport(\n instance: ServiceInstanceDescriptor,\n protocol?: ServiceTransportProtocol,\n role: ServiceTransportRole = this.getRoutingTransportRole(),\n ): ServiceTransportDescriptor | undefined {\n return getRouteableTransport(instance, role, protocol);\n }\n\n private getTransportClientKey(\n instance: ServiceInstanceDescriptor,\n protocol?: ServiceTransportProtocol,\n role: ServiceTransportRole = this.getRoutingTransportRole(),\n ): string | null {\n const transport = this.getRouteableTransport(instance, protocol, role);\n if (!transport) {\n return null;\n }\n\n return buildTransportClientKey(transport);\n }\n\n private resolveCommunicationTypesForService(serviceName: string): string[] {\n const communicationTypes = Array.from(\n new Set(\n this.deputies\n .get(serviceName)\n ?.map((descriptor) => descriptor.communicationType) ?? [],\n ),\n );\n\n if (\n !communicationTypes.includes(\"signal\") &&\n this.remoteSignals.has(serviceName)\n ) {\n communicationTypes.push(\"signal\");\n }\n\n return communicationTypes;\n }\n\n private ensureDependeeClientForInstance(\n instance: ServiceInstanceDescriptor,\n emit: (signal: string, ctx: AnyObject) => void,\n ctx?: AnyObject,\n ): boolean {\n if (\n !instance ||\n instance.uuid === this.serviceInstanceId ||\n instance.isFrontend ||\n !instance.isActive ||\n instance.isNonResponsive ||\n instance.isBlocked\n ) {\n return false;\n }\n\n if (\n !this.deputies.has(instance.serviceName) &&\n !this.remoteIntents.has(instance.serviceName) &&\n !this.remoteSignals.has(instance.serviceName)\n ) {\n return false;\n }\n\n const transport = this.selectTransportForInstance(\n instance,\n ctx ?? {},\n this.getRoutingTransportRole(),\n );\n\n if (!transport || this.hasTransportClientCreated(instance, transport.uuid)) {\n return false;\n }\n\n emit(\"meta.service_registry.dependee_registered\", {\n serviceName: instance.serviceName,\n serviceInstanceId: instance.uuid,\n serviceTransportId: transport.uuid,\n serviceOrigin: transport.origin,\n transportProtocols: transport.protocols,\n communicationTypes: this.resolveCommunicationTypesForService(\n instance.serviceName,\n ),\n });\n this.markTransportClientCreated(instance, transport.uuid);\n return true;\n }\n\n private ensureDependeeClientsForService(\n serviceName: string,\n emit: (signal: string, ctx: AnyObject) => void,\n ctx?: AnyObject,\n ): void {\n for (const instance of this.instances.get(serviceName) ?? []) {\n this.ensureDependeeClientForInstance(instance, emit, ctx);\n }\n }\n\n private hasTransportClientCreated(\n instance: ServiceInstanceDescriptor,\n transportId: string,\n ): boolean {\n return (instance.clientCreatedTransportIds ?? []).includes(transportId);\n }\n\n private markTransportClientCreated(\n instance: ServiceInstanceDescriptor,\n transportId: string,\n ): void {\n if (!instance.clientCreatedTransportIds) {\n instance.clientCreatedTransportIds = [];\n }\n\n if (!instance.clientCreatedTransportIds.includes(transportId)) {\n instance.clientCreatedTransportIds.push(transportId);\n }\n }\n\n private registerDependee(\n serviceName: string,\n serviceInstanceId: string,\n options: {\n requiredForReadiness?: boolean;\n } = {},\n ) {\n if (!serviceName || !serviceInstanceId) {\n return;\n }\n\n if (!this.dependeesByService.has(serviceName)) {\n this.dependeesByService.set(serviceName, new Set());\n }\n\n this.dependeesByService.get(serviceName)!.add(serviceInstanceId);\n this.dependeeByInstance.set(serviceInstanceId, serviceName);\n\n if (options.requiredForReadiness) {\n if (!this.readinessDependeesByService.has(serviceName)) {\n this.readinessDependeesByService.set(serviceName, new Set());\n }\n this.readinessDependeesByService.get(serviceName)!.add(serviceInstanceId);\n this.readinessDependeeByInstance.set(serviceInstanceId, serviceName);\n }\n\n this.lastHeartbeatAtByInstance.set(serviceInstanceId, Date.now());\n this.missedHeartbeatsByInstance.set(serviceInstanceId, 0);\n }\n\n private unregisterDependee(serviceInstanceId: string, serviceName?: string) {\n const dependeeServiceName =\n serviceName ?? this.dependeeByInstance.get(serviceInstanceId);\n if (dependeeServiceName) {\n this.dependeesByService.get(dependeeServiceName)?.delete(serviceInstanceId);\n if (!this.dependeesByService.get(dependeeServiceName)?.size) {\n this.dependeesByService.delete(dependeeServiceName);\n }\n }\n\n this.dependeeByInstance.delete(serviceInstanceId);\n const readinessDependeeServiceName =\n serviceName ?? this.readinessDependeeByInstance.get(serviceInstanceId);\n if (readinessDependeeServiceName) {\n this.readinessDependeesByService\n .get(readinessDependeeServiceName)\n ?.delete(serviceInstanceId);\n if (!this.readinessDependeesByService.get(readinessDependeeServiceName)?.size) {\n this.readinessDependeesByService.delete(readinessDependeeServiceName);\n }\n }\n\n this.readinessDependeeByInstance.delete(serviceInstanceId);\n this.lastHeartbeatAtByInstance.delete(serviceInstanceId);\n this.missedHeartbeatsByInstance.delete(serviceInstanceId);\n this.runtimeStatusFallbackInFlightByInstance.delete(serviceInstanceId);\n }\n\n private reconcileBootstrapPlaceholderInstance(\n serviceName: string,\n resolvedInstanceId: string,\n emit: (signalName: string, ctx: AnyObject) => void,\n ) {\n const instances = this.instances.get(serviceName);\n if (!instances?.length) {\n return;\n }\n\n const resolvedInstance = instances.find(\n (instance) => instance.uuid === resolvedInstanceId,\n );\n const frontendRoutingRole = this.isFrontend\n ? this.getRoutingTransportRole()\n : null;\n\n const placeholders = instances.filter(\n (instance) =>\n instance.uuid !== resolvedInstanceId && instance.isBootstrapPlaceholder,\n );\n\n if (!placeholders.length) {\n return;\n }\n\n for (const placeholder of placeholders) {\n const wasDependee = this.dependeeByInstance.has(placeholder.uuid);\n const requiredForReadiness = this.readinessDependeeByInstance.has(\n placeholder.uuid,\n );\n const preservedTransportIds = new Set<string>();\n\n if (resolvedInstance && frontendRoutingRole) {\n const resolvedHasFrontendRoute = resolvedInstance.transports.some(\n (transport) => transport.role === frontendRoutingRole && !transport.deleted,\n );\n\n if (!resolvedHasFrontendRoute) {\n const transportsToPreserve = placeholder.transports.filter(\n (transport) =>\n transport.role === frontendRoutingRole && !transport.deleted,\n );\n\n for (const transport of transportsToPreserve) {\n if (\n resolvedInstance.transports.some(\n (existingTransport) =>\n existingTransport.role === transport.role &&\n existingTransport.origin === transport.origin,\n )\n ) {\n continue;\n }\n\n resolvedInstance.transports.push({\n ...transport,\n serviceInstanceId: resolvedInstanceId,\n });\n preservedTransportIds.add(transport.uuid);\n }\n }\n }\n\n for (const transport of placeholder.transports) {\n if (preservedTransportIds.has(transport.uuid)) {\n continue;\n }\n const transportKey = buildTransportClientKey(transport);\n emit(`meta.socket_shutdown_requested:${transportKey}`, {});\n emit(`meta.fetch.destroy_requested:${transportKey}`, {});\n }\n\n this.unregisterDependee(placeholder.uuid, serviceName);\n\n if (wasDependee) {\n this.registerDependee(serviceName, resolvedInstanceId, {\n requiredForReadiness,\n });\n }\n }\n\n this.instances.set(\n serviceName,\n instances.filter((instance) => !instance.isBootstrapPlaceholder),\n );\n }\n\n private adoptBootstrapPlaceholderInstanceId(\n serviceName: string,\n placeholderInstanceId: string,\n resolvedInstanceId: string,\n ): ServiceInstanceDescriptor | undefined {\n if (!serviceName || !placeholderInstanceId || !resolvedInstanceId) {\n return undefined;\n }\n\n const instances = this.instances.get(serviceName);\n if (!instances?.length) {\n return undefined;\n }\n\n const resolvedInstance = instances.find(\n (instance) => instance.uuid === resolvedInstanceId,\n );\n if (resolvedInstance) {\n return resolvedInstance;\n }\n\n const placeholder = instances.find(\n (instance) =>\n instance.uuid === placeholderInstanceId && instance.isBootstrapPlaceholder,\n );\n if (!placeholder) {\n return undefined;\n }\n\n const wasDependee = this.dependeeByInstance.has(placeholderInstanceId);\n const dependeeServiceName =\n this.dependeeByInstance.get(placeholderInstanceId) ?? serviceName;\n const requiredForReadiness = this.readinessDependeeByInstance.has(\n placeholderInstanceId,\n );\n const lastHeartbeatAt =\n this.lastHeartbeatAtByInstance.get(placeholderInstanceId) ?? Date.now();\n const missedHeartbeats =\n this.missedHeartbeatsByInstance.get(placeholderInstanceId) ?? 0;\n const inFlight = this.runtimeStatusFallbackInFlightByInstance.has(\n placeholderInstanceId,\n );\n\n this.dependeeByInstance.delete(placeholderInstanceId);\n this.readinessDependeeByInstance.delete(placeholderInstanceId);\n this.lastHeartbeatAtByInstance.delete(placeholderInstanceId);\n this.missedHeartbeatsByInstance.delete(placeholderInstanceId);\n this.runtimeStatusFallbackInFlightByInstance.delete(placeholderInstanceId);\n\n placeholder.uuid = resolvedInstanceId;\n placeholder.isBootstrapPlaceholder = false;\n placeholder.transports = placeholder.transports.map((transport) => ({\n ...transport,\n serviceInstanceId: resolvedInstanceId,\n }));\n\n if (wasDependee) {\n this.dependeeByInstance.set(resolvedInstanceId, dependeeServiceName);\n if (this.dependeesByService.has(dependeeServiceName)) {\n this.dependeesByService.get(dependeeServiceName)!.delete(\n placeholderInstanceId,\n );\n this.dependeesByService.get(dependeeServiceName)!.add(resolvedInstanceId);\n }\n this.lastHeartbeatAtByInstance.set(resolvedInstanceId, lastHeartbeatAt);\n this.missedHeartbeatsByInstance.set(resolvedInstanceId, missedHeartbeats);\n }\n\n if (requiredForReadiness) {\n this.readinessDependeeByInstance.set(resolvedInstanceId, serviceName);\n if (this.readinessDependeesByService.has(serviceName)) {\n this.readinessDependeesByService.get(serviceName)!.delete(\n placeholderInstanceId,\n );\n this.readinessDependeesByService.get(serviceName)!.add(resolvedInstanceId);\n }\n }\n\n if (inFlight) {\n this.runtimeStatusFallbackInFlightByInstance.add(resolvedInstanceId);\n }\n\n return placeholder;\n }\n\n private getHeartbeatMisses(serviceInstanceId: string, now = Date.now()): number {\n const observedMisses = this.missedHeartbeatsByInstance.get(serviceInstanceId) ?? 0;\n const lastHeartbeatAt = this.lastHeartbeatAtByInstance.get(serviceInstanceId) ?? 0;\n if (lastHeartbeatAt <= 0) {\n return Math.max(observedMisses, this.runtimeStatusMissThreshold);\n }\n\n const estimatedMisses = Math.max(\n 0,\n Math.floor((now - lastHeartbeatAt) / this.runtimeStatusHeartbeatIntervalMs),\n );\n\n return Math.max(observedMisses, estimatedMisses);\n }\n\n private shouldRequireReadinessFromCommunicationTypes(\n communicationTypes: unknown,\n ): boolean {\n if (!Array.isArray(communicationTypes)) {\n return false;\n }\n\n return communicationTypes.some((type) => {\n const normalized = String(type).toLowerCase();\n return normalized === \"delegation\" || normalized === \"inquiry\";\n });\n }\n\n private resolveRuntimeStatusSnapshot(\n numberOfRunningGraphs: number,\n isActive: boolean,\n isNonResponsive: boolean,\n isBlocked: boolean,\n ): RuntimeStatusSnapshot {\n return resolveRuntimeStatus({\n numberOfRunningGraphs,\n isActive,\n isNonResponsive,\n isBlocked,\n degradedGraphThreshold: this.degradedGraphThreshold,\n overloadedGraphThreshold: this.overloadedGraphThreshold,\n });\n }\n\n private normalizeRuntimeStatusReport(ctx: AnyObject): RuntimeStatusReport | null {\n const serviceName =\n ctx.serviceName ?? ctx.__serviceName ?? ctx.serviceInstance?.serviceName;\n const serviceInstanceId =\n ctx.serviceInstanceId ??\n ctx.__serviceInstanceId ??\n ctx.serviceInstance?.uuid;\n if (!serviceName || !serviceInstanceId) {\n return null;\n }\n const transportId =\n ctx.transportId ??\n ctx.serviceTransportId ??\n ctx.serviceTransport?.uuid ??\n undefined;\n const transportRole =\n ctx.transportRole ??\n ctx.transport_role ??\n ctx.serviceTransport?.role ??\n undefined;\n const transportOrigin =\n ctx.transportOrigin ??\n ctx.serviceOrigin ??\n ctx.serviceTransport?.origin ??\n undefined;\n const transportProtocols = Array.isArray(\n ctx.transportProtocols ?? ctx.serviceTransport?.protocols,\n )\n ? ((ctx.transportProtocols ?? ctx.serviceTransport?.protocols) as unknown[])\n .map((entry) => String(entry))\n .filter(\n (entry): entry is ServiceTransportProtocol =>\n entry === \"rest\" || entry === \"socket\",\n )\n : undefined;\n\n const numberOfRunningGraphs = Math.max(\n 0,\n Math.trunc(\n Number(ctx.numberOfRunningGraphs ?? ctx.__numberOfRunningGraphs ?? 0),\n ),\n );\n const isActive = Boolean(ctx.isActive ?? ctx.__active ?? true);\n const isNonResponsive = Boolean(ctx.isNonResponsive ?? false);\n const isBlocked = Boolean(ctx.isBlocked ?? false);\n\n const resolved = this.resolveRuntimeStatusSnapshot(\n numberOfRunningGraphs,\n isActive,\n isNonResponsive,\n isBlocked,\n );\n\n return {\n serviceName,\n serviceInstanceId,\n transportId:\n typeof transportId === \"string\" && transportId.trim().length > 0\n ? transportId\n : undefined,\n transportRole:\n transportRole === \"internal\" || transportRole === \"public\"\n ? transportRole\n : undefined,\n transportOrigin:\n typeof transportOrigin === \"string\" && transportOrigin.trim().length > 0\n ? transportOrigin\n : undefined,\n transportProtocols:\n transportProtocols && transportProtocols.length > 0\n ? Array.from(new Set(transportProtocols))\n : undefined,\n isFrontend:\n typeof ctx.isFrontend === \"boolean\"\n ? ctx.isFrontend\n : typeof ctx.serviceInstance?.isFrontend === \"boolean\"\n ? ctx.serviceInstance.isFrontend\n : undefined,\n reportedAt:\n ctx.reportedAt ??\n (typeof ctx.__reportedAt === \"string\" ? ctx.__reportedAt : undefined) ??\n new Date().toISOString(),\n state:\n ctx.state === \"healthy\" ||\n ctx.state === \"degraded\" ||\n ctx.state === \"overloaded\" ||\n ctx.state === \"unavailable\"\n ? ctx.state\n : resolved.state,\n acceptingWork:\n typeof ctx.acceptingWork === \"boolean\"\n ? ctx.acceptingWork\n : resolved.acceptingWork,\n numberOfRunningGraphs,\n isActive,\n isNonResponsive,\n isBlocked,\n health: (ctx.health ?? ctx.__health ?? {}) as AnyObject,\n };\n }\n\n private applyRuntimeStatusReport(report: RuntimeStatusReport): boolean {\n const instance = this.getInstance(report.serviceName, report.serviceInstanceId);\n if (!instance) {\n return false;\n }\n\n if (report.transportId && report.transportOrigin) {\n const protocols =\n report.transportProtocols && report.transportProtocols.length > 0\n ? report.transportProtocols\n : ([\"rest\", \"socket\"] as ServiceTransportProtocol[]);\n const existingTransport = this.getTransportById(instance, report.transportId);\n if (existingTransport) {\n if (report.transportRole) {\n existingTransport.role = report.transportRole;\n }\n existingTransport.origin = report.transportOrigin;\n existingTransport.protocols = protocols;\n } else {\n instance.transports.push({\n uuid: report.transportId,\n serviceInstanceId: report.serviceInstanceId,\n role: report.transportRole ?? this.getRoutingTransportRole(),\n origin: report.transportOrigin,\n protocols,\n securityProfile: null,\n authStrategy: null,\n });\n }\n }\n\n if (typeof report.isFrontend === \"boolean\") {\n instance.isFrontend = report.isFrontend;\n }\n\n instance.numberOfRunningGraphs = report.numberOfRunningGraphs;\n instance.isActive = report.isActive;\n instance.isNonResponsive = report.isNonResponsive;\n instance.isBlocked = report.isBlocked;\n instance.runtimeState = report.state;\n instance.acceptingWork = report.acceptingWork;\n instance.reportedAt = report.reportedAt;\n instance.health = {\n ...(instance.health ?? {}),\n ...(report.health ?? {}),\n runtimeStatus: {\n state: report.state,\n acceptingWork: report.acceptingWork,\n reportedAt: report.reportedAt,\n },\n };\n\n return true;\n }\n\n private buildLocalRuntimeStatusReport(\n detailLevel: \"minimal\" | \"full\" = \"minimal\",\n ): RuntimeStatusReport | null {\n if (!this.serviceName || !this.serviceInstanceId) {\n return null;\n }\n\n const localInstance = this.getLocalInstance();\n if (!localInstance) {\n return null;\n }\n\n const numberOfRunningGraphs =\n this.activeRoutineExecutionIds.size || this.numberOfRunningGraphs || 0;\n this.numberOfRunningGraphs = numberOfRunningGraphs;\n\n const snapshot = this.resolveRuntimeStatusSnapshot(\n numberOfRunningGraphs,\n localInstance.isActive,\n localInstance.isNonResponsive,\n localInstance.isBlocked,\n );\n const reportedAt = new Date().toISOString();\n\n const transport = this.getRouteableTransport(\n localInstance,\n this.useSocket ? \"socket\" : \"rest\",\n \"internal\",\n );\n\n const report: RuntimeStatusReport = {\n serviceName: this.serviceName,\n serviceInstanceId: this.serviceInstanceId,\n transportId: transport?.uuid ?? undefined,\n transportRole: transport?.role ?? undefined,\n transportOrigin: transport?.origin ?? undefined,\n transportProtocols: transport?.protocols ?? undefined,\n isFrontend: localInstance.isFrontend,\n reportedAt,\n state: snapshot.state,\n acceptingWork: snapshot.acceptingWork,\n numberOfRunningGraphs: snapshot.numberOfRunningGraphs,\n isActive: snapshot.isActive,\n isNonResponsive: snapshot.isNonResponsive,\n isBlocked: snapshot.isBlocked,\n health: {\n ...(localInstance.health ?? {}),\n runtimeStatus: {\n state: snapshot.state,\n acceptingWork: snapshot.acceptingWork,\n reportedAt,\n },\n },\n };\n\n this.applyRuntimeStatusReport(report);\n if (detailLevel !== \"full\") {\n delete report.health;\n }\n\n return report;\n }\n\n private selectRuntimeStatusReportForTarget(\n inquiryResult: AnyObject,\n targetServiceName: string,\n targetServiceInstanceId: string,\n ): RuntimeStatusReport | null {\n const reports = Array.isArray(inquiryResult.runtimeStatusReports)\n ? inquiryResult.runtimeStatusReports\n : [];\n\n for (const candidate of reports) {\n const report = this.normalizeRuntimeStatusReport(candidate);\n if (!report) {\n continue;\n }\n\n if (\n report.serviceName === targetServiceName &&\n report.serviceInstanceId === targetServiceInstanceId\n ) {\n return report;\n }\n }\n\n return null;\n }\n\n private async resolveRuntimeStatusFallbackInquiry(\n serviceName: string,\n serviceInstanceId: string,\n options: {\n detailLevel?: \"minimal\" | \"full\";\n overallTimeoutMs?: number;\n perResponderTimeoutMs?: number;\n requireComplete?: boolean;\n } = {},\n ): Promise<{ report: RuntimeStatusReport; inquiryMeta: AnyObject }> {\n const instance = this.getInstance(serviceName, serviceInstanceId);\n const directStatusCheck = instance\n ? await this.requestRuntimeStatusViaRest(\n instance,\n serviceName,\n serviceInstanceId,\n )\n : {\n report: null,\n diagnostic: {\n attempted: false,\n outcome: \"instance_missing\",\n } satisfies RuntimeStatusFallbackRestDiagnostic,\n };\n\n if (directStatusCheck.report) {\n if (!this.applyRuntimeStatusReport(directStatusCheck.report)) {\n throw this.createRuntimeStatusFallbackError(\n `No tracked instance for runtime fallback ${serviceName}/${serviceInstanceId}`,\n {\n target: {\n serviceName,\n serviceInstanceId,\n },\n instance: this.summarizeInstanceForRuntimeStatusFallback(instance),\n directStatusCheck: directStatusCheck.diagnostic,\n inquiry: {\n meta: {},\n reportTargets: [],\n },\n },\n );\n }\n\n this.lastHeartbeatAtByInstance.set(serviceInstanceId, Date.now());\n this.missedHeartbeatsByInstance.set(serviceInstanceId, 0);\n\n return {\n report: directStatusCheck.report,\n inquiryMeta: {\n inquiry: META_RUNTIME_STATUS_INTENT,\n responded: 1,\n failed: 0,\n timedOut: 0,\n pending: 0,\n directStatusCheck: true,\n },\n };\n }\n\n const inquiryResult = await Cadenza.inquire(\n META_RUNTIME_STATUS_INTENT,\n {\n targetServiceName: serviceName,\n targetServiceInstanceId: serviceInstanceId,\n detailLevel: options.detailLevel ?? \"minimal\",\n __preferredTransportProtocol: \"rest\",\n },\n {\n overallTimeoutMs:\n options.overallTimeoutMs ?? this.runtimeStatusFallbackTimeoutMs,\n perResponderTimeoutMs:\n options.perResponderTimeoutMs ??\n Math.max(250, Math.floor(this.runtimeStatusFallbackTimeoutMs * 0.75)),\n requireComplete: options.requireComplete ?? false,\n },\n );\n\n const report = this.selectRuntimeStatusReportForTarget(\n inquiryResult,\n serviceName,\n serviceInstanceId,\n );\n\n if (!report) {\n throw this.createRuntimeStatusFallbackError(\n `No runtime status report for ${serviceName}/${serviceInstanceId}`,\n {\n target: {\n serviceName,\n serviceInstanceId,\n },\n instance: this.summarizeInstanceForRuntimeStatusFallback(instance),\n directStatusCheck: directStatusCheck.diagnostic,\n inquiry: {\n meta:\n inquiryResult.__inquiryMeta &&\n typeof inquiryResult.__inquiryMeta === \"object\"\n ? inquiryResult.__inquiryMeta\n : {},\n reportTargets: this.summarizeRuntimeStatusInquiryReports(inquiryResult),\n },\n },\n );\n }\n\n if (!this.applyRuntimeStatusReport(report)) {\n throw this.createRuntimeStatusFallbackError(\n `No tracked instance for runtime fallback ${serviceName}/${serviceInstanceId}`,\n {\n target: {\n serviceName,\n serviceInstanceId,\n },\n instance: this.summarizeInstanceForRuntimeStatusFallback(instance),\n directStatusCheck: directStatusCheck.diagnostic,\n inquiry: {\n meta:\n inquiryResult.__inquiryMeta &&\n typeof inquiryResult.__inquiryMeta === \"object\"\n ? inquiryResult.__inquiryMeta\n : {},\n reportTargets: this.summarizeRuntimeStatusInquiryReports(inquiryResult),\n },\n },\n );\n }\n\n this.lastHeartbeatAtByInstance.set(serviceInstanceId, Date.now());\n this.missedHeartbeatsByInstance.set(serviceInstanceId, 0);\n\n return {\n report,\n inquiryMeta: inquiryResult.__inquiryMeta ?? {},\n };\n }\n\n private async requestRuntimeStatusViaRest(\n instance: ServiceInstanceDescriptor,\n serviceName: string,\n serviceInstanceId: string,\n ): Promise<{\n report: RuntimeStatusReport | null;\n diagnostic: RuntimeStatusFallbackRestDiagnostic;\n }> {\n if (typeof globalThis.fetch !== \"function\") {\n return {\n report: null,\n diagnostic: {\n attempted: false,\n outcome: \"fetch_unavailable\",\n },\n };\n }\n\n const transport = this.getRouteableTransport(instance, \"rest\");\n if (!transport) {\n return {\n report: null,\n diagnostic: {\n attempted: false,\n outcome: \"no_rest_transport\",\n },\n };\n }\n\n const controller =\n typeof AbortController === \"function\" ? new AbortController() : null;\n const timeoutId = controller\n ? setTimeout(() => controller.abort(), this.runtimeStatusFallbackTimeoutMs)\n : null;\n\n try {\n const response = await globalThis.fetch(`${transport.origin}/status`, {\n method: \"GET\",\n signal: controller?.signal,\n });\n\n if (\"ok\" in response && response.ok === false) {\n return {\n report: null,\n diagnostic: {\n attempted: true,\n outcome: \"http_error\",\n transport: this.summarizeTransportForDebug(transport),\n responseStatus:\n typeof response.status === \"number\" ? response.status : undefined,\n responseStatusText:\n typeof response.statusText === \"string\"\n ? response.statusText\n : undefined,\n },\n };\n }\n\n const payload =\n typeof response.json === \"function\" ? await response.json() : response;\n const report = this.normalizeRuntimeStatusReport({\n ...payload,\n serviceTransportId: payload?.serviceTransportId ?? transport.uuid,\n serviceOrigin: payload?.serviceOrigin ?? transport.origin,\n transportProtocols: payload?.transportProtocols ?? transport.protocols,\n });\n\n if (!report) {\n return {\n report: null,\n diagnostic: {\n attempted: true,\n outcome: \"invalid_report\",\n transport: this.summarizeTransportForDebug(transport),\n payloadKeys:\n payload && typeof payload === \"object\"\n ? Object.keys(payload as Record<string, unknown>).sort()\n : [],\n },\n };\n }\n\n if (\n report.serviceName !== serviceName ||\n report.serviceInstanceId !== serviceInstanceId\n ) {\n return {\n report: null,\n diagnostic: {\n attempted: true,\n outcome: \"identity_mismatch\",\n transport: this.summarizeTransportForDebug(transport),\n payloadServiceName: report.serviceName,\n payloadServiceInstanceId: report.serviceInstanceId,\n },\n };\n }\n\n return {\n report,\n diagnostic: {\n attempted: true,\n outcome: \"matched\",\n transport: this.summarizeTransportForDebug(transport),\n },\n };\n } catch (error) {\n return {\n report: null,\n diagnostic: {\n attempted: true,\n outcome: \"fetch_error\",\n transport: this.summarizeTransportForDebug(transport),\n error: error instanceof Error ? error.message : String(error),\n },\n };\n } finally {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n }\n }\n\n private evaluateDependencyReadinessDetail(\n serviceName: string,\n serviceInstanceId: string,\n now = Date.now(),\n ): DependencyReadinessDetail {\n const instance = this.getInstance(serviceName, serviceInstanceId);\n const missedHeartbeats = this.getHeartbeatMisses(serviceInstanceId, now);\n const runtimeState = instance\n ? (instance.runtimeState ??\n this.resolveRuntimeStatusSnapshot(\n instance.numberOfRunningGraphs ?? 0,\n instance.isActive,\n instance.isNonResponsive,\n instance.isBlocked,\n ).state)\n : \"unavailable\";\n const acceptingWork = instance\n ? (typeof instance.acceptingWork === \"boolean\"\n ? instance.acceptingWork\n : this.resolveRuntimeStatusSnapshot(\n instance.numberOfRunningGraphs ?? 0,\n instance.isActive,\n instance.isNonResponsive,\n instance.isBlocked,\n ).acceptingWork)\n : false;\n\n const evaluation = evaluateDependencyReadiness({\n exists: Boolean(instance),\n runtimeState,\n acceptingWork,\n missedHeartbeats,\n missThreshold: this.runtimeStatusMissThreshold,\n });\n\n const lastHeartbeat = this.lastHeartbeatAtByInstance.get(serviceInstanceId);\n return {\n serviceName,\n serviceInstanceId,\n dependencyState: evaluation.state,\n runtimeState,\n acceptingWork,\n missedHeartbeats,\n stale: evaluation.stale,\n blocked: evaluation.blocked,\n reason: evaluation.reason,\n lastHeartbeatAt: lastHeartbeat\n ? new Date(lastHeartbeat).toISOString()\n : null,\n reportedAt: instance?.reportedAt ?? null,\n };\n }\n\n private async buildLocalReadinessReport(\n options: {\n detailLevel?: \"minimal\" | \"full\";\n includeDependencies?: boolean;\n refreshStaleDependencies?: boolean;\n } = {},\n ): Promise<ReadinessReport | null> {\n const localRuntime = this.buildLocalRuntimeStatusReport(\"minimal\");\n if (!localRuntime) {\n return null;\n }\n\n const detailLevel = options.detailLevel ?? \"minimal\";\n const includeDependencies =\n options.includeDependencies ?? detailLevel === \"full\";\n const refreshStaleDependencies = options.refreshStaleDependencies ?? true;\n const dependencyPairs = Array.from(this.readinessDependeesByService.entries())\n .flatMap(([serviceName, instanceIds]) =>\n Array.from(instanceIds).map((serviceInstanceId) => ({\n serviceName,\n serviceInstanceId,\n })),\n )\n .sort((left, right) => {\n if (left.serviceName !== right.serviceName) {\n return left.serviceName.localeCompare(right.serviceName);\n }\n return left.serviceInstanceId.localeCompare(right.serviceInstanceId);\n });\n\n if (refreshStaleDependencies) {\n for (const dependency of dependencyPairs) {\n const misses = this.getHeartbeatMisses(dependency.serviceInstanceId);\n if (misses < this.runtimeStatusMissThreshold) {\n continue;\n }\n\n if (\n this.runtimeStatusFallbackInFlightByInstance.has(\n dependency.serviceInstanceId,\n )\n ) {\n continue;\n }\n\n this.runtimeStatusFallbackInFlightByInstance.add(\n dependency.serviceInstanceId,\n );\n try {\n await this.resolveRuntimeStatusFallbackInquiry(\n dependency.serviceName,\n dependency.serviceInstanceId,\n );\n } catch (error) {\n Cadenza.log(\n \"Readiness dependency fallback failed.\",\n {\n serviceName: dependency.serviceName,\n serviceInstanceId: dependency.serviceInstanceId,\n error: error instanceof Error ? error.message : String(error),\n },\n \"warning\",\n );\n } finally {\n this.runtimeStatusFallbackInFlightByInstance.delete(\n dependency.serviceInstanceId,\n );\n }\n }\n }\n\n const now = Date.now();\n const dependencyDetails = dependencyPairs.map((dependency) =>\n this.evaluateDependencyReadinessDetail(\n dependency.serviceName,\n dependency.serviceInstanceId,\n now,\n ),\n );\n const dependencySummary = summarizeDependencyReadiness(\n dependencyDetails.map((detail) => ({\n state: detail.dependencyState,\n stale: detail.stale,\n blocked: detail.blocked,\n reason: detail.reason,\n })),\n );\n const readinessState = resolveServiceReadinessState(\n localRuntime.state,\n localRuntime.acceptingWork,\n dependencySummary,\n );\n\n return {\n serviceName: localRuntime.serviceName,\n serviceInstanceId: localRuntime.serviceInstanceId,\n reportedAt: new Date(now).toISOString(),\n readinessState,\n runtimeState: localRuntime.state,\n acceptingWork: localRuntime.acceptingWork,\n dependencySummary,\n ...(includeDependencies ? { dependencies: dependencyDetails } : {}),\n };\n }\n\n /**\n * Initializes a private constructor for managing service instances, remote signals,\n * service health, and handling updates or synchronization tasks. The constructor\n * creates a variety of meta tasks that process different lifecycle events and\n * service-related updates in a distributed service registry model.\n *\n * @return {Object} An instance of the constructed class with initialized tasks\n * and state management necessary to process service-related events.\n */\n private constructor() {\n Cadenza.defineIntent({\n name: META_RUNTIME_TRANSPORT_DIAGNOSTICS_INTENT,\n description:\n \"Gather transport diagnostics across all services and communication clients.\",\n input: {\n type: \"object\",\n properties: {\n detailLevel: {\n type: \"string\",\n constraints: {\n oneOf: [\"summary\", \"full\"],\n },\n },\n includeErrorHistory: {\n type: \"boolean\",\n },\n errorHistoryLimit: {\n type: \"number\",\n constraints: {\n min: 1,\n max: 200,\n },\n },\n },\n },\n output: {\n type: \"object\",\n properties: {\n transportDiagnostics: {\n type: \"object\",\n },\n },\n },\n });\n\n Cadenza.defineIntent({\n name: META_RUNTIME_STATUS_INTENT,\n description:\n \"Gather lightweight runtime status reports from services in the distributed runtime.\",\n input: {\n type: \"object\",\n properties: {\n detailLevel: {\n type: \"string\",\n constraints: {\n oneOf: [\"minimal\", \"full\"],\n },\n },\n targetServiceName: {\n type: \"string\",\n },\n targetServiceInstanceId: {\n type: \"string\",\n },\n },\n },\n output: {\n type: \"object\",\n properties: {\n runtimeStatusReports: {\n type: \"array\",\n },\n },\n },\n });\n\n Cadenza.createMetaTask(\n \"Respond runtime status inquiry\",\n (ctx) => {\n const targetServiceName = ctx.targetServiceName;\n const targetServiceInstanceId = ctx.targetServiceInstanceId;\n const detailLevel: \"minimal\" | \"full\" =\n ctx.detailLevel === \"full\" ? \"full\" : \"minimal\";\n const report = this.buildLocalRuntimeStatusReport(detailLevel);\n if (!report) {\n return {};\n }\n\n if (\n targetServiceName &&\n targetServiceName !== report.serviceName\n ) {\n return {};\n }\n\n if (\n targetServiceInstanceId &&\n targetServiceInstanceId !== report.serviceInstanceId\n ) {\n return {};\n }\n\n return {\n runtimeStatusReports: [report],\n };\n },\n \"Responds to runtime-status inquiries with local service instance status.\",\n ).respondsTo(META_RUNTIME_STATUS_INTENT);\n\n Cadenza.defineIntent({\n name: META_READINESS_INTENT,\n description:\n \"Gather service readiness reports derived from local runtime status and required dependees.\",\n input: {\n type: \"object\",\n properties: {\n detailLevel: {\n type: \"string\",\n constraints: {\n oneOf: [\"minimal\", \"full\"],\n },\n },\n includeDependencies: {\n type: \"boolean\",\n },\n refreshStaleDependencies: {\n type: \"boolean\",\n },\n targetServiceName: {\n type: \"string\",\n },\n targetServiceInstanceId: {\n type: \"string\",\n },\n },\n },\n output: {\n type: \"object\",\n properties: {\n readinessReports: {\n type: \"array\",\n },\n },\n },\n });\n\n Cadenza.createMetaTask(\n \"Respond readiness inquiry\",\n async (ctx) => {\n const targetServiceName = ctx.targetServiceName;\n const targetServiceInstanceId = ctx.targetServiceInstanceId;\n const report = await this.buildLocalReadinessReport({\n detailLevel: ctx.detailLevel === \"full\" ? \"full\" : \"minimal\",\n includeDependencies: ctx.includeDependencies,\n refreshStaleDependencies: ctx.refreshStaleDependencies,\n });\n if (!report) {\n return {};\n }\n\n if (targetServiceName && targetServiceName !== report.serviceName) {\n return {};\n }\n\n if (\n targetServiceInstanceId &&\n targetServiceInstanceId !== report.serviceInstanceId\n ) {\n return {};\n }\n\n return {\n readinessReports: [report],\n };\n },\n \"Responds to distributed readiness inquiries using required dependee health.\",\n ).respondsTo(META_READINESS_INTENT);\n\n this.handleInstanceUpdateTask = Cadenza.createMetaTask(\n \"Handle Instance Update\",\n (ctx, emit) => {\n const serviceInstance = normalizeServiceInstanceDescriptor(\n ctx.serviceInstance ??\n ctx.data ??\n ctx.queryData?.data ??\n (ctx.__serviceInstanceId || ctx.serviceInstanceId\n ? {\n uuid: ctx.__serviceInstanceId ?? ctx.serviceInstanceId,\n serviceName: ctx.__serviceName ?? ctx.serviceName,\n isFrontend: !!ctx.isFrontend,\n isActive:\n typeof ctx.isActive === \"boolean\"\n ? ctx.isActive\n : typeof ctx.__active === \"boolean\"\n ? ctx.__active\n : true,\n isNonResponsive: !!ctx.isNonResponsive,\n isBlocked: !!ctx.isBlocked,\n health: (ctx.health ?? ctx.__health ?? {}) as AnyObject,\n numberOfRunningGraphs:\n ctx.numberOfRunningGraphs ?? ctx.__numberOfRunningGraphs ?? 0,\n isPrimary: false,\n isBootstrapPlaceholder: !!ctx.isBootstrapPlaceholder,\n transports: ctx.transports ?? [],\n }\n : undefined),\n );\n if (!serviceInstance) {\n return false;\n }\n const uuid = serviceInstance.uuid;\n const serviceName = serviceInstance.serviceName;\n const deleted = Boolean(\n ctx.deleted ?? ctx.serviceInstance?.deleted ?? ctx.data?.deleted,\n );\n if (uuid === this.serviceInstanceId) return;\n\n if (deleted) {\n const existingInstance = this.instances\n .get(serviceName)\n ?.find((instance) => instance.uuid === uuid);\n const indexToDelete =\n this.instances.get(serviceName)?.findIndex((i) => i.uuid === uuid) ?? -1;\n if (indexToDelete >= 0 && existingInstance) {\n this.instances.get(serviceName)?.splice(indexToDelete, 1);\n for (const transport of existingInstance.transports) {\n const transportKey = buildTransportClientKey(transport);\n emit(`meta.socket_shutdown_requested:${transportKey}`, {});\n emit(`meta.fetch.destroy_requested:${transportKey}`, {});\n }\n }\n\n if (this.instances.get(serviceName)?.length === 0) {\n this.instances.delete(serviceName);\n }\n\n this.unregisterDependee(uuid, serviceName);\n\n return;\n }\n\n if (!this.instances.has(serviceName))\n this.instances.set(serviceName, []);\n const instances = this.instances.get(serviceName)!;\n const existing = instances.find((i) => i.uuid === uuid);\n\n if (existing) {\n Object.assign(existing, {\n ...serviceInstance,\n transports:\n serviceInstance.transports.length > 0\n ? serviceInstance.transports\n : existing.transports,\n clientCreatedTransportIds: existing.clientCreatedTransportIds ?? [],\n });\n } else {\n instances.push(serviceInstance);\n }\n\n const trackedInstance =\n existing ?? instances.find((instance) => instance.uuid === uuid);\n if (trackedInstance) {\n const snapshot = this.resolveRuntimeStatusSnapshot(\n trackedInstance.numberOfRunningGraphs ?? 0,\n trackedInstance.isActive,\n trackedInstance.isNonResponsive,\n trackedInstance.isBlocked,\n );\n trackedInstance.runtimeState = snapshot.state;\n trackedInstance.acceptingWork = snapshot.acceptingWork;\n trackedInstance.reportedAt =\n trackedInstance.reportedAt ?? new Date().toISOString();\n }\n\n if (!serviceInstance.isBootstrapPlaceholder) {\n this.reconcileBootstrapPlaceholderInstance(serviceName, uuid, emit);\n }\n\n if (this.serviceName === serviceName) {\n return false;\n }\n\n if (trackedInstance?.isFrontend) {\n return true;\n }\n\n if (\n this.deputies.has(serviceName) ||\n this.remoteIntents.has(serviceName) ||\n this.remoteSignals.has(serviceName)\n ) {\n const connected = this.ensureDependeeClientForInstance(\n trackedInstance!,\n emit,\n ctx,\n );\n\n if (!connected) {\n emit(\"meta.service_registry.routeable_transport_missing\", {\n serviceName,\n serviceInstanceId: uuid,\n requiredRole: this.getRoutingTransportRole(),\n isFrontend: this.isFrontend,\n });\n }\n }\n\n return true;\n },\n \"Handles instance updates to service instances\",\n )\n .emits(\"meta.service_registry.service_discovered\")\n .doOn(\n \"meta.initializing_service\",\n \"global.meta.service_instance.inserted\",\n \"global.meta.service_instance.updated\",\n \"meta.service_instance.inserted\",\n \"meta.service_instance.updated\",\n )\n .attachSignal(\n \"meta.service_registry.dependee_registered\",\n \"meta.socket_shutdown_requested\",\n \"meta.fetch.destroy_requested\",\n );\n\n this.handleTransportUpdateTask = Cadenza.createMetaTask(\n \"Handle Transport Update\",\n (ctx, emit) => {\n const transport = normalizeServiceTransportDescriptor(\n ctx.serviceTransport ?? ctx.data ?? ctx.queryData?.data ?? ctx,\n );\n if (!transport) {\n return false;\n }\n\n let ownerInstance: ServiceInstanceDescriptor | undefined;\n for (const instances of this.instances.values()) {\n ownerInstance = instances.find(\n (instance) => instance.uuid === transport.serviceInstanceId,\n );\n if (ownerInstance) {\n break;\n }\n }\n\n if (!ownerInstance) {\n return false;\n }\n\n if (transport.deleted) {\n ownerInstance.transports = ownerInstance.transports.filter(\n (existingTransport) => existingTransport.uuid !== transport.uuid,\n );\n const transportKey = buildTransportClientKey(transport);\n emit(`meta.socket_shutdown_requested:${transportKey}`, {});\n emit(`meta.fetch.destroy_requested:${transportKey}`, {});\n return true;\n }\n\n const existingTransport = this.getTransportById(ownerInstance, transport.uuid);\n if (existingTransport) {\n Object.assign(existingTransport, transport);\n } else {\n ownerInstance.transports.push(transport);\n }\n\n if (ownerInstance.uuid === this.serviceInstanceId) {\n return true;\n }\n\n const hasRemoteInterest =\n !ownerInstance.isFrontend &&\n (this.deputies.has(ownerInstance.serviceName) ||\n this.remoteIntents.has(ownerInstance.serviceName) ||\n this.remoteSignals.has(ownerInstance.serviceName)) &&\n transport.role === this.getRoutingTransportRole();\n\n if (!hasRemoteInterest) {\n return true;\n }\n\n this.ensureDependeeClientForInstance(ownerInstance, emit, ctx);\n\n return true;\n },\n \"Handles service transport updates independently from instance rows.\",\n )\n .doOn(\n \"global.meta.service_instance_transport.inserted\",\n \"global.meta.service_instance_transport.updated\",\n \"meta.service_instance_transport.inserted\",\n \"meta.service_instance_transport.updated\",\n )\n .attachSignal(\n \"meta.service_registry.dependee_registered\",\n \"meta.socket_shutdown_requested\",\n \"meta.fetch.destroy_requested\",\n );\n\n Cadenza.createMetaTask(\n \"Track dependee registration\",\n (ctx) => {\n if (!ctx.serviceName || !ctx.serviceInstanceId) {\n return false;\n }\n\n this.registerDependee(ctx.serviceName, ctx.serviceInstanceId, {\n requiredForReadiness: this.shouldRequireReadinessFromCommunicationTypes(\n ctx.communicationTypes,\n ),\n });\n return true;\n },\n \"Tracks remote dependency instances for runtime heartbeat monitoring.\",\n ).doOn(\"meta.service_registry.dependee_registered\");\n\n const normalizeServiceInstancesFromSync = (ctx: AnyObject) =>\n this.normalizeServiceInstancesFromSync(ctx);\n Cadenza.createMetaTask(\"Split service instances\", function* (ctx: any) {\n const serviceInstances = normalizeServiceInstancesFromSync(ctx);\n if (serviceInstances.length === 0) {\n return;\n }\n\n for (const serviceInstance of serviceInstances) {\n yield { serviceInstance };\n }\n })\n .doOn(\n \"meta.service_registry.registered_global_signals\",\n \"meta.service_registry.registered_global_intents\",\n )\n .then(this.handleInstanceUpdateTask);\n\n this.handleGlobalSignalRegistrationTask = Cadenza.createMetaTask(\n \"Handle global Signal Registration\",\n (ctx) => {\n const sortedSignalToTaskMap = this.normalizeSignalMaps(ctx).sort(\n (a: any, b: any) => {\n if (a.deleted && !b.deleted) return -1;\n if (!a.deleted && b.deleted) return 1;\n return 0;\n },\n );\n\n const locallyEmittedSignals = Cadenza.signalBroker\n .listEmittedSignals()\n .filter((s: any) => s.startsWith(\"global.\"));\n\n for (const map of sortedSignalToTaskMap) {\n if (map.deleted) {\n this.remoteSignals.get(map.serviceName)?.delete(map.signalName);\n\n if (!this.remoteSignals.get(map.serviceName)?.size) {\n this.remoteSignals.delete(map.serviceName);\n }\n\n Cadenza.get(\n `Transmit signal: ${map.signalName} to ${map.serviceName}`,\n )?.destroy();\n continue;\n }\n\n if (locallyEmittedSignals.includes(map.signalName)) {\n if (!this.remoteSignals.get(map.serviceName)) {\n this.remoteSignals.set(map.serviceName, new Set());\n }\n\n if (!this.remoteSignals.get(map.serviceName)?.has(map.signalName)) {\n Cadenza.createSignalTransmissionTask(\n map.signalName,\n map.serviceName,\n );\n }\n\n this.remoteSignals.get(map.serviceName)?.add(map.signalName);\n }\n }\n\n return true;\n },\n \"Handles registration of remote signals\",\n )\n .emits(\"meta.service_registry.registered_global_signals\")\n .doOn(\n \"global.meta.cadenza_db.gathered_sync_data\",\n \"global.meta.graph_metadata.task_signal_observed\",\n );\n\n this.reconcileGatheredSyncTransmissionsTask = Cadenza.createMetaTask(\n \"Reconcile gathered sync signal transmissions\",\n (ctx, emit) => this.reconcileGatheredSyncTransmissions(ctx, emit),\n \"Keeps gathered sync transmitters aligned with known remote service instances.\",\n ).doOn(\n CADENZA_DB_GATHERED_SYNC_SIGNAL,\n META_GATHERED_SYNC_TRANSMISSION_RECONCILE_SIGNAL,\n \"meta.service_registry.service_discovered\",\n );\n\n this.handleGlobalIntentRegistrationTask = Cadenza.createMetaTask(\n \"Handle global intent registration\",\n (ctx, emit) => {\n const intentToTaskMaps = this.normalizeIntentMaps(ctx);\n const sorted = intentToTaskMaps.sort((a, b) => {\n if (a.deleted && !b.deleted) return -1;\n if (!a.deleted && b.deleted) return 1;\n return 0;\n });\n\n for (const map of sorted) {\n try {\n if (map.deleted) {\n this.unregisterRemoteIntentDeputy(map);\n continue;\n }\n\n Cadenza.inquiryBroker.addIntent({\n name: map.intentName,\n });\n\n this.registerRemoteIntentDeputy(map);\n\n this.ensureDependeeClientsForService(map.serviceName, emit);\n } catch (error) {\n throw error;\n }\n }\n\n return true;\n },\n \"Handles registration of remote inquiry intent responders\",\n )\n .emits(\"meta.service_registry.registered_global_intents\")\n .doOn(\n \"global.meta.cadenza_db.gathered_sync_data\",\n \"global.meta.graph_metadata.task_intent_associated\",\n );\n\n this.handleServiceNotRespondingTask = Cadenza.createMetaTask(\n \"Handle service not responding\",\n (ctx, emit) => {\n const { serviceName, serviceInstanceId, serviceTransportId } = ctx;\n const serviceInstances = this.instances.get(serviceName);\n const instances = serviceInstances?.filter((instance) => {\n if (serviceInstanceId && instance.uuid === serviceInstanceId) {\n return true;\n }\n\n if (serviceTransportId) {\n return instance.transports.some(\n (transport) => transport.uuid === serviceTransportId,\n );\n }\n\n return false;\n });\n\n Cadenza.log(\n \"Service not responding.\",\n {\n serviceName,\n serviceInstanceId,\n serviceTransportId,\n instances,\n },\n \"warning\",\n serviceName,\n );\n\n for (const instance of instances ?? []) {\n instance.isActive = false;\n instance.isNonResponsive = true;\n const snapshot = this.resolveRuntimeStatusSnapshot(\n instance.numberOfRunningGraphs ?? 0,\n instance.isActive,\n instance.isNonResponsive,\n instance.isBlocked,\n );\n instance.runtimeState = snapshot.state;\n instance.acceptingWork = snapshot.acceptingWork;\n instance.reportedAt = new Date().toISOString();\n emit(\"global.meta.service_registry.service_not_responding\", {\n data: {\n isActive: false,\n isNonResponsive: true,\n },\n filter: {\n uuid: instance.uuid,\n },\n });\n }\n\n return true;\n },\n \"Handles service not responding\",\n )\n .doOn(\n \"meta.fetch.handshake_failed\",\n \"meta.fetch.handshake_failed.*\",\n \"meta.socket_client.disconnected\",\n \"meta.socket_client.disconnected.*\",\n \"meta.service_registry.runtime_status_unreachable\",\n )\n .attachSignal(\"global.meta.service_registry.service_not_responding\");\n\n this.handleServiceHandshakeTask = Cadenza.createMetaTask(\n \"Handle service handshake\",\n (ctx, emit) => {\n const { serviceName, serviceInstanceId } = ctx;\n const serviceInstances = this.instances.get(serviceName);\n let instance = serviceInstances?.find(\n (i) => i.uuid === serviceInstanceId,\n );\n\n if (!instance && serviceName && serviceInstanceId) {\n const bootstrapPlaceholder = serviceInstances?.find(\n (candidate) =>\n candidate.isBootstrapPlaceholder &&\n (!ctx.serviceTransportId ||\n candidate.transports.some(\n (transport) => transport.uuid === ctx.serviceTransportId,\n )),\n );\n\n if (bootstrapPlaceholder) {\n instance = this.adoptBootstrapPlaceholderInstanceId(\n serviceName,\n bootstrapPlaceholder.uuid,\n serviceInstanceId,\n );\n }\n }\n\n if (!instance) {\n return false;\n }\n\n instance.isActive = true;\n instance.isNonResponsive = false;\n const snapshot = this.resolveRuntimeStatusSnapshot(\n instance.numberOfRunningGraphs ?? 0,\n instance.isActive,\n instance.isNonResponsive,\n instance.isBlocked,\n );\n instance.runtimeState = snapshot.state;\n instance.acceptingWork = snapshot.acceptingWork;\n instance.reportedAt = new Date().toISOString();\n emit(\"global.meta.service_registry.service_handshake\", {\n data: {\n isActive: instance.isActive,\n isNonResponsive: instance.isNonResponsive,\n },\n filter: {\n uuid: instance.uuid,\n },\n });\n\n return true;\n },\n \"Handles service handshake\",\n )\n .doOn(\"meta.fetch.handshake_complete\")\n .attachSignal(\n \"global.meta.service_registry.service_handshake\",\n \"global.meta.service_registry.deleted\",\n );\n\n this.handleSocketStatusUpdateTask = Cadenza.createMetaTask(\n \"Handle Socket Status Update\",\n (ctx, emit) => {\n const report = this.normalizeRuntimeStatusReport(ctx);\n if (!report) {\n return false;\n }\n\n if (\n report.serviceName === this.serviceName &&\n report.serviceInstanceId === this.serviceInstanceId\n ) {\n return false;\n }\n\n let applied = this.applyRuntimeStatusReport(report);\n if (\n !applied &&\n report.transportId &&\n report.transportOrigin\n ) {\n if (!this.instances.has(report.serviceName)) {\n this.instances.set(report.serviceName, []);\n }\n\n this.instances.get(report.serviceName)!.push({\n uuid: report.serviceInstanceId,\n serviceName: report.serviceName,\n isFrontend: !!report.isFrontend,\n isActive: report.isActive,\n isNonResponsive: report.isNonResponsive,\n isBlocked: report.isBlocked,\n numberOfRunningGraphs: report.numberOfRunningGraphs,\n runtimeState: report.state,\n acceptingWork: report.acceptingWork,\n reportedAt: report.reportedAt,\n health: report.health ?? {},\n isPrimary: false,\n transports: [\n {\n uuid: report.transportId,\n serviceInstanceId: report.serviceInstanceId,\n role: report.transportRole ?? this.getRoutingTransportRole(),\n origin: report.transportOrigin,\n protocols:\n report.transportProtocols && report.transportProtocols.length > 0\n ? report.transportProtocols\n : ([\"rest\", \"socket\"] as ServiceTransportProtocol[]),\n securityProfile: null,\n authStrategy: null,\n },\n ],\n });\n applied = true;\n }\n\n if (!applied) {\n return false;\n }\n\n const updatedInstance = this.getInstance(\n report.serviceName,\n report.serviceInstanceId,\n );\n if (\n updatedInstance &&\n !updatedInstance.isFrontend &&\n (this.deputies.has(report.serviceName) ||\n this.remoteIntents.has(report.serviceName) ||\n this.remoteSignals.has(report.serviceName))\n ) {\n this.ensureDependeeClientForInstance(updatedInstance, emit, ctx);\n }\n\n this.registerDependee(report.serviceName, report.serviceInstanceId);\n this.lastHeartbeatAtByInstance.set(report.serviceInstanceId, Date.now());\n this.missedHeartbeatsByInstance.set(report.serviceInstanceId, 0);\n this.runtimeStatusFallbackInFlightByInstance.delete(\n report.serviceInstanceId,\n );\n return true;\n },\n \"Handles status update from socket broadcast\",\n ).doOn(\"meta.socket_client.status_received\");\n\n Cadenza.createMetaTask(\n \"Request full sync after CadenzaDB fetch handshake\",\n (ctx) => {\n const serviceName =\n typeof ctx.serviceName === \"string\"\n ? ctx.serviceName.trim()\n : typeof ctx.__serviceName === \"string\"\n ? ctx.__serviceName.trim()\n : \"\";\n\n if (serviceName !== \"CadenzaDB\") {\n return false;\n }\n\n return this.scheduleEarlyFullSyncRequests(\"cadenza_db_fetch_handshake\");\n },\n \"Schedules a few early service-registry full-sync retries after the authority fetch transport comes up.\",\n ).doOn(\"meta.fetch.handshake_complete\");\n\n this.fullSyncTask = Cadenza.createMetaTask(\n \"Full sync\",\n async (ctx) => {\n if (\n this.connectsToCadenzaDB &&\n this.serviceName !== \"CadenzaDB\" &&\n !this.hasBootstrapFullSyncDeputies()\n ) {\n return false;\n }\n\n const inquiryResult = await Cadenza.inquire(\n META_SERVICE_REGISTRY_FULL_SYNC_INTENT,\n {\n syncScope: \"service-registry-full-sync\",\n },\n ctx.inquiryOptions ?? ctx.__inquiryOptions ?? {},\n );\n\n const signalToTaskMaps = this.normalizeSignalMaps(\n inquiryResult as AnyObject,\n ).filter((m) => !!m.isGlobal);\n\n const intentToTaskMaps = this.normalizeIntentMaps(\n inquiryResult as AnyObject,\n );\n\n const serviceInstances = this.normalizeServiceInstancesFromSync(\n inquiryResult as AnyObject,\n );\n\n return {\n ...ctx,\n signalToTaskMaps,\n intentToTaskMaps,\n serviceInstances,\n __inquiryMeta: inquiryResult.__inquiryMeta,\n };\n },\n \"Runs service registry full sync through one distributed inquiry intent.\",\n )\n .doOn(\"meta.sync_requested\")\n .emits(\"meta.service_registry.initial_sync_complete\")\n .then(\n this.handleGlobalSignalRegistrationTask,\n this.handleGlobalIntentRegistrationTask,\n );\n\n this.getInstanceById = Cadenza.createMetaTask(\n \"Get instance by id\",\n (context) => {\n const { __id } = context;\n let instance;\n for (const instances of this.instances.values()) {\n instance = instances.find((i) => i.uuid === __id);\n if (instance) break;\n }\n return { ...context, __instance: instance };\n },\n \"Gets instance by id.\",\n );\n\n this.getInstancesByServiceName = Cadenza.createMetaTask(\n \"Get instances by name\",\n (context) => {\n const { __serviceName } = context;\n const instances = this.instances.get(__serviceName);\n if (!instances) {\n return false;\n }\n\n return { ...context, __instances: instances };\n },\n \"Gets instances by name.\",\n );\n\n this.handleDeputyRegistrationTask = Cadenza.createMetaTask(\n \"Handle Deputy Registration\",\n (ctx, emit) => {\n const { serviceName } = ctx;\n\n if (!this.deputies.has(serviceName)) this.deputies.set(serviceName, []);\n\n this.deputies.get(serviceName)!.push({\n serviceName,\n remoteRoutineName: ctx.remoteRoutineName,\n signalName: ctx.signalName,\n localTaskName: ctx.localTaskName,\n communicationType: ctx.communicationType,\n });\n\n this.ensureDependeeClientsForService(serviceName, emit, ctx);\n },\n ).doOn(\"meta.deputy.created\");\n\n this.getAllInstances = Cadenza.createMetaTask(\n \"Get all instances\",\n (context) => ({\n ...context,\n __instances: Array.from(this.instances.values()).flat(),\n }),\n \"Gets all instances.\",\n );\n\n this.doForEachInstance = Cadenza.createMetaTask(\n \"Do for each instance\",\n function* (context: AnyObject) {\n // @ts-ignore\n for (const instances of this.instances.values()) {\n for (const instance of instances) {\n yield { ...context, __instance: instance };\n }\n }\n }.bind(this),\n \"Yields each instance for branching.\",\n );\n\n this.deleteInstance = Cadenza.createMetaTask(\n \"Delete instance\",\n (context) => {\n const { __id } = context;\n this.instances.delete(__id);\n return context;\n },\n \"Deletes instance.\",\n ).doOn(\"global.meta.service_instance.deleted\");\n\n this.getBalancedInstance = Cadenza.createMetaTask(\n \"Get balanced instance\",\n (context, emit) => {\n if (context.__remoteRoutineName !== undefined) {\n context = ensureDelegationContextMetadata(context);\n }\n\n const {\n __serviceName,\n __triedInstances,\n __retries,\n __broadcast,\n targetServiceInstanceId,\n } = context;\n let retries = __retries ?? 0;\n let triedInstances = __triedInstances ?? [];\n const preferredRole = this.getRoutingTransportRole();\n const instances = this.instances\n .get(__serviceName)\n ?.filter((instance) => {\n if (\n targetServiceInstanceId &&\n instance.uuid !== targetServiceInstanceId\n ) {\n return false;\n }\n\n if (\n !instance.isActive ||\n instance.isNonResponsive ||\n instance.isBlocked\n ) {\n return false;\n }\n\n if (instance.isFrontend) {\n return true;\n }\n\n return Boolean(\n this.selectTransportForInstance(instance, context, preferredRole),\n );\n })\n .sort((a, b) => {\n const leftStatus = this.resolveRuntimeStatusSnapshot(\n a.numberOfRunningGraphs ?? 0,\n a.isActive,\n a.isNonResponsive,\n a.isBlocked,\n );\n const rightStatus = this.resolveRuntimeStatusSnapshot(\n b.numberOfRunningGraphs ?? 0,\n b.isActive,\n b.isNonResponsive,\n b.isBlocked,\n );\n\n const priorityDelta =\n runtimeStatusPriority(leftStatus.state) -\n runtimeStatusPriority(rightStatus.state);\n if (priorityDelta !== 0) {\n return priorityDelta;\n }\n\n return (\n (a.numberOfRunningGraphs ?? 0) - (b.numberOfRunningGraphs ?? 0)\n );\n });\n\n if (!instances || instances.length === 0 || retries > this.retryCount) {\n context.errored = true;\n context.__error =\n this.isFrontend && preferredRole === \"public\"\n ? `No public transport available for ${__serviceName}.`\n : `No routeable ${preferredRole} transport available for ${__serviceName}. Retries: ${retries}.`;\n emit(\n `meta.service_registry.load_balance_failed:${context.__metadata.__deputyExecId}`,\n context,\n );\n return context;\n }\n\n if (__broadcast || instances[0].isFrontend) {\n for (const instance of instances) {\n if (instance.isFrontend) {\n const fetchId = `browser:${instance.uuid}`;\n emit(\n `meta.service_registry.selected_instance_for_socket:${fetchId}`,\n {\n ...context,\n __instance: instance.uuid,\n __transportId: undefined,\n __transportOrigin: undefined,\n __transportProtocols: [\"socket\"],\n __fetchId: fetchId,\n },\n );\n continue;\n }\n\n const selectedTransport = this.selectTransportForInstance(\n instance,\n context,\n preferredRole,\n );\n if (!selectedTransport) {\n continue;\n }\n\n const transportKey = buildTransportClientKey(selectedTransport);\n emit(\n `${\n this.resolveTransportProtocolOrder(context)[0] === \"socket\" &&\n transportSupportsProtocol(selectedTransport, \"socket\")\n ? \"meta.service_registry.selected_instance_for_socket\"\n : \"meta.service_registry.selected_instance_for_fetch\"\n }:${transportKey}`,\n {\n ...context,\n __instance: instance.uuid,\n __transportId: selectedTransport.uuid,\n __transportOrigin: selectedTransport.origin,\n __transportProtocols: selectedTransport.protocols,\n __fetchId: transportKey,\n },\n );\n }\n\n return context;\n }\n\n let instancesToTry = instances.filter(\n (i) => !__triedInstances?.includes(i.uuid),\n );\n\n if (instancesToTry.length === 0) {\n if (this.useSocket) {\n emit(\n `meta.service_registry.socket_failed:${context.__fetchId}`,\n context,\n );\n }\n retries++;\n instancesToTry = instances;\n triedInstances = [];\n }\n\n let selected = instancesToTry[0];\n if (retries > 0) {\n selected =\n instancesToTry[Math.floor(Math.random() * instancesToTry.length)];\n }\n\n if (selected.isFrontend) {\n context.__instance = selected.uuid;\n context.__transportId = undefined;\n context.__transportOrigin = undefined;\n context.__transportProtocols = [\"socket\"];\n context.__fetchId = `browser:${selected.uuid}`;\n context.__triedInstances = triedInstances;\n context.__triedInstances.push(selected.uuid);\n context.__retries = retries;\n\n emit(\n `meta.service_registry.selected_instance_for_socket:${context.__fetchId}`,\n context,\n );\n return context;\n }\n\n const selectedTransport = this.selectTransportForInstance(\n selected,\n context,\n preferredRole,\n );\n\n if (!selectedTransport) {\n context.errored = true;\n context.__error = `No routeable ${preferredRole} transport available for ${selected.serviceName}/${selected.uuid}.`;\n emit(\n `meta.service_registry.load_balance_failed:${context.__metadata.__deputyExecId}`,\n context,\n );\n return context;\n }\n\n context.__instance = selected.uuid;\n context.__transportId = selectedTransport.uuid;\n context.__transportOrigin = selectedTransport.origin;\n context.__transportProtocols = selectedTransport.protocols;\n context.__fetchId = buildTransportClientKey(selectedTransport);\n context.__triedInstances = triedInstances;\n context.__triedInstances.push(selected.uuid);\n context.__retries = retries;\n\n if (\n this.resolveTransportProtocolOrder(context)[0] === \"socket\" &&\n transportSupportsProtocol(selectedTransport, \"socket\")\n ) {\n emit(\n `meta.service_registry.selected_instance_for_socket:${context.__fetchId}`,\n context,\n );\n } else {\n emit(\n `meta.service_registry.selected_instance_for_fetch:${context.__fetchId}`,\n context,\n );\n }\n\n return context;\n },\n \"Gets a balanced instance for load balancing\",\n )\n .doOn(\n \"meta.deputy.delegation_requested\",\n \"meta.signal_transmission.requested\",\n \"meta.socket_client.delegate_failed\",\n \"meta.fetch.delegate_failed\",\n \"meta.socket_client.signal_transmission_failed\",\n )\n .attachSignal(\n \"meta.service_registry.load_balance_failed\",\n \"meta.service_registry.selected_instance_for_socket\",\n \"meta.service_registry.selected_instance_for_fetch\",\n \"meta.service_registry.socket_failed\",\n );\n\n this.getStatusTask = Cadenza.createMetaTask(\n \"Get status\",\n (ctx) => this.resolveLocalStatusCheck(ctx),\n ).doOn(\n \"meta.socket.status_check_requested\",\n \"meta.rest.status_check_requested\",\n );\n\n Cadenza.createMetaTask(\n \"Track local routine start\",\n (ctx, emit) => {\n const sourceTaskName = String(ctx.__signalEmission?.taskName ?? \"\");\n if (INTERNAL_RUNTIME_STATUS_TASK_NAMES.has(sourceTaskName)) {\n return false;\n }\n\n const routineId = String(\n ctx.filter?.uuid ?? ctx.__routineExecId ?? \"\",\n );\n if (!routineId) {\n return false;\n }\n\n this.activeRoutineExecutionIds.add(routineId);\n this.numberOfRunningGraphs = this.activeRoutineExecutionIds.size;\n const localInstance = this.getLocalInstance();\n if (!localInstance) {\n return true;\n }\n\n const snapshot = this.resolveRuntimeStatusSnapshot(\n this.numberOfRunningGraphs,\n localInstance.isActive,\n localInstance.isNonResponsive,\n localInstance.isBlocked,\n );\n if (\n hasSignificantRuntimeStatusChange(this.lastRuntimeStatusSnapshot, snapshot)\n ) {\n emit(\"meta.service_registry.runtime_status_broadcast_requested\", {\n reason: \"runtime-state-change\",\n });\n }\n return true;\n },\n \"Tracks local routine starts for runtime load status.\",\n ).doOn(\"meta.node.started_routine_execution\");\n\n Cadenza.createMetaTask(\n \"Track local routine end\",\n (ctx, emit) => {\n const sourceTaskName = String(ctx.__signalEmission?.taskName ?? \"\");\n if (INTERNAL_RUNTIME_STATUS_TASK_NAMES.has(sourceTaskName)) {\n return false;\n }\n\n const routineId = String(\n ctx.filter?.uuid ?? ctx.__routineExecId ?? \"\",\n );\n if (!routineId) {\n return false;\n }\n\n this.activeRoutineExecutionIds.delete(routineId);\n this.numberOfRunningGraphs = this.activeRoutineExecutionIds.size;\n const localInstance = this.getLocalInstance();\n if (!localInstance) {\n return true;\n }\n\n const snapshot = this.resolveRuntimeStatusSnapshot(\n this.numberOfRunningGraphs,\n localInstance.isActive,\n localInstance.isNonResponsive,\n localInstance.isBlocked,\n );\n if (\n hasSignificantRuntimeStatusChange(this.lastRuntimeStatusSnapshot, snapshot)\n ) {\n emit(\"meta.service_registry.runtime_status_broadcast_requested\", {\n reason: \"runtime-state-change\",\n });\n }\n return true;\n },\n \"Tracks local routine completion for runtime load status.\",\n ).doOn(\"meta.node.ended_routine_execution\");\n\n Cadenza.createMetaTask(\n \"Start runtime status sharing intervals\",\n () => {\n if (this.runtimeStatusHeartbeatStarted) {\n return false;\n }\n\n this.runtimeStatusHeartbeatStarted = true;\n Cadenza.interval(\n META_RUNTIME_STATUS_HEARTBEAT_TICK_SIGNAL,\n { reason: \"heartbeat\" },\n this.runtimeStatusHeartbeatIntervalMs,\n true,\n );\n Cadenza.interval(\n META_RUNTIME_STATUS_MONITOR_TICK_SIGNAL,\n {},\n this.runtimeStatusHeartbeatIntervalMs,\n );\n return true;\n },\n \"Starts runtime status heartbeat and heartbeat-monitor loops once per service instance.\",\n ).doOn(\"meta.service_registry.instance_inserted\");\n\n Cadenza.createMetaTask(\n \"Broadcast runtime status\",\n (ctx, emit) => {\n const report = this.buildLocalRuntimeStatusReport(\n ctx.detailLevel === \"full\" ? \"full\" : \"minimal\",\n );\n if (!report) {\n return false;\n }\n\n const snapshot = this.resolveRuntimeStatusSnapshot(\n report.numberOfRunningGraphs,\n report.isActive,\n report.isNonResponsive,\n report.isBlocked,\n );\n const force =\n ctx.reason === \"heartbeat\" ||\n ctx.force === true ||\n this.lastRuntimeStatusSnapshot === null;\n\n if (\n !force &&\n !hasSignificantRuntimeStatusChange(this.lastRuntimeStatusSnapshot, snapshot)\n ) {\n return false;\n }\n\n this.lastRuntimeStatusSnapshot = snapshot;\n emit(\"meta.service.updated\", {\n __serviceName: report.serviceName,\n __serviceInstanceId: report.serviceInstanceId,\n __reportedAt: report.reportedAt,\n __numberOfRunningGraphs: report.numberOfRunningGraphs,\n __health: report.health ?? {},\n __active: report.isActive,\n serviceName: report.serviceName,\n serviceInstanceId: report.serviceInstanceId,\n transportId: report.transportId,\n transportRole: report.transportRole,\n transportOrigin: report.transportOrigin,\n transportProtocols: report.transportProtocols,\n isFrontend: report.isFrontend,\n reportedAt: report.reportedAt,\n numberOfRunningGraphs: report.numberOfRunningGraphs,\n health: report.health ?? {},\n isActive: report.isActive,\n isNonResponsive: report.isNonResponsive,\n isBlocked: report.isBlocked,\n state: report.state,\n acceptingWork: report.acceptingWork,\n });\n return true;\n },\n \"Broadcasts local runtime status to connected dependees.\",\n ).doOn(\n META_RUNTIME_STATUS_HEARTBEAT_TICK_SIGNAL,\n \"meta.service_registry.runtime_status_broadcast_requested\",\n );\n\n Cadenza.createMetaTask(\n \"Monitor dependee heartbeat freshness\",\n (ctx, emit) => {\n if (!this.useSocket) {\n return false;\n }\n\n const now = Date.now();\n for (const [serviceName, instanceIds] of this.dependeesByService) {\n for (const serviceInstanceId of instanceIds) {\n const instance = this.getInstance(serviceName, serviceInstanceId);\n if (!instance || !instance.isActive || instance.isBlocked) {\n continue;\n }\n\n const lastHeartbeat =\n this.lastHeartbeatAtByInstance.get(serviceInstanceId) ?? 0;\n const misses = this.missedHeartbeatsByInstance.get(serviceInstanceId) ?? 0;\n const heartbeatBudget =\n this.runtimeStatusHeartbeatIntervalMs * (misses + 1);\n\n if (lastHeartbeat > 0 && now - lastHeartbeat < heartbeatBudget) {\n continue;\n }\n\n const nextMisses = misses + 1;\n this.missedHeartbeatsByInstance.set(serviceInstanceId, nextMisses);\n\n if (\n nextMisses < this.runtimeStatusMissThreshold ||\n this.runtimeStatusFallbackInFlightByInstance.has(serviceInstanceId)\n ) {\n continue;\n }\n\n this.runtimeStatusFallbackInFlightByInstance.add(serviceInstanceId);\n const transport = this.getRouteableTransport(\n instance,\n this.useSocket ? \"socket\" : \"rest\",\n );\n emit(\"meta.service_registry.runtime_status_fallback_requested\", {\n ...ctx,\n serviceName,\n serviceInstanceId,\n serviceTransportId: transport?.uuid,\n serviceOrigin: transport?.origin,\n transportProtocols: transport?.protocols,\n });\n }\n }\n\n return true;\n },\n \"Monitors dependee heartbeat freshness and requests inquiry fallback after repeated misses.\",\n ).doOn(META_RUNTIME_STATUS_MONITOR_TICK_SIGNAL);\n\n Cadenza.createMetaTask(\n \"Resolve runtime status fallback inquiry\",\n async (ctx, emit) => {\n const serviceName = ctx.serviceName;\n const serviceInstanceId = ctx.serviceInstanceId;\n if (!serviceName || !serviceInstanceId) {\n return false;\n }\n\n try {\n const { report, inquiryMeta } =\n await this.resolveRuntimeStatusFallbackInquiry(\n serviceName,\n serviceInstanceId,\n {\n detailLevel: ctx.detailLevel === \"full\" ? \"full\" : \"minimal\",\n overallTimeoutMs: ctx.overallTimeoutMs,\n perResponderTimeoutMs: ctx.perResponderTimeoutMs,\n requireComplete: ctx.requireComplete,\n },\n );\n\n return {\n ...ctx,\n runtimeStatusReport: report,\n __inquiryMeta: inquiryMeta,\n };\n } catch (error) {\n const instance = this.getInstance(serviceName, serviceInstanceId);\n const transport = instance\n ? this.getRouteableTransport(\n instance,\n this.useSocket ? \"socket\" : \"rest\",\n )\n : undefined;\n const message =\n error instanceof Error ? error.message : String(error);\n const diagnostics =\n error &&\n typeof error === \"object\" &&\n \"runtimeStatusFallback\" in error &&\n (error as AnyObject).runtimeStatusFallback &&\n typeof (error as AnyObject).runtimeStatusFallback === \"object\"\n ? (error as AnyObject).runtimeStatusFallback\n : undefined;\n\n Cadenza.log(\n \"Runtime status fallback inquiry failed.\",\n {\n serviceName,\n serviceInstanceId,\n error: message,\n diagnostics,\n },\n \"warning\",\n );\n\n emit(\"meta.service_registry.runtime_status_unreachable\", {\n ...ctx,\n serviceName,\n serviceInstanceId,\n serviceTransportId: transport?.uuid ?? ctx.serviceTransportId,\n serviceOrigin: transport?.origin ?? ctx.serviceOrigin,\n transportProtocols: transport?.protocols ?? ctx.transportProtocols,\n __error: message,\n errored: true,\n });\n\n return {\n ...ctx,\n __error: message,\n errored: true,\n };\n } finally {\n this.runtimeStatusFallbackInFlightByInstance.delete(serviceInstanceId);\n }\n },\n \"Runs runtime-status inquiry fallback for a dependee instance after missed heartbeats.\",\n )\n .doOn(\"meta.service_registry.runtime_status_fallback_requested\")\n .emits(\"meta.service_registry.runtime_status_fallback_resolved\")\n .emitsOnFail(\"meta.service_registry.runtime_status_fallback_failed\");\n\n this.collectReadinessTask = Cadenza.createMetaTask(\n \"Collect distributed readiness\",\n async (ctx) => {\n const inquiryResult = await Cadenza.inquire(\n META_READINESS_INTENT,\n {\n detailLevel: ctx.detailLevel === \"full\" ? \"full\" : \"minimal\",\n includeDependencies: ctx.includeDependencies,\n refreshStaleDependencies: ctx.refreshStaleDependencies,\n targetServiceName: ctx.targetServiceName,\n targetServiceInstanceId: ctx.targetServiceInstanceId,\n },\n ctx.inquiryOptions ?? ctx.__inquiryOptions ?? {},\n );\n\n return {\n ...ctx,\n ...inquiryResult,\n };\n },\n \"Collects distributed readiness reports from services.\",\n )\n .doOn(\"meta.service_registry.readiness_requested\")\n .emits(\"meta.service_registry.readiness_collected\")\n .emitsOnFail(\"meta.service_registry.readiness_failed\");\n\n this.collectTransportDiagnosticsTask = Cadenza.createMetaTask(\n \"Collect transport diagnostics\",\n async (ctx) => {\n const inquiryResult = await Cadenza.inquire(\n META_RUNTIME_TRANSPORT_DIAGNOSTICS_INTENT,\n {\n detailLevel: ctx.detailLevel,\n includeErrorHistory: ctx.includeErrorHistory,\n errorHistoryLimit: ctx.errorHistoryLimit,\n },\n ctx.inquiryOptions ?? ctx.__inquiryOptions ?? {},\n );\n\n return {\n ...ctx,\n ...inquiryResult,\n };\n },\n \"Collects distributed transport diagnostics using inquiry responders.\",\n )\n .doOn(\"meta.service_registry.transport_diagnostics_requested\")\n .emits(\"meta.service_registry.transport_diagnostics_collected\")\n .emitsOnFail(\"meta.service_registry.transport_diagnostics_failed\");\n\n this.insertServiceTask = resolveServiceRegistryInsertTask(\n \"service\",\n {\n onConflict: {\n target: [\"name\"],\n action: {\n do: \"nothing\",\n },\n },\n },\n {\n // validateInputContext: true,\n inputSchema: {\n type: \"object\",\n properties: {\n data: {\n type: \"object\",\n properties: {\n name: {\n type: \"string\",\n },\n description: {\n type: \"string\",\n },\n display_name: {\n type: \"string\",\n },\n is_meta: {\n type: \"boolean\",\n },\n },\n required: [\"name\"],\n },\n },\n required: [\"data\"],\n },\n outputSchema: {\n type: \"object\",\n properties: {\n __serviceName: {\n type: \"string\",\n },\n },\n required: [\"__serviceName\"],\n },\n retryCount: 100,\n retryDelay: 10000,\n retryDelayMax: 60000,\n retryDelayFactor: 1.3,\n },\n )\n .emits(\"meta.service_registry.service_inserted\")\n .emitsOnFail(\"meta.service_registry.service_insertion_failed\");\n\n const insertServiceInstanceResolverTask = resolveServiceRegistryInsertTask(\n \"service_instance\",\n {\n onConflict: {\n target: [\"uuid\"],\n action: {\n do: \"update\",\n set: {\n process_pid: \"excluded\",\n is_primary: \"excluded\",\n service_name: \"excluded\",\n is_database: \"excluded\",\n is_frontend: \"excluded\",\n is_blocked: \"excluded\",\n is_non_responsive: \"excluded\",\n is_active: \"excluded\",\n last_active: \"excluded\",\n health: \"excluded\",\n deleted: \"false\",\n },\n },\n },\n },\n {\n inputSchema: {\n type: \"object\",\n properties: {\n data: {\n type: \"object\",\n properties: {\n uuid: {\n type: \"string\",\n },\n process_pid: {\n type: \"number\",\n },\n is_primary: {\n type: \"boolean\",\n },\n service_name: {\n type: \"string\",\n },\n is_active: {\n type: \"boolean\",\n },\n is_frontend: {\n type: \"boolean\",\n },\n is_database: {\n type: \"boolean\",\n },\n is_non_responsive: {\n type: \"boolean\",\n },\n is_blocked: {\n type: \"boolean\",\n },\n health: {\n type: \"object\",\n },\n },\n required: [\"uuid\", \"process_pid\", \"service_name\"],\n },\n },\n required: [\"data\"],\n },\n outputSchema: {\n type: \"object\",\n properties: {\n uuid: {\n type: \"string\",\n },\n },\n required: [\"uuid\"],\n },\n retryCount: 5,\n retryDelay: 1000,\n },\n ).emitsOnFail(\"meta.service_registry.instance_insertion_failed\");\n\n this.insertServiceInstanceTask = insertServiceInstanceResolverTask.then(\n Cadenza.createMetaTask(\n \"Setup service\",\n (ctx) => {\n const {\n serviceInstance,\n data,\n queryData,\n __useSocket,\n __retryCount,\n __isFrontend,\n } = ctx;\n const normalizedLocalInstance = normalizeServiceInstanceDescriptor({\n ...(serviceInstance ?? data ?? queryData?.data ?? {}),\n transports: ctx.__transportData ?? ctx.transportData ?? [],\n });\n\n if (\n !normalizedLocalInstance?.uuid ||\n !normalizedLocalInstance.serviceName\n ) {\n if (\n process.env.CADENZA_INSTANCE_DEBUG === \"1\" ||\n process.env.CADENZA_INSTANCE_DEBUG === \"true\"\n ) {\n console.log(\"[CADENZA_INSTANCE_DEBUG] setup_service_rejected_instance\", {\n hasServiceInstance: !!serviceInstance,\n hasData: !!data,\n hasQueryDataData: !!queryData?.data,\n serviceInstanceKeys:\n serviceInstance && typeof serviceInstance === \"object\"\n ? Object.keys(serviceInstance)\n : [],\n dataKeys:\n data && typeof data === \"object\" ? Object.keys(data) : [],\n queryDataDataKeys:\n queryData?.data && typeof queryData.data === \"object\"\n ? Object.keys(queryData.data)\n : [],\n normalizedLocalInstance,\n transportCount: Array.isArray(ctx.__transportData)\n ? ctx.__transportData.length\n : Array.isArray(ctx.transportData)\n ? ctx.transportData.length\n : 0,\n errored: ctx.errored === true,\n error: ctx.__error ?? null,\n inquiryMeta: ctx.__inquiryMeta ?? null,\n });\n }\n return false;\n }\n\n this.serviceInstanceId = normalizedLocalInstance.uuid;\n this.instances.set(\n normalizedLocalInstance.serviceName,\n [{ ...normalizedLocalInstance }],\n );\n this.useSocket = __useSocket;\n this.retryCount = __retryCount;\n this.isFrontend =\n typeof __isFrontend === \"boolean\"\n ? __isFrontend\n : !!normalizedLocalInstance.isFrontend;\n return {\n ...ctx,\n serviceInstance: normalizedLocalInstance,\n data: {\n ...(ctx.data ?? {}),\n uuid: normalizedLocalInstance.uuid,\n service_name: normalizedLocalInstance.serviceName,\n },\n __serviceName: normalizedLocalInstance.serviceName,\n __serviceInstanceId: normalizedLocalInstance.uuid,\n };\n },\n \"Sets service instance id after insertion\",\n )\n .emits(\"meta.service_registry.instance_inserted\")\n .then(\n Cadenza.createMetaTask(\n \"Prepare service transport inserts\",\n function* (ctx: AnyObject, emit) {\n const transportData = Array.isArray(ctx.__transportData)\n ? ctx.__transportData\n : Array.isArray(ctx.transportData)\n ? ctx.transportData\n : [];\n\n for (const transport of transportData) {\n const transportContext = {\n ...ctx,\n data: {\n ...transport,\n service_instance_id:\n transport.service_instance_id ?? ctx.__serviceInstanceId,\n },\n __registrationData: {\n ...transport,\n service_instance_id:\n transport.service_instance_id ?? ctx.__serviceInstanceId,\n },\n };\n emit(\n \"meta.service_registry.transport_registration_requested\",\n transportContext,\n );\n yield transportContext;\n }\n },\n \"Splits declared service transports into individual insert payloads.\",\n ).attachSignal(\"meta.service_registry.transport_registration_requested\"),\n ),\n );\n\n Cadenza.createMetaTask(\n \"Retry local service instance registration after failed insert\",\n (ctx) => {\n const serviceName = String(\n ctx.__serviceName ?? ctx.data?.service_name ?? this.serviceName ?? \"\",\n ).trim();\n\n if (!serviceName || serviceName !== this.serviceName) {\n return false;\n }\n\n Cadenza.schedule(\n \"meta.service_registry.instance_registration_requested\",\n { ...ctx },\n 5000,\n );\n\n return true;\n },\n \"Retries local service instance registration only after the previous insert attempt has failed.\",\n {\n register: false,\n isHidden: true,\n },\n ).doOn(\"meta.service_registry.instance_insertion_failed\");\n\n Cadenza.createMetaTask(\n \"Prepare service instance registration\",\n (ctx) => {\n if (\n process.env.CADENZA_INSTANCE_DEBUG === \"1\" ||\n process.env.CADENZA_INSTANCE_DEBUG === \"true\"\n ) {\n console.log(\"[CADENZA_INSTANCE_DEBUG] prepare_service_instance_registration\", {\n serviceName:\n ctx.data?.service_name ?? ctx.__serviceName ?? this.serviceName ?? null,\n serviceInstanceId:\n ctx.data?.uuid ?? ctx.__serviceInstanceId ?? this.serviceInstanceId ?? null,\n hasData: !!ctx.data,\n dataKeys:\n ctx.data && typeof ctx.data === \"object\"\n ? Object.keys(ctx.data)\n : [],\n transportCount: Array.isArray(ctx.__transportData)\n ? ctx.__transportData.length\n : Array.isArray(ctx.transportData)\n ? ctx.transportData.length\n : 0,\n skipRemoteExecution: ctx.__skipRemoteExecution === true,\n });\n }\n\n const serviceName = String(\n ctx.data?.service_name ?? ctx.__serviceName ?? this.serviceName ?? \"\",\n ).trim();\n\n if (\n serviceName === \"CadenzaDB\" &&\n !Cadenza.getLocalCadenzaDBInsertTask(\"service_instance\")\n ) {\n Cadenza.schedule(\n \"meta.service_registry.instance_registration_requested\",\n { ...ctx },\n 250,\n );\n return false;\n }\n\n return ctx;\n },\n \"Waits for the exact local CadenzaDB service instance insert task during self-bootstrap.\",\n )\n .doOn(\"meta.service_registry.instance_registration_requested\")\n .then(this.insertServiceInstanceTask);\n\n this.insertServiceTransportTask = resolveServiceRegistryInsertTask(\n \"service_instance_transport\",\n {\n onConflict: {\n target: [\"service_instance_id\", \"role\", \"origin\"],\n action: {\n do: \"update\",\n set: {\n protocols: \"excluded\",\n security_profile: \"excluded\",\n auth_strategy: \"excluded\",\n deleted: \"false\",\n },\n },\n },\n },\n {\n inputSchema: {\n type: \"object\",\n properties: {\n data: {\n type: \"object\",\n properties: {\n uuid: {\n type: \"string\",\n },\n service_instance_id: {\n type: \"string\",\n },\n role: {\n type: \"string\",\n },\n origin: {\n type: \"string\",\n },\n protocols: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n security_profile: {\n type: \"string\",\n },\n auth_strategy: {\n type: \"string\",\n },\n },\n required: [\"uuid\", \"service_instance_id\", \"role\", \"origin\"],\n },\n },\n required: [\"data\"],\n },\n outputSchema: {\n type: \"object\",\n properties: {\n uuid: {\n type: \"string\",\n },\n },\n required: [\"uuid\"],\n },\n retryCount: 5,\n retryDelay: 1000,\n },\n )\n .emits(\"meta.service_registry.transport_registered\")\n .emitsOnFail(\"meta.service_registry.transport_registration_failed\");\n\n Cadenza.createMetaTask(\n \"Prepare service transport registration\",\n (ctx) => {\n const serviceName = String(\n ctx.__serviceName ?? this.serviceName ?? \"\",\n ).trim();\n\n if (\n serviceName === \"CadenzaDB\" &&\n !Cadenza.getLocalCadenzaDBInsertTask(\"service_instance_transport\")\n ) {\n Cadenza.schedule(\n \"meta.service_registry.transport_registration_requested\",\n { ...ctx },\n 250,\n );\n return false;\n }\n\n return ctx;\n },\n \"Waits for the exact local CadenzaDB service transport insert task during self-bootstrap.\",\n )\n .doOn(\"meta.service_registry.transport_registration_requested\")\n .then(this.insertServiceTransportTask);\n\n Cadenza.createMetaTask(\n \"Handle service creation\",\n (ctx) => {\n if (!ctx.__cadenzaDBConnect) {\n ctx.__skipRemoteExecution = true;\n }\n\n if (isBrowser || ctx.__isFrontend) {\n Cadenza.createMetaTask(\"Prepare for signal sync\", () => {\n return {};\n })\n // .doAfter(this.fullSyncTask)\n .then(\n Cadenza.createCadenzaDBQueryTask(\"signal_registry\", {\n fields: [\"name\"],\n filter: {\n global: true,\n },\n }).then(\n Cadenza.createMetaTask(\n // TODO this is outdated. Fix it.\n \"Create signal transmission tasks\",\n (ctx, emit) => {\n const signalRegistry = ctx.signalRegistry;\n for (const signal of signalRegistry) {\n emit(\"meta.service_registry.foreign_signal_registered\", {\n __emitterSignalName: signal.name,\n __listenerServiceName: signal.serviceName,\n });\n }\n\n return true;\n },\n ).then(\n Cadenza.createMetaTask(\"Connect to services\", (ctx, emit) => {\n const services: string[] = Array.from(\n new Set(\n ctx.signalRegistry.map((s: any) => s.serviceName),\n ),\n );\n for (const service of services) {\n const instances = this.instances\n .get(service)!\n .filter((i) => i.isActive && !i.isFrontend);\n for (const instance of instances) {\n const transport = this.getRouteableTransport(\n instance,\n this.useSocket ? \"socket\" : \"rest\",\n );\n if (!transport) {\n continue;\n }\n\n if (\n !this.hasTransportClientCreated(instance, transport.uuid)\n ) {\n emit(\"meta.service_registry.dependee_registered\", {\n serviceName: service,\n serviceInstanceId: instance.uuid,\n serviceTransportId: transport.uuid,\n serviceOrigin: transport.origin,\n transportProtocols: transport.protocols,\n communicationTypes: [\"signal\"],\n });\n this.markTransportClientCreated(instance, transport.uuid);\n }\n }\n }\n return {};\n }),\n ),\n ),\n );\n }\n\n return ctx;\n },\n \"Handles the request to create a service instance\",\n )\n .doOn(\"meta.create_service_requested\")\n .then(this.insertServiceTask);\n }\n\n reset() {\n this.instances.clear();\n this.deputies.clear();\n this.remoteSignals.clear();\n this.remoteIntents.clear();\n this.gatheredSyncTransmissionServices.clear();\n this.remoteIntentDeputiesByKey.clear();\n this.remoteIntentDeputiesByTask.clear();\n this.dependeesByService.clear();\n this.dependeeByInstance.clear();\n this.readinessDependeesByService.clear();\n this.readinessDependeeByInstance.clear();\n this.lastHeartbeatAtByInstance.clear();\n this.missedHeartbeatsByInstance.clear();\n this.runtimeStatusFallbackInFlightByInstance.clear();\n this.activeRoutineExecutionIds.clear();\n this.numberOfRunningGraphs = 0;\n this.runtimeStatusHeartbeatStarted = false;\n this.lastRuntimeStatusSnapshot = null;\n this.isFrontend = false;\n }\n}\n","/**\n * A boolean variable indicating whether the current runtime environment is Node.js.\n *\n * This variable checks for the presence of the `process` object, which is specific to Node.js,\n * and verifies if the `process.versions.node` property is defined to confirm the environment.\n *\n * If the runtime is Node.js, `isNode` will be `true`; otherwise, it will be `false`.\n */\nexport const isNode =\n typeof process !== \"undefined\" && process.versions?.node != null;\n\n/**\n * A boolean variable that indicates whether the current runtime environment\n * is a browser. It checks for the presence of the `window` object and the\n * `document` property within it to determine if the code is running in a\n * browser context.\n *\n * - Returns `true` if the `window` object and its `document` property are\n * both defined, which typically indicates a browser environment.\n * - Returns `false` if the `window` object or `document` property is\n * undefined, which typically signifies a non-browser environment such\n * as a Node.js environment.\n */\nexport const isBrowser =\n typeof window !== \"undefined\" && typeof window.document !== \"undefined\";\n","import type { AnyObject } from \"@cadenza.io/core\";\nimport type {\n InquiryResponderDescriptor,\n InquiryResponderStatus,\n} from \"../types/inquiry\";\n\nexport const META_INTENT_PREFIX = \"meta-\";\nexport const META_RUNTIME_TRANSPORT_DIAGNOSTICS_INTENT =\n \"meta-runtime-transport-diagnostics\";\nexport const META_RUNTIME_STATUS_INTENT = \"meta-runtime-status\";\nexport const META_READINESS_INTENT = \"meta-readiness\";\n\nfunction isPlainObject(value: unknown): value is Record<string, any> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n Object.getPrototypeOf(value) === Object.prototype\n );\n}\n\nfunction deepMergeDeterministic(left: any, right: any): any {\n if (Array.isArray(left) && Array.isArray(right)) {\n return [...left, ...right];\n }\n\n if (isPlainObject(left) && isPlainObject(right)) {\n const merged: Record<string, any> = { ...left };\n const keys = Array.from(new Set([...Object.keys(left), ...Object.keys(right)])).sort();\n\n for (const key of keys) {\n if (!(key in left)) {\n merged[key] = right[key];\n continue;\n }\n\n if (!(key in right)) {\n merged[key] = left[key];\n continue;\n }\n\n merged[key] = deepMergeDeterministic(left[key], right[key]);\n }\n\n return merged;\n }\n\n return right;\n}\n\nexport function mergeInquiryContexts(contexts: AnyObject[]): AnyObject {\n return contexts.reduce((acc, next) => deepMergeDeterministic(acc, next), {});\n}\n\nexport function isMetaIntentName(intentName: string): boolean {\n return intentName.startsWith(META_INTENT_PREFIX);\n}\n\nexport function shouldExecuteInquiryResponder(\n inquiry: string,\n responderIsMeta: boolean,\n): boolean {\n if (!isMetaIntentName(inquiry)) {\n return true;\n }\n\n return responderIsMeta;\n}\n\nexport function compareResponderDescriptors(\n left: InquiryResponderDescriptor,\n right: InquiryResponderDescriptor,\n): number {\n if (left.serviceName !== right.serviceName) {\n return left.serviceName.localeCompare(right.serviceName);\n }\n\n if (left.taskName !== right.taskName) {\n return left.taskName.localeCompare(right.taskName);\n }\n\n if (left.taskVersion !== right.taskVersion) {\n return left.taskVersion - right.taskVersion;\n }\n\n return left.localTaskName.localeCompare(right.localTaskName);\n}\n\nexport function summarizeResponderStatuses(\n statuses: InquiryResponderStatus[],\n): {\n responded: number;\n failed: number;\n timedOut: number;\n pending: number;\n} {\n let responded = 0;\n let failed = 0;\n let timedOut = 0;\n let pending = 0;\n\n for (const status of statuses) {\n if (status.status === \"fulfilled\") responded++;\n if (status.status === \"failed\") failed++;\n if (status.status === \"timed_out\") timedOut++;\n }\n\n pending = Math.max(0, statuses.length - responded - failed - timedOut);\n\n return { responded, failed, timedOut, pending };\n}\n","import type {\n ServiceTransportConfig,\n ServiceTransportDescriptor,\n ServiceTransportProtocol,\n ServiceTransportRole,\n ServiceTransportSecurityProfile,\n} from \"../types/transport\";\n\nconst DEFAULT_PROTOCOLS: ServiceTransportProtocol[] = [\"rest\", \"socket\"];\n\nfunction normalizeString(value: unknown): string {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\n\nexport function normalizeTransportProtocols(\n value: unknown,\n): ServiceTransportProtocol[] {\n const rawValues = Array.isArray(value)\n ? value\n : typeof value === \"string\"\n ? value.split(\",\")\n : [];\n\n const normalized = rawValues\n .map((entry) => normalizeString(entry))\n .filter(\n (entry): entry is ServiceTransportProtocol =>\n entry === \"rest\" || entry === \"socket\",\n );\n\n return Array.from(new Set(normalized));\n}\n\nexport function normalizeTransportOrigin(origin: unknown): string | null {\n const raw = normalizeString(origin);\n if (!raw) {\n return null;\n }\n\n let parsed: URL;\n try {\n parsed = new URL(raw);\n } catch {\n return null;\n }\n\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n return null;\n }\n\n if (parsed.pathname && parsed.pathname !== \"/\") {\n return null;\n }\n\n if (parsed.search || parsed.hash) {\n return null;\n }\n\n return parsed.origin;\n}\n\nfunction normalizeSecurityProfile(\n value: unknown,\n): ServiceTransportSecurityProfile | null {\n const normalized = normalizeString(value);\n if (\n normalized === \"low\" ||\n normalized === \"medium\" ||\n normalized === \"high\"\n ) {\n return normalized;\n }\n\n return null;\n}\n\nexport function normalizeServiceTransportConfig(\n value: unknown,\n): ServiceTransportConfig | null {\n const raw = (value ?? {}) as Record<string, unknown>;\n const role = normalizeString(raw.role) as ServiceTransportRole;\n const origin = normalizeTransportOrigin(raw.origin);\n const protocols = normalizeTransportProtocols(raw.protocols);\n\n if (!origin) {\n return null;\n }\n\n if (role !== \"internal\" && role !== \"public\") {\n return null;\n }\n\n return {\n role,\n origin,\n protocols: protocols.length > 0 ? protocols : [...DEFAULT_PROTOCOLS],\n securityProfile: normalizeSecurityProfile(raw.securityProfile),\n authStrategy: normalizeString(raw.authStrategy) || null,\n };\n}\n\nexport function normalizeServiceTransportDescriptor(\n value: unknown,\n): ServiceTransportDescriptor | null {\n const raw = (value ?? {}) as Record<string, unknown>;\n const uuid = normalizeString(raw.uuid);\n const serviceInstanceId = normalizeString(\n raw.serviceInstanceId ?? raw.service_instance_id,\n );\n const config = normalizeServiceTransportConfig(raw);\n\n if (!uuid || !serviceInstanceId || !config) {\n return null;\n }\n\n return {\n uuid,\n serviceInstanceId,\n role: config.role,\n origin: config.origin,\n protocols: config.protocols ?? [...DEFAULT_PROTOCOLS],\n securityProfile: config.securityProfile ?? null,\n authStrategy: config.authStrategy ?? null,\n deleted: Boolean(raw.deleted),\n clientCreated: Boolean(raw.clientCreated ?? raw.client_created ?? false),\n };\n}\n\nexport function transportSupportsProtocol(\n transport: ServiceTransportDescriptor | null | undefined,\n protocol: ServiceTransportProtocol,\n): boolean {\n return !!transport && transport.protocols.includes(protocol);\n}\n\nexport function selectTransportForRole(\n transports: ServiceTransportDescriptor[],\n role: ServiceTransportRole,\n protocol?: ServiceTransportProtocol,\n): ServiceTransportDescriptor | undefined {\n const filtered = transports.filter(\n (transport) =>\n !transport.deleted &&\n transport.role === role &&\n (!protocol || transportSupportsProtocol(transport, protocol)),\n );\n\n return filtered.sort((left, right) => {\n const leftIsBootstrap = left.uuid.endsWith(\"-bootstrap\") ? 1 : 0;\n const rightIsBootstrap = right.uuid.endsWith(\"-bootstrap\") ? 1 : 0;\n if (leftIsBootstrap !== rightIsBootstrap) {\n return leftIsBootstrap - rightIsBootstrap;\n }\n\n return left.origin.localeCompare(right.origin);\n })[0];\n}\n\nexport function buildTransportClientKey(\n transport: Pick<ServiceTransportDescriptor, \"uuid\">,\n): string {\n return transport.uuid;\n}\n\nexport function parseTransportOrigin(\n origin: string,\n): { protocol: \"http\" | \"https\"; hostname: string; port: number } | null {\n const normalized = normalizeTransportOrigin(origin);\n if (!normalized) {\n return null;\n }\n\n const parsed = new URL(normalized);\n const protocol = parsed.protocol === \"https:\" ? \"https\" : \"http\";\n const port = parsed.port\n ? Number(parsed.port)\n : protocol === \"https\"\n ? 443\n : 80;\n\n return {\n protocol,\n hostname: parsed.hostname,\n port,\n };\n}\n","import type { AnyObject } from \"@cadenza.io/core\";\nimport type { ServiceInstanceDescriptor } from \"../types/serviceRegistry\";\nimport type {\n ServiceTransportDescriptor,\n ServiceTransportProtocol,\n ServiceTransportRole,\n} from \"../types/transport\";\nimport {\n buildTransportClientKey,\n normalizeServiceTransportDescriptor,\n selectTransportForRole,\n} from \"./transport\";\n\nfunction normalizeString(value: unknown): string {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\n\nfunction normalizeTransportArray(\n value: unknown,\n serviceInstanceId: string,\n): ServiceTransportDescriptor[] {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return value\n .map((entry) =>\n normalizeServiceTransportDescriptor({\n ...((entry ?? {}) as Record<string, unknown>),\n service_instance_id:\n (entry as Record<string, unknown> | undefined)?.service_instance_id ??\n (entry as Record<string, unknown> | undefined)?.serviceInstanceId ??\n serviceInstanceId,\n }),\n )\n .filter((transport): transport is ServiceTransportDescriptor => !!transport)\n .sort((left, right) => left.origin.localeCompare(right.origin));\n}\n\nexport function normalizeServiceInstanceDescriptor(\n value: unknown,\n): ServiceInstanceDescriptor | null {\n const raw = (value ?? {}) as Record<string, unknown>;\n const uuid = normalizeString(raw.uuid);\n const serviceName = normalizeString(raw.serviceName ?? raw.service_name);\n\n if (!uuid || !serviceName) {\n return null;\n }\n\n const transports = normalizeTransportArray(raw.transports, uuid);\n\n return {\n uuid,\n serviceName,\n numberOfRunningGraphs: Math.max(\n 0,\n Math.trunc(\n Number(raw.numberOfRunningGraphs ?? raw.number_of_running_graphs ?? 0) ||\n 0,\n ),\n ),\n isPrimary: Boolean(raw.isPrimary ?? raw.is_primary ?? false),\n isActive: Boolean(raw.isActive ?? raw.is_active ?? true),\n isNonResponsive: Boolean(\n raw.isNonResponsive ?? raw.is_non_responsive ?? false,\n ),\n isBlocked: Boolean(raw.isBlocked ?? raw.is_blocked ?? false),\n runtimeState:\n raw.runtimeState === \"healthy\" ||\n raw.runtimeState === \"degraded\" ||\n raw.runtimeState === \"overloaded\" ||\n raw.runtimeState === \"unavailable\"\n ? raw.runtimeState\n : undefined,\n acceptingWork:\n typeof raw.acceptingWork === \"boolean\" ? raw.acceptingWork : undefined,\n reportedAt:\n typeof raw.reportedAt === \"string\"\n ? raw.reportedAt\n : typeof raw.reported_at === \"string\"\n ? raw.reported_at\n : undefined,\n health: (raw.health ?? {}) as AnyObject,\n isFrontend: Boolean(raw.isFrontend ?? raw.is_frontend ?? false),\n isDatabase: Boolean(raw.isDatabase ?? raw.is_database ?? false),\n isBootstrapPlaceholder: Boolean(\n raw.isBootstrapPlaceholder ?? raw.is_bootstrap_placeholder ?? false,\n ),\n transports,\n clientCreatedTransportIds: Array.isArray(raw.clientCreatedTransportIds)\n ? raw.clientCreatedTransportIds\n .map((entry) => normalizeString(entry))\n .filter((entry) => entry.length > 0)\n : undefined,\n };\n}\n\nexport function getRouteableTransport(\n instance: ServiceInstanceDescriptor,\n role: ServiceTransportRole,\n protocol?: ServiceTransportProtocol,\n): ServiceTransportDescriptor | undefined {\n return selectTransportForRole(instance.transports ?? [], role, protocol);\n}\n\nexport function getTransportClientKeyForRole(\n instance: ServiceInstanceDescriptor,\n role: ServiceTransportRole,\n protocol?: ServiceTransportProtocol,\n): string | null {\n const transport = getRouteableTransport(instance, role, protocol);\n if (!transport) {\n return null;\n }\n\n return buildTransportClientKey(transport);\n}\n","import type { AnyObject } from \"@cadenza.io/core\";\nimport { v4 as uuid } from \"uuid\";\n\nexport function ensureDelegationContextMetadata<T extends AnyObject>(\n input: T | undefined,\n): T & {\n __deputyExecId: string;\n __metadata: AnyObject;\n} {\n const context =\n input && typeof input === \"object\" ? ({ ...input } as T) : ({} as T);\n const metadata =\n context.__metadata && typeof context.__metadata === \"object\"\n ? { ...context.__metadata }\n : {};\n const deputyExecId =\n typeof metadata.__deputyExecId === \"string\" &&\n metadata.__deputyExecId.length > 0\n ? metadata.__deputyExecId\n : typeof context.__deputyExecId === \"string\" &&\n context.__deputyExecId.length > 0\n ? context.__deputyExecId\n : uuid();\n\n return {\n ...context,\n __deputyExecId: deputyExecId,\n __metadata: {\n ...metadata,\n __deputyExecId: deputyExecId,\n },\n };\n}\n","import type { RuntimeStatusState } from \"./runtimeStatus\";\n\nexport type ReadinessState = \"ready\" | \"degraded\" | \"blocked\";\nexport type DependencyReadinessState =\n | \"ready\"\n | \"degraded\"\n | \"overloaded\"\n | \"unavailable\";\n\nexport interface DependencyReadinessEvaluationInput {\n exists: boolean;\n runtimeState: RuntimeStatusState;\n acceptingWork: boolean;\n missedHeartbeats: number;\n missThreshold: number;\n}\n\nexport interface DependencyReadinessEvaluation {\n state: DependencyReadinessState;\n stale: boolean;\n blocked: boolean;\n reason:\n | \"missing\"\n | \"heartbeat-timeout\"\n | \"heartbeat-stale\"\n | \"runtime-unavailable\"\n | \"runtime-overloaded\"\n | \"runtime-degraded\"\n | \"runtime-healthy\";\n}\n\nexport interface DependencyReadinessSummary {\n total: number;\n ready: number;\n degraded: number;\n overloaded: number;\n unavailable: number;\n stale: number;\n}\n\nexport function evaluateDependencyReadiness(\n input: DependencyReadinessEvaluationInput,\n): DependencyReadinessEvaluation {\n const missedHeartbeats = Math.max(\n 0,\n Math.trunc(Number(input.missedHeartbeats) || 0),\n );\n const stale = missedHeartbeats > 0;\n const timeoutReached = missedHeartbeats >= Math.max(1, input.missThreshold);\n\n if (!input.exists) {\n return {\n state: \"unavailable\",\n stale: true,\n blocked: true,\n reason: \"missing\",\n };\n }\n\n if (timeoutReached) {\n return {\n state: \"unavailable\",\n stale: true,\n blocked: true,\n reason: \"heartbeat-timeout\",\n };\n }\n\n if (input.runtimeState === \"unavailable\" || !input.acceptingWork) {\n return {\n state: \"unavailable\",\n stale,\n blocked: true,\n reason: \"runtime-unavailable\",\n };\n }\n\n if (stale) {\n return {\n state: \"degraded\",\n stale: true,\n blocked: false,\n reason: \"heartbeat-stale\",\n };\n }\n\n if (input.runtimeState === \"overloaded\") {\n return {\n state: \"overloaded\",\n stale: false,\n blocked: false,\n reason: \"runtime-overloaded\",\n };\n }\n\n if (input.runtimeState === \"degraded\") {\n return {\n state: \"degraded\",\n stale: false,\n blocked: false,\n reason: \"runtime-degraded\",\n };\n }\n\n return {\n state: \"ready\",\n stale: false,\n blocked: false,\n reason: \"runtime-healthy\",\n };\n}\n\nexport function summarizeDependencyReadiness(\n evaluations: DependencyReadinessEvaluation[],\n): DependencyReadinessSummary {\n const summary: DependencyReadinessSummary = {\n total: evaluations.length,\n ready: 0,\n degraded: 0,\n overloaded: 0,\n unavailable: 0,\n stale: 0,\n };\n\n for (const evaluation of evaluations) {\n if (evaluation.state === \"ready\") summary.ready++;\n if (evaluation.state === \"degraded\") summary.degraded++;\n if (evaluation.state === \"overloaded\") summary.overloaded++;\n if (evaluation.state === \"unavailable\") summary.unavailable++;\n if (evaluation.stale) summary.stale++;\n }\n\n return summary;\n}\n\nexport function resolveServiceReadinessState(\n localRuntimeState: RuntimeStatusState,\n localAcceptingWork: boolean,\n dependencySummary: DependencyReadinessSummary,\n): ReadinessState {\n if (localRuntimeState === \"unavailable\" || !localAcceptingWork) {\n return \"blocked\";\n }\n\n if (dependencySummary.unavailable > 0) {\n return \"blocked\";\n }\n\n if (\n dependencySummary.degraded > 0 ||\n dependencySummary.overloaded > 0 ||\n dependencySummary.stale > 0\n ) {\n return \"degraded\";\n }\n\n return \"ready\";\n}\n","export type RuntimeStatusState =\n | \"healthy\"\n | \"degraded\"\n | \"overloaded\"\n | \"unavailable\";\n\nexport interface RuntimeStatusSnapshot {\n state: RuntimeStatusState;\n acceptingWork: boolean;\n numberOfRunningGraphs: number;\n isActive: boolean;\n isNonResponsive: boolean;\n isBlocked: boolean;\n}\n\nexport interface ResolveRuntimeStatusInput {\n numberOfRunningGraphs: number;\n isActive: boolean;\n isNonResponsive: boolean;\n isBlocked: boolean;\n degradedGraphThreshold: number;\n overloadedGraphThreshold: number;\n}\n\nexport function resolveRuntimeStatus(\n input: ResolveRuntimeStatusInput,\n): RuntimeStatusSnapshot {\n const numberOfRunningGraphs = Math.max(\n 0,\n Math.trunc(Number(input.numberOfRunningGraphs) || 0),\n );\n\n const isActive = Boolean(input.isActive);\n const isNonResponsive = Boolean(input.isNonResponsive);\n const isBlocked = Boolean(input.isBlocked);\n\n if (!isActive || isNonResponsive || isBlocked) {\n return {\n state: \"unavailable\",\n acceptingWork: false,\n numberOfRunningGraphs,\n isActive,\n isNonResponsive,\n isBlocked,\n };\n }\n\n if (numberOfRunningGraphs >= input.overloadedGraphThreshold) {\n return {\n state: \"overloaded\",\n acceptingWork: true,\n numberOfRunningGraphs,\n isActive,\n isNonResponsive,\n isBlocked,\n };\n }\n\n if (numberOfRunningGraphs >= input.degradedGraphThreshold) {\n return {\n state: \"degraded\",\n acceptingWork: true,\n numberOfRunningGraphs,\n isActive,\n isNonResponsive,\n isBlocked,\n };\n }\n\n return {\n state: \"healthy\",\n acceptingWork: true,\n numberOfRunningGraphs,\n isActive,\n isNonResponsive,\n isBlocked,\n };\n}\n\nexport function runtimeStatusPriority(state: RuntimeStatusState): number {\n switch (state) {\n case \"healthy\":\n return 0;\n case \"degraded\":\n return 1;\n case \"overloaded\":\n return 2;\n case \"unavailable\":\n return 3;\n default:\n return 4;\n }\n}\n\nexport function hasSignificantRuntimeStatusChange(\n previous: RuntimeStatusSnapshot | null,\n next: RuntimeStatusSnapshot,\n): boolean {\n if (!previous) {\n return true;\n }\n\n return (\n previous.state !== next.state ||\n previous.acceptingWork !== next.acceptingWork ||\n previous.isActive !== next.isActive ||\n previous.isNonResponsive !== next.isNonResponsive ||\n previous.isBlocked !== next.isBlocked\n );\n}\n","import { GraphContext, InquiryOptions, Task } from \"@cadenza.io/core\";\nimport type {\n AnyObject,\n Schema,\n TaskResult,\n ThrottleTagGetter,\n} from \"@cadenza.io/core\";\nimport { v4 as uuid } from \"uuid\";\nimport Cadenza from \"../../Cadenza\";\n\n/**\n * Represents a task responsible for transmitting signals to a remote service\n * through the meta-layer for operations delegation.\n *\n * @class\n * @extends Task\n */\nexport default class SignalTransmissionTask extends Task {\n readonly isDeputy: boolean = true;\n\n protected readonly signalName: string;\n protected readonly serviceName: string;\n\n /**\n * Constructs a new instance of the class and initializes it with the provided parameters.\n *\n * @param {string} name - The name of the task being created.\n * @param {string} signalName - The name of the signal associated with this task.\n * @param {string} serviceName - The name of the service associated with this task.\n * @param {string} [description=\"\"] - An optional description of the task.\n * @param {number} [concurrency=0] - The maximum allowed concurrency for this task.\n * @param {number} [timeout=0] - The maximum execution time for this task, in milliseconds.\n * @param {boolean} [register=true] - Whether the task should be registered upon creation.\n * @param {boolean} [isUnique=false] - Indicates if the task should enforce uniqueness.\n * @param {boolean} [isMeta=false] - Specifies if the task is a meta-task.\n * @param {boolean} [isSubMeta=false] - Specifies if the task is a sub-meta-task.\n * @param {boolean} [isHidden=false] - Indicates if the task is hidden from visibility.\n * @param {ThrottleTagGetter|undefined} [getTagCallback=undefined] - A callback for tag throttling logic.\n * @param {SchemaDefinition|undefined} [inputSchema=undefined] - An optional schema for validating input data.\n * @param {boolean} [validateInputContext=false] - Whether to validate the input context against the input schema.\n * @param {SchemaDefinition|undefined} [outputSchema=undefined] - An optional schema for validating output data.\n * @param {boolean} [validateOutputContext=false] - Whether to validate the output context against the output schema.\n * @param {number} [retryCount=0] - The number of retry attempts allowed in case of task failure.\n * @param {number} [retryDelay=0] - The initial delay before retrying a failed task, in milliseconds.\n * @param {number} [retryDelayMax=0] - The maximum delay between retry attempts, in milliseconds.\n * @param {number} [retryDelayFactor=1] - A multiplier applied to retry delay for exponential backoff.\n * @return {void} Does not return a value.\n */\n constructor(\n name: string,\n signalName: string,\n serviceName: string,\n description: string = \"\",\n concurrency: number = 0,\n timeout: number = 0,\n register: boolean = true,\n isUnique: boolean = false,\n isMeta: boolean = true,\n isSubMeta: boolean = false,\n isHidden: boolean = false,\n getTagCallback: ThrottleTagGetter | undefined = undefined,\n inputSchema: Schema | undefined = undefined,\n validateInputContext: boolean = false,\n outputSchema: Schema | undefined = undefined,\n validateOutputContext: boolean = false,\n retryCount: number = 0,\n retryDelay: number = 0,\n retryDelayMax: number = 0,\n retryDelayFactor: number = 1,\n ) {\n const taskFunction = (context: AnyObject): TaskResult => {\n context.__routineExecId = uuid();\n return context;\n };\n\n super(\n name,\n taskFunction,\n description,\n concurrency,\n timeout,\n register,\n isUnique,\n isMeta,\n isSubMeta,\n isHidden,\n getTagCallback,\n inputSchema,\n validateInputContext,\n outputSchema,\n validateOutputContext,\n retryCount,\n retryDelay,\n retryDelayMax,\n retryDelayFactor,\n );\n\n this.serviceName = serviceName;\n this.signalName = signalName;\n\n this.doOn(signalName);\n this.then(Cadenza.serviceRegistry.getBalancedInstance);\n }\n\n /**\n * Executes the given task function within the provided execution context.\n *\n * @param {GraphContext} context - The context object providing the graph execution environment and metadata.\n * @param {Function} emit - A function to emit signals with the provided name and context.\n * @param inquire\n * @param {Function} progressCallback - A callback function to report the progress of the task execution as a number between 0 and 1.\n * @return {TaskResult} The result of the executed task function.\n */\n execute(\n context: GraphContext,\n emit: (signal: string, ctx: AnyObject) => void,\n inquire: (\n inquiry: string,\n context: AnyObject,\n options: InquiryOptions,\n ) => Promise<AnyObject>,\n progressCallback: (progress: number) => void,\n ): TaskResult {\n const ctx = context.getContext();\n const metadata = context.getMetadata();\n\n const deputyContext = {\n __localTaskName: this.name,\n __localServiceName: Cadenza.serviceRegistry.serviceName,\n __serviceName: this.serviceName,\n __executionTraceId: metadata.__executionTraceId ?? null,\n __localRoutineExecId:\n metadata.__routineExecId ?? metadata.__metadata?.__routineExecId,\n __metadata: {\n ...metadata,\n __deputyTaskName: this.name,\n },\n __signalName: this.signalName,\n __signalEmissionId: metadata.__signalEmission?.uuid,\n ...ctx,\n };\n\n return this.taskFunction(deputyContext, emit, inquire, progressCallback);\n }\n}\n","import Cadenza from \"../Cadenza\";\nimport { META_RUNTIME_TRANSPORT_DIAGNOSTICS_INTENT } from \"../utils/inquiry\";\nimport { ensureDelegationContextMetadata } from \"../utils/delegation\";\nimport type { AnyObject } from \"@cadenza.io/core\";\n\ntype TransportDetailLevel = \"summary\" | \"full\";\n\ninterface TransportDiagnosticErrorEntry {\n at: string;\n message: string;\n}\n\ninterface FetchClientDiagnosticsState {\n fetchId: string;\n serviceName: string;\n url: string;\n connected: boolean;\n destroyed: boolean;\n lastHandshakeAt: string | null;\n lastHandshakeError: string | null;\n lastError: string | null;\n lastErrorAt: number;\n errorHistory: TransportDiagnosticErrorEntry[];\n delegationRequests: number;\n delegationFailures: number;\n signalTransmissions: number;\n signalFailures: number;\n statusChecks: number;\n statusFailures: number;\n updatedAt: number;\n}\n\ninterface ParsedFetchResponse {\n ok: boolean;\n status: number;\n statusText: string;\n headers: Record<string, string>;\n data: any;\n}\n\nconst FETCH_HANDSHAKE_TIMEOUT_MS = 5000;\n\nexport default class RestController {\n private static _instance: RestController;\n public static get instance(): RestController {\n if (!this._instance) this._instance = new RestController();\n return this._instance;\n }\n\n private fetchClientDiagnostics: Map<string, FetchClientDiagnosticsState> =\n new Map();\n private readonly diagnosticsErrorHistoryLimit = 100;\n private readonly diagnosticsMaxClientEntries = 500;\n private readonly destroyedDiagnosticsTtlMs = 15 * 60_000;\n\n private pruneFetchClientDiagnostics(now = Date.now()): void {\n for (const [fetchId, state] of this.fetchClientDiagnostics.entries()) {\n if (state.destroyed && now - state.updatedAt > this.destroyedDiagnosticsTtlMs) {\n this.fetchClientDiagnostics.delete(fetchId);\n }\n }\n\n if (this.fetchClientDiagnostics.size <= this.diagnosticsMaxClientEntries) {\n return;\n }\n\n const entriesByEvictionPriority = Array.from(\n this.fetchClientDiagnostics.entries(),\n ).sort((left, right) => {\n if (left[1].destroyed !== right[1].destroyed) {\n return left[1].destroyed ? -1 : 1;\n }\n\n return left[1].updatedAt - right[1].updatedAt;\n });\n\n while (\n this.fetchClientDiagnostics.size > this.diagnosticsMaxClientEntries &&\n entriesByEvictionPriority.length > 0\n ) {\n const [fetchId] = entriesByEvictionPriority.shift()!;\n this.fetchClientDiagnostics.delete(fetchId);\n }\n }\n\n private resolveTransportDiagnosticsOptions(ctx: AnyObject): {\n detailLevel: TransportDetailLevel;\n includeErrorHistory: boolean;\n errorHistoryLimit: number;\n } {\n const detailLevel: TransportDetailLevel =\n ctx.detailLevel === \"full\" ? \"full\" : \"summary\";\n const includeErrorHistory = Boolean(ctx.includeErrorHistory);\n const requestedLimit = Number(ctx.errorHistoryLimit);\n const errorHistoryLimit = Number.isFinite(requestedLimit)\n ? Math.max(1, Math.min(200, Math.trunc(requestedLimit)))\n : 10;\n\n return {\n detailLevel,\n includeErrorHistory,\n errorHistoryLimit,\n };\n }\n\n private ensureFetchClientDiagnostics(\n fetchId: string,\n serviceName: string,\n url: string,\n ): FetchClientDiagnosticsState {\n const now = Date.now();\n this.pruneFetchClientDiagnostics(now);\n\n let state = this.fetchClientDiagnostics.get(fetchId);\n if (!state) {\n state = {\n fetchId,\n serviceName,\n url,\n connected: false,\n destroyed: false,\n lastHandshakeAt: null,\n lastHandshakeError: null,\n lastError: null,\n lastErrorAt: 0,\n errorHistory: [],\n delegationRequests: 0,\n delegationFailures: 0,\n signalTransmissions: 0,\n signalFailures: 0,\n statusChecks: 0,\n statusFailures: 0,\n updatedAt: now,\n };\n this.fetchClientDiagnostics.set(fetchId, state);\n } else {\n state.serviceName = serviceName;\n state.url = url;\n }\n\n this.pruneFetchClientDiagnostics(now);\n return state;\n }\n\n private getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n if (typeof error === \"string\") {\n return error;\n }\n try {\n return JSON.stringify(error);\n } catch {\n return String(error);\n }\n }\n\n private async parseFetchResponse(response: Response): Promise<ParsedFetchResponse> {\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n const rawText = await response.text();\n const headers = Object.fromEntries(response.headers.entries());\n\n if (rawText.length === 0) {\n return {\n ok: response.ok,\n status: response.status,\n statusText: response.statusText,\n headers,\n data: {},\n };\n }\n\n if (!contentType.toLowerCase().includes(\"application/json\")) {\n throw new Error(\n `Expected JSON response from ${response.url ?? \"remote service\"} but received ${contentType || \"unknown content type\"} (HTTP ${response.status}). Body preview: ${rawText.slice(0, 200)}`,\n );\n }\n\n try {\n return {\n ok: response.ok,\n status: response.status,\n statusText: response.statusText,\n headers,\n data: JSON.parse(rawText),\n };\n } catch (error) {\n throw new Error(\n `Failed to parse JSON response from ${response.url ?? \"remote service\"} (HTTP ${response.status}). Body preview: ${rawText.slice(0, 200)}. Parse error: ${this.getErrorMessage(error)}`,\n );\n }\n }\n\n private recordFetchClientError(\n fetchId: string,\n serviceName: string,\n url: string,\n error: unknown,\n ): void {\n const state = this.ensureFetchClientDiagnostics(fetchId, serviceName, url);\n const message = this.getErrorMessage(error);\n const now = Date.now();\n\n state.lastError = message;\n state.lastErrorAt = now;\n state.updatedAt = now;\n state.errorHistory.push({ at: new Date(now).toISOString(), message });\n\n if (state.errorHistory.length > this.diagnosticsErrorHistoryLimit) {\n state.errorHistory.splice(\n 0,\n state.errorHistory.length - this.diagnosticsErrorHistoryLimit,\n );\n }\n }\n\n private collectFetchTransportDiagnostics(ctx: AnyObject): AnyObject {\n this.pruneFetchClientDiagnostics();\n const { detailLevel, includeErrorHistory, errorHistoryLimit } =\n this.resolveTransportDiagnosticsOptions(ctx);\n const serviceName = Cadenza.serviceRegistry.serviceName ?? \"UnknownService\";\n const states = Array.from(this.fetchClientDiagnostics.values()).sort((a, b) =>\n a.fetchId.localeCompare(b.fetchId),\n );\n\n const summary = {\n detailLevel,\n totalClients: states.length,\n connectedClients: states.filter((state) => state.connected).length,\n destroyedClients: states.filter((state) => state.destroyed).length,\n delegationRequests: states.reduce(\n (acc, state) => acc + state.delegationRequests,\n 0,\n ),\n delegationFailures: states.reduce(\n (acc, state) => acc + state.delegationFailures,\n 0,\n ),\n signalTransmissions: states.reduce(\n (acc, state) => acc + state.signalTransmissions,\n 0,\n ),\n signalFailures: states.reduce((acc, state) => acc + state.signalFailures, 0),\n statusChecks: states.reduce((acc, state) => acc + state.statusChecks, 0),\n statusFailures: states.reduce((acc, state) => acc + state.statusFailures, 0),\n latestError:\n states\n .slice()\n .sort((a, b) => b.lastErrorAt - a.lastErrorAt)\n .find((state) => state.lastError)?.lastError ?? null,\n };\n\n if (detailLevel === \"summary\") {\n return {\n transportDiagnostics: {\n [serviceName]: {\n fetchClient: summary,\n },\n },\n };\n }\n\n return {\n transportDiagnostics: {\n [serviceName]: {\n fetchClient: {\n ...summary,\n clients: states.map((state) => {\n const details: AnyObject = {\n fetchId: state.fetchId,\n serviceName: state.serviceName,\n url: state.url,\n connected: state.connected,\n destroyed: state.destroyed,\n lastHandshakeAt: state.lastHandshakeAt,\n lastHandshakeError: state.lastHandshakeError,\n latestError: state.lastError,\n delegationRequests: state.delegationRequests,\n delegationFailures: state.delegationFailures,\n signalTransmissions: state.signalTransmissions,\n signalFailures: state.signalFailures,\n statusChecks: state.statusChecks,\n statusFailures: state.statusFailures,\n };\n\n if (includeErrorHistory) {\n details.errorHistory = state.errorHistory.slice(-errorHistoryLimit);\n }\n\n return details;\n }),\n },\n },\n },\n };\n }\n\n fetchDataWithTimeout = async (\n url: string,\n requestInit: RequestInit,\n timeoutMs: number,\n ): Promise<any> => {\n if (typeof globalThis.fetch !== \"function\") {\n throw new Error(\"Browser REST controller requires global fetch.\");\n }\n\n const signal = AbortSignal.timeout(timeoutMs);\n const response = await globalThis.fetch(url, { ...requestInit, signal });\n const parsedResponse = await this.parseFetchResponse(response);\n return parsedResponse.data;\n };\n\n constructor() {\n Cadenza.createMetaTask(\n \"Collect fetch transport diagnostics\",\n (ctx) => this.collectFetchTransportDiagnostics(ctx),\n \"Responds to distributed transport diagnostics inquiries with REST/fetch client data.\",\n ).respondsTo(META_RUNTIME_TRANSPORT_DIAGNOSTICS_INTENT);\n\n Cadenza.createMetaTask(\n \"Declare browser network\",\n (ctx, emit) => {\n emit(\"meta.service_registry.instance_registration_requested\", {\n ...ctx,\n data: {\n uuid: ctx.__serviceInstanceId,\n process_pid: 1,\n service_name: ctx.__serviceName,\n is_frontend: true,\n is_active: true,\n is_non_responsive: false,\n is_blocked: false,\n health: {},\n },\n __registrationData: {\n uuid: ctx.__serviceInstanceId,\n process_pid: 1,\n service_name: ctx.__serviceName,\n is_frontend: true,\n is_active: true,\n is_non_responsive: false,\n is_blocked: false,\n health: {},\n },\n __transportData: Array.isArray(ctx.__declaredTransports)\n ? ctx.__declaredTransports.map((transport: any) => ({\n uuid: transport.uuid,\n service_instance_id: ctx.__serviceInstanceId,\n role: transport.role,\n origin: transport.origin,\n protocols: transport.protocols ?? [\"rest\", \"socket\"],\n ...(transport.securityProfile\n ? { security_profile: transport.securityProfile }\n : {}),\n ...(transport.authStrategy\n ? { auth_strategy: transport.authStrategy }\n : {}),\n }))\n : [],\n });\n\n return true;\n },\n \"Declares frontend runtime network metadata without creating a server.\",\n ).doOn(\"meta.service_registry.service_inserted\");\n\n Cadenza.createMetaTask(\n \"Setup fetch client\",\n (ctx) => {\n const serviceName = String(ctx.serviceName ?? \"\");\n const URL = String(ctx.serviceOrigin ?? \"\");\n const fetchId = String(ctx.serviceTransportId ?? \"\");\n if (!serviceName || !URL || !fetchId) {\n return false;\n }\n const clientTaskSuffix = `${URL} (${fetchId})`;\n const fetchDiagnostics = this.ensureFetchClientDiagnostics(\n fetchId,\n serviceName,\n URL,\n );\n fetchDiagnostics.destroyed = false;\n fetchDiagnostics.updatedAt = Date.now();\n\n if (Cadenza.get(`Send Handshake to ${clientTaskSuffix}`)) {\n return;\n }\n\n const handshakeTask = Cadenza.createMetaTask(\n `Send Handshake to ${clientTaskSuffix}`,\n async (handshakeCtx, emit) => {\n try {\n const response = await this.fetchDataWithTimeout(\n `${URL}/handshake`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n method: \"POST\",\n body: JSON.stringify(handshakeCtx.handshakeData),\n },\n FETCH_HANDSHAKE_TIMEOUT_MS,\n );\n if (response.__status !== \"success\") {\n const error =\n response.__error ??\n `Failed to connect to service ${serviceName} ${handshakeCtx.serviceInstanceId}`;\n fetchDiagnostics.connected = false;\n fetchDiagnostics.lastHandshakeError = error;\n fetchDiagnostics.updatedAt = Date.now();\n this.recordFetchClientError(fetchId, serviceName, URL, error);\n emit(`meta.fetch.handshake_failed:${fetchId}`, response);\n return { ...handshakeCtx, __error: error, errored: true };\n }\n\n handshakeCtx.serviceInstanceId = response.__serviceInstanceId;\n fetchDiagnostics.connected = true;\n fetchDiagnostics.destroyed = false;\n fetchDiagnostics.lastHandshakeAt = new Date().toISOString();\n fetchDiagnostics.lastHandshakeError = null;\n fetchDiagnostics.updatedAt = Date.now();\n\n for (const communicationType of handshakeCtx.communicationTypes) {\n emit(\"global.meta.fetch.service_communication_established\", {\n data: {\n serviceInstanceId: handshakeCtx.serviceInstanceId,\n serviceInstanceClientId:\n Cadenza.serviceRegistry.serviceInstanceId,\n communicationType,\n },\n });\n }\n } catch (error) {\n fetchDiagnostics.connected = false;\n fetchDiagnostics.lastHandshakeError = this.getErrorMessage(error);\n fetchDiagnostics.updatedAt = Date.now();\n this.recordFetchClientError(fetchId, serviceName, URL, error);\n return { ...handshakeCtx, __error: error, errored: true };\n }\n\n return handshakeCtx;\n },\n \"Sends handshake request\",\n { retryCount: 5, retryDelay: 1000, retryDelayFactor: 1.5 },\n )\n .doOn(`meta.fetch.handshake_requested:${fetchId}`)\n .emits(\"meta.fetch.handshake_complete\")\n .attachSignal(\n \"meta.fetch.handshake_failed\",\n \"global.meta.fetch.service_communication_established\",\n );\n\n const delegateTask = Cadenza.createMetaTask(\n `Delegate flow to REST server ${clientTaskSuffix}`,\n async (delegateCtx, emit) => {\n if (delegateCtx.__remoteRoutineName === undefined) {\n return;\n }\n\n const normalizedDelegateCtx =\n ensureDelegationContextMetadata(delegateCtx);\n const deputyExecId =\n normalizedDelegateCtx.__metadata.__deputyExecId;\n\n fetchDiagnostics.delegationRequests++;\n fetchDiagnostics.updatedAt = Date.now();\n\n let resultContext;\n try {\n resultContext = await this.fetchDataWithTimeout(\n `${URL}/delegation`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n method: \"POST\",\n body: JSON.stringify(normalizedDelegateCtx),\n },\n 30_000,\n );\n } catch (error) {\n fetchDiagnostics.delegationFailures++;\n fetchDiagnostics.updatedAt = Date.now();\n this.recordFetchClientError(fetchId, serviceName, URL, error);\n resultContext = {\n __error: `Error: ${error}`,\n errored: true,\n ...normalizedDelegateCtx,\n ...normalizedDelegateCtx.__metadata,\n };\n } finally {\n emit(`meta.fetch.delegated:${deputyExecId}`, resultContext);\n }\n\n return resultContext;\n },\n \"Sends delegation request\",\n )\n .doOn(\n `meta.service_registry.selected_instance_for_fetch:${fetchId}`,\n `meta.service_registry.socket_failed:${fetchId}`,\n )\n .emitsOnFail(\"meta.fetch.delegate_failed\")\n .attachSignal(\"meta.fetch.delegated\");\n\n const transmitTask = Cadenza.createMetaTask(\n `Transmit signal to server ${clientTaskSuffix}`,\n async (signalCtx, emit) => {\n if (signalCtx.__signalName === undefined) {\n return;\n }\n\n fetchDiagnostics.signalTransmissions++;\n fetchDiagnostics.updatedAt = Date.now();\n\n let response;\n try {\n response = await this.fetchDataWithTimeout(\n `${URL}/signal`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n method: \"POST\",\n body: JSON.stringify(signalCtx),\n },\n 1000,\n );\n\n if (signalCtx.__routineExecId) {\n emit(`meta.fetch.transmitted:${signalCtx.__routineExecId}`, response);\n }\n } catch (error) {\n fetchDiagnostics.signalFailures++;\n fetchDiagnostics.updatedAt = Date.now();\n this.recordFetchClientError(fetchId, serviceName, URL, error);\n response = {\n __error: `Error: ${error}`,\n errored: true,\n ...signalCtx,\n };\n }\n\n return response;\n },\n \"Sends signal request\",\n )\n .doOn(`meta.service_registry.selected_instance_for_fetch:${fetchId}`)\n .emitsOnFail(\"meta.fetch.signal_transmission_failed\")\n .attachSignal(\"meta.fetch.transmitted\");\n\n const statusTask = Cadenza.createMetaTask(\n `Request status from ${clientTaskSuffix}`,\n async (statusCtx) => {\n fetchDiagnostics.statusChecks++;\n fetchDiagnostics.updatedAt = Date.now();\n\n try {\n return await this.fetchDataWithTimeout(\n `${URL}/status`,\n {\n method: \"GET\",\n },\n 1000,\n );\n } catch (error) {\n fetchDiagnostics.statusFailures++;\n fetchDiagnostics.updatedAt = Date.now();\n this.recordFetchClientError(fetchId, serviceName, URL, error);\n return {\n __error: `Error: ${error}`,\n errored: true,\n ...statusCtx,\n };\n }\n },\n \"Requests status\",\n )\n .doOn(\"meta.fetch.status_check_requested\")\n .emits(\"meta.fetch.status_checked\")\n .emitsOnFail(\"meta.fetch.status_check_failed\");\n\n Cadenza.createEphemeralMetaTask(`Destroy fetch client ${fetchId}`, () => {\n fetchDiagnostics.connected = false;\n fetchDiagnostics.destroyed = true;\n fetchDiagnostics.updatedAt = Date.now();\n handshakeTask.destroy();\n delegateTask.destroy();\n transmitTask.destroy();\n statusTask.destroy();\n })\n .doOn(\n `meta.fetch.destroy_requested:${fetchId}`,\n `meta.socket_client.disconnected:${fetchId}`,\n `meta.fetch.handshake_failed:${fetchId}`,\n )\n .emits(\"meta.fetch.destroyed\");\n\n return true;\n },\n \"Manages REST client requests as fallback\",\n )\n .then(\n Cadenza.createMetaTask(\n \"Prepare handshake\",\n (ctx, emit) => {\n const {\n serviceName,\n serviceInstanceId,\n communicationTypes,\n serviceTransportId,\n serviceOrigin,\n transportProtocols,\n } = ctx;\n\n const fetchId = String(serviceTransportId ?? \"\");\n\n emit(`meta.fetch.handshake_requested:${fetchId}`, {\n serviceInstanceId,\n serviceName,\n communicationTypes,\n serviceTransportId,\n serviceOrigin,\n transportProtocols,\n handshakeData: {\n instanceId: Cadenza.serviceRegistry.serviceInstanceId,\n serviceName: Cadenza.serviceRegistry.serviceName,\n },\n });\n },\n \"Prepares handshake\",\n ).attachSignal(\"meta.fetch.handshake_requested\"),\n )\n .doOn(\"meta.service_registry.dependee_registered\")\n .emitsOnFail(\"meta.fetch.connect_failed\");\n }\n}\n","import Cadenza from \"../Cadenza\";\nimport { IRateLimiterOptions, RateLimiterMemory } from \"rate-limiter-flexible\";\nimport type { AnyObject, Task } from \"@cadenza.io/core\";\nimport { io, Socket } from \"socket.io-client\";\nimport { isBrowser } from \"../utils/environment\";\nimport { waitForSocketConnection } from \"./socketClientUtils\";\nimport { META_RUNTIME_TRANSPORT_DIAGNOSTICS_INTENT } from \"../utils/inquiry\";\nimport { ensureDelegationContextMetadata } from \"../utils/delegation\";\nimport { parseTransportOrigin } from \"../utils/transport\";\n\nconst dynamicImport = new Function(\n \"specifier\",\n \"return import(specifier);\",\n) as <T>(specifier: string) => Promise<T>;\n\nasync function importNodeModule<T>(specifier: string): Promise<T> {\n return dynamicImport(specifier);\n}\n\ntype TransportDetailLevel = \"summary\" | \"full\";\n\ninterface TransportDiagnosticErrorEntry {\n at: string;\n message: string;\n}\n\ninterface SocketClientDiagnosticsState {\n fetchId: string;\n serviceName: string;\n url: string;\n socketId: string | null;\n connected: boolean;\n handshake: boolean;\n reconnectAttempts: number;\n connectErrors: number;\n reconnectErrors: number;\n socketErrors: number;\n pendingDelegations: number;\n pendingTimers: number;\n destroyed: boolean;\n lastHandshakeAt: string | null;\n lastHandshakeError: string | null;\n lastDisconnectAt: string | null;\n lastError: string | null;\n lastErrorAt: number;\n errorHistory: TransportDiagnosticErrorEntry[];\n updatedAt: number;\n}\n\ntype SocketClientSessionOperation =\n | \"connect\"\n | \"handshake\"\n | \"delegate\"\n | \"transmit\"\n | \"shutdown\";\n\ninterface SocketClientSessionState {\n fetchId: string;\n serviceInstanceId: string;\n communicationTypes: string[];\n serviceName: string;\n serviceTransportId: string;\n serviceOrigin: string;\n transportProtocols: string[];\n url: string;\n socketId: string | null;\n connected: boolean;\n handshake: boolean;\n pendingDelegations: number;\n pendingTimers: number;\n reconnectAttempts: number;\n connectErrors: number;\n reconnectErrors: number;\n socketErrors: number;\n errorCount: number;\n destroyed: boolean;\n lastHandshakeAt: string | null;\n lastHandshakeError: string | null;\n lastDisconnectAt: string | null;\n updatedAt: number;\n}\n\ntype SocketEmitWhenReady = <T>(\n event: string,\n data: AnyObject,\n timeoutMs: number,\n ack?: (response: T) => void,\n) => Promise<T>;\n\nfunction isSocketAckCallback<T = AnyObject>(\n value: unknown,\n): value is (context: T) => void {\n return typeof value === \"function\";\n}\n\ninterface SocketClientRuntimeHandle {\n url: string;\n socket: Socket;\n initialized: boolean;\n handshake: boolean;\n errorCount: number;\n pendingDelegationIds: Set<string>;\n pendingTimers: Set<NodeJS.Timeout>;\n emitWhenReady: SocketEmitWhenReady | null;\n handshakeTask: Task | null;\n delegateTask: Task | null;\n transmitTask: Task | null;\n}\n\ninterface SocketServerSessionState {\n serverKey: string;\n useSocket: boolean;\n status: \"inactive\" | \"active\" | \"shutdown\";\n securityProfile: string;\n networkType: string;\n connectionCount: number;\n lastStartedAt: string | null;\n lastConnectedAt: string | null;\n lastDisconnectedAt: string | null;\n lastShutdownAt: string | null;\n updatedAt: number;\n}\n\ninterface SocketServerRuntimeHandle {\n server: any;\n initialized: boolean;\n connectedSocketIds: Set<string>;\n broadcastStatusTask: Task | null;\n shutdownTask: Task | null;\n}\n\n/**\n * Socket transport orchestration in the Cadenza primitive ecosystem.\n *\n * - setup is signal-triggered\n * - state/runtime ownership is actor-backed\n * - dynamic runtime tasks are still allowed for advanced orchestration (ephemeral resolvers etc.)\n */\nexport default class SocketController {\n private static _instance: SocketController;\n public static get instance(): SocketController {\n if (!this._instance) this._instance = new SocketController();\n return this._instance;\n }\n\n private readonly diagnosticsErrorHistoryLimit = 100;\n private readonly diagnosticsMaxClientEntries = 500;\n private readonly destroyedDiagnosticsTtlMs = 15 * 60_000;\n private readonly socketServerDefaultKey = \"socket-server-default\";\n private readonly socketServerInitialSessionState: SocketServerSessionState = {\n serverKey: this.socketServerDefaultKey,\n useSocket: false,\n status: \"inactive\",\n securityProfile: \"medium\",\n networkType: \"internal\",\n connectionCount: 0,\n lastStartedAt: null,\n lastConnectedAt: null,\n lastDisconnectedAt: null,\n lastShutdownAt: null,\n updatedAt: 0,\n };\n private readonly socketClientInitialSessionState: SocketClientSessionState = {\n fetchId: \"\",\n serviceInstanceId: \"\",\n communicationTypes: [],\n serviceName: \"\",\n serviceTransportId: \"\",\n serviceOrigin: \"\",\n transportProtocols: [],\n url: \"\",\n socketId: null,\n connected: false,\n handshake: false,\n pendingDelegations: 0,\n pendingTimers: 0,\n reconnectAttempts: 0,\n connectErrors: 0,\n reconnectErrors: 0,\n socketErrors: 0,\n errorCount: 0,\n destroyed: false,\n lastHandshakeAt: null,\n lastHandshakeError: null,\n lastDisconnectAt: null,\n updatedAt: 0,\n };\n\n private readonly socketServerActor = Cadenza.createActor<\n SocketServerSessionState,\n SocketServerRuntimeHandle | null\n >(\n {\n name: \"SocketServerActor\",\n description:\n \"Holds durable socket server session state and runtime socket server handle\",\n defaultKey: this.socketServerDefaultKey,\n keyResolver: (input) => this.resolveSocketServerKey(input),\n loadPolicy: \"lazy\",\n writeContract: \"overwrite\",\n initState: this.socketServerInitialSessionState,\n },\n { isMeta: true },\n );\n\n private readonly socketClientActor = Cadenza.createActor<\n SocketClientSessionState,\n SocketClientRuntimeHandle | null\n >(\n {\n name: \"SocketClientActor\",\n description:\n \"Holds durable socket client session state and runtime socket connection handles\",\n defaultKey: \"socket-client-default\",\n keyResolver: (input) => this.resolveSocketClientFetchId(input),\n loadPolicy: \"lazy\",\n writeContract: \"overwrite\",\n initState: this.socketClientInitialSessionState,\n },\n { isMeta: true },\n );\n\n private readonly socketClientDiagnosticsActor = Cadenza.createActor<{\n entries: Record<string, SocketClientDiagnosticsState>;\n }>(\n {\n name: \"SocketClientDiagnosticsActor\",\n description:\n \"Tracks socket client diagnostics snapshots per fetchId for transport observability\",\n defaultKey: \"socket-client-diagnostics\",\n loadPolicy: \"eager\",\n writeContract: \"overwrite\",\n initState: {\n entries: {},\n },\n },\n { isMeta: true },\n );\n\n constructor() {\n Cadenza.registry.getTaskByName.doOn(\"meta.socket.delegation_requested\");\n Cadenza.registry.getRoutineByName.doOn(\"meta.socket.delegation_requested\");\n Cadenza.createMetaTask(\n \"Forward socket delegations to runner\",\n (context, emit: any) => {\n if (!isBrowser && !Cadenza.serviceRegistry.isFrontend) {\n return false;\n }\n\n if (context.task || context.routine) {\n const routine = context.task ?? context.routine;\n delete context.task;\n delete context.routine;\n context.__routineExecId = context.__metadata?.__deputyExecId ?? null;\n context.__isDeputy = true;\n Cadenza.runner.run(routine, context);\n return true;\n }\n\n const deputyExecId =\n context.__metadata?.__deputyExecId ?? context.__deputyExecId;\n const remoteRoutineName =\n context.__remoteRoutineName ?? context.__name ?? \"unknown\";\n context.errored = true;\n context.__error = `No task or routine registered for delegation target ${remoteRoutineName}.`;\n if (deputyExecId) {\n emit(`meta.socket.delegation_target_not_found:${deputyExecId}`, context);\n }\n emit(\"meta.runner.failed\", context);\n return false;\n },\n \"Forwards socket delegated lookups to the local runner in frontend runtimes.\",\n )\n .attachSignal(\"meta.runner.failed\")\n .doAfter(Cadenza.registry.getTaskByName, Cadenza.registry.getRoutineByName);\n\n this.registerDiagnosticsTasks();\n this.registerSocketServerTasks();\n this.registerSocketClientTasks();\n\n Cadenza.createMetaTask(\n \"Collect socket transport diagnostics\",\n this.socketClientDiagnosticsActor.task(\n ({ state, input }) =>\n this.collectSocketTransportDiagnostics(input, state.entries),\n { mode: \"read\" },\n ),\n \"Responds to distributed transport diagnostics inquiries with socket client data.\",\n ).respondsTo(META_RUNTIME_TRANSPORT_DIAGNOSTICS_INTENT);\n }\n\n private registerDiagnosticsTasks(): void {\n Cadenza.createThrottledMetaTask(\n \"SocketClientDiagnosticsActor.Upsert\",\n this.socketClientDiagnosticsActor.task(\n ({ state, input, setState }) => {\n const fetchId = String(input.fetchId ?? \"\").trim();\n if (!fetchId) {\n return;\n }\n\n const now = Date.now();\n const entries = { ...state.entries };\n const existing = entries[fetchId];\n\n const base: SocketClientDiagnosticsState = existing\n ? {\n ...existing,\n errorHistory: [...existing.errorHistory],\n }\n : {\n fetchId,\n serviceName: String(input.serviceName ?? \"\"),\n url: String(input.url ?? \"\"),\n socketId: null,\n connected: false,\n handshake: false,\n reconnectAttempts: 0,\n connectErrors: 0,\n reconnectErrors: 0,\n socketErrors: 0,\n pendingDelegations: 0,\n pendingTimers: 0,\n destroyed: false,\n lastHandshakeAt: null,\n lastHandshakeError: null,\n lastDisconnectAt: null,\n lastError: null,\n lastErrorAt: 0,\n errorHistory: [],\n updatedAt: now,\n };\n\n if (input.serviceName !== undefined) {\n base.serviceName = String(input.serviceName);\n }\n if (input.url !== undefined) {\n base.url = String(input.url);\n }\n\n const patch =\n input.patch && typeof input.patch === \"object\"\n ? (input.patch as Partial<SocketClientDiagnosticsState>)\n : {};\n\n Object.assign(base, patch);\n base.fetchId = fetchId;\n base.updatedAt = now;\n\n const errorMessage =\n input.error !== undefined ? this.getErrorMessage(input.error) : undefined;\n if (errorMessage) {\n base.lastError = errorMessage;\n base.lastErrorAt = now;\n base.errorHistory.push({\n at: new Date(now).toISOString(),\n message: errorMessage,\n });\n if (base.errorHistory.length > this.diagnosticsErrorHistoryLimit) {\n base.errorHistory.splice(\n 0,\n base.errorHistory.length - this.diagnosticsErrorHistoryLimit,\n );\n }\n }\n\n entries[fetchId] = base;\n\n this.pruneDiagnosticsEntries(entries, now);\n\n setState({ entries });\n },\n { mode: \"write\" },\n ),\n (context) => String(context?.fetchId ?? \"default\"),\n \"Upserts socket client diagnostics in actor state.\",\n ).doOn(\"meta.socket_client.diagnostics_upsert_requested\");\n }\n\n private registerSocketServerTasks(): void {\n Cadenza.createThrottledMetaTask(\n \"SocketServerActor.PatchSession\",\n this.socketServerActor.task(\n ({ state, input, setState }) => {\n const patch =\n input.patch && typeof input.patch === \"object\"\n ? (input.patch as Partial<SocketServerSessionState>)\n : {};\n setState({\n ...state,\n ...patch,\n updatedAt: Date.now(),\n });\n },\n { mode: \"write\" },\n ),\n (context) => String(context?.serverKey ?? this.socketServerDefaultKey),\n \"Applies partial durable session updates for socket server actor.\",\n ).doOn(\"meta.socket_server.session_patch_requested\");\n\n Cadenza.createMetaTask(\n \"SocketServerActor.ClearRuntime\",\n this.socketServerActor.task(\n ({ setRuntimeState }) => {\n setRuntimeState(null);\n },\n { mode: \"write\" },\n ),\n \"Clears socket server runtime handle after shutdown.\",\n ).doOn(\"meta.socket_server.runtime_clear_requested\");\n\n const setupSocketServerTask = Cadenza.createMetaTask(\n \"Setup SocketServer\",\n this.socketServerActor.task(\n async ({ state, runtimeState, input, actor, setState, setRuntimeState, emit }) => {\n const serverKey =\n this.resolveSocketServerKey(input) ?? actor.key ?? this.socketServerDefaultKey;\n const shouldUseSocket = Boolean(input.__useSocket);\n\n if (!shouldUseSocket) {\n this.destroySocketServerRuntimeHandle(runtimeState);\n setRuntimeState(null);\n setState({\n ...state,\n serverKey,\n useSocket: false,\n status: \"inactive\",\n connectionCount: 0,\n lastShutdownAt: new Date().toISOString(),\n updatedAt: Date.now(),\n });\n return;\n }\n\n let runtimeHandle = runtimeState;\n if (!runtimeHandle) {\n runtimeHandle = await this.createSocketServerRuntimeHandleFromContext(\n input,\n );\n setRuntimeState(runtimeHandle);\n }\n\n const profile = String(input.__securityProfile ?? state.securityProfile ?? \"medium\");\n const networkType = String(input.__networkType ?? state.networkType ?? \"internal\");\n\n const schedulePatch = (patch: Partial<SocketServerSessionState>) => {\n Cadenza.emit(\"meta.socket_server.session_patch_requested\", {\n serverKey,\n patch,\n });\n };\n\n if (runtimeHandle.initialized) {\n schedulePatch({\n status: \"active\",\n useSocket: true,\n securityProfile: profile,\n networkType,\n connectionCount: runtimeHandle.connectedSocketIds.size,\n lastStartedAt: state.lastStartedAt ?? new Date().toISOString(),\n });\n return;\n }\n\n const server = runtimeHandle.server;\n runtimeHandle.initialized = true;\n\n setState({\n ...state,\n serverKey,\n useSocket: true,\n status: \"active\",\n securityProfile: profile,\n networkType,\n connectionCount: runtimeHandle.connectedSocketIds.size,\n lastStartedAt: state.lastStartedAt ?? new Date().toISOString(),\n updatedAt: Date.now(),\n });\n\n server.use((socket: any, next: any) => {\n const origin = socket?.handshake?.headers?.origin;\n const allowedOrigins = [\"*\"];\n let effectiveOrigin = origin || \"unknown\";\n if (networkType === \"internal\") effectiveOrigin = \"internal\";\n\n if (\n profile !== \"low\" &&\n !allowedOrigins.includes(effectiveOrigin) &&\n !allowedOrigins.includes(\"*\")\n ) {\n return next(new Error(\"Unauthorized origin\"));\n }\n\n const limiterOptions: { [key: string]: IRateLimiterOptions } = {\n low: { points: Infinity, duration: 1 },\n medium: { points: 10000, duration: 10 },\n high: { points: 1000, duration: 60, blockDuration: 300 },\n };\n\n const limiter = new RateLimiterMemory(\n limiterOptions[profile] ?? limiterOptions.medium,\n );\n const clientKey = socket?.handshake?.address || \"unknown\";\n\n socket.use((packet: any, packetNext: any) => {\n limiter\n .consume(clientKey)\n .then(() => packetNext())\n .catch((rej) => {\n if (rej.msBeforeNext > 0) {\n Cadenza.log(\n \"SocketServer: Rate limit exceeded\",\n {\n retryAfter: rej.msBeforeNext / 1000,\n clientKey,\n socketId: socket.id,\n },\n \"warning\",\n );\n socket.emit(\"error\", {\n message: \"Rate limit exceeded\",\n retryAfter: rej.msBeforeNext / 1000,\n });\n packetNext(new Error(\"Rate limit exceeded\"));\n } else {\n Cadenza.log(\n \"SocketServer: Rate limit exceeded, blocked\",\n {\n clientKey,\n socketId: socket.id,\n },\n \"critical\",\n );\n socket.disconnect(true);\n packetNext(new Error(\"Blocked\"));\n }\n });\n });\n\n next();\n });\n\n server.on(\"connection\", (ws: any) => {\n runtimeHandle.connectedSocketIds.add(ws.id);\n schedulePatch({\n connectionCount: runtimeHandle.connectedSocketIds.size,\n lastConnectedAt: new Date().toISOString(),\n status: \"active\",\n });\n\n try {\n ws.on(\"handshake\", (ctx: AnyObject, callback: (result: AnyObject) => void) => {\n Cadenza.log(\"SocketServer: New connection\", {\n ...ctx,\n socketId: ws.id,\n });\n\n callback({\n status: \"success\",\n serviceName: Cadenza.serviceRegistry.serviceName,\n });\n\n if (ctx.isFrontend) {\n const fetchId = `browser:${ctx.serviceInstanceId}`;\n const frontendDelegateTaskName = `Delegate flow to frontend ${fetchId}`;\n const frontendTransmitTaskName = `Transmit signal to ${fetchId}`;\n\n Cadenza.get(frontendDelegateTaskName)?.destroy();\n Cadenza.get(frontendTransmitTaskName)?.destroy();\n\n Cadenza.createMetaTask(\n frontendDelegateTaskName,\n async (delegateCtx, emitter) => {\n if (delegateCtx.__remoteRoutineName === undefined) {\n return;\n }\n\n const normalizedDelegateCtx =\n ensureDelegationContextMetadata(delegateCtx);\n delete normalizedDelegateCtx.__isSubMeta;\n delete normalizedDelegateCtx.__broadcast;\n\n const deputyExecId =\n normalizedDelegateCtx.__metadata?.__deputyExecId;\n\n const resultContext = await new Promise<AnyObject>((resolve) => {\n ws.timeout(normalizedDelegateCtx.__timeout ?? 60_000).emit(\n \"delegation\",\n normalizedDelegateCtx,\n (err: AnyObject, response: AnyObject) => {\n if (err) {\n resolve({\n ...normalizedDelegateCtx,\n errored: true,\n __error: `Frontend delegation timed out: ${err.message ?? err}`,\n });\n return;\n }\n\n resolve(\n response ?? {\n errored: true,\n __error: \"Frontend delegation returned no response\",\n },\n );\n },\n );\n });\n\n if (deputyExecId) {\n const metadata = resultContext.__metadata;\n delete resultContext.__metadata;\n\n emitter(`meta.socket_client.delegated:${deputyExecId}`, {\n ...resultContext,\n ...(metadata && typeof metadata === \"object\"\n ? metadata\n : {}),\n });\n }\n\n return resultContext;\n },\n \"Delegates work to a connected frontend runtime through its active websocket.\",\n )\n .doOn(`meta.service_registry.selected_instance_for_socket:${fetchId}`)\n .attachSignal(\"meta.socket_client.delegated\");\n\n Cadenza.createMetaTask(\n frontendTransmitTaskName,\n (c, emitter) => {\n if (c.__signalName === undefined) {\n return;\n }\n\n ws.emit(\"signal\", c);\n\n if (c.__routineExecId) {\n emitter(`meta.socket_client.transmitted:${c.__routineExecId}`, {});\n }\n },\n \"Transmit frontend bound signal through active websocket.\",\n )\n .doOn(`meta.service_registry.selected_instance_for_socket:${fetchId}`)\n .attachSignal(\"meta.socket_client.transmitted\");\n }\n\n Cadenza.emit(\"meta.socket.handshake\", ctx);\n });\n\n ws.on(\"delegation\", (ctx: AnyObject, callback: (context: AnyObject) => void) => {\n const delegationCtx = ensureDelegationContextMetadata(ctx);\n const deputyExecId = delegationCtx.__metadata.__deputyExecId;\n\n Cadenza.createEphemeralMetaTask(\n \"Resolve delegation\",\n (delegationCtx: AnyObject) => {\n callback(delegationCtx);\n },\n \"Resolves a delegation request using client callback.\",\n { register: false },\n )\n .doOn(`meta.node.graph_completed:${deputyExecId}`)\n .emits(`meta.socket.delegation_resolved:${deputyExecId}`);\n\n Cadenza.createEphemeralMetaTask(\n \"Delegation progress update\",\n (progressCtx) => {\n if (progressCtx.__progress !== undefined) {\n ws.emit(\"delegation_progress\", progressCtx);\n }\n },\n \"Updates delegation progress to client.\",\n {\n once: false,\n destroyCondition: (progressCtx: AnyObject) =>\n progressCtx.data.progress === 1.0 ||\n progressCtx.data?.progress === undefined,\n register: false,\n },\n )\n .doOn(\n `meta.node.routine_execution_progress:${deputyExecId}`,\n `meta.node.graph_completed:${deputyExecId}`,\n )\n .emitsOnFail(`meta.socket.progress_failed:${deputyExecId}`);\n\n Cadenza.emit(\"meta.socket.delegation_requested\", {\n ...delegationCtx,\n __name: delegationCtx.__remoteRoutineName,\n });\n });\n\n ws.on(\"signal\", (ctx: AnyObject, callback: unknown) => {\n if (Cadenza.signalBroker.listObservedSignals().includes(ctx.__signalName)) {\n if (isSocketAckCallback(callback)) {\n callback({\n __status: \"success\",\n __signalName: ctx.__signalName,\n });\n }\n\n Cadenza.emit(ctx.__signalName, ctx);\n } else {\n Cadenza.log(\n `No such signal ${ctx.__signalName} on ${ctx.__serviceName}`,\n \"warning\",\n );\n if (isSocketAckCallback(callback)) {\n callback({\n ...ctx,\n __status: \"error\",\n __error: `No such signal: ${ctx.__signalName}`,\n errored: true,\n });\n }\n }\n });\n\n ws.on(\n \"status_check\",\n (ctx: AnyObject, callback: (context: AnyObject) => void) => {\n callback(Cadenza.serviceRegistry.resolveLocalStatusCheck(ctx));\n },\n );\n\n ws.on(\"disconnect\", () => {\n runtimeHandle.connectedSocketIds.delete(ws.id);\n schedulePatch({\n connectionCount: runtimeHandle.connectedSocketIds.size,\n lastDisconnectedAt: new Date().toISOString(),\n });\n Cadenza.log(\n \"Socket client disconnected\",\n { socketId: ws.id },\n \"warning\",\n );\n Cadenza.emit(\"meta.socket.disconnected\", {\n __wsId: ws.id,\n });\n });\n } catch (error) {\n Cadenza.log(\n \"SocketServer: Error in socket event\",\n { error },\n \"error\",\n );\n }\n\n Cadenza.emit(\"meta.socket.connected\", { __wsId: ws.id });\n });\n\n runtimeHandle.broadcastStatusTask = Cadenza.createMetaTask(\n `Broadcast status ${serverKey}`,\n (ctx) => server.emit(\"status_update\", ctx),\n \"Broadcasts the status of the server to all clients\",\n ).doOn(\"meta.service.updated\");\n\n runtimeHandle.shutdownTask = Cadenza.createMetaTask(\n `Shutdown SocketServer ${serverKey}`,\n async () => {\n this.destroySocketServerRuntimeHandle(runtimeHandle);\n\n Cadenza.emit(\"meta.socket_server.runtime_clear_requested\", {\n serverKey,\n });\n Cadenza.emit(\"meta.socket_server.session_patch_requested\", {\n serverKey,\n patch: {\n useSocket: false,\n status: \"shutdown\",\n connectionCount: 0,\n lastShutdownAt: new Date().toISOString(),\n },\n });\n },\n \"Shuts down the socket server\",\n )\n .doOn(\"meta.socket_server_shutdown_requested\")\n .emits(\"meta.socket.shutdown\");\n\n return true;\n },\n { mode: \"write\" },\n ),\n \"Initializes socket server runtime through actor state.\",\n );\n\n setupSocketServerTask.doOn(\"global.meta.rest.network_configured\");\n }\n\n private registerSocketClientTasks(): void {\n Cadenza.createThrottledMetaTask(\n \"SocketClientActor.ApplySessionOperation\",\n this.socketClientActor.task(\n ({ state, input, setState }) => {\n const operation = String(\n input.operation ?? \"transmit\",\n ) as SocketClientSessionOperation;\n const patch =\n input.patch && typeof input.patch === \"object\"\n ? (input.patch as Partial<SocketClientSessionState>)\n : {};\n\n let next: SocketClientSessionState = {\n ...state,\n ...patch,\n communicationTypes:\n patch.communicationTypes !== undefined\n ? this.normalizeCommunicationTypes(patch.communicationTypes)\n : state.communicationTypes,\n updatedAt: Date.now(),\n };\n\n if (input.serviceName !== undefined) {\n next.serviceName = String(input.serviceName);\n }\n if (input.serviceTransportId !== undefined) {\n next.serviceTransportId = String(input.serviceTransportId);\n }\n if (input.serviceInstanceId !== undefined) {\n next.serviceInstanceId = String(input.serviceInstanceId);\n }\n if (input.serviceOrigin !== undefined) {\n next.serviceOrigin = String(input.serviceOrigin);\n }\n if (input.transportProtocols !== undefined) {\n next.transportProtocols = Array.isArray(input.transportProtocols)\n ? input.transportProtocols.map((entry: unknown) => String(entry))\n : [];\n }\n if (input.url !== undefined) {\n next.url = String(input.url);\n }\n if (input.fetchId !== undefined) {\n next.fetchId = String(input.fetchId);\n }\n\n if (operation === \"connect\") {\n next.destroyed = false;\n } else if (operation === \"handshake\") {\n next.destroyed = false;\n next.connected = patch.connected ?? true;\n next.handshake = patch.handshake ?? true;\n } else if (operation === \"shutdown\") {\n next.connected = false;\n next.handshake = false;\n next.destroyed = true;\n next.pendingDelegations = 0;\n next.pendingTimers = 0;\n }\n\n setState(next);\n return next;\n },\n { mode: \"write\" },\n ),\n (context) =>\n String(this.resolveSocketClientFetchId(context ?? {}) ?? \"default\"),\n \"Applies socket client session operation patch in actor durable state.\",\n ).doOn(\"meta.socket_client.session_operation_requested\");\n\n Cadenza.createMetaTask(\n \"SocketClientActor.ClearRuntime\",\n this.socketClientActor.task(\n ({ setRuntimeState }) => {\n setRuntimeState(null);\n },\n { mode: \"write\" },\n ),\n \"Clears socket client runtime handle.\",\n ).doOn(\"meta.socket_client.runtime_clear_requested\");\n\n Cadenza.createMetaTask(\n \"Connect to socket server\",\n this.socketClientActor.task(\n ({ state, runtimeState, input, setState, setRuntimeState, emit }) => {\n const serviceInstanceId = String(input.serviceInstanceId ?? \"\");\n const communicationTypes = this.normalizeCommunicationTypes(\n input.communicationTypes,\n );\n const transportProtocols = Array.isArray(input.transportProtocols)\n ? input.transportProtocols.map((entry: unknown) => String(entry))\n : [];\n const serviceName = String(input.serviceName ?? \"\");\n const serviceTransportId = String(input.serviceTransportId ?? \"\");\n const serviceOrigin = String(input.serviceOrigin ?? \"\");\n const parsedOrigin = parseTransportOrigin(serviceOrigin);\n\n if (!transportProtocols.includes(\"socket\")) {\n return false;\n }\n\n if (!serviceTransportId || !serviceOrigin || !parsedOrigin) {\n Cadenza.log(\n \"Socket client setup skipped due to missing transport origin\",\n {\n serviceName,\n serviceTransportId,\n serviceOrigin,\n },\n \"warning\",\n );\n return false;\n }\n\n const socketProtocol =\n parsedOrigin.protocol === \"https\" ? \"wss\" : \"ws\";\n const url = `${socketProtocol}://${parsedOrigin.hostname}:${parsedOrigin.port}`;\n const fetchId = serviceTransportId;\n\n const applySessionOperation = (\n operation: SocketClientSessionOperation,\n patch: Partial<SocketClientSessionState> = {},\n ) => {\n Cadenza.emit(\"meta.socket_client.session_operation_requested\", {\n fetchId,\n operation,\n patch,\n serviceInstanceId,\n communicationTypes,\n serviceName,\n serviceTransportId,\n serviceOrigin,\n transportProtocols,\n url,\n });\n };\n\n const upsertDiagnostics = (\n patch: Partial<SocketClientDiagnosticsState>,\n error?: unknown,\n ) => {\n Cadenza.emit(\"meta.socket_client.diagnostics_upsert_requested\", {\n fetchId,\n serviceName,\n url,\n patch,\n error,\n });\n };\n\n setState({\n ...state,\n fetchId,\n serviceInstanceId,\n communicationTypes,\n serviceName,\n serviceTransportId,\n serviceOrigin,\n transportProtocols,\n url,\n destroyed: false,\n updatedAt: Date.now(),\n });\n\n let runtimeHandle = runtimeState;\n if (!runtimeHandle || runtimeHandle.url !== url) {\n this.destroySocketClientRuntimeHandle(runtimeHandle);\n runtimeHandle = this.createSocketClientRuntimeHandle(url);\n setRuntimeState(runtimeHandle);\n }\n\n upsertDiagnostics({\n destroyed: false,\n connected: false,\n handshake: false,\n socketId: runtimeHandle.socket.id ?? null,\n });\n applySessionOperation(\"connect\", {\n destroyed: false,\n connected: false,\n handshake: false,\n socketId: runtimeHandle.socket.id ?? null,\n pendingDelegations: runtimeHandle.pendingDelegationIds.size,\n pendingTimers: runtimeHandle.pendingTimers.size,\n errorCount: runtimeHandle.errorCount,\n });\n\n if (runtimeHandle.initialized) {\n return true;\n }\n\n runtimeHandle.initialized = true;\n runtimeHandle.handshake = false;\n runtimeHandle.errorCount = 0;\n\n const syncPendingCounts = () => {\n const pendingDelegations = runtimeHandle.pendingDelegationIds.size;\n const pendingTimers = runtimeHandle.pendingTimers.size;\n upsertDiagnostics({\n pendingDelegations,\n pendingTimers,\n });\n applySessionOperation(\"delegate\", {\n pendingDelegations,\n pendingTimers,\n });\n };\n\n runtimeHandle.emitWhenReady = <T>(\n event: string,\n data: AnyObject,\n timeoutMs: number = 60_000,\n ack?: (response: T) => void,\n ): Promise<T> => {\n return new Promise((resolve) => {\n const parsedTimeout = Number(timeoutMs);\n const normalizedTimeoutMs =\n Number.isFinite(parsedTimeout) && parsedTimeout > 0\n ? Math.trunc(parsedTimeout)\n : 60_000;\n\n let timer: NodeJS.Timeout | null = null;\n let settled = false;\n\n const clearPendingTimer = () => {\n if (!timer) {\n return;\n }\n clearTimeout(timer);\n runtimeHandle.pendingTimers.delete(timer);\n syncPendingCounts();\n timer = null;\n };\n\n const settle = (response: T) => {\n if (settled) {\n return;\n }\n settled = true;\n clearPendingTimer();\n if (ack) ack(response);\n resolve(response);\n };\n\n const resolveWithError = (errorMessage: string, fallbackError?: unknown) => {\n settle({\n ...data,\n errored: true,\n __error: errorMessage,\n error:\n fallbackError instanceof Error\n ? fallbackError.message\n : errorMessage,\n socketId: runtimeHandle.socket.id,\n serviceName,\n url,\n } as T);\n };\n\n const tryEmit = async () => {\n const waitResult = await waitForSocketConnection(\n runtimeHandle.socket,\n normalizedTimeoutMs + 10,\n (reason, error) => {\n if (reason === \"connect_timeout\") {\n return `Socket connect timed out before '${event}'`;\n }\n if (reason === \"connect_error\") {\n const errMessage =\n error instanceof Error ? error.message : String(error);\n return `Socket connect error before '${event}': ${errMessage}`;\n }\n return `Socket disconnected before '${event}'`;\n },\n );\n\n if (!waitResult.ok) {\n Cadenza.log(\n waitResult.error,\n {\n socketId: runtimeHandle.socket.id,\n serviceName,\n url,\n event,\n },\n \"error\",\n );\n upsertDiagnostics({}, waitResult.error);\n resolveWithError(waitResult.error);\n return;\n }\n\n timer = setTimeout(() => {\n if (settled) {\n return;\n }\n clearPendingTimer();\n const message = `Socket event '${event}' timed out`;\n Cadenza.log(\n message,\n { socketId: runtimeHandle.socket.id, serviceName, url },\n \"error\",\n );\n upsertDiagnostics(\n {\n lastHandshakeError: message,\n },\n message,\n );\n applySessionOperation(\"transmit\", {\n lastHandshakeError: message,\n });\n resolveWithError(message);\n }, normalizedTimeoutMs + 10);\n\n runtimeHandle.pendingTimers.add(timer);\n syncPendingCounts();\n\n runtimeHandle.socket\n .timeout(normalizedTimeoutMs)\n .emit(event, data, (err: any, response: T) => {\n if (err) {\n Cadenza.log(\n \"Socket timeout.\",\n {\n event,\n error: err.message,\n socketId: runtimeHandle.socket.id,\n serviceName,\n },\n \"warning\",\n );\n upsertDiagnostics(\n {\n lastHandshakeError: err.message,\n },\n err,\n );\n applySessionOperation(\"transmit\", {\n lastHandshakeError: err.message,\n });\n response = {\n __error: `Timeout error: ${err}`,\n errored: true,\n ...data,\n } as T;\n }\n settle(response);\n });\n };\n\n void tryEmit().catch((error) => {\n Cadenza.log(\n \"Socket emit failed unexpectedly\",\n {\n event,\n error:\n error instanceof Error ? error.message : String(error),\n socketId: runtimeHandle.socket.id,\n serviceName,\n url,\n },\n \"error\",\n );\n const message = `Socket event '${event}' failed`;\n upsertDiagnostics(\n {\n lastHandshakeError:\n error instanceof Error ? error.message : String(error),\n },\n error,\n );\n applySessionOperation(\"transmit\", {\n lastHandshakeError:\n error instanceof Error ? error.message : String(error),\n });\n resolveWithError(message, error);\n });\n });\n };\n\n const socket = runtimeHandle.socket;\n\n socket.on(\"connect\", () => {\n if (runtimeHandle.handshake) return;\n upsertDiagnostics({\n connected: true,\n destroyed: false,\n socketId: socket.id ?? null,\n });\n applySessionOperation(\"connect\", {\n connected: true,\n destroyed: false,\n socketId: socket.id ?? null,\n });\n Cadenza.emit(`meta.socket_client.connected:${fetchId}`, input);\n });\n\n socket.on(\"delegation_progress\", (delegationCtx) => {\n Cadenza.emit(\n `meta.socket_client.delegation_progress:${delegationCtx.__metadata.__deputyExecId}`,\n delegationCtx,\n );\n });\n\n socket.on(\"delegation\", (delegationCtx, callback) => {\n const normalizedDelegationCtx =\n ensureDelegationContextMetadata(delegationCtx);\n const deputyExecId = normalizedDelegationCtx.__metadata.__deputyExecId;\n const targetNotFoundSignal =\n `meta.socket.delegation_target_not_found:${deputyExecId}`;\n\n Cadenza.createEphemeralMetaTask(\n `Resolve frontend socket delegation ${deputyExecId}`,\n (completedCtx: AnyObject) => {\n callback(completedCtx);\n return completedCtx;\n },\n \"Resolves a server-routed delegation request through the frontend runtime.\",\n {\n register: false,\n },\n ).doOn(`meta.node.graph_completed:${deputyExecId}`, targetNotFoundSignal);\n\n if (\n !Cadenza.get(normalizedDelegationCtx.__remoteRoutineName) &&\n !Cadenza.registry.routines.get(\n normalizedDelegationCtx.__remoteRoutineName,\n )\n ) {\n Cadenza.emit(targetNotFoundSignal, {\n ...normalizedDelegationCtx,\n __error: `No task or routine registered for delegation target ${normalizedDelegationCtx.__remoteRoutineName}.`,\n errored: true,\n });\n return;\n }\n\n Cadenza.emit(\"meta.socket.delegation_requested\", {\n ...normalizedDelegationCtx,\n __name: normalizedDelegationCtx.__remoteRoutineName,\n });\n });\n\n socket.on(\"signal\", (signalCtx, callback?: unknown) => {\n if (Cadenza.signalBroker.listObservedSignals().includes(signalCtx.__signalName)) {\n if (isSocketAckCallback(callback)) {\n callback({\n __status: \"success\",\n __signalName: signalCtx.__signalName,\n });\n }\n Cadenza.emit(signalCtx.__signalName, signalCtx);\n return;\n }\n\n if (isSocketAckCallback(callback)) {\n callback({\n ...signalCtx,\n __status: \"error\",\n __error: `No such signal: ${signalCtx.__signalName}`,\n errored: true,\n });\n }\n });\n\n socket.on(\"status_check\", (statusCtx, callback) => {\n callback(Cadenza.serviceRegistry.resolveLocalStatusCheck(statusCtx));\n });\n\n socket.on(\"status_update\", (status) => {\n Cadenza.emit(\"meta.socket_client.status_received\", status);\n });\n\n socket.on(\"connect_error\", (err) => {\n runtimeHandle.handshake = false;\n upsertDiagnostics(\n {\n connected: false,\n handshake: false,\n connectErrors: state.connectErrors + 1,\n lastHandshakeError: err.message,\n },\n err,\n );\n applySessionOperation(\"connect\", {\n connected: false,\n handshake: false,\n connectErrors: state.connectErrors + 1,\n lastHandshakeError: err.message,\n });\n Cadenza.log(\n \"Socket connect error\",\n {\n error: err.message,\n serviceName,\n socketId: socket.id,\n url,\n },\n \"error\",\n );\n Cadenza.emit(`meta.socket_client.connect_error:${fetchId}`, err);\n });\n\n socket.on(\"reconnect_attempt\", (attempt) => {\n upsertDiagnostics({ reconnectAttempts: attempt });\n applySessionOperation(\"connect\", {\n reconnectAttempts: attempt,\n });\n Cadenza.log(`Reconnect attempt: ${attempt}`);\n });\n\n socket.on(\"reconnect\", (attempt) => {\n upsertDiagnostics({ connected: true });\n applySessionOperation(\"connect\", {\n connected: true,\n });\n Cadenza.log(`Socket reconnected after ${attempt} tries`, {\n socketId: socket.id,\n url,\n serviceName,\n });\n });\n\n socket.on(\"reconnect_error\", (err) => {\n runtimeHandle.handshake = false;\n upsertDiagnostics(\n {\n connected: false,\n handshake: false,\n reconnectErrors: state.reconnectErrors + 1,\n lastHandshakeError: err.message,\n },\n err,\n );\n applySessionOperation(\"connect\", {\n connected: false,\n handshake: false,\n reconnectErrors: state.reconnectErrors + 1,\n lastHandshakeError: err.message,\n });\n Cadenza.log(\n \"Socket reconnect failed.\",\n { error: err.message, serviceName, url, socketId: socket.id },\n \"warning\",\n );\n });\n\n socket.on(\"error\", (err) => {\n runtimeHandle.errorCount += 1;\n upsertDiagnostics(\n {\n socketErrors: state.socketErrors + 1,\n lastHandshakeError: this.getErrorMessage(err),\n },\n err,\n );\n applySessionOperation(\"transmit\", {\n socketErrors: state.socketErrors + 1,\n errorCount: runtimeHandle.errorCount,\n lastHandshakeError: this.getErrorMessage(err),\n });\n Cadenza.log(\n \"Socket error\",\n { error: err, socketId: socket.id, url, serviceName },\n \"error\",\n );\n Cadenza.emit(\"meta.socket_client.error\", err);\n });\n\n socket.on(\"disconnect\", () => {\n const disconnectedAt = new Date().toISOString();\n upsertDiagnostics({\n connected: false,\n handshake: false,\n lastDisconnectAt: disconnectedAt,\n });\n applySessionOperation(\"connect\", {\n connected: false,\n handshake: false,\n lastDisconnectAt: disconnectedAt,\n });\n Cadenza.log(\n \"Socket disconnected.\",\n { url, serviceName, socketId: socket.id },\n \"warning\",\n );\n Cadenza.emit(`meta.socket_client.disconnected:${fetchId}`, {\n serviceName,\n serviceTransportId,\n serviceOrigin,\n });\n runtimeHandle.handshake = false;\n });\n\n socket.connect();\n\n runtimeHandle.handshakeTask = Cadenza.createMetaTask(\n `Socket handshake with ${url}`,\n async (_ctx, emitter) => {\n if (runtimeHandle.handshake) return;\n runtimeHandle.handshake = true;\n\n upsertDiagnostics({\n handshake: true,\n });\n applySessionOperation(\"handshake\", {\n handshake: true,\n });\n\n await runtimeHandle.emitWhenReady?.(\n \"handshake\",\n {\n serviceInstanceId: Cadenza.serviceRegistry.serviceInstanceId,\n serviceName: Cadenza.serviceRegistry.serviceName,\n isFrontend: Cadenza.serviceRegistry.isFrontend || isBrowser,\n __status: \"success\",\n },\n 10_000,\n (result: any) => {\n if (result.status === \"success\") {\n const handshakeAt = new Date().toISOString();\n upsertDiagnostics({\n connected: true,\n handshake: true,\n lastHandshakeAt: handshakeAt,\n lastHandshakeError: null,\n socketId: socket.id ?? null,\n });\n applySessionOperation(\"handshake\", {\n connected: true,\n handshake: true,\n lastHandshakeAt: handshakeAt,\n lastHandshakeError: null,\n socketId: socket.id ?? null,\n });\n Cadenza.log(\"Socket client connected\", {\n result,\n serviceName,\n socketId: socket.id,\n url,\n });\n } else {\n const errorMessage =\n result?.__error ?? result?.error ?? \"Socket handshake failed\";\n upsertDiagnostics(\n {\n connected: false,\n handshake: false,\n lastHandshakeError: errorMessage,\n },\n errorMessage,\n );\n applySessionOperation(\"handshake\", {\n connected: false,\n handshake: false,\n lastHandshakeError: errorMessage,\n });\n Cadenza.log(\n \"Socket handshake failed\",\n { result, serviceName, socketId: socket.id, url },\n \"warning\",\n );\n }\n\n // If needed in future:\n // runtimeHandle.errorCount threshold can request shutdown signal.\n void emitter;\n },\n );\n },\n \"Handshakes with socket server\",\n ).doOn(`meta.socket_client.connected:${fetchId}`);\n\n runtimeHandle.delegateTask = Cadenza.createMetaTask(\n `Delegate flow to Socket service ${url}`,\n async (delegateCtx, emitter) => {\n if (delegateCtx.__remoteRoutineName === undefined) {\n return;\n }\n\n const normalizedDelegateCtx =\n ensureDelegationContextMetadata(delegateCtx);\n delete normalizedDelegateCtx.__isSubMeta;\n delete normalizedDelegateCtx.__broadcast;\n\n const deputyExecId =\n normalizedDelegateCtx.__metadata?.__deputyExecId;\n const requestSentAt = Date.now();\n if (deputyExecId) {\n runtimeHandle.pendingDelegationIds.add(deputyExecId);\n syncPendingCounts();\n }\n\n try {\n const resultContext =\n ((await runtimeHandle.emitWhenReady?.(\n \"delegation\",\n normalizedDelegateCtx,\n normalizedDelegateCtx.__timeout ?? 60_000,\n )) as AnyObject | undefined) ??\n ({\n errored: true,\n __error: \"Socket delegation returned no response\",\n } as AnyObject);\n\n const requestDuration = Date.now() - requestSentAt;\n const metadata = resultContext.__metadata;\n delete resultContext.__metadata;\n\n if (deputyExecId) {\n emitter(`meta.socket_client.delegated:${deputyExecId}`, {\n ...resultContext,\n ...metadata,\n __requestDuration: requestDuration,\n });\n }\n\n if (resultContext?.errored || resultContext?.failed) {\n const errorMessage =\n resultContext?.__error ??\n resultContext?.error ??\n \"Socket delegation failed\";\n upsertDiagnostics(\n {\n lastHandshakeError: String(errorMessage),\n },\n errorMessage,\n );\n applySessionOperation(\"delegate\", {\n lastHandshakeError: String(errorMessage),\n });\n }\n\n return resultContext;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n const failedContext = {\n errored: true,\n __error: message,\n };\n\n if (deputyExecId) {\n emitter(`meta.socket_client.delegated:${deputyExecId}`, {\n ...failedContext,\n __requestDuration: Date.now() - requestSentAt,\n });\n }\n\n upsertDiagnostics(\n {\n lastHandshakeError: message,\n },\n error,\n );\n applySessionOperation(\"delegate\", {\n lastHandshakeError: message,\n });\n return failedContext;\n } finally {\n if (deputyExecId) {\n runtimeHandle.pendingDelegationIds.delete(deputyExecId);\n syncPendingCounts();\n }\n }\n },\n `Delegate flow to service ${serviceName} with address ${url}`,\n )\n .doOn(`meta.service_registry.selected_instance_for_socket:${fetchId}`)\n .attachSignal(\n \"meta.socket_client.delegated\",\n \"meta.socket_shutdown_requested\",\n );\n\n runtimeHandle.transmitTask = Cadenza.createMetaTask(\n `Transmit signal to socket server ${url}`,\n async (signalCtx, emitter) => {\n if (signalCtx.__signalName === undefined) {\n return;\n }\n\n delete signalCtx.__broadcast;\n\n const response =\n ((await runtimeHandle.emitWhenReady?.(\"signal\", signalCtx, 5_000)) as\n | AnyObject\n | undefined) ??\n ({\n errored: true,\n __error: \"Socket signal transmission returned no response\",\n } as AnyObject);\n\n applySessionOperation(\"transmit\", {});\n\n if (signalCtx.__routineExecId) {\n emitter(`meta.socket_client.transmitted:${signalCtx.__routineExecId}`, {\n ...response,\n });\n }\n\n return response;\n },\n `Transmits signal to service ${serviceName} with address ${url}`,\n )\n .doOn(`meta.service_registry.selected_instance_for_socket:${fetchId}`)\n .attachSignal(\"meta.socket_client.transmitted\");\n\n Cadenza.createEphemeralMetaTask(\n `Shutdown SocketClient ${url}`,\n (_ctx, emitter) => {\n runtimeHandle.handshake = false;\n\n upsertDiagnostics({\n connected: false,\n handshake: false,\n destroyed: true,\n pendingDelegations: 0,\n pendingTimers: 0,\n });\n applySessionOperation(\"shutdown\", {\n connected: false,\n handshake: false,\n destroyed: true,\n pendingDelegations: 0,\n pendingTimers: 0,\n });\n\n Cadenza.log(\"Shutting down socket client\", { url, serviceName });\n\n emitter(`meta.fetch.handshake_requested:${fetchId}`, {\n serviceInstanceId,\n serviceName,\n communicationTypes,\n serviceTransportId,\n serviceOrigin,\n transportProtocols,\n handshakeData: {\n instanceId: Cadenza.serviceRegistry.serviceInstanceId,\n serviceName: Cadenza.serviceRegistry.serviceName,\n },\n });\n\n for (const id of runtimeHandle.pendingDelegationIds) {\n emitter(`meta.socket_client.delegated:${id}`, {\n errored: true,\n __error: \"Shutting down socket client\",\n });\n }\n\n this.destroySocketClientRuntimeHandle(runtimeHandle);\n emitter(\"meta.socket_client.runtime_clear_requested\", {\n fetchId,\n });\n },\n \"Shuts down the socket client\",\n )\n .doOn(\n `meta.socket_shutdown_requested:${fetchId}`,\n `meta.socket_client.disconnected:${fetchId}`,\n `meta.fetch.handshake_failed:${fetchId}`,\n `meta.socket_client.connect_error:${fetchId}`,\n )\n .attachSignal(\"meta.fetch.handshake_requested\")\n .emits(\"meta.socket_client_shutdown_complete\");\n\n return true;\n },\n { mode: \"write\" },\n ),\n \"Connects to a specified socket server and wires runtime tasks.\",\n )\n .doOn(\"meta.fetch.handshake_complete\")\n .emitsOnFail(\"meta.socket_client.connect_failed\");\n }\n\n private resolveSocketServerKey(input: AnyObject): string {\n return (\n String(input.serverKey ?? input.__socketServerKey ?? this.socketServerDefaultKey)\n .trim() || this.socketServerDefaultKey\n );\n }\n\n private resolveSocketClientFetchId(input: AnyObject): string | undefined {\n const explicitFetchId = String(input.fetchId ?? \"\").trim();\n if (explicitFetchId) {\n return explicitFetchId;\n }\n\n const transportId = String(\n input.serviceTransportId ?? input.transportId ?? \"\",\n ).trim();\n return transportId || undefined;\n }\n\n private async createSocketServerRuntimeHandleFromContext(\n context: AnyObject,\n ): Promise<SocketServerRuntimeHandle> {\n const baseServer = context.httpsServer ?? context.httpServer;\n if (!baseServer) {\n throw new Error(\n \"Socket server runtime setup requires either httpsServer or httpServer\",\n );\n }\n\n const socketServerModule = await importNodeModule<{\n Server: new (server: any, options: AnyObject) => any;\n }>(\"socket.io\");\n const Server = socketServerModule.Server;\n const server = new Server(baseServer, {\n pingInterval: 30_000,\n pingTimeout: 20_000,\n maxHttpBufferSize: 1e7,\n connectionStateRecovery: {\n maxDisconnectionDuration: 2 * 60 * 1000,\n skipMiddlewares: true,\n },\n });\n\n return {\n server,\n initialized: false,\n connectedSocketIds: new Set<string>(),\n broadcastStatusTask: null,\n shutdownTask: null,\n };\n }\n\n private destroySocketServerRuntimeHandle(\n runtimeHandle: SocketServerRuntimeHandle | null,\n ): void {\n if (!runtimeHandle) {\n return;\n }\n\n runtimeHandle.broadcastStatusTask?.destroy();\n runtimeHandle.shutdownTask?.destroy();\n runtimeHandle.broadcastStatusTask = null;\n runtimeHandle.shutdownTask = null;\n runtimeHandle.connectedSocketIds.clear();\n runtimeHandle.initialized = false;\n runtimeHandle.server.close();\n runtimeHandle.server.removeAllListeners();\n }\n\n private createSocketClientRuntimeHandle(url: string): SocketClientRuntimeHandle {\n return {\n url,\n socket: io(url, {\n reconnection: true,\n reconnectionAttempts: 5,\n reconnectionDelay: 2000,\n reconnectionDelayMax: 10000,\n randomizationFactor: 0.5,\n transports: [\"websocket\"],\n autoConnect: false,\n }),\n initialized: false,\n handshake: false,\n errorCount: 0,\n pendingDelegationIds: new Set<string>(),\n pendingTimers: new Set<NodeJS.Timeout>(),\n emitWhenReady: null,\n handshakeTask: null,\n delegateTask: null,\n transmitTask: null,\n };\n }\n\n private destroySocketClientRuntimeHandle(\n runtimeHandle: SocketClientRuntimeHandle | null,\n ): void {\n if (!runtimeHandle) {\n return;\n }\n\n runtimeHandle.initialized = false;\n runtimeHandle.handshake = false;\n runtimeHandle.emitWhenReady = null;\n\n runtimeHandle.handshakeTask?.destroy();\n runtimeHandle.delegateTask?.destroy();\n runtimeHandle.transmitTask?.destroy();\n\n runtimeHandle.handshakeTask = null;\n runtimeHandle.delegateTask = null;\n runtimeHandle.transmitTask = null;\n\n for (const timer of runtimeHandle.pendingTimers) {\n clearTimeout(timer);\n }\n\n runtimeHandle.pendingTimers.clear();\n runtimeHandle.pendingDelegationIds.clear();\n\n runtimeHandle.socket.close();\n runtimeHandle.socket.removeAllListeners();\n }\n\n private normalizeCommunicationTypes(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return value\n .map((item) => String(item))\n .filter((item) => item.trim().length > 0);\n }\n\n private getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n\n if (typeof error === \"string\") {\n return error;\n }\n\n try {\n return JSON.stringify(error);\n } catch {\n return String(error);\n }\n }\n\n private pruneDiagnosticsEntries(\n entries: Record<string, SocketClientDiagnosticsState>,\n now = Date.now(),\n ): void {\n for (const [fetchId, state] of Object.entries(entries)) {\n if (state.destroyed && now - state.updatedAt > this.destroyedDiagnosticsTtlMs) {\n delete entries[fetchId];\n }\n }\n\n if (Object.keys(entries).length <= this.diagnosticsMaxClientEntries) {\n return;\n }\n\n const entriesByEvictionPriority = Object.entries(entries).sort((left, right) => {\n if (left[1].destroyed !== right[1].destroyed) {\n return left[1].destroyed ? -1 : 1;\n }\n\n return left[1].updatedAt - right[1].updatedAt;\n });\n\n while (\n Object.keys(entries).length > this.diagnosticsMaxClientEntries &&\n entriesByEvictionPriority.length > 0\n ) {\n const [fetchId] = entriesByEvictionPriority.shift()!;\n delete entries[fetchId];\n }\n }\n\n public async getSocketClientDiagnosticsEntry(\n fetchId: string,\n ): Promise<SocketClientDiagnosticsState | undefined> {\n const normalized = String(fetchId ?? \"\").trim();\n if (!normalized) {\n return undefined;\n }\n\n const snapshot = this.socketClientDiagnosticsActor.getState();\n const entries = { ...snapshot.entries };\n this.pruneDiagnosticsEntries(entries);\n return entries[normalized];\n }\n\n private resolveTransportDiagnosticsOptions(ctx: AnyObject): {\n detailLevel: TransportDetailLevel;\n includeErrorHistory: boolean;\n errorHistoryLimit: number;\n } {\n const detailLevel: TransportDetailLevel =\n ctx.detailLevel === \"full\" ? \"full\" : \"summary\";\n const includeErrorHistory = Boolean(ctx.includeErrorHistory);\n\n const requestedLimit = Number(ctx.errorHistoryLimit);\n const errorHistoryLimit = Number.isFinite(requestedLimit)\n ? Math.max(1, Math.min(200, Math.trunc(requestedLimit)))\n : 10;\n\n return {\n detailLevel,\n includeErrorHistory,\n errorHistoryLimit,\n };\n }\n\n private collectSocketTransportDiagnostics(\n ctx: AnyObject,\n diagnosticsEntries: Record<string, SocketClientDiagnosticsState>,\n ): AnyObject {\n const { detailLevel, includeErrorHistory, errorHistoryLimit } =\n this.resolveTransportDiagnosticsOptions(ctx);\n const serviceName = Cadenza.serviceRegistry.serviceName ?? \"UnknownService\";\n\n const entries = { ...diagnosticsEntries };\n this.pruneDiagnosticsEntries(entries);\n\n const states = Object.values(entries).sort((a, b) =>\n a.fetchId.localeCompare(b.fetchId),\n );\n\n const summary = {\n detailLevel,\n totalClients: states.length,\n connectedClients: states.filter((state) => state.connected).length,\n activeHandshakes: states.filter((state) => state.handshake).length,\n pendingDelegations: states.reduce(\n (acc, state) => acc + state.pendingDelegations,\n 0,\n ),\n pendingTimers: states.reduce((acc, state) => acc + state.pendingTimers, 0),\n reconnectAttempts: states.reduce(\n (acc, state) => acc + state.reconnectAttempts,\n 0,\n ),\n connectErrors: states.reduce((acc, state) => acc + state.connectErrors, 0),\n reconnectErrors: states.reduce((acc, state) => acc + state.reconnectErrors, 0),\n socketErrors: states.reduce((acc, state) => acc + state.socketErrors, 0),\n latestError:\n states\n .slice()\n .sort((a, b) => b.lastErrorAt - a.lastErrorAt)\n .find((state) => state.lastError)?.lastError ?? null,\n };\n\n if (detailLevel === \"summary\") {\n return {\n transportDiagnostics: {\n [serviceName]: {\n socketClient: summary,\n },\n },\n };\n }\n\n const clients = states.map((state) => {\n const details: AnyObject = {\n fetchId: state.fetchId,\n serviceName: state.serviceName,\n url: state.url,\n socketId: state.socketId,\n connected: state.connected,\n handshake: state.handshake,\n reconnectAttempts: state.reconnectAttempts,\n connectErrors: state.connectErrors,\n reconnectErrors: state.reconnectErrors,\n socketErrors: state.socketErrors,\n pendingDelegations: state.pendingDelegations,\n pendingTimers: state.pendingTimers,\n destroyed: state.destroyed,\n lastHandshakeAt: state.lastHandshakeAt,\n lastHandshakeError: state.lastHandshakeError,\n lastDisconnectAt: state.lastDisconnectAt,\n latestError: state.lastError,\n };\n\n if (includeErrorHistory) {\n details.errorHistory = state.errorHistory.slice(-errorHistoryLimit);\n }\n\n return details;\n });\n\n return {\n transportDiagnostics: {\n [serviceName]: {\n socketClient: {\n ...summary,\n clients,\n },\n },\n },\n };\n }\n}\n","type WaitOutcome<TError> =\n | { ok: true }\n | { ok: false; error: TError };\n\ntype SocketLike = {\n connected?: boolean;\n once: (event: string, listener: (...args: any[]) => void) => any;\n off: (event: string, listener: (...args: any[]) => void) => any;\n};\n\n/**\n * Waits for a socket to become connected with explicit timeout/error outcomes.\n * Ensures listeners are removed in all exit paths to avoid accumulation across retries.\n */\nexport const waitForSocketConnection = async <TError>(\n socket: SocketLike | null,\n timeoutMs: number,\n createError: (reason: \"connect_timeout\" | \"connect_error\" | \"disconnected\", error?: unknown) => TError,\n): Promise<WaitOutcome<TError>> => {\n if (!socket) {\n return { ok: false, error: createError(\"disconnected\") };\n }\n\n if (socket.connected) {\n return { ok: true };\n }\n\n return new Promise((resolve) => {\n let timer: NodeJS.Timeout | null = null;\n let settled = false;\n\n const cleanup = () => {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n\n socket.off(\"connect\", onConnect);\n socket.off(\"connect_error\", onConnectError);\n socket.off(\"disconnect\", onDisconnect);\n };\n\n const settle = (outcome: WaitOutcome<TError>) => {\n if (settled) return;\n settled = true;\n cleanup();\n resolve(outcome);\n };\n\n const onConnect = () => settle({ ok: true });\n const onConnectError = (error: unknown) =>\n settle({ ok: false, error: createError(\"connect_error\", error) });\n const onDisconnect = () =>\n settle({ ok: false, error: createError(\"disconnected\") });\n\n socket.once(\"connect\", onConnect);\n socket.once(\"connect_error\", onConnectError);\n socket.once(\"disconnect\", onDisconnect);\n\n timer = setTimeout(() => {\n settle({ ok: false, error: createError(\"connect_timeout\") });\n }, timeoutMs);\n });\n};\n","/**\n * Formats a given timestamp into an ISO 8601 date string.\n *\n * @param {number} timestamp - The timestamp to format, represented as the number of milliseconds since the UNIX epoch.\n * @return {string} The formatted ISO 8601 string representing the date and time corresponding to the provided timestamp.\n */\nexport function formatTimestamp(timestamp: number) {\n return new Date(timestamp).toISOString();\n}\n\n/**\n * Decomposes a signal name into its constituent parts such as metadata indicator, source service name, domain, and action.\n *\n * @param {string} signalName - The signal name string to be decomposed. Typically a dot-separated string.\n * @return {Object} An object containing the decomposed parts:\n * - `isMeta` {boolean} - Indicates whether the signal is a metadata signal.\n * - `sourceServiceName` {string|null} - The name of the source service, or null if not applicable.\n * - `domain` {string} - The domain extracted from the signal name.\n * - `action` {string} - The action or last component of the signal name.\n */\nexport function decomposeSignalName(signalName: string) {\n const parts = signalName.split(\".\");\n let isMeta =\n parts[0] === \"meta\" ||\n parts[0] === \"sub_meta\" ||\n parts[1] === \"meta\" ||\n parts[1] === \"sub_meta\";\n let isGlobal = parts[0] === \"global\";\n let domain = isGlobal\n ? isMeta\n ? parts.length === 4\n ? parts[2]\n : \"\"\n : parts.length === 3\n ? parts[1]\n : \"\"\n : isMeta\n ? parts.length === 3\n ? parts[1]\n : \"\"\n : parts.length === 2\n ? parts[0]\n : \"\";\n const action = parts[parts.length - 1];\n\n return {\n isMeta,\n isGlobal,\n domain,\n action,\n };\n}\n","import Cadenza from \"../Cadenza\";\nimport { decomposeSignalName } from \"../utils/tools\";\n\nfunction buildSignalDatabaseTriggerContext(\n data: Record<string, unknown>,\n): Record<string, unknown> {\n return {\n data: { ...data },\n queryData: {\n data: { ...data },\n },\n };\n}\n\n/**\n * SignalController is a singleton class that manages signal registration, transmission,\n * and metadata handling within a service instance.\n *\n * This class utilizes the Cadenza framework to handle various tasks related to signals,\n * such as registering signals, transmitting signals to remote services, adding metadata,\n * and maintaining clean-forwarding and processing of signals.\n *\n * Features:\n * - Ensures signals are properly registered and metadata is propagated.\n * - Handles foreign signal registration for cross-service communication.\n * - Forwards signal observations and manages their metadata.\n * - Adds metadata during signal emission and consumption.\n * - Implements a meta-task-based system for handling complex workflows.\n *\n * Constructor initializes the necessary meta-tasks and tasks required for signal management.\n */\nexport default class SignalController {\n private static _instance: SignalController;\n public static get instance(): SignalController {\n if (!this._instance) this._instance = new SignalController();\n return this._instance;\n }\n\n /**\n * Constructor method for initializing the signal registration and data transmission process.\n * This method defines multiple meta tasks to manage signals, forwarding, and adding metadata\n * for service instances in a distributed system.\n *\n * Some key functionalities include:\n * - Registering signals from a service instance.\n * - Handling foreign signal registration from remote services.\n * - Forwarding signal observations between services.\n * - Adding metadata to signal emissions for better traceability.\n * - Adding metadata to signal consumption events.\n *\n * It serves as an initializer for signals and tasks.\n */\n constructor() {\n Cadenza.createMetaTask(\n \"Handle Signal Registration\",\n (ctx, emit) => {\n const { signalName } = ctx;\n const { isMeta, isGlobal, domain, action } =\n decomposeSignalName(signalName);\n\n emit(\n \"global.meta.signal_controller.signal_added\",\n buildSignalDatabaseTriggerContext({\n name: signalName,\n isGlobal,\n domain,\n action,\n isMeta,\n }),\n );\n\n return ctx;\n },\n \"Handles signal registration from a service instance\",\n )\n .doOn(\"meta.signal_broker.added\")\n .attachSignal(\"global.meta.signal_controller.signal_added\");\n\n Cadenza.createMetaTask(\n \"Add data to signal emission\",\n (ctx) => {\n const signalEmission = ctx.__signalEmission;\n delete ctx.__signalEmission;\n\n if (!signalEmission) {\n return false;\n }\n\n return {\n data: {\n uuid: signalEmission.uuid,\n signal_name: signalEmission.signalName,\n signal_tag: signalEmission.signalTag,\n task_name: signalEmission.taskName,\n task_version: signalEmission.taskVersion,\n task_execution_id: signalEmission.taskExecutionId,\n is_meta: signalEmission.isMeta,\n is_metric: signalEmission.isMetric ?? false,\n routine_execution_id: signalEmission.routineExecutionId,\n execution_trace_id: signalEmission.executionTraceId,\n context: ctx,\n metadata: signalEmission,\n service_name: Cadenza.serviceRegistry.serviceName,\n service_instance_id: Cadenza.serviceRegistry.serviceInstanceId,\n },\n };\n },\n \"\",\n { isSubMeta: true, concurrency: 100 },\n )\n .doOn(\"sub_meta.signal_broker.emitting_signal\")\n .emits(\"global.sub_meta.signal_controller.signal_emitted\");\n }\n}\n","import type {\n RuntimeValidationPolicy,\n RuntimeValidationScope,\n} from \"@cadenza.io/core\";\nimport Cadenza from \"../Cadenza\";\n\nexport const RUNTIME_VALIDATION_INTENTS = {\n getPolicy: \"meta-runtime-validation-policy-get\",\n setPolicy: \"meta-runtime-validation-policy-set\",\n replacePolicy: \"meta-runtime-validation-policy-replace\",\n clearPolicy: \"meta-runtime-validation-policy-clear\",\n listScopes: \"meta-runtime-validation-scope-list\",\n upsertScope: \"meta-runtime-validation-scope-upsert\",\n removeScope: \"meta-runtime-validation-scope-remove\",\n clearScopes: \"meta-runtime-validation-scope-clear\",\n} as const;\n\nexport const RUNTIME_VALIDATION_SIGNALS = {\n setPolicyRequested: \"meta.runtime_validation.policy_set_requested\",\n replacePolicyRequested: \"meta.runtime_validation.policy_replace_requested\",\n clearPolicyRequested: \"meta.runtime_validation.policy_clear_requested\",\n upsertScopeRequested: \"meta.runtime_validation.scope_upsert_requested\",\n removeScopeRequested: \"meta.runtime_validation.scope_remove_requested\",\n clearScopesRequested: \"meta.runtime_validation.scope_clear_requested\",\n policyUpdated: \"meta.runtime_validation.policy_updated\",\n policyCleared: \"meta.runtime_validation.policy_cleared\",\n scopeUpserted: \"meta.runtime_validation.scope_upserted\",\n scopeRemoved: \"meta.runtime_validation.scope_removed\",\n scopesCleared: \"meta.runtime_validation.scopes_cleared\",\n} as const;\n\nfunction normalizePolicyContext(ctx: Record<string, any>): RuntimeValidationPolicy {\n const source =\n ctx.policy && typeof ctx.policy === \"object\" && !Array.isArray(ctx.policy)\n ? ctx.policy\n : ctx;\n const policy: RuntimeValidationPolicy = {};\n\n for (const key of [\n \"metaInput\",\n \"metaOutput\",\n \"businessInput\",\n \"businessOutput\",\n \"warnOnMissingMetaInputSchema\",\n \"warnOnMissingMetaOutputSchema\",\n \"warnOnMissingBusinessInputSchema\",\n \"warnOnMissingBusinessOutputSchema\",\n ] as const) {\n if (source[key] !== undefined) {\n policy[key] = source[key];\n }\n }\n\n return policy;\n}\n\nfunction normalizeScopeContext(ctx: Record<string, any>): RuntimeValidationScope {\n const source =\n ctx.scope && typeof ctx.scope === \"object\" && !Array.isArray(ctx.scope)\n ? ctx.scope\n : ctx;\n\n return {\n id: source.id,\n active: source.active,\n startTaskNames: Array.isArray(source.startTaskNames)\n ? source.startTaskNames\n : undefined,\n startRoutineNames: Array.isArray(source.startRoutineNames)\n ? source.startRoutineNames\n : undefined,\n policy:\n source.policy && typeof source.policy === \"object\"\n ? normalizePolicyContext({ policy: source.policy })\n : undefined,\n };\n}\n\nexport default class RuntimeValidationController {\n private static _instance: RuntimeValidationController;\n\n public static get instance(): RuntimeValidationController {\n if (!this._instance) {\n this._instance = new RuntimeValidationController();\n }\n\n return this._instance;\n }\n\n constructor() {\n Cadenza.defineIntent({\n name: RUNTIME_VALIDATION_INTENTS.getPolicy,\n description: \"Get the active runtime validation policy.\",\n input: { type: \"object\" },\n output: { type: \"object\" },\n });\n Cadenza.defineIntent({\n name: RUNTIME_VALIDATION_INTENTS.setPolicy,\n description: \"Merge fields into the active runtime validation policy.\",\n input: { type: \"object\" },\n output: { type: \"object\" },\n });\n Cadenza.defineIntent({\n name: RUNTIME_VALIDATION_INTENTS.replacePolicy,\n description: \"Replace the active runtime validation policy.\",\n input: { type: \"object\" },\n output: { type: \"object\" },\n });\n Cadenza.defineIntent({\n name: RUNTIME_VALIDATION_INTENTS.clearPolicy,\n description: \"Clear the active runtime validation policy.\",\n input: { type: \"object\" },\n output: { type: \"object\" },\n });\n Cadenza.defineIntent({\n name: RUNTIME_VALIDATION_INTENTS.listScopes,\n description: \"List active runtime validation scopes.\",\n input: { type: \"object\" },\n output: { type: \"object\" },\n });\n Cadenza.defineIntent({\n name: RUNTIME_VALIDATION_INTENTS.upsertScope,\n description:\n \"Create or update a runtime validation scope for targeted subflow validation.\",\n input: { type: \"object\" },\n output: { type: \"object\" },\n });\n Cadenza.defineIntent({\n name: RUNTIME_VALIDATION_INTENTS.removeScope,\n description: \"Remove a runtime validation scope by id.\",\n input: { type: \"object\" },\n output: { type: \"object\" },\n });\n Cadenza.defineIntent({\n name: RUNTIME_VALIDATION_INTENTS.clearScopes,\n description: \"Clear all runtime validation scopes.\",\n input: { type: \"object\" },\n output: { type: \"object\" },\n });\n\n Cadenza.createMetaTask(\"Get runtime validation policy\", () => {\n return {\n policy: Cadenza.getRuntimeValidationPolicy(),\n };\n }).respondsTo(RUNTIME_VALIDATION_INTENTS.getPolicy);\n\n Cadenza.createMetaTask(\n \"Set runtime validation policy\",\n (ctx, emit) => {\n const policy = normalizePolicyContext(ctx);\n const nextPolicy = Cadenza.setRuntimeValidationPolicy(policy);\n emit(RUNTIME_VALIDATION_SIGNALS.policyUpdated, {\n policy: nextPolicy,\n });\n return {\n policy: nextPolicy,\n };\n },\n \"Merges runtime validation policy fields at runtime.\",\n )\n .respondsTo(RUNTIME_VALIDATION_INTENTS.setPolicy)\n .doOn(RUNTIME_VALIDATION_SIGNALS.setPolicyRequested);\n\n Cadenza.createMetaTask(\n \"Replace runtime validation policy\",\n (ctx, emit) => {\n const policy = normalizePolicyContext(ctx);\n const nextPolicy = Cadenza.replaceRuntimeValidationPolicy(policy);\n emit(RUNTIME_VALIDATION_SIGNALS.policyUpdated, {\n policy: nextPolicy,\n });\n return {\n policy: nextPolicy,\n };\n },\n \"Replaces runtime validation policy fields at runtime.\",\n )\n .respondsTo(RUNTIME_VALIDATION_INTENTS.replacePolicy)\n .doOn(RUNTIME_VALIDATION_SIGNALS.replacePolicyRequested);\n\n Cadenza.createMetaTask(\n \"Clear runtime validation policy\",\n (_ctx, emit) => {\n Cadenza.clearRuntimeValidationPolicy();\n emit(RUNTIME_VALIDATION_SIGNALS.policyCleared, {});\n return {\n policy: Cadenza.getRuntimeValidationPolicy(),\n };\n },\n \"Clears the runtime validation policy.\",\n )\n .respondsTo(RUNTIME_VALIDATION_INTENTS.clearPolicy)\n .doOn(RUNTIME_VALIDATION_SIGNALS.clearPolicyRequested);\n\n Cadenza.createMetaTask(\"List runtime validation scopes\", () => {\n return {\n scopes: Cadenza.getRuntimeValidationScopes(),\n };\n }).respondsTo(RUNTIME_VALIDATION_INTENTS.listScopes);\n\n Cadenza.createMetaTask(\n \"Upsert runtime validation scope\",\n (ctx, emit) => {\n const scope = normalizeScopeContext(ctx);\n const nextScope = Cadenza.upsertRuntimeValidationScope(scope);\n emit(RUNTIME_VALIDATION_SIGNALS.scopeUpserted, {\n scope: nextScope,\n });\n return {\n scope: nextScope,\n };\n },\n \"Upserts a runtime validation scope for targeted debugging.\",\n )\n .respondsTo(RUNTIME_VALIDATION_INTENTS.upsertScope)\n .doOn(RUNTIME_VALIDATION_SIGNALS.upsertScopeRequested);\n\n Cadenza.createMetaTask(\n \"Remove runtime validation scope\",\n (ctx, emit) => {\n if (!ctx.id) {\n throw new Error(\"Runtime validation scope id is required\");\n }\n\n Cadenza.removeRuntimeValidationScope(ctx.id);\n emit(RUNTIME_VALIDATION_SIGNALS.scopeRemoved, {\n id: ctx.id,\n });\n return {\n id: ctx.id,\n scopes: Cadenza.getRuntimeValidationScopes(),\n };\n },\n \"Removes a runtime validation scope.\",\n )\n .respondsTo(RUNTIME_VALIDATION_INTENTS.removeScope)\n .doOn(RUNTIME_VALIDATION_SIGNALS.removeScopeRequested);\n\n Cadenza.createMetaTask(\n \"Clear runtime validation scopes\",\n (_ctx, emit) => {\n Cadenza.clearRuntimeValidationScopes();\n emit(RUNTIME_VALIDATION_SIGNALS.scopesCleared, {});\n return {\n scopes: Cadenza.getRuntimeValidationScopes(),\n };\n },\n \"Clears all runtime validation scopes.\",\n )\n .respondsTo(RUNTIME_VALIDATION_INTENTS.clearScopes)\n .doOn(RUNTIME_VALIDATION_SIGNALS.clearScopesRequested);\n }\n}\n","import { META_ACTOR_SESSION_STATE_PERSIST_INTENT } from \"@cadenza.io/core\";\nimport Cadenza from \"../../Cadenza\";\n\nexport function registerActorSessionPersistenceTasks(): void {\n if (Cadenza.get(\"Persist actor session state\")) {\n return;\n }\n\n const actorSessionStateInsertTask =\n Cadenza.getLocalCadenzaDBInsertTask(\"actor_session_state\") ??\n Cadenza.get(\"dbInsertActorSessionState\") ??\n Cadenza.get(\"Insert actor_session_state in CadenzaDB\") ??\n Cadenza.createCadenzaDBInsertTask(\n \"actor_session_state\",\n {},\n { concurrency: 100, isSubMeta: true },\n );\n\n const validateActorSessionStatePersistenceTask =\n Cadenza.createMetaTask(\n \"Validate actor session state persistence\",\n (ctx) => {\n if (ctx.errored || ctx.failed || ctx.__success !== true) {\n throw new Error(\n String(\n ctx.__error ??\n ctx.error ??\n \"actor_session_state persistence query failed\",\n ),\n );\n }\n\n const rowCount = Number(ctx.rowCount ?? 0);\n if (!Number.isFinite(rowCount) || rowCount <= 0) {\n throw new Error(\n \"actor_session_state persistence did not affect any rows (possible stale durable_version)\",\n );\n }\n\n return {\n __success: true,\n persisted: true,\n actor_name: ctx.actor_name,\n actor_version: ctx.actor_version,\n actor_key: ctx.actor_key,\n service_name: ctx.service_name,\n durable_version: ctx.durable_version,\n };\n },\n \"Enforces strict actor session persistence success contract.\",\n { isSubMeta: true, concurrency: 100 },\n );\n\n const insertAndValidateActorSessionStateTask = actorSessionStateInsertTask.then(\n validateActorSessionStatePersistenceTask,\n );\n\n Cadenza.createMetaTask(\n \"Persist actor session state\",\n (ctx) => {\n const actorName =\n typeof ctx.actor_name === \"string\" ? ctx.actor_name.trim() : \"\";\n const actorKey =\n typeof ctx.actor_key === \"string\" ? ctx.actor_key.trim() : \"\";\n const actorVersion = Number(ctx.actor_version ?? 1);\n const durableVersion = Number(ctx.durable_version);\n\n if (!actorName) {\n throw new Error(\"actor_name is required for actor session persistence\");\n }\n\n if (!actorKey) {\n throw new Error(\"actor_key is required for actor session persistence\");\n }\n\n if (!Number.isInteger(actorVersion) || actorVersion < 1) {\n throw new Error(\"actor_version must be a positive integer\");\n }\n\n if (!Number.isInteger(durableVersion) || durableVersion < 0) {\n throw new Error(\"durable_version must be a non-negative integer\");\n }\n\n if (\n typeof ctx.durable_state !== \"object\" ||\n ctx.durable_state === null ||\n Array.isArray(ctx.durable_state)\n ) {\n throw new Error(\"durable_state must be a non-null object\");\n }\n\n const serviceName = Cadenza.serviceRegistry.serviceName;\n if (!serviceName) {\n throw new Error(\"service_name is not available for actor session persistence\");\n }\n\n let expiresAt: string | null = null;\n if (ctx.expires_at !== undefined && ctx.expires_at !== null) {\n if (ctx.expires_at instanceof Date) {\n expiresAt = ctx.expires_at.toISOString();\n } else if (\n typeof ctx.expires_at === \"string\" &&\n ctx.expires_at.trim().length > 0\n ) {\n expiresAt = ctx.expires_at;\n } else {\n throw new Error(\"expires_at must be null, Date, or non-empty string\");\n }\n }\n\n const updatedAt = new Date().toISOString();\n\n return {\n ...ctx,\n actor_name: actorName,\n actor_key: actorKey,\n actor_version: actorVersion,\n durable_version: durableVersion,\n expires_at: expiresAt,\n service_name: serviceName,\n queryData: {\n data: {\n actor_name: actorName,\n actor_version: actorVersion,\n actor_key: actorKey,\n service_name: serviceName,\n durable_state: ctx.durable_state,\n durable_version: durableVersion,\n expires_at: expiresAt,\n updated: updatedAt,\n },\n onConflict: {\n target: [\n \"actor_name\",\n \"actor_version\",\n \"actor_key\",\n \"service_name\",\n ],\n action: {\n do: \"update\",\n set: {\n durable_state: \"excluded\",\n durable_version: \"excluded\",\n expires_at: \"excluded\",\n updated: \"excluded\",\n },\n where:\n \"actor_session_state.durable_version <= excluded.durable_version\",\n },\n },\n },\n };\n },\n \"Validates and prepares actor_session_state payload for strict write-through persistence.\",\n { isSubMeta: true, concurrency: 100 },\n )\n .then(insertAndValidateActorSessionStateTask)\n .respondsTo(META_ACTOR_SESSION_STATE_PERSIST_INTENT);\n}\n","import Cadenza from \"../../Cadenza\";\nimport { formatTimestamp } from \"../../utils/tools\";\nimport { isMetaIntentName } from \"../../utils/inquiry\";\nimport { registerActorSessionPersistenceTasks } from \"./registerActorSessionPersistence\";\n\nfunction buildDatabaseTriggerContext(\n data?: Record<string, unknown> | null,\n filter?: Record<string, unknown> | null,\n extra: Record<string, unknown> = {},\n): Record<string, unknown> {\n const nextData =\n data && typeof data === \"object\" ? { ...data } : undefined;\n const nextFilter =\n filter && typeof filter === \"object\" ? { ...filter } : undefined;\n const queryData: Record<string, unknown> = {};\n\n if (nextData !== undefined) {\n queryData.data = nextData;\n }\n\n if (nextFilter !== undefined) {\n queryData.filter = nextFilter;\n }\n\n return {\n ...extra,\n ...(nextData !== undefined ? { data: nextData } : {}),\n ...(nextFilter !== undefined ? { filter: nextFilter } : {}),\n ...(Object.keys(queryData).length > 0 ? { queryData } : {}),\n };\n}\n\nexport default class GraphMetadataController {\n private static _instance: GraphMetadataController;\n public static get instance(): GraphMetadataController {\n if (!this._instance) this._instance = new GraphMetadataController();\n return this._instance;\n }\n\n constructor() {\n Cadenza.createMetaTask(\"Handle task creation\", (ctx) => {\n return buildDatabaseTriggerContext({\n ...ctx.data,\n serviceName: Cadenza.serviceRegistry.serviceName,\n });\n })\n .doOn(\"meta.task.created\")\n .emits(\"global.meta.graph_metadata.task_created\");\n\n Cadenza.createMetaTask(\"Handle task update\", (ctx) => {\n return buildDatabaseTriggerContext(\n (ctx.data as Record<string, unknown> | undefined) ?? undefined,\n {\n ...ctx.filter,\n serviceName: Cadenza.serviceRegistry.serviceName,\n },\n );\n })\n .doOn(\"meta.task.layer_index_changed\", \"meta.task.destroyed\")\n .emits(\"global.meta.graph_metadata.task_updated\");\n\n Cadenza.createMetaTask(\"Handle task relationship creation\", (ctx) => {\n const taskName = ctx.data?.taskName ?? ctx.data?.task_name;\n const predecessorTaskName =\n ctx.data?.predecessorTaskName ?? ctx.data?.predecessor_task_name;\n const task = taskName ? Cadenza.get(taskName) : undefined;\n const predecessorTask = predecessorTaskName\n ? Cadenza.get(predecessorTaskName)\n : undefined;\n\n if (!task?.registered || !predecessorTask?.registered) {\n return false;\n }\n\n return buildDatabaseTriggerContext({\n ...ctx.data,\n serviceName: Cadenza.serviceRegistry.serviceName,\n predecessorServiceName: Cadenza.serviceRegistry.serviceName,\n });\n })\n .doOn(\"meta.task.relationship_added\")\n .emits(\"global.meta.graph_metadata.task_relationship_created\");\n\n Cadenza.createMetaTask(\"Handle task error\", (ctx) => {\n Cadenza.log(`Error in task ${ctx.data.taskName}`, ctx.data, \"error\");\n }).doOn(\"meta.node.errored\");\n\n Cadenza.createMetaTask(\"Handle task signal observation\", (ctx) => {\n const isGlobal = ctx.signalName.startsWith(\"global.\");\n return buildDatabaseTriggerContext({\n ...ctx.data,\n isGlobal,\n serviceName: Cadenza.serviceRegistry.serviceName,\n });\n })\n .doOn(\"meta.task.observed_signal\")\n .emits(\"global.meta.graph_metadata.task_signal_observed\");\n\n Cadenza.createMetaTask(\"Handle task signal attachment\", (ctx) => {\n return buildDatabaseTriggerContext(\n (ctx.data as Record<string, unknown> | undefined) ?? undefined,\n {\n ...ctx.filter,\n serviceName: Cadenza.serviceRegistry.serviceName,\n },\n );\n })\n .doOn(\"meta.task.attached_signal\")\n .emits(\"global.meta.graph_metadata.task_attached_signal\");\n\n Cadenza.createMetaTask(\"Handle task intent association\", (ctx) => {\n return buildDatabaseTriggerContext({\n ...(ctx.data as Record<string, unknown> | undefined),\n serviceName: Cadenza.serviceRegistry.serviceName,\n });\n })\n .doOn(\"meta.task.intent_associated\")\n .emits(\"global.meta.graph_metadata.task_intent_associated\");\n\n Cadenza.createMetaTask(\"Handle task unsubscribing signal\", (ctx) => {\n return buildDatabaseTriggerContext(\n {\n deleted: true,\n },\n {\n ...ctx.filter,\n serviceName: Cadenza.serviceRegistry.serviceName,\n },\n );\n })\n .doOn(\"meta.task.unsubscribed_signal\")\n .emits(\"meta.graph_metadata.task_unsubscribed_signal\");\n\n Cadenza.createMetaTask(\"Handle task detaching signal\", (ctx) => {\n return buildDatabaseTriggerContext(\n {\n deleted: true,\n },\n {\n ...ctx.filter,\n serviceName: Cadenza.serviceRegistry.serviceName,\n },\n );\n })\n .doOn(\"meta.task.detached_signal\")\n .emits(\"global.meta.graph_metadata.task_detached_signal\");\n\n Cadenza.createMetaTask(\"Handle routine creation\", (ctx) => {\n return buildDatabaseTriggerContext({\n ...ctx.data,\n serviceName: Cadenza.serviceRegistry.serviceName,\n });\n })\n .doAfter(Cadenza.registry.registerRoutine)\n .emits(\"global.meta.graph_metadata.routine_created\");\n\n Cadenza.createMetaTask(\"Handle routine update\", (ctx) => {\n return buildDatabaseTriggerContext(\n (ctx.data as Record<string, unknown> | undefined) ?? undefined,\n {\n ...ctx.filter,\n serviceName: Cadenza.serviceRegistry.serviceName,\n },\n );\n })\n .doOn(\"meta.routine.destroyed\")\n .emits(\"global.meta.graph_metadata.routine_updated\");\n\n Cadenza.createMetaTask(\"Handle adding task to routine\", (ctx) => {\n return buildDatabaseTriggerContext({\n ...ctx.data,\n serviceName: Cadenza.serviceRegistry.serviceName,\n });\n })\n .doOn(\"meta.routine.task_added\")\n .emits(\"global.meta.graph_metadata.task_added_to_routine\");\n\n Cadenza.createMetaTask(\"Handle new trace\", (ctx) => {\n return buildDatabaseTriggerContext({\n ...ctx.data,\n service_name: Cadenza.serviceRegistry.serviceName,\n service_instance_id: Cadenza.serviceRegistry.serviceInstanceId,\n });\n })\n .doOn(\"meta.runner.new_trace\", \"sub_meta.signal_broker.new_trace\")\n .emits(\"global.meta.graph_metadata.execution_trace_created\");\n\n Cadenza.createMetaTask(\n \"Handle routine execution creation\",\n (ctx) => {\n return buildDatabaseTriggerContext({\n ...ctx.data,\n serviceName: Cadenza.serviceRegistry.serviceName,\n serviceInstanceId: Cadenza.serviceRegistry.serviceInstanceId,\n });\n },\n \"Handles routine execution creation\",\n { concurrency: 100, isSubMeta: true },\n )\n .doOn(\"meta.runner.added_tasks\")\n .emits(\"global.meta.graph_metadata.routine_execution_created\");\n\n Cadenza.createMetaTask(\n \"Handle routine execution started\",\n (ctx) => {\n return buildDatabaseTriggerContext(\n (ctx.data as Record<string, unknown> | undefined) ?? undefined,\n (ctx.filter as Record<string, unknown> | undefined) ?? undefined,\n );\n },\n \"Handles routine execution started\",\n { concurrency: 100, isSubMeta: true },\n )\n .doOn(\"meta.node.started_routine_execution\")\n .emits(\"global.meta.graph_metadata.routine_execution_started\");\n\n Cadenza.createMetaTask(\n \"Handle routine execution ended\",\n (ctx) => {\n return buildDatabaseTriggerContext(\n {\n ...ctx.data,\n serviceName: Cadenza.serviceRegistry.serviceName,\n serviceInstanceId: Cadenza.serviceRegistry.serviceInstanceId,\n },\n (ctx.filter as Record<string, unknown> | undefined) ?? undefined,\n );\n },\n \"Handles routine execution ended\",\n { concurrency: 100, isSubMeta: true },\n )\n .doOn(\"meta.node.ended_routine_execution\")\n .emits(\"global.meta.graph_metadata.routine_execution_ended\");\n\n Cadenza.createMetaTask(\n \"Handle task execution creation\",\n (ctx) => {\n return buildDatabaseTriggerContext({\n ...ctx.data,\n serviceName: Cadenza.serviceRegistry.serviceName,\n serviceInstanceId: Cadenza.serviceRegistry.serviceInstanceId,\n });\n },\n \"Handles task execution creation\",\n { concurrency: 100, isSubMeta: true },\n )\n .doOn(\"meta.node.scheduled\")\n .emits(\"global.meta.graph_metadata.task_execution_created\");\n\n Cadenza.createMetaTask(\n \"Handle task execution mapped\",\n (ctx) => {\n return buildDatabaseTriggerContext(\n (ctx.data as Record<string, unknown> | undefined) ?? undefined,\n (ctx.filter as Record<string, unknown> | undefined) ?? undefined,\n );\n },\n \"Handles task execution mapping\",\n { concurrency: 100, isSubMeta: true },\n )\n .doOn(\"meta.node.mapped\", \"meta.node.detected_previous_task_execution\")\n .emits(\"global.meta.graph_metadata.task_execution_mapped\");\n\n Cadenza.createMetaTask(\n \"Handle task execution started\",\n (ctx) => {\n return buildDatabaseTriggerContext(\n (ctx.data as Record<string, unknown> | undefined) ?? undefined,\n (ctx.filter as Record<string, unknown> | undefined) ?? undefined,\n );\n },\n \"Handles task execution started\",\n { concurrency: 100, isSubMeta: true },\n )\n .doOn(\"meta.node.started\")\n .emits(\"global.meta.graph_metadata.task_execution_started\");\n\n Cadenza.createMetaTask(\n \"Handle task execution ended\",\n (ctx) => {\n return buildDatabaseTriggerContext(\n {\n ...ctx.data,\n serviceName: Cadenza.serviceRegistry.serviceName,\n serviceInstanceId: Cadenza.serviceRegistry.serviceInstanceId,\n },\n (ctx.filter as Record<string, unknown> | undefined) ?? undefined,\n );\n },\n \"Handles task execution ended\",\n { concurrency: 100, isSubMeta: true },\n )\n .doOn(\"meta.node.ended\")\n .emits(\"global.meta.graph_metadata.task_execution_ended\");\n\n Cadenza.createMetaTask(\n \"Handle task execution relationship creation\",\n (ctx) => {\n return buildDatabaseTriggerContext(\n {\n executionCount: \"increment\",\n lastExecuted: formatTimestamp(Date.now()),\n },\n {\n ...ctx.filter,\n serviceName: Cadenza.serviceRegistry.serviceName,\n },\n );\n },\n \"Handles task execution relationship creation\",\n { concurrency: 100, isSubMeta: true },\n )\n .doOn(\"meta.node.mapped\", \"meta.node.detected_previous_task_execution\")\n .emits(\"global.meta.graph_metadata.relationship_executed\");\n\n Cadenza.createMetaTask(\"Handle actor creation\", (ctx) => {\n return buildDatabaseTriggerContext({\n ...ctx.data,\n service_name: Cadenza.serviceRegistry.serviceName,\n });\n })\n .doOn(\"meta.actor.created\")\n .emits(\"global.meta.graph_metadata.actor_created\");\n\n Cadenza.createMetaTask(\"Handle actor task association\", (ctx) => {\n return buildDatabaseTriggerContext({\n ...ctx.data,\n service_name: Cadenza.serviceRegistry.serviceName,\n });\n })\n .doOn(\"meta.actor.task_associated\")\n .emits(\"global.meta.graph_metadata.actor_task_associated\");\n\n registerActorSessionPersistenceTasks();\n\n Cadenza.createMetaTask(\"Handle Intent Creation\", (ctx) => {\n const intentName = ctx.data?.name;\n return buildDatabaseTriggerContext({\n ...ctx.data,\n isMeta: intentName ? isMetaIntentName(intentName) : false,\n });\n })\n .doOn(\"meta.inquiry_broker.added\")\n .emits(\"global.meta.graph_metadata.intent_created\");\n }\n}\n","export default class DatabaseController {\n private static _instance: DatabaseController;\n\n public static get instance(): DatabaseController {\n if (!this._instance) {\n this._instance = new DatabaseController();\n }\n\n return this._instance;\n }\n\n private unsupported(message: string): never {\n throw new Error(message);\n }\n\n createPostgresActor(): never {\n return this.unsupported(\n \"PostgresActor creation is not supported in the browser runtime.\",\n );\n }\n\n requestPostgresActorSetup(): never {\n return this.unsupported(\n \"PostgresActor setup is not supported in the browser runtime.\",\n );\n }\n}\n","import Cadenza from \"../../Cadenza\";\nimport {\n META_ACTOR_SESSION_STATE_PERSIST_INTENT,\n Task,\n} from \"@cadenza.io/core\";\nimport ServiceRegistry from \"../../registry/ServiceRegistry\";\nimport { decomposeSignalName, formatTimestamp } from \"../../utils/tools\";\nimport { DeputyTask } from \"../../index\";\nimport { isMetaIntentName } from \"../../utils/inquiry\";\n\ntype ActorTaskRuntimeMetadata = {\n actorName: string;\n actorDescription?: string;\n actorKind: \"standard\" | \"meta\";\n mode: \"read\" | \"write\" | \"meta\";\n forceMeta: boolean;\n};\n\nconst ACTOR_TASK_METADATA = Symbol.for(\"@cadenza.io/core/actor-task-meta\");\n\nfunction getActorTaskRuntimeMetadata(\n taskFunction: unknown,\n): ActorTaskRuntimeMetadata | undefined {\n if (typeof taskFunction !== \"function\") {\n return undefined;\n }\n\n return (taskFunction as { [ACTOR_TASK_METADATA]?: ActorTaskRuntimeMetadata })[\n ACTOR_TASK_METADATA\n ];\n}\n\nfunction sanitizeActorMetadataValue(value: unknown): unknown {\n if (value === null) {\n return null;\n }\n if (value === undefined || typeof value === \"function\") {\n return undefined;\n }\n if (Array.isArray(value)) {\n const items: unknown[] = [];\n for (const item of value) {\n const sanitizedItem = sanitizeActorMetadataValue(item);\n if (sanitizedItem !== undefined) {\n items.push(sanitizedItem);\n }\n }\n return items;\n }\n if (typeof value === \"object\") {\n const output: Record<string, unknown> = {};\n for (const [key, nestedValue] of Object.entries(value)) {\n const sanitizedNestedValue = sanitizeActorMetadataValue(nestedValue);\n if (sanitizedNestedValue !== undefined) {\n output[key] = sanitizedNestedValue;\n }\n }\n return output;\n }\n\n return value;\n}\n\nfunction buildActorRegistrationData(actor: any): Record<string, unknown> {\n const definition = sanitizeActorMetadataValue(\n typeof actor?.toDefinition === \"function\" ? actor.toDefinition() : {},\n ) as Record<string, unknown>;\n const stateDefinition =\n definition?.state && typeof definition.state === \"object\"\n ? definition.state\n : {};\n const actorKind =\n typeof definition?.kind === \"string\" ? definition.kind : actor?.kind;\n\n return {\n name: definition?.name ?? actor?.spec?.name ?? \"\",\n description: definition?.description ?? actor?.spec?.description ?? \"\",\n default_key:\n definition?.defaultKey ?? actor?.spec?.defaultKey ?? \"default\",\n load_policy: definition?.loadPolicy ?? actor?.spec?.loadPolicy ?? \"eager\",\n write_contract:\n definition?.writeContract ?? actor?.spec?.writeContract ?? \"overwrite\",\n runtime_read_guard:\n definition?.runtimeReadGuard ?? actor?.spec?.runtimeReadGuard ?? \"none\",\n consistency_profile:\n definition?.consistencyProfile ?? actor?.spec?.consistencyProfile ?? null,\n key_definition: definition?.key ?? null,\n state_definition: stateDefinition,\n retry_policy: definition?.retry ?? {},\n idempotency_policy: definition?.idempotency ?? {},\n session_policy: definition?.session ?? {},\n is_meta: actorKind === \"meta\",\n version: 1,\n };\n}\n\nfunction resolveSyncServiceName(\n task?:\n | {\n serviceName?: string;\n ownerServiceName?: string | null;\n isDeputy?: boolean;\n }\n | null,\n):\n | string\n | undefined {\n const ownerServiceName =\n typeof task?.ownerServiceName === \"string\"\n ? task.ownerServiceName.trim()\n : \"\";\n const taskServiceName =\n typeof task?.serviceName === \"string\" ? task.serviceName.trim() : \"\";\n const registryServiceName =\n typeof ServiceRegistry.instance.serviceName === \"string\"\n ? ServiceRegistry.instance.serviceName.trim()\n : \"\";\n\n if (task?.isDeputy) {\n return ownerServiceName || registryServiceName || taskServiceName || undefined;\n }\n\n return ownerServiceName || taskServiceName || registryServiceName || undefined;\n}\n\nfunction isLocalOnlySyncIntent(intentName: string): boolean {\n return intentName === META_ACTOR_SESSION_STATE_PERSIST_INTENT;\n}\n\nfunction buildIntentRegistryData(intent: any): Record<string, unknown> | null {\n const name = String(intent?.name ?? \"\").trim();\n if (!name) {\n return null;\n }\n\n return {\n name,\n description:\n typeof intent?.description === \"string\" ? intent.description : \"\",\n input:\n intent?.input && typeof intent.input === \"object\"\n ? intent.input\n : { type: \"object\" },\n output:\n intent?.output && typeof intent.output === \"object\"\n ? intent.output\n : { type: \"object\" },\n isMeta: isMetaIntentName(name),\n };\n}\n\nfunction getJoinedContextValue(\n ctx: Record<string, any>,\n key: \"data\" | \"batch\" | \"queryData\",\n): unknown {\n const joinedContexts = Array.isArray(ctx.joinedContexts) ? ctx.joinedContexts : [];\n for (let index = joinedContexts.length - 1; index >= 0; index -= 1) {\n const joinedContext = joinedContexts[index];\n if (\n joinedContext &&\n typeof joinedContext === \"object\" &&\n (Object.prototype.hasOwnProperty.call(joinedContext, key) ||\n joinedContext[key] !== undefined)\n ) {\n return joinedContext[key];\n }\n }\n\n return undefined;\n}\n\nfunction didSyncInsertSucceed(ctx: Record<string, any>): boolean {\n if (ctx.errored || ctx.__success === false) {\n return false;\n }\n\n const inquiryMeta =\n ctx.__inquiryMeta && typeof ctx.__inquiryMeta === \"object\"\n ? (ctx.__inquiryMeta as Record<string, unknown>)\n : null;\n\n if (!inquiryMeta) {\n return true;\n }\n\n const eligibleResponders = Number(inquiryMeta.eligibleResponders);\n if (Number.isFinite(eligibleResponders) && eligibleResponders === 0) {\n return false;\n }\n\n const responded = Number(inquiryMeta.responded);\n if (Number.isFinite(responded) && responded === 0) {\n return false;\n }\n\n return true;\n}\n\nfunction buildMinimalSyncSignalContext(\n ctx: Record<string, unknown>,\n extra: Record<string, unknown> = {},\n): Record<string, unknown> {\n const nextContext: Record<string, unknown> = {\n __syncing: ctx.__syncing === true,\n ...extra,\n };\n\n if (typeof ctx.__reason === \"string\" && ctx.__reason.trim().length > 0) {\n nextContext.__reason = ctx.__reason;\n }\n\n return nextContext;\n}\n\nfunction buildSyncInsertQueryData(\n ctx: Record<string, any>,\n queryData: Record<string, unknown> = {},\n): Record<string, unknown> {\n const pickQueryData = (\n source: Record<string, unknown>,\n allowedKeys: string[],\n ): Record<string, unknown> => {\n const next: Record<string, unknown> = {};\n\n for (const key of allowedKeys) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n next[key] = source[key];\n }\n }\n\n return next;\n };\n const joinedQueryData = getJoinedContextValue(ctx, \"queryData\");\n const existingQueryData =\n ctx.queryData && typeof ctx.queryData === \"object\"\n ? ctx.queryData\n : joinedQueryData && typeof joinedQueryData === \"object\"\n ? joinedQueryData\n : {};\n const nextQueryData: Record<string, unknown> = {\n ...pickQueryData(existingQueryData, [\"transaction\"]),\n ...queryData,\n };\n const resolvedData =\n Object.prototype.hasOwnProperty.call(ctx, \"data\") || ctx.data !== undefined\n ? ctx.data\n : getJoinedContextValue(ctx, \"data\");\n const resolvedBatch =\n Object.prototype.hasOwnProperty.call(ctx, \"batch\") || ctx.batch !== undefined\n ? ctx.batch\n : getJoinedContextValue(ctx, \"batch\");\n\n if (resolvedData !== undefined) {\n nextQueryData.data =\n resolvedData && typeof resolvedData === \"object\" && !Array.isArray(resolvedData)\n ? { ...resolvedData }\n : resolvedData;\n } else {\n delete nextQueryData.data;\n }\n\n if (resolvedBatch !== undefined) {\n nextQueryData.batch = Array.isArray(resolvedBatch)\n ? resolvedBatch.map((row: unknown) =>\n row && typeof row === \"object\"\n ? { ...(row as Record<string, unknown>) }\n : row,\n )\n : resolvedBatch;\n } else {\n delete nextQueryData.batch;\n }\n\n return nextQueryData;\n}\n\nfunction buildSyncQueryQueryData(\n ctx: Record<string, any>,\n queryData: Record<string, unknown> = {},\n): Record<string, unknown> {\n const joinedQueryData = getJoinedContextValue(ctx, \"queryData\");\n const existingQueryData =\n ctx.queryData && typeof ctx.queryData === \"object\"\n ? ctx.queryData\n : joinedQueryData && typeof joinedQueryData === \"object\"\n ? joinedQueryData\n : {};\n const nextQueryData: Record<string, unknown> = {};\n const allowedKeys = [\n \"transaction\",\n \"filter\",\n \"fields\",\n \"joins\",\n \"sort\",\n \"limit\",\n \"offset\",\n \"queryMode\",\n \"aggregates\",\n \"groupBy\",\n ];\n\n for (const key of allowedKeys) {\n if (Object.prototype.hasOwnProperty.call(existingQueryData, key)) {\n nextQueryData[key] = existingQueryData[key];\n }\n }\n\n return {\n ...nextQueryData,\n ...queryData,\n };\n}\n\ntype SyncTaskGraph = {\n entryTask: Task;\n completionTask: Task;\n};\n\nconst REMOTE_AUTHORITY_SYNC_INSERT_CONCURRENCY = 5;\nconst REMOTE_AUTHORITY_SYNC_QUERY_CONCURRENCY = 3;\n\nfunction wireSyncTaskGraph(\n predecessorTask: Task,\n graph: SyncTaskGraph | undefined,\n ...completionTasks: (Task | undefined)[]\n): Task | undefined {\n if (!graph) {\n return undefined;\n }\n\n predecessorTask.then(graph.entryTask);\n if (completionTasks.length > 0) {\n graph.completionTask.then(...completionTasks);\n }\n\n return graph.completionTask;\n}\n\nfunction buildSyncExecutionEnvelope(\n ctx: Record<string, any>,\n queryData: Record<string, unknown>,\n): Record<string, unknown> {\n const originalContext = { ...ctx };\n const syncSourceServiceName =\n typeof ctx.__syncSourceServiceName === \"string\" &&\n ctx.__syncSourceServiceName.trim().length > 0\n ? ctx.__syncSourceServiceName\n : typeof ctx.__serviceName === \"string\" && ctx.__serviceName.trim().length > 0\n ? ctx.__serviceName\n : resolveSyncServiceName();\n const rootDbOperationFields: Record<string, unknown> = {};\n for (const key of [\n \"data\",\n \"batch\",\n \"transaction\",\n \"onConflict\",\n \"filter\",\n \"fields\",\n ] as const) {\n if (Object.prototype.hasOwnProperty.call(queryData, key)) {\n rootDbOperationFields[key] = queryData[key];\n }\n }\n const nextContext: Record<string, unknown> = {\n __syncing:\n ctx.__syncing === true || ctx.__metadata?.__syncing === true || false,\n __syncSourceServiceName: syncSourceServiceName,\n __preferredTransportProtocol: \"rest\",\n __resolverOriginalContext: originalContext,\n __resolverQueryData: queryData,\n ...rootDbOperationFields,\n queryData,\n };\n\n if (typeof ctx.__reason === \"string\" && ctx.__reason.trim().length > 0) {\n nextContext.__reason = ctx.__reason;\n }\n\n return nextContext;\n}\n\nfunction markCompletedSyncCycle(\n completedCycles: Set<string>,\n cycleId: string,\n limit = 32,\n): boolean {\n if (!cycleId) {\n return false;\n }\n\n if (completedCycles.has(cycleId)) {\n return false;\n }\n\n completedCycles.add(cycleId);\n while (completedCycles.size > limit) {\n const oldestCycleId = completedCycles.values().next().value as\n | string\n | undefined;\n if (!oldestCycleId) {\n break;\n }\n\n completedCycles.delete(oldestCycleId);\n }\n\n return true;\n}\n\nfunction resolveSyncInsertTask(\n isCadenzaDBReady: boolean,\n tableName: string,\n queryData: Record<string, unknown> = {},\n options: Record<string, unknown> = {},\n): SyncTaskGraph | undefined {\n const localInsertTask = Cadenza.getLocalCadenzaDBInsertTask(tableName);\n\n if (isCadenzaDBReady && !localInsertTask) {\n return undefined;\n }\n const targetTask =\n localInsertTask ??\n Cadenza.createCadenzaDBInsertTask(tableName, queryData, {\n ...options,\n concurrency:\n Number(options.concurrency) > 0\n ? Math.min(\n Number(options.concurrency),\n REMOTE_AUTHORITY_SYNC_INSERT_CONCURRENCY,\n )\n : REMOTE_AUTHORITY_SYNC_INSERT_CONCURRENCY,\n register: false,\n isHidden: true,\n });\n\n const prepareExecutionTask = Cadenza.createMetaTask(\n `Prepare graph sync insert for ${tableName}`,\n (ctx) => {\n const originalQueryData = buildSyncInsertQueryData(\n ctx as Record<string, any>,\n queryData,\n );\n\n if (\n (tableName === \"signal_registry\" ||\n tableName === \"directional_task_graph_map\") &&\n originalQueryData.data &&\n typeof originalQueryData.data === \"object\" &&\n !Array.isArray(originalQueryData.data) &&\n Object.keys(originalQueryData.data as Record<string, unknown>).length === 0\n ) {\n console.warn(\n \"[CADENZA_SYNC_EMPTY_INSERT]\",\n {\n tableName,\n queryData: originalQueryData,\n ctx,\n joinedContexts: Array.isArray((ctx as Record<string, any>).joinedContexts)\n ? (ctx as Record<string, any>).joinedContexts\n : [],\n },\n );\n }\n\n return buildSyncExecutionEnvelope(\n ctx as Record<string, any>,\n originalQueryData,\n );\n },\n `Prepares ${tableName} graph-sync insert payloads for runner execution.`,\n {\n register: false,\n isHidden: true,\n },\n );\n\n const finalizeExecutionTask = Cadenza.createMetaTask(\n `Finalize graph sync insert for ${tableName}`,\n (ctx) => {\n const originalContext =\n ctx.__resolverOriginalContext &&\n typeof ctx.__resolverOriginalContext === \"object\"\n ? (ctx.__resolverOriginalContext as Record<string, unknown>)\n : {};\n const originalQueryData =\n ctx.__resolverQueryData && typeof ctx.__resolverQueryData === \"object\"\n ? (ctx.__resolverQueryData as Record<string, unknown>)\n : undefined;\n const normalizedContext = {\n ...originalContext,\n ...ctx,\n queryData:\n ctx.queryData && typeof ctx.queryData === \"object\"\n ? ctx.queryData\n : originalQueryData,\n };\n\n if (\n originalContext.__syncing === true &&\n !didSyncInsertSucceed(normalizedContext as Record<string, any>)\n ) {\n Cadenza.debounce(\"meta.sync_requested\", {\n delayMs: 1000,\n });\n }\n\n return normalizedContext;\n },\n `Finalizes ${tableName} graph-sync insert execution after the authority task finishes.`,\n {\n register: false,\n isHidden: true,\n },\n );\n\n prepareExecutionTask.then(targetTask);\n targetTask.then(finalizeExecutionTask);\n\n return {\n entryTask: prepareExecutionTask,\n completionTask: finalizeExecutionTask,\n };\n}\n\nconst CADENZA_DB_REQUIRED_LOCAL_SYNC_INSERT_TABLES = [\n \"intent_registry\",\n \"routine\",\n \"task_to_routine_map\",\n \"signal_registry\",\n \"task\",\n \"actor\",\n \"actor_task_map\",\n \"signal_to_task_map\",\n \"intent_to_task_map\",\n \"directional_task_graph_map\",\n] as const;\n\nconst BOOTSTRAP_SYNC_STALE_CYCLE_MS = 15000;\nconst EARLY_SYNC_TICK_DELAYS_MS = [\n 400,\n BOOTSTRAP_SYNC_STALE_CYCLE_MS + 1000,\n BOOTSTRAP_SYNC_STALE_CYCLE_MS * 2 + 2000,\n BOOTSTRAP_SYNC_STALE_CYCLE_MS * 3 + 3000,\n] as const;\n\nfunction getRegistrableTasks(): Task[] {\n return Array.from(Cadenza.registry.tasks.values()).filter(\n (task) => task.register && !task.isHidden && !task.isDeputy,\n );\n}\n\nfunction getRegistrableRoutines() {\n return Array.from(Cadenza.registry.routines.values());\n}\n\nfunction isAuthoritySyncSignal(signalName: string): boolean {\n return decomposeSignalName(signalName).isGlobal;\n}\n\nfunction getRegistrableSignalObservers(): Array<{\n signalName: string;\n registered?: boolean;\n}> {\n const signalObservers = (Cadenza.signalBroker as any)\n .signalObservers as Map<string, { registered?: boolean }> | undefined;\n if (!signalObservers) {\n return [];\n }\n\n return Array.from(signalObservers.entries())\n .filter(([signalName]) => isAuthoritySyncSignal(signalName))\n .map(([signalName, observer]) => ({\n signalName,\n ...observer,\n }));\n}\n\nfunction getRegistrableIntentNames(): string[] {\n return Array.from(Cadenza.inquiryBroker.intents.values())\n .map((intent) => buildIntentRegistryData(intent))\n .filter(\n (intentDefinition): intentDefinition is Record<string, unknown> =>\n intentDefinition !== null,\n )\n .map((intentDefinition) => String(intentDefinition.name));\n}\n\nfunction buildActorRegistrationKey(\n actor: any,\n serviceName: string,\n): string | null {\n const data = buildActorRegistrationData(actor);\n const name =\n typeof data.name === \"string\" && data.name.trim().length > 0\n ? data.name.trim()\n : \"\";\n\n if (!name) {\n return null;\n }\n\n return `${name}|${data.version}|${serviceName}`;\n}\n\nfunction resolveLocalTaskFromSyncContext(ctx: Record<string, any>): Task | undefined {\n const taskName =\n typeof ctx.__taskName === \"string\" && ctx.__taskName.trim().length > 0\n ? ctx.__taskName\n : typeof ctx.data?.name === \"string\" && ctx.data.name.trim().length > 0\n ? ctx.data.name\n : undefined;\n\n return taskName ? Cadenza.get(taskName) : undefined;\n}\n\nfunction resolveLocalRoutineFromSyncContext(\n ctx: Record<string, any>,\n): ReturnType<typeof Cadenza.getRoutine> | undefined {\n const routineName =\n typeof ctx.__routineName === \"string\" && ctx.__routineName.trim().length > 0\n ? ctx.__routineName\n : typeof ctx.data?.name === \"string\" && ctx.data.name.trim().length > 0\n ? ctx.data.name\n : undefined;\n\n return routineName ? Cadenza.getRoutine(routineName) : undefined;\n}\n\nfunction resolveSignalNameFromSyncContext(ctx: Record<string, any>): string | undefined {\n const candidateSignalNames = [\n ctx.signalName,\n ctx.__signal,\n ctx.data?.name,\n ctx.queryData?.data?.name,\n getJoinedContextValue(ctx, \"data\") &&\n typeof getJoinedContextValue(ctx, \"data\") === \"object\"\n ? (getJoinedContextValue(ctx, \"data\") as Record<string, unknown>).name\n : undefined,\n ];\n\n for (const candidate of candidateSignalNames) {\n if (typeof candidate === \"string\" && candidate.trim().length > 0) {\n return candidate;\n }\n }\n\n return undefined;\n}\n\nexport default class GraphSyncController {\n private static _instance: GraphSyncController;\n public static get instance(): GraphSyncController {\n if (!this._instance) this._instance = new GraphSyncController();\n return this._instance;\n }\n\n splitSignalsTask: Task | undefined;\n splitTasksForRegistration: Task | undefined;\n splitIntentsTask: Task | undefined;\n registerSignalToTaskMapTask: Task | undefined;\n registerIntentToTaskMapTask: Task | undefined;\n registerTaskMapTask: Task | undefined;\n registerDeputyRelationshipTask: Task | undefined;\n splitRoutinesTask: Task | undefined;\n splitTasksInRoutines: Task | undefined;\n splitActorsForRegistration: Task | undefined;\n registerActorTaskMapTask: Task | undefined;\n\n registeredActors: Set<string> = new Set();\n registeredActorTaskMaps: Set<string> = new Set();\n registeredIntentDefinitions: Set<string> = new Set();\n tasksSynced: boolean = false;\n actorsSynced: boolean = false;\n signalsSynced: boolean = false;\n intentsSynced: boolean = false;\n routinesSynced: boolean = false;\n directionalTaskMapsSynced: boolean = false;\n signalTaskMapsSynced: boolean = false;\n intentTaskMapsSynced: boolean = false;\n actorTaskMapsSynced: boolean = false;\n routineTaskMapsSynced: boolean = false;\n\n isCadenzaDBReady: boolean = false;\n initialized: boolean = false;\n initRetryScheduled: boolean = false;\n initRetryTask: Task | undefined;\n lastMissingLocalCadenzaDBInsertTablesKey: string = \"\";\n syncCycleCounter: number = 0;\n primitivePhaseCompletedCycles: Set<string> = new Set();\n mapPhaseCompletedCycles: Set<string> = new Set();\n activeSyncCycleId: string | null = null;\n activeSyncCycleStartedAt: number = 0;\n pendingBootstrapSyncRerun: boolean = false;\n localServiceInserted: boolean = false;\n localServiceInstanceInserted: boolean = false;\n\n private getMissingLocalCadenzaDBInsertTables(): string[] {\n return CADENZA_DB_REQUIRED_LOCAL_SYNC_INSERT_TABLES.filter(\n (tableName) => !Cadenza.getLocalCadenzaDBInsertTask(tableName),\n );\n }\n\n private ensureRetryInitTask(): Task {\n if (this.initRetryTask) {\n return this.initRetryTask;\n }\n\n this.initRetryTask =\n Cadenza.get(\"Retry graph sync init\") ??\n Cadenza.createUniqueMetaTask(\n \"Retry graph sync init\",\n () => {\n this.initRetryScheduled = false;\n this.init();\n return true;\n },\n \"Retries graph sync controller initialization once local authority tasks exist.\",\n ).doOn(\"meta.sync_controller.init_retry\");\n\n return this.initRetryTask;\n }\n\n init() {\n if (this.initialized) {\n return;\n }\n\n const serviceName = resolveSyncServiceName();\n if (serviceName === \"CadenzaDB\") {\n const missingLocalInsertTables = this.getMissingLocalCadenzaDBInsertTables();\n if (missingLocalInsertTables.length > 0) {\n this.ensureRetryInitTask();\n const missingKey = missingLocalInsertTables.join(\",\");\n if (missingKey !== this.lastMissingLocalCadenzaDBInsertTablesKey) {\n this.lastMissingLocalCadenzaDBInsertTablesKey = missingKey;\n Cadenza.log(\n \"Waiting for local CadenzaDB sync insert tasks before initializing graph sync controller.\",\n {\n missingLocalInsertTables,\n },\n \"info\",\n );\n }\n\n if (!this.initRetryScheduled) {\n this.initRetryScheduled = true;\n Cadenza.schedule(\n \"meta.sync_controller.init_retry\",\n {\n __missingLocalInsertTables: missingLocalInsertTables,\n },\n 250,\n );\n }\n return;\n }\n\n this.lastMissingLocalCadenzaDBInsertTablesKey = \"\";\n }\n\n this.initialized = true;\n const insertIntentRegistryTask = resolveSyncInsertTask(\n this.isCadenzaDBReady,\n \"intent_registry\",\n {\n onConflict: {\n target: [\"name\"],\n action: {\n do: \"nothing\",\n },\n },\n },\n { concurrency: 30 },\n );\n const finalizeTaskSync = (emit: any, ctx: Record<string, unknown>) => {\n const pendingTasks = getRegistrableTasks().filter((task) => !task.registered);\n const serviceName =\n typeof ctx.__serviceName === \"string\"\n ? ctx.__serviceName\n : resolveSyncServiceName();\n if (pendingTasks.length > 0) {\n this.tasksSynced = false;\n return false;\n }\n\n const shouldEmit = !this.tasksSynced;\n this.tasksSynced = true;\n if (shouldEmit) {\n emit(\n \"meta.sync_controller.synced_tasks\",\n buildMinimalSyncSignalContext(ctx),\n );\n }\n\n return true;\n };\n const finalizeRoutineSync = (emit: any, ctx: Record<string, unknown>) => {\n const pendingRoutines = getRegistrableRoutines().filter(\n (routine) => !routine.registered,\n );\n const serviceName =\n typeof ctx.__serviceName === \"string\"\n ? ctx.__serviceName\n : resolveSyncServiceName();\n if (pendingRoutines.length > 0) {\n this.routinesSynced = false;\n return false;\n }\n\n const shouldEmit = !this.routinesSynced;\n this.routinesSynced = true;\n if (shouldEmit) {\n emit(\n \"meta.sync_controller.synced_routines\",\n buildMinimalSyncSignalContext(ctx),\n );\n }\n\n return true;\n };\n const finalizeSignalSync = (emit: any, ctx: Record<string, unknown>) => {\n const pendingSignals = getRegistrableSignalObservers().filter(\n (observer) => observer.registered !== true,\n );\n const serviceName =\n typeof ctx.__serviceName === \"string\"\n ? ctx.__serviceName\n : resolveSyncServiceName();\n if (pendingSignals.length > 0) {\n this.signalsSynced = false;\n return false;\n }\n\n const shouldEmit = !this.signalsSynced;\n this.signalsSynced = true;\n if (shouldEmit) {\n emit(\n \"meta.sync_controller.synced_signals\",\n buildMinimalSyncSignalContext(ctx),\n );\n }\n\n return true;\n };\n const finalizeIntentSync = (emit: any, ctx: Record<string, unknown>) => {\n const pendingIntentNames = getRegistrableIntentNames().filter(\n (intentName) => !this.registeredIntentDefinitions.has(intentName),\n );\n const serviceName =\n typeof ctx.__serviceName === \"string\"\n ? ctx.__serviceName\n : resolveSyncServiceName();\n if (pendingIntentNames.length > 0) {\n this.intentsSynced = false;\n return false;\n }\n\n const shouldEmit = !this.intentsSynced;\n this.intentsSynced = true;\n if (shouldEmit) {\n emit(\n \"meta.sync_controller.synced_intents\",\n buildMinimalSyncSignalContext(ctx),\n );\n }\n\n return true;\n };\n const finalizeActorSync = (emit: any, ctx: Record<string, unknown>) => {\n const syncServiceName = resolveSyncServiceName();\n if (!syncServiceName) {\n this.actorsSynced = false;\n return false;\n }\n\n const pendingActorKeys = Cadenza.getAllActors()\n .map((actor) => buildActorRegistrationKey(actor, syncServiceName))\n .filter((registrationKey): registrationKey is string => Boolean(registrationKey))\n .filter((registrationKey) => !this.registeredActors.has(registrationKey));\n\n if (pendingActorKeys.length > 0) {\n this.actorsSynced = false;\n return false;\n }\n\n const shouldEmit = !this.actorsSynced;\n this.actorsSynced = true;\n if (shouldEmit) {\n emit(\n \"meta.sync_controller.synced_actors\",\n buildMinimalSyncSignalContext(ctx),\n );\n }\n\n return true;\n };\n const gatherTaskRegistrationTask = Cadenza.createUniqueMetaTask(\n \"Gather task registration\",\n (ctx, emit) => finalizeTaskSync(emit, ctx),\n \"Completes task registration when all registrable tasks are marked registered.\",\n {\n register: false,\n isHidden: true,\n },\n );\n const gatherRoutineRegistrationTask = Cadenza.createUniqueMetaTask(\n \"Gather routine registration\",\n (ctx, emit) => finalizeRoutineSync(emit, ctx),\n \"Completes routine registration when all registrable routines are marked registered.\",\n {\n register: false,\n isHidden: true,\n },\n );\n const gatherSignalRegistrationTask = Cadenza.createUniqueMetaTask(\n \"Gather signal registration\",\n (ctx, emit) => finalizeSignalSync(emit, ctx),\n \"Completes signal registration when all signal observers are marked registered.\",\n {\n register: false,\n isHidden: true,\n },\n );\n const gatherIntentRegistrationTask = Cadenza.createUniqueMetaTask(\n \"Gather intent registration\",\n (ctx, emit) => finalizeIntentSync(emit, ctx),\n \"Completes intent registration when all registrable intents are marked registered.\",\n {\n register: false,\n isHidden: true,\n },\n );\n const gatherActorRegistrationTask = Cadenza.createUniqueMetaTask(\n \"Gather actor registration\",\n (ctx, emit) => finalizeActorSync(emit, ctx),\n \"Completes actor registration when all registrable actors are marked registered.\",\n {\n register: false,\n isHidden: true,\n },\n );\n\n this.splitRoutinesTask = Cadenza.createMetaTask(\n \"Split routines for registration\",\n function* (this: GraphSyncController, ctx: any) {\n const { routines } = ctx;\n if (!routines) return;\n const serviceName = resolveSyncServiceName();\n if (!serviceName) {\n return;\n }\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 2000,\n });\n\n for (const routine of routines) {\n if (routine.registered) continue;\n this.routinesSynced = false;\n yield {\n __syncing: ctx.__syncing,\n data: {\n name: routine.name,\n version: routine.version,\n description: routine.description,\n serviceName,\n isMeta: routine.isMeta,\n },\n __routineName: routine.name,\n };\n }\n }.bind(this),\n );\n\n const routineRegistrationGraph = resolveSyncInsertTask(\n this.isCadenzaDBReady,\n \"routine\",\n {\n onConflict: {\n target: [\"name\", \"version\", \"service_name\"],\n action: {\n do: \"nothing\",\n },\n },\n },\n { concurrency: 30 },\n );\n const registerRoutineTask = Cadenza.createMetaTask(\"Register routine\", (ctx) => {\n if (!didSyncInsertSucceed(ctx)) {\n return;\n }\n\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 3000,\n });\n const routine = resolveLocalRoutineFromSyncContext(ctx);\n if (!routine) {\n return true;\n }\n routine.registered = true;\n\n return true;\n }).then(gatherRoutineRegistrationTask);\n wireSyncTaskGraph(this.splitRoutinesTask, routineRegistrationGraph, registerRoutineTask);\n\n this.splitTasksInRoutines = Cadenza.createMetaTask(\n \"Split tasks in routines\",\n function* (ctx: any) {\n const { routines } = ctx;\n if (!routines) return;\n const serviceName = resolveSyncServiceName();\n if (!serviceName) {\n return;\n }\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 3000,\n });\n for (const routine of routines) {\n if (!routine.registered) continue;\n\n for (const task of routine.tasks) {\n if (!task) {\n continue;\n }\n\n if (routine.registeredTasks.has(task.name)) continue;\n\n const tasks = task.getIterator();\n\n while (tasks.hasNext()) {\n const nextTask = tasks.next();\n if (!nextTask?.registered) {\n continue;\n }\n\n yield {\n __syncing: ctx.__syncing,\n data: {\n taskName: nextTask.name,\n taskVersion: nextTask.version,\n routineName: routine.name,\n routineVersion: routine.version,\n serviceName,\n },\n __routineName: routine.name,\n __taskName: nextTask.name,\n };\n }\n }\n }\n },\n );\n\n const registerTaskToRoutineMapGraph = resolveSyncInsertTask(\n this.isCadenzaDBReady,\n \"task_to_routine_map\",\n {\n onConflict: {\n target: [\n \"task_name\",\n \"routine_name\",\n \"task_version\",\n \"routine_version\",\n \"service_name\",\n ],\n action: {\n do: \"nothing\",\n },\n },\n },\n { concurrency: 30 },\n );\n const registerTaskToRoutineMapTask = Cadenza.createMetaTask(\n \"Register routine task\",\n (ctx) => {\n if (!didSyncInsertSucceed(ctx)) {\n return;\n }\n\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 2000,\n });\n const routine = resolveLocalRoutineFromSyncContext(ctx);\n if (!routine) {\n return true;\n }\n routine.registeredTasks.add(ctx.__taskName);\n },\n );\n wireSyncTaskGraph(\n this.splitTasksInRoutines,\n registerTaskToRoutineMapGraph,\n registerTaskToRoutineMapTask,\n );\n\n this.splitSignalsTask = Cadenza.createMetaTask(\n \"Split signals for registration\",\n function* (this: GraphSyncController, ctx: any) {\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 3000,\n });\n\n const { signals } = ctx;\n if (!signals) return;\n\n const filteredSignals = signals\n .filter((signal: { signal: string; data: any }) => {\n if (signal.data.registered) {\n return false;\n }\n\n return isAuthoritySyncSignal(signal.signal);\n })\n .map((signal: { signal: string; data: any }) => signal.signal);\n\n for (const signal of filteredSignals) {\n const { isMeta, isGlobal, domain, action } =\n decomposeSignalName(signal);\n this.signalsSynced = false;\n\n yield {\n __syncing: ctx.__syncing,\n data: {\n name: signal,\n isGlobal,\n domain,\n action,\n isMeta,\n },\n __signal: signal,\n };\n }\n }.bind(this),\n );\n\n const signalRegistrationGraph = resolveSyncInsertTask(\n this.isCadenzaDBReady,\n \"signal_registry\",\n {\n onConflict: {\n target: [\"name\"],\n action: {\n do: \"nothing\",\n },\n },\n },\n { concurrency: 30 },\n );\n const processSignalRegistrationTask = Cadenza.createMetaTask(\n \"Process signal registration\",\n (ctx, emit) => {\n const insertSucceeded = didSyncInsertSucceed(ctx);\n const signalName = resolveSignalNameFromSyncContext(ctx);\n\n if (!insertSucceeded) {\n return;\n }\n\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 3000,\n });\n\n if (!signalName) {\n return false;\n }\n\n const signalObservers = (Cadenza.signalBroker as any).signalObservers;\n if (!signalObservers?.has(signalName)) {\n Cadenza.signalBroker.addSignal(signalName);\n }\n\n const observer = signalObservers?.get(signalName);\n if (observer) {\n observer.registered = true;\n }\n\n emit(\n \"meta.sync_controller.signal_registered\",\n buildMinimalSyncSignalContext(ctx, {\n __signal: signalName,\n }),\n );\n\n return { signalName };\n },\n )\n .then(Cadenza.signalBroker.registerSignalTask!)\n .then(gatherSignalRegistrationTask);\n wireSyncTaskGraph(\n this.splitSignalsTask,\n signalRegistrationGraph,\n processSignalRegistrationTask,\n );\n\n this.splitTasksForRegistration = Cadenza.createMetaTask(\n \"Split tasks for registration\",\n function* (this: GraphSyncController, ctx: any) {\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 3000,\n });\n\n const tasks = ctx.tasks;\n const serviceName = resolveSyncServiceName();\n if (!serviceName) {\n return;\n }\n\n for (const task of tasks) {\n if (task.hidden || !task.register || task.isDeputy) continue;\n if (task.registered) continue;\n const { __functionString, __getTagCallback } = task.export();\n this.tasksSynced = false;\n\n yield {\n __syncing: ctx.__syncing,\n data: {\n name: task.name,\n version: task.version,\n description: task.description,\n functionString: __functionString,\n tagIdGetter: __getTagCallback,\n layerIndex: task.layerIndex,\n concurrency: task.concurrency,\n timeout: task.timeout,\n isUnique: task.isUnique,\n isSignal: task.isSignal,\n isThrottled: task.isThrottled,\n isDebounce: task.isDebounce,\n isEphemeral: task.isEphemeral,\n isMeta: task.isMeta,\n isSubMeta: task.isSubMeta,\n isHidden: task.isHidden,\n validateInputContext: task.validateInputContext,\n validateOutputContext: task.validateOutputContext,\n retryCount: task.retryCount,\n retryDelay: task.retryDelay,\n retryDelayMax: task.retryDelayMax,\n retryDelayFactor: task.retryDelayFactor,\n service_name: serviceName,\n signals: {\n emits: Array.from(task.emitsSignals),\n signalsToEmitAfter: Array.from(task.signalsToEmitAfter),\n signalsToEmitOnFail: Array.from(task.signalsToEmitOnFail),\n observed: Array.from(task.observedSignals),\n },\n intents: Array.from(task.handlesIntents),\n },\n __taskName: task.name,\n };\n }\n }.bind(this),\n );\n\n const registerTaskGraph = resolveSyncInsertTask(\n this.isCadenzaDBReady,\n \"task\",\n {\n onConflict: {\n target: [\"name\", \"service_name\", \"version\"],\n action: {\n do: \"nothing\",\n },\n },\n },\n { concurrency: 30 },\n );\n const registerTaskTask = Cadenza.createMetaTask(\n \"Record registration\",\n (ctx, emit) => {\n const task = resolveLocalTaskFromSyncContext(ctx);\n const serviceName = resolveSyncServiceName(task);\n const insertSucceeded = didSyncInsertSucceed(ctx);\n\n if (!insertSucceeded) {\n return;\n }\n\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 3000,\n });\n\n if (!task) {\n return true;\n }\n\n task.registered = true;\n emit(\n \"meta.sync_controller.task_registered\",\n buildMinimalSyncSignalContext(ctx, {\n __taskName: ctx.__taskName,\n }),\n );\n\n return true;\n },\n ).then(gatherTaskRegistrationTask);\n wireSyncTaskGraph(this.splitTasksForRegistration, registerTaskGraph, registerTaskTask);\n\n this.splitActorsForRegistration = Cadenza.createMetaTask(\n \"Split actors for registration\",\n function* (this: GraphSyncController, ctx: any) {\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 3000,\n });\n\n const serviceName = resolveSyncServiceName();\n if (!serviceName) {\n return;\n }\n\n const actors = ctx.actors ?? [];\n for (const actor of actors) {\n const data: Record<string, any> = {\n ...buildActorRegistrationData(actor),\n service_name: serviceName,\n };\n if (!data.name) {\n continue;\n }\n\n const registrationKey = `${data.name}|${data.version}|${data.service_name}`;\n if (this.registeredActors.has(registrationKey)) {\n continue;\n }\n this.actorsSynced = false;\n\n yield {\n data,\n __actorRegistrationKey: registrationKey,\n };\n }\n }.bind(this),\n );\n const actorRegistrationGraph = resolveSyncInsertTask(\n this.isCadenzaDBReady,\n \"actor\",\n {\n onConflict: {\n target: [\"name\", \"service_name\", \"version\"],\n action: {\n do: \"nothing\",\n },\n },\n },\n { concurrency: 30 },\n );\n const recordActorRegistrationTask = Cadenza.createMetaTask(\n \"Record actor registration\",\n (ctx) => {\n if (!didSyncInsertSucceed(ctx)) {\n return;\n }\n\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 3000,\n });\n this.registeredActors.add(ctx.__actorRegistrationKey);\n return true;\n },\n ).then(gatherActorRegistrationTask);\n wireSyncTaskGraph(\n this.splitActorsForRegistration,\n actorRegistrationGraph,\n recordActorRegistrationTask,\n );\n\n this.registerActorTaskMapTask = Cadenza.createMetaTask(\n \"Split actor task maps\",\n function* (this: GraphSyncController, ctx: any) {\n const task = ctx.task;\n if (!this.tasksSynced || !this.actorsSynced) {\n return;\n }\n\n if (task.hidden || !task.register || !task.registered) {\n return;\n }\n\n const metadata = getActorTaskRuntimeMetadata(task.taskFunction);\n if (!metadata?.actorName) {\n return;\n }\n\n const serviceName = resolveSyncServiceName(task);\n if (!serviceName) {\n return;\n }\n\n const registrationKey = `${metadata.actorName}|${task.name}|${task.version}|${serviceName}`;\n if (this.registeredActorTaskMaps.has(registrationKey)) {\n return;\n }\n\n yield {\n data: {\n actor_name: metadata.actorName,\n actor_version: 1,\n task_name: task.name,\n task_version: task.version,\n service_name: serviceName,\n mode: metadata.mode,\n description: task.description ?? metadata.actorDescription ?? \"\",\n is_meta: metadata.actorKind === \"meta\" || task.isMeta === true,\n },\n __actorTaskMapRegistrationKey: registrationKey,\n };\n }.bind(this),\n );\n const actorTaskMapRegistrationGraph = resolveSyncInsertTask(\n this.isCadenzaDBReady,\n \"actor_task_map\",\n {\n onConflict: {\n target: [\n \"actor_name\",\n \"actor_version\",\n \"task_name\",\n \"task_version\",\n \"service_name\",\n ],\n action: {\n do: \"nothing\",\n },\n },\n },\n { concurrency: 30 },\n );\n const recordActorTaskMapRegistrationTask = Cadenza.createMetaTask(\n \"Record actor task map registration\",\n (ctx) => {\n if (!didSyncInsertSucceed(ctx)) {\n return;\n }\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 3000,\n });\n this.registeredActorTaskMaps.add(ctx.__actorTaskMapRegistrationKey);\n },\n );\n wireSyncTaskGraph(\n this.registerActorTaskMapTask,\n actorTaskMapRegistrationGraph,\n recordActorTaskMapRegistrationTask,\n );\n\n const registerSignalTask = Cadenza.createMetaTask(\n \"Record signal registration\",\n (ctx) => {\n const task = resolveLocalTaskFromSyncContext(ctx);\n const serviceName = resolveSyncServiceName(task);\n if (!didSyncInsertSucceed(ctx)) {\n return;\n }\n\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 3000,\n });\n\n const signalName = resolveSignalNameFromSyncContext(ctx);\n if (!task || !signalName) {\n return true;\n }\n\n task.registeredSignals.add(signalName);\n },\n );\n\n this.registerSignalToTaskMapTask = Cadenza.createMetaTask(\n \"Split observed signals of task\",\n function* (ctx) {\n const task = ctx.task;\n if (task.hidden || !task.register || task.isDeputy || !task.registered)\n return false;\n\n const serviceName = resolveSyncServiceName(task);\n if (!serviceName) {\n return false;\n }\n\n let emittedCount = 0;\n for (const signal of task.observedSignals) {\n const _signal = signal.split(\":\")[0];\n if (task.registeredSignals.has(signal)) continue;\n if (\n !(Cadenza.signalBroker as any).signalObservers?.get(_signal)\n ?.registered\n ) {\n continue;\n }\n\n const { isGlobal } = decomposeSignalName(_signal);\n if (!isGlobal) {\n continue;\n }\n\n yield {\n __syncing: ctx.__syncing,\n data: {\n signalName: _signal,\n isGlobal,\n taskName: task.name,\n taskVersion: task.version,\n serviceName,\n },\n __taskName: task.name,\n __signal: signal,\n };\n emittedCount += 1;\n }\n return emittedCount > 0;\n },\n );\n const signalToTaskMapGraph = resolveSyncInsertTask(\n this.isCadenzaDBReady,\n \"signal_to_task_map\",\n {\n onConflict: {\n target: [\n \"task_name\",\n \"task_version\",\n \"service_name\",\n \"signal_name\",\n ],\n action: {\n do: \"nothing\",\n },\n },\n },\n { concurrency: 30 },\n );\n wireSyncTaskGraph(\n this.registerSignalToTaskMapTask,\n signalToTaskMapGraph,\n registerSignalTask,\n );\n\n this.splitIntentsTask = Cadenza.createMetaTask(\n \"Split intents for registration\",\n function* (this: GraphSyncController, ctx: any) {\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 3000,\n });\n\n const intents = Array.isArray(ctx.intents)\n ? ctx.intents\n : Array.from(Cadenza.inquiryBroker.intents.values());\n\n for (const intent of intents) {\n const intentData = buildIntentRegistryData(intent);\n if (!intentData) {\n continue;\n }\n\n if (this.registeredIntentDefinitions.has(intentData.name as string)) {\n continue;\n }\n\n this.intentsSynced = false;\n yield {\n __syncing: ctx.__syncing,\n data: intentData,\n __intentName: intentData.name,\n };\n }\n }.bind(this),\n );\n\n const recordIntentDefinitionRegistrationTask = Cadenza.createMetaTask(\n \"Record intent definition registration\",\n (ctx, emit) => {\n if (!didSyncInsertSucceed(ctx)) {\n return;\n }\n\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 3000,\n });\n\n this.registeredIntentDefinitions.add(ctx.__intentName);\n\n emit(\n \"meta.sync_controller.intent_registered\",\n buildMinimalSyncSignalContext(ctx, {\n __intentName: ctx.__intentName,\n }),\n );\n\n return true;\n },\n ).then(gatherIntentRegistrationTask);\n wireSyncTaskGraph(\n this.splitIntentsTask,\n insertIntentRegistryTask,\n recordIntentDefinitionRegistrationTask,\n );\n\n const registerIntentTask = Cadenza.createMetaTask(\n \"Record intent registration\",\n (ctx) => {\n const task = resolveLocalTaskFromSyncContext(ctx) as any;\n if (!didSyncInsertSucceed(ctx)) {\n return;\n }\n\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 3000,\n });\n\n if (!task) {\n return true;\n }\n task.__registeredIntents = task.__registeredIntents ?? new Set<string>();\n task.__registeredIntents.add(ctx.__intent);\n },\n );\n\n this.registerIntentToTaskMapTask = Cadenza.createMetaTask(\n \"Split intents of task\",\n function* (this: GraphSyncController, ctx: any) {\n const task = ctx.task as any;\n if (task.hidden || !task.register || task.isDeputy || !task.registered)\n return false;\n\n const serviceName = resolveSyncServiceName(task);\n if (!serviceName) {\n return false;\n }\n\n task.__registeredIntents = task.__registeredIntents ?? new Set<string>();\n task.__invalidMetaIntentWarnings =\n task.__invalidMetaIntentWarnings ?? new Set<string>();\n let emittedCount = 0;\n for (const intent of task.handlesIntents as Set<string>) {\n if (task.__registeredIntents.has(intent)) continue;\n\n if (isLocalOnlySyncIntent(intent)) {\n continue;\n }\n\n if (isMetaIntentName(intent) && !task.isMeta) {\n if (!task.__invalidMetaIntentWarnings.has(intent)) {\n task.__invalidMetaIntentWarnings.add(intent);\n Cadenza.log(\n \"Skipping intent-to-task registration: non-meta task cannot handle meta intent.\",\n {\n intent,\n taskName: task.name,\n taskVersion: task.version,\n },\n \"warning\",\n );\n }\n continue;\n }\n\n const intentDefinition =\n buildIntentRegistryData(Cadenza.inquiryBroker.intents.get(intent)) ??\n buildIntentRegistryData({ name: intent });\n if (!intentDefinition) {\n continue;\n }\n\n yield {\n __syncing: ctx.__syncing,\n data: {\n intentName: intent,\n taskName: task.name,\n taskVersion: task.version,\n serviceName,\n },\n __taskName: task.name,\n __intent: intent,\n __intentDefinition: intentDefinition,\n __intentMapData: {\n intentName: intent,\n taskName: task.name,\n taskVersion: task.version,\n serviceName,\n },\n };\n emittedCount += 1;\n }\n\n return emittedCount > 0;\n }.bind(this),\n );\n const intentToTaskMapGraph = resolveSyncInsertTask(\n this.isCadenzaDBReady,\n \"intent_to_task_map\",\n {\n onConflict: {\n target: [\n \"intent_name\",\n \"task_name\",\n \"task_version\",\n \"service_name\",\n ],\n action: {\n do: \"nothing\",\n },\n },\n },\n { concurrency: 30 },\n );\n wireSyncTaskGraph(\n this.registerIntentToTaskMapTask,\n intentToTaskMapGraph,\n registerIntentTask,\n );\n\n this.registerTaskMapTask = Cadenza.createMetaTask(\n \"Register task map to DB\",\n function* (ctx) {\n const task = ctx.task;\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 3000,\n });\n if (task.hidden || !task.register || task.isDeputy) return;\n\n const predecessorServiceName = resolveSyncServiceName(task);\n if (!predecessorServiceName) {\n return;\n }\n for (const t of task.nextTasks) {\n if (\n task.taskMapRegistration.has(t.name) ||\n t.hidden ||\n !t.register ||\n !t.registered\n ) {\n continue;\n }\n\n const serviceName = resolveSyncServiceName(t as any);\n if (!serviceName) {\n continue;\n }\n\n yield {\n data: {\n taskName: t.name,\n taskVersion: t.version,\n predecessorTaskName: task.name,\n predecessorTaskVersion: task.version,\n serviceName,\n predecessorServiceName,\n },\n __taskName: task.name,\n __nextTaskName: t.name,\n };\n }\n },\n );\n const taskMapRegistrationGraph = resolveSyncInsertTask(\n this.isCadenzaDBReady,\n \"directional_task_graph_map\",\n {\n onConflict: {\n target: [\n \"task_name\",\n \"predecessor_task_name\",\n \"task_version\",\n \"predecessor_task_version\",\n \"service_name\",\n \"predecessor_service_name\",\n ],\n action: {\n do: \"nothing\",\n },\n },\n },\n { concurrency: 30 },\n );\n const recordTaskMapRegistrationTask = Cadenza.createMetaTask(\n \"Record task map registration\",\n (ctx) => {\n if (!didSyncInsertSucceed(ctx)) {\n return;\n }\n\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 3000,\n });\n\n Cadenza.get(ctx.__taskName)?.taskMapRegistration.add(\n ctx.__nextTaskName,\n );\n },\n );\n wireSyncTaskGraph(\n this.registerTaskMapTask,\n taskMapRegistrationGraph,\n recordTaskMapRegistrationTask,\n );\n\n this.registerDeputyRelationshipTask = Cadenza.createMetaTask(\n \"Register deputy relationship\",\n (ctx) => {\n const task = ctx.task;\n if (task.hidden || !task.register) return;\n\n if (task.isDeputy && !task.signalName) {\n if (task.registeredDeputyMap) return;\n\n const serviceName = resolveSyncServiceName(task);\n const predecessorServiceName = resolveSyncServiceName();\n if (!serviceName || !predecessorServiceName) {\n return;\n }\n\n return {\n data: {\n task_name: task.remoteRoutineName,\n task_version: 1,\n service_name: serviceName,\n predecessor_task_name: task.name,\n predecessor_task_version: task.version,\n predecessor_service_name: predecessorServiceName,\n },\n __taskName: task.name,\n };\n }\n },\n );\n const deputyRelationshipRegistrationGraph = resolveSyncInsertTask(\n this.isCadenzaDBReady,\n \"directional_task_graph_map\",\n {\n onConflict: {\n target: [\n \"task_name\",\n \"predecessor_task_name\",\n \"task_version\",\n \"predecessor_task_version\",\n \"service_name\",\n \"predecessor_service_name\",\n ],\n action: {\n do: \"nothing\",\n },\n },\n },\n { concurrency: 30 },\n );\n const recordDeputyRelationshipRegistrationTask = Cadenza.createMetaTask(\n \"Record deputy relationship registration\",\n (ctx) => {\n if (!didSyncInsertSucceed(ctx)) {\n return;\n }\n\n Cadenza.debounce(\"meta.sync_controller.synced_resource\", {\n delayMs: 3000,\n });\n\n const task = resolveLocalTaskFromSyncContext(ctx) as DeputyTask | undefined;\n if (!task) {\n return true;\n }\n task.registeredDeputyMap = true;\n },\n );\n wireSyncTaskGraph(\n this.registerDeputyRelationshipTask,\n deputyRelationshipRegistrationGraph,\n recordDeputyRelationshipRegistrationTask,\n );\n\n const hasPendingDirectionalTaskMaps = () =>\n getRegistrableTasks().some((task) => {\n const taskWithDeputyState = task as Task & {\n signalName?: string;\n registeredDeputyMap?: boolean;\n };\n if (task.isHidden || !task.register || !task.registered) {\n return false;\n }\n\n const predecessorServiceName = resolveSyncServiceName(task);\n if (!predecessorServiceName) {\n return false;\n }\n\n for (const nextTask of task.nextTasks) {\n if (\n task.taskMapRegistration.has(nextTask.name) ||\n nextTask.isHidden ||\n !nextTask.register ||\n !nextTask.registered\n ) {\n continue;\n }\n\n if (resolveSyncServiceName(nextTask)) {\n return true;\n }\n }\n\n if (\n task.isDeputy &&\n !taskWithDeputyState.signalName &&\n !taskWithDeputyState.registeredDeputyMap\n ) {\n return Boolean(resolveSyncServiceName(task) && resolveSyncServiceName());\n }\n\n return false;\n });\n\n const hasPendingSignalTaskMaps = () =>\n getRegistrableTasks().some((task) => {\n if (task.isHidden || !task.register || !task.registered) {\n return false;\n }\n\n for (const signal of task.observedSignals) {\n if (task.registeredSignals.has(signal)) {\n continue;\n }\n\n const signalName = signal.split(\":\")[0];\n if (!decomposeSignalName(signalName).isGlobal) {\n continue;\n }\n\n if (\n !(Cadenza.signalBroker as any).signalObservers?.get(signalName)\n ?.registered\n ) {\n continue;\n }\n\n return true;\n }\n\n return false;\n });\n\n const hasPendingIntentTaskMaps = () =>\n getRegistrableTasks().some((task) => {\n if (task.isHidden || !task.register || !task.registered) {\n return false;\n }\n\n const registeredIntents =\n ((task as any).__registeredIntents as Set<string> | undefined) ??\n new Set<string>();\n\n for (const intent of task.handlesIntents) {\n if (registeredIntents.has(intent) || isLocalOnlySyncIntent(intent)) {\n continue;\n }\n\n if (isMetaIntentName(intent) && !task.isMeta) {\n continue;\n }\n\n const intentDefinition =\n buildIntentRegistryData(Cadenza.inquiryBroker.intents.get(intent)) ??\n buildIntentRegistryData({ name: intent });\n\n if (!intentDefinition) {\n continue;\n }\n\n return true;\n }\n\n return false;\n });\n\n const hasPendingActorTaskMaps = () =>\n getRegistrableTasks().some((task) => {\n if (task.isHidden || !task.register || !task.registered) {\n return false;\n }\n\n const metadata = getActorTaskRuntimeMetadata(task.taskFunction);\n if (!metadata?.actorName) {\n return false;\n }\n\n const serviceName = resolveSyncServiceName(task);\n if (!serviceName) {\n return false;\n }\n\n const registrationKey = `${metadata.actorName}|${task.name}|${task.version}|${serviceName}`;\n return !this.registeredActorTaskMaps.has(registrationKey);\n });\n\n const hasPendingRoutineTaskMaps = () =>\n getRegistrableRoutines().some((routine: any) => {\n if (!routine.registered) {\n return false;\n }\n\n for (const task of routine.tasks) {\n if (!task) {\n continue;\n }\n\n const tasks = task.getIterator();\n while (tasks.hasNext()) {\n const nextTask = tasks.next();\n if (!nextTask?.registered) {\n continue;\n }\n\n if (!routine.registeredTasks.has(nextTask.name)) {\n return true;\n }\n }\n }\n\n return false;\n });\n\n const gatherDirectionalTaskMapRegistrationTask = Cadenza.createUniqueMetaTask(\n \"Gather directional task map registration\",\n (ctx) => {\n if (hasPendingDirectionalTaskMaps()) {\n this.directionalTaskMapsSynced = false;\n return false;\n }\n\n this.directionalTaskMapsSynced = true;\n return ctx;\n },\n \"Completes directional task graph registration when task edges and deputy edges are registered.\",\n {\n register: false,\n isHidden: true,\n },\n );\n const gatherSignalTaskMapRegistrationTask = Cadenza.createUniqueMetaTask(\n \"Gather signal task map registration\",\n (ctx) => {\n if (hasPendingSignalTaskMaps()) {\n this.signalTaskMapsSynced = false;\n return false;\n }\n\n this.signalTaskMapsSynced = true;\n return ctx;\n },\n \"Completes signal-to-task map registration when all global observed signal edges are registered.\",\n {\n register: false,\n isHidden: true,\n },\n );\n const gatherIntentTaskMapRegistrationTask = Cadenza.createUniqueMetaTask(\n \"Gather intent task map registration\",\n (ctx) => {\n if (hasPendingIntentTaskMaps()) {\n this.intentTaskMapsSynced = false;\n return false;\n }\n\n this.intentTaskMapsSynced = true;\n return ctx;\n },\n \"Completes intent-to-task map registration when all task responders are registered.\",\n {\n register: false,\n isHidden: true,\n },\n );\n const gatherActorTaskMapRegistrationTask = Cadenza.createUniqueMetaTask(\n \"Gather actor task map registration\",\n (ctx) => {\n if (hasPendingActorTaskMaps()) {\n this.actorTaskMapsSynced = false;\n return false;\n }\n\n this.actorTaskMapsSynced = true;\n return ctx;\n },\n \"Completes actor-to-task map registration when all actor-backed tasks are registered.\",\n {\n register: false,\n isHidden: true,\n },\n );\n const gatherRoutineTaskMapRegistrationTask = Cadenza.createUniqueMetaTask(\n \"Gather routine task map registration\",\n (ctx) => {\n if (hasPendingRoutineTaskMaps()) {\n this.routineTaskMapsSynced = false;\n return false;\n }\n\n this.routineTaskMapsSynced = true;\n return ctx;\n },\n \"Completes task-to-routine map registration when all routine task memberships are registered.\",\n {\n register: false,\n isHidden: true,\n },\n );\n\n const finishSyncTask = Cadenza.createUniqueMetaTask(\n \"Finish sync\",\n (ctx, emit) => {\n const syncCycleId =\n typeof ctx.__syncCycleId === \"string\" ? ctx.__syncCycleId.trim() : \"\";\n if (syncCycleId && this.activeSyncCycleId === syncCycleId) {\n this.activeSyncCycleId = null;\n this.activeSyncCycleStartedAt = 0;\n }\n\n if (this.pendingBootstrapSyncRerun) {\n this.pendingBootstrapSyncRerun = false;\n Cadenza.debounce(\"meta.sync_requested\", {\n delayMs: 100,\n });\n }\n\n emit(\"global.meta.sync_controller.synced\", {\n data: {\n is_active: true,\n is_non_responsive: false,\n is_blocked: false,\n last_active: formatTimestamp(Date.now()),\n },\n filter: {\n uuid: Cadenza.serviceRegistry.serviceInstanceId,\n },\n });\n\n return true;\n },\n \"Marks the current bootstrap sync cycle as complete.\",\n {\n register: false,\n isHidden: true,\n },\n ).attachSignal(\"global.meta.sync_controller.synced\");\n\n const mapPhaseBarrierTask = Cadenza.createUniqueMetaTask(\n \"Complete map sync phase\",\n (ctx) => {\n const syncCycleId =\n typeof ctx.__syncCycleId === \"string\" ? ctx.__syncCycleId.trim() : \"\";\n if (!syncCycleId) {\n return false;\n }\n\n if (\n !this.directionalTaskMapsSynced ||\n !this.signalTaskMapsSynced ||\n !this.intentTaskMapsSynced ||\n !this.actorTaskMapsSynced ||\n !this.routineTaskMapsSynced\n ) {\n return false;\n }\n\n if (!markCompletedSyncCycle(this.mapPhaseCompletedCycles, syncCycleId)) {\n return false;\n }\n\n return ctx;\n },\n \"Fans in map branch completion and ends the current sync cycle once every map branch is complete.\",\n {\n register: false,\n isHidden: true,\n },\n ).then(finishSyncTask);\n\n const startDirectionalTaskMapSyncTask = Cadenza.createMetaTask(\n \"Start directional task map sync\",\n (ctx) => ctx,\n \"Starts the directional task graph map branch for the current sync cycle.\",\n {\n register: false,\n isHidden: true,\n },\n );\n const startSignalTaskMapSyncTask = Cadenza.createMetaTask(\n \"Start signal task map sync\",\n (ctx) => ctx,\n \"Starts the signal-to-task map branch for the current sync cycle.\",\n {\n register: false,\n isHidden: true,\n },\n );\n const startIntentTaskMapSyncTask = Cadenza.createMetaTask(\n \"Start intent task map sync\",\n (ctx) => ctx,\n \"Starts the intent-to-task map branch for the current sync cycle.\",\n {\n register: false,\n isHidden: true,\n },\n );\n const startActorTaskMapSyncTask = Cadenza.createMetaTask(\n \"Start actor task map sync\",\n (ctx) => ctx,\n \"Starts the actor-to-task map branch for the current sync cycle.\",\n {\n register: false,\n isHidden: true,\n },\n );\n const startRoutineTaskMapSyncTask = Cadenza.createMetaTask(\n \"Start routine task map sync\",\n (ctx) => ctx,\n \"Starts the task-to-routine map branch for the current sync cycle.\",\n {\n register: false,\n isHidden: true,\n },\n );\n\n const primitivePhaseBarrierTask = Cadenza.createUniqueMetaTask(\n \"Complete primitive sync phase\",\n (ctx) => {\n const syncCycleId =\n typeof ctx.__syncCycleId === \"string\" ? ctx.__syncCycleId.trim() : \"\";\n if (!syncCycleId) {\n return false;\n }\n\n const serviceName =\n typeof ctx.__serviceName === \"string\"\n ? ctx.__serviceName\n : resolveSyncServiceName();\n if (\n !this.tasksSynced ||\n !this.signalsSynced ||\n !this.intentsSynced ||\n !this.actorsSynced ||\n !this.routinesSynced\n ) {\n return false;\n }\n\n if (\n !markCompletedSyncCycle(this.primitivePhaseCompletedCycles, syncCycleId)\n ) {\n return false;\n }\n\n this.directionalTaskMapsSynced = false;\n this.signalTaskMapsSynced = false;\n this.intentTaskMapsSynced = false;\n this.actorTaskMapsSynced = false;\n this.routineTaskMapsSynced = false;\n\n return ctx;\n },\n \"Fans in primitive registration and opens the map registration phase once every primitive branch is complete.\",\n {\n register: false,\n isHidden: true,\n },\n ).then(\n startDirectionalTaskMapSyncTask,\n startSignalTaskMapSyncTask,\n startIntentTaskMapSyncTask,\n startActorTaskMapSyncTask,\n startRoutineTaskMapSyncTask,\n );\n\n gatherTaskRegistrationTask.then(primitivePhaseBarrierTask);\n gatherSignalRegistrationTask.then(primitivePhaseBarrierTask);\n gatherIntentRegistrationTask.then(primitivePhaseBarrierTask);\n gatherActorRegistrationTask.then(primitivePhaseBarrierTask);\n gatherRoutineRegistrationTask.then(primitivePhaseBarrierTask);\n\n const markLocalServiceInsertedForBootstrapSyncTask =\n Cadenza.createUniqueMetaTask(\n \"Mark local service inserted for bootstrap sync\",\n (ctx) => {\n const serviceName = resolveSyncServiceName();\n const insertedServiceName =\n typeof ctx.__serviceName === \"string\"\n ? ctx.__serviceName\n : typeof ctx.service_name === \"string\"\n ? ctx.service_name\n : null;\n\n if (!serviceName || insertedServiceName !== serviceName) {\n return false;\n }\n\n this.localServiceInserted = true;\n return true;\n },\n \"Marks that the local service row has been inserted in authority so bootstrap sync can start only after that prerequisite.\",\n {\n register: false,\n isHidden: true,\n },\n ).doOn(\"meta.service_registry.service_inserted\");\n\n const markLocalServiceInstanceInsertedForBootstrapSyncTask =\n Cadenza.createUniqueMetaTask(\n \"Mark local service instance inserted for bootstrap sync\",\n (ctx) => {\n const serviceName = resolveSyncServiceName();\n const insertedServiceName =\n typeof ctx.__serviceName === \"string\"\n ? ctx.__serviceName\n : typeof ctx.service_name === \"string\"\n ? ctx.service_name\n : null;\n\n if (!serviceName || insertedServiceName !== serviceName) {\n return false;\n }\n\n this.localServiceInstanceInserted = true;\n return true;\n },\n \"Marks that the local service instance row has been inserted in authority so bootstrap sync can start only after that prerequisite.\",\n {\n register: false,\n isHidden: true,\n },\n ).doOn(\"meta.service_registry.instance_inserted\");\n\n const startBootstrapSyncTask = Cadenza.createUniqueMetaTask(\n \"Start bootstrap graph sync\",\n (ctx) => {\n const now = Date.now();\n const serviceName = resolveSyncServiceName();\n const serviceInstanceId = Cadenza.serviceRegistry.serviceInstanceId;\n if (!serviceName || !serviceInstanceId) {\n return false;\n }\n\n if (!this.localServiceInserted) {\n return false;\n }\n\n if (!this.localServiceInstanceInserted) {\n return false;\n }\n\n if (!ServiceRegistry.instance.hasLocalInstanceRegistered()) {\n return false;\n }\n\n if (this.activeSyncCycleId) {\n const activeCycleAgeMs = now - this.activeSyncCycleStartedAt;\n if (activeCycleAgeMs < BOOTSTRAP_SYNC_STALE_CYCLE_MS) {\n this.pendingBootstrapSyncRerun = true;\n return false;\n }\n\n }\n\n const syncCycleId = `${now}-${++this.syncCycleCounter}`;\n this.activeSyncCycleId = syncCycleId;\n this.activeSyncCycleStartedAt = now;\n this.pendingBootstrapSyncRerun = false;\n this.tasksSynced = false;\n this.signalsSynced = false;\n this.intentsSynced = false;\n this.actorsSynced = false;\n this.routinesSynced = false;\n return {\n ...ctx,\n __syncing: true,\n __syncCycleId: syncCycleId,\n __serviceName: serviceName,\n __serviceInstanceId: serviceInstanceId,\n };\n },\n \"Starts a deterministic bootstrap sync cycle once the local service instance exists.\",\n {\n register: false,\n isHidden: true,\n },\n ).doOn(\n \"meta.service_registry.service_inserted\",\n \"meta.service_registry.instance_inserted\",\n \"meta.sync_controller.sync_tick\",\n \"meta.sync_requested\",\n );\n\n const startTaskPrimitiveSyncTask = Cadenza.createMetaTask(\n \"Start task primitive sync\",\n (ctx) => ctx,\n \"Starts the task registration branch for the current sync cycle.\",\n {\n register: false,\n isHidden: true,\n },\n );\n const startSignalPrimitiveSyncTask = Cadenza.createMetaTask(\n \"Start signal primitive sync\",\n (ctx) => ctx,\n \"Starts the signal registration branch for the current sync cycle.\",\n {\n register: false,\n isHidden: true,\n },\n );\n const startIntentPrimitiveSyncTask = Cadenza.createMetaTask(\n \"Start intent primitive sync\",\n (ctx) => ctx,\n \"Starts the intent registration branch for the current sync cycle.\",\n {\n register: false,\n isHidden: true,\n },\n );\n const startActorPrimitiveSyncTask = Cadenza.createMetaTask(\n \"Start actor primitive sync\",\n (ctx) => ctx,\n \"Starts the actor registration branch for the current sync cycle.\",\n {\n register: false,\n isHidden: true,\n },\n );\n const startRoutinePrimitiveSyncTask = Cadenza.createMetaTask(\n \"Start routine primitive sync\",\n (ctx) => ctx,\n \"Starts the routine registration branch for the current sync cycle.\",\n {\n register: false,\n isHidden: true,\n },\n );\n\n startBootstrapSyncTask.then(\n startTaskPrimitiveSyncTask,\n startSignalPrimitiveSyncTask,\n startIntentPrimitiveSyncTask,\n startActorPrimitiveSyncTask,\n startRoutinePrimitiveSyncTask,\n );\n\n const getAllTasksForSyncTask = Cadenza.registry.getAllTasks!.clone();\n startTaskPrimitiveSyncTask.then(\n getAllTasksForSyncTask,\n gatherTaskRegistrationTask,\n );\n getAllTasksForSyncTask.then(this.splitTasksForRegistration);\n\n const getSignalsForSyncTask = Cadenza.signalBroker.getSignalsTask!.clone();\n startSignalPrimitiveSyncTask.then(\n getSignalsForSyncTask,\n gatherSignalRegistrationTask,\n );\n getSignalsForSyncTask.then(this.splitSignalsTask);\n\n const getAllIntentsForSyncTask = Cadenza.createUniqueMetaTask(\n \"Get all intents for sync\",\n (ctx) => ({\n ...ctx,\n intents: Array.from(Cadenza.inquiryBroker.intents.values()),\n }),\n \"Collects local intents for the primitive sync phase.\",\n {\n register: false,\n isHidden: true,\n },\n );\n startIntentPrimitiveSyncTask.then(\n getAllIntentsForSyncTask,\n gatherIntentRegistrationTask,\n );\n getAllIntentsForSyncTask.then(this.splitIntentsTask);\n\n const getAllActorsForSyncTask = Cadenza.createUniqueMetaTask(\n \"Get all actors for sync\",\n (ctx) => ({\n ...ctx,\n actors: Cadenza.getAllActors(),\n }),\n \"Collects local actors for the primitive sync phase.\",\n {\n register: false,\n isHidden: true,\n },\n );\n startActorPrimitiveSyncTask.then(\n getAllActorsForSyncTask,\n gatherActorRegistrationTask,\n );\n getAllActorsForSyncTask.then(this.splitActorsForRegistration);\n\n const getAllRoutinesForSyncTask = Cadenza.registry.getAllRoutines!.clone();\n startRoutinePrimitiveSyncTask.then(\n getAllRoutinesForSyncTask,\n gatherRoutineRegistrationTask,\n );\n getAllRoutinesForSyncTask.then(this.splitRoutinesTask);\n\n const iterateTasksForDirectionalTaskMapSyncTask =\n Cadenza.registry.doForEachTask!.clone();\n startDirectionalTaskMapSyncTask.then(\n iterateTasksForDirectionalTaskMapSyncTask,\n gatherDirectionalTaskMapRegistrationTask,\n );\n iterateTasksForDirectionalTaskMapSyncTask.then(\n this.registerTaskMapTask,\n this.registerDeputyRelationshipTask,\n );\n recordTaskMapRegistrationTask.then(gatherDirectionalTaskMapRegistrationTask);\n recordDeputyRelationshipRegistrationTask.then(\n gatherDirectionalTaskMapRegistrationTask,\n );\n gatherDirectionalTaskMapRegistrationTask.then(mapPhaseBarrierTask);\n\n const iterateTasksForSignalTaskMapSyncTask =\n Cadenza.registry.doForEachTask!.clone();\n startSignalTaskMapSyncTask.then(\n iterateTasksForSignalTaskMapSyncTask,\n gatherSignalTaskMapRegistrationTask,\n );\n iterateTasksForSignalTaskMapSyncTask.then(this.registerSignalToTaskMapTask);\n registerSignalTask.then(gatherSignalTaskMapRegistrationTask);\n gatherSignalTaskMapRegistrationTask.then(mapPhaseBarrierTask);\n\n const iterateTasksForIntentTaskMapSyncTask =\n Cadenza.registry.doForEachTask!.clone();\n startIntentTaskMapSyncTask.then(\n iterateTasksForIntentTaskMapSyncTask,\n gatherIntentTaskMapRegistrationTask,\n );\n iterateTasksForIntentTaskMapSyncTask.then(this.registerIntentToTaskMapTask);\n registerIntentTask.then(gatherIntentTaskMapRegistrationTask);\n gatherIntentTaskMapRegistrationTask.then(mapPhaseBarrierTask);\n\n const iterateTasksForActorTaskMapSyncTask =\n Cadenza.registry.doForEachTask!.clone();\n startActorTaskMapSyncTask.then(\n iterateTasksForActorTaskMapSyncTask,\n gatherActorTaskMapRegistrationTask,\n );\n iterateTasksForActorTaskMapSyncTask.then(this.registerActorTaskMapTask);\n recordActorTaskMapRegistrationTask.then(gatherActorTaskMapRegistrationTask);\n gatherActorTaskMapRegistrationTask.then(mapPhaseBarrierTask);\n\n const getAllRoutinesForTaskMapSyncTask = Cadenza.registry.getAllRoutines!.clone();\n startRoutineTaskMapSyncTask.then(\n getAllRoutinesForTaskMapSyncTask,\n gatherRoutineTaskMapRegistrationTask,\n );\n getAllRoutinesForTaskMapSyncTask.then(this.splitTasksInRoutines);\n registerTaskToRoutineMapTask.then(gatherRoutineTaskMapRegistrationTask);\n gatherRoutineTaskMapRegistrationTask.then(mapPhaseBarrierTask);\n\n Cadenza.createMetaTask(\n \"Request sync after local service instance registration\",\n (ctx) => {\n for (const delayMs of EARLY_SYNC_TICK_DELAYS_MS) {\n Cadenza.schedule(\n \"meta.sync_controller.sync_tick\",\n {\n ...buildMinimalSyncSignalContext(ctx),\n __syncing: true,\n },\n delayMs,\n );\n }\n\n return true;\n },\n \"Schedules the early bootstrap sync burst after local instance registration so startup-defined primitives can converge deterministically.\",\n {\n register: false,\n isHidden: true,\n },\n ).doOn(\"meta.service_registry.instance_inserted\");\n\n Cadenza.interval(\n \"meta.sync_controller.sync_tick\",\n { __syncing: true },\n this.isCadenzaDBReady ? 180000 : 300000,\n );\n }\n}\n","export interface BootstrapOptions {\n url?: string;\n injectedGlobalKey?: string;\n}\n\nexport interface HydrationOptions {\n initialInquiryResults?: Record<string, unknown>;\n}\n\nexport interface ResolvedBootstrapEndpoint {\n url: string;\n protocol: \"http\" | \"https\";\n address: string;\n port: number;\n exposed: boolean;\n injectedGlobalKey: string;\n}\n\nconst DEFAULT_BOOTSTRAP_GLOBAL_KEY = \"__CADENZA_RUNTIME__\";\n\ntype ResolveBootstrapEndpointOptions = {\n runtime: \"browser\" | \"server\";\n bootstrap?: BootstrapOptions;\n cadenzaDB?: { address?: string; port?: number };\n};\n\nfunction normalizeString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readEnvString(name: string): string | undefined {\n if (typeof process === \"undefined\") {\n return undefined;\n }\n\n return normalizeString(process.env?.[name]);\n}\n\nfunction readConfiguredPort(value: unknown): number | undefined {\n if (value === undefined || value === null || value === \"\") {\n return undefined;\n }\n\n const parsed = Number(value);\n if (!Number.isFinite(parsed)) {\n throw new Error(`Invalid port value: ${String(value)}`);\n }\n\n const normalized = Math.trunc(parsed);\n if (normalized <= 0) {\n throw new Error(`Port must be a positive integer: ${String(value)}`);\n }\n\n return normalized;\n}\n\nfunction buildBootstrapUrl(\n protocol: \"http\" | \"https\",\n address: string,\n port: number,\n): string {\n return `${protocol}://${address}:${port}`;\n}\n\nfunction readExplicitPortFromOrigin(raw: string): number | undefined {\n const match = raw.match(\n /^[a-z]+:\\/\\/(?:\\[[^\\]]+\\]|[^\\/?#:]+):(\\d+)(?:\\/)?$/i,\n );\n\n if (!match?.[1]) {\n return undefined;\n }\n\n return readConfiguredPort(match[1]);\n}\n\nfunction resolveInjectedBootstrapUrl(injectedGlobalKey: string): string | undefined {\n if (typeof globalThis === \"undefined\") {\n return undefined;\n }\n\n const runtimeConfig = (globalThis as Record<string, any>)[injectedGlobalKey];\n return normalizeString(runtimeConfig?.bootstrapUrl);\n}\n\nfunction resolveExplicitBootstrapValue(options: ResolveBootstrapEndpointOptions): {\n value?: string;\n port?: number;\n injectedGlobalKey: string;\n} {\n const injectedGlobalKey =\n normalizeString(options.bootstrap?.injectedGlobalKey) ??\n DEFAULT_BOOTSTRAP_GLOBAL_KEY;\n\n const explicitBootstrapUrl = normalizeString(options.bootstrap?.url);\n if (explicitBootstrapUrl) {\n return {\n value: explicitBootstrapUrl,\n port: readConfiguredPort(options.cadenzaDB?.port),\n injectedGlobalKey,\n };\n }\n\n if (options.runtime === \"browser\") {\n const injected = resolveInjectedBootstrapUrl(injectedGlobalKey);\n if (injected) {\n return {\n value: injected,\n port: readConfiguredPort(options.cadenzaDB?.port),\n injectedGlobalKey,\n };\n }\n }\n\n const explicitAddress = normalizeString(options.cadenzaDB?.address);\n if (explicitAddress) {\n return {\n value: explicitAddress,\n port: readConfiguredPort(options.cadenzaDB?.port),\n injectedGlobalKey,\n };\n }\n\n const envAddress = readEnvString(\"CADENZA_DB_ADDRESS\");\n return {\n value: envAddress,\n port: readConfiguredPort(options.cadenzaDB?.port ?? readEnvString(\"CADENZA_DB_PORT\")),\n injectedGlobalKey,\n };\n}\n\nexport function readIntegerEnv(name: string, fallback: number): number {\n const raw = readEnvString(name);\n if (!raw) {\n return fallback;\n }\n\n const parsed = Number(raw);\n if (!Number.isFinite(parsed)) {\n return fallback;\n }\n\n const normalized = Math.trunc(parsed);\n if (normalized <= 0) {\n return fallback;\n }\n\n return normalized;\n}\n\nexport function readStringEnv(name: string): string | undefined {\n return readEnvString(name);\n}\n\nexport function readListEnv(name: string): string[][] {\n const raw = readEnvString(name);\n if (!raw) {\n return [];\n }\n\n return raw\n .split(\"|\")\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0)\n .map((entry) => entry.split(\",\").map((part) => part.trim()));\n}\n\nexport function resolveBootstrapEndpoint(\n options: ResolveBootstrapEndpointOptions,\n): ResolvedBootstrapEndpoint {\n const { value, port: fallbackPort, injectedGlobalKey } =\n resolveExplicitBootstrapValue(options);\n\n if (!value) {\n throw new Error(\n options.runtime === \"browser\"\n ? `No bootstrap URL available. Pass bootstrap.url or inject globalThis.${injectedGlobalKey}.bootstrapUrl.`\n : \"No bootstrap URL available. Set CADENZA_DB_ADDRESS or pass bootstrap.url.\",\n );\n }\n\n const raw = value.trim();\n if (raw.length === 0) {\n throw new Error(\"Bootstrap URL cannot be empty\");\n }\n\n if (raw.includes(\"://\")) {\n const parsed = new URL(raw);\n const protocol = parsed.protocol.replace(\":\", \"\");\n if (protocol !== \"http\" && protocol !== \"https\") {\n throw new Error(`Unsupported bootstrap protocol: ${parsed.protocol}`);\n }\n\n if (\n parsed.pathname &&\n parsed.pathname !== \"/\" &&\n parsed.pathname.trim().length > 0\n ) {\n throw new Error(\n \"Bootstrap URL must be an origin without a path component.\",\n );\n }\n\n const explicitPort = readExplicitPortFromOrigin(raw);\n const port = explicitPort ?? (parsed.port ? readConfiguredPort(parsed.port) : fallbackPort);\n if (!port) {\n throw new Error(\n \"Bootstrap URL must include a port or CADENZA_DB_PORT must be provided.\",\n );\n }\n\n return {\n url: buildBootstrapUrl(protocol, parsed.hostname, port),\n protocol,\n address: parsed.hostname,\n port,\n exposed: protocol === \"https\",\n injectedGlobalKey,\n };\n }\n\n if (raw.includes(\"/\") || raw.includes(\"?\") || raw.includes(\"#\")) {\n throw new Error(\n \"Bootstrap address without protocol must not include a path, query, or hash.\",\n );\n }\n\n const parsed = new URL(`http://${raw}`);\n const protocol: \"http\" = \"http\";\n const port = parsed.port ? readConfiguredPort(parsed.port) : fallbackPort;\n if (!port) {\n throw new Error(\n \"Bootstrap address must include a port or CADENZA_DB_PORT must be provided.\",\n );\n }\n\n return {\n url: buildBootstrapUrl(protocol, parsed.hostname, port),\n protocol,\n address: parsed.hostname,\n port,\n exposed: false,\n injectedGlobalKey,\n };\n}\n","import type { AnyObject } from \"@cadenza.io/core\";\nimport { v4 as uuid } from \"uuid\";\nimport type { BootstrapOptions, HydrationOptions } from \"../utils/bootstrap\";\nimport { resolveBootstrapEndpoint } from \"../utils/bootstrap\";\nimport type {\n DistributedInquiryMeta,\n DistributedInquiryOptions,\n InquiryResponderStatus,\n} from \"../types/inquiry\";\nimport type { ServiceInstanceDescriptor } from \"../types/serviceRegistry\";\nimport {\n isMetaIntentName,\n mergeInquiryContexts,\n summarizeResponderStatuses,\n} from \"../utils/inquiry\";\nimport { normalizeServiceInstanceDescriptor } from \"../utils/serviceInstance\";\nimport { selectTransportForRole } from \"../utils/transport\";\n\nexport interface SSRInquiryBridgeOptions {\n bootstrap?: BootstrapOptions;\n cadenzaDB?: {\n address?: string;\n port?: number;\n };\n}\n\nexport interface SSRInquiryBridge {\n inquire: (\n inquiry: string,\n context?: AnyObject,\n options?: DistributedInquiryOptions,\n ) => Promise<AnyObject>;\n dehydrate: () => HydrationOptions;\n}\n\ntype NormalizedIntentMap = {\n intentName: string;\n serviceName: string;\n taskName: string;\n taskVersion: number;\n deleted: boolean;\n};\n\nfunction ensureFetch(): typeof fetch {\n if (typeof globalThis.fetch !== \"function\") {\n throw new Error(\"SSR inquiry bridge requires global fetch support.\");\n }\n\n return globalThis.fetch.bind(globalThis);\n}\n\nfunction normalizeArrayResponse(\n value: AnyObject,\n keys: string[],\n): AnyObject[] {\n for (const key of keys) {\n if (Array.isArray((value as any)?.[key])) {\n return (value as any)[key];\n }\n }\n\n if (Array.isArray((value as any)?.rows)) {\n return (value as any).rows;\n }\n\n if (Array.isArray((value as any)?.data)) {\n return (value as any).data;\n }\n\n return [];\n}\n\nfunction buildQueryResponseKeys(tableName: string): string[] {\n const camelCased = tableName.replace(/_([a-z])/g, (_match, char) =>\n char.toUpperCase(),\n );\n\n return [\n `${tableName}Rows`,\n `${tableName}s`,\n tableName,\n `${camelCased}s`,\n camelCased,\n ];\n}\n\nfunction normalizeIntentMap(raw: AnyObject): NormalizedIntentMap | null {\n const intentName = String(raw.intentName ?? raw.intent_name ?? \"\").trim();\n const serviceName = String(raw.serviceName ?? raw.service_name ?? \"\").trim();\n const taskName = String(raw.taskName ?? raw.task_name ?? \"\").trim();\n const taskVersion = Math.max(\n 1,\n Math.trunc(Number(raw.taskVersion ?? raw.task_version ?? 1) || 1),\n );\n\n if (!intentName || !serviceName || !taskName) {\n return null;\n }\n\n return {\n intentName,\n serviceName,\n taskName,\n taskVersion,\n deleted: Boolean(raw.deleted),\n };\n}\n\nfunction buildInquiryMeta(\n inquiry: string,\n startedAt: number,\n statuses: InquiryResponderStatus[],\n): DistributedInquiryMeta {\n const counts = summarizeResponderStatuses(statuses);\n return {\n inquiry,\n isMetaInquiry: isMetaIntentName(inquiry),\n totalResponders: statuses.length,\n eligibleResponders: statuses.length,\n filteredOutResponders: 0,\n responded: counts.responded,\n failed: counts.failed,\n timedOut: counts.timedOut,\n pending: counts.pending,\n durationMs: Date.now() - startedAt,\n responders: statuses,\n };\n}\n\nexport function createSSRInquiryBridge(\n options: SSRInquiryBridgeOptions = {},\n): SSRInquiryBridge {\n const bootstrapEndpoint = resolveBootstrapEndpoint({\n runtime: \"server\",\n bootstrap: options.bootstrap,\n cadenzaDB: options.cadenzaDB,\n });\n const fetchImplementation = ensureFetch();\n const initialInquiryResults: Record<string, unknown> = {};\n\n const postDelegation = async (\n targetUrl: string,\n remoteRoutineName: string,\n context: AnyObject,\n timeoutMs: number,\n ): Promise<AnyObject> => {\n const signal = AbortSignal.timeout(timeoutMs);\n const response = await fetchImplementation(`${targetUrl}/delegation`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n ...context,\n __remoteRoutineName: remoteRoutineName,\n __metadata: {\n ...(context.__metadata ?? {}),\n __deputyExecId: uuid(),\n },\n }),\n signal,\n });\n\n return (await response.json()) as AnyObject;\n };\n\n const queryTable = async (\n tableName: string,\n queryData: AnyObject,\n timeoutMs: number,\n ): Promise<AnyObject[]> => {\n const response = await postDelegation(\n bootstrapEndpoint.url,\n `Query ${tableName}`,\n { queryData },\n timeoutMs,\n );\n return normalizeArrayResponse(response, buildQueryResponseKeys(tableName));\n };\n\n return {\n async inquire(\n inquiry: string,\n context: AnyObject = {},\n inquiryOptions: DistributedInquiryOptions = {},\n ): Promise<AnyObject> {\n const startedAt = Date.now();\n const overallTimeoutMs =\n inquiryOptions.overallTimeoutMs ?? inquiryOptions.timeout ?? 30_000;\n const perResponderTimeoutMs =\n inquiryOptions.perResponderTimeoutMs ?? overallTimeoutMs;\n\n const intentMaps = (\n await queryTable(\n \"intent_to_task_map\",\n {\n filter: {\n intent_name: inquiry,\n },\n },\n overallTimeoutMs,\n )\n )\n .map(normalizeIntentMap)\n .filter(\n (item): item is NormalizedIntentMap =>\n !!item && item.intentName === inquiry && !item.deleted,\n );\n\n if (intentMaps.length === 0) {\n return {\n __inquiryMeta: buildInquiryMeta(inquiry, startedAt, []),\n };\n }\n\n const relevantServiceNames = Array.from(\n new Set(intentMaps.map((item) => item.serviceName)),\n );\n\n const rawServiceInstances = (\n await queryTable(\n \"service_instance\",\n {\n filter: {\n service_name: relevantServiceNames,\n },\n },\n overallTimeoutMs,\n )\n );\n\n const rawServiceTransports = await queryTable(\n \"service_instance_transport\",\n {\n filter: {\n deleted: false,\n },\n },\n overallTimeoutMs,\n );\n\n const transportsByInstance = new Map<string, AnyObject[]>();\n for (const transport of rawServiceTransports) {\n const serviceInstanceId = String(\n transport.serviceInstanceId ?? transport.service_instance_id ?? \"\",\n ).trim();\n if (!serviceInstanceId) {\n continue;\n }\n\n if (!transportsByInstance.has(serviceInstanceId)) {\n transportsByInstance.set(serviceInstanceId, []);\n }\n transportsByInstance.get(serviceInstanceId)!.push(transport);\n }\n\n const serviceInstances = rawServiceInstances\n .map((instance) =>\n normalizeServiceInstanceDescriptor({\n ...instance,\n transports:\n transportsByInstance.get(String(instance.uuid ?? \"\").trim()) ?? [],\n }),\n )\n .filter(\n (item): item is ServiceInstanceDescriptor =>\n !!item &&\n relevantServiceNames.includes(item.serviceName) &&\n item.isActive &&\n !item.isNonResponsive &&\n !item.isBlocked,\n )\n .sort((left, right) => {\n if (left.serviceName !== right.serviceName) {\n return left.serviceName.localeCompare(right.serviceName);\n }\n if (left.isPrimary !== right.isPrimary) {\n return left.isPrimary ? -1 : 1;\n }\n return (\n (left.numberOfRunningGraphs ?? 0) - (right.numberOfRunningGraphs ?? 0)\n );\n });\n\n const statuses: InquiryResponderStatus[] = intentMaps.map((map) => ({\n isRemote: true,\n serviceName: map.serviceName,\n taskName: map.taskName,\n taskVersion: map.taskVersion,\n localTaskName: `SSR inquiry via ${map.serviceName} (${map.taskName} v${map.taskVersion})`,\n status: \"timed_out\",\n durationMs: 0,\n }));\n\n const fulfilledContexts = await Promise.all(\n intentMaps.map(async (map, index) => {\n const status = statuses[index];\n const startedAtForResponder = Date.now();\n const selectedInstance = serviceInstances.find(\n (instance) => instance.serviceName === map.serviceName,\n );\n\n if (!selectedInstance) {\n status.status = \"failed\";\n status.error = `No active instances for ${map.serviceName}`;\n status.durationMs = Date.now() - startedAtForResponder;\n return null;\n }\n\n const targetTransport = selectTransportForRole(\n selectedInstance.transports,\n \"internal\",\n \"rest\",\n );\n if (!targetTransport) {\n status.status = \"failed\";\n status.error = `No internal transport for ${selectedInstance.serviceName}/${selectedInstance.uuid}`;\n status.durationMs = Date.now() - startedAtForResponder;\n return null;\n }\n\n const targetUrl = targetTransport.origin;\n\n try {\n const result = await postDelegation(\n targetUrl,\n map.taskName,\n context,\n perResponderTimeoutMs,\n );\n status.durationMs = Date.now() - startedAtForResponder;\n if (result?.errored || result?.failed) {\n status.status = \"failed\";\n status.error = String(\n result?.__error ?? result?.error ?? \"Remote inquiry failed\",\n );\n return null;\n }\n\n status.status = \"fulfilled\";\n return result;\n } catch (error) {\n status.durationMs = Date.now() - startedAtForResponder;\n if (\n error instanceof Error &&\n (error.name === \"AbortError\" || /timed out/i.test(error.message))\n ) {\n status.status = \"timed_out\";\n status.error = error.message;\n return null;\n }\n\n status.status = \"failed\";\n status.error =\n error instanceof Error ? error.message : String(error);\n return null;\n }\n }),\n );\n\n const mergedContext = mergeInquiryContexts(\n fulfilledContexts.filter(\n (item): item is AnyObject => item !== null,\n ),\n );\n const responseContext = {\n ...mergedContext,\n __inquiryMeta: buildInquiryMeta(inquiry, startedAt, statuses),\n };\n\n if (inquiryOptions.hydrationKey) {\n initialInquiryResults[inquiryOptions.hydrationKey] = responseContext;\n }\n\n if (\n inquiryOptions.requireComplete &&\n statuses.some((status) => status.status !== \"fulfilled\")\n ) {\n throw {\n ...responseContext,\n __error: `Inquiry '${inquiry}' did not complete successfully`,\n errored: true,\n };\n }\n\n return responseContext;\n },\n\n dehydrate(): HydrationOptions {\n return {\n initialInquiryResults: { ...initialInquiryResults },\n };\n },\n };\n}\n"],"mappings":"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","names":["import_core","uuid","import_uuid","uuid","normalizeString","uuid","import_uuid","uuid","uuid","existingTransport","selectedTransport","ctx","import_core","import_uuid","uuid","URL","delegationCtx","import_core","import_uuid","import_core","serviceName","normalizeString","parsed","protocol","port","Cadenza","uuid","import_core","import_uuid","uuid"]}