@cadenza.io/service 1.9.12 → 1.9.13
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 +2 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/Cadenza.ts","../src/graph/definition/DeputyTask.ts","../src/graph/definition/DatabaseTask.ts","../src/registry/ServiceRegistry.ts","../src/graph/definition/SignalTransmissionTask.ts","../src/network/RestController.ts","../src/network/SocketController.ts","../src/signals/SignalController.ts","../src/graph/controllers/GraphMetadataController.ts","../node_modules/lodash-es/_freeGlobal.js","../node_modules/lodash-es/_root.js","../node_modules/lodash-es/_Symbol.js","../node_modules/lodash-es/_getRawTag.js","../node_modules/lodash-es/_objectToString.js","../node_modules/lodash-es/_baseGetTag.js","../node_modules/lodash-es/isObjectLike.js","../node_modules/lodash-es/isSymbol.js","../node_modules/lodash-es/_arrayMap.js","../node_modules/lodash-es/isArray.js","../node_modules/lodash-es/_baseToString.js","../node_modules/lodash-es/toString.js","../node_modules/lodash-es/_arrayReduce.js","../node_modules/lodash-es/_basePropertyOf.js","../node_modules/lodash-es/_deburrLetter.js","../node_modules/lodash-es/deburr.js","../node_modules/lodash-es/_asciiWords.js","../node_modules/lodash-es/_hasUnicodeWord.js","../node_modules/lodash-es/_unicodeWords.js","../node_modules/lodash-es/words.js","../node_modules/lodash-es/_createCompounder.js","../node_modules/lodash-es/snakeCase.js","../src/types/database.ts","../src/database/DatabaseController.ts"],"sourcesContent":["import CadenzaService, {\n NetworkMode,\n SecurityProfile,\n ServerOptions,\n} from \"./Cadenza\";\nimport {\n AnyObject,\n DebounceOptions,\n DebounceTask,\n EphemeralTask,\n EphemeralTaskOptions,\n GraphRoutine,\n Task,\n TaskFunction,\n TaskOptions,\n ThrottleTagGetter,\n} from \"@cadenza.io/core\";\nimport GraphMetadataController from \"./graph/controllers/GraphMetadataController\";\nimport DatabaseTask from \"./graph/definition/DatabaseTask\";\nimport DeputyTask from \"./graph/definition/DeputyTask\";\nimport SignalTransmissionTask from \"./graph/definition/SignalTransmissionTask\";\nimport RestController from \"./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 GraphMetadataController,\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 TaskOptions,\n ThrottleTagGetter,\n TaskFunction,\n Task,\n DebounceOptions,\n DebounceTask,\n EphemeralTaskOptions,\n EphemeralTask,\n GraphRoutine,\n};\n","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 GraphMetadataController from \"./graph/controllers/GraphMetadataController\";\nimport { SchemaDefinition } from \"./types/database\";\nimport { snakeCase } from \"lodash-es\";\nimport DatabaseController from \"./database/DatabaseController\";\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 interface DatabaseOptions {\n databaseType?: \"postgres\";\n databaseName?: string;\n poolSize?: number;\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 protected static serviceCreated = 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 this.serviceRegistry = ServiceRegistry.instance;\n SignalController.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 if (this.serviceCreated) return;\n this.bootstrap();\n Cadenza.validateName(serviceName);\n this.validateServiceName(serviceName);\n\n this.serviceRegistry.serviceName = 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 console.log(\"Creating service...\");\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 Cadenza.createEphemeralMetaTask(\"Initiate controllers\", () => {\n console.log(\"Initiating controllers...\");\n GraphMetadataController.instance;\n })\n .doOn(\"meta.service_registry.instance_inserted\")\n .emits(\"meta.process_signal_queue_requested\");\n\n this.serviceCreated = true;\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 static createDatabaseService(\n name: string,\n schema: SchemaDefinition,\n description: string = \"\",\n options: ServerOptions & DatabaseOptions = {},\n ) {\n if (this.serviceCreated) return;\n this.bootstrap();\n DatabaseController.instance; // Ensure DB controller is created\n this.serviceRegistry.serviceName = name;\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 databaseType: \"postgres\",\n databaseName: snakeCase(name),\n poolSize: parseInt(process.env.DATABASE_POOL_SIZE ?? \"10\"),\n ...options,\n };\n\n Cadenza.broker.emit(\"meta.database_init_requested\", {\n schema,\n databaseName: options.databaseName,\n });\n\n Cadenza.createEphemeralMetaTask(\"Set database connection\", () => {\n console.log(\"Database service created\");\n this.createCadenzaService(name, description, options);\n }).doOn(\"meta.database.setup_done\");\n }\n\n static createMetaDatabaseService(\n name: string,\n schema: SchemaDefinition,\n description: string = \"\",\n options: ServerOptions & DatabaseOptions = {},\n ) {\n this.bootstrap();\n options.isMeta = true;\n this.createDatabaseService(name, schema, 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 localTaskVersion: this.version,\n remoteRoutineName: this.remoteRoutineName,\n serviceName: this.serviceName,\n communicationType: \"delegation\",\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 __executionTraceId: metadata.__executionTraceId ?? null,\n __metadata: {\n ...metadata,\n __deputyTaskName: this.name,\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 __executionTraceId: metadata.__executionTraceId ?? null,\n __metadata: {\n ...metadata,\n __deputyTaskName: this.name,\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 clientCreated?: boolean;\n}\n\nexport interface DeputyDescriptor {\n serviceName: string;\n remoteRoutineName?: string;\n signalName?: string;\n localTaskName: string;\n communicationType: string;\n}\n\nexport interface RemoteSignalDescriptor {\n __listenerServiceName: string;\n __emitterSignalName: string;\n __signalName: string;\n __remoteServiceName: 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 private remoteSignals: Map<string, RemoteSignalDescriptor[]> = 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 handleRemoteSignalRegistrationTask: Task;\n getRemoteSignalsTask: 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 (\n this.deputies.has(serviceName) ||\n this.remoteSignals.has(serviceName)\n ) {\n const communicationTypes = Array.from(\n new Set(\n this.deputies\n .get(serviceName)!\n .map((d) => d.communicationType) ?? [],\n ),\n );\n\n if (\n !communicationTypes.includes(\"signal\") &&\n this.remoteSignals.has(serviceName)\n ) {\n communicationTypes.push(\"signal\");\n }\n\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 communicationTypes,\n });\n\n serviceInstance.clientCreated = true;\n\n for (const instance of this.instances.get(serviceName)!) {\n if (instance.clientCreated) continue;\n instance.clientCreated = true;\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 communicationTypes,\n });\n }\n }\n\n instances.push(serviceInstance); // Insert\n }\n\n return true;\n },\n \"Handles instance update from DB signal\",\n )\n .emits(\"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.handleRemoteSignalRegistrationTask = Cadenza.createMetaTask(\n \"Handle Remote Signal Registration\",\n (ctx) => {\n const { __remoteServiceName, __emitterSignalName } = ctx;\n let remoteSignals = this.remoteSignals.get(__remoteServiceName);\n if (!remoteSignals) {\n this.remoteSignals.set(__remoteServiceName, []);\n remoteSignals = this.remoteSignals.get(__remoteServiceName);\n }\n\n if (\n remoteSignals &&\n remoteSignals.findIndex(\n (s) => s.__emitterSignalName === __emitterSignalName,\n ) === -1\n ) {\n remoteSignals.push({\n __listenerServiceName: ctx.__listenerServiceName,\n __emitterSignalName: __emitterSignalName,\n __signalName: ctx.__signalName,\n __remoteServiceName,\n });\n return true;\n }\n\n return false;\n },\n \"Handles registration of remote signals\",\n );\n\n this.getRemoteSignalsTask = Cadenza.createMetaTask(\n \"Get remote signals\",\n (ctx) => {\n const { serviceName } = ctx;\n let remoteSignals = this.remoteSignals.get(serviceName) ?? [];\n remoteSignals = remoteSignals.concat(this.remoteSignals.get(\"*\") ?? []);\n\n return {\n __remoteSignals: remoteSignals,\n ...ctx,\n };\n },\n \"Gets remote signals\",\n ).doOn(\"meta.fetch.handshake_complete\");\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 if (!this.deputies.has(serviceName)) this.deputies.set(serviceName, []);\n\n this.deputies.get(serviceName)!.push({\n serviceName,\n remoteRoutineName: ctx.remoteRoutineName,\n signalName: ctx.signalName,\n localTaskName: ctx.localTaskName,\n communicationType: ctx.communicationType,\n });\n },\n ).doOn(\"meta.deputy.created\");\n\n this.getAllInstances = Cadenza.createMetaTask(\n \"Get all instances\",\n (context) => ({\n ...context,\n __instances: Array.from(this.instances.values()).flat(),\n }),\n \"Gets all instances.\",\n );\n\n this.doForEachInstance = Cadenza.createMetaTask(\n \"Do for each instance\",\n function* (context: AnyObject) {\n // @ts-ignore\n for (const instances of this.instances.values()) {\n for (const instance of instances) {\n yield { ...context, __instance: instance };\n }\n }\n }.bind(this),\n \"Yields each instance for branching.\",\n );\n\n this.deleteInstance = Cadenza.createMetaTask(\n \"Delete instance\",\n (context) => {\n const { __id } = context;\n this.instances.delete(__id);\n return context;\n },\n \"Deletes instance.\",\n ).doOn(\"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 .emits(\"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 ).emits(\"meta.service_registry.instance_inserted\"),\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\", ctx);\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 this.emit(\"meta.deputy.created\", {\n localTaskName: this.name,\n localTaskVersion: this.version,\n serviceName: this.serviceName,\n communicationType: \"signal\",\n signalName: this.signalName,\n });\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 __executionTraceId: metadata.__executionTraceId ?? null,\n __metadata: {\n ...metadata,\n __deputyTaskName: this.name,\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 // TODO\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 .emits(`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 .emits(\"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 .emits(\"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 .emits(\"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 \"Setup fetch client\",\n (ctx, emit) => {\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, emit) => {\n const response = await fetch(`${URL}/handshake`, {\n method: \"POST\",\n body: JSON.stringify(ctx.handshakeData),\n });\n const result = (await response.json()) as AnyObject;\n if (result.__status === \"error\" || result.status !== 200) {\n throw new Error(\n result.__error ??\n `Failed to connect to service ${serviceName} ${ctx.serviceInstanceId}`,\n );\n }\n\n console.log(\n `Connected to service ${serviceName} ${ctx.serviceInstanceId}`,\n result,\n );\n\n for (const communicationType of ctx.communicationTypes) {\n // TODO: Should be done in other situations as well\n emit(\"meta.fetch.service_communication_established\", {\n data: {\n serviceInstanceId: ctx.serviceInstanceId,\n serviceInstanceClientId:\n Cadenza.serviceRegistry.serviceInstanceId,\n communicationType,\n },\n });\n }\n\n return true;\n },\n \"Sends handshake request\",\n {\n retryCount: 20,\n retryDelay: 200,\n retryDelayMax: 5000,\n retryDelayFactor: 1.5,\n },\n )\n .doOn(`meta.fetch.handshake_requested:${serviceInstanceId}`)\n .emits(\"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 .emits(\"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 .then(\n Cadenza.createMetaTask(\n \"Prepare handshake\",\n (ctx, emit) => {\n const { serviceInstanceId, serviceName } = ctx;\n emit(`meta.fetch.handshake_requested:${serviceInstanceId}`, {\n serviceInstanceId,\n serviceName,\n handshakeData: {\n // JWT token...\n },\n });\n },\n \"Prepares handshake\",\n ),\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 .emits(\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 .emits(\"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 .emits(\"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 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 return ctx;\n },\n \"Handles signal registration from a service instance\",\n )\n .then(\n Cadenza.createMetaTask(\n \"Handle foreign signal registration\",\n (ctx, emit) => {\n const { __signalName } = ctx;\n const firstChar = __signalName.charAt(0);\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\n .split(\".\")\n .slice(1)\n .join(\".\");\n ctx.__signalName =\n \"meta.signal_controller.foreign_signal_registered\";\n ctx.__remoteServiceName = serviceName;\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 },\n ).then(Cadenza.serviceRegistry.handleRemoteSignalRegistrationTask),\n )\n .doOn(\"meta.signal_broker.added\");\n\n Cadenza.createMetaTask(\n \"Forward signal observations to remote service\",\n (ctx, emit) => {\n const { __remoteSignals } = ctx;\n\n for (const remoteSignal of __remoteSignals) {\n if (remoteSignal.__remoteServiceName === \"*\") {\n emit(\n \"meta.signal_controller.wildcard_signal_registered\",\n remoteSignal,\n );\n } else {\n emit(\n `meta.signal_controller.remote_signal_registered:${remoteSignal.__remoteServiceName}`,\n remoteSignal,\n );\n }\n }\n\n return true;\n },\n \"Forwards signal observations to remote service\",\n ).doAfter(Cadenza.serviceRegistry.getRemoteSignalsTask);\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 },\n };\n },\n \"\",\n { isSubMeta: true, concurrency: 100 },\n )\n .doOn(\".*\")\n .emits(\"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 },\n };\n },\n \"\",\n { isSubMeta: true, concurrency: 100 },\n )\n .doOn(\"meta.node.consumed_signal\")\n .emits(\"sub_meta.signal_controller.signal_consumed\");\n }\n}\n","import Cadenza from \"../../Cadenza\";\n\nexport default class GraphMetadataController {\n private static _instance: GraphMetadataController;\n public static get instance(): GraphMetadataController {\n if (!this._instance) this._instance = new GraphMetadataController();\n return this._instance;\n }\n\n constructor() {\n Cadenza.createMetaTask(\"Handle task creation\", (ctx) => {\n return {\n data: {\n ...ctx.data,\n service_name: Cadenza.serviceRegistry.serviceName,\n // input_context_schema_id: ctx.data.inputContextSchema ? { // TODO\n //\n // } : null,\n // output_context_schema_id: ctx.data.outputContextSchema ? {\n //\n // } : null,\n },\n };\n })\n .doAfter(Cadenza.registry.registerTask)\n .emits(\"meta.graph_metadata.task_created\");\n\n Cadenza.createMetaTask(\"Handle task update\", (ctx) => {\n return {\n ...ctx,\n filter: {\n ...ctx.filter,\n service_name: Cadenza.serviceRegistry.serviceName,\n },\n };\n })\n .doOn(\"meta.task.layer_index_changed\", \"meta.task.destroyed\")\n .emits(\"meta.graph_metadata.task_updated\");\n\n Cadenza.createMetaTask(\"Handle task relationship creation\", (ctx) => {\n return {\n data: {\n ...ctx.data,\n service_name: Cadenza.serviceRegistry.serviceName,\n },\n };\n })\n .doOn(\"meta.task.relationship_added\")\n .emits(\"meta.graph_metadata.task_relationship_created\");\n\n Cadenza.createMetaTask(\"Handle task signal observation\", (ctx) => {\n const firstChar = ctx.data.signalName.charAt(0);\n let signalServiceName;\n if (\n firstChar === firstChar.toUpperCase() &&\n firstChar !== firstChar.toLowerCase()\n ) {\n signalServiceName = ctx.data.signalName.split(\".\")[0];\n }\n return {\n data: {\n ...ctx.data,\n task_service_name: Cadenza.serviceRegistry.serviceName,\n signal_service_name:\n signalServiceName ?? Cadenza.serviceRegistry.serviceName,\n },\n };\n })\n .doOn(\"meta.task.observed_signal\")\n .emits(\"meta.graph_metadata.task_signal_observed\");\n\n Cadenza.createMetaTask(\"Handle task signal attachment\", (ctx) => {\n return {\n data: {\n ...ctx.data,\n service_name: Cadenza.serviceRegistry.serviceName,\n },\n };\n })\n .doOn(\"meta.task.attached_signal\")\n .emits(\"meta.graph_metadata.task_attached_signal\");\n\n Cadenza.createMetaTask(\"Handle task unsubscribing signal\", (ctx) => {\n return {\n data: {\n deleted: true,\n },\n filter: {\n ...ctx.filter,\n service_name: Cadenza.serviceRegistry.serviceName,\n },\n };\n })\n .doOn(\"meta.task.unsubscribed_signal\")\n .emits(\"meta.graph_metadata.task_unsubscribed_signal\");\n\n Cadenza.createMetaTask(\"Handle task detaching signal\", (ctx) => {\n return {\n data: {\n deleted: true,\n },\n filter: {\n ...ctx.filter,\n service_name: Cadenza.serviceRegistry.serviceName,\n },\n };\n })\n .doOn(\"meta.task.detached_signal\")\n .emits(\"meta.graph_metadata.task_detached_signal\");\n\n Cadenza.createMetaTask(\"Handle routine creation\", (ctx) => {\n return {\n data: {\n ...ctx.data,\n service_name: Cadenza.serviceRegistry.serviceName,\n },\n };\n })\n .doAfter(Cadenza.registry.registerRoutine)\n .emits(\"meta.graph_metadata.routine_created\");\n\n Cadenza.createMetaTask(\"Handle routine update\", (ctx) => {\n return {\n ...ctx,\n filter: {\n ...ctx.filter,\n service_name: Cadenza.serviceRegistry.serviceName,\n },\n };\n })\n .doOn(\"meta.routine.destroyed\")\n .emits(\"meta.graph_metadata.routine_updated\");\n\n Cadenza.createMetaTask(\"Handle adding task to routine\", (ctx) => {\n return {\n data: {\n ...ctx.data,\n service_name: Cadenza.serviceRegistry.serviceName,\n },\n };\n })\n .doOn(\"meta.routine.task_added\")\n .emits(\"meta.graph_metadata.task_added_to_routine\");\n\n Cadenza.createMetaTask(\"Handle new trace\", (ctx) => {\n return {\n data: {\n ...ctx.data,\n service_name: Cadenza.serviceRegistry.serviceName,\n service_instance_id: Cadenza.serviceRegistry.serviceInstanceId,\n context_id: {\n subOperation: \"insert\",\n table: \"context\",\n data: {\n uuid: ctx.data.context.id,\n context: ctx.data.context.context,\n is_meta: ctx.data.isMeta,\n },\n return: \"id\",\n },\n },\n };\n }).doOn(\"meta.runner.new_trace\");\n\n Cadenza.createMetaTask(\n \"Handle routine execution creation\",\n (ctx) => {\n const context = ctx.data.context;\n delete ctx.data.context;\n return {\n data: {\n ...ctx.data,\n service_name: Cadenza.serviceRegistry.serviceName,\n service_instance_id: Cadenza.serviceRegistry.serviceInstanceId,\n context_id: {\n subOperation: \"insert\",\n table: \"context\",\n data: {\n uuid: context.id,\n context: context.context,\n is_meta: ctx.data.isMeta,\n },\n return: \"id\",\n },\n },\n };\n },\n \"Handles routine execution creation\",\n { concurrency: 100, isSubMeta: true },\n )\n .doOn(\"meta.runner.added_tasks\")\n .emits(\"meta.graph_metadata.routine_execution_created\");\n\n Cadenza.createMetaTask(\n \"Handle task execution creation\",\n (ctx) => {\n const context = ctx.data.context;\n delete ctx.data.context;\n return {\n data: {\n ...ctx.data,\n service_name: Cadenza.serviceRegistry.serviceName,\n service_instance_id: Cadenza.serviceRegistry.serviceInstanceId,\n context_id: {\n subOperation: \"insert\",\n table: \"context\",\n data: {\n uuid: context.id,\n context: context.context,\n is_meta: ctx.data.isMeta,\n },\n return: \"id\",\n },\n },\n };\n },\n \"Handles task execution creation\",\n { concurrency: 100, isSubMeta: true },\n )\n .doOn(\"meta.node.scheduled\")\n .emits(\"meta.graph_metadata.task_execution_created\");\n\n Cadenza.createMetaTask(\n \"Handle task execution relationship creation\",\n (ctx) => {\n return {\n ...ctx,\n filter: {\n ...ctx.filter,\n service_name: Cadenza.serviceRegistry.serviceName,\n },\n };\n },\n \"Handles task execution relationship creation\",\n { concurrency: 100, isSubMeta: true },\n )\n .doOn(\"meta.node.mapped\")\n .emits(\"meta.graph_metadata.relationship_executed\");\n }\n}\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\nexport default arrayReduce;\n","/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n}\n\nexport default basePropertyOf;\n","import basePropertyOf from './_basePropertyOf.js';\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n};\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\nexport default deburrLetter;\n","import deburrLetter from './_deburrLetter.js';\nimport toString from './toString.js';\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;\n\n/** Used to compose unicode capture groups. */\nvar rsCombo = '[' + rsComboRange + ']';\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\nexport default deburr;\n","/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n return string.match(reAsciiWord) || [];\n}\n\nexport default asciiWords;\n","/** Used to detect strings that need a more robust regexp to match words. */\nvar reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n/**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\nfunction hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n}\n\nexport default hasUnicodeWord;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\",\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq;\n\n/** Used to match complex or compound words. */\nvar reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n].join('|'), 'g');\n\n/**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n}\n\nexport default unicodeWords;\n","import asciiWords from './_asciiWords.js';\nimport hasUnicodeWord from './_hasUnicodeWord.js';\nimport toString from './toString.js';\nimport unicodeWords from './_unicodeWords.js';\n\n/**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\nfunction words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n}\n\nexport default words;\n","import arrayReduce from './_arrayReduce.js';\nimport deburr from './deburr.js';\nimport words from './words.js';\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\";\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n}\n\nexport default createCompounder;\n","import createCompounder from './_createCompounder.js';\n\n/**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\nvar snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n});\n\nexport default snakeCase;\n","import { AnyObject } from \"@cadenza.io/core\";\n\nexport type SchemaType =\n | \"varchar\"\n | \"text\"\n | \"int\"\n | \"bigint\" // Added for BIGINT\n | \"decimal\"\n | \"boolean\"\n | \"array\"\n | \"object\"\n | \"jsonb\"\n | \"uuid\"\n | \"timestamp\"\n | \"date\"\n | \"geo_point\"\n | \"bytea\"\n | \"any\";\n\nexport const SCHEMA_TYPES = [\n \"varchar\",\n \"text\",\n \"int\",\n \"bigint\",\n \"decimal\",\n \"boolean\",\n \"array\",\n \"object\",\n \"jsonb\",\n \"uuid\",\n \"timestamp\",\n \"date\",\n \"geo_point\",\n \"bytea\",\n \"any\",\n] as SchemaType[];\n\nexport type SchemaConstraints = {\n min?: number;\n max?: number;\n minLength?: number;\n maxLength?: number;\n pattern?: string;\n enum?: any[];\n multipleOf?: number;\n format?: \"email\" | \"url\" | \"date-time\" | \"uuid\" | \"custom\";\n oneOf?: any[];\n appendOnly?: boolean;\n check?: string;\n precision?: number; // Added for decimal/bigint\n scale?: number; // Added for decimal\n};\n\nexport interface FieldDefinition {\n type: SchemaType;\n primary?: boolean;\n index?: boolean;\n unique?: boolean;\n default?: any;\n required?: boolean;\n nullable?: boolean;\n encrypted?: boolean;\n constraints?: SchemaConstraints;\n references?: string;\n items?: FieldDefinition;\n description?: string;\n generated?: \"uuid\" | \"timestamp\" | \"now\" | \"autoIncrement\"; // Added autoIncrement\n onDelete?: \"cascade\" | \"set null\" | \"no action\" | \"set default\" | \"restrict\";\n onUpdate?: \"cascade\" | \"set null\" | \"no action\" | \"set default\"; // Added for constraint cascade\n}\n\nexport type DbOperationType = \"query\" | \"insert\" | \"update\" | \"delete\";\n\nexport interface TableDefinition {\n fields: Record<string, FieldDefinition>;\n meta?: {\n description?: string;\n tags?: string[];\n shardKey?: string;\n partitionHint?: string;\n appendOnly?: boolean;\n encryptedFields?: string[];\n };\n indexes?: string[][];\n uniqueConstraints?: string[][];\n primaryKey?: string[];\n fullTextIndexes?: string[][];\n foreignKeys?: {\n tableName: string;\n fields: string[];\n referenceFields: string[];\n }[];\n triggers?: Record<\n string,\n {\n when: \"before\" | \"after\";\n event: \"insert\" | \"update\" | \"delete\";\n function: string;\n }\n >;\n customSignals?: {\n triggers?: {\n [key in DbOperationType]?: (\n | string\n | { signal: string; condition?: (ctx: AnyObject) => boolean }\n )[];\n }; // Signals to observe before action\n emissions?: {\n [key in DbOperationType]?: (\n | string\n | { signal: string; condition?: (ctx: AnyObject) => boolean }\n )[];\n }; // Signals to emit after action\n };\n initialData?: { fields: string[]; data: any[][] };\n}\n\nexport interface SchemaDefinition {\n version?: number;\n tables: Record<string, TableDefinition>;\n relations?: Record<\n string,\n {\n on: string;\n type?: \"one-to-one\" | \"one-to-many\" | \"many-to-one\" | \"many-to-many\";\n }\n >;\n meta?: {\n defaultEncoding?: \"utf8\" | \"base64\";\n autoIndex?: boolean;\n relationsVersion?: number;\n dropExisting?: boolean;\n };\n}\n","import {\n DbOperationType,\n SchemaDefinition,\n SCHEMA_TYPES,\n FieldDefinition,\n TableDefinition,\n} from \"../types/database\";\nimport Cadenza, { DatabaseOptions, ServerOptions } from \"../Cadenza\";\nimport { Pool, PoolClient } from \"pg\";\nimport { snakeCase } from \"lodash-es\";\nimport { AnyObject } from \"@cadenza.io/core\";\nimport {\n DbOperationPayload,\n JoinDefinition,\n SubOperation,\n} from \"../types/queryData\";\n\nexport default class DatabaseController {\n private static _instance: DatabaseController;\n public static get instance(): DatabaseController {\n if (!this._instance) this._instance = new DatabaseController();\n return this._instance;\n }\n\n dbClient = new Pool({\n user: process.env.DATABASE_USER ?? \"postgres\",\n host: process.env.DATABASE_ADDRESS ?? \"localhost\",\n port: parseInt(process.env.DATABASE_PORT ?? \"5432\"),\n database: \"postgres\",\n password: process.env.DATABASE_PASSWORD ?? \"03gibnEF\",\n });\n\n reset() {\n this.dbClient.end();\n }\n\n constructor() {\n Cadenza.createMetaRoutine(\n \"DatabaseServiceInit\",\n [\n // Database health check\n // Create database role\n // Create schema version table\n Cadenza.createMetaTask(\n \"Create database\",\n async (ctx) => {\n const { databaseName } = ctx;\n try {\n if (\n !databaseName.split(\"\").every((c: string) => /[a-z_]/.test(c))\n ) {\n throw new Error(\n `Invalid database name ${databaseName}. Names must only contain lowercase alphanumeric characters and underscores`,\n );\n }\n await this.dbClient.query(`CREATE DATABASE ${databaseName}`);\n console.log(`Database ${databaseName} created`);\n // Update dbClient to use the new database\n this.dbClient = new Pool({\n user: process.env.DATABASE_USER ?? \"postgres\",\n host: process.env.DATABASE_ADDRESS ?? \"localhost\",\n port: parseInt(process.env.DATABASE_PORT ?? \"5432\"),\n database: databaseName,\n password: process.env.DATABASE_PASSWORD ?? \"03gibnEF\",\n });\n return true;\n } catch (error: any) {\n if (error.code === \"42P04\") {\n console.log(\"Database already exists\");\n // Database already exists\n return true;\n }\n throw new Error(`Failed to create database: ${error.message}`);\n }\n },\n \"Creates the target database if it doesn't exist\",\n ).then(\n Cadenza.createMetaTask(\n \"Validate schema\",\n (ctx) => {\n const { schema } = ctx as {\n schema: SchemaDefinition;\n options: ServerOptions & DatabaseOptions;\n };\n if (!schema?.tables || typeof schema.tables !== \"object\") {\n throw new Error(\"Invalid schema: missing or invalid tables\");\n }\n for (const [tableName, table] of Object.entries(schema.tables)) {\n if (!table.fields || typeof table.fields !== \"object\") {\n console.log(tableName, \"missing fields\");\n throw new Error(`Invalid table ${tableName}: missing fields`);\n }\n\n // Validate FieldDefinition constraints and customSignals\n for (const [fieldName, field] of Object.entries(table.fields)) {\n if (!fieldName.split(\"\").every((c) => /[a-z_]/.test(c))) {\n console.log(tableName, \"field not lowercase\", fieldName);\n throw new Error(\n `Invalid field name ${fieldName} for ${tableName}. Field names must only contain lowercase alphanumeric characters and underscores`,\n );\n }\n if (!Object.values(SCHEMA_TYPES).includes(field.type)) {\n console.log(\n tableName,\n \"field invalid type\",\n fieldName,\n field.type,\n );\n throw new Error(\n `Invalid type ${field.type} for ${tableName}.${fieldName}`,\n );\n }\n if (\n field.references &&\n !field.references.match(/^[\\w]+[(\\w)]+$/)\n ) {\n console.log(\n tableName,\n \"invalid reference\",\n fieldName,\n field.references,\n );\n throw new Error(\n `Invalid reference ${field.references} for ${tableName}.${fieldName}`,\n );\n }\n if (table.customSignals) {\n for (const op of [\"query\", \"insert\", \"update\", \"delete\"]) {\n const triggers =\n table.customSignals.triggers?.[op as DbOperationType];\n const emissions =\n table.customSignals.emissions?.[op as DbOperationType];\n if (\n triggers &&\n !Array.isArray(triggers) &&\n typeof triggers !== \"object\"\n ) {\n console.log(\n tableName,\n \"invalid triggers\",\n op,\n triggers,\n );\n throw new Error(\n `Invalid triggers for ${tableName}.${op}`,\n );\n }\n if (\n emissions &&\n !Array.isArray(emissions) &&\n typeof emissions !== \"object\"\n ) {\n console.log(\n tableName,\n \"invalid emissions\",\n op,\n emissions,\n );\n throw new Error(\n `Invalid emissions for ${tableName}.${op}`,\n );\n }\n }\n }\n }\n }\n console.log(\"SCHEMA VALIDATED\");\n return true;\n },\n \"Validates database schema structure and content\",\n ).then(\n Cadenza.createMetaTask(\n \"Sort tables by dependencies\",\n this.sortTablesByReferences.bind(this),\n \"Sorts tables by dependencies\",\n ).then(\n Cadenza.createMetaTask(\n \"Split schema into tables\",\n this.splitTables.bind(this),\n \"Generates DDL for database schema\",\n ).then(\n Cadenza.createMetaTask(\n \"Generate tasks\",\n (ctx) => {\n const { table, tableName, options } = ctx;\n console.log(tableName, options);\n\n this.createDatabaseTask(\n \"query\",\n tableName,\n table,\n this.queryFunction.bind(this),\n options,\n );\n\n this.createDatabaseTask(\n \"insert\",\n tableName,\n table,\n this.insertFunction.bind(this),\n options,\n );\n\n this.createDatabaseTask(\n \"update\",\n tableName,\n table,\n this.updateFunction.bind(this),\n options,\n );\n\n this.createDatabaseTask(\n \"delete\",\n tableName,\n table,\n this.deleteFunction.bind(this),\n options,\n );\n },\n \"Generates auto-tasks for database schema\",\n ),\n Cadenza.createMetaTask(\"Generate DDL from table\", (ctx) => {\n const { ddl, table, tableName, schema, options } = ctx;\n const fieldDefs = Object.entries(table.fields)\n .map((value) => {\n const [fieldName, field] = value as [\n string,\n FieldDefinition,\n ];\n let def = `${fieldName} ${field.type.toUpperCase()}`;\n if (field.type === \"varchar\")\n def += `(${field.constraints?.maxLength ?? 255})`;\n if (field.type === \"decimal\")\n def += `(${field.constraints?.precision ?? 10},${field.constraints?.scale ?? 2})`;\n if (field.primary) def += \" PRIMARY KEY\";\n if (field.unique) def += \" UNIQUE\";\n if (field.default !== undefined)\n def += ` DEFAULT ${field.default === \"\" ? \"''\" : String(field.default)}`;\n if (field.required && !field.nullable) def += \" NOT NULL\";\n if (field.nullable) def += \" NULL\";\n if (field.generated)\n def += ` GENERATED ALWAYS AS ${field.generated.toUpperCase()} STORED`;\n if (field.references)\n def += ` REFERENCES ${field.references} ON DELETE ${field.onDelete || \"DO NOTHING\"}`;\n if (field.encrypted) def += \" ENCRYPTED\"; // Pseudo, handle via app-side\n\n if (field.constraints?.check) {\n def += ` CHECK (${field.constraints.check})`;\n }\n return def;\n })\n .join(\", \");\n\n let sql = \"\";\n if (schema.meta?.dropExisting) {\n sql = `DROP TABLE IF EXISTS ${tableName} CASCADE;`;\n ddl.push(sql);\n }\n\n sql = `CREATE TABLE IF NOT EXISTS ${tableName} (${fieldDefs})`;\n // if (table.meta?.appendOnly) { // TODO Add prevent_context_modification() function\n // sql += `;\\nCREATE TRIGGER prevent_modification BEFORE UPDATE OR DELETE ON ${tableName} FOR EACH STATEMENT EXECUTE FUNCTION prevent_context_modification();`;\n // }\n\n ddl.push(sql);\n\n return { ddl, table, tableName, schema, options };\n }).then(\n Cadenza.createMetaTask(\"Generate index DDL\", (ctx) => {\n const { ddl, table, tableName, schema, options } = ctx;\n if (table.indexes) {\n table.indexes.forEach((fields: string[]) => {\n ddl.push(\n `CREATE INDEX IF NOT EXISTS idx_${tableName}_${fields.join(\"_\")} ON ${tableName} (${fields.join(\", \")});`,\n );\n });\n }\n\n return { ddl, table, tableName, schema, options };\n }).then(\n Cadenza.createMetaTask(\n \"Generate primary key ddl\",\n (ctx) => {\n const { ddl, table, tableName, schema, options } = ctx;\n if (table.primaryKey) {\n ddl.push(\n `ALTER TABLE ${tableName} DROP CONSTRAINT IF EXISTS unique_${tableName}_${table.primaryKey.join(\"_\")};`, // TODO: should be cascade?\n `ALTER TABLE ${tableName} ADD CONSTRAINT unique_${tableName}_${table.primaryKey.join(\"_\")} PRIMARY KEY (${table.primaryKey.join(\", \")});`,\n );\n }\n\n return { ddl, table, tableName, schema, options };\n },\n ).then(\n Cadenza.createMetaTask(\n \"Generate unique index DDL\",\n (ctx) => {\n const { ddl, table, tableName, schema, options } =\n ctx;\n if (table.uniqueConstraints) {\n table.uniqueConstraints.forEach(\n (fields: string[]) => {\n ddl.push(\n `ALTER TABLE ${tableName} DROP CONSTRAINT IF EXISTS unique_${tableName}_${fields.join(\"_\")};`, // TODO: should be cascade?\n `ALTER TABLE ${tableName} ADD CONSTRAINT unique_${tableName}_${fields.join(\"_\")} UNIQUE (${fields.join(\", \")});`,\n );\n },\n );\n }\n\n return { ddl, table, tableName, schema, options };\n },\n ).then(\n Cadenza.createMetaTask(\n \"Generate foreign key DDL\",\n (ctx) => {\n const { ddl, table, tableName, schema, options } =\n ctx;\n if (table.foreignKeys) {\n for (const foreignKey of table.foreignKeys as {\n tableName: string;\n fields: string[];\n referenceFields: string[];\n }[]) {\n const foreignKeyName = `fk_${tableName}_${foreignKey.fields.join(\"_\")}`;\n ddl.push(\n `ALTER TABLE ${tableName} DROP CONSTRAINT IF EXISTS ${foreignKeyName};`, // TODO: should be cascade?\n `ALTER TABLE ${tableName} ADD CONSTRAINT ${foreignKeyName} FOREIGN KEY (${foreignKey.fields.join(\n \", \",\n )}) REFERENCES ${foreignKey.tableName} (${foreignKey.referenceFields.join(\n \", \",\n )});`,\n );\n }\n }\n return { ddl, table, tableName, schema, options };\n },\n ).then(\n Cadenza.createMetaTask(\n \"Generate trigger DDL\",\n (ctx) => {\n const { ddl, table, tableName, schema, options } =\n ctx;\n if (table.triggers) {\n for (const [\n triggerName,\n trigger,\n ] of Object.entries(table.triggers) as [\n string,\n any,\n ][]) {\n ddl.push(\n `CREATE TRIGGER ${triggerName} ${trigger.when} ${trigger.event} ON ${tableName} FOR EACH STATEMENT EXECUTE FUNCTION ${trigger.function};`,\n );\n }\n }\n return { ddl, table, tableName, schema, options };\n },\n ).then(\n Cadenza.createMetaTask(\n \"Generate initial data DDL\",\n (ctx) => {\n const {\n ddl,\n table,\n tableName,\n schema,\n options,\n } = ctx;\n if (table.initialData) {\n ddl.push(\n `INSERT INTO ${tableName} (${table.initialData.fields.join(\", \")}) VALUES ${table.initialData.data\n .map(\n (row: any[]) =>\n `(${row\n .map((value) =>\n value === undefined\n ? \"NULL\"\n : value.charAt(0) === \"'\"\n ? value\n : `'${value}'`,\n )\n .join(\", \")})`, // TODO: handle non string data\n )\n .join(\", \")} ON CONFLICT DO NOTHING;`,\n );\n }\n\n return {\n ddl,\n table,\n tableName,\n schema,\n options,\n };\n },\n ).then(\n Cadenza.createUniqueMetaTask(\n \"Join DDL\",\n (ctx) => {\n const { joinedContexts } = ctx;\n const ddl: string[] = [];\n for (const joinedContext of joinedContexts) {\n ddl.push(...joinedContext.ddl);\n }\n ddl.flat();\n return {\n ddl,\n schema: joinedContexts[0].schema,\n options: joinedContexts[0].options,\n table: joinedContexts[0].table,\n tableName: joinedContexts[0].tableName,\n };\n },\n ).then(\n Cadenza.createMetaTask(\n \"Apply Database Changes\",\n async (ctx) => {\n const { ddl } = ctx;\n if (ddl && ddl.length > 0) {\n for (const sql of ddl) {\n try {\n console.log(\"Applying SQL\", sql);\n await this.dbClient.query(sql);\n } catch (error: any) {\n console.error(\n \"Error applying DDL\",\n error,\n );\n }\n }\n }\n console.log(\"DDL applied\");\n return true;\n },\n \"Applies generated DDL to the database\",\n ).emits(\"meta.database.setup_done\"),\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n ],\n \"Initializes the database service with schema parsing and task/signal generation\",\n ).doOn(\"meta.database_init_requested\");\n }\n\n private async getClient(): Promise<PoolClient> {\n const client = (await this.dbClient.connect()) as unknown as any;\n const query = client.query;\n const release = client.release;\n // set a timeout of 5 seconds, after which we will log this client's last query\n const timeout = setTimeout(() => {\n console.error(\"A client has been checked out for more than 5 seconds!\");\n console.error(\n `The last executed query on this client was: ${client.lastQuery}`,\n );\n }, 5000);\n // monkey patch the query method to keep track of the last query executed\n client.query = (...args: any[]) => {\n client.lastQuery = args;\n return query.apply(client, args);\n };\n client.release = () => {\n // clear our timeout\n clearTimeout(timeout);\n // set the methods back to their old un-monkey-patched version\n client.query = query;\n client.release = release;\n return release.apply(client);\n };\n return client;\n }\n\n private async waitForDatabase(\n transaction: (\n client: any,\n context: AnyObject,\n ) => Promise<AnyObject | boolean>,\n client: any,\n context: AnyObject,\n ) {\n for (let i = 0; i < 10; i++) {\n try {\n return await transaction(client, context);\n } catch (err: unknown) {\n if (err && (err as Error).message.includes(\"does not exist\")) {\n console.log(`Waiting for database to be ready...`);\n await new Promise((res) => setTimeout(res, 1000));\n } else {\n console.error(\"Database query errored: \", err, context);\n return { rows: [] };\n }\n }\n }\n throw new Error(`Timeout waiting for database to be ready`);\n }\n\n sortTablesByReferences(ctx: AnyObject): AnyObject {\n // Build dependency graph: map of table -> set of dependent tables\n const schema: SchemaDefinition = ctx.schema;\n const graph: Map<string, Set<string>> = new Map();\n const allTables = Object.keys(schema.tables);\n\n // Initialize graph with all tables\n allTables.forEach((table) => graph.set(table, new Set()));\n\n // Populate dependencies, skipping self-references for cycle detection\n for (const [tableName, table] of Object.entries(schema.tables)) {\n for (const field of Object.values(table.fields)) {\n if (field.references) {\n const [refTable] = field.references.split(\"(\"); // Extract referenced table\n if (refTable !== tableName && allTables.includes(refTable)) {\n graph.get(refTable)?.add(tableName); // refTable depends on tableName\n }\n }\n }\n\n if (table.foreignKeys) {\n for (const foreignKey of table.foreignKeys) {\n const refTable = foreignKey.tableName;\n if (refTable !== tableName && allTables.includes(refTable)) {\n graph.get(refTable)?.add(tableName); // refTable depends on tableName\n }\n }\n }\n }\n\n // Topological sort using DFS with cycle detection\n const visited: Set<string> = new Set();\n const tempMark: Set<string> = new Set(); // For cycle detection\n const sorted: string[] = [];\n let hasCycles = false;\n\n function visit(table: string) {\n if (tempMark.has(table)) {\n hasCycles = true; // Mark cycle but continue\n return;\n }\n if (visited.has(table)) return;\n\n tempMark.add(table);\n for (const dep of graph.get(table) || []) {\n visit(dep);\n }\n tempMark.delete(table);\n visited.add(table);\n sorted.push(table);\n }\n\n // Visit each unvisited table\n for (const table of allTables) {\n if (!visited.has(table)) {\n visit(table);\n }\n }\n\n // Handle unvisited tables (e.g., no dependencies)\n for (const table of allTables) {\n if (!visited.has(table)) {\n sorted.push(table);\n }\n }\n\n sorted.reverse();\n\n console.log(\"sorted tables\", sorted, \"has cycles\", hasCycles);\n\n return { ...ctx, sortedTables: sorted, hasCycles };\n }\n\n async *splitTables(ctx: any) {\n const { sortedTables, schema, options = {} } = ctx;\n for (const tableName of sortedTables) {\n const table = schema.tables[tableName];\n yield { ddl: [], table, tableName, schema, options };\n }\n }\n\n async queryFunction(\n tableName: string,\n context: DbOperationPayload,\n ): Promise<any> {\n const {\n filter = {},\n fields = [],\n joins = {},\n sort = {},\n limit,\n offset,\n } = context;\n\n // Build base query\n let sql = `SELECT ${fields.length ? fields.join(\", \") : \"*\"} FROM ${tableName}`;\n const params: any[] = [];\n const conditions: string[] = [];\n\n // Handle filter\n if (Object.keys(filter).length > 0) {\n conditions.push(this.buildWhereClause(filter, params));\n }\n\n // Handle joins\n if (Object.keys(joins).length > 0) {\n sql += \" \" + this.buildJoinClause(joins);\n }\n\n // Handle sort\n if (Object.keys(sort).length > 0) {\n sql +=\n \" ORDER BY \" +\n Object.entries(sort)\n .map(([field, direction]) => `${field} ${direction}`)\n .join(\", \");\n }\n\n // Handle limit and offset\n if (limit !== undefined) sql += ` LIMIT $${params.length + 1}`;\n params.push(limit);\n if (offset !== undefined) sql += ` OFFSET $${params.length + 1}`;\n params.push(offset);\n\n try {\n const result = await this.dbClient.query(sql, params);\n return {\n [`${tableName}s`]: result.rows,\n rowCount: result.rowCount,\n __success: true,\n ...context,\n };\n } catch (error: any) {\n return {\n ...context,\n errored: true,\n __error: `Query failed: ${error.message}`,\n __errors: { query: error.message },\n };\n }\n }\n\n async insertFunction(\n tableName: string,\n context: DbOperationPayload,\n ): Promise<any> {\n const { data, transaction = true, fields = [], onConflict } = context;\n\n if (!data || (Array.isArray(data) && data.length === 0)) {\n return { errored: true, __error: \"No data provided for insert\" };\n }\n\n const client = transaction ? await this.getClient() : this.dbClient;\n try {\n if (transaction) await client.query(\"BEGIN\");\n\n const resolvedData = await this.resolveNestedData(data, tableName);\n const isBatch = Array.isArray(resolvedData);\n const rows = isBatch ? resolvedData : [resolvedData];\n\n const sql = `INSERT INTO ${tableName} (${Object.keys(rows[0]).join(\", \")}) VALUES `;\n const values = rows\n .map(\n (row) =>\n `(${Object.values(row)\n .map((value: any, i) => {\n if (typeof value === \"object\" && value?.__effect) {\n if (value.__effect === \"increment\") {\n return `${Object.keys(row)[i]} + 1`;\n }\n if (value.__effect === \"decrement\") {\n return `${Object.keys(row)[i]} - 1`;\n }\n if (value.__effect === \"set\") {\n return `${Object.keys(row)[i]} = ${value.__value}`; // TODO: placeholder, not working\n }\n }\n return `$${i + 1}`;\n })\n .join(\", \")})`,\n )\n .join(\", \");\n const params = rows.flatMap((row) => Object.values(row));\n\n let onConflictSql = \"\";\n if (onConflict) {\n const { target, action } = onConflict;\n onConflictSql += ` ON CONFLICT (${target.join(\", \")})`;\n if (action.do === \"update\") {\n if (!action.set || Object.keys(action.set).length === 0) {\n throw new Error(\"Update action requires 'set' fields\");\n }\n const setClauses = Object.entries(action.set)\n .map(\n ([field, value]) =>\n `${field} = ${value === \"excluded\" ? \"excluded.\" + field : `$${params.length + 1}`}`,\n )\n .join(\", \");\n params.push(\n ...Object.values(action.set).filter(\n (v) => typeof v !== \"string\" || !v.startsWith(\"excluded.\"),\n ),\n );\n onConflictSql += ` DO UPDATE SET ${setClauses}`;\n if (action.where) onConflictSql += ` WHERE ${action.where}`;\n } else {\n onConflictSql += ` DO NOTHING`;\n }\n }\n\n const result = await client.query(\n `${sql} ${values}${onConflictSql} RETURNING ${fields.length ? fields.join(\", \") : \"*\"}`,\n params,\n );\n if (transaction) await client.query(\"COMMIT\");\n return {\n [`${tableName}${isBatch ? \"s\" : \"\"}`]: isBatch\n ? result.rows\n : result.rows[0],\n rowCount: result.rowCount,\n __inserted: true,\n };\n } catch (error: any) {\n if (transaction) await client.query(\"ROLLBACK\");\n return {\n ...context,\n errored: true,\n __error: `Insert failed: ${error.message}`,\n __errors: { insert: error.message },\n };\n } finally {\n if (transaction && client) {\n // @ts-ignore\n client.release();\n }\n }\n }\n\n async updateFunction(\n tableName: string,\n context: DbOperationPayload,\n ): Promise<any> {\n const { data, filter = {}, transaction = true } = context;\n\n if (!data || Object.keys(data).length === 0) {\n return { errored: true, __error: \"No data provided for update\" };\n }\n\n const client = transaction ? await this.getClient() : this.dbClient;\n try {\n if (transaction) await client.query(\"BEGIN\");\n\n const resolvedData = await this.resolveNestedData(data, tableName);\n const setClause = Object.entries(resolvedData)\n .map(([key, value]) => `${key} = $${params.length + 1}`)\n .join(\", \");\n const params = Object.values(resolvedData);\n const whereClause = this.buildWhereClause(filter, params);\n\n const sql = `UPDATE ${tableName} SET ${setClause} ${whereClause} RETURNING *`;\n const result = await client.query(sql, params);\n if (transaction) await client.query(\"COMMIT\");\n return {\n [`${tableName}`]: result.rows[0],\n __updated: true,\n };\n } catch (error: any) {\n if (transaction) await client.query(\"ROLLBACK\");\n return {\n ...context,\n errored: true,\n __error: `Update failed: ${error.message}`,\n __errors: { update: error.message },\n };\n } finally {\n if (transaction && client) {\n // @ts-ignore\n client.release();\n }\n }\n }\n\n async deleteFunction(\n tableName: string,\n context: DbOperationPayload,\n ): Promise<any> {\n const { filter = {}, transaction = true } = context;\n\n if (Object.keys(filter).length === 0) {\n return { errored: true, __error: \"No filter provided for delete\" };\n }\n\n const client = transaction ? await this.getClient() : this.dbClient;\n try {\n if (transaction) await client.query(\"BEGIN\");\n\n const params: any[] = [];\n const whereClause = this.buildWhereClause(filter, params);\n const sql = `DELETE FROM ${tableName} ${whereClause} RETURNING *`;\n const result = await client.query(sql, params);\n if (transaction) await client.query(\"COMMIT\");\n return {\n [`${tableName}`]: result.rows[0],\n __deleted: true,\n };\n } catch (error: any) {\n if (transaction) await client.query(\"ROLLBACK\");\n return {\n errored: true,\n __error: `Delete failed: ${error.message}`,\n __errors: { delete: error.message },\n };\n } finally {\n if (transaction && client) {\n // @ts-ignore\n client.release();\n }\n }\n }\n\n buildWhereClause(filter: AnyObject, params: any[]): string {\n const conditions = [];\n for (const [key, value] of Object.entries(filter)) {\n if (value !== undefined) {\n conditions.push(`${snakeCase(key)} = $${params.length + 1}`);\n params.push(value);\n }\n }\n return conditions.length ? `WHERE ${conditions.join(\" AND \")}` : \"\";\n }\n\n buildJoinClause(joins: Record<string, JoinDefinition>): string {\n let joinSql = \"\";\n for (const [table, join] of Object.entries(joins)) {\n joinSql += ` LEFT JOIN ${snakeCase(table)} ${join.alias} ON ${join.on}`;\n if (join.joins) joinSql += \" \" + this.buildJoinClause(join.joins);\n }\n return joinSql;\n }\n\n async resolveNestedData(data: any, tableName: string): Promise<any> {\n if (Array.isArray(data))\n return Promise.all(data.map((d) => this.resolveNestedData(d, tableName)));\n if (typeof data !== \"object\" || data === null) return data;\n\n const resolved = { ...data };\n for (const [key, value] of Object.entries(data)) {\n if (\n typeof value === \"object\" &&\n value !== null &&\n \"subOperation\" in value\n ) {\n const subOp = value as SubOperation;\n const subResult = await this.executeSubOperation(subOp);\n resolved[snakeCase(key)] =\n subResult[subOp.return || \"full\"] ?? subResult;\n } else if (\n typeof value === \"string\" &&\n [\"increment\", \"decrement\", \"set\"].includes(value)\n ) {\n resolved[snakeCase(key)] = { __effect: value }; // Placeholder for effect handling (DB-side or app-side)\n } else if (typeof value === \"object\") {\n resolved[snakeCase(key)] = await this.resolveNestedData(\n value,\n tableName,\n );\n }\n }\n return resolved;\n }\n\n async executeSubOperation(op: SubOperation): Promise<any> {\n const client = await this.getClient();\n try {\n await client.query(\"BEGIN\");\n let result;\n if (op.subOperation === \"insert\") {\n const resolvedData = await this.resolveNestedData(op.data, op.table);\n const sql = `INSERT INTO ${op.table} (${Object.keys(resolvedData).join(\", \")}) VALUES (${Object.values(\n resolvedData,\n )\n .map((_, i) => `$${i + 1}`)\n .join(\n \", \",\n )}) ON CONFLICT DO NOTHING RETURNING ${op.return === \"id\" ? \"id\" : \"*\"}`;\n result =\n ((await client.query(sql, Object.values(resolvedData))).rows[0] ??\n op.return === \"id\")\n ? resolvedData.id\n ? { id: resolvedData.id }\n : undefined\n : undefined;\n } else if (op.subOperation === \"query\") {\n const params: any[] = [];\n const whereClause = this.buildWhereClause(op.filter || {}, params);\n const sql = `SELECT ${op.fields?.join(\", \") || \"*\"} FROM ${op.table} ${whereClause} LIMIT 1`;\n result = (await client.query(sql, params)).rows[0];\n }\n await client.query(\"COMMIT\");\n return result || {};\n } catch (error) {\n await client.query(\"ROLLBACK\");\n throw error;\n } finally {\n client.release();\n }\n }\n\n createDatabaseTask(\n op: DbOperationType,\n tableName: string,\n table: TableDefinition,\n queryFunction: (tableName: string, context: AnyObject) => Promise<any>,\n options: ServerOptions,\n ) {\n // const defaultSignal = `${tableName}.${op}`;\n Cadenza.createTask(\n `db${op.charAt(0).toUpperCase() + op.slice(1)}${tableName.charAt(0).toUpperCase() + tableName.slice(1)}`,\n async (context, emit) => {\n const triggerConditions: any | undefined =\n table.customSignals?.triggers?.query?.filter(\n (trigger: any) => trigger.condition,\n );\n for (const triggerCondition of triggerConditions ?? []) {\n if (\n triggerCondition.condition &&\n !triggerCondition.condition(context)\n ) {\n return {\n failed: true,\n error: `Condition for signal trigger failed: ${triggerCondition.signal}`,\n };\n }\n }\n\n context = await queryFunction(tableName, context.querydata ?? context);\n\n for (const signal of table.customSignals?.emissions?.[op] ??\n ([] as any[])) {\n if (signal.condition && !signal.condition(context)) {\n continue;\n }\n emit(signal.signal ?? signal, context);\n }\n\n console.log(\n \"EXECUTED\",\n `db${op.charAt(0).toUpperCase() + op.slice(1)}${tableName.charAt(0).toUpperCase() + tableName.slice(1)}`,\n context,\n );\n\n delete context.queryData;\n delete context.data;\n delete context.filter;\n delete context.fields;\n delete context.joins;\n delete context.sort;\n delete context.limit;\n delete context.offset;\n\n return context;\n },\n `Auto-generated ${op} task for ${tableName}`,\n {\n isMeta: options.isMeta,\n concurrency: 50,\n validateInputContext: false, // TODO\n getTagCallback: (\n context?: AnyObject, // TODO more granular tags\n ) =>\n context?.__metadata?.__executionTraceId ??\n context?.__executionTraceId ??\n \"default\",\n inputSchema: {\n // TODO\n type: \"object\",\n properties: {\n filter: {\n type: \"object\",\n },\n },\n },\n },\n ).doOn(\n ...(table.customSignals?.triggers?.[op]?.map((signal: any) => {\n return typeof signal === \"string\" ? signal : signal.signal;\n }) ?? []),\n );\n console.log(\"Created database task\", op, tableName);\n }\n}\n"],"mappings":"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U;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EACxD,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EACxD,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EACvE,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EACvE,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EACxD,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EACxD,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EACxD,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EACvE,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EACvE,UAAU;AAAA,EAAM,UAAU;AAAA,EAC1B,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EACzC,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EACvE,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EACvE,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EACxD,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EACxD,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EACzC,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EACzC,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EACzC,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EACzC,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EACxD,UAAU;AAAA,EAA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","names":["import_core","uuid","_a","_a","_a","_b","_c","_d","self","import_core","import_uuid","uuid","_a","import_uuid","_a","_b","express","bodyParser","helmet","cors","ctx","uuid","http","fs","https","emit","fetch","import_rate_limiter_flexible","import_socket","_a","_b","next","xss","ctx","Symbol","objectProto","nativeObjectToString","symToStringTag","rsComboMarksRange","reComboHalfMarksRange","rsComboSymbolsRange","rsComboRange","rsCombo","rsApos","_a","_b","_c","_d","Cadenza","_a","_b","_c","_d","import_core"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/Cadenza.ts","../src/graph/definition/DeputyTask.ts","../src/graph/definition/DatabaseTask.ts","../src/registry/ServiceRegistry.ts","../src/graph/definition/SignalTransmissionTask.ts","../src/network/RestController.ts","../src/network/SocketController.ts","../src/signals/SignalController.ts","../src/graph/controllers/GraphMetadataController.ts","../node_modules/lodash-es/_freeGlobal.js","../node_modules/lodash-es/_root.js","../node_modules/lodash-es/_Symbol.js","../node_modules/lodash-es/_getRawTag.js","../node_modules/lodash-es/_objectToString.js","../node_modules/lodash-es/_baseGetTag.js","../node_modules/lodash-es/isObjectLike.js","../node_modules/lodash-es/isSymbol.js","../node_modules/lodash-es/_arrayMap.js","../node_modules/lodash-es/isArray.js","../node_modules/lodash-es/_baseToString.js","../node_modules/lodash-es/toString.js","../node_modules/lodash-es/_arrayReduce.js","../node_modules/lodash-es/_basePropertyOf.js","../node_modules/lodash-es/_deburrLetter.js","../node_modules/lodash-es/deburr.js","../node_modules/lodash-es/_asciiWords.js","../node_modules/lodash-es/_hasUnicodeWord.js","../node_modules/lodash-es/_unicodeWords.js","../node_modules/lodash-es/words.js","../node_modules/lodash-es/_createCompounder.js","../node_modules/lodash-es/snakeCase.js","../src/types/database.ts","../src/database/DatabaseController.ts"],"sourcesContent":["import CadenzaService, {\n NetworkMode,\n SecurityProfile,\n ServerOptions,\n} from \"./Cadenza\";\nimport {\n AnyObject,\n DebounceOptions,\n DebounceTask,\n EphemeralTask,\n EphemeralTaskOptions,\n GraphRoutine,\n Task,\n TaskFunction,\n TaskOptions,\n ThrottleTagGetter,\n} from \"@cadenza.io/core\";\nimport GraphMetadataController from \"./graph/controllers/GraphMetadataController\";\nimport DatabaseTask from \"./graph/definition/DatabaseTask\";\nimport DeputyTask from \"./graph/definition/DeputyTask\";\nimport SignalTransmissionTask from \"./graph/definition/SignalTransmissionTask\";\nimport RestController from \"./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 GraphMetadataController,\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 TaskOptions,\n ThrottleTagGetter,\n TaskFunction,\n Task,\n DebounceOptions,\n DebounceTask,\n EphemeralTaskOptions,\n EphemeralTask,\n GraphRoutine,\n};\n","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 GraphMetadataController from \"./graph/controllers/GraphMetadataController\";\nimport { SchemaDefinition } from \"./types/database\";\nimport { snakeCase } from \"lodash-es\";\nimport DatabaseController from \"./database/DatabaseController\";\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 interface DatabaseOptions {\n databaseType?: \"postgres\";\n databaseName?: string;\n poolSize?: number;\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 protected static serviceCreated = 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 this.serviceRegistry = ServiceRegistry.instance;\n SignalController.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 if (this.serviceCreated) return;\n this.bootstrap();\n Cadenza.validateName(serviceName);\n this.validateServiceName(serviceName);\n\n this.serviceRegistry.serviceName = 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 console.log(\"Creating service...\");\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 Cadenza.createEphemeralMetaTask(\"Initiate controllers\", () => {\n console.log(\"Initiating controllers...\");\n GraphMetadataController.instance;\n })\n .doOn(\"meta.service_registry.instance_inserted\")\n .emits(\"meta.process_signal_queue_requested\");\n\n this.serviceCreated = true;\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 static createDatabaseService(\n name: string,\n schema: SchemaDefinition,\n description: string = \"\",\n options: ServerOptions & DatabaseOptions = {},\n ) {\n if (this.serviceCreated) return;\n this.bootstrap();\n DatabaseController.instance; // Ensure DB controller is created\n this.serviceRegistry.serviceName = name;\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 databaseType: \"postgres\",\n databaseName: snakeCase(name),\n poolSize: parseInt(process.env.DATABASE_POOL_SIZE ?? \"10\"),\n ...options,\n };\n\n Cadenza.broker.emit(\"meta.database_init_requested\", {\n schema,\n databaseName: options.databaseName,\n options,\n });\n\n Cadenza.createEphemeralMetaTask(\"Set database connection\", () => {\n console.log(\"Database service created\");\n this.createCadenzaService(name, description, options);\n }).doOn(\"meta.database.setup_done\");\n }\n\n static createMetaDatabaseService(\n name: string,\n schema: SchemaDefinition,\n description: string = \"\",\n options: ServerOptions & DatabaseOptions = {},\n ) {\n this.bootstrap();\n options.isMeta = true;\n this.createDatabaseService(name, schema, 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 localTaskVersion: this.version,\n remoteRoutineName: this.remoteRoutineName,\n serviceName: this.serviceName,\n communicationType: \"delegation\",\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 __executionTraceId: metadata.__executionTraceId ?? null,\n __metadata: {\n ...metadata,\n __deputyTaskName: this.name,\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 __executionTraceId: metadata.__executionTraceId ?? null,\n __metadata: {\n ...metadata,\n __deputyTaskName: this.name,\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 clientCreated?: boolean;\n}\n\nexport interface DeputyDescriptor {\n serviceName: string;\n remoteRoutineName?: string;\n signalName?: string;\n localTaskName: string;\n communicationType: string;\n}\n\nexport interface RemoteSignalDescriptor {\n __listenerServiceName: string;\n __emitterSignalName: string;\n __signalName: string;\n __remoteServiceName: 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 private remoteSignals: Map<string, RemoteSignalDescriptor[]> = 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 handleRemoteSignalRegistrationTask: Task;\n getRemoteSignalsTask: 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 (\n this.deputies.has(serviceName) ||\n this.remoteSignals.has(serviceName)\n ) {\n const communicationTypes = Array.from(\n new Set(\n this.deputies\n .get(serviceName)!\n .map((d) => d.communicationType) ?? [],\n ),\n );\n\n if (\n !communicationTypes.includes(\"signal\") &&\n this.remoteSignals.has(serviceName)\n ) {\n communicationTypes.push(\"signal\");\n }\n\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 communicationTypes,\n });\n\n serviceInstance.clientCreated = true;\n\n for (const instance of this.instances.get(serviceName)!) {\n if (instance.clientCreated) continue;\n instance.clientCreated = true;\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 communicationTypes,\n });\n }\n }\n\n instances.push(serviceInstance); // Insert\n }\n\n return true;\n },\n \"Handles instance update from DB signal\",\n )\n .emits(\"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.handleRemoteSignalRegistrationTask = Cadenza.createMetaTask(\n \"Handle Remote Signal Registration\",\n (ctx) => {\n const { __remoteServiceName, __emitterSignalName } = ctx;\n let remoteSignals = this.remoteSignals.get(__remoteServiceName);\n if (!remoteSignals) {\n this.remoteSignals.set(__remoteServiceName, []);\n remoteSignals = this.remoteSignals.get(__remoteServiceName);\n }\n\n if (\n remoteSignals &&\n remoteSignals.findIndex(\n (s) => s.__emitterSignalName === __emitterSignalName,\n ) === -1\n ) {\n remoteSignals.push({\n __listenerServiceName: ctx.__listenerServiceName,\n __emitterSignalName: __emitterSignalName,\n __signalName: ctx.__signalName,\n __remoteServiceName,\n });\n return true;\n }\n\n return false;\n },\n \"Handles registration of remote signals\",\n );\n\n this.getRemoteSignalsTask = Cadenza.createMetaTask(\n \"Get remote signals\",\n (ctx) => {\n const { serviceName } = ctx;\n let remoteSignals = this.remoteSignals.get(serviceName) ?? [];\n remoteSignals = remoteSignals.concat(this.remoteSignals.get(\"*\") ?? []);\n\n return {\n __remoteSignals: remoteSignals,\n ...ctx,\n };\n },\n \"Gets remote signals\",\n ).doOn(\"meta.fetch.handshake_complete\");\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 if (!this.deputies.has(serviceName)) this.deputies.set(serviceName, []);\n\n this.deputies.get(serviceName)!.push({\n serviceName,\n remoteRoutineName: ctx.remoteRoutineName,\n signalName: ctx.signalName,\n localTaskName: ctx.localTaskName,\n communicationType: ctx.communicationType,\n });\n },\n ).doOn(\"meta.deputy.created\");\n\n this.getAllInstances = Cadenza.createMetaTask(\n \"Get all instances\",\n (context) => ({\n ...context,\n __instances: Array.from(this.instances.values()).flat(),\n }),\n \"Gets all instances.\",\n );\n\n this.doForEachInstance = Cadenza.createMetaTask(\n \"Do for each instance\",\n function* (context: AnyObject) {\n // @ts-ignore\n for (const instances of this.instances.values()) {\n for (const instance of instances) {\n yield { ...context, __instance: instance };\n }\n }\n }.bind(this),\n \"Yields each instance for branching.\",\n );\n\n this.deleteInstance = Cadenza.createMetaTask(\n \"Delete instance\",\n (context) => {\n const { __id } = context;\n this.instances.delete(__id);\n return context;\n },\n \"Deletes instance.\",\n ).doOn(\"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 .emits(\"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 ).emits(\"meta.service_registry.instance_inserted\"),\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\", ctx);\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 this.emit(\"meta.deputy.created\", {\n localTaskName: this.name,\n localTaskVersion: this.version,\n serviceName: this.serviceName,\n communicationType: \"signal\",\n signalName: this.signalName,\n });\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 __executionTraceId: metadata.__executionTraceId ?? null,\n __metadata: {\n ...metadata,\n __deputyTaskName: this.name,\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 // TODO\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 .emits(`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 .emits(\"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 .emits(\"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 .emits(\"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 \"Setup fetch client\",\n (ctx, emit) => {\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, emit) => {\n const response = await fetch(`${URL}/handshake`, {\n method: \"POST\",\n body: JSON.stringify(ctx.handshakeData),\n });\n const result = (await response.json()) as AnyObject;\n if (result.__status === \"error\" || result.status !== 200) {\n throw new Error(\n result.__error ??\n `Failed to connect to service ${serviceName} ${ctx.serviceInstanceId}`,\n );\n }\n\n console.log(\n `Connected to service ${serviceName} ${ctx.serviceInstanceId}`,\n result,\n );\n\n for (const communicationType of ctx.communicationTypes) {\n // TODO: Should be done in other situations as well\n emit(\"meta.fetch.service_communication_established\", {\n data: {\n serviceInstanceId: ctx.serviceInstanceId,\n serviceInstanceClientId:\n Cadenza.serviceRegistry.serviceInstanceId,\n communicationType,\n },\n });\n }\n\n return true;\n },\n \"Sends handshake request\",\n {\n retryCount: 20,\n retryDelay: 200,\n retryDelayMax: 5000,\n retryDelayFactor: 1.5,\n },\n )\n .doOn(`meta.fetch.handshake_requested:${serviceInstanceId}`)\n .emits(\"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 .emits(\"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 .then(\n Cadenza.createMetaTask(\n \"Prepare handshake\",\n (ctx, emit) => {\n const { serviceInstanceId, serviceName } = ctx;\n emit(`meta.fetch.handshake_requested:${serviceInstanceId}`, {\n serviceInstanceId,\n serviceName,\n handshakeData: {\n // JWT token...\n },\n });\n },\n \"Prepares handshake\",\n ),\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 .emits(\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 .emits(\"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 .emits(\"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 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 return ctx;\n },\n \"Handles signal registration from a service instance\",\n )\n .then(\n Cadenza.createMetaTask(\n \"Handle foreign signal registration\",\n (ctx, emit) => {\n const { __signalName } = ctx;\n const firstChar = __signalName.charAt(0);\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\n .split(\".\")\n .slice(1)\n .join(\".\");\n ctx.__signalName =\n \"meta.signal_controller.foreign_signal_registered\";\n ctx.__remoteServiceName = serviceName;\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 },\n ).then(Cadenza.serviceRegistry.handleRemoteSignalRegistrationTask),\n )\n .doOn(\"meta.signal_broker.added\");\n\n Cadenza.createMetaTask(\n \"Forward signal observations to remote service\",\n (ctx, emit) => {\n const { __remoteSignals } = ctx;\n\n for (const remoteSignal of __remoteSignals) {\n if (remoteSignal.__remoteServiceName === \"*\") {\n emit(\n \"meta.signal_controller.wildcard_signal_registered\",\n remoteSignal,\n );\n } else {\n emit(\n `meta.signal_controller.remote_signal_registered:${remoteSignal.__remoteServiceName}`,\n remoteSignal,\n );\n }\n }\n\n return true;\n },\n \"Forwards signal observations to remote service\",\n ).doAfter(Cadenza.serviceRegistry.getRemoteSignalsTask);\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 },\n };\n },\n \"\",\n { isSubMeta: true, concurrency: 100 },\n )\n .doOn(\".*\")\n .emits(\"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 },\n };\n },\n \"\",\n { isSubMeta: true, concurrency: 100 },\n )\n .doOn(\"meta.node.consumed_signal\")\n .emits(\"sub_meta.signal_controller.signal_consumed\");\n }\n}\n","import Cadenza from \"../../Cadenza\";\n\nexport default class GraphMetadataController {\n private static _instance: GraphMetadataController;\n public static get instance(): GraphMetadataController {\n if (!this._instance) this._instance = new GraphMetadataController();\n return this._instance;\n }\n\n constructor() {\n Cadenza.createMetaTask(\"Handle task creation\", (ctx) => {\n return {\n data: {\n ...ctx.data,\n service_name: Cadenza.serviceRegistry.serviceName,\n // input_context_schema_id: ctx.data.inputContextSchema ? { // TODO\n //\n // } : null,\n // output_context_schema_id: ctx.data.outputContextSchema ? {\n //\n // } : null,\n },\n };\n })\n .doAfter(Cadenza.registry.registerTask)\n .emits(\"meta.graph_metadata.task_created\");\n\n Cadenza.createMetaTask(\"Handle task update\", (ctx) => {\n return {\n ...ctx,\n filter: {\n ...ctx.filter,\n service_name: Cadenza.serviceRegistry.serviceName,\n },\n };\n })\n .doOn(\"meta.task.layer_index_changed\", \"meta.task.destroyed\")\n .emits(\"meta.graph_metadata.task_updated\");\n\n Cadenza.createMetaTask(\"Handle task relationship creation\", (ctx) => {\n return {\n data: {\n ...ctx.data,\n service_name: Cadenza.serviceRegistry.serviceName,\n },\n };\n })\n .doOn(\"meta.task.relationship_added\")\n .emits(\"meta.graph_metadata.task_relationship_created\");\n\n Cadenza.createMetaTask(\"Handle task signal observation\", (ctx) => {\n const firstChar = ctx.data.signalName.charAt(0);\n let signalServiceName;\n if (\n firstChar === firstChar.toUpperCase() &&\n firstChar !== firstChar.toLowerCase()\n ) {\n signalServiceName = ctx.data.signalName.split(\".\")[0];\n }\n return {\n data: {\n ...ctx.data,\n task_service_name: Cadenza.serviceRegistry.serviceName,\n signal_service_name:\n signalServiceName ?? Cadenza.serviceRegistry.serviceName,\n },\n };\n })\n .doOn(\"meta.task.observed_signal\")\n .emits(\"meta.graph_metadata.task_signal_observed\");\n\n Cadenza.createMetaTask(\"Handle task signal attachment\", (ctx) => {\n return {\n data: {\n ...ctx.data,\n service_name: Cadenza.serviceRegistry.serviceName,\n },\n };\n })\n .doOn(\"meta.task.attached_signal\")\n .emits(\"meta.graph_metadata.task_attached_signal\");\n\n Cadenza.createMetaTask(\"Handle task unsubscribing signal\", (ctx) => {\n return {\n data: {\n deleted: true,\n },\n filter: {\n ...ctx.filter,\n service_name: Cadenza.serviceRegistry.serviceName,\n },\n };\n })\n .doOn(\"meta.task.unsubscribed_signal\")\n .emits(\"meta.graph_metadata.task_unsubscribed_signal\");\n\n Cadenza.createMetaTask(\"Handle task detaching signal\", (ctx) => {\n return {\n data: {\n deleted: true,\n },\n filter: {\n ...ctx.filter,\n service_name: Cadenza.serviceRegistry.serviceName,\n },\n };\n })\n .doOn(\"meta.task.detached_signal\")\n .emits(\"meta.graph_metadata.task_detached_signal\");\n\n Cadenza.createMetaTask(\"Handle routine creation\", (ctx) => {\n return {\n data: {\n ...ctx.data,\n service_name: Cadenza.serviceRegistry.serviceName,\n },\n };\n })\n .doAfter(Cadenza.registry.registerRoutine)\n .emits(\"meta.graph_metadata.routine_created\");\n\n Cadenza.createMetaTask(\"Handle routine update\", (ctx) => {\n return {\n ...ctx,\n filter: {\n ...ctx.filter,\n service_name: Cadenza.serviceRegistry.serviceName,\n },\n };\n })\n .doOn(\"meta.routine.destroyed\")\n .emits(\"meta.graph_metadata.routine_updated\");\n\n Cadenza.createMetaTask(\"Handle adding task to routine\", (ctx) => {\n return {\n data: {\n ...ctx.data,\n service_name: Cadenza.serviceRegistry.serviceName,\n },\n };\n })\n .doOn(\"meta.routine.task_added\")\n .emits(\"meta.graph_metadata.task_added_to_routine\");\n\n Cadenza.createMetaTask(\"Handle new trace\", (ctx) => {\n return {\n data: {\n ...ctx.data,\n service_name: Cadenza.serviceRegistry.serviceName,\n service_instance_id: Cadenza.serviceRegistry.serviceInstanceId,\n context_id: {\n subOperation: \"insert\",\n table: \"context\",\n data: {\n uuid: ctx.data.context.id,\n context: ctx.data.context.context,\n is_meta: ctx.data.isMeta,\n },\n return: \"id\",\n },\n },\n };\n }).doOn(\"meta.runner.new_trace\");\n\n Cadenza.createMetaTask(\n \"Handle routine execution creation\",\n (ctx) => {\n const context = ctx.data.context;\n delete ctx.data.context;\n return {\n data: {\n ...ctx.data,\n service_name: Cadenza.serviceRegistry.serviceName,\n service_instance_id: Cadenza.serviceRegistry.serviceInstanceId,\n context_id: {\n subOperation: \"insert\",\n table: \"context\",\n data: {\n uuid: context.id,\n context: context.context,\n is_meta: ctx.data.isMeta,\n },\n return: \"id\",\n },\n },\n };\n },\n \"Handles routine execution creation\",\n { concurrency: 100, isSubMeta: true },\n )\n .doOn(\"meta.runner.added_tasks\")\n .emits(\"meta.graph_metadata.routine_execution_created\");\n\n Cadenza.createMetaTask(\n \"Handle task execution creation\",\n (ctx) => {\n const context = ctx.data.context;\n delete ctx.data.context;\n return {\n data: {\n ...ctx.data,\n service_name: Cadenza.serviceRegistry.serviceName,\n service_instance_id: Cadenza.serviceRegistry.serviceInstanceId,\n context_id: {\n subOperation: \"insert\",\n table: \"context\",\n data: {\n uuid: context.id,\n context: context.context,\n is_meta: ctx.data.isMeta,\n },\n return: \"id\",\n },\n },\n };\n },\n \"Handles task execution creation\",\n { concurrency: 100, isSubMeta: true },\n )\n .doOn(\"meta.node.scheduled\")\n .emits(\"meta.graph_metadata.task_execution_created\");\n\n Cadenza.createMetaTask(\n \"Handle task execution relationship creation\",\n (ctx) => {\n return {\n ...ctx,\n filter: {\n ...ctx.filter,\n service_name: Cadenza.serviceRegistry.serviceName,\n },\n };\n },\n \"Handles task execution relationship creation\",\n { concurrency: 100, isSubMeta: true },\n )\n .doOn(\"meta.node.mapped\")\n .emits(\"meta.graph_metadata.relationship_executed\");\n }\n}\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\nexport default arrayReduce;\n","/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n}\n\nexport default basePropertyOf;\n","import basePropertyOf from './_basePropertyOf.js';\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n};\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\nexport default deburrLetter;\n","import deburrLetter from './_deburrLetter.js';\nimport toString from './toString.js';\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;\n\n/** Used to compose unicode capture groups. */\nvar rsCombo = '[' + rsComboRange + ']';\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\nexport default deburr;\n","/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n return string.match(reAsciiWord) || [];\n}\n\nexport default asciiWords;\n","/** Used to detect strings that need a more robust regexp to match words. */\nvar reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n/**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\nfunction hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n}\n\nexport default hasUnicodeWord;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\",\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq;\n\n/** Used to match complex or compound words. */\nvar reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n].join('|'), 'g');\n\n/**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n}\n\nexport default unicodeWords;\n","import asciiWords from './_asciiWords.js';\nimport hasUnicodeWord from './_hasUnicodeWord.js';\nimport toString from './toString.js';\nimport unicodeWords from './_unicodeWords.js';\n\n/**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\nfunction words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n}\n\nexport default words;\n","import arrayReduce from './_arrayReduce.js';\nimport deburr from './deburr.js';\nimport words from './words.js';\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\";\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n}\n\nexport default createCompounder;\n","import createCompounder from './_createCompounder.js';\n\n/**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\nvar snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n});\n\nexport default snakeCase;\n","import { AnyObject } from \"@cadenza.io/core\";\n\nexport type SchemaType =\n | \"varchar\"\n | \"text\"\n | \"int\"\n | \"bigint\" // Added for BIGINT\n | \"decimal\"\n | \"boolean\"\n | \"array\"\n | \"object\"\n | \"jsonb\"\n | \"uuid\"\n | \"timestamp\"\n | \"date\"\n | \"geo_point\"\n | \"bytea\"\n | \"any\";\n\nexport const SCHEMA_TYPES = [\n \"varchar\",\n \"text\",\n \"int\",\n \"bigint\",\n \"decimal\",\n \"boolean\",\n \"array\",\n \"object\",\n \"jsonb\",\n \"uuid\",\n \"timestamp\",\n \"date\",\n \"geo_point\",\n \"bytea\",\n \"any\",\n] as SchemaType[];\n\nexport type SchemaConstraints = {\n min?: number;\n max?: number;\n minLength?: number;\n maxLength?: number;\n pattern?: string;\n enum?: any[];\n multipleOf?: number;\n format?: \"email\" | \"url\" | \"date-time\" | \"uuid\" | \"custom\";\n oneOf?: any[];\n appendOnly?: boolean;\n check?: string;\n precision?: number; // Added for decimal/bigint\n scale?: number; // Added for decimal\n};\n\nexport interface FieldDefinition {\n type: SchemaType;\n primary?: boolean;\n index?: boolean;\n unique?: boolean;\n default?: any;\n required?: boolean;\n nullable?: boolean;\n encrypted?: boolean;\n constraints?: SchemaConstraints;\n references?: string;\n items?: FieldDefinition;\n description?: string;\n generated?: \"uuid\" | \"timestamp\" | \"now\" | \"autoIncrement\"; // Added autoIncrement\n onDelete?: \"cascade\" | \"set null\" | \"no action\" | \"set default\" | \"restrict\";\n onUpdate?: \"cascade\" | \"set null\" | \"no action\" | \"set default\"; // Added for constraint cascade\n}\n\nexport type DbOperationType = \"query\" | \"insert\" | \"update\" | \"delete\";\n\nexport interface TableDefinition {\n fields: Record<string, FieldDefinition>;\n meta?: {\n description?: string;\n tags?: string[];\n shardKey?: string;\n partitionHint?: string;\n appendOnly?: boolean;\n encryptedFields?: string[];\n };\n indexes?: string[][];\n uniqueConstraints?: string[][];\n primaryKey?: string[];\n fullTextIndexes?: string[][];\n foreignKeys?: {\n tableName: string;\n fields: string[];\n referenceFields: string[];\n }[];\n triggers?: Record<\n string,\n {\n when: \"before\" | \"after\";\n event: \"insert\" | \"update\" | \"delete\";\n function: string;\n }\n >;\n customSignals?: {\n triggers?: {\n [key in DbOperationType]?: (\n | string\n | { signal: string; condition?: (ctx: AnyObject) => boolean }\n )[];\n }; // Signals to observe before action\n emissions?: {\n [key in DbOperationType]?: (\n | string\n | { signal: string; condition?: (ctx: AnyObject) => boolean }\n )[];\n }; // Signals to emit after action\n };\n initialData?: { fields: string[]; data: any[][] };\n}\n\nexport interface SchemaDefinition {\n version?: number;\n tables: Record<string, TableDefinition>;\n relations?: Record<\n string,\n {\n on: string;\n type?: \"one-to-one\" | \"one-to-many\" | \"many-to-one\" | \"many-to-many\";\n }\n >;\n meta?: {\n defaultEncoding?: \"utf8\" | \"base64\";\n autoIndex?: boolean;\n relationsVersion?: number;\n dropExisting?: boolean;\n };\n}\n","import {\n DbOperationType,\n SchemaDefinition,\n SCHEMA_TYPES,\n FieldDefinition,\n TableDefinition,\n} from \"../types/database\";\nimport Cadenza, { DatabaseOptions, ServerOptions } from \"../Cadenza\";\nimport { Pool, PoolClient } from \"pg\";\nimport { snakeCase } from \"lodash-es\";\nimport { AnyObject } from \"@cadenza.io/core\";\nimport {\n DbOperationPayload,\n JoinDefinition,\n SubOperation,\n} from \"../types/queryData\";\n\nexport default class DatabaseController {\n private static _instance: DatabaseController;\n public static get instance(): DatabaseController {\n if (!this._instance) this._instance = new DatabaseController();\n return this._instance;\n }\n\n dbClient = new Pool({\n user: process.env.DATABASE_USER ?? \"postgres\",\n host: process.env.DATABASE_ADDRESS ?? \"localhost\",\n port: parseInt(process.env.DATABASE_PORT ?? \"5432\"),\n database: \"postgres\",\n password: process.env.DATABASE_PASSWORD ?? \"03gibnEF\",\n });\n\n reset() {\n this.dbClient.end();\n }\n\n constructor() {\n Cadenza.createMetaRoutine(\n \"DatabaseServiceInit\",\n [\n // Database health check\n // Create database role\n // Create schema version table\n Cadenza.createMetaTask(\n \"Create database\",\n async (ctx) => {\n const { databaseName } = ctx;\n try {\n if (\n !databaseName.split(\"\").every((c: string) => /[a-z_]/.test(c))\n ) {\n throw new Error(\n `Invalid database name ${databaseName}. Names must only contain lowercase alphanumeric characters and underscores`,\n );\n }\n await this.dbClient.query(`CREATE DATABASE ${databaseName}`);\n console.log(`Database ${databaseName} created`);\n // Update dbClient to use the new database\n this.dbClient = new Pool({\n user: process.env.DATABASE_USER ?? \"postgres\",\n host: process.env.DATABASE_ADDRESS ?? \"localhost\",\n port: parseInt(process.env.DATABASE_PORT ?? \"5432\"),\n database: databaseName,\n password: process.env.DATABASE_PASSWORD ?? \"03gibnEF\",\n });\n return true;\n } catch (error: any) {\n if (error.code === \"42P04\") {\n console.log(\"Database already exists\");\n // Database already exists\n return true;\n }\n throw new Error(`Failed to create database: ${error.message}`);\n }\n },\n \"Creates the target database if it doesn't exist\",\n ).then(\n Cadenza.createMetaTask(\n \"Validate schema\",\n (ctx) => {\n const { schema } = ctx as {\n schema: SchemaDefinition;\n options: ServerOptions & DatabaseOptions;\n };\n if (!schema?.tables || typeof schema.tables !== \"object\") {\n throw new Error(\"Invalid schema: missing or invalid tables\");\n }\n for (const [tableName, table] of Object.entries(schema.tables)) {\n if (!table.fields || typeof table.fields !== \"object\") {\n console.log(tableName, \"missing fields\");\n throw new Error(`Invalid table ${tableName}: missing fields`);\n }\n\n // Validate FieldDefinition constraints and customSignals\n for (const [fieldName, field] of Object.entries(table.fields)) {\n if (!fieldName.split(\"\").every((c) => /[a-z_]/.test(c))) {\n console.log(tableName, \"field not lowercase\", fieldName);\n throw new Error(\n `Invalid field name ${fieldName} for ${tableName}. Field names must only contain lowercase alphanumeric characters and underscores`,\n );\n }\n if (!Object.values(SCHEMA_TYPES).includes(field.type)) {\n console.log(\n tableName,\n \"field invalid type\",\n fieldName,\n field.type,\n );\n throw new Error(\n `Invalid type ${field.type} for ${tableName}.${fieldName}`,\n );\n }\n if (\n field.references &&\n !field.references.match(/^[\\w]+[(\\w)]+$/)\n ) {\n console.log(\n tableName,\n \"invalid reference\",\n fieldName,\n field.references,\n );\n throw new Error(\n `Invalid reference ${field.references} for ${tableName}.${fieldName}`,\n );\n }\n if (table.customSignals) {\n for (const op of [\"query\", \"insert\", \"update\", \"delete\"]) {\n const triggers =\n table.customSignals.triggers?.[op as DbOperationType];\n const emissions =\n table.customSignals.emissions?.[op as DbOperationType];\n if (\n triggers &&\n !Array.isArray(triggers) &&\n typeof triggers !== \"object\"\n ) {\n console.log(\n tableName,\n \"invalid triggers\",\n op,\n triggers,\n );\n throw new Error(\n `Invalid triggers for ${tableName}.${op}`,\n );\n }\n if (\n emissions &&\n !Array.isArray(emissions) &&\n typeof emissions !== \"object\"\n ) {\n console.log(\n tableName,\n \"invalid emissions\",\n op,\n emissions,\n );\n throw new Error(\n `Invalid emissions for ${tableName}.${op}`,\n );\n }\n }\n }\n }\n }\n console.log(\"SCHEMA VALIDATED\");\n return true;\n },\n \"Validates database schema structure and content\",\n ).then(\n Cadenza.createMetaTask(\n \"Sort tables by dependencies\",\n this.sortTablesByReferences.bind(this),\n \"Sorts tables by dependencies\",\n ).then(\n Cadenza.createMetaTask(\n \"Split schema into tables\",\n this.splitTables.bind(this),\n \"Generates DDL for database schema\",\n ).then(\n Cadenza.createMetaTask(\n \"Generate tasks\",\n (ctx) => {\n const { table, tableName, options } = ctx;\n console.log(tableName, options);\n\n this.createDatabaseTask(\n \"query\",\n tableName,\n table,\n this.queryFunction.bind(this),\n options,\n );\n\n this.createDatabaseTask(\n \"insert\",\n tableName,\n table,\n this.insertFunction.bind(this),\n options,\n );\n\n this.createDatabaseTask(\n \"update\",\n tableName,\n table,\n this.updateFunction.bind(this),\n options,\n );\n\n this.createDatabaseTask(\n \"delete\",\n tableName,\n table,\n this.deleteFunction.bind(this),\n options,\n );\n },\n \"Generates auto-tasks for database schema\",\n ),\n Cadenza.createMetaTask(\"Generate DDL from table\", (ctx) => {\n const { ddl, table, tableName, schema, options } = ctx;\n const fieldDefs = Object.entries(table.fields)\n .map((value) => {\n const [fieldName, field] = value as [\n string,\n FieldDefinition,\n ];\n let def = `${fieldName} ${field.type.toUpperCase()}`;\n if (field.type === \"varchar\")\n def += `(${field.constraints?.maxLength ?? 255})`;\n if (field.type === \"decimal\")\n def += `(${field.constraints?.precision ?? 10},${field.constraints?.scale ?? 2})`;\n if (field.primary) def += \" PRIMARY KEY\";\n if (field.unique) def += \" UNIQUE\";\n if (field.default !== undefined)\n def += ` DEFAULT ${field.default === \"\" ? \"''\" : String(field.default)}`;\n if (field.required && !field.nullable) def += \" NOT NULL\";\n if (field.nullable) def += \" NULL\";\n if (field.generated)\n def += ` GENERATED ALWAYS AS ${field.generated.toUpperCase()} STORED`;\n if (field.references)\n def += ` REFERENCES ${field.references} ON DELETE ${field.onDelete || \"DO NOTHING\"}`;\n if (field.encrypted) def += \" ENCRYPTED\"; // Pseudo, handle via app-side\n\n if (field.constraints?.check) {\n def += ` CHECK (${field.constraints.check})`;\n }\n return def;\n })\n .join(\", \");\n\n let sql = \"\";\n if (schema.meta?.dropExisting) {\n sql = `DROP TABLE IF EXISTS ${tableName} CASCADE;`;\n ddl.push(sql);\n }\n\n sql = `CREATE TABLE IF NOT EXISTS ${tableName} (${fieldDefs})`;\n // if (table.meta?.appendOnly) { // TODO Add prevent_context_modification() function\n // sql += `;\\nCREATE TRIGGER prevent_modification BEFORE UPDATE OR DELETE ON ${tableName} FOR EACH STATEMENT EXECUTE FUNCTION prevent_context_modification();`;\n // }\n\n ddl.push(sql);\n\n return { ddl, table, tableName, schema, options };\n }).then(\n Cadenza.createMetaTask(\"Generate index DDL\", (ctx) => {\n const { ddl, table, tableName, schema, options } = ctx;\n if (table.indexes) {\n table.indexes.forEach((fields: string[]) => {\n ddl.push(\n `CREATE INDEX IF NOT EXISTS idx_${tableName}_${fields.join(\"_\")} ON ${tableName} (${fields.join(\", \")});`,\n );\n });\n }\n\n return { ddl, table, tableName, schema, options };\n }).then(\n Cadenza.createMetaTask(\n \"Generate primary key ddl\",\n (ctx) => {\n const { ddl, table, tableName, schema, options } = ctx;\n if (table.primaryKey) {\n ddl.push(\n `ALTER TABLE ${tableName} DROP CONSTRAINT IF EXISTS unique_${tableName}_${table.primaryKey.join(\"_\")};`, // TODO: should be cascade?\n `ALTER TABLE ${tableName} ADD CONSTRAINT unique_${tableName}_${table.primaryKey.join(\"_\")} PRIMARY KEY (${table.primaryKey.join(\", \")});`,\n );\n }\n\n return { ddl, table, tableName, schema, options };\n },\n ).then(\n Cadenza.createMetaTask(\n \"Generate unique index DDL\",\n (ctx) => {\n const { ddl, table, tableName, schema, options } =\n ctx;\n if (table.uniqueConstraints) {\n table.uniqueConstraints.forEach(\n (fields: string[]) => {\n ddl.push(\n `ALTER TABLE ${tableName} DROP CONSTRAINT IF EXISTS unique_${tableName}_${fields.join(\"_\")};`, // TODO: should be cascade?\n `ALTER TABLE ${tableName} ADD CONSTRAINT unique_${tableName}_${fields.join(\"_\")} UNIQUE (${fields.join(\", \")});`,\n );\n },\n );\n }\n\n return { ddl, table, tableName, schema, options };\n },\n ).then(\n Cadenza.createMetaTask(\n \"Generate foreign key DDL\",\n (ctx) => {\n const { ddl, table, tableName, schema, options } =\n ctx;\n if (table.foreignKeys) {\n for (const foreignKey of table.foreignKeys as {\n tableName: string;\n fields: string[];\n referenceFields: string[];\n }[]) {\n const foreignKeyName = `fk_${tableName}_${foreignKey.fields.join(\"_\")}`;\n ddl.push(\n `ALTER TABLE ${tableName} DROP CONSTRAINT IF EXISTS ${foreignKeyName};`, // TODO: should be cascade?\n `ALTER TABLE ${tableName} ADD CONSTRAINT ${foreignKeyName} FOREIGN KEY (${foreignKey.fields.join(\n \", \",\n )}) REFERENCES ${foreignKey.tableName} (${foreignKey.referenceFields.join(\n \", \",\n )});`,\n );\n }\n }\n return { ddl, table, tableName, schema, options };\n },\n ).then(\n Cadenza.createMetaTask(\n \"Generate trigger DDL\",\n (ctx) => {\n const { ddl, table, tableName, schema, options } =\n ctx;\n if (table.triggers) {\n for (const [\n triggerName,\n trigger,\n ] of Object.entries(table.triggers) as [\n string,\n any,\n ][]) {\n ddl.push(\n `CREATE TRIGGER ${triggerName} ${trigger.when} ${trigger.event} ON ${tableName} FOR EACH STATEMENT EXECUTE FUNCTION ${trigger.function};`,\n );\n }\n }\n return { ddl, table, tableName, schema, options };\n },\n ).then(\n Cadenza.createMetaTask(\n \"Generate initial data DDL\",\n (ctx) => {\n const {\n ddl,\n table,\n tableName,\n schema,\n options,\n } = ctx;\n if (table.initialData) {\n ddl.push(\n `INSERT INTO ${tableName} (${table.initialData.fields.join(\", \")}) VALUES ${table.initialData.data\n .map(\n (row: any[]) =>\n `(${row\n .map((value) =>\n value === undefined\n ? \"NULL\"\n : value.charAt(0) === \"'\"\n ? value\n : `'${value}'`,\n )\n .join(\", \")})`, // TODO: handle non string data\n )\n .join(\", \")} ON CONFLICT DO NOTHING;`,\n );\n }\n\n return {\n ddl,\n table,\n tableName,\n schema,\n options,\n };\n },\n ).then(\n Cadenza.createUniqueMetaTask(\n \"Join DDL\",\n (ctx) => {\n const { joinedContexts } = ctx;\n const ddl: string[] = [];\n for (const joinedContext of joinedContexts) {\n ddl.push(...joinedContext.ddl);\n }\n ddl.flat();\n return {\n ddl,\n schema: joinedContexts[0].schema,\n options: joinedContexts[0].options,\n table: joinedContexts[0].table,\n tableName: joinedContexts[0].tableName,\n };\n },\n ).then(\n Cadenza.createMetaTask(\n \"Apply Database Changes\",\n async (ctx) => {\n const { ddl } = ctx;\n if (ddl && ddl.length > 0) {\n for (const sql of ddl) {\n try {\n console.log(\"Applying SQL\", sql);\n await this.dbClient.query(sql);\n } catch (error: any) {\n console.error(\n \"Error applying DDL\",\n error,\n );\n }\n }\n }\n console.log(\"DDL applied\");\n return true;\n },\n \"Applies generated DDL to the database\",\n ).emits(\"meta.database.setup_done\"),\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n ],\n \"Initializes the database service with schema parsing and task/signal generation\",\n ).doOn(\"meta.database_init_requested\");\n }\n\n private async getClient(): Promise<PoolClient> {\n const client = (await this.dbClient.connect()) as unknown as any;\n const query = client.query;\n const release = client.release;\n // set a timeout of 5 seconds, after which we will log this client's last query\n const timeout = setTimeout(() => {\n console.error(\"A client has been checked out for more than 5 seconds!\");\n console.error(\n `The last executed query on this client was: ${client.lastQuery}`,\n );\n }, 5000);\n // monkey patch the query method to keep track of the last query executed\n client.query = (...args: any[]) => {\n client.lastQuery = args;\n return query.apply(client, args);\n };\n client.release = () => {\n // clear our timeout\n clearTimeout(timeout);\n // set the methods back to their old un-monkey-patched version\n client.query = query;\n client.release = release;\n return release.apply(client);\n };\n return client;\n }\n\n private async waitForDatabase(\n transaction: (\n client: any,\n context: AnyObject,\n ) => Promise<AnyObject | boolean>,\n client: any,\n context: AnyObject,\n ) {\n for (let i = 0; i < 10; i++) {\n try {\n return await transaction(client, context);\n } catch (err: unknown) {\n if (err && (err as Error).message.includes(\"does not exist\")) {\n console.log(`Waiting for database to be ready...`);\n await new Promise((res) => setTimeout(res, 1000));\n } else {\n console.error(\"Database query errored: \", err, context);\n return { rows: [] };\n }\n }\n }\n throw new Error(`Timeout waiting for database to be ready`);\n }\n\n sortTablesByReferences(ctx: AnyObject): AnyObject {\n // Build dependency graph: map of table -> set of dependent tables\n const schema: SchemaDefinition = ctx.schema;\n const graph: Map<string, Set<string>> = new Map();\n const allTables = Object.keys(schema.tables);\n\n // Initialize graph with all tables\n allTables.forEach((table) => graph.set(table, new Set()));\n\n // Populate dependencies, skipping self-references for cycle detection\n for (const [tableName, table] of Object.entries(schema.tables)) {\n for (const field of Object.values(table.fields)) {\n if (field.references) {\n const [refTable] = field.references.split(\"(\"); // Extract referenced table\n if (refTable !== tableName && allTables.includes(refTable)) {\n graph.get(refTable)?.add(tableName); // refTable depends on tableName\n }\n }\n }\n\n if (table.foreignKeys) {\n for (const foreignKey of table.foreignKeys) {\n const refTable = foreignKey.tableName;\n if (refTable !== tableName && allTables.includes(refTable)) {\n graph.get(refTable)?.add(tableName); // refTable depends on tableName\n }\n }\n }\n }\n\n // Topological sort using DFS with cycle detection\n const visited: Set<string> = new Set();\n const tempMark: Set<string> = new Set(); // For cycle detection\n const sorted: string[] = [];\n let hasCycles = false;\n\n function visit(table: string) {\n if (tempMark.has(table)) {\n hasCycles = true; // Mark cycle but continue\n return;\n }\n if (visited.has(table)) return;\n\n tempMark.add(table);\n for (const dep of graph.get(table) || []) {\n visit(dep);\n }\n tempMark.delete(table);\n visited.add(table);\n sorted.push(table);\n }\n\n // Visit each unvisited table\n for (const table of allTables) {\n if (!visited.has(table)) {\n visit(table);\n }\n }\n\n // Handle unvisited tables (e.g., no dependencies)\n for (const table of allTables) {\n if (!visited.has(table)) {\n sorted.push(table);\n }\n }\n\n sorted.reverse();\n\n console.log(\"sorted tables\", sorted, \"has cycles\", hasCycles);\n\n return { ...ctx, sortedTables: sorted, hasCycles };\n }\n\n async *splitTables(ctx: any) {\n const { sortedTables, schema, options = {} } = ctx;\n for (const tableName of sortedTables) {\n const table = schema.tables[tableName];\n yield { ddl: [], table, tableName, schema, options };\n }\n }\n\n async queryFunction(\n tableName: string,\n context: DbOperationPayload,\n ): Promise<any> {\n const {\n filter = {},\n fields = [],\n joins = {},\n sort = {},\n limit,\n offset,\n } = context;\n\n // Build base query\n let sql = `SELECT ${fields.length ? fields.join(\", \") : \"*\"} FROM ${tableName}`;\n const params: any[] = [];\n const conditions: string[] = [];\n\n // Handle filter\n if (Object.keys(filter).length > 0) {\n conditions.push(this.buildWhereClause(filter, params));\n }\n\n // Handle joins\n if (Object.keys(joins).length > 0) {\n sql += \" \" + this.buildJoinClause(joins);\n }\n\n // Handle sort\n if (Object.keys(sort).length > 0) {\n sql +=\n \" ORDER BY \" +\n Object.entries(sort)\n .map(([field, direction]) => `${field} ${direction}`)\n .join(\", \");\n }\n\n // Handle limit and offset\n if (limit !== undefined) sql += ` LIMIT $${params.length + 1}`;\n params.push(limit);\n if (offset !== undefined) sql += ` OFFSET $${params.length + 1}`;\n params.push(offset);\n\n try {\n const result = await this.dbClient.query(sql, params);\n return {\n [`${tableName}s`]: result.rows,\n rowCount: result.rowCount,\n __success: true,\n ...context,\n };\n } catch (error: any) {\n return {\n ...context,\n errored: true,\n __error: `Query failed: ${error.message}`,\n __errors: { query: error.message },\n };\n }\n }\n\n async insertFunction(\n tableName: string,\n context: DbOperationPayload,\n ): Promise<any> {\n const { data, transaction = true, fields = [], onConflict } = context;\n\n if (!data || (Array.isArray(data) && data.length === 0)) {\n return { errored: true, __error: \"No data provided for insert\" };\n }\n\n const client = transaction ? await this.getClient() : this.dbClient;\n try {\n if (transaction) await client.query(\"BEGIN\");\n\n const resolvedData = await this.resolveNestedData(data, tableName);\n const isBatch = Array.isArray(resolvedData);\n const rows = isBatch ? resolvedData : [resolvedData];\n\n const sql = `INSERT INTO ${tableName} (${Object.keys(rows[0]).join(\", \")}) VALUES `;\n const values = rows\n .map(\n (row) =>\n `(${Object.values(row)\n .map((value: any, i) => {\n if (typeof value === \"object\" && value?.__effect) {\n if (value.__effect === \"increment\") {\n return `${Object.keys(row)[i]} + 1`;\n }\n if (value.__effect === \"decrement\") {\n return `${Object.keys(row)[i]} - 1`;\n }\n if (value.__effect === \"set\") {\n return `${Object.keys(row)[i]} = ${value.__value}`; // TODO: placeholder, not working\n }\n }\n return `$${i + 1}`;\n })\n .join(\", \")})`,\n )\n .join(\", \");\n const params = rows.flatMap((row) => Object.values(row));\n\n let onConflictSql = \"\";\n if (onConflict) {\n const { target, action } = onConflict;\n onConflictSql += ` ON CONFLICT (${target.join(\", \")})`;\n if (action.do === \"update\") {\n if (!action.set || Object.keys(action.set).length === 0) {\n throw new Error(\"Update action requires 'set' fields\");\n }\n const setClauses = Object.entries(action.set)\n .map(\n ([field, value]) =>\n `${field} = ${value === \"excluded\" ? \"excluded.\" + field : `$${params.length + 1}`}`,\n )\n .join(\", \");\n params.push(\n ...Object.values(action.set).filter(\n (v) => typeof v !== \"string\" || !v.startsWith(\"excluded.\"),\n ),\n );\n onConflictSql += ` DO UPDATE SET ${setClauses}`;\n if (action.where) onConflictSql += ` WHERE ${action.where}`;\n } else {\n onConflictSql += ` DO NOTHING`;\n }\n }\n\n const result = await client.query(\n `${sql} ${values}${onConflictSql} RETURNING ${fields.length ? fields.join(\", \") : \"*\"}`,\n params,\n );\n if (transaction) await client.query(\"COMMIT\");\n return {\n [`${tableName}${isBatch ? \"s\" : \"\"}`]: isBatch\n ? result.rows\n : result.rows[0],\n rowCount: result.rowCount,\n __inserted: true,\n };\n } catch (error: any) {\n if (transaction) await client.query(\"ROLLBACK\");\n return {\n ...context,\n errored: true,\n __error: `Insert failed: ${error.message}`,\n __errors: { insert: error.message },\n };\n } finally {\n if (transaction && client) {\n // @ts-ignore\n client.release();\n }\n }\n }\n\n async updateFunction(\n tableName: string,\n context: DbOperationPayload,\n ): Promise<any> {\n const { data, filter = {}, transaction = true } = context;\n\n if (!data || Object.keys(data).length === 0) {\n return { errored: true, __error: \"No data provided for update\" };\n }\n\n const client = transaction ? await this.getClient() : this.dbClient;\n try {\n if (transaction) await client.query(\"BEGIN\");\n\n const resolvedData = await this.resolveNestedData(data, tableName);\n const setClause = Object.entries(resolvedData)\n .map(([key, value]) => `${key} = $${params.length + 1}`)\n .join(\", \");\n const params = Object.values(resolvedData);\n const whereClause = this.buildWhereClause(filter, params);\n\n const sql = `UPDATE ${tableName} SET ${setClause} ${whereClause} RETURNING *`;\n const result = await client.query(sql, params);\n if (transaction) await client.query(\"COMMIT\");\n return {\n [`${tableName}`]: result.rows[0],\n __updated: true,\n };\n } catch (error: any) {\n if (transaction) await client.query(\"ROLLBACK\");\n return {\n ...context,\n errored: true,\n __error: `Update failed: ${error.message}`,\n __errors: { update: error.message },\n };\n } finally {\n if (transaction && client) {\n // @ts-ignore\n client.release();\n }\n }\n }\n\n async deleteFunction(\n tableName: string,\n context: DbOperationPayload,\n ): Promise<any> {\n const { filter = {}, transaction = true } = context;\n\n if (Object.keys(filter).length === 0) {\n return { errored: true, __error: \"No filter provided for delete\" };\n }\n\n const client = transaction ? await this.getClient() : this.dbClient;\n try {\n if (transaction) await client.query(\"BEGIN\");\n\n const params: any[] = [];\n const whereClause = this.buildWhereClause(filter, params);\n const sql = `DELETE FROM ${tableName} ${whereClause} RETURNING *`;\n const result = await client.query(sql, params);\n if (transaction) await client.query(\"COMMIT\");\n return {\n [`${tableName}`]: result.rows[0],\n __deleted: true,\n };\n } catch (error: any) {\n if (transaction) await client.query(\"ROLLBACK\");\n return {\n errored: true,\n __error: `Delete failed: ${error.message}`,\n __errors: { delete: error.message },\n };\n } finally {\n if (transaction && client) {\n // @ts-ignore\n client.release();\n }\n }\n }\n\n buildWhereClause(filter: AnyObject, params: any[]): string {\n const conditions = [];\n for (const [key, value] of Object.entries(filter)) {\n if (value !== undefined) {\n conditions.push(`${snakeCase(key)} = $${params.length + 1}`);\n params.push(value);\n }\n }\n return conditions.length ? `WHERE ${conditions.join(\" AND \")}` : \"\";\n }\n\n buildJoinClause(joins: Record<string, JoinDefinition>): string {\n let joinSql = \"\";\n for (const [table, join] of Object.entries(joins)) {\n joinSql += ` LEFT JOIN ${snakeCase(table)} ${join.alias} ON ${join.on}`;\n if (join.joins) joinSql += \" \" + this.buildJoinClause(join.joins);\n }\n return joinSql;\n }\n\n async resolveNestedData(data: any, tableName: string): Promise<any> {\n if (Array.isArray(data))\n return Promise.all(data.map((d) => this.resolveNestedData(d, tableName)));\n if (typeof data !== \"object\" || data === null) return data;\n\n const resolved = { ...data };\n for (const [key, value] of Object.entries(data)) {\n if (\n typeof value === \"object\" &&\n value !== null &&\n \"subOperation\" in value\n ) {\n const subOp = value as SubOperation;\n const subResult = await this.executeSubOperation(subOp);\n resolved[snakeCase(key)] =\n subResult[subOp.return || \"full\"] ?? subResult;\n } else if (\n typeof value === \"string\" &&\n [\"increment\", \"decrement\", \"set\"].includes(value)\n ) {\n resolved[snakeCase(key)] = { __effect: value }; // Placeholder for effect handling (DB-side or app-side)\n } else if (typeof value === \"object\") {\n resolved[snakeCase(key)] = await this.resolveNestedData(\n value,\n tableName,\n );\n }\n }\n return resolved;\n }\n\n async executeSubOperation(op: SubOperation): Promise<any> {\n const client = await this.getClient();\n try {\n await client.query(\"BEGIN\");\n let result;\n if (op.subOperation === \"insert\") {\n const resolvedData = await this.resolveNestedData(op.data, op.table);\n const sql = `INSERT INTO ${op.table} (${Object.keys(resolvedData).join(\", \")}) VALUES (${Object.values(\n resolvedData,\n )\n .map((_, i) => `$${i + 1}`)\n .join(\n \", \",\n )}) ON CONFLICT DO NOTHING RETURNING ${op.return === \"id\" ? \"id\" : \"*\"}`;\n result =\n ((await client.query(sql, Object.values(resolvedData))).rows[0] ??\n op.return === \"id\")\n ? resolvedData.id\n ? { id: resolvedData.id }\n : undefined\n : undefined;\n } else if (op.subOperation === \"query\") {\n const params: any[] = [];\n const whereClause = this.buildWhereClause(op.filter || {}, params);\n const sql = `SELECT ${op.fields?.join(\", \") || \"*\"} FROM ${op.table} ${whereClause} LIMIT 1`;\n result = (await client.query(sql, params)).rows[0];\n }\n await client.query(\"COMMIT\");\n return result || {};\n } catch (error) {\n await client.query(\"ROLLBACK\");\n throw error;\n } finally {\n client.release();\n }\n }\n\n createDatabaseTask(\n op: DbOperationType,\n tableName: string,\n table: TableDefinition,\n queryFunction: (tableName: string, context: AnyObject) => Promise<any>,\n options: ServerOptions,\n ) {\n // const defaultSignal = `${tableName}.${op}`;\n Cadenza.createTask(\n `db${op.charAt(0).toUpperCase() + op.slice(1)}${tableName.charAt(0).toUpperCase() + tableName.slice(1)}`,\n async (context, emit) => {\n const triggerConditions: any | undefined =\n table.customSignals?.triggers?.query?.filter(\n (trigger: any) => trigger.condition,\n );\n for (const triggerCondition of triggerConditions ?? []) {\n if (\n triggerCondition.condition &&\n !triggerCondition.condition(context)\n ) {\n return {\n failed: true,\n error: `Condition for signal trigger failed: ${triggerCondition.signal}`,\n };\n }\n }\n\n context = await queryFunction(tableName, context.querydata ?? context);\n\n for (const signal of table.customSignals?.emissions?.[op] ??\n ([] as any[])) {\n if (signal.condition && !signal.condition(context)) {\n continue;\n }\n emit(signal.signal ?? signal, context);\n }\n\n console.log(\n \"EXECUTED\",\n `db${op.charAt(0).toUpperCase() + op.slice(1)}${tableName.charAt(0).toUpperCase() + tableName.slice(1)}`,\n context,\n );\n\n delete context.queryData;\n delete context.data;\n delete context.filter;\n delete context.fields;\n delete context.joins;\n delete context.sort;\n delete context.limit;\n delete context.offset;\n\n return context;\n },\n `Auto-generated ${op} task for ${tableName}`,\n {\n isMeta: options.isMeta,\n concurrency: 50,\n validateInputContext: false, // TODO\n getTagCallback: (\n context?: AnyObject, // TODO more granular tags\n ) =>\n context?.__metadata?.__executionTraceId ??\n context?.__executionTraceId ??\n \"default\",\n inputSchema: {\n // TODO\n type: \"object\",\n properties: {\n filter: {\n type: \"object\",\n },\n },\n },\n },\n ).doOn(\n ...(table.customSignals?.triggers?.[op]?.map((signal: any) => {\n return typeof signal === \"string\" ? signal : signal.signal;\n }) ?? []),\n );\n console.log(\"Created database task\", op, tableName);\n }\n}\n"],"mappings":"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U;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EACxD,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EACxD,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EACvE,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EACvE,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EACxD,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EACxD,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EACxD,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EACvE,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EACvE,UAAU;AAAA,EAAM,UAAU;AAAA,EAC1B,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EACzC,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EACvE,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EACvE,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EACxD,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EACxD,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EACzC,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EACzC,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EACzC,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EACzC,UAAU;AAAA,EAAM,UAAU;AAAA,EAAK,UAAU;AAAA,EAAK,UAAU;AAAA,EACxD,UAAU;AAAA,EAA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","names":["import_core","uuid","_a","_a","_a","_b","_c","_d","self","import_core","import_uuid","uuid","_a","import_uuid","_a","_b","express","bodyParser","helmet","cors","ctx","uuid","http","fs","https","emit","fetch","import_rate_limiter_flexible","import_socket","_a","_b","next","xss","ctx","Symbol","objectProto","nativeObjectToString","symToStringTag","rsComboMarksRange","reComboHalfMarksRange","rsComboSymbolsRange","rsComboRange","rsCombo","rsApos","_a","_b","_c","_d","Cadenza","_a","_b","_c","_d","import_core"]}
|