@n8n/scheduler 0.2.3 → 0.3.0

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 (166) hide show
  1. package/README.md +60 -23
  2. package/dist/build.tsbuildinfo +1 -1
  3. package/dist/core/errors.d.ts +6 -0
  4. package/dist/core/errors.js +15 -1
  5. package/dist/core/errors.js.map +1 -1
  6. package/dist/core/executor/backoff.js.map +1 -0
  7. package/dist/core/executor/executor.d.ts +38 -0
  8. package/dist/core/executor/executor.js +137 -0
  9. package/dist/core/executor/executor.js.map +1 -0
  10. package/dist/core/executor/index.d.ts +8 -0
  11. package/dist/core/executor/index.js +16 -0
  12. package/dist/core/executor/index.js.map +1 -0
  13. package/dist/core/executor/options.d.ts +6 -0
  14. package/dist/core/executor/options.js +10 -0
  15. package/dist/core/executor/options.js.map +1 -0
  16. package/dist/{executor → core/executor}/precision-timer.d.ts +1 -0
  17. package/dist/{executor → core/executor}/precision-timer.js +3 -0
  18. package/dist/core/executor/precision-timer.js.map +1 -0
  19. package/dist/core/executor/store.d.ts +21 -0
  20. package/dist/core/executor/store.js +3 -0
  21. package/dist/core/executor/store.js.map +1 -0
  22. package/dist/{executor → core/executor}/task-handler.d.ts +1 -1
  23. package/dist/{executor → core/executor}/task-handler.js +2 -2
  24. package/dist/core/executor/task-handler.js.map +1 -0
  25. package/dist/core/executor/tracing.d.ts +11 -0
  26. package/dist/core/executor/tracing.js +7 -0
  27. package/dist/core/executor/tracing.js.map +1 -0
  28. package/dist/core/factory.d.ts +29 -0
  29. package/dist/core/factory.js +254 -0
  30. package/dist/core/factory.js.map +1 -0
  31. package/dist/core/index.d.ts +17 -9
  32. package/dist/core/index.js +15 -17
  33. package/dist/core/index.js.map +1 -1
  34. package/dist/core/lifecycle/alarm.d.ts +8 -0
  35. package/dist/core/lifecycle/alarm.js +32 -0
  36. package/dist/core/lifecycle/alarm.js.map +1 -0
  37. package/dist/core/lifecycle/index.d.ts +5 -0
  38. package/dist/core/lifecycle/index.js +11 -0
  39. package/dist/core/lifecycle/index.js.map +1 -0
  40. package/dist/core/lifecycle/lookahead.d.ts +1 -0
  41. package/dist/core/lifecycle/lookahead.js +7 -0
  42. package/dist/core/lifecycle/lookahead.js.map +1 -0
  43. package/dist/core/lifecycle/loop.d.ts +39 -0
  44. package/dist/core/lifecycle/loop.js +86 -0
  45. package/dist/core/lifecycle/loop.js.map +1 -0
  46. package/dist/core/lifecycle/options.d.ts +15 -0
  47. package/dist/core/lifecycle/options.js +18 -0
  48. package/dist/core/lifecycle/options.js.map +1 -0
  49. package/dist/core/lifecycle/timeline.d.ts +9 -0
  50. package/dist/core/lifecycle/timeline.js +22 -0
  51. package/dist/core/lifecycle/timeline.js.map +1 -0
  52. package/dist/core/materializer/index.d.ts +2 -2
  53. package/dist/core/materializer/index.js.map +1 -1
  54. package/dist/core/materializer/materialize.d.ts +10 -2
  55. package/dist/core/materializer/materialize.js +32 -6
  56. package/dist/core/materializer/materialize.js.map +1 -1
  57. package/dist/core/materializer/options.d.ts +1 -0
  58. package/dist/core/materializer/options.js +1 -0
  59. package/dist/core/materializer/options.js.map +1 -1
  60. package/dist/core/materializer/plan.d.ts +1 -0
  61. package/dist/core/materializer/plan.js +12 -6
  62. package/dist/core/materializer/plan.js.map +1 -1
  63. package/dist/core/materializer/transaction.d.ts +18 -1
  64. package/dist/core/provisioning/index.d.ts +5 -0
  65. package/dist/core/provisioning/index.js +9 -0
  66. package/dist/core/provisioning/index.js.map +1 -0
  67. package/dist/core/provisioning/provision.d.ts +6 -0
  68. package/dist/core/provisioning/provision.js +64 -0
  69. package/dist/core/provisioning/provision.js.map +1 -0
  70. package/dist/core/provisioning/provisioner.d.ts +15 -0
  71. package/dist/core/provisioning/provisioner.js +18 -0
  72. package/dist/core/provisioning/provisioner.js.map +1 -0
  73. package/dist/core/provisioning/transaction.d.ts +13 -0
  74. package/dist/core/provisioning/transaction.js +3 -0
  75. package/dist/core/provisioning/transaction.js.map +1 -0
  76. package/dist/core/provisioning/types.d.ts +43 -0
  77. package/dist/core/provisioning/types.js +3 -0
  78. package/dist/core/provisioning/types.js.map +1 -0
  79. package/dist/core/reaper/index.d.ts +1 -0
  80. package/dist/core/reaper/index.js +7 -0
  81. package/dist/core/reaper/index.js.map +1 -0
  82. package/dist/{reaper/reaper.d.ts → core/reaper/reap.d.ts} +13 -8
  83. package/dist/core/reaper/reap.js +51 -0
  84. package/dist/core/reaper/reap.js.map +1 -0
  85. package/dist/core/recurrence/field.d.ts +2 -0
  86. package/dist/core/recurrence/field.js +12 -0
  87. package/dist/core/recurrence/field.js.map +1 -0
  88. package/dist/core/recurrence/kinds/cron.d.ts +10 -0
  89. package/dist/core/recurrence/kinds/cron.js +64 -0
  90. package/dist/core/recurrence/kinds/cron.js.map +1 -0
  91. package/dist/core/recurrence/kinds/interval.d.ts +5 -0
  92. package/dist/core/recurrence/kinds/interval.js +29 -0
  93. package/dist/core/recurrence/kinds/interval.js.map +1 -0
  94. package/dist/core/recurrence/kinds/one-off.d.ts +5 -0
  95. package/dist/core/recurrence/kinds/one-off.js +24 -0
  96. package/dist/core/recurrence/kinds/one-off.js.map +1 -0
  97. package/dist/core/recurrence/kinds/recurring-cron.d.ts +7 -0
  98. package/dist/core/recurrence/kinds/recurring-cron.js +64 -0
  99. package/dist/core/recurrence/kinds/recurring-cron.js.map +1 -0
  100. package/dist/core/recurrence/next-run.d.ts +2 -0
  101. package/dist/core/recurrence/next-run.js +37 -24
  102. package/dist/core/recurrence/next-run.js.map +1 -1
  103. package/dist/core/recurrence/periods.d.ts +2 -0
  104. package/dist/core/recurrence/periods.js +30 -0
  105. package/dist/core/recurrence/periods.js.map +1 -0
  106. package/dist/core/recurrence/resolve.d.ts +2 -0
  107. package/dist/core/recurrence/resolve.js +25 -0
  108. package/dist/core/recurrence/resolve.js.map +1 -0
  109. package/dist/core/recurrence/validate.js +9 -38
  110. package/dist/core/recurrence/validate.js.map +1 -1
  111. package/dist/core/retention/prune.d.ts +1 -1
  112. package/dist/core/retention/prune.js +11 -9
  113. package/dist/core/retention/prune.js.map +1 -1
  114. package/dist/core/retention/store.d.ts +1 -1
  115. package/dist/core/scheduler.d.ts +16 -0
  116. package/dist/core/scheduler.js +3 -0
  117. package/dist/core/scheduler.js.map +1 -0
  118. package/dist/core/types/schedule.d.ts +17 -4
  119. package/dist/core/types/task.d.ts +2 -5
  120. package/dist/observability/attributes.d.ts +41 -0
  121. package/dist/observability/attributes.js +56 -0
  122. package/dist/observability/attributes.js.map +1 -0
  123. package/dist/observability/executor-tracing.d.ts +4 -0
  124. package/dist/observability/executor-tracing.js +61 -0
  125. package/dist/observability/executor-tracing.js.map +1 -0
  126. package/dist/observability/materializer-tracing.d.ts +3 -0
  127. package/dist/observability/materializer-tracing.js +22 -0
  128. package/dist/observability/materializer-tracing.js.map +1 -0
  129. package/dist/observability/metrics.d.ts +11 -0
  130. package/dist/observability/metrics.js +14 -0
  131. package/dist/observability/metrics.js.map +1 -0
  132. package/dist/observability/pass-tracing.d.ts +2 -0
  133. package/dist/observability/pass-tracing.js +24 -0
  134. package/dist/observability/pass-tracing.js.map +1 -0
  135. package/dist/observability/provisioner-tracing.d.ts +11 -0
  136. package/dist/observability/provisioner-tracing.js +51 -0
  137. package/dist/observability/provisioner-tracing.js.map +1 -0
  138. package/dist/observability/tracer.d.ts +21 -0
  139. package/dist/observability/tracer.js +10 -0
  140. package/dist/observability/tracer.js.map +1 -0
  141. package/package.json +11 -22
  142. package/dist/core/enums.d.ts +0 -1
  143. package/dist/core/enums.js +0 -10
  144. package/dist/core/enums.js.map +0 -1
  145. package/dist/executor/backoff.js.map +0 -1
  146. package/dist/executor/executor.d.ts +0 -23
  147. package/dist/executor/executor.js +0 -133
  148. package/dist/executor/executor.js.map +0 -1
  149. package/dist/executor/precision-timer.js.map +0 -1
  150. package/dist/executor/task-handler.js.map +0 -1
  151. package/dist/reaper/reaper.js +0 -37
  152. package/dist/reaper/reaper.js.map +0 -1
  153. package/dist/storage/index.d.ts +0 -3
  154. package/dist/storage/index.js +0 -12
  155. package/dist/storage/index.js.map +0 -1
  156. package/dist/storage/mappers.d.ts +0 -6
  157. package/dist/storage/mappers.js +0 -72
  158. package/dist/storage/mappers.js.map +0 -1
  159. package/dist/storage/materializer-store.d.ts +0 -14
  160. package/dist/storage/materializer-store.js +0 -83
  161. package/dist/storage/materializer-store.js.map +0 -1
  162. package/dist/storage/scheduler.service.d.ts +0 -16
  163. package/dist/storage/scheduler.service.js +0 -70
  164. package/dist/storage/scheduler.service.js.map +0 -1
  165. /package/dist/{executor → core/executor}/backoff.d.ts +0 -0
  166. /package/dist/{executor → core/executor}/backoff.js +0 -0
