@venturialstd/workflow 0.1.155 → 0.1.157

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 (108) hide show
  1. package/README.md +238 -238
  2. package/dist/dtos/create-workflow-job.dto.d.ts +10 -0
  3. package/dist/dtos/create-workflow-job.dto.d.ts.map +1 -0
  4. package/dist/dtos/create-workflow-job.dto.js +58 -0
  5. package/dist/dtos/create-workflow-job.dto.js.map +1 -0
  6. package/dist/dtos/index.d.ts +2 -0
  7. package/dist/dtos/index.d.ts.map +1 -1
  8. package/dist/dtos/index.js +2 -0
  9. package/dist/dtos/index.js.map +1 -1
  10. package/dist/dtos/update-workflow-job.dto.d.ts +8 -0
  11. package/dist/dtos/update-workflow-job.dto.d.ts.map +1 -0
  12. package/dist/dtos/update-workflow-job.dto.js +46 -0
  13. package/dist/dtos/update-workflow-job.dto.js.map +1 -0
  14. package/dist/entities/workflow-job.entity.d.ts +17 -0
  15. package/dist/entities/workflow-job.entity.d.ts.map +1 -0
  16. package/dist/entities/workflow-job.entity.js +108 -0
  17. package/dist/entities/workflow-job.entity.js.map +1 -0
  18. package/dist/index.d.ts +4 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +4 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/modules/index.d.ts +1 -0
  23. package/dist/modules/index.d.ts.map +1 -1
  24. package/dist/modules/index.js +5 -1
  25. package/dist/modules/index.js.map +1 -1
  26. package/dist/modules/jobs/adapters/ioredis-lock.adapter.d.ts +4 -0
  27. package/dist/modules/jobs/adapters/ioredis-lock.adapter.d.ts.map +1 -0
  28. package/dist/modules/jobs/adapters/ioredis-lock.adapter.js +33 -0
  29. package/dist/modules/jobs/adapters/ioredis-lock.adapter.js.map +1 -0
  30. package/dist/modules/jobs/controllers/workflow-job.controller.d.ts +21 -0
  31. package/dist/modules/jobs/controllers/workflow-job.controller.d.ts.map +1 -0
  32. package/dist/modules/jobs/controllers/workflow-job.controller.js +130 -0
  33. package/dist/modules/jobs/controllers/workflow-job.controller.js.map +1 -0
  34. package/dist/modules/jobs/jobs-nest.module.d.ts +25 -0
  35. package/dist/modules/jobs/jobs-nest.module.d.ts.map +1 -0
  36. package/dist/modules/jobs/jobs-nest.module.js +188 -0
  37. package/dist/modules/jobs/jobs-nest.module.js.map +1 -0
  38. package/dist/modules/jobs/processors/workflow-job.processor.d.ts +28 -0
  39. package/dist/modules/jobs/processors/workflow-job.processor.d.ts.map +1 -0
  40. package/dist/modules/jobs/processors/workflow-job.processor.js +147 -0
  41. package/dist/modules/jobs/processors/workflow-job.processor.js.map +1 -0
  42. package/dist/modules/jobs/services/distributed-lock.service.d.ts +15 -0
  43. package/dist/modules/jobs/services/distributed-lock.service.d.ts.map +1 -0
  44. package/dist/modules/jobs/services/distributed-lock.service.js +49 -0
  45. package/dist/modules/jobs/services/distributed-lock.service.js.map +1 -0
  46. package/dist/modules/jobs/services/index.d.ts +4 -0
  47. package/dist/modules/jobs/services/index.d.ts.map +1 -0
  48. package/dist/modules/jobs/services/index.js +20 -0
  49. package/dist/modules/jobs/services/index.js.map +1 -0
  50. package/dist/modules/jobs/services/job-scheduler.service.d.ts +38 -0
  51. package/dist/modules/jobs/services/job-scheduler.service.d.ts.map +1 -0
  52. package/dist/modules/jobs/services/job-scheduler.service.js +112 -0
  53. package/dist/modules/jobs/services/job-scheduler.service.js.map +1 -0
  54. package/dist/modules/jobs/services/workflow-job.service.d.ts +26 -0
  55. package/dist/modules/jobs/services/workflow-job.service.d.ts.map +1 -0
  56. package/dist/modules/jobs/services/workflow-job.service.js +148 -0
  57. package/dist/modules/jobs/services/workflow-job.service.js.map +1 -0
  58. package/dist/modules/schedule/schedule-nest.module.d.ts +7 -0
  59. package/dist/modules/schedule/schedule-nest.module.d.ts.map +1 -0
  60. package/dist/modules/schedule/schedule-nest.module.js +36 -0
  61. package/dist/modules/schedule/schedule-nest.module.js.map +1 -0
  62. package/dist/modules/schedule/schedule.module.d.ts +3 -0
  63. package/dist/modules/schedule/schedule.module.d.ts.map +1 -0
  64. package/dist/modules/schedule/schedule.module.js +14 -0
  65. package/dist/modules/schedule/schedule.module.js.map +1 -0
  66. package/dist/modules/schedule/services/index.d.ts +2 -0
  67. package/dist/modules/schedule/services/index.d.ts.map +1 -0
  68. package/dist/modules/schedule/services/index.js +18 -0
  69. package/dist/modules/schedule/services/index.js.map +1 -0
  70. package/dist/modules/schedule/services/schedule-trigger.service.d.ts +13 -0
  71. package/dist/modules/schedule/services/schedule-trigger.service.d.ts.map +1 -0
  72. package/dist/modules/schedule/services/schedule-trigger.service.js +95 -0
  73. package/dist/modules/schedule/services/schedule-trigger.service.js.map +1 -0
  74. package/dist/modules/schedule/triggers/index.d.ts +2 -0
  75. package/dist/modules/schedule/triggers/index.d.ts.map +1 -0
  76. package/dist/modules/schedule/triggers/index.js +18 -0
  77. package/dist/modules/schedule/triggers/index.js.map +1 -0
  78. package/dist/modules/schedule/triggers/schedule.trigger.d.ts +9 -0
  79. package/dist/modules/schedule/triggers/schedule.trigger.d.ts.map +1 -0
  80. package/dist/modules/schedule/triggers/schedule.trigger.js +102 -0
  81. package/dist/modules/schedule/triggers/schedule.trigger.js.map +1 -0
  82. package/dist/realtime/index.d.ts +5 -0
  83. package/dist/realtime/index.d.ts.map +1 -0
  84. package/dist/realtime/index.js +21 -0
  85. package/dist/realtime/index.js.map +1 -0
  86. package/dist/realtime/workflow-realtime.gateway.d.ts +54 -0
  87. package/dist/realtime/workflow-realtime.gateway.d.ts.map +1 -0
  88. package/dist/realtime/workflow-realtime.gateway.js +218 -0
  89. package/dist/realtime/workflow-realtime.gateway.js.map +1 -0
  90. package/dist/realtime/workflow-socket-auth.adapter.d.ts +9 -0
  91. package/dist/realtime/workflow-socket-auth.adapter.d.ts.map +1 -0
  92. package/dist/realtime/workflow-socket-auth.adapter.js +37 -0
  93. package/dist/realtime/workflow-socket-auth.adapter.js.map +1 -0
  94. package/dist/realtime/workflow-socket-auth.interface.d.ts +6 -0
  95. package/dist/realtime/workflow-socket-auth.interface.d.ts.map +1 -0
  96. package/dist/realtime/workflow-socket-auth.interface.js +5 -0
  97. package/dist/realtime/workflow-socket-auth.interface.js.map +1 -0
  98. package/dist/realtime/workflow-socket.types.d.ts +18 -0
  99. package/dist/realtime/workflow-socket.types.d.ts.map +1 -0
  100. package/dist/realtime/workflow-socket.types.js +3 -0
  101. package/dist/realtime/workflow-socket.types.js.map +1 -0
  102. package/dist/services/workflow-bulk-credential.service.d.ts.map +1 -1
  103. package/dist/services/workflow-bulk-credential.service.js +15 -1
  104. package/dist/services/workflow-bulk-credential.service.js.map +1 -1
  105. package/dist/workflow-core.module.d.ts.map +1 -1
  106. package/dist/workflow-core.module.js +4 -0
  107. package/dist/workflow-core.module.js.map +1 -1
  108. package/package.json +118 -109
