@cadenza.io/service 1.2.0 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +24 -15
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +24 -15
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Cadenza.ts","../src/graph/definition/DeputyTask.ts","../src/graph/definition/DatabaseTask.ts","../src/registry/ServiceRegistry.ts","../src/graph/definition/SignalTransmissionTask.ts","../src/network/RestController.ts","../src/network/SocketController.ts","../src/signals/SignalController.ts","../src/graph/controllers/TaskController.ts","../src/index.ts"],"sourcesContent":["import Cadenza, {\n CadenzaMode,\n DebounceOptions,\n DebounceTask,\n EphemeralTask,\n EphemeralTaskOptions,\n GraphRegistry,\n GraphRoutine,\n GraphRunner,\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 \"./network/RestController\";\nimport SocketController from \"./network/SocketController\";\nimport SignalController from \"./signals/SignalController\";\nimport { DbOperationPayload, DbOperationType } from \"./types/queryData\";\nimport TaskController from \"./graph/controllers/TaskController\";\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 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 relatedServices?: string[][];\n};\n\nexport default class CadenzaService {\n public static broker: SignalBroker;\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\n static bootstrap(): void {\n if (this.isBootstrapped) return;\n this.isBootstrapped = true;\n\n Cadenza.bootstrap();\n this.broker = Cadenza.broker;\n this.runner = Cadenza.runner;\n this.metaRunner = Cadenza.metaRunner;\n this.registry = Cadenza.registry;\n SignalController.instance;\n TaskController.instance;\n this.serviceRegistry = ServiceRegistry.instance;\n RestController.instance;\n SocketController.instance;\n console.log(\"BOOTSTRAPPED\");\n }\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 protected static validateName(name: string): void {\n Cadenza.validateName(name);\n }\n\n public static get runStrategy() {\n return Cadenza.runStrategy;\n }\n\n public static setMode(mode: CadenzaMode) {\n Cadenza.setMode(mode);\n }\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 = `Deputy task for \"${routineName}\"`;\n\n options = {\n concurrency: 0,\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 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 static createUniqueDeputyTask(\n routineName: string,\n serviceName: string | undefined = undefined,\n options: TaskOptions = {},\n ) {\n options.isUnique = true;\n return this.createDeputyTask(routineName, serviceName, options);\n }\n\n static createUniqueMetaDeputyTask(\n routineName: string,\n serviceName: string | undefined = undefined,\n options: TaskOptions = {},\n ) {\n options.isMeta = true;\n return this.createUniqueDeputyTask(routineName, serviceName, options);\n }\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 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 static createSignalTransmissionTask(\n signalName: string,\n serviceName: string,\n options: TaskOptions = {},\n ): SignalTransmissionTask {\n this.bootstrap();\n Cadenza.validateName(signalName);\n Cadenza.validateName(serviceName);\n\n options = {\n concurrency: 0,\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 const name = `SignalTransmission task for \"${signalName}\"`;\n return new SignalTransmissionTask(\n name,\n signalName,\n serviceName,\n `Transmits signal \"${signalName}\" to 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 static createDatabaseTask(\n tableName: string,\n operation: DbOperationType,\n databaseServiceName: string | undefined = undefined,\n queryData: DbOperationPayload,\n options: TaskOptions = {},\n ) {\n this.bootstrap();\n Cadenza.validateName(tableName);\n Cadenza.validateName(operation);\n const tableNameFormatted = tableName\n .split(\"_\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\"\");\n const name = `${operation} ${tableName} in ${databaseServiceName ?? \"default database service\"}`;\n const description = `Executes a database \"${operation}\" on table \"${tableName}\" in ${databaseServiceName ?? \"default database service\"}`;\n const taskName = `db${operation.charAt(0).toUpperCase() + operation.slice(1)}${tableNameFormatted}`;\n\n options = {\n concurrency: 0,\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 databaseServiceName,\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 static createDatabaseInertTask(\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 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 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 static createCadenzaDBInsertTask(\n tableName: string,\n queryData: DbOperationPayload = {},\n options: TaskOptions = {},\n ) {\n options.isMeta = true;\n return this.createDatabaseInertTask(\n tableName,\n \"CadenzaDB\",\n queryData,\n options,\n );\n }\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 MetaTask (for meta-layer graphs) and registers it.\n * MetaTasks suppress further meta-signal emissions to prevent loops.\n * @param serviceName Unique identifier for the meta-task.\n * @param description Optional description.\n * @param options Optional service options. A service can either be connected to a database service and/or a list of related services.\n * Example RELATED_SERVICES=serviceId123,service1,http://address:port | serviceId124,service2,http://address:port\n * @returns The created MetaTask instance.\n * @throws Error if name invalid or duplicate.\n */\n static createCadenzaService(\n serviceName: string,\n description: string = \"\",\n options: ServerOptions = {},\n ) {\n this.bootstrap();\n Cadenza.validateName(serviceName);\n this.validateServiceName(serviceName);\n\n options = {\n loadBalance: true,\n useSocket: true,\n displayName: undefined,\n isMeta: false,\n port: parseInt(process.env.HTTP_PORT ?? \"3000\"),\n securityProfile:\n (process.env.SECURITY_PROFILE as SecurityProfile) ?? \"medium\",\n networkMode: (process.env.NETWORK_MODE as NetworkMode) ?? \"dev\",\n retryCount: 3,\n cadenzaDB: {\n connect: true,\n address: process.env.CADENZA_DB_ADDRESS ?? \"localhost\",\n port: parseInt(process.env.CADENZA_DB_PORT ?? \"5000\"),\n },\n relatedServices: process.env.RELATED_SERVICES\n ? process.env.RELATED_SERVICES.split(\"|\").map((s) =>\n s.trim().split(\",\"),\n )\n : [],\n ...options,\n };\n\n if (options.cadenzaDB?.connect) {\n Cadenza.broker.emit(\"meta.initializing_service\", {\n // Seed the CadenzaDB\n serviceInstance: {\n id: \"cadenza-db\",\n serviceName: \"CadenzaDB\",\n address: options.cadenzaDB?.address,\n port: options.cadenzaDB?.port,\n exposed: options.networkMode !== \"dev\",\n numberOfRunningGraphs: 0,\n isActive: true, // Assume it is deployed\n isNonResponsive: false,\n isBlocked: false,\n health: {},\n },\n });\n }\n\n options.relatedServices?.forEach((service) => {\n Cadenza.broker.emit(\"meta.initializing_service\", {\n serviceInstance: {\n id: service[0],\n serviceName: service[1],\n address: service[2].split(\":\")[0],\n port: service[2].split(\":\")[1] ?? 3000,\n exposed: options.networkMode !== \"dev\",\n numberOfRunningGraphs: 0,\n isActive: true, // Assume it is deployed\n isNonResponsive: false,\n isBlocked: false,\n health: {},\n },\n });\n });\n\n Cadenza.broker.emit(\"meta.create_service_requested\", {\n data: {\n name: serviceName,\n description: description,\n displayName: options.displayName,\n isMeta: options.isMeta,\n },\n __serviceName: serviceName,\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 });\n\n // TODO: restrict to one service creation per process?\n }\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 a standard Task and registers it in the GraphRegistry.\n * @param name Unique identifier for the task.\n * @param func The function or async generator to execute.\n * @param description Optional human-readable description for introspection.\n * @param options Optional task options.\n * @returns The created Task instance.\n * @throws Error if name is invalid or duplicate in registry.\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 MetaTask (for meta-layer graphs) and registers it.\n * MetaTasks suppress further meta-signal emissions to prevent loops.\n * @param name Unique identifier for the meta-task.\n * @param func The function or async generator to execute.\n * @param description Optional description.\n * @param options Optional task options.\n * @returns The created MetaTask instance.\n * @throws Error if name invalid or duplicate.\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 UniqueTask (executes once per execution ID, merging parents) and registers it.\n * Use for fan-in/joins after parallel branches.\n * @param name Unique identifier.\n * @param func Function receiving joinedContexts.\n * @param description Optional description.\n * @param options Optional task options.\n * @returns The created UniqueTask.\n * @throws Error if invalid.\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 UniqueMetaTask for meta-layer joins.\n * @param name Unique identifier.\n * @param func Function.\n * @param description Optional.\n * @param options Optional task options.\n * @returns The created UniqueMetaTask.\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 ThrottledTask (rate-limited by concurrency or custom groups) and registers it.\n * @param name Unique identifier.\n * @param func Function.\n * @param throttledIdGetter Optional getter for dynamic grouping (e.g., per-user).\n * @param description Optional.\n * @param options Optional task options.\n * @returns The created ThrottledTask.\n * @edge If no getter, throttles per task ID; use for resource protection.\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 ThrottledMetaTask for meta-layer throttling.\n * @param name Identifier.\n * @param func Function.\n * @param throttledIdGetter Optional getter.\n * @param description Optional.\n * @param options Optional task options.\n * @returns The created ThrottledMetaTask.\n */\n static createThrottledMetaTask(\n name: string,\n func: TaskFunction,\n throttledIdGetter: ThrottleTagGetter,\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 a DebounceTask (delays exec until quiet period) and registers it.\n * @param name Identifier.\n * @param func Function.\n * @param description Optional.\n * @param debounceTime Delay in ms (default 1000).\n * @param options Optional task options plus optional debounce config (e.g., leading/trailing).\n * @returns The created DebounceTask.\n * @edge Multiple triggers within time collapse to one exec.\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 DebouncedMetaTask for meta-layer debouncing.\n * @param name Identifier.\n * @param func Function.\n * @param description Optional.\n * @param debounceTime Delay in ms.\n * @param options Optional task options plus optional debounce config (e.g., leading/trailing).\n * @returns The created DebouncedMetaTask.\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 EphemeralTask (self-destructs after exec or condition) without default registration.\n * Useful for transients; optionally register if needed.\n * @param name Identifier (may not be unique if not registered).\n * @param func Function.\n * @param description Optional.\n * @param options Optional task options.\n * @returns The created EphemeralTask.\n * @edge Destruction triggered post-exec via Node/Builder; emits meta-signal for cleanup.\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 EphemeralMetaTask for meta-layer transients.\n * @param name Identifier.\n * @param func Function.\n * @param description Optional.\n * @param options Optional task options.\n * @returns The created EphemeralMetaTask.\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 GraphRoutine (named entry to starting tasks) and registers it.\n * @param name Unique identifier.\n * @param tasks Starting tasks (can be empty, but warns as no-op).\n * @param description Optional.\n * @returns The created GraphRoutine.\n * @edge If tasks empty, routine is valid but inert.\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 MetaRoutine for meta-layer entry points.\n * @param name Identifier.\n * @param tasks Starting tasks.\n * @param description Optional.\n * @returns The created MetaRoutine.\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 }\n}\n","import { v4 as uuid } from \"uuid\";\nimport {\n AnyObject,\n GraphContext,\n SchemaDefinition,\n Task,\n TaskResult,\n ThrottleTagGetter,\n} from \"@cadenza.io/core\";\nimport Cadenza from \"../../Cadenza\";\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 /**\n * Constructs a DeputyTask as a proxy for triggering a remote flow.\n * @param name - The local name of the DeputyTask.\n * @param remoteRoutineName - The name of the remote routine or task to trigger.\n * @param serviceName - The target service name (optional, defaults to local service if undefined).\n * @param description - A description of the task's purpose (default: '').\n * @param concurrency - The maximum number of concurrent executions (default: 0, unlimited).\n * @param timeout - Timeout in milliseconds (default: 0, handled by engine).\n * @param register - Whether to register the task in the registry (default: true).\n * @param isUnique - Whether to create a unique task (default: false). A unique task will only be executed once per execution ID, merging parents.\n * @param isMeta - Whether to create a meta task (default: false). A meta task is separate from the user logic and is only used for monitoring, optimization, and feature extensions.\n * @param isSubMeta\n * @param isHidden\n * @param getTagCallback - Callback for dynamic tagging, e.g., 'return \"default\"'.\n * @param inputSchema - Input schema definition.\n * @param validateInputContext - Whether to validate the input context (default: false).\n * @param outputSchema - Output schema definition.\n * @param validateOutputContext - Whether to validate the output context (default: false).\n * @param retryCount\n * @param retryDelay\n * @param retryDelayMax\n * @param retryDelayFactor\n * @emits {meta.deputy.delegation_requested} - Emitted on construction with task and service details.\n * @note Fallbacks should be handled externally via `.doOnFail`; timeouts are managed by the engine.\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: SchemaDefinition | undefined = undefined,\n validateInputContext: boolean = false,\n outputSchema: SchemaDefinition | 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 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 }\n\n if (context.__metadata.__skipRemoteExecution) {\n resolve(true);\n }\n\n const processId = uuid();\n\n context.__deputyExecId = processId;\n emit(\"meta.deputy.delegation_requested\", {\n ...context,\n });\n\n // Ephemeral meta-task for progress\n const progressTask = 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 },\n ).doOn(`meta.socket_client.delegation_progress:${processId}`);\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 resolve(responseCtx);\n }\n\n progressTask.destroy();\n },\n `Ephemeral resolver for deputy process ${processId}`,\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.emit(\"meta.deputy.created\", {\n __localTaskName: this.name,\n __remoteRoutineName: this.remoteRoutineName,\n __serviceName: this.serviceName,\n });\n }\n\n /**\n * Triggers the delegation flow via a signal to the meta-layer.\n * @param context - The GraphContext containing execution data.\n * @param emit\n * @param progressCallback - Callback to update progress (invoked by meta-layer).\n * @returns A Promise resolving with the task result or rejecting on error.\n * @emits {meta.deputy.executed} - Emitted with context to initiate delegation.\n * @edge Engine handles timeout and error, triggering `.doOnFail` if chained.\n * @note The resolution and progress are managed by ephemeral meta-tasks.\n */\n execute(\n context: GraphContext,\n emit: (signal: string, ctx: AnyObject) => void,\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 __remoteRoutineName: this.remoteRoutineName,\n __serviceName: this.serviceName,\n __contractId: metadata.__contractId ?? null,\n __metadata: {\n ...metadata,\n __deputyTaskId: this.id,\n },\n ...ctx,\n };\n\n return this.taskFunction(deputyContext, emit, progressCallback);\n }\n}\n","import DeputyTask from \"./DeputyTask\";\nimport {\n AnyObject,\n GraphContext,\n SchemaDefinition,\n TaskResult,\n ThrottleTagGetter,\n} from \"@cadenza.io/core\";\nimport { DbOperationPayload } from \"../../types/queryData\";\n\nexport default class DatabaseTask extends DeputyTask {\n private readonly queryData: DbOperationPayload;\n\n /**\n * Constructs a DatabaseTask to execute a database operation on a remote service.\n * @param name - The local name of the DatabaseTask.\n * @param taskName - The name of the database operation task to trigger (e.g., 'dbQueryTaskExecution').\n * @param serviceName - The target database service name (optional, defaults to 'DatabaseService').\n * @param description - A description of the task's purpose (default: '').\n * @param queryData - The query data object containing operation details (e.g., { __operation: 'query', __table: 'users' }).\n * @param concurrency - The maximum number of concurrent executions (default: 0, unlimited).\n * @param timeout - Timeout in milliseconds (default: 0, handled by engine).\n * @param register - Whether to register the task in the registry (default: true).\n * @param isUnique\n * @param isMeta\n * @param isSubMeta\n * @param isHidden\n * @param getTagCallback - Callback for dynamic tagging, e.g., 'return \"default\"'.\n * @param inputSchema - Input schema definition.\n * @param validateInputContext - Whether to validate the input context (default: false).\n * @param outputSchema - Output schema definition.\n * @param validateOutputContext - Whether to validate the output context (default: false).\n * @param retryCount\n * @param retryDelay\n * @param retryDelayMax\n * @param retryDelayFactor\n * @emits {meta.deputy.created} - Emitted on construction with task and service details.\n * @note Fallbacks via `.doOnFail` externally; timeouts managed by the engine.\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: SchemaDefinition | undefined = undefined,\n validateInputContext: boolean = false,\n outputSchema: SchemaDefinition | 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 * Triggers the database operation delegation flow via a signal to the meta-layer.\n * @param context - The GraphContext containing execution data.\n * @param emit\n * @param progressCallback - Callback to update progress (invoked by meta-layer).\n * @returns A Promise resolving with the task result or rejecting on error.\n * @emits {meta.deputy.executed} - Emitted with context including queryData to initiate delegation.\n * @edge Engine handles timeout and error, triggering `.doOnFail` if chained.\n * @note The resolution and progress are managed by ephemeral meta-tasks.\n */\n execute(\n context: GraphContext,\n emit: (signal: string, ctx: AnyObject) => void,\n progressCallback: (progress: number) => void,\n ): TaskResult {\n const ctx = context.getContext();\n const metadata = context.getMetadata();\n const dynamicQueryData = ctx.queryData;\n delete ctx.queryData;\n\n const deputyContext = {\n __localTaskName: this.name,\n __remoteRoutineName: this.remoteRoutineName,\n __serviceName: this.serviceName,\n __contractId: metadata.__contractId ?? null,\n __metadata: {\n ...metadata,\n __deputyTaskId: this.id,\n },\n queryData: {\n ...this.queryData,\n data: {\n ...ctx.data,\n },\n ...dynamicQueryData,\n },\n };\n\n return this.taskFunction(deputyContext, emit, progressCallback);\n }\n}\n","import { AnyObject, Task } from \"@cadenza.io/core\";\nimport Cadenza from \"../Cadenza\";\n\nexport interface ServiceInstanceDescriptor {\n id: string;\n address: string;\n port: number;\n serviceName: string;\n numberOfRunningGraphs?: number;\n isActive: boolean;\n isNonResponsive: boolean;\n isBlocked: boolean;\n health: AnyObject;\n exposed: boolean;\n}\n\nexport interface DeputyDescriptor {\n __serviceName: string;\n __remoteRoutineName: string;\n __localTaskName: string;\n}\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 serviceName: string | null = null;\n serviceInstanceId: string | null = null;\n useSocket: boolean = false;\n retryCount: number = 3;\n\n handleInstanceUpdateTask: Task;\n handleSocketStatusUpdateTask: Task;\n fullSyncTask: Task;\n getAllInstances: Task;\n doForEachInstance: Task;\n deleteInstance: Task;\n getBalancedInstance: Task;\n updateInstanceId: Task;\n getInstanceById: Task;\n getInstancesByServiceName: Task;\n handleDeputyRegistrationTask: Task;\n getStatusTask: Task;\n insertServiceTask: Task;\n insertServiceInstanceTask: Task;\n\n private constructor() {\n this.handleInstanceUpdateTask = Cadenza.createMetaTask(\n \"Handle Instance Update\",\n (ctx, emit) => {\n const { serviceInstance } = ctx;\n const { id, serviceName, address, port, exposed } = serviceInstance;\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.id === id);\n if (existing) {\n Object.assign(existing, serviceInstance); // Update\n } else {\n if (this.deputies.has(serviceName)) {\n emit(\"meta.service_registry.dependee_registered\", {\n __serviceName: serviceName,\n __serviceInstanceId: id,\n __serviceAddress: address,\n __servicePort: port,\n __protocol: exposed ? \"https\" : \"http\",\n });\n }\n instances.push(serviceInstance); // Insert\n }\n\n return true;\n },\n \"Handles instance update from DB signal\",\n )\n .emitsAfter(\"meta.service_registry.service_discovered\")\n .doOn(\n \"meta.initializing_service\",\n \"CadenzaDB.meta.service_instance.inserted\",\n \"CadenzaDB.meta.service_instance.updated\",\n );\n\n this.handleSocketStatusUpdateTask = Cadenza.createMetaTask(\n \"Handle Socket Status Update\",\n (ctx) => {\n const instanceId = ctx.__serviceInstanceId;\n const serviceName = ctx.__serviceName;\n const instances = this.instances.get(serviceName);\n const instance = instances?.find((i) => i.id === instanceId);\n if (instance) {\n instance.health = ctx.health;\n instance.numberOfRunningGraphs = ctx.numberOfRunningGraphs;\n }\n return true;\n },\n \"Handles status update from socket broadcast\",\n ).doOn(\"meta.socket_client.status_received\");\n\n this.fullSyncTask = Cadenza.createCadenzaDBQueryTask(\"service_instance\", {\n filter: {\n deleted: false,\n is_active: true,\n is_non_responsive: false,\n is_blocked: false,\n },\n fields: [\n \"id\",\n \"address\",\n \"port\",\n \"service_name\",\n \"is_active\",\n \"is_non_responsive\",\n \"is_blocked\",\n \"health\",\n \"exposed\",\n ],\n })\n .doOn(\n \"meta.service_registry_sync_requested\",\n \"meta.service_registry.instance_inserted\",\n )\n .then(\n Cadenza.createMetaTask(\"Split service instances\", function* (ctx) {\n const { __serviceInstances } = ctx;\n for (const serviceInstance of __serviceInstances) {\n yield serviceInstance;\n }\n }).then(this.handleInstanceUpdateTask),\n );\n\n this.updateInstanceId = Cadenza.createMetaTask(\n \"Update instance id\",\n (context) => {\n const { __id, __oldId } = context;\n const instance = this.instances.get(__oldId);\n if (!instance) return context;\n this.instances.set(__id, instance);\n this.instances.delete(__oldId);\n return context;\n },\n \"Updates instance id.\",\n ).doOn(\"meta.service.global_id_set\");\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.id === __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 this.deputies.set(__serviceName, {\n __serviceName,\n __remoteRoutineName: ctx.__remoteRoutineName,\n __localTaskName: ctx.__localTaskName,\n });\n\n for (const instance of this.instances.get(__serviceName)!) {\n emit(`meta.service_registry.dependee_registered:${instance.id}`, {\n __serviceName,\n __serviceInstanceId: instance.id,\n __serviceAddress: instance.address,\n __servicePort: instance.port,\n __protocol: instance.exposed ? \"https\" : \"http\",\n });\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(\"CadenzaDB.meta.service_instance.deleted\");\n\n this.getBalancedInstance = Cadenza.createMetaTask(\n \"Get balanced instance\",\n (context, emit) => {\n const { __serviceName, __triedInstances, __retries } = context;\n let retries = __retries ?? 0;\n let triedInstances = __triedInstances ?? [];\n\n const instances = this.instances\n .get(__serviceName)\n ?.filter((i) => i.isActive && !i.isNonResponsive && !i.isBlocked)\n .sort((a, b) => a.numberOfRunningGraphs! - b.numberOfRunningGraphs!);\n\n if (!instances || instances.length === 0 || retries > this.retryCount) {\n context.errored = true;\n context.__error = \"No active instances\";\n emit(\n `meta.service_registry.load_balance_failed:${context.__deputyExecId}`,\n context,\n );\n return context;\n }\n\n let instancesToTry = instances.filter(\n (i) => !__triedInstances?.includes(i.id),\n );\n\n if (instancesToTry.length === 0) {\n if (this.useSocket) {\n emit(\n `meta.service_registry.socket_failed:${context.__instance}`,\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 context.__instance = selected.id;\n context.__triedInstances = triedInstances;\n context.__triedInstances.push(selected.id);\n context.__retries = retries;\n\n if (this.useSocket) {\n emit(\n `meta.service_registry.selected_instance_for_socket:${context.__instance}`,\n context,\n );\n } else {\n emit(\n `meta.service_registry.selected_instance_for_fetch:${context.__instance}`,\n context,\n );\n }\n\n return context;\n },\n \"Gets a balanced instance for load balancing\",\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\n this.getStatusTask = Cadenza.createMetaTask(\"Get status\", (ctx) => {\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 self = this.instances\n .get(this.serviceName)\n ?.find((i) => i.id === this.serviceInstanceId);\n\n return {\n ...ctx,\n __status: \"ok\",\n __numberOfRunningGraphs: self?.numberOfRunningGraphs ?? 0,\n __health: self?.health ?? {},\n __active: self?.isActive ?? false,\n };\n }).doOn(\"meta.socket.status_check_requested\");\n\n this.insertServiceTask = Cadenza.createCadenzaDBInsertTask(\n \"service\",\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 .then(\n Cadenza.createMetaTask(\n \"Set service name\",\n ({ __serviceName }) => {\n this.serviceName = __serviceName;\n return true;\n },\n \"Sets service name after insertion\",\n ),\n )\n .emitsAfter(\"meta.service_registry.service_inserted\")\n .emitsOnFail(\"meta.service_registry.service_insertion_failed\");\n\n this.insertServiceInstanceTask = Cadenza.createCadenzaDBInsertTask(\n \"serviceInstance\",\n {},\n {\n inputSchema: {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n },\n address: {\n type: \"string\",\n },\n port: {\n type: \"number\",\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_non_responsive: {\n type: \"boolean\",\n },\n is_blocked: {\n type: \"boolean\",\n },\n exposed: {\n type: \"boolean\",\n },\n },\n required: [\n \"id\",\n \"address\",\n \"port\",\n \"process_pid\",\n \"service_name\",\n \"exposed\",\n ],\n },\n // validateInputContext: true,\n outputSchema: {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n },\n },\n required: [\"id\"],\n },\n // validateOutputContext: true,\n retryCount: 5,\n retryDelay: 1000,\n },\n )\n .doOn(\"meta.rest.network_configured\")\n .then(\n Cadenza.createMetaTask(\n \"Setup service\",\n (ctx) => {\n const { serviceInstance, __useSocket, __retryCount } = ctx;\n this.serviceInstanceId = serviceInstance.id;\n this.instances.set(serviceInstance.serviceName, [\n { ...serviceInstance },\n ]);\n this.useSocket = __useSocket;\n this.retryCount = __retryCount;\n return true;\n },\n \"Sets service instance id after insertion\",\n ).emitsAfter(\n \"meta.service_registry.instance_inserted\",\n \"meta.process_signal_queue_requested\",\n ),\n );\n\n Cadenza.createMetaTask(\n \"Handle service creation\",\n (ctx) => {\n if (!ctx.__cadenzaDBConnect) {\n ctx.__skipRemoteExecution = true;\n }\n\n console.log(\"service creation\");\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 }\n}\n","import {\n AnyObject,\n GraphContext,\n SchemaDefinition,\n Task,\n TaskResult,\n ThrottleTagGetter,\n} from \"@cadenza.io/core\";\nimport { v4 as uuid } from \"uuid\";\nimport Cadenza from \"../../Cadenza\";\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 DatabaseTask to execute a database operation on a remote service.\n * @param name - The local name of the Task.\n * @param signalName - The name of the signal to transmit to the service.\n * @param serviceName - The target database service name (optional, defaults to 'DatabaseService').\n * @param description - A description of the task's purpose (default: '').\n * @param concurrency - The maximum number of concurrent executions (default: 0, unlimited).\n * @param timeout - Timeout in milliseconds (default: 0, handled by engine).\n * @param register - Whether to register the task in the registry (default: true).\n * @param isUnique\n * @param isMeta\n * @param isSubMeta\n * @param isHidden\n * @param getTagCallback - Callback for dynamic tagging, e.g., 'return \"default\"'.\n * @param inputSchema - Input schema definition.\n * @param validateInputContext - Whether to validate the input context (default: false).\n * @param outputSchema - Output schema definition.\n * @param validateOutputContext - Whether to validate the output context (default: false).\n * @param retryCount\n * @param retryDelay\n * @param retryDelayMax\n * @param retryDelayFactor\n * @emits {meta.deputy.created} - Emitted on construction with task and service details.\n * @note Fallbacks via `.doOnFail` externally; timeouts managed by the engine.\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 = false,\n isSubMeta: boolean = false,\n isHidden: boolean = false,\n getTagCallback: ThrottleTagGetter | undefined = undefined,\n inputSchema: SchemaDefinition | undefined = undefined,\n validateInputContext: boolean = false,\n outputSchema: SchemaDefinition | 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 ): Promise<TaskResult> => {\n return new Promise((resolve, reject) => {\n const processId = uuid();\n\n context.__routineExecId = processId;\n emit(\"meta.signal_transmission.requested\", context);\n\n // Ephemeral meta-task for resolution\n Cadenza.createEphemeralMetaTask(\n `Resolve signal transmission for ${this.signalName}`,\n (responseCtx) => {\n if (responseCtx.errored) {\n reject(new Error(responseCtx.__error));\n } else {\n resolve(responseCtx);\n }\n },\n `Ephemeral resolver for signal transmission ${processId}`,\n ).doOn(\n `meta.socket_client.transmitted:${processId}`,\n `meta.fetch.transmitted:${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.serviceName = serviceName;\n this.signalName = signalName;\n }\n\n /**\n * Triggers the database operation delegation flow via a signal to the meta-layer.\n * @param context - The GraphContext containing execution data.\n * @param emit\n * @param progressCallback - Callback to update progress (invoked by meta-layer).\n * @returns A Promise resolving with the task result or rejecting on error.\n * @emits {meta.deputy.executed} - Emitted with context including queryData to initiate delegation.\n * @edge Engine handles timeout and error, triggering `.doOnFail` if chained.\n * @note The resolution and progress are managed by ephemeral meta-tasks.\n */\n execute(\n context: GraphContext,\n emit: (signal: string, ctx: AnyObject) => void,\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 __serviceName: this.serviceName,\n __contractId: metadata.__contractId ?? null,\n __metadata: {\n ...metadata,\n __deputyTaskId: this.id,\n },\n __signalName: this.signalName,\n ...ctx,\n };\n\n return this.taskFunction(deputyContext, emit, progressCallback);\n }\n}\n","import Cadenza from \"../Cadenza\";\nimport express, { Request, Response } from \"express\";\nimport bodyParser from \"body-parser\";\nimport helmet from \"helmet\";\nimport cors from \"cors\";\nimport { RateLimiterMemory } from \"rate-limiter-flexible\";\nimport { v4 as uuid } from \"uuid\";\nimport http from \"node:http\";\nimport fs from \"node:fs\";\nimport https from \"node:https\";\nimport fetch from \"node-fetch\";\nimport { AnyObject } from \"@cadenza.io/core\";\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 constructor() {\n Cadenza.createMetaRoutine(\n \"RestServer\",\n [\n Cadenza.createMetaTask(\n \"Setup Express app security\",\n (ctx) => {\n const app = express();\n app.use(bodyParser.json());\n\n switch (ctx.__securityProfile) {\n case \"low\":\n app.use(helmet());\n app.use(cors({ origin: \"*\" })); // Allow all origins (insecure for prod)\n break;\n\n case \"medium\":\n app.use(helmet());\n app.use(\n cors({\n origin: process.env.CORS_ORIGIN ?? \"*\",\n methods: [\"GET\", \"POST\"],\n }),\n );\n\n // Rate limiting (100 req/5min per IP)\n app.use((req: any, res: any, next: any) => {\n new RateLimiterMemory({\n points: 100,\n duration: 300,\n })\n .consume(req.ip)\n .then(() => next())\n .catch(() =>\n res.status(429).json({ error: \"Too many requests\" }),\n );\n });\n break;\n\n case \"high\":\n app.use(\n helmet({\n contentSecurityPolicy: {\n directives: { defaultSrc: [\"'self'\"] },\n }, // Strict CSP\n referrerPolicy: { policy: \"no-referrer\" },\n }),\n );\n\n if (!process.env.CORS_ORIGIN) {\n throw new Error(\n \"CORS_ORIGIN must be set for high security profile\",\n );\n }\n\n app.use(\n cors({\n origin: process.env.CORS_ORIGIN ?? \"*\",\n methods: [\"GET\", \"POST\"],\n credentials: true,\n }),\n );\n\n // Rate limiting (50 req/1min per IP, block on exceed)\n app.use((req: any, res: any, next: any) => {\n new RateLimiterMemory({\n points: 50,\n duration: 60,\n blockDuration: 300,\n })\n .consume(req.ip)\n .then(() => next())\n .catch((rej) => {\n if (rej.msBeforeNext > 0) {\n res.status(429).json({\n error: \"Too many requests\",\n retryAfter: rej.msBeforeNext / 1000,\n });\n } else {\n res\n .status(429)\n .json({ error: \"Rate limit exceeded, blocked\" });\n }\n });\n });\n break;\n }\n\n return { ...ctx, __app: app };\n },\n \"Sets up the Express server according to the security profile\",\n ).then(\n Cadenza.createMetaTask(\n \"Define RestServer\",\n (ctx) => {\n const app = ctx.__app;\n\n // TODO: add body validation based on profile\n\n app.post(\"/handshake\", (req: Request, res: Response) => {\n Cadenza.broker.emit(\"meta.rest.handshake\", req.body);\n res.send({ __status: \"success\" });\n });\n\n app.post(\"/delegation\", (req: Request, res: Response) => {\n const ctx = req.body;\n const routineExecId = ctx.__routineExecId || uuid();\n\n Cadenza.createEphemeralMetaTask(\n \"Resolve delegation\",\n (endCtx) =>\n res.json({\n __status: \"success\",\n __result: endCtx.__result,\n }),\n \"Resolves a delegation request\",\n )\n .doOn(`meta.node.ended_routine_execution:${routineExecId}`)\n .emitsAfter(`meta.rest.delegation_resolved:${routineExecId}`);\n\n Cadenza.createEphemeralMetaTask(\n \"Delegation progress update\",\n (progressCtx) => {\n if (progressCtx.__progress !== undefined) {\n // TODO: Progress updates via polling or long-polling for REST, but omit broadcasting as per instruction\n }\n },\n \"Updates delegation progress (polling-based for REST)\",\n {\n once: false,\n destroyCondition: (progressCtx: AnyObject) =>\n progressCtx.__progress === 1 ||\n progressCtx.__graphComplete,\n },\n ).doOn(\n `meta.node.routine_execution_progress:${routineExecId}`,\n `meta.node.ended_routine_execution:${routineExecId}`,\n );\n\n Cadenza.broker.emit(\"meta.rest.delegation_requested\", ctx);\n });\n\n app.post(\"/signal\", (req: Request, res: Response) => {\n const ctx = req.body;\n res.send({ __status: \"success\" });\n Cadenza.broker.emit(ctx.__signalName, ctx.__context);\n });\n\n app.get(\"/status\", (req: Request, res: Response) => {\n Cadenza.createEphemeralMetaTask(\n \"Resolve status check\",\n (statusCtx) => res.json(statusCtx),\n \"Resolves a status check request\",\n ).doAfter(Cadenza.serviceRegistry.getStatusTask);\n\n Cadenza.broker.emit(\n \"meta.rest.status_check_requested\",\n req.query,\n );\n });\n\n return true;\n },\n \"Starts REST server and initiates meta-handling\",\n )\n .then(\n Cadenza.createMetaTask(\n \"Configure network\",\n (ctx) => {\n let address: string = \"\";\n let port: number = ctx.__port;\n let exposed: boolean = false;\n\n const createHttpServer = (ctx: any) => {\n const server = http.createServer(ctx.__app);\n ctx.__httpServer = server;\n server.listen(ctx.__port, () => {\n if (typeof server?.address() === \"string\") {\n address = server.address() as string;\n // @ts-ignore\n } else if (server?.address()?.address === \"::\") {\n if (process.env.NODE_ENV === \"development\") {\n address = \"localhost\";\n } else if (process.env.IS_DOCKER === \"true\") {\n address =\n process.env.PG_GRAPH_SERVER_URL || \"localhost\";\n }\n } else {\n // @ts-ignore\n address = server?.address()?.address || \"\";\n }\n\n console.log(`Server is running on ${address}:${port}`);\n });\n\n Cadenza.createMetaTask(\n \"Shutdown HTTP Server\",\n () => server.close(),\n \"Shuts down the HTTP server\",\n )\n .doOn(\"meta.server_shutdown_requested\")\n .emitsAfter(\"meta.rest.shutdown:http\");\n };\n\n const createHttpsServer = (ctx: any) => {\n if (\n !process.env.SSL_KEY_PATH ||\n !process.env.SSL_CERT_PATH\n ) {\n throw new Error(\n \"SSL_KEY_PATH and SSL_CERT_PATH must be set\",\n );\n }\n\n const options = {\n key: fs.readFileSync(process.env.SSL_KEY_PATH),\n cert: fs.readFileSync(process.env.SSL_CERT_PATH),\n };\n\n const httpsServer = https.createServer(options, ctx.__app);\n ctx.__httpsServer = httpsServer;\n httpsServer.listen(443, () => {\n if (typeof httpsServer?.address() === \"string\") {\n address = httpsServer.address() as string;\n // @ts-ignore\n } else if (httpsServer?.address()?.address === \"::\") {\n if (process.env.IS_DOCKER === \"true\") {\n address =\n process.env.PG_GRAPH_SERVER_URL || \"localhost\";\n }\n } else {\n // @ts-ignore\n address = httpsServer?.address()?.address || \"\";\n }\n\n exposed = true;\n\n console.log(`HTTPS Server is running on ${address}:443`);\n });\n\n Cadenza.createMetaTask(\n \"Shutdown HTTPS Server\",\n () => httpsServer.close(),\n \"Shuts down the HTTPS server\",\n )\n .doOn(\"meta.server_shutdown_requested\")\n .emitsAfter(\"meta.rest.shutdown:https\");\n };\n\n if (ctx.__networkMode === \"internal\") {\n createHttpServer(ctx);\n } else if (ctx.__networkMode === \"exposed\") {\n createHttpServer(ctx);\n createHttpsServer(ctx);\n } else if (ctx.__networkMode === \"exposed-high-sec\") {\n createHttpsServer(ctx);\n } else if (ctx.__networkMode === \"auto\") {\n // TODO: auto-detect based on trusted network or dev mode etc.\n createHttpServer(ctx);\n // createHttpsServer(ctx);\n }\n\n ctx.id = uuid();\n ctx.address = address;\n ctx.port = port;\n ctx.exposed = exposed;\n ctx.process_pid = process.pid;\n ctx.service_name = ctx.__serviceName;\n\n return ctx;\n },\n \"Configures network mode\",\n )\n .emitsAfter(\"meta.rest.network_configured\")\n .emitsOnFail(\"meta.rest.network_configuration_failed\"),\n )\n .emitsOnFail(\"meta.rest.failed\"),\n ),\n ],\n \"Bootstraps the REST server as socket fallback\",\n ).doOn(\"meta.service_registry.service_inserted\");\n\n Cadenza.createMetaTask(\n \"FetchClient\",\n (ctx) => {\n const {\n __serviceName,\n __serviceInstanceId,\n __serviceAddress,\n __servicePort,\n __protocol,\n } = ctx;\n\n const port = __protocol === \"https\" ? 443 : __servicePort;\n const URL = `${__protocol}://${__serviceAddress}:${port}`;\n\n Cadenza.createMetaTask(\n \"Send Handshake\",\n async (ctx) => {\n const response = await fetch(`${URL}/handshake`, {\n method: \"POST\",\n body: JSON.stringify(ctx),\n });\n const result = (await response.json()) as AnyObject;\n result.__serviceInstanceId = __serviceInstanceId;\n return result;\n },\n \"Sends handshake request\",\n )\n .doOn(\"meta.fetch.handshake_requested\")\n .emitsAfter(\"meta.fetch.handshake_complete\");\n\n Cadenza.createMetaTask(\n \"Delegate flow to REST server\",\n async (ctx, emit) => {\n if (ctx.__remoteRoutineName === undefined) {\n return;\n }\n\n let resultContext;\n try {\n const response = await fetch(`${URL}/delegation`, {\n method: \"POST\",\n body: JSON.stringify(ctx),\n });\n resultContext = await response.json();\n } catch (e) {\n resultContext = {\n __error: `Error: ${e}`,\n errored: true,\n ...ctx,\n ...ctx.__metadata,\n };\n } finally {\n emit(`meta.fetch.delegated:${ctx.__deputyExecId}`, resultContext);\n }\n\n return resultContext;\n },\n \"Sends delegation request\",\n )\n .doOn(\n `meta.service_registry.selected_instance_for_fetch:${__serviceInstanceId}`,\n `meta.service_registry.socket_failed:${__serviceInstanceId}`,\n )\n .emitsOnFail(\"meta.fetch.delegate_failed\");\n\n Cadenza.createMetaTask(\n \"Transmit signal to server\",\n async (ctx, emit) => {\n if (ctx.__signalName === undefined) {\n return;\n }\n\n let response;\n try {\n response = await fetch(`${URL}/signal`, {\n method: \"POST\",\n body: JSON.stringify(ctx),\n });\n response = (await response.json()) as AnyObject;\n\n if (ctx.__routineExecId) {\n emit(`meta.fetch.transmitted:${ctx.__routineExecId}`, response);\n }\n } catch (e) {\n response = {\n __error: `Error: ${e}`,\n errored: true,\n ...ctx,\n };\n }\n\n return response;\n },\n \"Sends signal request\",\n )\n .doOn(\n `meta.service_registry.selected_instance_for_fetch:${__serviceInstanceId}`,\n `meta.signal_controller.remote_signal_registered:${__serviceName}`,\n \"meta.signal_controller.wildcard_signal_registered\",\n )\n .emitsOnFail(\"meta.fetch.signal_transmission_failed\");\n\n Cadenza.createMetaTask(\n \"Request status\",\n async (ctx) => {\n let status;\n try {\n const response = await fetch(`${URL}/status`, { method: \"GET\" });\n status = await response.json();\n } catch (e) {\n status = {\n __error: `Error: ${e}`,\n errored: true,\n ...ctx,\n };\n }\n\n return status;\n },\n \"Requests status\",\n )\n .doOn(\"meta.fetch.status_check_requested\")\n .emitsAfter(\"meta.fetch.status_checked\")\n .emitsOnFail(\"meta.fetch.status_check_failed\");\n\n return true;\n },\n \"Manages REST client requests as fallback\",\n )\n .doOn(\"meta.service_registry.dependee_registered\")\n .emitsOnFail(\"meta.fetch.connect_failed\");\n }\n}\n","import Cadenza from \"../Cadenza\";\nimport { Server } from \"socket.io\";\nimport { IRateLimiterOptions, RateLimiterMemory } from \"rate-limiter-flexible\";\nimport xss from \"xss\";\nimport { AnyObject } from \"@cadenza.io/core\";\nimport { io } from \"socket.io-client\";\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 constructor() {\n Cadenza.createMetaRoutine(\n \"SocketServer\",\n [\n Cadenza.createMetaTask(\"Setup SocketServer\", (ctx) => {\n if (!ctx.__useSocket) {\n return;\n }\n\n const server = new Server(ctx.__httpsServer ?? ctx.__httpServer);\n ctx.__socketServer = server;\n\n const profile = ctx.__securityProfile ?? \"medium\";\n\n server.use((socket, next) => {\n // Origin check (CORS-like)\n const origin = socket.handshake.headers.origin;\n const allowedOrigins = [\"*\"]; // TODO From firewall_rule\n const networkType = ctx.__networkType ?? \"internal\"; // From meta-config\n let effectiveOrigin = origin || \"unknown\";\n if (networkType === \"internal\") effectiveOrigin = \"internal\"; // Assume trusted 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 // Rate limiting per socket/IP\n const limiterOptions: { [key: string]: IRateLimiterOptions } = {\n low: { points: Infinity, duration: 300 },\n medium: { points: 100, duration: 300 },\n high: { points: 50, duration: 60, blockDuration: 300 },\n };\n const limiter = new RateLimiterMemory(limiterOptions[profile]);\n socket.use((packet, next) => {\n limiter\n .consume(socket.handshake.address)\n .then(() => next())\n .catch((rej) => {\n if (rej.msBeforeNext > 0) {\n socket.emit(\"error\", {\n message: \"Rate limit exceeded\",\n retryAfter: rej.msBeforeNext / 1000,\n });\n } else {\n socket.disconnect(true);\n }\n });\n });\n\n // Sanitization for payloads\n socket.use((packet, next) => {\n if (profile !== \"low\") {\n const sanitize = (data: any) => {\n if (typeof data === \"string\") return xss(data);\n if (typeof data === \"object\") {\n for (const key in data) {\n data[key] = sanitize(data[key]);\n }\n }\n return data;\n };\n packet[1] = sanitize(packet[1]); // Sanitize event payload\n }\n next();\n });\n });\n }).then(\n Cadenza.createMetaTask(\n \"Start SocketServer\",\n (ctx) => {\n const server = ctx.__socketServer;\n\n server.on(\"connection\", (ws: any) => {\n ws.on(\"handshake\", (ctx: AnyObject) =>\n Cadenza.broker.emit(\"meta.socket.handshake\", ctx),\n );\n\n ws.on(\n \"delegation\",\n (ctx: AnyObject, callback: (ctx: AnyObject) => any) => {\n Cadenza.createEphemeralMetaTask(\n \"Resolve delegation\",\n callback,\n \"Resolves a delegation request using the provided callback from the client (.emitWithAck())\",\n )\n .doOn(\n `meta.node.ended_routine_execution:${ctx.__routineExecId}`,\n )\n .emitsAfter(\n `meta.socket.delegation_resolved:${ctx.__routineExecId}`,\n );\n\n Cadenza.createEphemeralMetaTask(\n \"Delegation progress update\",\n (ctx) => {\n if (ctx.__progress !== undefined)\n ws.emit(\"delegation_progress\", ctx);\n },\n \"Updates delegation progress\",\n {\n once: false,\n destroyCondition: (ctx: AnyObject) =>\n ctx.data.progress === 1.0,\n },\n )\n .doOn(\n `meta.node.routine_execution_progress:${ctx.__routineExecId}`,\n `meta.node.ended_routine_execution:${ctx.__routineExecId}`,\n )\n .emitsOnFail(\n `meta.socket.progress_failed:${ctx.__routineExecId}`,\n );\n\n Cadenza.broker.emit(\n \"meta.socket.delegation_requested\",\n ctx,\n );\n },\n );\n\n ws.on(\n \"signal\",\n (ctx: AnyObject, callback: (ctx: AnyObject) => any) => {\n if (\n Cadenza.broker\n .listObservedSignals()\n .includes(ctx.__signalName)\n ) {\n callback({\n __status: \"success\",\n __signalName: ctx.__signalName,\n });\n Cadenza.broker.emit(ctx.__signalName, ctx);\n } else {\n callback({\n __status: \"error\",\n __error: \"No such signal\",\n errored: true,\n });\n }\n },\n );\n\n ws.on(\n \"status_check\",\n (ctx: AnyObject, callback: (ctx: AnyObject) => any) => {\n Cadenza.createEphemeralMetaTask(\n \"Resolve status check\",\n callback,\n \"Resolves a status check request\",\n ).doAfter(Cadenza.serviceRegistry.getStatusTask);\n\n Cadenza.broker.emit(\n \"meta.socket.status_check_requested\",\n ctx,\n );\n },\n );\n\n ws.on(\"disconnect\", () => {\n Cadenza.broker.emit(\"meta.socket.disconnected\", {\n __wsId: ws.id,\n });\n });\n\n Cadenza.broker.emit(\"meta.socket.connected\", { __wsId: ws.id });\n });\n\n Cadenza.createMetaTask(\n \"Broadcast status\",\n (ctx) => server.emit(\"status_update\", ctx),\n \"Broadcasts the status of the server to all clients\",\n ).doOn(\"meta.service.updated\");\n\n Cadenza.createMetaTask(\n \"Shutdown SocketServer\",\n () => server.close(),\n \"Shuts down the socket server\",\n )\n .doOn(\"meta.socket_server_shutdown_requested\")\n .emitsAfter(\"meta.socket.shutdown\");\n\n return true;\n },\n \"Starts socket server and initiates meta-handling\",\n ).emitsOnFail(\"meta.socket.failed\"),\n ),\n ],\n \"Bootstraps the socket server\",\n ).doOn(\"meta.rest.network_configured\");\n\n Cadenza.createMetaTask(\n \"Connect to socket server\",\n (ctx) => {\n const {\n __serviceName,\n __serviceInstanceId,\n __serviceAddress,\n __servicePort,\n __protocol,\n } = ctx;\n\n const socketProtocol = __protocol === \"https\" ? \"wss\" : \"ws\";\n const port = __protocol === \"https\" ? 443 : __servicePort;\n\n const socket = io(`${socketProtocol}://${__serviceAddress}:${port}`, {\n reconnection: true,\n reconnectionAttempts: 20,\n reconnectionDelay: 1000,\n reconnectionDelayMax: 10000,\n randomizationFactor: 0.5,\n retries: 5,\n });\n\n socket.on(\"connect\", () => {\n Cadenza.broker.emit(\"meta.socket_client.connected\", ctx);\n socket.emit(\"handshake\", {\n __serviceInstanceId: ctx.__serviceInstanceId,\n }); // TODO\n });\n\n socket.on(\"delegation_progress\", (ctx) => {\n Cadenza.broker.emit(\n `meta.socket_client.delegation_progress:${ctx.__deputyExecId}`,\n { __serviceInstanceId, ...ctx },\n );\n });\n\n socket.on(\"status_update\", (status) => {\n Cadenza.broker.emit(\"meta.socket_client.status_received\", status);\n });\n\n socket.on(\"disconnect\", () => {\n Cadenza.broker.emit(\"meta.socket_client.disconnected\", {\n __serviceInstanceId,\n });\n });\n\n Cadenza.createMetaTask(\n `Delegate flow to ${__serviceInstanceId}`,\n async (ctx, emit) => {\n if (ctx.__remoteRoutineName === undefined) {\n return;\n }\n\n let resultContext;\n try {\n resultContext = await socket\n .timeout(ctx.__timeout ?? 0)\n .emitWithAck(\"delegation\", ctx);\n emit(\n `meta.socket_client.delegated:${ctx.__deputyExecId}`,\n resultContext,\n );\n } catch (e) {\n resultContext = {\n __error: `Timeout error: ${e}`,\n errored: true,\n ...ctx,\n ...ctx.__metadata,\n };\n }\n\n return resultContext;\n },\n `Delegate flow to instance ${__serviceInstanceId} of service ${__serviceName} with address ${__serviceAddress}:${__servicePort}`,\n )\n .doOn(\n `meta.service_registry.selected_instance_for_socket:${__serviceInstanceId}`,\n )\n .emitsOnFail(\n `meta.socket_client.delegate_failed:${__serviceInstanceId}`,\n );\n\n Cadenza.createMetaTask(\n `Transmit signal to ${__serviceInstanceId}`,\n async (ctx, emit) => {\n if (ctx.__signalName === undefined) {\n return;\n }\n\n let response;\n try {\n response = await socket\n .timeout(ctx.__timeout ?? 0)\n .emitWithAck(\"signal\", ctx);\n\n if (ctx.__routineExecId) {\n emit(\n `meta.socket_client.transmitted:${ctx.__routineExecId}`,\n response,\n );\n }\n } catch (e) {\n response = {\n __error: `Timeout error: ${e}`,\n errored: true,\n ...ctx,\n ...ctx.__metadata,\n };\n }\n\n return response;\n },\n `Transmits signal to instance ${__serviceInstanceId} of service ${__serviceName} with address ${__serviceAddress}:${__servicePort}`,\n )\n .doOn(\n `meta.service_registry.selected_instance_for_socket:${__serviceInstanceId}`,\n )\n .emitsOnFail(\n `meta.socket_client.signal_transmission_failed:${__serviceInstanceId}`,\n );\n\n Cadenza.createMetaTask(\n \"Shutdown SocketClient\",\n () => socket.close(),\n \"Shuts down the socket client\",\n )\n .doOn(\"meta.socket_shutdown_requested\") // TODO destroy tasks on close or instance removed? Also in fetch client\n .emitsAfter(\"meta.socket_client_shutdown_complete\");\n\n return true;\n },\n \"Connects to a specified socket server\",\n )\n .doOn(\"meta.service_registry.dependee_registered\")\n .emitsOnFail(\"meta.socket_client.connect_failed\");\n }\n}\n","import Cadenza from \"../Cadenza\";\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 constructor() {\n Cadenza.createMetaTask(\n \"Handle Signal Registration\",\n (ctx, emit) => {\n const { __signalName } = ctx;\n const firstChar = __signalName.charAt(0);\n const parts = __signalName.split(\".\");\n const domain = parts[0] === \"meta\" ? parts[1] : parts[0];\n const action = parts[parts.length - 1];\n\n emit(\"meta.signal_controller.signal_added\", {\n data: {\n name: __signalName,\n domain: domain,\n action: action,\n is_meta: parts[0] === \"meta\",\n service_name: Cadenza.serviceRegistry.serviceName,\n },\n });\n\n if (\n (firstChar === firstChar.toUpperCase() &&\n firstChar !== firstChar.toLowerCase()) ||\n firstChar === \"*\"\n ) {\n const serviceName = __signalName.split(\".\")[0];\n\n ctx.__listenerServiceName = Cadenza.serviceRegistry.serviceName;\n ctx.__emitterSignalName = __signalName.split(\".\").slice(1).join(\".\");\n ctx.__signalName = \"meta.signal_controller.foreign_signal_registered\";\n\n if (serviceName === \"*\") {\n emit(\"meta.signal_controller.wildcard_signal_registered\", ctx);\n } else {\n emit(\n `meta.signal_controller.remote_signal_registered:${serviceName}`,\n ctx,\n );\n }\n }\n return ctx;\n },\n \"Handles signal registration from a service instance\",\n ).doOn(\"meta.signal_broker.added\");\n\n Cadenza.createMetaTask(\"Handle foreign signal registration\", (ctx) => {\n const { __emitterSignalName, __listenerServiceName } = ctx;\n\n Cadenza.createSignalTransmissionTask(\n __emitterSignalName,\n __listenerServiceName,\n ).doOn(__emitterSignalName);\n\n return true;\n }).doOn(\"meta.signal_controller.foreign_signal_registered\");\n\n // TODO: Cleanup transmission tasks?\n\n Cadenza.createMetaTask(\n \"Add data to signal emission\",\n (ctx) => {\n const signalEmission = ctx.__signalEmission;\n\n if (!signalEmission) {\n return false;\n }\n\n return {\n data: {\n ...signalEmission,\n data: ctx,\n service_name: Cadenza.serviceRegistry.serviceName,\n service_instance_id: Cadenza.serviceRegistry.serviceInstanceId,\n signal_id: {\n subOperation: \"query\",\n table: \"signal_registry\",\n filter: {\n name: ctx.__signalLog.signal_name,\n service_name: Cadenza.serviceRegistry.serviceName,\n },\n fields: [\"id\"],\n return: \"id\",\n },\n },\n transaction: true,\n };\n },\n \"\",\n { isSubMeta: true, concurrency: 50 },\n )\n .doOn(\".*\")\n .emitsAfter(\"sub_meta.signal_controller.signal_emitted\");\n\n Cadenza.createMetaTask(\n \"Add metadata to signal consumption\",\n (ctx) => {\n return {\n data: {\n ...ctx.__data,\n serviceName: Cadenza.serviceRegistry.serviceName,\n serviceInstanceId: Cadenza.serviceRegistry.serviceInstanceId,\n signalId: {\n subOperation: \"query\",\n table: \"signal_registry\",\n filter: {\n name: ctx.__data.signalName,\n serviceName: Cadenza.serviceRegistry.serviceName,\n },\n fields: [\"id\"],\n return: \"id\",\n },\n },\n };\n },\n \"\",\n { isSubMeta: true, concurrency: 50 },\n )\n .doOn(\"meta.node.consumed_signal\")\n .emitsAfter(\"sub_meta.signal_controller.signal_consumed\");\n }\n}\n","import Cadenza from \"../../Cadenza\";\n\nexport default class TaskController {\n private static _instance: TaskController;\n public static get instance(): TaskController {\n if (!this._instance) this._instance = new TaskController();\n return this._instance;\n }\n\n constructor() {\n Cadenza.createMetaTask(\"Add data to task creation\", (ctx) => {\n return {\n data: {\n ...ctx.__task,\n serviceName: Cadenza.serviceRegistry.serviceName,\n },\n };\n })\n .doOn(\"meta.task.created\")\n .emitsAfter(\"meta.task_controller.task_created\");\n }\n}\n","import CadenzaService, {\n NetworkMode,\n SecurityProfile,\n ServerOptions,\n} from \"./Cadenza\";\nimport { AnyObject } from \"@cadenza.io/core\";\nimport TaskController from \"./graph/controllers/TaskController\";\nimport DatabaseTask from \"./graph/definition/DatabaseTask\";\nimport DeputyTask from \"./graph/definition/DeputyTask\";\nimport SignalTransmissionTask from \"./graph/definition/SignalTransmissionTask\";\nimport RestController from \"./network/RestController\";\nimport SocketController from \"./network/SocketController\";\nimport ServiceRegistry, {\n DeputyDescriptor,\n ServiceInstanceDescriptor,\n} from \"./registry/ServiceRegistry\";\nimport SignalController from \"./signals/SignalController\";\nimport {\n DbOperationType,\n DbOperationPayload,\n JoinDefinition,\n OpEffect,\n SortDirection,\n SubOperation,\n SubOperationType,\n ValueOrSubOp,\n} from \"./types/queryData\";\n\nexport default CadenzaService;\nexport {\n TaskController,\n DeputyTask,\n DatabaseTask,\n SignalTransmissionTask,\n RestController,\n SocketController,\n ServiceRegistry,\n ServiceInstanceDescriptor,\n DeputyDescriptor,\n SignalController,\n DbOperationType,\n SortDirection,\n JoinDefinition,\n SubOperationType,\n SubOperation,\n OpEffect,\n ValueOrSubOp,\n DbOperationPayload,\n SecurityProfile,\n NetworkMode,\n ServerOptions,\n AnyObject,\n};\n"],"mappings":"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","names":["Task","uuid","Task","uuid","uuid","ctx","uuid","RateLimiterMemory","_a","RateLimiterMemory","next","ctx","_a","AnyObject"]}
|
|
1
|
+
{"version":3,"sources":["../src/Cadenza.ts","../src/graph/definition/DeputyTask.ts","../src/graph/definition/DatabaseTask.ts","../src/registry/ServiceRegistry.ts","../src/graph/definition/SignalTransmissionTask.ts","../src/network/RestController.ts","../src/network/SocketController.ts","../src/signals/SignalController.ts","../src/graph/controllers/TaskController.ts","../src/index.ts"],"sourcesContent":["import Cadenza, {\n CadenzaMode,\n DebounceOptions,\n DebounceTask,\n EphemeralTask,\n EphemeralTaskOptions,\n GraphRegistry,\n GraphRoutine,\n GraphRunner,\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 \"./network/RestController\";\nimport SocketController from \"./network/SocketController\";\nimport SignalController from \"./signals/SignalController\";\nimport { DbOperationPayload, DbOperationType } from \"./types/queryData\";\nimport TaskController from \"./graph/controllers/TaskController\";\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 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 relatedServices?: string[][];\n};\n\nexport default class CadenzaService {\n public static broker: SignalBroker;\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\n static bootstrap(): void {\n if (this.isBootstrapped) return;\n this.isBootstrapped = true;\n\n Cadenza.bootstrap();\n this.broker = Cadenza.broker;\n this.runner = Cadenza.runner;\n this.metaRunner = Cadenza.metaRunner;\n this.registry = Cadenza.registry;\n SignalController.instance;\n TaskController.instance;\n this.serviceRegistry = ServiceRegistry.instance;\n RestController.instance;\n SocketController.instance;\n console.log(\"BOOTSTRAPPED\");\n }\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 protected static validateName(name: string): void {\n Cadenza.validateName(name);\n }\n\n public static get runStrategy() {\n return Cadenza.runStrategy;\n }\n\n public static setMode(mode: CadenzaMode) {\n Cadenza.setMode(mode);\n }\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 = `Deputy task for \"${routineName}\"`;\n\n options = {\n concurrency: 0,\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 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 static createUniqueDeputyTask(\n routineName: string,\n serviceName: string | undefined = undefined,\n options: TaskOptions = {},\n ) {\n options.isUnique = true;\n return this.createDeputyTask(routineName, serviceName, options);\n }\n\n static createUniqueMetaDeputyTask(\n routineName: string,\n serviceName: string | undefined = undefined,\n options: TaskOptions = {},\n ) {\n options.isMeta = true;\n return this.createUniqueDeputyTask(routineName, serviceName, options);\n }\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 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 static createSignalTransmissionTask(\n signalName: string,\n serviceName: string,\n options: TaskOptions = {},\n ): SignalTransmissionTask {\n this.bootstrap();\n Cadenza.validateName(signalName);\n Cadenza.validateName(serviceName);\n\n options = {\n concurrency: 0,\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 const name = `SignalTransmission task for \"${signalName}\"`;\n return new SignalTransmissionTask(\n name,\n signalName,\n serviceName,\n `Transmits signal \"${signalName}\" to 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 static createDatabaseTask(\n tableName: string,\n operation: DbOperationType,\n databaseServiceName: string | undefined = undefined,\n queryData: DbOperationPayload,\n options: TaskOptions = {},\n ) {\n this.bootstrap();\n Cadenza.validateName(tableName);\n Cadenza.validateName(operation);\n const tableNameFormatted = tableName\n .split(\"_\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\"\");\n const name = `${operation} ${tableName} in ${databaseServiceName ?? \"default database service\"}`;\n const description = `Executes a database \"${operation}\" on table \"${tableName}\" in ${databaseServiceName ?? \"default database service\"}`;\n const taskName = `db${operation.charAt(0).toUpperCase() + operation.slice(1)}${tableNameFormatted}`;\n\n options = {\n concurrency: 0,\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 databaseServiceName,\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 static createDatabaseInertTask(\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 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 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 static createCadenzaDBInsertTask(\n tableName: string,\n queryData: DbOperationPayload = {},\n options: TaskOptions = {},\n ) {\n options.isMeta = true;\n return this.createDatabaseInertTask(\n tableName,\n \"CadenzaDB\",\n queryData,\n options,\n );\n }\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 MetaTask (for meta-layer graphs) and registers it.\n * MetaTasks suppress further meta-signal emissions to prevent loops.\n * @param serviceName Unique identifier for the meta-task.\n * @param description Optional description.\n * @param options Optional service options. A service can either be connected to a database service and/or a list of related services.\n * Example RELATED_SERVICES=serviceId123,service1,http://address:port | serviceId124,service2,http://address:port\n * @returns The created MetaTask instance.\n * @throws Error if name invalid or duplicate.\n */\n static createCadenzaService(\n serviceName: string,\n description: string = \"\",\n options: ServerOptions = {},\n ) {\n this.bootstrap();\n Cadenza.validateName(serviceName);\n this.validateServiceName(serviceName);\n\n options = {\n loadBalance: true,\n useSocket: true,\n displayName: undefined,\n isMeta: false,\n port: parseInt(process.env.HTTP_PORT ?? \"3000\"),\n securityProfile:\n (process.env.SECURITY_PROFILE as SecurityProfile) ?? \"medium\",\n networkMode: (process.env.NETWORK_MODE as NetworkMode) ?? \"dev\",\n retryCount: 3,\n cadenzaDB: {\n connect: true,\n address: process.env.CADENZA_DB_ADDRESS ?? \"localhost\",\n port: parseInt(process.env.CADENZA_DB_PORT ?? \"5000\"),\n },\n relatedServices: process.env.RELATED_SERVICES\n ? process.env.RELATED_SERVICES.split(\"|\").map((s) =>\n s.trim().split(\",\"),\n )\n : [],\n ...options,\n };\n\n if (options.cadenzaDB?.connect) {\n Cadenza.broker.emit(\"meta.initializing_service\", {\n // Seed the CadenzaDB\n serviceInstance: {\n id: \"cadenza-db\",\n serviceName: \"CadenzaDB\",\n address: options.cadenzaDB?.address,\n port: options.cadenzaDB?.port,\n exposed: options.networkMode !== \"dev\",\n numberOfRunningGraphs: 0,\n isActive: true, // Assume it is deployed\n isNonResponsive: false,\n isBlocked: false,\n health: {},\n },\n });\n }\n\n options.relatedServices?.forEach((service) => {\n Cadenza.broker.emit(\"meta.initializing_service\", {\n serviceInstance: {\n id: service[0],\n serviceName: service[1],\n address: service[2].split(\":\")[0],\n port: service[2].split(\":\")[1] ?? 3000,\n exposed: options.networkMode !== \"dev\",\n numberOfRunningGraphs: 0,\n isActive: true, // Assume it is deployed\n isNonResponsive: false,\n isBlocked: false,\n health: {},\n },\n });\n });\n\n Cadenza.broker.emit(\"meta.create_service_requested\", {\n data: {\n name: serviceName,\n description: description,\n displayName: options.displayName,\n isMeta: options.isMeta,\n },\n __serviceName: serviceName,\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 });\n\n // TODO: restrict to one service creation per process?\n }\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 a standard Task and registers it in the GraphRegistry.\n * @param name Unique identifier for the task.\n * @param func The function or async generator to execute.\n * @param description Optional human-readable description for introspection.\n * @param options Optional task options.\n * @returns The created Task instance.\n * @throws Error if name is invalid or duplicate in registry.\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 MetaTask (for meta-layer graphs) and registers it.\n * MetaTasks suppress further meta-signal emissions to prevent loops.\n * @param name Unique identifier for the meta-task.\n * @param func The function or async generator to execute.\n * @param description Optional description.\n * @param options Optional task options.\n * @returns The created MetaTask instance.\n * @throws Error if name invalid or duplicate.\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 UniqueTask (executes once per execution ID, merging parents) and registers it.\n * Use for fan-in/joins after parallel branches.\n * @param name Unique identifier.\n * @param func Function receiving joinedContexts.\n * @param description Optional description.\n * @param options Optional task options.\n * @returns The created UniqueTask.\n * @throws Error if invalid.\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 UniqueMetaTask for meta-layer joins.\n * @param name Unique identifier.\n * @param func Function.\n * @param description Optional.\n * @param options Optional task options.\n * @returns The created UniqueMetaTask.\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 ThrottledTask (rate-limited by concurrency or custom groups) and registers it.\n * @param name Unique identifier.\n * @param func Function.\n * @param throttledIdGetter Optional getter for dynamic grouping (e.g., per-user).\n * @param description Optional.\n * @param options Optional task options.\n * @returns The created ThrottledTask.\n * @edge If no getter, throttles per task ID; use for resource protection.\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 ThrottledMetaTask for meta-layer throttling.\n * @param name Identifier.\n * @param func Function.\n * @param throttledIdGetter Optional getter.\n * @param description Optional.\n * @param options Optional task options.\n * @returns The created ThrottledMetaTask.\n */\n static createThrottledMetaTask(\n name: string,\n func: TaskFunction,\n throttledIdGetter: ThrottleTagGetter,\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 a DebounceTask (delays exec until quiet period) and registers it.\n * @param name Identifier.\n * @param func Function.\n * @param description Optional.\n * @param debounceTime Delay in ms (default 1000).\n * @param options Optional task options plus optional debounce config (e.g., leading/trailing).\n * @returns The created DebounceTask.\n * @edge Multiple triggers within time collapse to one exec.\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 DebouncedMetaTask for meta-layer debouncing.\n * @param name Identifier.\n * @param func Function.\n * @param description Optional.\n * @param debounceTime Delay in ms.\n * @param options Optional task options plus optional debounce config (e.g., leading/trailing).\n * @returns The created DebouncedMetaTask.\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 EphemeralTask (self-destructs after exec or condition) without default registration.\n * Useful for transients; optionally register if needed.\n * @param name Identifier (may not be unique if not registered).\n * @param func Function.\n * @param description Optional.\n * @param options Optional task options.\n * @returns The created EphemeralTask.\n * @edge Destruction triggered post-exec via Node/Builder; emits meta-signal for cleanup.\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 EphemeralMetaTask for meta-layer transients.\n * @param name Identifier.\n * @param func Function.\n * @param description Optional.\n * @param options Optional task options.\n * @returns The created EphemeralMetaTask.\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 GraphRoutine (named entry to starting tasks) and registers it.\n * @param name Unique identifier.\n * @param tasks Starting tasks (can be empty, but warns as no-op).\n * @param description Optional.\n * @returns The created GraphRoutine.\n * @edge If tasks empty, routine is valid but inert.\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 MetaRoutine for meta-layer entry points.\n * @param name Identifier.\n * @param tasks Starting tasks.\n * @param description Optional.\n * @returns The created MetaRoutine.\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 }\n}\n","import { v4 as uuid } from \"uuid\";\nimport {\n AnyObject,\n GraphContext,\n SchemaDefinition,\n Task,\n TaskResult,\n ThrottleTagGetter,\n} from \"@cadenza.io/core\";\nimport Cadenza from \"../../Cadenza\";\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 /**\n * Constructs a DeputyTask as a proxy for triggering a remote flow.\n * @param name - The local name of the DeputyTask.\n * @param remoteRoutineName - The name of the remote routine or task to trigger.\n * @param serviceName - The target service name (optional, defaults to local service if undefined).\n * @param description - A description of the task's purpose (default: '').\n * @param concurrency - The maximum number of concurrent executions (default: 0, unlimited).\n * @param timeout - Timeout in milliseconds (default: 0, handled by engine).\n * @param register - Whether to register the task in the registry (default: true).\n * @param isUnique - Whether to create a unique task (default: false). A unique task will only be executed once per execution ID, merging parents.\n * @param isMeta - Whether to create a meta task (default: false). A meta task is separate from the user logic and is only used for monitoring, optimization, and feature extensions.\n * @param isSubMeta\n * @param isHidden\n * @param getTagCallback - Callback for dynamic tagging, e.g., 'return \"default\"'.\n * @param inputSchema - Input schema definition.\n * @param validateInputContext - Whether to validate the input context (default: false).\n * @param outputSchema - Output schema definition.\n * @param validateOutputContext - Whether to validate the output context (default: false).\n * @param retryCount\n * @param retryDelay\n * @param retryDelayMax\n * @param retryDelayFactor\n * @emits {meta.deputy.delegation_requested} - Emitted on construction with task and service details.\n * @note Fallbacks should be handled externally via `.doOnFail`; timeouts are managed by the engine.\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: SchemaDefinition | undefined = undefined,\n validateInputContext: boolean = false,\n outputSchema: SchemaDefinition | 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 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 }\n\n if (context.__metadata.__skipRemoteExecution) {\n resolve(true);\n }\n\n const processId = uuid();\n\n context.__deputyExecId = processId;\n emit(\"meta.deputy.delegation_requested\", {\n ...context,\n });\n\n // Ephemeral meta-task for progress\n const progressTask = 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 },\n ).doOn(`meta.socket_client.delegation_progress:${processId}`);\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 resolve(responseCtx);\n }\n\n progressTask.destroy();\n },\n `Ephemeral resolver for deputy process ${processId}`,\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.emit(\"meta.deputy.created\", {\n __localTaskName: this.name,\n __remoteRoutineName: this.remoteRoutineName,\n __serviceName: this.serviceName,\n });\n }\n\n /**\n * Triggers the delegation flow via a signal to the meta-layer.\n * @param context - The GraphContext containing execution data.\n * @param emit\n * @param progressCallback - Callback to update progress (invoked by meta-layer).\n * @returns A Promise resolving with the task result or rejecting on error.\n * @emits {meta.deputy.executed} - Emitted with context to initiate delegation.\n * @edge Engine handles timeout and error, triggering `.doOnFail` if chained.\n * @note The resolution and progress are managed by ephemeral meta-tasks.\n */\n execute(\n context: GraphContext,\n emit: (signal: string, ctx: AnyObject) => void,\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 __remoteRoutineName: this.remoteRoutineName,\n __serviceName: this.serviceName,\n __contractId: metadata.__contractId ?? null,\n __metadata: {\n ...metadata,\n __deputyTaskId: this.id,\n },\n ...ctx,\n };\n\n return this.taskFunction(deputyContext, emit, progressCallback);\n }\n}\n","import DeputyTask from \"./DeputyTask\";\nimport {\n AnyObject,\n GraphContext,\n SchemaDefinition,\n TaskResult,\n ThrottleTagGetter,\n} from \"@cadenza.io/core\";\nimport { DbOperationPayload } from \"../../types/queryData\";\n\nexport default class DatabaseTask extends DeputyTask {\n private readonly queryData: DbOperationPayload;\n\n /**\n * Constructs a DatabaseTask to execute a database operation on a remote service.\n * @param name - The local name of the DatabaseTask.\n * @param taskName - The name of the database operation task to trigger (e.g., 'dbQueryTaskExecution').\n * @param serviceName - The target database service name (optional, defaults to 'DatabaseService').\n * @param description - A description of the task's purpose (default: '').\n * @param queryData - The query data object containing operation details (e.g., { __operation: 'query', __table: 'users' }).\n * @param concurrency - The maximum number of concurrent executions (default: 0, unlimited).\n * @param timeout - Timeout in milliseconds (default: 0, handled by engine).\n * @param register - Whether to register the task in the registry (default: true).\n * @param isUnique\n * @param isMeta\n * @param isSubMeta\n * @param isHidden\n * @param getTagCallback - Callback for dynamic tagging, e.g., 'return \"default\"'.\n * @param inputSchema - Input schema definition.\n * @param validateInputContext - Whether to validate the input context (default: false).\n * @param outputSchema - Output schema definition.\n * @param validateOutputContext - Whether to validate the output context (default: false).\n * @param retryCount\n * @param retryDelay\n * @param retryDelayMax\n * @param retryDelayFactor\n * @emits {meta.deputy.created} - Emitted on construction with task and service details.\n * @note Fallbacks via `.doOnFail` externally; timeouts managed by the engine.\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: SchemaDefinition | undefined = undefined,\n validateInputContext: boolean = false,\n outputSchema: SchemaDefinition | 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 * Triggers the database operation delegation flow via a signal to the meta-layer.\n * @param context - The GraphContext containing execution data.\n * @param emit\n * @param progressCallback - Callback to update progress (invoked by meta-layer).\n * @returns A Promise resolving with the task result or rejecting on error.\n * @emits {meta.deputy.executed} - Emitted with context including queryData to initiate delegation.\n * @edge Engine handles timeout and error, triggering `.doOnFail` if chained.\n * @note The resolution and progress are managed by ephemeral meta-tasks.\n */\n execute(\n context: GraphContext,\n emit: (signal: string, ctx: AnyObject) => void,\n progressCallback: (progress: number) => void,\n ): TaskResult {\n const ctx = context.getContext();\n const metadata = context.getMetadata();\n const dynamicQueryData = ctx.queryData;\n delete ctx.queryData;\n\n const deputyContext = {\n __localTaskName: this.name,\n __remoteRoutineName: this.remoteRoutineName,\n __serviceName: this.serviceName,\n __contractId: metadata.__contractId ?? null,\n __metadata: {\n ...metadata,\n __deputyTaskId: this.id,\n },\n queryData: {\n ...this.queryData,\n data: {\n ...ctx.data,\n },\n ...dynamicQueryData,\n },\n };\n\n return this.taskFunction(deputyContext, emit, progressCallback);\n }\n}\n","import { AnyObject, Task } from \"@cadenza.io/core\";\nimport Cadenza from \"../Cadenza\";\n\nexport interface ServiceInstanceDescriptor {\n id: string;\n address: string;\n port: number;\n serviceName: string;\n numberOfRunningGraphs?: number;\n isActive: boolean;\n isNonResponsive: boolean;\n isBlocked: boolean;\n health: AnyObject;\n exposed: boolean;\n}\n\nexport interface DeputyDescriptor {\n __serviceName: string;\n __remoteRoutineName: string;\n __localTaskName: string;\n}\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 serviceName: string | null = null;\n serviceInstanceId: string | null = null;\n useSocket: boolean = false;\n retryCount: number = 3;\n\n handleInstanceUpdateTask: Task;\n handleSocketStatusUpdateTask: Task;\n fullSyncTask: Task;\n getAllInstances: Task;\n doForEachInstance: Task;\n deleteInstance: Task;\n getBalancedInstance: Task;\n updateInstanceId: Task;\n getInstanceById: Task;\n getInstancesByServiceName: Task;\n handleDeputyRegistrationTask: Task;\n getStatusTask: Task;\n insertServiceTask: Task;\n insertServiceInstanceTask: Task;\n\n private constructor() {\n this.handleInstanceUpdateTask = Cadenza.createMetaTask(\n \"Handle Instance Update\",\n (ctx, emit) => {\n const { serviceInstance } = ctx;\n const { id, serviceName, address, port, exposed } = serviceInstance;\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.id === id);\n if (existing) {\n Object.assign(existing, serviceInstance); // Update\n } else {\n if (this.deputies.has(serviceName)) {\n emit(\"meta.service_registry.dependee_registered\", {\n __serviceName: serviceName,\n __serviceInstanceId: id,\n __serviceAddress: address,\n __servicePort: port,\n __protocol: exposed ? \"https\" : \"http\",\n });\n }\n instances.push(serviceInstance); // Insert\n }\n\n return true;\n },\n \"Handles instance update from DB signal\",\n )\n .emitsAfter(\"meta.service_registry.service_discovered\")\n .doOn(\n \"meta.initializing_service\",\n \"CadenzaDB.meta.service_instance.inserted\",\n \"CadenzaDB.meta.service_instance.updated\",\n );\n\n this.handleSocketStatusUpdateTask = Cadenza.createMetaTask(\n \"Handle Socket Status Update\",\n (ctx) => {\n const instanceId = ctx.__serviceInstanceId;\n const serviceName = ctx.__serviceName;\n const instances = this.instances.get(serviceName);\n const instance = instances?.find((i) => i.id === instanceId);\n if (instance) {\n instance.health = ctx.health;\n instance.numberOfRunningGraphs = ctx.numberOfRunningGraphs;\n }\n return true;\n },\n \"Handles status update from socket broadcast\",\n ).doOn(\"meta.socket_client.status_received\");\n\n this.fullSyncTask = Cadenza.createCadenzaDBQueryTask(\"service_instance\", {\n filter: {\n deleted: false,\n is_active: true,\n is_non_responsive: false,\n is_blocked: false,\n },\n fields: [\n \"id\",\n \"address\",\n \"port\",\n \"service_name\",\n \"is_active\",\n \"is_non_responsive\",\n \"is_blocked\",\n \"health\",\n \"exposed\",\n ],\n })\n .doOn(\n \"meta.service_registry_sync_requested\",\n \"meta.service_registry.instance_inserted\",\n )\n .then(\n Cadenza.createMetaTask(\"Split service instances\", function* (ctx) {\n const { serviceInstances } = ctx;\n if (!serviceInstances) return;\n for (const serviceInstance of serviceInstances) {\n yield serviceInstance;\n }\n }).then(this.handleInstanceUpdateTask),\n );\n\n this.updateInstanceId = Cadenza.createMetaTask(\n \"Update instance id\",\n (context) => {\n const { __id, __oldId } = context;\n const instance = this.instances.get(__oldId);\n if (!instance) return context;\n this.instances.set(__id, instance);\n this.instances.delete(__oldId);\n return context;\n },\n \"Updates instance id.\",\n ).doOn(\"meta.service.global_id_set\");\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.id === __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 this.deputies.set(__serviceName, {\n __serviceName,\n __remoteRoutineName: ctx.__remoteRoutineName,\n __localTaskName: ctx.__localTaskName,\n });\n\n for (const instance of this.instances.get(__serviceName)!) {\n emit(`meta.service_registry.dependee_registered:${instance.id}`, {\n __serviceName,\n __serviceInstanceId: instance.id,\n __serviceAddress: instance.address,\n __servicePort: instance.port,\n __protocol: instance.exposed ? \"https\" : \"http\",\n });\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(\"CadenzaDB.meta.service_instance.deleted\");\n\n this.getBalancedInstance = Cadenza.createMetaTask(\n \"Get balanced instance\",\n (context, emit) => {\n const { __serviceName, __triedInstances, __retries } = context;\n let retries = __retries ?? 0;\n let triedInstances = __triedInstances ?? [];\n\n const instances = this.instances\n .get(__serviceName)\n ?.filter((i) => i.isActive && !i.isNonResponsive && !i.isBlocked)\n .sort((a, b) => a.numberOfRunningGraphs! - b.numberOfRunningGraphs!);\n\n if (!instances || instances.length === 0 || retries > this.retryCount) {\n context.errored = true;\n context.__error = \"No active instances\";\n emit(\n `meta.service_registry.load_balance_failed:${context.__deputyExecId}`,\n context,\n );\n return context;\n }\n\n let instancesToTry = instances.filter(\n (i) => !__triedInstances?.includes(i.id),\n );\n\n if (instancesToTry.length === 0) {\n if (this.useSocket) {\n emit(\n `meta.service_registry.socket_failed:${context.__instance}`,\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 context.__instance = selected.id;\n context.__triedInstances = triedInstances;\n context.__triedInstances.push(selected.id);\n context.__retries = retries;\n\n if (this.useSocket) {\n emit(\n `meta.service_registry.selected_instance_for_socket:${context.__instance}`,\n context,\n );\n } else {\n emit(\n `meta.service_registry.selected_instance_for_fetch:${context.__instance}`,\n context,\n );\n }\n\n return context;\n },\n \"Gets a balanced instance for load balancing\",\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\n this.getStatusTask = Cadenza.createMetaTask(\"Get status\", (ctx) => {\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 self = this.instances\n .get(this.serviceName)\n ?.find((i) => i.id === this.serviceInstanceId);\n\n return {\n ...ctx,\n __status: \"ok\",\n __numberOfRunningGraphs: self?.numberOfRunningGraphs ?? 0,\n __health: self?.health ?? {},\n __active: self?.isActive ?? false,\n };\n }).doOn(\"meta.socket.status_check_requested\");\n\n this.insertServiceTask = Cadenza.createCadenzaDBInsertTask(\n \"service\",\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 .then(\n Cadenza.createMetaTask(\n \"Set service name\",\n ({ __serviceName }) => {\n this.serviceName = __serviceName;\n return true;\n },\n \"Sets service name after insertion\",\n ),\n )\n .emitsAfter(\"meta.service_registry.service_inserted\")\n .emitsOnFail(\"meta.service_registry.service_insertion_failed\");\n\n this.insertServiceInstanceTask = Cadenza.createCadenzaDBInsertTask(\n \"serviceInstance\",\n {},\n {\n inputSchema: {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n },\n address: {\n type: \"string\",\n },\n port: {\n type: \"number\",\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_non_responsive: {\n type: \"boolean\",\n },\n is_blocked: {\n type: \"boolean\",\n },\n exposed: {\n type: \"boolean\",\n },\n },\n required: [\n \"id\",\n \"address\",\n \"port\",\n \"process_pid\",\n \"service_name\",\n \"exposed\",\n ],\n },\n // validateInputContext: true,\n outputSchema: {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n },\n },\n required: [\"id\"],\n },\n // validateOutputContext: true,\n retryCount: 5,\n retryDelay: 1000,\n },\n )\n .doOn(\"meta.rest.network_configured\")\n .then(\n Cadenza.createMetaTask(\n \"Setup service\",\n (ctx) => {\n const { serviceInstance, data, __useSocket, __retryCount } = ctx;\n this.serviceInstanceId = data?.id ?? serviceInstance?.id;\n this.instances.set(\n data?.service_name ?? serviceInstance?.serviceName,\n [{ ...(data ?? serviceInstance) }],\n );\n this.useSocket = __useSocket;\n this.retryCount = __retryCount;\n return true;\n },\n \"Sets service instance id after insertion\",\n ).emitsAfter(\n \"meta.service_registry.instance_inserted\",\n \"meta.process_signal_queue_requested\",\n ),\n );\n\n Cadenza.createMetaTask(\n \"Handle service creation\",\n (ctx) => {\n if (!ctx.__cadenzaDBConnect) {\n ctx.__skipRemoteExecution = true;\n }\n\n console.log(\"service creation\");\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 }\n}\n","import {\n AnyObject,\n GraphContext,\n SchemaDefinition,\n Task,\n TaskResult,\n ThrottleTagGetter,\n} from \"@cadenza.io/core\";\nimport { v4 as uuid } from \"uuid\";\nimport Cadenza from \"../../Cadenza\";\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 DatabaseTask to execute a database operation on a remote service.\n * @param name - The local name of the Task.\n * @param signalName - The name of the signal to transmit to the service.\n * @param serviceName - The target database service name (optional, defaults to 'DatabaseService').\n * @param description - A description of the task's purpose (default: '').\n * @param concurrency - The maximum number of concurrent executions (default: 0, unlimited).\n * @param timeout - Timeout in milliseconds (default: 0, handled by engine).\n * @param register - Whether to register the task in the registry (default: true).\n * @param isUnique\n * @param isMeta\n * @param isSubMeta\n * @param isHidden\n * @param getTagCallback - Callback for dynamic tagging, e.g., 'return \"default\"'.\n * @param inputSchema - Input schema definition.\n * @param validateInputContext - Whether to validate the input context (default: false).\n * @param outputSchema - Output schema definition.\n * @param validateOutputContext - Whether to validate the output context (default: false).\n * @param retryCount\n * @param retryDelay\n * @param retryDelayMax\n * @param retryDelayFactor\n * @emits {meta.deputy.created} - Emitted on construction with task and service details.\n * @note Fallbacks via `.doOnFail` externally; timeouts managed by the engine.\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 = false,\n isSubMeta: boolean = false,\n isHidden: boolean = false,\n getTagCallback: ThrottleTagGetter | undefined = undefined,\n inputSchema: SchemaDefinition | undefined = undefined,\n validateInputContext: boolean = false,\n outputSchema: SchemaDefinition | 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 ): Promise<TaskResult> => {\n return new Promise((resolve, reject) => {\n const processId = uuid();\n\n context.__routineExecId = processId;\n emit(\"meta.signal_transmission.requested\", context);\n\n // Ephemeral meta-task for resolution\n Cadenza.createEphemeralMetaTask(\n `Resolve signal transmission for ${this.signalName}`,\n (responseCtx) => {\n if (responseCtx.errored) {\n reject(new Error(responseCtx.__error));\n } else {\n resolve(responseCtx);\n }\n },\n `Ephemeral resolver for signal transmission ${processId}`,\n ).doOn(\n `meta.socket_client.transmitted:${processId}`,\n `meta.fetch.transmitted:${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.serviceName = serviceName;\n this.signalName = signalName;\n }\n\n /**\n * Triggers the database operation delegation flow via a signal to the meta-layer.\n * @param context - The GraphContext containing execution data.\n * @param emit\n * @param progressCallback - Callback to update progress (invoked by meta-layer).\n * @returns A Promise resolving with the task result or rejecting on error.\n * @emits {meta.deputy.executed} - Emitted with context including queryData to initiate delegation.\n * @edge Engine handles timeout and error, triggering `.doOnFail` if chained.\n * @note The resolution and progress are managed by ephemeral meta-tasks.\n */\n execute(\n context: GraphContext,\n emit: (signal: string, ctx: AnyObject) => void,\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 __serviceName: this.serviceName,\n __contractId: metadata.__contractId ?? null,\n __metadata: {\n ...metadata,\n __deputyTaskId: this.id,\n },\n __signalName: this.signalName,\n ...ctx,\n };\n\n return this.taskFunction(deputyContext, emit, progressCallback);\n }\n}\n","import Cadenza from \"../Cadenza\";\nimport express, { Request, Response } from \"express\";\nimport bodyParser from \"body-parser\";\nimport helmet from \"helmet\";\nimport cors from \"cors\";\nimport { RateLimiterMemory } from \"rate-limiter-flexible\";\nimport { v4 as uuid } from \"uuid\";\nimport http from \"node:http\";\nimport fs from \"node:fs\";\nimport https from \"node:https\";\nimport fetch from \"node-fetch\";\nimport { AnyObject } from \"@cadenza.io/core\";\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 constructor() {\n Cadenza.createMetaRoutine(\n \"RestServer\",\n [\n Cadenza.createMetaTask(\n \"Setup Express app security\",\n (ctx) => {\n const app = express();\n app.use(bodyParser.json());\n\n switch (ctx.__securityProfile) {\n case \"low\":\n app.use(helmet());\n app.use(cors({ origin: \"*\" })); // Allow all origins (insecure for prod)\n break;\n\n case \"medium\":\n app.use(helmet());\n app.use(\n cors({\n origin: process.env.CORS_ORIGIN ?? \"*\",\n methods: [\"GET\", \"POST\"],\n }),\n );\n\n // Rate limiting (100 req/5min per IP)\n app.use((req: any, res: any, next: any) => {\n new RateLimiterMemory({\n points: 100,\n duration: 300,\n })\n .consume(req.ip)\n .then(() => next())\n .catch(() =>\n res.status(429).json({ error: \"Too many requests\" }),\n );\n });\n break;\n\n case \"high\":\n app.use(\n helmet({\n contentSecurityPolicy: {\n directives: { defaultSrc: [\"'self'\"] },\n }, // Strict CSP\n referrerPolicy: { policy: \"no-referrer\" },\n }),\n );\n\n if (!process.env.CORS_ORIGIN) {\n throw new Error(\n \"CORS_ORIGIN must be set for high security profile\",\n );\n }\n\n app.use(\n cors({\n origin: process.env.CORS_ORIGIN ?? \"*\",\n methods: [\"GET\", \"POST\"],\n credentials: true,\n }),\n );\n\n // Rate limiting (50 req/1min per IP, block on exceed)\n app.use((req: any, res: any, next: any) => {\n new RateLimiterMemory({\n points: 50,\n duration: 60,\n blockDuration: 300,\n })\n .consume(req.ip)\n .then(() => next())\n .catch((rej) => {\n if (rej.msBeforeNext > 0) {\n res.status(429).json({\n error: \"Too many requests\",\n retryAfter: rej.msBeforeNext / 1000,\n });\n } else {\n res\n .status(429)\n .json({ error: \"Rate limit exceeded, blocked\" });\n }\n });\n });\n break;\n }\n\n return { ...ctx, __app: app };\n },\n \"Sets up the Express server according to the security profile\",\n ).then(\n Cadenza.createMetaTask(\n \"Define RestServer\",\n (ctx) => {\n const app = ctx.__app;\n\n // TODO: add body validation based on profile\n\n app.post(\"/handshake\", (req: Request, res: Response) => {\n Cadenza.broker.emit(\"meta.rest.handshake\", req.body);\n res.send({ __status: \"success\" });\n });\n\n app.post(\"/delegation\", (req: Request, res: Response) => {\n const ctx = req.body;\n const routineExecId = ctx.__routineExecId || uuid();\n\n Cadenza.createEphemeralMetaTask(\n \"Resolve delegation\",\n (endCtx) =>\n res.json({\n __status: \"success\",\n __result: endCtx.__result,\n }),\n \"Resolves a delegation request\",\n )\n .doOn(`meta.node.ended_routine_execution:${routineExecId}`)\n .emitsAfter(`meta.rest.delegation_resolved:${routineExecId}`);\n\n Cadenza.createEphemeralMetaTask(\n \"Delegation progress update\",\n (progressCtx) => {\n if (progressCtx.__progress !== undefined) {\n // TODO: Progress updates via polling or long-polling for REST, but omit broadcasting as per instruction\n }\n },\n \"Updates delegation progress (polling-based for REST)\",\n {\n once: false,\n destroyCondition: (progressCtx: AnyObject) =>\n progressCtx.__progress === 1 ||\n progressCtx.__graphComplete,\n },\n ).doOn(\n `meta.node.routine_execution_progress:${routineExecId}`,\n `meta.node.ended_routine_execution:${routineExecId}`,\n );\n\n Cadenza.broker.emit(\"meta.rest.delegation_requested\", ctx);\n });\n\n app.post(\"/signal\", (req: Request, res: Response) => {\n const ctx = req.body;\n res.send({ __status: \"success\" });\n Cadenza.broker.emit(ctx.__signalName, ctx.__context);\n });\n\n app.get(\"/status\", (req: Request, res: Response) => {\n Cadenza.createEphemeralMetaTask(\n \"Resolve status check\",\n (statusCtx) => res.json(statusCtx),\n \"Resolves a status check request\",\n ).doAfter(Cadenza.serviceRegistry.getStatusTask);\n\n Cadenza.broker.emit(\n \"meta.rest.status_check_requested\",\n req.query,\n );\n });\n\n return true;\n },\n \"Starts REST server and initiates meta-handling\",\n )\n .then(\n Cadenza.createMetaTask(\n \"Configure network\",\n (ctx) => {\n let address: string = \"localhost\";\n let port: number = ctx.__port;\n let exposed: boolean = false;\n\n const createHttpServer = (ctx: any) => {\n const server = http.createServer(ctx.__app);\n ctx.__httpServer = server;\n server.listen(ctx.__port, () => {\n if (typeof server?.address() === \"string\") {\n address = server.address() as string;\n // @ts-ignore\n } else if (server?.address()?.address === \"::\") {\n if (process.env.NODE_ENV === \"development\") {\n address = \"localhost\";\n } else if (process.env.IS_DOCKER === \"true\") {\n address =\n process.env.PG_GRAPH_SERVER_URL || \"localhost\";\n }\n } else {\n // @ts-ignore\n address = server?.address()?.address || \"\";\n }\n\n console.log(`Server is running on ${address}:${port}`);\n });\n\n Cadenza.createMetaTask(\n \"Shutdown HTTP Server\",\n () => server.close(),\n \"Shuts down the HTTP server\",\n )\n .doOn(\"meta.server_shutdown_requested\")\n .emitsAfter(\"meta.rest.shutdown:http\");\n };\n\n const createHttpsServer = (ctx: any) => {\n if (\n !process.env.SSL_KEY_PATH ||\n !process.env.SSL_CERT_PATH\n ) {\n throw new Error(\n \"SSL_KEY_PATH and SSL_CERT_PATH must be set\",\n );\n }\n\n const options = {\n key: fs.readFileSync(process.env.SSL_KEY_PATH),\n cert: fs.readFileSync(process.env.SSL_CERT_PATH),\n };\n\n const httpsServer = https.createServer(options, ctx.__app);\n ctx.__httpsServer = httpsServer;\n httpsServer.listen(443, () => {\n if (typeof httpsServer?.address() === \"string\") {\n address = httpsServer.address() as string;\n // @ts-ignore\n } else if (httpsServer?.address()?.address === \"::\") {\n if (process.env.IS_DOCKER === \"true\") {\n address =\n process.env.PG_GRAPH_SERVER_URL || \"localhost\";\n }\n } else {\n // @ts-ignore\n address = httpsServer?.address()?.address || \"\";\n }\n\n exposed = true;\n\n console.log(`HTTPS Server is running on ${address}:443`);\n });\n\n Cadenza.createMetaTask(\n \"Shutdown HTTPS Server\",\n () => httpsServer.close(),\n \"Shuts down the HTTPS server\",\n )\n .doOn(\"meta.server_shutdown_requested\")\n .emitsAfter(\"meta.rest.shutdown:https\");\n };\n\n if (\n ctx.__networkMode === \"internal\" ||\n ctx.__networkMode === \"dev\"\n ) {\n createHttpServer(ctx);\n } else if (ctx.__networkMode === \"exposed\") {\n createHttpServer(ctx);\n createHttpsServer(ctx);\n } else if (ctx.__networkMode === \"exposed-high-sec\") {\n createHttpsServer(ctx);\n } else if (ctx.__networkMode === \"auto\") {\n // TODO: auto-detect based on trusted network or dev mode etc.\n createHttpServer(ctx);\n // createHttpsServer(ctx);\n }\n\n ctx.data = {\n id: uuid(),\n address: address,\n port: port,\n exposed: exposed,\n process_pid: process.pid,\n service_name: ctx.__serviceName,\n is_active: true,\n is_non_responsive: false,\n is_blocked: false,\n health: {},\n };\n\n return ctx;\n },\n \"Configures network mode\",\n )\n .emitsAfter(\"meta.rest.network_configured\")\n .emitsOnFail(\"meta.rest.network_configuration_failed\"),\n )\n .emitsOnFail(\"meta.rest.failed\"),\n ),\n ],\n \"Bootstraps the REST server as socket fallback\",\n ).doOn(\"meta.service_registry.service_inserted\");\n\n Cadenza.createMetaTask(\n \"FetchClient\",\n (ctx) => {\n const {\n __serviceName,\n __serviceInstanceId,\n __serviceAddress,\n __servicePort,\n __protocol,\n } = ctx;\n\n const port = __protocol === \"https\" ? 443 : __servicePort;\n const URL = `${__protocol}://${__serviceAddress}:${port}`;\n\n Cadenza.createMetaTask(\n \"Send Handshake\",\n async (ctx) => {\n const response = await fetch(`${URL}/handshake`, {\n method: \"POST\",\n body: JSON.stringify(ctx),\n });\n const result = (await response.json()) as AnyObject;\n result.__serviceInstanceId = __serviceInstanceId;\n return result;\n },\n \"Sends handshake request\",\n )\n .doOn(\"meta.fetch.handshake_requested\")\n .emitsAfter(\"meta.fetch.handshake_complete\");\n\n Cadenza.createMetaTask(\n \"Delegate flow to REST server\",\n async (ctx, emit) => {\n if (ctx.__remoteRoutineName === undefined) {\n return;\n }\n\n let resultContext;\n try {\n const response = await fetch(`${URL}/delegation`, {\n method: \"POST\",\n body: JSON.stringify(ctx),\n });\n resultContext = await response.json();\n } catch (e) {\n resultContext = {\n __error: `Error: ${e}`,\n errored: true,\n ...ctx,\n ...ctx.__metadata,\n };\n } finally {\n emit(`meta.fetch.delegated:${ctx.__deputyExecId}`, resultContext);\n }\n\n return resultContext;\n },\n \"Sends delegation request\",\n )\n .doOn(\n `meta.service_registry.selected_instance_for_fetch:${__serviceInstanceId}`,\n `meta.service_registry.socket_failed:${__serviceInstanceId}`,\n )\n .emitsOnFail(\"meta.fetch.delegate_failed\");\n\n Cadenza.createMetaTask(\n \"Transmit signal to server\",\n async (ctx, emit) => {\n if (ctx.__signalName === undefined) {\n return;\n }\n\n let response;\n try {\n response = await fetch(`${URL}/signal`, {\n method: \"POST\",\n body: JSON.stringify(ctx),\n });\n response = (await response.json()) as AnyObject;\n\n if (ctx.__routineExecId) {\n emit(`meta.fetch.transmitted:${ctx.__routineExecId}`, response);\n }\n } catch (e) {\n response = {\n __error: `Error: ${e}`,\n errored: true,\n ...ctx,\n };\n }\n\n return response;\n },\n \"Sends signal request\",\n )\n .doOn(\n `meta.service_registry.selected_instance_for_fetch:${__serviceInstanceId}`,\n `meta.signal_controller.remote_signal_registered:${__serviceName}`,\n \"meta.signal_controller.wildcard_signal_registered\",\n )\n .emitsOnFail(\"meta.fetch.signal_transmission_failed\");\n\n Cadenza.createMetaTask(\n \"Request status\",\n async (ctx) => {\n let status;\n try {\n const response = await fetch(`${URL}/status`, { method: \"GET\" });\n status = await response.json();\n } catch (e) {\n status = {\n __error: `Error: ${e}`,\n errored: true,\n ...ctx,\n };\n }\n\n return status;\n },\n \"Requests status\",\n )\n .doOn(\"meta.fetch.status_check_requested\")\n .emitsAfter(\"meta.fetch.status_checked\")\n .emitsOnFail(\"meta.fetch.status_check_failed\");\n\n return true;\n },\n \"Manages REST client requests as fallback\",\n )\n .doOn(\"meta.service_registry.dependee_registered\")\n .emitsOnFail(\"meta.fetch.connect_failed\");\n }\n}\n","import Cadenza from \"../Cadenza\";\nimport { Server } from \"socket.io\";\nimport { IRateLimiterOptions, RateLimiterMemory } from \"rate-limiter-flexible\";\nimport xss from \"xss\";\nimport { AnyObject } from \"@cadenza.io/core\";\nimport { io } from \"socket.io-client\";\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 constructor() {\n Cadenza.createMetaRoutine(\n \"SocketServer\",\n [\n Cadenza.createMetaTask(\"Setup SocketServer\", (ctx) => {\n if (!ctx.__useSocket) {\n return;\n }\n\n const server = new Server(ctx.__httpsServer ?? ctx.__httpServer);\n ctx.__socketServer = server;\n\n const profile = ctx.__securityProfile ?? \"medium\";\n\n server.use((socket, next) => {\n // Origin check (CORS-like)\n const origin = socket.handshake.headers.origin;\n const allowedOrigins = [\"*\"]; // TODO From firewall_rule\n const networkType = ctx.__networkType ?? \"internal\"; // From meta-config\n let effectiveOrigin = origin || \"unknown\";\n if (networkType === \"internal\") effectiveOrigin = \"internal\"; // Assume trusted 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 // Rate limiting per socket/IP\n const limiterOptions: { [key: string]: IRateLimiterOptions } = {\n low: { points: Infinity, duration: 300 },\n medium: { points: 100, duration: 300 },\n high: { points: 50, duration: 60, blockDuration: 300 },\n };\n const limiter = new RateLimiterMemory(limiterOptions[profile]);\n socket.use((packet, next) => {\n limiter\n .consume(socket.handshake.address)\n .then(() => next())\n .catch((rej) => {\n if (rej.msBeforeNext > 0) {\n socket.emit(\"error\", {\n message: \"Rate limit exceeded\",\n retryAfter: rej.msBeforeNext / 1000,\n });\n } else {\n socket.disconnect(true);\n }\n });\n });\n\n // Sanitization for payloads\n socket.use((packet, next) => {\n if (profile !== \"low\") {\n const sanitize = (data: any) => {\n if (typeof data === \"string\") return xss(data);\n if (typeof data === \"object\") {\n for (const key in data) {\n data[key] = sanitize(data[key]);\n }\n }\n return data;\n };\n packet[1] = sanitize(packet[1]); // Sanitize event payload\n }\n next();\n });\n });\n }).then(\n Cadenza.createMetaTask(\n \"Start SocketServer\",\n (ctx) => {\n const server = ctx.__socketServer;\n\n server.on(\"connection\", (ws: any) => {\n ws.on(\"handshake\", (ctx: AnyObject) =>\n Cadenza.broker.emit(\"meta.socket.handshake\", ctx),\n );\n\n ws.on(\n \"delegation\",\n (ctx: AnyObject, callback: (ctx: AnyObject) => any) => {\n Cadenza.createEphemeralMetaTask(\n \"Resolve delegation\",\n callback,\n \"Resolves a delegation request using the provided callback from the client (.emitWithAck())\",\n )\n .doOn(\n `meta.node.ended_routine_execution:${ctx.__routineExecId}`,\n )\n .emitsAfter(\n `meta.socket.delegation_resolved:${ctx.__routineExecId}`,\n );\n\n Cadenza.createEphemeralMetaTask(\n \"Delegation progress update\",\n (ctx) => {\n if (ctx.__progress !== undefined)\n ws.emit(\"delegation_progress\", ctx);\n },\n \"Updates delegation progress\",\n {\n once: false,\n destroyCondition: (ctx: AnyObject) =>\n ctx.data.progress === 1.0,\n },\n )\n .doOn(\n `meta.node.routine_execution_progress:${ctx.__routineExecId}`,\n `meta.node.ended_routine_execution:${ctx.__routineExecId}`,\n )\n .emitsOnFail(\n `meta.socket.progress_failed:${ctx.__routineExecId}`,\n );\n\n Cadenza.broker.emit(\n \"meta.socket.delegation_requested\",\n ctx,\n );\n },\n );\n\n ws.on(\n \"signal\",\n (ctx: AnyObject, callback: (ctx: AnyObject) => any) => {\n if (\n Cadenza.broker\n .listObservedSignals()\n .includes(ctx.__signalName)\n ) {\n callback({\n __status: \"success\",\n __signalName: ctx.__signalName,\n });\n Cadenza.broker.emit(ctx.__signalName, ctx);\n } else {\n callback({\n __status: \"error\",\n __error: \"No such signal\",\n errored: true,\n });\n }\n },\n );\n\n ws.on(\n \"status_check\",\n (ctx: AnyObject, callback: (ctx: AnyObject) => any) => {\n Cadenza.createEphemeralMetaTask(\n \"Resolve status check\",\n callback,\n \"Resolves a status check request\",\n ).doAfter(Cadenza.serviceRegistry.getStatusTask);\n\n Cadenza.broker.emit(\n \"meta.socket.status_check_requested\",\n ctx,\n );\n },\n );\n\n ws.on(\"disconnect\", () => {\n Cadenza.broker.emit(\"meta.socket.disconnected\", {\n __wsId: ws.id,\n });\n });\n\n Cadenza.broker.emit(\"meta.socket.connected\", { __wsId: ws.id });\n });\n\n Cadenza.createMetaTask(\n \"Broadcast status\",\n (ctx) => server.emit(\"status_update\", ctx),\n \"Broadcasts the status of the server to all clients\",\n ).doOn(\"meta.service.updated\");\n\n Cadenza.createMetaTask(\n \"Shutdown SocketServer\",\n () => server.close(),\n \"Shuts down the socket server\",\n )\n .doOn(\"meta.socket_server_shutdown_requested\")\n .emitsAfter(\"meta.socket.shutdown\");\n\n return true;\n },\n \"Starts socket server and initiates meta-handling\",\n ).emitsOnFail(\"meta.socket.failed\"),\n ),\n ],\n \"Bootstraps the socket server\",\n ).doOn(\"meta.rest.network_configured\");\n\n Cadenza.createMetaTask(\n \"Connect to socket server\",\n (ctx) => {\n const {\n __serviceName,\n __serviceInstanceId,\n __serviceAddress,\n __servicePort,\n __protocol,\n } = ctx;\n\n const socketProtocol = __protocol === \"https\" ? \"wss\" : \"ws\";\n const port = __protocol === \"https\" ? 443 : __servicePort;\n\n const socket = io(`${socketProtocol}://${__serviceAddress}:${port}`, {\n reconnection: true,\n reconnectionAttempts: 20,\n reconnectionDelay: 1000,\n reconnectionDelayMax: 10000,\n randomizationFactor: 0.5,\n retries: 5,\n });\n\n socket.on(\"connect\", () => {\n Cadenza.broker.emit(\"meta.socket_client.connected\", ctx);\n socket.emit(\"handshake\", {\n __serviceInstanceId: ctx.__serviceInstanceId,\n }); // TODO\n });\n\n socket.on(\"delegation_progress\", (ctx) => {\n Cadenza.broker.emit(\n `meta.socket_client.delegation_progress:${ctx.__deputyExecId}`,\n { __serviceInstanceId, ...ctx },\n );\n });\n\n socket.on(\"status_update\", (status) => {\n Cadenza.broker.emit(\"meta.socket_client.status_received\", status);\n });\n\n socket.on(\"disconnect\", () => {\n Cadenza.broker.emit(\"meta.socket_client.disconnected\", {\n __serviceInstanceId,\n });\n });\n\n Cadenza.createMetaTask(\n `Delegate flow to ${__serviceInstanceId}`,\n async (ctx, emit) => {\n if (ctx.__remoteRoutineName === undefined) {\n return;\n }\n\n let resultContext;\n try {\n resultContext = await socket\n .timeout(ctx.__timeout ?? 0)\n .emitWithAck(\"delegation\", ctx);\n emit(\n `meta.socket_client.delegated:${ctx.__deputyExecId}`,\n resultContext,\n );\n } catch (e) {\n resultContext = {\n __error: `Timeout error: ${e}`,\n errored: true,\n ...ctx,\n ...ctx.__metadata,\n };\n }\n\n return resultContext;\n },\n `Delegate flow to instance ${__serviceInstanceId} of service ${__serviceName} with address ${__serviceAddress}:${__servicePort}`,\n )\n .doOn(\n `meta.service_registry.selected_instance_for_socket:${__serviceInstanceId}`,\n )\n .emitsOnFail(\n `meta.socket_client.delegate_failed:${__serviceInstanceId}`,\n );\n\n Cadenza.createMetaTask(\n `Transmit signal to ${__serviceInstanceId}`,\n async (ctx, emit) => {\n if (ctx.__signalName === undefined) {\n return;\n }\n\n let response;\n try {\n response = await socket\n .timeout(ctx.__timeout ?? 0)\n .emitWithAck(\"signal\", ctx);\n\n if (ctx.__routineExecId) {\n emit(\n `meta.socket_client.transmitted:${ctx.__routineExecId}`,\n response,\n );\n }\n } catch (e) {\n response = {\n __error: `Timeout error: ${e}`,\n errored: true,\n ...ctx,\n ...ctx.__metadata,\n };\n }\n\n return response;\n },\n `Transmits signal to instance ${__serviceInstanceId} of service ${__serviceName} with address ${__serviceAddress}:${__servicePort}`,\n )\n .doOn(\n `meta.service_registry.selected_instance_for_socket:${__serviceInstanceId}`,\n )\n .emitsOnFail(\n `meta.socket_client.signal_transmission_failed:${__serviceInstanceId}`,\n );\n\n Cadenza.createMetaTask(\n \"Shutdown SocketClient\",\n () => socket.close(),\n \"Shuts down the socket client\",\n )\n .doOn(\"meta.socket_shutdown_requested\") // TODO destroy tasks on close or instance removed? Also in fetch client\n .emitsAfter(\"meta.socket_client_shutdown_complete\");\n\n return true;\n },\n \"Connects to a specified socket server\",\n )\n .doOn(\"meta.service_registry.dependee_registered\")\n .emitsOnFail(\"meta.socket_client.connect_failed\");\n }\n}\n","import Cadenza from \"../Cadenza\";\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 constructor() {\n Cadenza.createMetaTask(\n \"Handle Signal Registration\",\n (ctx, emit) => {\n const { __signalName } = ctx;\n const firstChar = __signalName.charAt(0);\n const parts = __signalName.split(\".\");\n const domain = parts[0] === \"meta\" ? parts[1] : parts[0];\n const action = parts[parts.length - 1];\n\n emit(\"meta.signal_controller.signal_added\", {\n data: {\n name: __signalName,\n domain: domain,\n action: action,\n is_meta: parts[0] === \"meta\",\n service_name: Cadenza.serviceRegistry.serviceName,\n },\n });\n\n if (\n (firstChar === firstChar.toUpperCase() &&\n firstChar !== firstChar.toLowerCase()) ||\n firstChar === \"*\"\n ) {\n const serviceName = __signalName.split(\".\")[0];\n\n ctx.__listenerServiceName = Cadenza.serviceRegistry.serviceName;\n ctx.__emitterSignalName = __signalName.split(\".\").slice(1).join(\".\");\n ctx.__signalName = \"meta.signal_controller.foreign_signal_registered\";\n\n if (serviceName === \"*\") {\n emit(\"meta.signal_controller.wildcard_signal_registered\", ctx);\n } else {\n emit(\n `meta.signal_controller.remote_signal_registered:${serviceName}`,\n ctx,\n );\n }\n }\n return ctx;\n },\n \"Handles signal registration from a service instance\",\n ).doOn(\"meta.signal_broker.added\");\n\n Cadenza.createMetaTask(\"Handle foreign signal registration\", (ctx) => {\n const { __emitterSignalName, __listenerServiceName } = ctx;\n\n Cadenza.createSignalTransmissionTask(\n __emitterSignalName,\n __listenerServiceName,\n ).doOn(__emitterSignalName);\n\n return true;\n }).doOn(\"meta.signal_controller.foreign_signal_registered\");\n\n // TODO: Cleanup transmission tasks?\n\n Cadenza.createMetaTask(\n \"Add data to signal emission\",\n (ctx) => {\n const signalEmission = ctx.__signalEmission;\n\n if (!signalEmission) {\n return false;\n }\n\n return {\n data: {\n ...signalEmission,\n data: ctx,\n service_name: Cadenza.serviceRegistry.serviceName,\n service_instance_id: Cadenza.serviceRegistry.serviceInstanceId,\n signal_id: {\n subOperation: \"query\",\n table: \"signal_registry\",\n filter: {\n name: ctx.__signalLog.signal_name,\n service_name: Cadenza.serviceRegistry.serviceName,\n },\n fields: [\"id\"],\n return: \"id\",\n },\n },\n transaction: true,\n };\n },\n \"\",\n { isSubMeta: true, concurrency: 50 },\n )\n .doOn(\".*\")\n .emitsAfter(\"sub_meta.signal_controller.signal_emitted\");\n\n Cadenza.createMetaTask(\n \"Add metadata to signal consumption\",\n (ctx) => {\n return {\n data: {\n ...ctx.__data,\n serviceName: Cadenza.serviceRegistry.serviceName,\n serviceInstanceId: Cadenza.serviceRegistry.serviceInstanceId,\n signalId: {\n subOperation: \"query\",\n table: \"signal_registry\",\n filter: {\n name: ctx.__data.signalName,\n serviceName: Cadenza.serviceRegistry.serviceName,\n },\n fields: [\"id\"],\n return: \"id\",\n },\n },\n };\n },\n \"\",\n { isSubMeta: true, concurrency: 50 },\n )\n .doOn(\"meta.node.consumed_signal\")\n .emitsAfter(\"sub_meta.signal_controller.signal_consumed\");\n }\n}\n","import Cadenza from \"../../Cadenza\";\n\nexport default class TaskController {\n private static _instance: TaskController;\n public static get instance(): TaskController {\n if (!this._instance) this._instance = new TaskController();\n return this._instance;\n }\n\n constructor() {\n Cadenza.createMetaTask(\"Add data to task creation\", (ctx) => {\n return {\n data: {\n ...ctx.__task,\n serviceName: Cadenza.serviceRegistry.serviceName,\n },\n };\n })\n .doOn(\"meta.task.created\")\n .emitsAfter(\"meta.task_controller.task_created\");\n }\n}\n","import CadenzaService, {\n NetworkMode,\n SecurityProfile,\n ServerOptions,\n} from \"./Cadenza\";\nimport { AnyObject } from \"@cadenza.io/core\";\nimport TaskController from \"./graph/controllers/TaskController\";\nimport DatabaseTask from \"./graph/definition/DatabaseTask\";\nimport DeputyTask from \"./graph/definition/DeputyTask\";\nimport SignalTransmissionTask from \"./graph/definition/SignalTransmissionTask\";\nimport RestController from \"./network/RestController\";\nimport SocketController from \"./network/SocketController\";\nimport ServiceRegistry, {\n DeputyDescriptor,\n ServiceInstanceDescriptor,\n} from \"./registry/ServiceRegistry\";\nimport SignalController from \"./signals/SignalController\";\nimport {\n DbOperationType,\n DbOperationPayload,\n JoinDefinition,\n OpEffect,\n SortDirection,\n SubOperation,\n SubOperationType,\n ValueOrSubOp,\n} from \"./types/queryData\";\n\nexport default CadenzaService;\nexport {\n TaskController,\n DeputyTask,\n DatabaseTask,\n SignalTransmissionTask,\n RestController,\n SocketController,\n ServiceRegistry,\n ServiceInstanceDescriptor,\n DeputyDescriptor,\n SignalController,\n DbOperationType,\n SortDirection,\n JoinDefinition,\n SubOperationType,\n SubOperation,\n OpEffect,\n ValueOrSubOp,\n DbOperationPayload,\n SecurityProfile,\n NetworkMode,\n ServerOptions,\n AnyObject,\n};\n"],"mappings":"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","names":["Task","uuid","Task","uuid","uuid","ctx","uuid","RateLimiterMemory","_a","RateLimiterMemory","next","ctx","_a","AnyObject"]}
|