@@ -1,3 +1,4 @@
1
+ import type { ScheduledJobKind, RecurringCronUnit } from '@n8n/constants';
1
2
  import type { CronExpression } from 'n8n-workflow';
2
3
  export interface CronSchedule {
3
4
  kind: 'cron';
@@ -12,13 +13,25 @@ export interface OneOffSchedule {
12
13
  kind: 'one_off';
13
14
  fireAt: Date;
14
15
  }
15
- export type Schedule = CronSchedule | IntervalSchedule | OneOffSchedule;
16
+ export interface RecurringCronSchedule {
17
+ kind: 'recurring_cron';
18
+ cronExpression: CronExpression;
19
+ timezone: string | null;
20
+ recurrenceUnit: RecurringCronUnit;
21
+ recurrenceSize: number;
22
+ }
23
+ export type Schedule = CronSchedule | IntervalSchedule | OneOffSchedule | RecurringCronSchedule;
16
24
  export interface ScheduledJob {
17
- id: string;
25
+ id: number;
18
26
  taskType: string;
19
27
  payload: Record<string, unknown>;
20
- schedule: Schedule;
21
- enabled: boolean;
28
+ kind: ScheduledJobKind;
29
+ cronExpression: string | null;
30
+ timezone: string | null;
31
+ intervalSeconds: number | null;
32
+ fireAt: Date | null;
33
+ recurrenceUnit: RecurringCronUnit | null;
34
+ recurrenceSize: number | null;
22
35
  nextRunAt: Date | null;
23
36
  lastFiredAt: Date | null;
24
37
  maxAttempts: number;
@@ -1,7 +1,7 @@
1
- import type { ScheduledTaskStatus } from '../enums';
1
+ import type { ScheduledTaskStatus } from '@n8n/constants';
2
2
  export interface ScheduledTask {
3
3
  id: string;
4
- jobId: string;
4
+ jobId: number;
5
5
  taskType: string;
6
6
  payload: Record<string, unknown>;
7
7
  scheduledFor: Date;
@@ -11,8 +11,5 @@ export interface ScheduledTask {
11
11
  maxAttempts: number;
12
12
  }
13
13
  export interface ClaimedTask extends ScheduledTask {
14
- claimedBy: string;
15
- leaseExpiresAt: Date;
16
14
  leaseEpoch: number;
17
- startedAt: Date | null;
18
15
  }
@@ -0,0 +1,41 @@
1
+ import type { ClaimedTask } from '../core/types';
2
+ export declare const SCHEDULER_ATTRIBUTES: {
3
+ readonly taskId: "n8n.scheduler.task_id";
4
+ readonly jobId: "n8n.scheduler.job_id";
5
+ readonly taskType: "n8n.scheduler.task_type";
6
+ readonly host: "n8n.scheduler.host";
7
+ readonly leaseEpoch: "n8n.scheduler.lease_epoch";
8
+ readonly scheduledFor: "n8n.scheduler.scheduled_for";
9
+ readonly runAt: "n8n.scheduler.run_at";
10
+ readonly attempts: "n8n.scheduler.attempts";
11
+ readonly maxAttempts: "n8n.scheduler.max_attempts";
12
+ readonly outcome: "n8n.scheduler.outcome";
13
+ readonly claimedCount: "n8n.scheduler.claimed_count";
14
+ readonly reclaimed: "n8n.scheduler.reclaimed";
15
+ readonly deadLettered: "n8n.scheduler.dead_lettered";
16
+ readonly claimedJobs: "n8n.scheduler.claimed_jobs";
17
+ readonly occurrences: "n8n.scheduler.occurrences";
18
+ readonly deferredJobs: "n8n.scheduler.deferred_jobs";
19
+ readonly retentionDeleted: "n8n.scheduler.retention_deleted";
20
+ readonly retentionDrained: "n8n.scheduler.retention_drained";
21
+ readonly provisionInserted: "n8n.scheduler.provision_inserted";
22
+ readonly provisionRedefined: "n8n.scheduler.provision_redefined";
23
+ readonly provisionUnchanged: "n8n.scheduler.provision_unchanged";
24
+ readonly provisionRemoved: "n8n.scheduler.provision_removed";
25
+ readonly deprovisionRemoved: "n8n.scheduler.deprovision_removed";
26
+ readonly jobName: "n8n.scheduler.job_name";
27
+ readonly jobAction: "n8n.scheduler.job_action";
28
+ };
29
+ export declare const SCHEDULER_PROVISION_ACTION: {
30
+ readonly inserted: "inserted";
31
+ readonly redefined: "redefined";
32
+ readonly removed: "removed";
33
+ };
34
+ export declare const SCHEDULER_FIRE_OUTCOME: {
35
+ readonly completed: "completed";
36
+ readonly rescheduled: "rescheduled";
37
+ readonly deadLettered: "dead_lettered";
38
+ readonly skippedNoHandler: "skipped_no_handler";
39
+ readonly skippedNotOwned: "skipped_not_owned";
40
+ };
41
+ export declare function pickSchedulerTaskAttributes(task: ClaimedTask): Record<string, string | number>;
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SCHEDULER_FIRE_OUTCOME = exports.SCHEDULER_PROVISION_ACTION = exports.SCHEDULER_ATTRIBUTES = void 0;
4
+ exports.pickSchedulerTaskAttributes = pickSchedulerTaskAttributes;
5
+ exports.SCHEDULER_ATTRIBUTES = {
6
+ taskId: 'n8n.scheduler.task_id',
7
+ jobId: 'n8n.scheduler.job_id',
8
+ taskType: 'n8n.scheduler.task_type',
9
+ host: 'n8n.scheduler.host',
10
+ leaseEpoch: 'n8n.scheduler.lease_epoch',
11
+ scheduledFor: 'n8n.scheduler.scheduled_for',
12
+ runAt: 'n8n.scheduler.run_at',
13
+ attempts: 'n8n.scheduler.attempts',
14
+ maxAttempts: 'n8n.scheduler.max_attempts',
15
+ outcome: 'n8n.scheduler.outcome',
16
+ claimedCount: 'n8n.scheduler.claimed_count',
17
+ reclaimed: 'n8n.scheduler.reclaimed',
18
+ deadLettered: 'n8n.scheduler.dead_lettered',
19
+ claimedJobs: 'n8n.scheduler.claimed_jobs',
20
+ occurrences: 'n8n.scheduler.occurrences',
21
+ deferredJobs: 'n8n.scheduler.deferred_jobs',
22
+ retentionDeleted: 'n8n.scheduler.retention_deleted',
23
+ retentionDrained: 'n8n.scheduler.retention_drained',
24
+ provisionInserted: 'n8n.scheduler.provision_inserted',
25
+ provisionRedefined: 'n8n.scheduler.provision_redefined',
26
+ provisionUnchanged: 'n8n.scheduler.provision_unchanged',
27
+ provisionRemoved: 'n8n.scheduler.provision_removed',
28
+ deprovisionRemoved: 'n8n.scheduler.deprovision_removed',
29
+ jobName: 'n8n.scheduler.job_name',
30
+ jobAction: 'n8n.scheduler.job_action',
31
+ };
32
+ exports.SCHEDULER_PROVISION_ACTION = {
33
+ inserted: 'inserted',
34
+ redefined: 'redefined',
35
+ removed: 'removed',
36
+ };
37
+ exports.SCHEDULER_FIRE_OUTCOME = {
38
+ completed: 'completed',
39
+ rescheduled: 'rescheduled',
40
+ deadLettered: 'dead_lettered',
41
+ skippedNoHandler: 'skipped_no_handler',
42
+ skippedNotOwned: 'skipped_not_owned',
43
+ };
44
+ function pickSchedulerTaskAttributes(task) {
45
+ return {
46
+ [exports.SCHEDULER_ATTRIBUTES.taskId]: task.id,
47
+ [exports.SCHEDULER_ATTRIBUTES.jobId]: task.jobId,
48
+ [exports.SCHEDULER_ATTRIBUTES.taskType]: task.taskType,
49
+ [exports.SCHEDULER_ATTRIBUTES.leaseEpoch]: task.leaseEpoch,
50
+ [exports.SCHEDULER_ATTRIBUTES.attempts]: task.attempts,
51
+ [exports.SCHEDULER_ATTRIBUTES.maxAttempts]: task.maxAttempts,
52
+ [exports.SCHEDULER_ATTRIBUTES.scheduledFor]: task.scheduledFor.toISOString(),
53
+ [exports.SCHEDULER_ATTRIBUTES.runAt]: task.runAt.toISOString(),
54
+ };
55
+ }
56
+ //# sourceMappingURL=attributes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attributes.js","sourceRoot":"","sources":["../../src/observability/attributes.ts"],"names":[],"mappings":";;;AAsEA,kEAWC;AA3EY,QAAA,oBAAoB,GAAG;IACnC,MAAM,EAAE,uBAAuB;IAC/B,KAAK,EAAE,sBAAsB;IAC7B,QAAQ,EAAE,yBAAyB;IACnC,IAAI,EAAE,oBAAoB;IAC1B,UAAU,EAAE,2BAA2B;IACvC,YAAY,EAAE,6BAA6B;IAC3C,KAAK,EAAE,sBAAsB;IAC7B,QAAQ,EAAE,wBAAwB;IAClC,WAAW,EAAE,4BAA4B;IACzC,OAAO,EAAE,uBAAuB;IAChC,YAAY,EAAE,6BAA6B;IAC3C,SAAS,EAAE,yBAAyB;IACpC,YAAY,EAAE,6BAA6B;IAC3C,WAAW,EAAE,4BAA4B;IACzC,WAAW,EAAE,2BAA2B;IACxC,YAAY,EAAE,6BAA6B;IAC3C,gBAAgB,EAAE,iCAAiC;IACnD,gBAAgB,EAAE,iCAAiC;IACnD,iBAAiB,EAAE,kCAAkC;IACrD,kBAAkB,EAAE,mCAAmC;IACvD,kBAAkB,EAAE,mCAAmC;IACvD,gBAAgB,EAAE,iCAAiC;IACnD,kBAAkB,EAAE,mCAAmC;IACvD,OAAO,EAAE,wBAAwB;IACjC,SAAS,EAAE,0BAA0B;CAC5B,CAAC;AAOE,QAAA,0BAA0B,GAAG;IAEzC,QAAQ,EAAE,UAAU;IAEpB,SAAS,EAAE,WAAW;IAEtB,OAAO,EAAE,SAAS;CACT,CAAC;AAOE,QAAA,sBAAsB,GAAG;IAErC,SAAS,EAAE,WAAW;IAEtB,WAAW,EAAE,aAAa;IAE1B,YAAY,EAAE,eAAe;IAE7B,gBAAgB,EAAE,oBAAoB;IAEtC,eAAe,EAAE,mBAAmB;CAC3B,CAAC;AAMX,SAAgB,2BAA2B,CAAC,IAAiB;IAC5D,OAAO;QACN,CAAC,4BAAoB,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE;QACtC,CAAC,4BAAoB,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK;QACxC,CAAC,4BAAoB,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ;QAC9C,CAAC,4BAAoB,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,UAAU;QAClD,CAAC,4BAAoB,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ;QAC9C,CAAC,4BAAoB,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,WAAW;QACpD,CAAC,4BAAoB,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;QACpE,CAAC,4BAAoB,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;KACtD,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type Tracer } from './tracer';
2
+ import type { ExecutorTracing, TaskHandler } from '../core/executor';
3
+ export declare function createExecutorTracing(tracer: Tracer): ExecutorTracing;
4
+ export declare function withHandoffTracing(tracer: Tracer, handler: TaskHandler): TaskHandler;
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createExecutorTracing = createExecutorTracing;
4
+ exports.withHandoffTracing = withHandoffTracing;
5
+ const attributes_1 = require("./attributes");
6
+ const tracer_1 = require("./tracer");
7
+ function createExecutorTracing(tracer) {
8
+ return {
9
+ async fire(host, task, run) {
10
+ return await tracer.startSpan({
11
+ name: 'Scheduler fire',
12
+ op: 'scheduler.fire',
13
+ attributes: { ...(0, attributes_1.pickSchedulerTaskAttributes)(task), [attributes_1.SCHEDULER_ATTRIBUTES.host]: host },
14
+ newTrace: true,
15
+ }, async (span) => {
16
+ const result = await run();
17
+ span.setAttribute(attributes_1.SCHEDULER_ATTRIBUTES.outcome, fireOutcomeAttribute(result.outcome));
18
+ if ('errorMessage' in result) {
19
+ span.setStatus({ code: tracer_1.SpanStatus.error, message: result.errorMessage });
20
+ }
21
+ else {
22
+ span.setStatus({ code: tracer_1.SpanStatus.ok });
23
+ }
24
+ return result;
25
+ });
26
+ },
27
+ };
28
+ }
29
+ function withHandoffTracing(tracer, handler) {
30
+ return {
31
+ async execute(task) {
32
+ await tracer.startSpan({
33
+ name: 'Scheduler handoff',
34
+ op: 'scheduler.handoff',
35
+ attributes: {
36
+ [attributes_1.SCHEDULER_ATTRIBUTES.taskId]: task.id,
37
+ [attributes_1.SCHEDULER_ATTRIBUTES.jobId]: task.jobId,
38
+ [attributes_1.SCHEDULER_ATTRIBUTES.taskType]: task.taskType,
39
+ },
40
+ }, async (span) => {
41
+ await handler.execute(task);
42
+ span.setStatus({ code: tracer_1.SpanStatus.ok });
43
+ });
44
+ },
45
+ };
46
+ }
47
+ function fireOutcomeAttribute(outcome) {
48
+ switch (outcome) {
49
+ case 'completed':
50
+ return attributes_1.SCHEDULER_FIRE_OUTCOME.completed;
51
+ case 'rescheduled':
52
+ return attributes_1.SCHEDULER_FIRE_OUTCOME.rescheduled;
53
+ case 'dead-lettered':
54
+ return attributes_1.SCHEDULER_FIRE_OUTCOME.deadLettered;
55
+ case 'skipped-no-handler':
56
+ return attributes_1.SCHEDULER_FIRE_OUTCOME.skippedNoHandler;
57
+ case 'skipped-not-owned':
58
+ return attributes_1.SCHEDULER_FIRE_OUTCOME.skippedNotOwned;
59
+ }
60
+ }
61
+ //# sourceMappingURL=executor-tracing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor-tracing.js","sourceRoot":"","sources":["../../src/observability/executor-tracing.ts"],"names":[],"mappings":";;AAoBA,sDA6BC;AAgBD,gDAoBC;AArFD,6CAIsB;AACtB,qCAAmD;AAenD,SAAgB,qBAAqB,CAAC,MAAc;IACnD,OAAO;QACN,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG;YACzB,OAAO,MAAM,MAAM,CAAC,SAAS,CAC5B;gBACC,IAAI,EAAE,gBAAgB;gBACtB,EAAE,EAAE,gBAAgB;gBACpB,UAAU,EAAE,EAAE,GAAG,IAAA,wCAA2B,EAAC,IAAI,CAAC,EAAE,CAAC,iCAAoB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE;gBAKvF,QAAQ,EAAE,IAAI;aACd,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;gBAGd,MAAM,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC;gBAC3B,IAAI,CAAC,YAAY,CAAC,iCAAoB,CAAC,OAAO,EAAE,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;gBACtF,IAAI,cAAc,IAAI,MAAM,EAAE,CAAC;oBAC9B,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,mBAAU,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;gBAC1E,CAAC;qBAAM,CAAC;oBACP,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,mBAAU,CAAC,EAAE,EAAE,CAAC,CAAC;gBACzC,CAAC;gBACD,OAAO,MAAM,CAAC;YACf,CAAC,CACD,CAAC;QACH,CAAC;KACD,CAAC;AACH,CAAC;AAgBD,SAAgB,kBAAkB,CAAC,MAAc,EAAE,OAAoB;IACtE,OAAO;QACN,KAAK,CAAC,OAAO,CAAC,IAAI;YACjB,MAAM,MAAM,CAAC,SAAS,CACrB;gBACC,IAAI,EAAE,mBAAmB;gBACzB,EAAE,EAAE,mBAAmB;gBACvB,UAAU,EAAE;oBACX,CAAC,iCAAoB,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE;oBACtC,CAAC,iCAAoB,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK;oBACxC,CAAC,iCAAoB,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ;iBAC9C;aACD,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;gBACd,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC5B,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,mBAAU,CAAC,EAAE,EAAE,CAAC,CAAC;YACzC,CAAC,CACD,CAAC;QACH,CAAC;KACD,CAAC;AACH,CAAC;AAKD,SAAS,oBAAoB,CAAC,OAA8B;IAC3D,QAAQ,OAAO,EAAE,CAAC;QACjB,KAAK,WAAW;YACf,OAAO,mCAAsB,CAAC,SAAS,CAAC;QACzC,KAAK,aAAa;YACjB,OAAO,mCAAsB,CAAC,WAAW,CAAC;QAC3C,KAAK,eAAe;YACnB,OAAO,mCAAsB,CAAC,YAAY,CAAC;QAC5C,KAAK,oBAAoB;YACxB,OAAO,mCAAsB,CAAC,gBAAgB,CAAC;QAChD,KAAK,mBAAmB;YACvB,OAAO,mCAAsB,CAAC,eAAe,CAAC;IAChD,CAAC;AACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type Tracer } from './tracer';
2
+ import type { RecordedOccurrence } from '../core/materializer';
3
+ export declare function traceCreatedTasks(tracer: Tracer, created: RecordedOccurrence[]): Promise<void>;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.traceCreatedTasks = traceCreatedTasks;
4
+ const attributes_1 = require("./attributes");
5
+ const tracer_1 = require("./tracer");
6
+ async function traceCreatedTasks(tracer, created) {
7
+ for (const task of created) {
8
+ await tracer.startSpan({
9
+ name: 'Scheduler task created',
10
+ op: 'scheduler.task.create',
11
+ attributes: {
12
+ [attributes_1.SCHEDULER_ATTRIBUTES.taskId]: task.id,
13
+ [attributes_1.SCHEDULER_ATTRIBUTES.jobId]: task.jobId,
14
+ [attributes_1.SCHEDULER_ATTRIBUTES.taskType]: task.taskType,
15
+ },
16
+ }, async (span) => {
17
+ span.setStatus({ code: tracer_1.SpanStatus.ok });
18
+ await Promise.resolve();
19
+ });
20
+ }
21
+ }
22
+ //# sourceMappingURL=materializer-tracing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"materializer-tracing.js","sourceRoot":"","sources":["../../src/observability/materializer-tracing.ts"],"names":[],"mappings":";;AAgBA,8CAqBC;AArCD,6CAAoD;AACpD,qCAAmD;AAe5C,KAAK,UAAU,iBAAiB,CACtC,MAAc,EACd,OAA6B;IAE7B,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,MAAM,CAAC,SAAS,CACrB;YACC,IAAI,EAAE,wBAAwB;YAC9B,EAAE,EAAE,uBAAuB;YAC3B,UAAU,EAAE;gBACX,CAAC,iCAAoB,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE;gBACtC,CAAC,iCAAoB,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK;gBACxC,CAAC,iCAAoB,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ;aAC9C;SACD,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;YACd,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,mBAAU,CAAC,EAAE,EAAE,CAAC,CAAC;YACxC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACzB,CAAC,CACD,CAAC;IACH,CAAC;AACF,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface SchedulerMetrics {
2
+ recordDispatch(taskType: string): void;
3
+ recordFireOutcome(taskType: string, result: 'success' | 'failure'): void;
4
+ recordRetry(taskType: string): void;
5
+ observeDispatchLagSeconds(taskType: string, seconds: number): void;
6
+ recordMaterialized(occurrences: number, deferredJobs: number): void;
7
+ recordReaped(reclaimed: number, deadLettered: number): void;
8
+ recordDeadLettered(): void;
9
+ recordPruned(deleted: number): void;
10
+ }
11
+ export declare const noopMetrics: SchedulerMetrics;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.noopMetrics = void 0;
4
+ exports.noopMetrics = {
5
+ recordDispatch() { },
6
+ recordFireOutcome() { },
7
+ recordRetry() { },
8
+ observeDispatchLagSeconds() { },
9
+ recordMaterialized() { },
10
+ recordReaped() { },
11
+ recordDeadLettered() { },
12
+ recordPruned() { },
13
+ };
14
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/observability/metrics.ts"],"names":[],"mappings":";;;AA+Ba,QAAA,WAAW,GAAqB;IAC5C,cAAc,KAAI,CAAC;IACnB,iBAAiB,KAAI,CAAC;IACtB,WAAW,KAAI,CAAC;IAChB,yBAAyB,KAAI,CAAC;IAC9B,kBAAkB,KAAI,CAAC;IACvB,YAAY,KAAI,CAAC;IACjB,kBAAkB,KAAI,CAAC;IACvB,YAAY,KAAI,CAAC;CACjB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { type SpanOptions, type Tracer } from './tracer';
2
+ export declare function tracePass<T>(tracer: Tracer, options: SpanOptions, run: (signal?: AbortSignal) => Promise<T>, attributesFrom: (result: T) => Record<string, string | number | boolean>): (signal?: AbortSignal) => Promise<T>;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.tracePass = tracePass;
4
+ const tracer_1 = require("./tracer");
5
+ const lifecycle_1 = require("../core/lifecycle");
6
+ function tracePass(tracer, options, run, attributesFrom) {
7
+ return async (signal) => await tracer.startSpan(options, async (span) => {
8
+ const result = await run(signal);
9
+ for (const [key, value] of Object.entries(attributesFrom(result))) {
10
+ span.setAttribute(key, value);
11
+ }
12
+ settlePassSpan(span, signal);
13
+ return result;
14
+ });
15
+ }
16
+ function settlePassSpan(span, signal) {
17
+ if (signal?.aborted === true && signal.reason === lifecycle_1.PASS_TIMED_OUT) {
18
+ span.setStatus({ code: tracer_1.SpanStatus.error, message: 'Scheduler pass timed out' });
19
+ }
20
+ else {
21
+ span.setStatus({ code: tracer_1.SpanStatus.ok });
22
+ }
23
+ }
24
+ //# sourceMappingURL=pass-tracing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pass-tracing.js","sourceRoot":"","sources":["../../src/observability/pass-tracing.ts"],"names":[],"mappings":";;AAgBA,8BAeC;AA/BD,qCAAgF;AAChF,iDAAmD;AAenD,SAAgB,SAAS,CACxB,MAAc,EACd,OAAoB,EACpB,GAAyC,EACzC,cAAwE;IAExE,OAAO,KAAK,EAAE,MAAoB,EAAE,EAAE,CACrC,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC9C,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC;QACjC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;YACnE,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC/B,CAAC;QACD,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC7B,OAAO,MAAM,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAUD,SAAS,cAAc,CAAC,IAAU,EAAE,MAAoB;IACvD,IAAI,MAAM,EAAE,OAAO,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,0BAAc,EAAE,CAAC;QAClE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,mBAAU,CAAC,KAAK,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC,CAAC;IACjF,CAAC;SAAM,CAAC;QACP,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,mBAAU,CAAC,EAAE,EAAE,CAAC,CAAC;IACzC,CAAC;AACF,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { type Tracer } from './tracer';
2
+ import type { ProvisionSummary } from '../core/provisioning/types';
3
+ export interface ProvisionerTracing {
4
+ provision(run: () => Promise<ProvisionSummary>): Promise<ProvisionSummary>;
5
+ deprovision(run: () => Promise<{
6
+ removed: number;
7
+ }>): Promise<{
8
+ removed: number;
9
+ }>;
10
+ }
11
+ export declare function createProvisionerTracing(tracer: Tracer): ProvisionerTracing;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createProvisionerTracing = createProvisionerTracing;
4
+ const attributes_1 = require("./attributes");
5
+ const tracer_1 = require("./tracer");
6
+ function createProvisionerTracing(tracer) {
7
+ return {
8
+ async provision(run) {
9
+ return await tracer.startSpan({ name: 'Scheduler provision', op: 'scheduler.provision' }, async (span) => {
10
+ const summary = await run();
11
+ span.setAttribute(attributes_1.SCHEDULER_ATTRIBUTES.provisionInserted, summary.inserted.length);
12
+ span.setAttribute(attributes_1.SCHEDULER_ATTRIBUTES.provisionRedefined, summary.redefined.length);
13
+ span.setAttribute(attributes_1.SCHEDULER_ATTRIBUTES.provisionUnchanged, summary.unchanged.length);
14
+ span.setAttribute(attributes_1.SCHEDULER_ATTRIBUTES.provisionRemoved, summary.removed.length);
15
+ span.setStatus({ code: tracer_1.SpanStatus.ok });
16
+ await traceProvisionedJobs(tracer, summary);
17
+ return summary;
18
+ });
19
+ },
20
+ async deprovision(run) {
21
+ return await tracer.startSpan({ name: 'Scheduler deprovision', op: 'scheduler.deprovision' }, async (span) => {
22
+ const result = await run();
23
+ span.setAttribute(attributes_1.SCHEDULER_ATTRIBUTES.deprovisionRemoved, result.removed);
24
+ span.setStatus({ code: tracer_1.SpanStatus.ok });
25
+ return result;
26
+ });
27
+ },
28
+ };
29
+ }
30
+ async function traceProvisionedJobs(tracer, summary) {
31
+ const touched = [
32
+ ...summary.inserted.map((job) => [job, attributes_1.SCHEDULER_PROVISION_ACTION.inserted]),
33
+ ...summary.redefined.map((job) => [job, attributes_1.SCHEDULER_PROVISION_ACTION.redefined]),
34
+ ...summary.removed.map((job) => [job, attributes_1.SCHEDULER_PROVISION_ACTION.removed]),
35
+ ];
36
+ for (const [job, action] of touched) {
37
+ await tracer.startSpan({
38
+ name: 'Scheduler job provisioned',
39
+ op: 'scheduler.job.provision',
40
+ attributes: {
41
+ [attributes_1.SCHEDULER_ATTRIBUTES.jobId]: job.id,
42
+ [attributes_1.SCHEDULER_ATTRIBUTES.jobName]: job.name,
43
+ [attributes_1.SCHEDULER_ATTRIBUTES.jobAction]: action,
44
+ },
45
+ }, async (span) => {
46
+ span.setStatus({ code: tracer_1.SpanStatus.ok });
47
+ await Promise.resolve();
48
+ });
49
+ }
50
+ }
51
+ //# sourceMappingURL=provisioner-tracing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provisioner-tracing.js","sourceRoot":"","sources":["../../src/observability/provisioner-tracing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export declare const SpanStatus: {
2
+ readonly ok: 1;
3
+ readonly error: 2;
4
+ };
5
+ export interface SpanOptions {
6
+ name: string;
7
+ op?: string;
8
+ attributes?: Record<string, string | number | boolean | undefined>;
9
+ newTrace?: boolean;
10
+ }
11
+ export interface Span {
12
+ setAttribute(key: string, value: string | number | boolean): void;
13
+ setStatus(status: {
14
+ code: number;
15
+ message?: string;
16
+ }): void;
17
+ }
18
+ export interface Tracer {
19
+ startSpan<T>(options: SpanOptions, run: (span: Span) => Promise<T>): Promise<T>;
20
+ }
21
+ export declare const noopTracer: Tracer;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.noopTracer = exports.SpanStatus = void 0;
4
+ exports.SpanStatus = { ok: 1, error: 2 };
5
+ exports.noopTracer = {
6
+ async startSpan(_options, run) {
7
+ return await run({ setAttribute() { }, setStatus() { } });
8
+ },
9
+ };
10
+ //# sourceMappingURL=tracer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracer.js","sourceRoot":"","sources":["../../src/observability/tracer.ts"],"names":[],"mappings":";;;AAMa,QAAA,UAAU,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAW,CAAC;AAqC1C,QAAA,UAAU,GAAW;IACjC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG;QAC5B,OAAO,MAAM,GAAG,CAAC,EAAE,YAAY,KAAI,CAAC,EAAE,SAAS,KAAI,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC;CACD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@n8n/scheduler",
3
- "version": "0.2.3",
3
+ "version": "0.3.0",
4
4
  "main": "dist/index.js",
5
5
  "module": "src/index.ts",
6
6
  "types": "dist/index.d.ts",
@@ -13,38 +13,26 @@
13
13
  ".": {
14
14
  "types": "./dist/index.d.ts",
15
15
  "default": "./dist/index.js"
16
- },
17
- "./storage": {
18
- "types": "./dist/storage/index.d.ts",
19
- "default": "./dist/storage/index.js"
20
- }
21
- },
22
- "typesVersions": {
23
- "*": {
24
- "storage": [
25
- "dist/storage/index.d.ts"
26
- ]
27
16
  }
28
17
  },