@@ -0,0 +1,112 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.JobSchedulerService = exports.JOB_NAME_EXECUTE = exports.JOB_NAME_TICK = exports.WORKFLOW_JOBS_QUEUE_NAME = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const cron_parser_1 = require("cron-parser");
18
+ const typeorm_1 = require("@nestjs/typeorm");
19
+ const typeorm_2 = require("typeorm");
20
+ const workflow_job_entity_1 = require("../../../entities/workflow-job.entity");
21
+ exports.WORKFLOW_JOBS_QUEUE_NAME = 'workflow-jobs';
22
+ exports.JOB_NAME_TICK = 'tick';
23
+ exports.JOB_NAME_EXECUTE = 'execute';
24
+ let JobSchedulerService = class JobSchedulerService {
25
+ jobRepo;
26
+ queue;
27
+ repeatJobKey = null;
28
+ constructor(jobRepo, queue) {
29
+ this.jobRepo = jobRepo;
30
+ this.queue = queue;
31
+ }
32
+ async onModuleInit() {
33
+ await this.initialize();
34
+ }
35
+ async initialize() {
36
+ const repeatableJobs = await this.queue.getRepeatableJobs();
37
+ const tickJob = repeatableJobs.find((j) => j.name === exports.JOB_NAME_TICK);
38
+ if (!tickJob) {
39
+ const added = await this.queue.add(exports.JOB_NAME_TICK, {}, { repeat: { pattern: '0 * * * * *' }, jobId: 'workflow-jobs-tick' });
40
+ this.repeatJobKey = added.repeatJobKey ?? null;
41
+ }
42
+ else {
43
+ this.repeatJobKey = tickJob.key;
44
+ }
45
+ }
46
+ async scheduleJob(job) {
47
+ if (!job.isActive)
48
+ return;
49
+ const next = this.getNextRun(job);
50
+ if (next) {
51
+ await this.jobRepo.update(job.id, { nextExecutionAt: next });
52
+ }
53
+ }
54
+ async unscheduleJob(jobId) {
55
+ await this.jobRepo.update(jobId, { nextExecutionAt: undefined });
56
+ }
57
+ async runTick() {
58
+ const now = new Date();
59
+ const jobs = await this.jobRepo.find({ where: { isActive: true } });
60
+ for (const job of jobs) {
61
+ try {
62
+ const next = this.getNextRun(job);
63
+ if (!next)
64
+ continue;
65
+ if (next.getTime() <= now.getTime() + 60_000) {
66
+ const tickTs = Math.floor(next.getTime() / 60_000) * 60_000;
67
+ await this.queue.add(exports.JOB_NAME_EXECUTE, {
68
+ jobId: job.id,
69
+ tickTimestamp: tickTs,
70
+ }, {
71
+ jobId: `${job.id}:${tickTs}`,
72
+ removeOnComplete: 1000,
73
+ removeOnFail: 100,
74
+ });
75
+ }
76
+ }
77
+ catch {
78
+ }
79
+ }
80
+ }
81
+ async triggerJobNow(job, executionId) {
82
+ await this.queue.add(exports.JOB_NAME_EXECUTE, {
83
+ jobId: job.id,
84
+ executionId,
85
+ manual: true,
86
+ }, {
87
+ jobId: executionId,
88
+ removeOnComplete: 1000,
89
+ removeOnFail: 100,
90
+ });
91
+ }
92
+ getNextRun(job) {
93
+ try {
94
+ const interval = (0, cron_parser_1.parseExpression)(job.cronExpression, {
95
+ currentDate: new Date(),
96
+ tz: job.timezone || 'UTC',
97
+ });
98
+ const next = interval.next();
99
+ return next ? next.toDate() : null;
100
+ }
101
+ catch {
102
+ return null;
103
+ }
104
+ }
105
+ };
106
+ exports.JobSchedulerService = JobSchedulerService;
107
+ exports.JobSchedulerService = JobSchedulerService = __decorate([
108
+ (0, common_1.Injectable)(),
109
+ __param(0, (0, typeorm_1.InjectRepository)(workflow_job_entity_1.WorkflowJob)),
110
+ __metadata("design:paramtypes", [typeorm_2.Repository, Object])
111
+ ], JobSchedulerService);
112
+ //# sourceMappingURL=job-scheduler.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-scheduler.service.js","sourceRoot":"","sources":["../../../../src/modules/jobs/services/job-scheduler.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { TypeOrmCrudService } from '@dataui/crud-typeorm';
2
+ import { Repository } from 'typeorm';
3
+ import { CreateWorkflowJobDto } from '../../../dtos/create-workflow-job.dto';
4
+ import { UpdateWorkflowJobDto } from '../../../dtos/update-workflow-job.dto';
5
+ import { WorkflowExecution } from '../../../entities/workflow-execution.entity';
6
+ import { WorkflowJob } from '../../../entities/workflow-job.entity';
7
+ import { JobSchedulerService } from './job-scheduler.service';
8
+ export declare class WorkflowJobService extends TypeOrmCrudService<WorkflowJob> {
9
+ readonly repo: Repository<WorkflowJob>;
10
+ private readonly executionRepo;
11
+ private readonly jobSchedulerService;
12
+ constructor(repo: Repository<WorkflowJob>, executionRepo: Repository<WorkflowExecution>, jobSchedulerService: JobSchedulerService);
13
+ findMany(): Promise<WorkflowJob[]>;
14
+ createJob(dto: CreateWorkflowJobDto): Promise<WorkflowJob>;
15
+ updateJob(id: string, dto: UpdateWorkflowJobDto): Promise<WorkflowJob>;
16
+ toggleJob(id: string, isActive: boolean): Promise<WorkflowJob>;
17
+ getExecutionHistory(jobId: string, limit?: number): Promise<WorkflowExecution[]>;
18
+ manualTrigger(id: string): Promise<{
19
+ executionId: string;
20
+ }>;
21
+ markExecuted(id: string, lastExecutedAt: Date, nextExecutionAt?: Date): Promise<void>;
22
+ findByWorkflowAndTrigger(workflowId: string, triggerNodeId?: string): Promise<WorkflowJob | null>;
23
+ deleteJob(id: string): Promise<void>;
24
+ static triggeredByForJob(jobId: string): string;
25
+ }
26
+ //# sourceMappingURL=workflow-job.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-job.service.d.ts","sourceRoot":"","sources":["../../../../src/modules/jobs/services/workflow-job.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAI9D,qBACa,kBAAmB,SAAQ,kBAAkB,CAAC,WAAW,CAAC;aAGnD,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC;IAE7C,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,mBAAmB;gBAHpB,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,EAE5B,aAAa,EAAE,UAAU,CAAC,iBAAiB,CAAC,EAC5C,mBAAmB,EAAE,mBAAmB;IAKrD,QAAQ,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAIlC,SAAS,CAAC,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAC,WAAW,CAAC;IAe1D,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAC,WAAW,CAAC;IActE,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;IAgB9D,mBAAmB,CACvB,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,MAAW,GACjB,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAYzB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IA0B3D,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,eAAe,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAQrF,wBAAwB,CAC5B,UAAU,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAOxB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK1C,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;CAGhD"}
@@ -0,0 +1,148 @@
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 WorkflowJobService_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.WorkflowJobService = void 0;
17
+ const crud_typeorm_1 = require("@dataui/crud-typeorm");
18
+ const common_1 = require("@nestjs/common");
19
+ const typeorm_1 = require("@nestjs/typeorm");
20
+ const typeorm_2 = require("typeorm");
21
+ const workflow_constant_1 = require("../../../constants/workflow.constant");
22
+ const workflow_execution_entity_1 = require("../../../entities/workflow-execution.entity");
23
+ const workflow_job_entity_1 = require("../../../entities/workflow-job.entity");
24
+ const job_scheduler_service_1 = require("./job-scheduler.service");
25
+ const TRIGGERED_BY_PREFIX = 'schedule:';
26
+ let WorkflowJobService = WorkflowJobService_1 = class WorkflowJobService extends crud_typeorm_1.TypeOrmCrudService {
27
+ repo;
28
+ executionRepo;
29
+ jobSchedulerService;
30
+ constructor(repo, executionRepo, jobSchedulerService) {
31
+ super(repo);
32
+ this.repo = repo;
33
+ this.executionRepo = executionRepo;
34
+ this.jobSchedulerService = jobSchedulerService;
35
+ }
36
+ async findMany() {
37
+ return this.repo.find({ order: { createdAt: 'DESC' } });
38
+ }
39
+ async createJob(dto) {
40
+ const job = this.repo.create({
41
+ workflowId: dto.workflowId,
42
+ triggerNodeId: dto.triggerNodeId,
43
+ name: dto.name,
44
+ cronExpression: dto.cronExpression,
45
+ timezone: dto.timezone ?? 'UTC',
46
+ isActive: dto.isActive ?? true,
47
+ payload: dto.payload ?? undefined,
48
+ });
49
+ const saved = await this.repo.save(job);
50
+ await this.jobSchedulerService.scheduleJob(saved);
51
+ return saved;
52
+ }
53
+ async updateJob(id, dto) {
54
+ const job = await this.repo.findOne({ where: { id } });
55
+ if (!job)
56
+ throw new common_1.NotFoundException(`WorkflowJob with id "${id}" not found`);
57
+ if (dto.name !== undefined)
58
+ job.name = dto.name;
59
+ if (dto.cronExpression !== undefined)
60
+ job.cronExpression = dto.cronExpression;
61
+ if (dto.timezone !== undefined)
62
+ job.timezone = dto.timezone;
63
+ if (dto.isActive !== undefined)
64
+ job.isActive = dto.isActive;
65
+ if (dto.payload !== undefined)
66
+ job.payload = dto.payload;
67
+ const saved = await this.repo.save(job);
68
+ await this.jobSchedulerService.unscheduleJob(id);
69
+ await this.jobSchedulerService.scheduleJob(saved);
70
+ return saved;
71
+ }
72
+ async toggleJob(id, isActive) {
73
+ const job = await this.repo.findOne({ where: { id } });
74
+ if (!job)
75
+ throw new common_1.NotFoundException(`WorkflowJob with id "${id}" not found`);
76
+ job.isActive = isActive;
77
+ const saved = await this.repo.save(job);
78
+ if (isActive) {
79
+ await this.jobSchedulerService.scheduleJob(saved);
80
+ }
81
+ else {
82
+ await this.jobSchedulerService.unscheduleJob(id);
83
+ }
84
+ return saved;
85
+ }
86
+ async getExecutionHistory(jobId, limit = 50) {
87
+ const triggeredBy = TRIGGERED_BY_PREFIX + jobId;
88
+ return this.executionRepo.find({
89
+ where: { triggeredBy },
90
+ order: { createdAt: 'DESC' },
91
+ take: limit,
92
+ });
93
+ }
94
+ async manualTrigger(id) {
95
+ const job = await this.repo.findOne({ where: { id } });
96
+ if (!job)
97
+ throw new common_1.NotFoundException(`WorkflowJob with id "${id}" not found`);
98
+ const triggeredBy = WorkflowJobService_1.triggeredByForJob(job.id);
99
+ const inputData = {
100
+ triggerNodeId: job.triggerNodeId,
101
+ schedule: {
102
+ jobId: job.id,
103
+ cronExpression: job.cronExpression,
104
+ timezone: job.timezone,
105
+ payload: job.payload,
106
+ },
107
+ ...(job.payload && typeof job.payload === 'object' ? job.payload : {}),
108
+ };
109
+ const execution = this.executionRepo.create({
110
+ workflowId: job.workflowId,
111
+ status: workflow_constant_1.EXECUTION_STATUS.PENDING,
112
+ triggeredBy,
113
+ inputData,
114
+ });
115
+ const saved = await this.executionRepo.save(execution);
116
+ await this.jobSchedulerService.triggerJobNow(job, saved.id);
117
+ return { executionId: saved.id };
118
+ }
119
+ async markExecuted(id, lastExecutedAt, nextExecutionAt) {
120
+ await this.repo.update(id, {
121
+ lastExecutedAt,
122
+ ...(nextExecutionAt != null && { nextExecutionAt }),
123
+ });
124
+ }
125
+ async findByWorkflowAndTrigger(workflowId, triggerNodeId) {
126
+ const where = { workflowId };
127
+ if (triggerNodeId != null)
128
+ where.triggerNodeId = triggerNodeId;
129
+ return this.repo.findOne({ where });
130
+ }
131
+ async deleteJob(id) {
132
+ await this.jobSchedulerService.unscheduleJob(id);
133
+ await this.repo.delete(id);
134
+ }
135
+ static triggeredByForJob(jobId) {
136
+ return TRIGGERED_BY_PREFIX + jobId;
137
+ }
138
+ };
139
+ exports.WorkflowJobService = WorkflowJobService;
140
+ exports.WorkflowJobService = WorkflowJobService = WorkflowJobService_1 = __decorate([
141
+ (0, common_1.Injectable)(),
142
+ __param(0, (0, typeorm_1.InjectRepository)(workflow_job_entity_1.WorkflowJob)),
143
+ __param(1, (0, typeorm_1.InjectRepository)(workflow_execution_entity_1.WorkflowExecution)),
144
+ __metadata("design:paramtypes", [typeorm_2.Repository,
145
+ typeorm_2.Repository,
146
+ job_scheduler_service_1.JobSchedulerService])
147
+ ], WorkflowJobService);
148
+ //# sourceMappingURL=workflow-job.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-job.service.js","sourceRoot":"","sources":["../../../../src/modules/jobs/services/workflow-job.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { DynamicModule } from '@nestjs/common';
2
+ import type { WorkflowJobsModuleOptions, WorkflowJobsModuleAsyncOptions } from '../jobs/jobs-nest.module';
3
+ export declare class ScheduleNestModule {
4
+ static forRoot(options: WorkflowJobsModuleOptions): DynamicModule;
5
+ static forRootAsync(options: WorkflowJobsModuleAsyncOptions): DynamicModule;
6
+ }
7
+ //# sourceMappingURL=schedule-nest.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule-nest.module.d.ts","sourceRoot":"","sources":["../../../src/modules/schedule/schedule-nest.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAU,MAAM,gBAAgB,CAAC;AAEvD,OAAO,KAAK,EACV,yBAAyB,EACzB,8BAA8B,EAC/B,MAAM,0BAA0B,CAAC;AAIlC,qBACa,kBAAkB;IAK7B,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,yBAAyB,GAAG,aAAa;IAYjE,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,8BAA8B,GAAG,aAAa;CAQ5E"}
@@ -0,0 +1,36 @@
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 ScheduleNestModule_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.ScheduleNestModule = void 0;
11
+ const common_1 = require("@nestjs/common");
12
+ const jobs_nest_module_1 = require("../jobs/jobs-nest.module");
13
+ const schedule_trigger_service_1 = require("./services/schedule-trigger.service");
14
+ let ScheduleNestModule = ScheduleNestModule_1 = class ScheduleNestModule {
15
+ static forRoot(options) {
16
+ return {
17
+ module: ScheduleNestModule_1,
18
+ imports: [jobs_nest_module_1.JobsNestModule.forRoot(options)],
19
+ providers: [schedule_trigger_service_1.ScheduleTriggerService],
20
+ exports: [schedule_trigger_service_1.ScheduleTriggerService],
21
+ };
22
+ }
23
+ static forRootAsync(options) {
24
+ return {
25
+ module: ScheduleNestModule_1,
26
+ imports: [jobs_nest_module_1.JobsNestModule.forRootAsync(options)],
27
+ providers: [schedule_trigger_service_1.ScheduleTriggerService],
28
+ exports: [schedule_trigger_service_1.ScheduleTriggerService],
29
+ };
30
+ }
31
+ };
32
+ exports.ScheduleNestModule = ScheduleNestModule;
33
+ exports.ScheduleNestModule = ScheduleNestModule = ScheduleNestModule_1 = __decorate([
34
+ (0, common_1.Module)({})
35
+ ], ScheduleNestModule);
36
+ //# sourceMappingURL=schedule-nest.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule-nest.module.js","sourceRoot":"","sources":["../../../src/modules/schedule/schedule-nest.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAuD;AAMvD,+DAA0D;AAC1D,kFAA6E;AAGtE,IAAM,kBAAkB,0BAAxB,MAAM,kBAAkB;IAK7B,MAAM,CAAC,OAAO,CAAC,OAAkC;QAC/C,OAAO;YACL,MAAM,EAAE,oBAAkB;YAC1B,OAAO,EAAE,CAAC,iCAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC1C,SAAS,EAAE,CAAC,iDAAsB,CAAC;YACnC,OAAO,EAAE,CAAC,iDAAsB,CAAC;SAClC,CAAC;IACJ,CAAC;IAKD,MAAM,CAAC,YAAY,CAAC,OAAuC;QACzD,OAAO;YACL,MAAM,EAAE,oBAAkB;YAC1B,OAAO,EAAE,CAAC,iCAAc,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC/C,SAAS,EAAE,CAAC,iDAAsB,CAAC;YACnC,OAAO,EAAE,CAAC,iDAAsB,CAAC;SAClC,CAAC;IACJ,CAAC;CACF,CAAA;AAzBY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,kBAAkB,CAyB9B"}
@@ -0,0 +1,3 @@
1
+ import { WorkflowModuleDefinition } from '../types';
2
+ export declare const scheduleModule: WorkflowModuleDefinition;
3
+ //# sourceMappingURL=schedule.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule.module.d.ts","sourceRoot":"","sources":["../../../src/modules/schedule/schedule.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAGpD,eAAO,MAAM,cAAc,EAAE,wBAQ5B,CAAC"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.scheduleModule = void 0;
4
+ const schedule_trigger_1 = require("./triggers/schedule.trigger");
5
+ exports.scheduleModule = {
6
+ key: 'schedule',
7
+ name: 'Schedule',
8
+ description: 'Run workflows on a cron schedule (exactly-once across instances)',
9
+ icon: '⏰',
10
+ version: '1.0.0',
11
+ actions: [],
12
+ triggers: [schedule_trigger_1.scheduleTrigger],
13
+ };
14
+ //# sourceMappingURL=schedule.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule.module.js","sourceRoot":"","sources":["../../../src/modules/schedule/schedule.module.ts"],"names":[],"mappings":";;;AACA,kEAA8D;AAEjD,QAAA,cAAc,GAA6B;IACtD,GAAG,EAAE,UAAU;IACf,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,kEAAkE;IAC/E,IAAI,EAAE,GAAG;IACT,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,EAAE;IACX,QAAQ,EAAE,CAAC,kCAAe,CAAC;CAC5B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './schedule-trigger.service';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modules/schedule/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./schedule-trigger.service"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/schedule/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6DAA2C"}
@@ -0,0 +1,13 @@
1
+ import { IWorkflowActionService, WorkflowActionContext } from '../../types';
2
+ import { WorkflowJobService } from '../../jobs/services/workflow-job.service';
3
+ export declare class ScheduleTriggerService implements IWorkflowActionService {
4
+ private readonly workflowJobService;
5
+ private readonly logger;
6
+ constructor(workflowJobService: WorkflowJobService);
7
+ perform(inputs: Record<string, unknown>, context: WorkflowActionContext): Promise<Record<string, unknown>>;
8
+ performSubscribe(inputs: Record<string, unknown>, context: WorkflowActionContext, nodeId: string): Promise<{
9
+ jobId: string;
10
+ }>;
11
+ performUnsubscribe(_inputs: Record<string, unknown>, context: WorkflowActionContext, nodeId: string): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=schedule-trigger.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule-trigger.service.d.ts","sourceRoot":"","sources":["../../../../src/modules/schedule/services/schedule-trigger.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAkB9E,qBACa,sBAAuB,YAAW,sBAAsB;IAGvD,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IAF/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2C;gBAErC,kBAAkB,EAAE,kBAAkB;IAE7D,OAAO,CACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAW7B,gBAAgB,CACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IA6CvB,kBAAkB,CACtB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC;CAUjB"}
@@ -0,0 +1,95 @@
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 ScheduleTriggerService_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.ScheduleTriggerService = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const workflow_job_service_1 = require("../../jobs/services/workflow-job.service");
16
+ const schedule_trigger_1 = require("../triggers/schedule.trigger");
17
+ function resolveCronExpression(inputs) {
18
+ const preset = inputs.schedulePreset;
19
+ if (!preset)
20
+ return undefined;
21
+ if (preset === schedule_trigger_1.SCHEDULE_PRESET_CUSTOM) {
22
+ const custom = inputs.customCronExpression?.trim();
23
+ return custom || undefined;
24
+ }
25
+ return preset;
26
+ }
27
+ let ScheduleTriggerService = ScheduleTriggerService_1 = class ScheduleTriggerService {
28
+ workflowJobService;
29
+ logger = new common_1.Logger(ScheduleTriggerService_1.name);
30
+ constructor(workflowJobService) {
31
+ this.workflowJobService = workflowJobService;
32
+ }
33
+ async perform(inputs, context) {
34
+ const scheduledAt = context.context?.scheduledAt ?? new Date().toISOString();
35
+ const jobId = context.context?.jobId;
36
+ const payload = context.context?.payload ?? {};
37
+ return {
38
+ scheduledAt,
39
+ jobId: jobId ?? '',
40
+ payload,
41
+ };
42
+ }
43
+ async performSubscribe(inputs, context, nodeId) {
44
+ const workflowId = context.workflowId;
45
+ if (!workflowId) {
46
+ throw new Error('Workflow ID is required to subscribe schedule trigger');
47
+ }
48
+ const cronExpression = resolveCronExpression(inputs);
49
+ if (!cronExpression) {
50
+ throw new Error('Schedule is required. Choose "When to run" or, for Custom, fill in "Custom schedule".');
51
+ }
52
+ const timezone = inputs.timezone?.trim() || 'UTC';
53
+ const enabled = inputs.enabled !== false;
54
+ const existing = await this.workflowJobService.findByWorkflowAndTrigger(workflowId, nodeId);
55
+ const name = `Schedule ${workflowId.slice(0, 8)}`;
56
+ const payload = inputs.payload;
57
+ if (existing) {
58
+ const updated = await this.workflowJobService.updateJob(existing.id, {
59
+ cronExpression,
60
+ timezone,
61
+ isActive: enabled,
62
+ payload,
63
+ });
64
+ this.logger.log(`Updated schedule job ${updated.id} for workflow ${workflowId}`);
65
+ return { jobId: updated.id };
66
+ }
67
+ const job = await this.workflowJobService.createJob({
68
+ workflowId,
69
+ triggerNodeId: nodeId,
70
+ name,
71
+ cronExpression,
72
+ timezone,
73
+ isActive: enabled,
74
+ payload,
75
+ });
76
+ this.logger.log(`Created schedule job ${job.id} for workflow ${workflowId}`);
77
+ return { jobId: job.id };
78
+ }
79
+ async performUnsubscribe(_inputs, context, nodeId) {
80
+ const workflowId = context.workflowId;
81
+ if (!workflowId)
82
+ return;
83
+ const job = await this.workflowJobService.findByWorkflowAndTrigger(workflowId, nodeId);
84
+ if (job) {
85
+ await this.workflowJobService.toggleJob(job.id, false);
86
+ this.logger.log(`Disabled schedule job ${job.id} for workflow ${workflowId}`);
87
+ }
88
+ }
89
+ };
90
+ exports.ScheduleTriggerService = ScheduleTriggerService;
91
+ exports.ScheduleTriggerService = ScheduleTriggerService = ScheduleTriggerService_1 = __decorate([
92
+ (0, common_1.Injectable)(),
93
+ __metadata("design:paramtypes", [workflow_job_service_1.WorkflowJobService])
94
+ ], ScheduleTriggerService);
95
+ //# sourceMappingURL=schedule-trigger.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule-trigger.service.js","sourceRoot":"","sources":["../../../../src/modules/schedule/services/schedule-trigger.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './schedule.trigger';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modules/schedule/triggers/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./schedule.trigger"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/schedule/triggers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC"}
@@ -0,0 +1,9 @@
1
+ import { WorkflowActionTrigger } from '../../types';
2
+ export declare const TRIGGER_KEY_SCHEDULE = "schedule";
3
+ export declare const SCHEDULE_PRESET_CUSTOM = "__custom__";
4
+ export declare const SCHEDULE_PRESET_OPTIONS: Array<{
5
+ label: string;
6
+ value: string;
7
+ }>;
8
+ export declare const scheduleTrigger: WorkflowActionTrigger;
9
+ //# sourceMappingURL=schedule.trigger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule.trigger.d.ts","sourceRoot":"","sources":["../../../../src/modules/schedule/triggers/schedule.trigger.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,qBAAqB,EACtB,MAAM,aAAa,CAAC;AAGrB,eAAO,MAAM,oBAAoB,aAAa,CAAC;AAG/C,eAAO,MAAM,sBAAsB,eAAe,CAAC;AAGnD,eAAO,MAAM,uBAAuB,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAU3E,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,qBA8F7B,CAAC"}