@loopstack/core 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/config/core/tools/batch-create-entity.yaml +16 -0
  3. package/dist/config/core/tools/create-entity.yaml +14 -0
  4. package/dist/config/core/tools/set-context.yaml +14 -0
  5. package/dist/config/core/tools/sql-query.yaml +26 -0
  6. package/dist/config-provider.service.js +0 -2
  7. package/dist/config-provider.service.js.map +1 -1
  8. package/dist/modules/common/common.module.js +2 -1
  9. package/dist/modules/common/common.module.js.map +1 -1
  10. package/dist/modules/common/services/expression-handler/object-expression.handler.d.ts +23 -5
  11. package/dist/modules/common/services/expression-handler/object-expression.handler.js +509 -38
  12. package/dist/modules/common/services/expression-handler/object-expression.handler.js.map +1 -1
  13. package/dist/modules/common/services/handlebars-helpers/{date-formatter-handlebars-helper.service.d.ts → date-formatter-helper.service.d.ts} +1 -1
  14. package/dist/modules/common/services/handlebars-helpers/{date-formatter-handlebars-helper.service.js → date-formatter-helper.service.js} +6 -6
  15. package/dist/modules/common/services/handlebars-helpers/date-formatter-helper.service.js.map +1 -0
  16. package/dist/modules/common/services/handlebars-helpers/index.d.ts +2 -1
  17. package/dist/modules/common/services/handlebars-helpers/index.js +2 -1
  18. package/dist/modules/common/services/handlebars-helpers/index.js.map +1 -1
  19. package/dist/modules/common/services/handlebars-helpers/operators-helper.service.d.ts +41 -0
  20. package/dist/modules/common/services/handlebars-helpers/operators-helper.service.js +418 -0
  21. package/dist/modules/common/services/handlebars-helpers/operators-helper.service.js.map +1 -0
  22. package/dist/modules/common/services/handlebars-processor.service.d.ts +4 -3
  23. package/dist/modules/common/services/handlebars-processor.service.js +75 -7
  24. package/dist/modules/common/services/handlebars-processor.service.js.map +1 -1
  25. package/dist/modules/common/services/template.service.d.ts +2 -2
  26. package/dist/modules/common/services/template.service.js +5 -5
  27. package/dist/modules/common/services/template.service.js.map +1 -1
  28. package/dist/modules/configuration/configuration.module.js +2 -2
  29. package/dist/modules/configuration/services/configuration.service.d.ts +3 -3
  30. package/dist/modules/configuration/services/configuration.service.js +6 -6
  31. package/dist/modules/configuration/services/configuration.service.js.map +1 -1
  32. package/dist/modules/configuration/services/dynamic-schema-generator.service.d.ts +8 -8
  33. package/dist/modules/configuration/services/dynamic-schema-generator.service.js +13 -13
  34. package/dist/modules/configuration/services/dynamic-schema-generator.service.js.map +1 -1
  35. package/dist/modules/configuration/services/handler-registry.service.d.ts +20 -0
  36. package/dist/modules/configuration/services/{service-registry.service.js → handler-registry.service.js} +26 -26
  37. package/dist/modules/configuration/services/{service-registry.service.js.map → handler-registry.service.js.map} +1 -1
  38. package/dist/modules/configuration/services/index.d.ts +1 -1
  39. package/dist/modules/configuration/services/index.js +1 -1
  40. package/dist/modules/persistence/handlers/create-entity.handler.d.ts +24 -0
  41. package/dist/modules/persistence/handlers/create-entity.handler.js +65 -0
  42. package/dist/modules/persistence/handlers/create-entity.handler.js.map +1 -0
  43. package/dist/modules/persistence/handlers/sql-query.handler.d.ts +24 -0
  44. package/dist/modules/persistence/handlers/sql-query.handler.js +62 -0
  45. package/dist/modules/persistence/handlers/sql-query.handler.js.map +1 -0
  46. package/dist/modules/persistence/persistence.module.js +14 -0
  47. package/dist/modules/persistence/persistence.module.js.map +1 -1
  48. package/dist/modules/persistence/services/dynamic-repository.service.d.ts +26 -0
  49. package/dist/modules/persistence/services/dynamic-repository.service.js +97 -0
  50. package/dist/modules/persistence/services/dynamic-repository.service.js.map +1 -0
  51. package/dist/modules/persistence/services/index.d.ts +1 -0
  52. package/dist/modules/persistence/services/index.js +1 -0
  53. package/dist/modules/persistence/services/index.js.map +1 -1
  54. package/dist/modules/scheduler/entities/scheduled-task.entity.d.ts +30 -0
  55. package/dist/modules/scheduler/entities/scheduled-task.entity.js +128 -0
  56. package/dist/modules/scheduler/entities/scheduled-task.entity.js.map +1 -0
  57. package/dist/modules/scheduler/events/task-execution.event.d.ts +8 -0
  58. package/dist/modules/scheduler/events/task-execution.event.js +19 -0
  59. package/dist/modules/scheduler/events/task-execution.event.js.map +1 -0
  60. package/dist/modules/scheduler/handler/create-task-schedule.handler.d.ts +55 -0
  61. package/dist/modules/scheduler/handler/create-task-schedule.handler.js +121 -0
  62. package/dist/modules/scheduler/handler/create-task-schedule.handler.js.map +1 -0
  63. package/dist/modules/scheduler/handler/remove-task-schedule.handler.d.ts +17 -0
  64. package/dist/modules/scheduler/handler/remove-task-schedule.handler.js +48 -0
  65. package/dist/modules/scheduler/handler/remove-task-schedule.handler.js.map +1 -0
  66. package/dist/modules/scheduler/interfaces/create-task-schedule.interface.d.ts +11 -0
  67. package/dist/modules/scheduler/interfaces/create-task-schedule.interface.js +3 -0
  68. package/dist/modules/scheduler/interfaces/create-task-schedule.interface.js.map +1 -0
  69. package/dist/modules/scheduler/scheduler.module.d.ts +2 -0
  70. package/dist/modules/scheduler/scheduler.module.js +39 -0
  71. package/dist/modules/scheduler/scheduler.module.js.map +1 -0
  72. package/dist/modules/scheduler/schemas/task.schema.d.ts +3 -0
  73. package/dist/modules/scheduler/schemas/task.schema.js +30 -0
  74. package/dist/modules/scheduler/schemas/task.schema.js.map +1 -0
  75. package/dist/modules/scheduler/services/task-execution.listener.d.ts +5 -0
  76. package/dist/modules/scheduler/services/task-execution.listener.js +40 -0
  77. package/dist/modules/scheduler/services/task-execution.listener.js.map +1 -0
  78. package/dist/modules/scheduler/services/task-scheduler.service.d.ts +21 -0
  79. package/dist/modules/scheduler/services/task-scheduler.service.js +194 -0
  80. package/dist/modules/scheduler/services/task-scheduler.service.js.map +1 -0
  81. package/dist/modules/workflow-processor/{tool-services/add-namespace.service.d.ts → handlers/add-namespace.handler.d.ts} +3 -3
  82. package/dist/modules/workflow-processor/{tool-services/add-namespace.service.js → handlers/add-namespace.handler.js} +9 -10
  83. package/dist/modules/workflow-processor/handlers/add-namespace.handler.js.map +1 -0
  84. package/dist/modules/workflow-processor/{tool-services/batch-create-documents.service.d.ts → handlers/batch-create-documents.handler.d.ts} +5 -5
  85. package/dist/modules/workflow-processor/{tool-services/batch-create-documents.service.js → handlers/batch-create-documents.handler.js} +9 -10
  86. package/dist/modules/workflow-processor/handlers/batch-create-documents.handler.js.map +1 -0
  87. package/dist/modules/workflow-processor/{tool-services/create-document.service.d.ts → handlers/create-document.handler.d.ts} +16 -16
  88. package/dist/modules/workflow-processor/{tool-services/create-document.service.js → handlers/create-document.handler.js} +10 -11
  89. package/dist/modules/workflow-processor/handlers/create-document.handler.js.map +1 -0
  90. package/dist/modules/workflow-processor/handlers/index.d.ts +9 -0
  91. package/dist/modules/workflow-processor/{tool-services → handlers}/index.js +9 -9
  92. package/dist/modules/workflow-processor/handlers/index.js.map +1 -0
  93. package/dist/modules/workflow-processor/{tool-services/load-document.service.d.ts → handlers/load-document.handler.d.ts} +3 -3
  94. package/dist/modules/workflow-processor/{tool-services/load-document.service.js → handlers/load-document.handler.js} +9 -10
  95. package/dist/modules/workflow-processor/handlers/load-document.handler.js.map +1 -0
  96. package/dist/modules/workflow-processor/{tool-services/mock.service.d.ts → handlers/mock.handler.d.ts} +3 -3
  97. package/dist/modules/workflow-processor/{tool-services/mock.service.js → handlers/mock.handler.js} +9 -13
  98. package/dist/modules/workflow-processor/handlers/mock.handler.js.map +1 -0
  99. package/dist/modules/workflow-processor/{tool-services/set-context.service.d.ts → handlers/set-context.handler.d.ts} +3 -3
  100. package/dist/modules/workflow-processor/{tool-services/set-context.service.js → handlers/set-context.handler.js} +9 -10
  101. package/dist/modules/workflow-processor/handlers/set-context.handler.js.map +1 -0
  102. package/dist/modules/workflow-processor/{tool-services/set-target-place.service.d.ts → handlers/set-target-place.handler.d.ts} +3 -3
  103. package/dist/modules/workflow-processor/{tool-services/set-target-place.service.js → handlers/set-target-place.handler.js} +16 -15
  104. package/dist/modules/workflow-processor/handlers/set-target-place.handler.js.map +1 -0
  105. package/dist/modules/workflow-processor/{tool-services/transition-selector.service.d.ts → handlers/transition-selector.handler.d.ts} +3 -3
  106. package/dist/modules/workflow-processor/{tool-services/transition-selector.service.js → handlers/transition-selector.handler.js} +9 -10
  107. package/dist/modules/workflow-processor/handlers/transition-selector.handler.js.map +1 -0
  108. package/dist/modules/workflow-processor/{tool-services/update-document.service.d.ts → handlers/update-document.handler.d.ts} +16 -16
  109. package/dist/modules/workflow-processor/{tool-services/update-document.service.js → handlers/update-document.handler.js} +9 -10
  110. package/dist/modules/workflow-processor/handlers/update-document.handler.js.map +1 -0
  111. package/dist/modules/workflow-processor/services/handler-execution.service.d.ts +12 -0
  112. package/dist/modules/workflow-processor/services/{service-execution.service.js → handler-execution.service.js} +21 -21
  113. package/dist/modules/workflow-processor/services/{service-execution.service.js.map → handler-execution.service.js.map} +1 -1
  114. package/dist/modules/workflow-processor/services/index.d.ts +1 -1
  115. package/dist/modules/workflow-processor/services/index.js +1 -1
  116. package/dist/modules/workflow-processor/services/pipeline-processor.service.js +10 -3
  117. package/dist/modules/workflow-processor/services/pipeline-processor.service.js.map +1 -1
  118. package/dist/modules/workflow-processor/services/state-machine-config.service.js +3 -3
  119. package/dist/modules/workflow-processor/services/state-machine-config.service.js.map +1 -1
  120. package/dist/modules/workflow-processor/services/state-machine-processor.service.d.ts +3 -3
  121. package/dist/modules/workflow-processor/services/state-machine-processor.service.js +6 -6
  122. package/dist/modules/workflow-processor/services/state-machine-processor.service.js.map +1 -1
  123. package/dist/modules/workflow-processor/services/tool-execution.service.d.ts +4 -4
  124. package/dist/modules/workflow-processor/services/tool-execution.service.js +3 -3
  125. package/dist/modules/workflow-processor/validators/initial-run.validator.js +0 -1
  126. package/dist/modules/workflow-processor/validators/initial-run.validator.js.map +1 -1
  127. package/dist/modules/workflow-processor/validators/workflow-dependencies.validator.js +0 -1
  128. package/dist/modules/workflow-processor/validators/workflow-dependencies.validator.js.map +1 -1
  129. package/dist/modules/workflow-processor/validators/workflow-option.validator.js +0 -1
  130. package/dist/modules/workflow-processor/validators/workflow-option.validator.js.map +1 -1
  131. package/dist/modules/workflow-processor/workflow-processor.module.js +11 -11
  132. package/dist/modules/workflow-processor/workflow-processor.module.js.map +1 -1
  133. package/dist/services/migrations.service.js +4 -4
  134. package/dist/services/migrations.service.js.map +1 -1
  135. package/dist/utils/load-configuration.js +3 -1
  136. package/dist/utils/load-configuration.js.map +1 -1
  137. package/package.json +20 -9
  138. package/dist/config/core.yaml +0 -1
  139. package/dist/modules/common/services/handlebars-helpers/date-formatter-handlebars-helper.service.js.map +0 -1
  140. package/dist/modules/configuration/services/service-registry.service.d.ts +0 -20
  141. package/dist/modules/workflow-processor/services/service-execution.service.d.ts +0 -12
  142. package/dist/modules/workflow-processor/tool-services/add-namespace.service.js.map +0 -1
  143. package/dist/modules/workflow-processor/tool-services/batch-create-documents.service.js.map +0 -1
  144. package/dist/modules/workflow-processor/tool-services/create-document.service.js.map +0 -1
  145. package/dist/modules/workflow-processor/tool-services/index.d.ts +0 -9
  146. package/dist/modules/workflow-processor/tool-services/index.js.map +0 -1
  147. package/dist/modules/workflow-processor/tool-services/load-document.service.js.map +0 -1
  148. package/dist/modules/workflow-processor/tool-services/mock.service.js.map +0 -1
  149. package/dist/modules/workflow-processor/tool-services/set-context.service.js.map +0 -1
  150. package/dist/modules/workflow-processor/tool-services/set-target-place.service.js.map +0 -1
  151. package/dist/modules/workflow-processor/tool-services/transition-selector.service.js.map +0 -1
  152. package/dist/modules/workflow-processor/tool-services/update-document.service.js.map +0 -1
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var CreateTaskScheduleHandler_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.CreateTaskScheduleHandler = exports.config = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const zod_1 = require("zod");
16
+ const shared_1 = require("@loopstack/shared");
17
+ const task_scheduler_service_1 = require("../services/task-scheduler.service");
18
+ const scheduled_task_entity_1 = require("../entities/scheduled-task.entity");
19
+ const task_schema_1 = require("../schemas/task.schema");
20
+ function parseDurationToSeconds(durationString) {
21
+ const durationRegex = /^(\d+)\s*(second|seconds|minute|minutes|hour|hours|day|days|week|weeks|month|months|year|years)$/i;
22
+ const match = durationString.trim().match(durationRegex);
23
+ if (!match) {
24
+ throw new Error(`Invalid duration format: ${durationString}. Expected format like "7 days", "2 hours", "30 minutes"`);
25
+ }
26
+ const value = parseInt(match[1], 10);
27
+ const unit = match[2].toLowerCase();
28
+ const secondsMap = {
29
+ 'second': 1,
30
+ 'seconds': 1,
31
+ 'minute': 60,
32
+ 'minutes': 60,
33
+ 'hour': 3600,
34
+ 'hours': 3600,
35
+ 'day': 86400,
36
+ 'days': 86400,
37
+ 'week': 604800,
38
+ 'weeks': 604800,
39
+ 'month': 2592000,
40
+ 'months': 2592000,
41
+ 'year': 31536000,
42
+ 'years': 31536000,
43
+ };
44
+ return value * secondsMap[unit];
45
+ }
46
+ exports.config = zod_1.z.object({
47
+ name: zod_1.z.union([
48
+ shared_1.ExpressionString,
49
+ zod_1.z.string().min(1, 'Task name is required').max(255, 'Task name too long'),
50
+ ]),
51
+ type: zod_1.z.union([
52
+ shared_1.ExpressionString,
53
+ zod_1.z.nativeEnum(scheduled_task_entity_1.TaskType, { required_error: 'Task type is required' })
54
+ ]),
55
+ executeAt: zod_1.z.optional(zod_1.z.union([
56
+ shared_1.ExpressionString,
57
+ task_schema_1.isoDateStringSchema
58
+ ])).describe('Execute at specific date/time (e.g., "2024-12-25T10:00:00Z")'),
59
+ waitFor: zod_1.z.optional(zod_1.z.union([
60
+ shared_1.ExpressionString,
61
+ zod_1.z.string().min(1, 'Duration string is required')
62
+ ])).describe('Wait for duration before executing (e.g., "7 days", "2 hours", "30 minutes")'),
63
+ cronExpression: zod_1.z.optional(zod_1.z.union([
64
+ shared_1.ExpressionString,
65
+ task_schema_1.cronExpressionSchema
66
+ ])).describe('Cron expression for recurring tasks (e.g., "0 9 * * MON" for every Monday at 9 AM)'),
67
+ payload: zod_1.z.optional(zod_1.z.union([
68
+ shared_1.ExpressionString,
69
+ zod_1.z.record(zod_1.z.any())
70
+ ]))
71
+ });
72
+ const schema = zod_1.z.object({
73
+ name: zod_1.z.string().min(1, 'Task name is required').max(255, 'Task name too long'),
74
+ type: zod_1.z.nativeEnum(scheduled_task_entity_1.TaskType, { required_error: 'Task type is required' }),
75
+ executeAt: zod_1.z.optional(task_schema_1.isoDateStringSchema).describe('Execute at specific date/time (e.g., "2024-12-25T10:00:00Z")'),
76
+ waitFor: zod_1.z.optional(zod_1.z.string().min(1, 'Duration string is required')).describe('Wait for duration before executing (e.g., "7 days", "2 hours", "30 minutes")'),
77
+ cronExpression: zod_1.z.optional(task_schema_1.cronExpressionSchema).describe('Cron expression for recurring tasks (e.g., "0 9 * * MON" for every Monday at 9 AM)'),
78
+ payload: zod_1.z.optional(zod_1.z.record(zod_1.z.any()))
79
+ });
80
+ let CreateTaskScheduleHandler = CreateTaskScheduleHandler_1 = class CreateTaskScheduleHandler {
81
+ taskSchedulerService;
82
+ logger = new common_1.Logger(CreateTaskScheduleHandler_1.name);
83
+ constructor(taskSchedulerService) {
84
+ this.taskSchedulerService = taskSchedulerService;
85
+ }
86
+ async apply(props, workflow, context) {
87
+ if (!workflow) {
88
+ throw new Error('Workflow is undefined');
89
+ }
90
+ let durationSeconds;
91
+ if (props.waitFor) {
92
+ try {
93
+ durationSeconds = parseDurationToSeconds(props.waitFor);
94
+ }
95
+ catch (error) {
96
+ this.logger.error(`Failed to parse duration: ${props.waitFor}`, error);
97
+ throw new Error(`Invalid duration format: ${props.waitFor}`);
98
+ }
99
+ }
100
+ const { waitFor, ...restProps } = props;
101
+ const task = await this.taskSchedulerService.createTask({
102
+ workspaceId: context.workspaceId,
103
+ rootPipelineId: context.pipelineId,
104
+ ...restProps,
105
+ ...(durationSeconds && { durationSeconds }),
106
+ });
107
+ return {
108
+ success: true,
109
+ data: task,
110
+ };
111
+ }
112
+ };
113
+ exports.CreateTaskScheduleHandler = CreateTaskScheduleHandler;
114
+ exports.CreateTaskScheduleHandler = CreateTaskScheduleHandler = CreateTaskScheduleHandler_1 = __decorate([
115
+ (0, shared_1.Handler)({
116
+ config: schema,
117
+ schema,
118
+ }),
119
+ __metadata("design:paramtypes", [task_scheduler_service_1.TaskSchedulerService])
120
+ ], CreateTaskScheduleHandler);
121
+ //# sourceMappingURL=create-task-schedule.handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-task-schedule.handler.js","sourceRoot":"","sources":["../../../../src/modules/scheduler/handler/create-task-schedule.handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { z } from 'zod';
2
+ import { ContextInterface, HandlerInterface, HandlerCallResult, WorkflowEntity } from '@loopstack/shared';
3
+ import { TaskSchedulerService } from '../services/task-scheduler.service';
4
+ declare const schema: z.ZodObject<{
5
+ name: z.ZodString;
6
+ }, "strict", z.ZodTypeAny, {
7
+ name: string;
8
+ }, {
9
+ name: string;
10
+ }>;
11
+ export declare class RemoveTaskScheduleHandler implements HandlerInterface {
12
+ private taskSchedulerService;
13
+ private readonly logger;
14
+ constructor(taskSchedulerService: TaskSchedulerService);
15
+ apply(props: z.infer<typeof schema>, workflow: WorkflowEntity | undefined, context: ContextInterface): Promise<HandlerCallResult>;
16
+ }
17
+ export {};
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var RemoveTaskScheduleHandler_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.RemoveTaskScheduleHandler = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const zod_1 = require("zod");
16
+ const shared_1 = require("@loopstack/shared");
17
+ const task_scheduler_service_1 = require("../services/task-scheduler.service");
18
+ const config = zod_1.z.object({
19
+ name: zod_1.z.string()
20
+ }).strict();
21
+ const schema = zod_1.z.object({
22
+ name: zod_1.z.string()
23
+ }).strict();
24
+ let RemoveTaskScheduleHandler = RemoveTaskScheduleHandler_1 = class RemoveTaskScheduleHandler {
25
+ taskSchedulerService;
26
+ logger = new common_1.Logger(RemoveTaskScheduleHandler_1.name);
27
+ constructor(taskSchedulerService) {
28
+ this.taskSchedulerService = taskSchedulerService;
29
+ }
30
+ async apply(props, workflow, context) {
31
+ if (!workflow) {
32
+ throw new Error('Workflow is undefined');
33
+ }
34
+ await this.taskSchedulerService.removeTask(context.workspaceId, context.pipelineId, props.name);
35
+ return {
36
+ success: true,
37
+ };
38
+ }
39
+ };
40
+ exports.RemoveTaskScheduleHandler = RemoveTaskScheduleHandler;
41
+ exports.RemoveTaskScheduleHandler = RemoveTaskScheduleHandler = RemoveTaskScheduleHandler_1 = __decorate([
42
+ (0, shared_1.Handler)({
43
+ config,
44
+ schema,
45
+ }),
46
+ __metadata("design:paramtypes", [task_scheduler_service_1.TaskSchedulerService])
47
+ ], RemoveTaskScheduleHandler);
48
+ //# sourceMappingURL=remove-task-schedule.handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-task-schedule.handler.js","sourceRoot":"","sources":["../../../../src/modules/scheduler/handler/remove-task-schedule.handler.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAwC;AACxC,6BAAwB;AACxB,8CAM2B;AAC3B,+EAA0E;AAE1E,MAAM,MAAM,GAAG,OAAC,CAAC,MAAM,CAAC;IACtB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;CACjB,CAAC,CAAC,MAAM,EAAE,CAAC;AAEZ,MAAM,MAAM,GAAG,OAAC,CAAC,MAAM,CAAC;IACtB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;CACjB,CAAC,CAAC,MAAM,EAAE,CAAC;AAML,IAAM,yBAAyB,iCAA/B,MAAM,yBAAyB;IAGhB;IAFH,MAAM,GAAG,IAAI,eAAM,CAAC,2BAAyB,CAAC,IAAI,CAAC,CAAC;IAErE,YAAoB,oBAA0C;QAA1C,yBAAoB,GAApB,oBAAoB,CAAsB;IAAG,CAAC;IAElE,KAAK,CAAC,KAAK,CACT,KAA6B,EAC7B,QAAoC,EACpC,OAAyB;QAEzB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAEhG,OAAO;YACL,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;CACF,CAAA;AApBY,8DAAyB;oCAAzB,yBAAyB;IAJrC,IAAA,gBAAO,EAAC;QACP,MAAM;QACN,MAAM;KACP,CAAC;qCAI0C,6CAAoB;GAHnD,yBAAyB,CAoBrC"}
@@ -0,0 +1,11 @@
1
+ import { TaskType } from '../entities/scheduled-task.entity';
2
+ export interface CreateTaskScheduleInterface {
3
+ workspaceId: string;
4
+ rootPipelineId: string;
5
+ name: string;
6
+ type: TaskType;
7
+ executeAt?: string;
8
+ durationSeconds?: number;
9
+ cronExpression?: string;
10
+ payload?: Record<string, any>;
11
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=create-task-schedule.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-task-schedule.interface.js","sourceRoot":"","sources":["../../../../src/modules/scheduler/interfaces/create-task-schedule.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export declare class SchedulerModule {
2
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.SchedulerModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const configuration_1 = require("../configuration");
12
+ const persistence_1 = require("../persistence");
13
+ const core_1 = require("@nestjs/core");
14
+ const common_2 = require("../common");
15
+ const typeorm_1 = require("@nestjs/typeorm");
16
+ const event_emitter_1 = require("@nestjs/event-emitter");
17
+ const scheduled_task_entity_1 = require("./entities/scheduled-task.entity");
18
+ const schedule_1 = require("@nestjs/schedule");
19
+ const task_scheduler_service_1 = require("./services/task-scheduler.service");
20
+ const task_execution_listener_1 = require("./services/task-execution.listener");
21
+ let SchedulerModule = class SchedulerModule {
22
+ };
23
+ exports.SchedulerModule = SchedulerModule;
24
+ exports.SchedulerModule = SchedulerModule = __decorate([
25
+ (0, common_1.Module)({
26
+ imports: [
27
+ typeorm_1.TypeOrmModule.forFeature([scheduled_task_entity_1.ScheduledTask]),
28
+ schedule_1.ScheduleModule.forRoot(),
29
+ event_emitter_1.EventEmitterModule.forRoot(),
30
+ core_1.DiscoveryModule,
31
+ common_2.CommonModule,
32
+ configuration_1.ConfigurationModule,
33
+ persistence_1.PersistenceModule,
34
+ ],
35
+ providers: [task_scheduler_service_1.TaskSchedulerService, task_execution_listener_1.TaskExecutionListener],
36
+ exports: [task_scheduler_service_1.TaskSchedulerService],
37
+ })
38
+ ], SchedulerModule);
39
+ //# sourceMappingURL=scheduler.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.module.js","sourceRoot":"","sources":["../../../src/modules/scheduler/scheduler.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,oDAAuD;AACvD,gDAAmD;AACnD,uCAA+C;AAC/C,sCAAyC;AACzC,6CAAgD;AAChD,yDAA2D;AAC3D,4EAAiE;AACjE,+CAAkD;AAClD,8EAAyE;AACzE,gFAA2E;AAgBpE,IAAM,eAAe,GAArB,MAAM,eAAe;CAAG,CAAA;AAAlB,0CAAe;0BAAf,eAAe;IAd3B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,uBAAa,CAAC,UAAU,CAAC,CAAC,qCAAa,CAAC,CAAC;YACzC,yBAAc,CAAC,OAAO,EAAE;YACxB,kCAAkB,CAAC,OAAO,EAAE;YAE5B,sBAAe;YACf,qBAAY;YACZ,mCAAmB;YACnB,+BAAiB;SAClB;QACD,SAAS,EAAE,CAAC,6CAAoB,EAAE,+CAAqB,CAAC;QACxD,OAAO,EAAE,CAAC,6CAAoB,CAAC;KAChC,CAAC;GACW,eAAe,CAAG"}
@@ -0,0 +1,3 @@
1
+ import { z } from 'zod';
2
+ export declare const cronExpressionSchema: z.ZodEffects<z.ZodString, string, string>;
3
+ export declare const isoDateStringSchema: z.ZodEffects<z.ZodString, string, string>;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isoDateStringSchema = exports.cronExpressionSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ exports.cronExpressionSchema = zod_1.z.string().refine((value) => {
6
+ try {
7
+ const parts = value.split(' ');
8
+ if (parts.length !== 5)
9
+ return false;
10
+ const cronRegex = /^(\*|[0-9,\-*/]+)\s+(\*|[0-9,\-*/]+)\s+(\*|[0-9,\-*/]+)\s+(\*|[0-9,\-*/]+)\s+(\*|[0-9,\-*/]+)$/;
11
+ return cronRegex.test(value);
12
+ }
13
+ catch {
14
+ return false;
15
+ }
16
+ }, {
17
+ message: 'Invalid cron expression format'
18
+ });
19
+ exports.isoDateStringSchema = zod_1.z.string().refine((value) => {
20
+ try {
21
+ const date = new Date(value);
22
+ return !isNaN(date.getTime()) && date.toISOString() === value;
23
+ }
24
+ catch {
25
+ return false;
26
+ }
27
+ }, {
28
+ message: 'Invalid ISO date string'
29
+ });
30
+ //# sourceMappingURL=task.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.schema.js","sourceRoot":"","sources":["../../../../src/modules/scheduler/schemas/task.schema.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAEX,QAAA,oBAAoB,GAAG,OAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;IAC9D,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAGrC,MAAM,SAAS,GAAG,gGAAgG,CAAC;QACnH,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,EAAE;IACD,OAAO,EAAE,gCAAgC;CAC1C,CAAC,CAAC;AAEU,QAAA,mBAAmB,GAAG,OAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;IAC7D,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,EAAE;IACD,OAAO,EAAE,yBAAyB;CACnC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { TaskExecutionEvent } from '../events/task-execution.event';
2
+ export declare class TaskExecutionListener {
3
+ private readonly logger;
4
+ handleTaskExecution(event: TaskExecutionEvent): Promise<void>;
5
+ }
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var TaskExecutionListener_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.TaskExecutionListener = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const event_emitter_1 = require("@nestjs/event-emitter");
16
+ const task_execution_event_1 = require("../events/task-execution.event");
17
+ let TaskExecutionListener = TaskExecutionListener_1 = class TaskExecutionListener {
18
+ logger = new common_1.Logger(TaskExecutionListener_1.name);
19
+ async handleTaskExecution(event) {
20
+ this.logger.log(`Handling task execution: ${event.workspaceId}/${event.rootPipelineId}/${event.name}`);
21
+ try {
22
+ this.logger.log(`Task execution completed: ${event.taskId}`);
23
+ }
24
+ catch (error) {
25
+ this.logger.error(`Task execution failed: ${event.taskId}`, error);
26
+ throw error;
27
+ }
28
+ }
29
+ };
30
+ exports.TaskExecutionListener = TaskExecutionListener;
31
+ __decorate([
32
+ (0, event_emitter_1.OnEvent)('task.execute'),
33
+ __metadata("design:type", Function),
34
+ __metadata("design:paramtypes", [task_execution_event_1.TaskExecutionEvent]),
35
+ __metadata("design:returntype", Promise)
36
+ ], TaskExecutionListener.prototype, "handleTaskExecution", null);
37
+ exports.TaskExecutionListener = TaskExecutionListener = TaskExecutionListener_1 = __decorate([
38
+ (0, common_1.Injectable)()
39
+ ], TaskExecutionListener);
40
+ //# sourceMappingURL=task-execution.listener.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-execution.listener.js","sourceRoot":"","sources":["../../../../src/modules/scheduler/services/task-execution.listener.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAoD;AACpD,yDAAgD;AAChD,yEAAoE;AAG7D,IAAM,qBAAqB,6BAA3B,MAAM,qBAAqB;IACf,MAAM,GAAG,IAAI,eAAM,CAAC,uBAAqB,CAAC,IAAI,CAAC,CAAC;IAG3D,AAAN,KAAK,CAAC,mBAAmB,CAAC,KAAyB;QACjD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,4BAA4B,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAEvG,IAAI,CAAC;YAIH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,6BAA6B,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,KAAK,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;YACnE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF,CAAA;AAjBY,sDAAqB;AAI1B;IADL,IAAA,uBAAO,EAAC,cAAc,CAAC;;qCACS,yCAAkB;;gEAYlD;gCAhBU,qBAAqB;IADjC,IAAA,mBAAU,GAAE;GACA,qBAAqB,CAiBjC"}
@@ -0,0 +1,21 @@
1
+ import { OnModuleInit } from '@nestjs/common';
2
+ import { Repository } from 'typeorm';
3
+ import { EventEmitter2 } from '@nestjs/event-emitter';
4
+ import { ScheduledTask } from '../entities/scheduled-task.entity';
5
+ import { CreateTaskScheduleInterface } from '../interfaces/create-task-schedule.interface';
6
+ export declare class TaskSchedulerService implements OnModuleInit {
7
+ private readonly taskRepository;
8
+ private readonly eventEmitter;
9
+ private readonly logger;
10
+ private readonly processingTasks;
11
+ constructor(taskRepository: Repository<ScheduledTask>, eventEmitter: EventEmitter2);
12
+ onModuleInit(): Promise<void>;
13
+ processScheduledTasks(): Promise<void>;
14
+ createTask(createTaskRequest: CreateTaskScheduleInterface): Promise<ScheduledTask>;
15
+ removeTask(workspaceId: string, rootPipelineId: string, name: string): Promise<void>;
16
+ private executeTask;
17
+ private handleTaskFailure;
18
+ private calculateNextExecution;
19
+ private calculateNextCronExecution;
20
+ private cleanupStuckTasks;
21
+ }
@@ -0,0 +1,194 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var __importDefault = (this && this.__importDefault) || function (mod) {
15
+ return (mod && mod.__esModule) ? mod : { "default": mod };
16
+ };
17
+ var TaskSchedulerService_1;
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.TaskSchedulerService = void 0;
20
+ const common_1 = require("@nestjs/common");
21
+ const typeorm_1 = require("@nestjs/typeorm");
22
+ const typeorm_2 = require("typeorm");
23
+ const event_emitter_1 = require("@nestjs/event-emitter");
24
+ const schedule_1 = require("@nestjs/schedule");
25
+ const cron_parser_1 = __importDefault(require("cron-parser"));
26
+ const scheduled_task_entity_1 = require("../entities/scheduled-task.entity");
27
+ const task_execution_event_1 = require("../events/task-execution.event");
28
+ let TaskSchedulerService = TaskSchedulerService_1 = class TaskSchedulerService {
29
+ taskRepository;
30
+ eventEmitter;
31
+ logger = new common_1.Logger(TaskSchedulerService_1.name);
32
+ processingTasks = new Set();
33
+ constructor(taskRepository, eventEmitter) {
34
+ this.taskRepository = taskRepository;
35
+ this.eventEmitter = eventEmitter;
36
+ }
37
+ async onModuleInit() {
38
+ this.logger.log('TaskSchedulerService initialized');
39
+ await this.cleanupStuckTasks();
40
+ }
41
+ async processScheduledTasks() {
42
+ try {
43
+ const now = new Date();
44
+ const dueTasks = await this.taskRepository.find({
45
+ where: {
46
+ status: scheduled_task_entity_1.TaskStatus.ACTIVE,
47
+ nextExecutionAt: (0, typeorm_2.LessThanOrEqual)(now),
48
+ },
49
+ order: { nextExecutionAt: 'ASC' },
50
+ take: 100,
51
+ });
52
+ if (dueTasks.length === 0) {
53
+ return;
54
+ }
55
+ this.logger.log(`Processing ${dueTasks.length} due tasks`);
56
+ const taskPromises = dueTasks.map(task => this.executeTask(task));
57
+ await Promise.allSettled(taskPromises);
58
+ }
59
+ catch (error) {
60
+ this.logger.error('Error processing scheduled tasks:', error);
61
+ }
62
+ }
63
+ async createTask(createTaskRequest) {
64
+ const task = new scheduled_task_entity_1.ScheduledTask();
65
+ task.workspaceId = createTaskRequest.workspaceId;
66
+ task.rootPipelineId = createTaskRequest.rootPipelineId;
67
+ task.name = createTaskRequest.name;
68
+ task.type = createTaskRequest.type;
69
+ task.payload = createTaskRequest.payload || {};
70
+ task.nextExecutionAt = this.calculateNextExecution(createTaskRequest);
71
+ if (createTaskRequest.type === scheduled_task_entity_1.TaskType.ONE_TIME_DURATION) {
72
+ if (!createTaskRequest.durationSeconds) {
73
+ throw new Error(`Scheduled task of type "ONE_TIME_DURATION" must have a duration specified.`);
74
+ }
75
+ task.durationSeconds = createTaskRequest.durationSeconds;
76
+ }
77
+ else if (createTaskRequest.type === scheduled_task_entity_1.TaskType.RECURRING_CRON) {
78
+ if (!createTaskRequest.cronExpression) {
79
+ throw new Error(`Scheduled task of type "RECURRING_CRON" must have a cronExpression specified.`);
80
+ }
81
+ task.cronExpression = createTaskRequest.cronExpression;
82
+ }
83
+ return this.taskRepository.save(task);
84
+ }
85
+ async removeTask(workspaceId, rootPipelineId, name) {
86
+ const result = await this.taskRepository.delete({
87
+ workspaceId,
88
+ rootPipelineId,
89
+ name,
90
+ });
91
+ if (result.affected === 0) {
92
+ throw new Error(`Task not found: ${workspaceId}/${rootPipelineId}/${name}`);
93
+ }
94
+ }
95
+ async executeTask(task) {
96
+ if (this.processingTasks.has(task.id)) {
97
+ return;
98
+ }
99
+ this.processingTasks.add(task.id);
100
+ try {
101
+ this.logger.log(`Executing task: ${task.workspaceId}/${task.rootPipelineId}/${task.name}`);
102
+ const event = new task_execution_event_1.TaskExecutionEvent(task.id, task.workspaceId, task.rootPipelineId, task.name, task.payload);
103
+ await this.eventEmitter.emitAsync('task.execute', event);
104
+ task.executionCount++;
105
+ task.lastExecutionAt = new Date();
106
+ task.lastError = null;
107
+ if (task.type === scheduled_task_entity_1.TaskType.RECURRING_CRON) {
108
+ task.nextExecutionAt = this.calculateNextCronExecution(task.cronExpression);
109
+ }
110
+ else {
111
+ task.status = scheduled_task_entity_1.TaskStatus.COMPLETED;
112
+ task.nextExecutionAt = null;
113
+ }
114
+ await this.taskRepository.save(task);
115
+ this.logger.log(`Task executed successfully: ${task.workspaceId}/${task.rootPipelineId}/${task.name}`);
116
+ }
117
+ catch (error) {
118
+ this.logger.error(`Task execution failed: ${task.workspaceId}/${task.rootPipelineId}/${task.name}`, error);
119
+ await this.handleTaskFailure(task, error);
120
+ }
121
+ finally {
122
+ this.processingTasks.delete(task.id);
123
+ }
124
+ }
125
+ async handleTaskFailure(task, error) {
126
+ task.failureCount++;
127
+ task.lastFailureAt = new Date();
128
+ task.lastError = error.message || 'Unknown error';
129
+ if (task.type === scheduled_task_entity_1.TaskType.RECURRING_CRON) {
130
+ if (task.failureCount >= 3) {
131
+ this.logger.warn(`Task paused due to repeated failures: ${task.workspaceId}/${task.rootPipelineId}/${task.name}`);
132
+ task.status = scheduled_task_entity_1.TaskStatus.FAILED;
133
+ task.nextExecutionAt = null;
134
+ }
135
+ else {
136
+ task.nextExecutionAt = new Date(Date.now() + 5 * 60 * 1000);
137
+ }
138
+ }
139
+ else {
140
+ task.status = scheduled_task_entity_1.TaskStatus.FAILED;
141
+ task.nextExecutionAt = null;
142
+ }
143
+ await this.taskRepository.save(task);
144
+ }
145
+ calculateNextExecution(dto) {
146
+ const now = new Date();
147
+ switch (dto.type) {
148
+ case scheduled_task_entity_1.TaskType.ONE_TIME_DATE:
149
+ if (!dto.executeAt) {
150
+ throw new Error('executeAt is required for ONE_TIME_DATE tasks');
151
+ }
152
+ return new Date(dto.executeAt);
153
+ case scheduled_task_entity_1.TaskType.ONE_TIME_DURATION:
154
+ if (!dto.durationSeconds) {
155
+ throw new Error('durationSeconds is required for ONE_TIME_DURATION tasks');
156
+ }
157
+ return new Date(now.getTime() + dto.durationSeconds * 1000);
158
+ case scheduled_task_entity_1.TaskType.RECURRING_CRON:
159
+ if (!dto.cronExpression) {
160
+ throw new Error('cronExpression is required for RECURRING_CRON tasks');
161
+ }
162
+ return this.calculateNextCronExecution(dto.cronExpression);
163
+ default:
164
+ throw new Error(`Unsupported task type: ${dto.type}`);
165
+ }
166
+ }
167
+ calculateNextCronExecution(cronExpression) {
168
+ try {
169
+ const interval = cron_parser_1.default.parse(cronExpression);
170
+ return interval.next().toDate();
171
+ }
172
+ catch (error) {
173
+ throw new Error(`Invalid cron expression: ${cronExpression}`);
174
+ }
175
+ }
176
+ async cleanupStuckTasks() {
177
+ this.logger.log('Cleaning up stuck tasks...');
178
+ this.processingTasks.clear();
179
+ }
180
+ };
181
+ exports.TaskSchedulerService = TaskSchedulerService;
182
+ __decorate([
183
+ (0, schedule_1.Cron)(schedule_1.CronExpression.EVERY_30_SECONDS),
184
+ __metadata("design:type", Function),
185
+ __metadata("design:paramtypes", []),
186
+ __metadata("design:returntype", Promise)
187
+ ], TaskSchedulerService.prototype, "processScheduledTasks", null);
188
+ exports.TaskSchedulerService = TaskSchedulerService = TaskSchedulerService_1 = __decorate([
189
+ (0, common_1.Injectable)(),
190
+ __param(0, (0, typeorm_1.InjectRepository)(scheduled_task_entity_1.ScheduledTask)),
191
+ __metadata("design:paramtypes", [typeorm_2.Repository,
192
+ event_emitter_1.EventEmitter2])
193
+ ], TaskSchedulerService);
194
+ //# sourceMappingURL=task-scheduler.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-scheduler.service.js","sourceRoot":"","sources":["../../../../src/modules/scheduler/services/task-scheduler.service.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- import { ContextInterface, ServiceInterface, ServiceCallResult, WorkflowEntity } from '@loopstack/shared';
2
+ import { ContextInterface, HandlerInterface, HandlerCallResult, WorkflowEntity } from '@loopstack/shared';
3
3
  import { NamespacesService } from '../../persistence';
4
4
  declare const schema: z.ZodObject<{
5
5
  label: z.ZodString;
@@ -11,10 +11,10 @@ declare const schema: z.ZodObject<{
11
11
  label: string;
12
12
  meta?: any;
13
13
  }>;
14
- export declare class AddNamespaceService implements ServiceInterface {
14
+ export declare class AddNamespaceHandler implements HandlerInterface {
15
15
  private namespacesService;
16
16
  private readonly logger;
17
17
  constructor(namespacesService: NamespacesService);
18
- apply(props: z.infer<typeof schema>, workflow: WorkflowEntity | undefined, context: ContextInterface): Promise<ServiceCallResult>;
18
+ apply(props: z.infer<typeof schema>, workflow: WorkflowEntity | undefined, context: ContextInterface): Promise<HandlerCallResult>;
19
19
  }
20
20
  export {};