29
18
  "dependencies": {
30
19
  "cron-parser": "5.6.1",
31
20
  "luxon": "3.7.2",
32
- "@n8n/constants": "0.30.0",
33
- "@n8n/backend-common": "1.30.3",
34
- "@n8n/config": "2.28.0",
35
- "@n8n/db": "1.30.3",
36
- "@n8n/utils": "1.38.1",
37
- "@n8n/di": "0.14.0",
38
- "@n8n/typeorm": "0.4.0",
39
- "n8n-workflow": "2.30.2"
21
+ "@n8n/constants": "0.31.0",
22
+ "@n8n/utils": "1.39.0",
23
+ "n8n-workflow": "2.31.0"
40
24
  },
41
25
  "devDependencies": {
26
+ "@stryker-mutator/core": "9.6.1",
27
+ "@stryker-mutator/vitest-runner": "9.6.1",
42
28
  "@types/luxon": "3.2.0",
43
29
  "@vitest/coverage-v8": "4.1.9",
30
+ "fast-check": "^3.23.2",
31
+ "typescript": "6.0.2",
44
32
  "vitest": "^4.1.9",
45
33
  "vitest-mock-extended": "^3.1.0",
46
- "@n8n/vitest-config": "1.17.0",
47
- "@n8n/typescript-config": "1.8.0"
34
+ "@n8n/typescript-config": "1.9.0",
35
+ "@n8n/vitest-config": "1.18.0"
48
36
  },
