@pristine-ts/local-scheduling 4.0.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 (150) hide show
  1. package/LICENSE +201 -0
  2. package/dist/lib/cjs/builders/builders.js +18 -0
  3. package/dist/lib/cjs/builders/builders.js.map +1 -0
  4. package/dist/lib/cjs/builders/cron-expression.builder.js +159 -0
  5. package/dist/lib/cjs/builders/cron-expression.builder.js.map +1 -0
  6. package/dist/lib/cjs/enums/day-of-week.enum.js +19 -0
  7. package/dist/lib/cjs/enums/day-of-week.enum.js.map +1 -0
  8. package/dist/lib/cjs/enums/enums.js +19 -0
  9. package/dist/lib/cjs/enums/enums.js.map +1 -0
  10. package/dist/lib/cjs/enums/month.enum.js +23 -0
  11. package/dist/lib/cjs/enums/month.enum.js.map +1 -0
  12. package/dist/lib/cjs/errors/errors.js +20 -0
  13. package/dist/lib/cjs/errors/errors.js.map +1 -0
  14. package/dist/lib/cjs/errors/invalid-cron-expression.error.js +30 -0
  15. package/dist/lib/cjs/errors/invalid-cron-expression.error.js.map +1 -0
  16. package/dist/lib/cjs/errors/schedule-already-exists.error.js +25 -0
  17. package/dist/lib/cjs/errors/schedule-already-exists.error.js.map +1 -0
  18. package/dist/lib/cjs/errors/schedule-not-found.error.js +22 -0
  19. package/dist/lib/cjs/errors/schedule-not-found.error.js.map +1 -0
  20. package/dist/lib/cjs/interfaces/interfaces.js +22 -0
  21. package/dist/lib/cjs/interfaces/interfaces.js.map +1 -0
  22. package/dist/lib/cjs/interfaces/local-scheduler.interface.js +3 -0
  23. package/dist/lib/cjs/interfaces/local-scheduler.interface.js.map +1 -0
  24. package/dist/lib/cjs/interfaces/schedulable.interface.js +3 -0
  25. package/dist/lib/cjs/interfaces/schedulable.interface.js.map +1 -0
  26. package/dist/lib/cjs/interfaces/schedule-descriptor.interface.js +3 -0
  27. package/dist/lib/cjs/interfaces/schedule-descriptor.interface.js.map +1 -0
  28. package/dist/lib/cjs/interfaces/schedule-options.interface.js +3 -0
  29. package/dist/lib/cjs/interfaces/schedule-options.interface.js.map +1 -0
  30. package/dist/lib/cjs/interfaces/schedule-state.interface.js +3 -0
  31. package/dist/lib/cjs/interfaces/schedule-state.interface.js.map +1 -0
  32. package/dist/lib/cjs/interfaces/schedule.interface.js +3 -0
  33. package/dist/lib/cjs/interfaces/schedule.interface.js.map +1 -0
  34. package/dist/lib/cjs/local-scheduling.module.js +85 -0
  35. package/dist/lib/cjs/local-scheduling.module.js.map +1 -0
  36. package/dist/lib/cjs/local-scheduling.module.keyname.js +5 -0
  37. package/dist/lib/cjs/local-scheduling.module.keyname.js.map +1 -0
  38. package/dist/lib/cjs/managers/local-scheduler.manager.js +361 -0
  39. package/dist/lib/cjs/managers/local-scheduler.manager.js.map +1 -0
  40. package/dist/lib/cjs/managers/managers.js +18 -0
  41. package/dist/lib/cjs/managers/managers.js.map +1 -0
  42. package/dist/lib/cjs/models/cron-expression.model.js +304 -0
  43. package/dist/lib/cjs/models/cron-expression.model.js.map +1 -0
  44. package/dist/lib/cjs/models/models.js +18 -0
  45. package/dist/lib/cjs/models/models.js.map +1 -0
  46. package/dist/lib/cjs/schedules/cron.schedule.js +34 -0
  47. package/dist/lib/cjs/schedules/cron.schedule.js.map +1 -0
  48. package/dist/lib/cjs/schedules/date.schedule.js +27 -0
  49. package/dist/lib/cjs/schedules/date.schedule.js.map +1 -0
  50. package/dist/lib/cjs/schedules/schedules.js +19 -0
  51. package/dist/lib/cjs/schedules/schedules.js.map +1 -0
  52. package/dist/lib/cjs/servers/local-scheduler.runtime-server.js +69 -0
  53. package/dist/lib/cjs/servers/local-scheduler.runtime-server.js.map +1 -0
  54. package/dist/lib/cjs/servers/servers.js +18 -0
  55. package/dist/lib/cjs/servers/servers.js.map +1 -0
  56. package/dist/lib/cjs/types/scheduled-task-function.type.js +3 -0
  57. package/dist/lib/cjs/types/scheduled-task-function.type.js.map +1 -0
  58. package/dist/lib/cjs/types/types.js +18 -0
  59. package/dist/lib/cjs/types/types.js.map +1 -0
  60. package/dist/lib/esm/builders/builders.js +2 -0
  61. package/dist/lib/esm/builders/builders.js.map +1 -0
  62. package/dist/lib/esm/builders/cron-expression.builder.js +155 -0
  63. package/dist/lib/esm/builders/cron-expression.builder.js.map +1 -0
  64. package/dist/lib/esm/enums/day-of-week.enum.js +16 -0
  65. package/dist/lib/esm/enums/day-of-week.enum.js.map +1 -0
  66. package/dist/lib/esm/enums/enums.js +3 -0
  67. package/dist/lib/esm/enums/enums.js.map +1 -0
  68. package/dist/lib/esm/enums/month.enum.js +20 -0
  69. package/dist/lib/esm/enums/month.enum.js.map +1 -0
  70. package/dist/lib/esm/errors/errors.js +4 -0
  71. package/dist/lib/esm/errors/errors.js.map +1 -0
  72. package/dist/lib/esm/errors/invalid-cron-expression.error.js +26 -0
  73. package/dist/lib/esm/errors/invalid-cron-expression.error.js.map +1 -0
  74. package/dist/lib/esm/errors/schedule-already-exists.error.js +21 -0
  75. package/dist/lib/esm/errors/schedule-already-exists.error.js.map +1 -0
  76. package/dist/lib/esm/errors/schedule-not-found.error.js +18 -0
  77. package/dist/lib/esm/errors/schedule-not-found.error.js.map +1 -0
  78. package/dist/lib/esm/interfaces/interfaces.js +6 -0
  79. package/dist/lib/esm/interfaces/interfaces.js.map +1 -0
  80. package/dist/lib/esm/interfaces/local-scheduler.interface.js +2 -0
  81. package/dist/lib/esm/interfaces/local-scheduler.interface.js.map +1 -0
  82. package/dist/lib/esm/interfaces/schedulable.interface.js +2 -0
  83. package/dist/lib/esm/interfaces/schedulable.interface.js.map +1 -0
  84. package/dist/lib/esm/interfaces/schedule-descriptor.interface.js +2 -0
  85. package/dist/lib/esm/interfaces/schedule-descriptor.interface.js.map +1 -0
  86. package/dist/lib/esm/interfaces/schedule-options.interface.js +2 -0
  87. package/dist/lib/esm/interfaces/schedule-options.interface.js.map +1 -0
  88. package/dist/lib/esm/interfaces/schedule-state.interface.js +2 -0
  89. package/dist/lib/esm/interfaces/schedule-state.interface.js.map +1 -0
  90. package/dist/lib/esm/interfaces/schedule.interface.js +2 -0
  91. package/dist/lib/esm/interfaces/schedule.interface.js.map +1 -0
  92. package/dist/lib/esm/local-scheduling.module.js +68 -0
  93. package/dist/lib/esm/local-scheduling.module.js.map +1 -0
  94. package/dist/lib/esm/local-scheduling.module.keyname.js +2 -0
  95. package/dist/lib/esm/local-scheduling.module.keyname.js.map +1 -0
  96. package/dist/lib/esm/managers/local-scheduler.manager.js +358 -0
  97. package/dist/lib/esm/managers/local-scheduler.manager.js.map +1 -0
  98. package/dist/lib/esm/managers/managers.js +2 -0
  99. package/dist/lib/esm/managers/managers.js.map +1 -0
  100. package/dist/lib/esm/models/cron-expression.model.js +300 -0
  101. package/dist/lib/esm/models/cron-expression.model.js.map +1 -0
  102. package/dist/lib/esm/models/models.js +2 -0
  103. package/dist/lib/esm/models/models.js.map +1 -0
  104. package/dist/lib/esm/schedules/cron.schedule.js +30 -0
  105. package/dist/lib/esm/schedules/cron.schedule.js.map +1 -0
  106. package/dist/lib/esm/schedules/date.schedule.js +23 -0
  107. package/dist/lib/esm/schedules/date.schedule.js.map +1 -0
  108. package/dist/lib/esm/schedules/schedules.js +3 -0
  109. package/dist/lib/esm/schedules/schedules.js.map +1 -0
  110. package/dist/lib/esm/servers/local-scheduler.runtime-server.js +66 -0
  111. package/dist/lib/esm/servers/local-scheduler.runtime-server.js.map +1 -0
  112. package/dist/lib/esm/servers/servers.js +2 -0
  113. package/dist/lib/esm/servers/servers.js.map +1 -0
  114. package/dist/lib/esm/types/scheduled-task-function.type.js +2 -0
  115. package/dist/lib/esm/types/scheduled-task-function.type.js.map +1 -0
  116. package/dist/lib/esm/types/types.js +2 -0
  117. package/dist/lib/esm/types/types.js.map +1 -0
  118. package/dist/lib/tsconfig.cjs.tsbuildinfo +1 -0
  119. package/dist/lib/tsconfig.tsbuildinfo +1 -0
  120. package/dist/types/builders/builders.d.ts +1 -0
  121. package/dist/types/builders/cron-expression.builder.d.ts +69 -0
  122. package/dist/types/enums/day-of-week.enum.d.ts +14 -0
  123. package/dist/types/enums/enums.d.ts +2 -0
  124. package/dist/types/enums/month.enum.d.ts +18 -0
  125. package/dist/types/errors/errors.d.ts +3 -0
  126. package/dist/types/errors/invalid-cron-expression.error.d.ts +20 -0
  127. package/dist/types/errors/schedule-already-exists.error.d.ts +15 -0
  128. package/dist/types/errors/schedule-not-found.error.d.ts +12 -0
  129. package/dist/types/interfaces/interfaces.d.ts +5 -0
  130. package/dist/types/interfaces/local-scheduler.interface.d.ts +57 -0
  131. package/dist/types/interfaces/schedulable.interface.d.ts +43 -0
  132. package/dist/types/interfaces/schedule-descriptor.interface.d.ts +22 -0
  133. package/dist/types/interfaces/schedule-options.interface.d.ts +37 -0
  134. package/dist/types/interfaces/schedule-state.interface.d.ts +24 -0
  135. package/dist/types/interfaces/schedule.interface.d.ts +20 -0
  136. package/dist/types/local-scheduling.module.d.ts +30 -0
  137. package/dist/types/local-scheduling.module.keyname.d.ts +1 -0
  138. package/dist/types/managers/local-scheduler.manager.d.ts +110 -0
  139. package/dist/types/managers/managers.d.ts +1 -0
  140. package/dist/types/models/cron-expression.model.d.ts +120 -0
  141. package/dist/types/models/models.d.ts +1 -0
  142. package/dist/types/schedules/cron.schedule.d.ts +22 -0
  143. package/dist/types/schedules/date.schedule.d.ts +17 -0
  144. package/dist/types/schedules/schedules.d.ts +2 -0
  145. package/dist/types/servers/local-scheduler.runtime-server.d.ts +24 -0
  146. package/dist/types/servers/servers.d.ts +1 -0
  147. package/dist/types/types/scheduled-task-function.type.d.ts +10 -0
  148. package/dist/types/types/types.d.ts +1 -0
  149. package/package.json +68 -0
  150. package/readme.md +307 -0
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=schedule-options.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule-options.interface.js","sourceRoot":"","sources":["../../../../src/interfaces/schedule-options.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=schedule-state.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule-state.interface.js","sourceRoot":"","sources":["../../../../src/interfaces/schedule-state.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=schedule.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule.interface.js","sourceRoot":"","sources":["../../../../src/interfaces/schedule.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,85 @@
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
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
17
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
18
+ return new (P || (P = Promise))(function (resolve, reject) {
19
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
20
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
21
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
22
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
23
+ });
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.LocalSchedulingModule = void 0;
27
+ const logging_1 = require("@pristine-ts/logging");
28
+ const core_1 = require("@pristine-ts/core");
29
+ const scheduling_1 = require("@pristine-ts/scheduling");
30
+ const local_scheduling_module_keyname_1 = require("./local-scheduling.module.keyname");
31
+ const local_scheduler_runtime_server_1 = require("./servers/local-scheduler.runtime-server");
32
+ __exportStar(require("./builders/builders"), exports);
33
+ __exportStar(require("./enums/enums"), exports);
34
+ __exportStar(require("./errors/errors"), exports);
35
+ __exportStar(require("./interfaces/interfaces"), exports);
36
+ __exportStar(require("./managers/managers"), exports);
37
+ __exportStar(require("./models/models"), exports);
38
+ __exportStar(require("./schedules/schedules"), exports);
39
+ __exportStar(require("./servers/servers"), exports);
40
+ __exportStar(require("./types/types"), exports);
41
+ __exportStar(require("./local-scheduling.module.keyname"), exports);
42
+ /**
43
+ * The local-scheduling module. Import it into your application module to make
44
+ * {@link LocalSchedulerManager} injectable and to have every {@link SchedulableInterface} you
45
+ * tag with `@tag(ServiceDefinitionTagEnum.Schedulable)` auto-registered when the scheduler
46
+ * starts.
47
+ *
48
+ * You do not have to start the scheduler yourself: {@link LocalSchedulerRuntimeServer} is
49
+ * tagged as a {@link RuntimeServerInterface}, so `pristine start` starts it (and stops it on
50
+ * shutdown, via `onShutdown` below) alongside the HTTP/gRPC servers. Resolve
51
+ * {@link LocalSchedulerManager} directly only when you need the dynamic API (adding schedules
52
+ * from a database, mutating them from controllers).
53
+ *
54
+ * It builds on `@pristine-ts/scheduling` — a {@link SchedulableInterface} is a
55
+ * {@link ScheduledTaskInterface} that also declares its schedule — and is otherwise
56
+ * platform-neutral: it depends only on core, logging, and scheduling, and registers no event
57
+ * mappers or handlers. It coexists with `@pristine-ts/aws-scheduling` and the other scheduling
58
+ * drivers — none of them interfere with the others.
59
+ */
60
+ exports.LocalSchedulingModule = {
61
+ keyname: local_scheduling_module_keyname_1.LocalSchedulingModuleKeyname,
62
+ importModules: [
63
+ core_1.CoreModule,
64
+ logging_1.LoggingModule,
65
+ scheduling_1.SchedulingModule,
66
+ ],
67
+ providerRegistrations: [],
68
+ configurationDefinitions: [],
69
+ onShutdown: (container) => __awaiter(void 0, void 0, void 0, function* () {
70
+ try {
71
+ // ── container.resolve, justified ────────────────────────────────────────
72
+ // Per CLAUDE.md: module lifecycle hook. `onShutdown` is a callback fired by the
73
+ // kernel with the container as its argument — there is no class to constructor-inject
74
+ // into. Resolving from the provided container is the framework's intended path (the
75
+ // same shape as HttpModule's onShutdown for KernelHttpServer).
76
+ const runtimeServer = container.resolve(local_scheduler_runtime_server_1.LocalSchedulerRuntimeServer);
77
+ yield runtimeServer.stop();
78
+ }
79
+ catch (_a) {
80
+ // The scheduler may not be resolvable if the container is degraded during shutdown.
81
+ // Swallow so other modules' onShutdown still run; stop() is idempotent anyway.
82
+ }
83
+ }),
84
+ };
85
+ //# sourceMappingURL=local-scheduling.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-scheduling.module.js","sourceRoot":"","sources":["../../../src/local-scheduling.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,kDAAmD;AACnD,4CAA6C;AAC7C,wDAAyD;AACzD,uFAA+E;AAC/E,6FAAqF;AAErF,sDAAoC;AACpC,gDAA8B;AAC9B,kDAAgC;AAChC,0DAAwC;AACxC,sDAAoC;AACpC,kDAAgC;AAChC,wDAAsC;AACtC,oDAAkC;AAClC,gDAA8B;AAE9B,oEAAkD;AAElD;;;;;;;;;;;;;;;;;GAiBG;AACU,QAAA,qBAAqB,GAAoB;IACpD,OAAO,EAAE,8DAA4B;IACrC,aAAa,EAAE;QACb,iBAAU;QACV,uBAAa;QACb,6BAAgB;KACjB;IACD,qBAAqB,EAAE,EAAE;IACzB,wBAAwB,EAAE,EAAE;IAC5B,UAAU,EAAE,CAAO,SAAS,EAAE,EAAE;QAC9B,IAAI,CAAC;YACH,2EAA2E;YAC3E,gFAAgF;YAChF,sFAAsF;YACtF,oFAAoF;YACpF,+DAA+D;YAC/D,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC,4DAA2B,CAAC,CAAC;YACrE,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC;QAC7B,CAAC;QAAC,WAAM,CAAC;YACP,oFAAoF;YACpF,+EAA+E;QACjF,CAAC;IACH,CAAC,CAAA;CACF,CAAC"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LocalSchedulingModuleKeyname = void 0;
4
+ exports.LocalSchedulingModuleKeyname = "pristine.local-scheduling";
5
+ //# sourceMappingURL=local-scheduling.module.keyname.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-scheduling.module.keyname.js","sourceRoot":"","sources":["../../../src/local-scheduling.module.keyname.ts"],"names":[],"mappings":";;;AAAa,QAAA,4BAA4B,GAAW,2BAA2B,CAAC"}
@@ -0,0 +1,361 @@
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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16
+ return new (P || (P = Promise))(function (resolve, reject) {
17
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
18
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
21
+ });
22
+ };
23
+ var LocalSchedulerManager_1;
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.LocalSchedulerManager = void 0;
26
+ const tsyringe_1 = require("tsyringe");
27
+ const common_1 = require("@pristine-ts/common");
28
+ const local_scheduling_module_keyname_1 = require("../local-scheduling.module.keyname");
29
+ const cron_schedule_1 = require("../schedules/cron.schedule");
30
+ const schedule_already_exists_error_1 = require("../errors/schedule-already-exists.error");
31
+ const schedule_not_found_error_1 = require("../errors/schedule-not-found.error");
32
+ /**
33
+ * In-process scheduler driver for long-running Pristine applications (an always-up server, a
34
+ * worker). Unlike {@link SchedulerManager} from `@pristine-ts/scheduling` — which runs tagged
35
+ * tasks when an external trigger (e.g. AWS EventBridge) fires — this manager owns the clock
36
+ * itself and runs each task on its own {@link ScheduleInterface} (cron, one-off date, ...)
37
+ * from inside the Node process.
38
+ *
39
+ * It offers two registration paths that share one id space and one set of timers:
40
+ *
41
+ * - **Dynamic** — schedules registered, replaced, and removed at runtime by id, which suits a
42
+ * consumer that loads user-defined schedules from a database and mutates them from HTTP
43
+ * controllers.
44
+ * - **Static** — any class tagged {@link ServiceDefinitionTagEnum.Schedulable} that implements
45
+ * {@link SchedulableInterface} is discovered via `@injectAll` and **auto-registered on
46
+ * `start()`** from the schedules it declares.
47
+ *
48
+ * **Timer strategy:** each schedule owns a single chained `setTimeout` armed for its next
49
+ * occurrence, re-armed after every fire. The delay is always recomputed from the current time
50
+ * (never accumulated), so the schedule does not drift; delays beyond the `setTimeout` maximum
51
+ * are chunked. See {@link ScheduleOptions} for the overlap and missed-fire policies.
52
+ *
53
+ * It is tagged `"LocalSchedulerInterface"` and module-scoped to the local-scheduling module,
54
+ * so it can be injected either by class or by interface token. It is a `@singleton()`: there
55
+ * is exactly one instance per process, so the code that starts it at bootstrap and the HTTP
56
+ * controllers that mutate schedules at runtime all share the same set of timers.
57
+ */
58
+ let LocalSchedulerManager = LocalSchedulerManager_1 = class LocalSchedulerManager {
59
+ /**
60
+ * @param logHandler The log handler used to report skips, task errors, and lifecycle.
61
+ * @param schedulables Every class tagged {@link ServiceDefinitionTagEnum.Schedulable}. Injected optionally, so the
62
+ * collection is simply empty when none is tagged. They are registered on `start()`.
63
+ * Defaults to `[]` so the manager can also be constructed directly (e.g. in tests)
64
+ * without wiring the collection.
65
+ */
66
+ constructor(logHandler, schedulables = []) {
67
+ this.logHandler = logHandler;
68
+ this.schedulables = schedulables;
69
+ this.states = new Map();
70
+ /** Every task invocation that has been started and not yet settled — awaited by `stop()`. */
71
+ this.inFlightInvocations = new Set();
72
+ this.started = false;
73
+ }
74
+ get isStarted() {
75
+ return this.started;
76
+ }
77
+ schedule(id, schedule, task, options) {
78
+ var _a, _b, _c;
79
+ if (this.states.has(id)) {
80
+ throw new schedule_already_exists_error_1.ScheduleAlreadyExistsError(id);
81
+ }
82
+ const state = {
83
+ id,
84
+ schedule: this.resolveSchedule(schedule),
85
+ task,
86
+ allowOverlap: (_a = options === null || options === void 0 ? void 0 : options.allowOverlap) !== null && _a !== void 0 ? _a : false,
87
+ catchUp: (_b = options === null || options === void 0 ? void 0 : options.catchUp) !== null && _b !== void 0 ? _b : false,
88
+ missedExecutionThresholdInMilliseconds: (_c = options === null || options === void 0 ? void 0 : options.missedExecutionThresholdInMilliseconds) !== null && _c !== void 0 ? _c : LocalSchedulerManager_1.DEFAULT_MISSED_EXECUTION_THRESHOLD_MS,
89
+ running: false,
90
+ };
91
+ this.states.set(id, state);
92
+ this.logHandler.debug("LocalSchedulerManager: registered a schedule.", {
93
+ extra: { id, schedule: state.schedule.toString(), started: this.started },
94
+ });
95
+ if (this.started) {
96
+ this.arm(state);
97
+ }
98
+ }
99
+ unschedule(id) {
100
+ const state = this.states.get(id);
101
+ if (state === undefined) {
102
+ return false;
103
+ }
104
+ this.clearTimer(state);
105
+ this.states.delete(id);
106
+ this.logHandler.debug("LocalSchedulerManager: removed a schedule.", { extra: { id } });
107
+ return true;
108
+ }
109
+ reschedule(id, schedule) {
110
+ const state = this.states.get(id);
111
+ if (state === undefined) {
112
+ throw new schedule_not_found_error_1.ScheduleNotFoundError(id);
113
+ }
114
+ this.clearTimer(state);
115
+ state.schedule = this.resolveSchedule(schedule);
116
+ state.armedTargetEpoch = undefined;
117
+ state.nextExecutionDate = undefined;
118
+ this.logHandler.debug("LocalSchedulerManager: rescheduled.", {
119
+ extra: { id, schedule: state.schedule.toString() },
120
+ });
121
+ if (this.started) {
122
+ this.arm(state);
123
+ }
124
+ }
125
+ has(id) {
126
+ return this.states.has(id);
127
+ }
128
+ list() {
129
+ return Array.from(this.states.values()).map((state) => ({
130
+ id: state.id,
131
+ schedule: state.schedule,
132
+ isRunning: state.running,
133
+ nextExecutionDate: state.nextExecutionDate,
134
+ }));
135
+ }
136
+ getNextExecutionDate(id) {
137
+ var _a;
138
+ const state = this.states.get(id);
139
+ if (state === undefined) {
140
+ throw new schedule_not_found_error_1.ScheduleNotFoundError(id);
141
+ }
142
+ return (_a = state.nextExecutionDate) !== null && _a !== void 0 ? _a : state.schedule.getNextExecutionDate(new Date());
143
+ }
144
+ start() {
145
+ if (this.started) {
146
+ return;
147
+ }
148
+ // Register statically-tagged tasks first (while still stopped, so they only register and
149
+ // don't arm yet), then arm everything — tagged and dynamic — in one pass.
150
+ this.registerSchedulables();
151
+ this.started = true;
152
+ this.logHandler.info("LocalSchedulerManager: starting.", { extra: { scheduleCount: this.states.size } });
153
+ for (const state of this.states.values()) {
154
+ this.arm(state);
155
+ }
156
+ }
157
+ stop() {
158
+ return __awaiter(this, void 0, void 0, function* () {
159
+ this.started = false;
160
+ for (const state of this.states.values()) {
161
+ this.clearTimer(state);
162
+ state.armedTargetEpoch = undefined;
163
+ state.nextExecutionDate = undefined;
164
+ }
165
+ this.logHandler.info("LocalSchedulerManager: stopping; awaiting in-flight tasks.", {
166
+ extra: { inFlightCount: this.inFlightInvocations.size },
167
+ });
168
+ // Timers are already cleared synchronously above, so no new fires occur. We only wait for
169
+ // invocations that were already running to settle, enabling a graceful shutdown.
170
+ yield Promise.allSettled(Array.from(this.inFlightInvocations));
171
+ });
172
+ }
173
+ /**
174
+ * Registers each statically-tagged {@link SchedulableInterface} from the schedules it
175
+ * declares. Called once by `start()`. Each task's registration id derives from its class
176
+ * name (suffixed with the schedule index when a task declares more than one schedule). A
177
+ * task whose id is already registered (a collision with a dynamic schedule, or a repeat call
178
+ * after stop→start) is skipped, and a task whose `getSchedules()` throws is logged and
179
+ * skipped — neither prevents the others, or the scheduler, from starting.
180
+ */
181
+ registerSchedulables() {
182
+ var _a, _b, _c;
183
+ for (const schedulable of this.schedulables) {
184
+ const name = (_b = (_a = schedulable.constructor) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : "Schedulable";
185
+ try {
186
+ const schedules = schedulable.getSchedules();
187
+ schedules.forEach((schedule, index) => {
188
+ const id = schedules.length > 1 ? `${name}#${index}` : name;
189
+ if (this.states.has(id)) {
190
+ this.logHandler.warning("LocalSchedulerManager: a tagged task's id is already registered; skipping it.", {
191
+ extra: { id, task: name },
192
+ });
193
+ return;
194
+ }
195
+ this.schedule(id, schedule, (eventId) => schedulable.run(eventId));
196
+ });
197
+ }
198
+ catch (error) {
199
+ this.logHandler.error("LocalSchedulerManager: failed to register a tagged task; skipping it.", {
200
+ extra: {
201
+ task: name,
202
+ error: error instanceof Error ? ((_c = error.stack) !== null && _c !== void 0 ? _c : error.message) : String(error),
203
+ },
204
+ });
205
+ }
206
+ }
207
+ }
208
+ resolveSchedule(schedule) {
209
+ // A string is shorthand for a cron schedule; constructing it validates the expression and
210
+ // propagates an InvalidCronExpressionError (HTTP 400) for malformed input.
211
+ return typeof schedule === "string" ? new cron_schedule_1.CronSchedule(schedule) : schedule;
212
+ }
213
+ /**
214
+ * Computes the next occurrence from now and arms the timer for it. Any existing timer is
215
+ * cleared first.
216
+ */
217
+ arm(state) {
218
+ this.clearTimer(state);
219
+ this.armFrom(state, Date.now());
220
+ }
221
+ /**
222
+ * Computes the next occurrence strictly after `baseEpoch` and arms the timer for it. If the
223
+ * schedule has no upcoming occurrence, it is left unarmed (a one-shot that already fired, or
224
+ * a cron that never matches).
225
+ */
226
+ armFrom(state, baseEpoch) {
227
+ const next = state.schedule.getNextExecutionDate(new Date(baseEpoch));
228
+ if (next === undefined) {
229
+ state.armedTargetEpoch = undefined;
230
+ state.nextExecutionDate = undefined;
231
+ // Not an error: a terminal schedule (e.g. an elapsed one-off date) legitimately has no
232
+ // next occurrence. It stays registered and observable via list() with no next date.
233
+ this.logHandler.debug("LocalSchedulerManager: schedule has no upcoming occurrence; leaving it unarmed.", {
234
+ extra: { id: state.id, schedule: state.schedule.toString() },
235
+ });
236
+ return;
237
+ }
238
+ state.armedTargetEpoch = next.getTime();
239
+ state.nextExecutionDate = next;
240
+ this.setChunkedTimeout(state);
241
+ }
242
+ /**
243
+ * Arms a `setTimeout` for the currently-armed target, chunked so it never exceeds the
244
+ * platform maximum. Re-computing the delay from `Date.now()` on each (re-)arm keeps the
245
+ * schedule drift-free.
246
+ */
247
+ setChunkedTimeout(state) {
248
+ const target = state.armedTargetEpoch;
249
+ if (target === undefined) {
250
+ return;
251
+ }
252
+ const delay = target - Date.now();
253
+ const chunk = Math.max(0, Math.min(delay, LocalSchedulerManager_1.MAX_TIMEOUT_DELAY));
254
+ state.timeout = setTimeout(() => this.onTimer(state), chunk);
255
+ }
256
+ /**
257
+ * Fires when a (possibly chunked) timeout elapses. If the real target is still in the future
258
+ * — because the delay was chunked — it re-arms for the remaining time; otherwise it fires
259
+ * the occurrence.
260
+ */
261
+ onTimer(state) {
262
+ state.timeout = undefined;
263
+ if (!this.started) {
264
+ return;
265
+ }
266
+ const target = state.armedTargetEpoch;
267
+ if (target === undefined) {
268
+ return;
269
+ }
270
+ // A chunked long delay: the target is still ahead, so arm the next chunk. The 1ms
271
+ // tolerance avoids a needless extra timer when we land essentially on the target.
272
+ if (target - Date.now() > 1) {
273
+ this.setChunkedTimeout(state);
274
+ return;
275
+ }
276
+ this.fire(state, target);
277
+ }
278
+ /**
279
+ * Decides whether the occurrence at `target` should run (applying the missed-fire and
280
+ * overlap policies), re-arms for the next occurrence, and executes the task if warranted.
281
+ */
282
+ fire(state, target) {
283
+ const now = Date.now();
284
+ const driftMs = now - target;
285
+ const isMissed = driftMs > state.missedExecutionThresholdInMilliseconds;
286
+ const skipBecauseMissed = isMissed && !state.catchUp;
287
+ const skipBecauseOverlap = state.running && !state.allowOverlap;
288
+ // Re-arm for the next future occurrence *before* running the task, from max(now, target):
289
+ // this guarantees monotonic progress (never re-selecting this or an earlier occurrence,
290
+ // even if the timer fired a hair early or very late) and means a long-running task never
291
+ // delays the scheduling of subsequent occurrences.
292
+ this.armFrom(state, Math.max(now, target));
293
+ if (skipBecauseMissed) {
294
+ this.logHandler.info("LocalSchedulerManager: skipped a missed occurrence.", {
295
+ extra: { id: state.id, scheduledFor: new Date(target).toISOString(), driftMs },
296
+ });
297
+ return;
298
+ }
299
+ if (skipBecauseOverlap) {
300
+ this.logHandler.warning("LocalSchedulerManager: skipped an overlapping occurrence (previous invocation still running).", {
301
+ extra: { id: state.id, scheduledFor: new Date(target).toISOString() },
302
+ });
303
+ return;
304
+ }
305
+ this.execute(state, target);
306
+ }
307
+ /**
308
+ * Runs the task, isolating any error so it can never break the scheduling loop, and tracks
309
+ * the invocation so `stop()` can await it. The task receives an `eventId` correlating logs
310
+ * to this specific occurrence.
311
+ */
312
+ execute(state, target) {
313
+ state.running = true;
314
+ const scheduledFor = new Date(target).toISOString();
315
+ const eventId = `${state.id}:${scheduledFor}`;
316
+ const invocation = (() => __awaiter(this, void 0, void 0, function* () {
317
+ var _a;
318
+ try {
319
+ yield state.task(eventId);
320
+ }
321
+ catch (error) {
322
+ this.logHandler.error("LocalSchedulerManager: a scheduled task threw; the schedule continues.", {
323
+ extra: {
324
+ id: state.id,
325
+ scheduledFor,
326
+ error: error instanceof Error ? ((_a = error.stack) !== null && _a !== void 0 ? _a : error.message) : String(error),
327
+ },
328
+ });
329
+ }
330
+ finally {
331
+ state.running = false;
332
+ }
333
+ }))();
334
+ this.inFlightInvocations.add(invocation);
335
+ invocation.finally(() => this.inFlightInvocations.delete(invocation));
336
+ }
337
+ clearTimer(state) {
338
+ if (state.timeout !== undefined) {
339
+ clearTimeout(state.timeout);
340
+ state.timeout = undefined;
341
+ }
342
+ }
343
+ };
344
+ exports.LocalSchedulerManager = LocalSchedulerManager;
345
+ /**
346
+ * The largest delay a single `setTimeout` can represent: 2^31 - 1 milliseconds (~24.8
347
+ * days). Longer waits are chunked into successive timeouts.
348
+ */
349
+ LocalSchedulerManager.MAX_TIMEOUT_DELAY = 2147483647;
350
+ /** Default value for {@link ScheduleOptions.missedExecutionThresholdInMilliseconds}. */
351
+ LocalSchedulerManager.DEFAULT_MISSED_EXECUTION_THRESHOLD_MS = 5000;
352
+ exports.LocalSchedulerManager = LocalSchedulerManager = LocalSchedulerManager_1 = __decorate([
353
+ (0, common_1.moduleScoped)(local_scheduling_module_keyname_1.LocalSchedulingModuleKeyname),
354
+ (0, common_1.tag)("LocalSchedulerInterface"),
355
+ (0, tsyringe_1.singleton)(),
356
+ (0, tsyringe_1.injectable)(),
357
+ __param(0, (0, tsyringe_1.inject)("LogHandlerInterface")),
358
+ __param(1, (0, tsyringe_1.injectAll)(common_1.ServiceDefinitionTagEnum.Schedulable, { isOptional: true })),
359
+ __metadata("design:paramtypes", [Object, Array])
360
+ ], LocalSchedulerManager);
361
+ //# sourceMappingURL=local-scheduler.manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-scheduler.manager.js","sourceRoot":"","sources":["../../../../src/managers/local-scheduler.manager.ts"],"names":[],"mappings":"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"}
@@ -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("./local-scheduler.manager"), exports);
18
+ //# sourceMappingURL=managers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managers.js","sourceRoot":"","sources":["../../../../src/managers/managers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4DAA0C"}