49
37
  "license": "SEE LICENSE IN LICENSE.md",
50
38
  "homepage": "https://n8n.io",
@@ -66,6 +54,7 @@
66
54
  "format:check": "biome ci .",
67
55
  "lint": "eslint . --quiet",
68
56
  "lint:fix": "eslint . --fix",
57
+ "mutate": "node ../../../scripts/mutation-health/mutate.mjs --package-dir packages/@n8n/scheduler",
69
58
  "watch": "tsc -p tsconfig.build.json --watch",
70
59
  "test": "vitest run --passWithNoTests",
71
60
  "test:unit": "vitest run --passWithNoTests",
@@ -1 +0,0 @@
1
- export { ScheduledJobKind, ScheduledJobKindList, ScheduledTaskStatus, ScheduledTaskStatusList, type TerminalTaskStatus, TerminalTaskStatusList, } from '@n8n/db';
@@ -1,10 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TerminalTaskStatusList = exports.ScheduledTaskStatusList = exports.ScheduledTaskStatus = exports.ScheduledJobKindList = exports.ScheduledJobKind = void 0;
4
- var db_1 = require("@n8n/db");
5
- Object.defineProperty(exports, "ScheduledJobKind", { enumerable: true, get: function () { return db_1.ScheduledJobKind; } });
6
- Object.defineProperty(exports, "ScheduledJobKindList", { enumerable: true, get: function () { return db_1.ScheduledJobKindList; } });
7
- Object.defineProperty(exports, "ScheduledTaskStatus", { enumerable: true, get: function () { return db_1.ScheduledTaskStatus; } });
8
- Object.defineProperty(exports, "ScheduledTaskStatusList", { enumerable: true, get: function () { return db_1.ScheduledTaskStatusList; } });
9
- Object.defineProperty(exports, "TerminalTaskStatusList", { enumerable: true, get: function () { return db_1.TerminalTaskStatusList; } });
10
- //# sourceMappingURL=enums.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"enums.js","sourceRoot":"","sources":["../../src/core/enums.ts"],"names":[],"mappings":";;;AAIA,8BAOiB;AANhB,sGAAA,gBAAgB,OAAA;AAChB,0GAAA,oBAAoB,OAAA;AACpB,yGAAA,mBAAmB,OAAA;AACnB,6GAAA,uBAAuB,OAAA;AAEvB,4GAAA,sBAAsB,OAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"backoff.js","sourceRoot":"","sources":["../../src/executor/backoff.ts"],"names":[],"mappings":";;AAuBA,0BAKC;AA5BD,8CAAsC;AAmBtC,MAAM,eAAe,GAAG,CAAC,GAAG,gBAAI,CAAC,OAAO,CAAC,cAAc,CAAC;AACxD,MAAM,cAAc,GAAG,CAAC,CAAC;AACzB,MAAM,cAAc,GAAG,CAAC,GAAG,gBAAI,CAAC,OAAO,CAAC,cAAc,CAAC;AAEvD,SAAgB,OAAO,CAAC,QAAgB,EAAE,OAAuB,EAAE;IAClE,MAAM,EAAE,MAAM,GAAG,eAAe,EAAE,MAAM,GAAG,cAAc,EAAE,KAAK,GAAG,cAAc,EAAE,GAAG,IAAI,CAAC;IAC3F,IAAI,QAAQ,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IAC3B,MAAM,GAAG,GAAG,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC7B,CAAC"}
@@ -1,23 +0,0 @@
1
- import type { Logger } from '@n8n/backend-common';
2
- import type { SchedulerConfig } from '@n8n/config';
3
- import type { ScheduledTaskRepository } from '@n8n/db';
4
- import type { PrecisionTimer } from './precision-timer';
5
- import type { TaskHandlerRegistry } from './task-handler';
6
- import type { ClaimedTask } from '../core/types';
7
- export declare class Executor {
8
- private readonly taskRepository;
9
- private readonly registry;
10
- private readonly timer;
11
- private readonly leaseMs;
12
- private readonly lookaheadMs;
13
- private readonly batchSize;
14
- private readonly logger;
15
- private readonly claimedTaskById;
16
- constructor(taskRepository: ScheduledTaskRepository, registry: TaskHandlerRegistry, timer: PrecisionTimer, logger: Logger, config: SchedulerConfig);
17
- claimAndSchedule(host: string): Promise<ClaimedTask[]>;
18
- private scheduleClaimed;
19
- fire(host: string, task: ClaimedTask): Promise<void>;
20
- private releaseUnmappableRow;
21
- private releaseClaimBestEffort;
22
- stop(): Promise<void>;
23
- }