anbaric-state-machine 1.23.2 → 1.25.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 (34) hide show
  1. package/dist/StateMachine.d.ts +5 -2
  2. package/dist/StateMachine.d.ts.map +1 -1
  3. package/dist/StateMachine.js +38 -2
  4. package/dist/StateMachine.js.map +1 -1
  5. package/dist/actors/Human.d.ts.map +1 -1
  6. package/dist/actors/Human.js.map +1 -1
  7. package/dist/index.d.ts +5 -0
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +5 -0
  10. package/dist/index.js.map +1 -1
  11. package/dist/notifications/NotifierFactory.d.ts +7 -0
  12. package/dist/notifications/NotifierFactory.d.ts.map +1 -0
  13. package/dist/notifications/NotifierFactory.js +16 -0
  14. package/dist/notifications/NotifierFactory.js.map +1 -0
  15. package/dist/scheduling/ConsumerFactory.d.ts.map +1 -1
  16. package/dist/scheduling/ConsumerFactory.js +30 -5
  17. package/dist/scheduling/ConsumerFactory.js.map +1 -1
  18. package/dist/scheduling/InMemoryJobRunSchedulePersistence.d.ts +10 -0
  19. package/dist/scheduling/InMemoryJobRunSchedulePersistence.d.ts.map +1 -0
  20. package/dist/scheduling/InMemoryJobRunSchedulePersistence.js +29 -0
  21. package/dist/scheduling/InMemoryJobRunSchedulePersistence.js.map +1 -0
  22. package/dist/scheduling/JobRunSchedulePersistenceFactory.d.ts +6 -0
  23. package/dist/scheduling/JobRunSchedulePersistenceFactory.d.ts.map +1 -0
  24. package/dist/scheduling/JobRunSchedulePersistenceFactory.js +15 -0
  25. package/dist/scheduling/JobRunSchedulePersistenceFactory.js.map +1 -0
  26. package/dist/scheduling/JobRunScheduler.d.ts +24 -0
  27. package/dist/scheduling/JobRunScheduler.d.ts.map +1 -0
  28. package/dist/scheduling/JobRunScheduler.js +106 -0
  29. package/dist/scheduling/JobRunScheduler.js.map +1 -0
  30. package/dist/scheduling/Schedule.d.ts +16 -0
  31. package/dist/scheduling/Schedule.d.ts.map +1 -0
  32. package/dist/scheduling/Schedule.js +39 -0
  33. package/dist/scheduling/Schedule.js.map +1 -0
  34. package/package.json +3 -3
@@ -1,4 +1,4 @@
1
- import { Action, Actor, AppAware, Auditor, Job, JobPersistence, PropertyDefinition, Queue, State } from "anbaric-tsapi";
1
+ import { Action, Actor, AppAware, Auditor, Job, JobPersistence, Notifier, PropertyDefinition, Queue, State } from "anbaric-tsapi";
2
2
  declare class StateMachine implements AppAware {
3
3
  readonly workflowId: string;
4
4
  readonly states: Map<string, State>;
@@ -8,15 +8,18 @@ declare class StateMachine implements AppAware {
8
8
  private queue;
9
9
  private consumer;
10
10
  private machineActor;
11
+ private notifier;
11
12
  private auditor;
12
13
  private readonly NO_TRANSITION_REQUEUE_DELAY;
13
- constructor(workflowId: string, states: Array<State>, startState?: string, dataSchema?: Array<PropertyDefinition>, persistence?: JobPersistence, queue?: Queue, auditor?: Auditor);
14
+ constructor(workflowId: string, states: Array<State>, startState?: string, dataSchema?: Array<PropertyDefinition>, persistence?: JobPersistence, queue?: Queue, notifier?: Notifier | undefined, auditor?: Auditor);
14
15
  getAppId(): string;
15
16
  private describe;
16
17
  startJob(properties?: Map<string, any>, actor?: Actor): Promise<Job>;
17
18
  updateJob(jobId: string, properties: Map<string, any>, actor: Actor): Promise<void>;
18
19
  executeAction(jobId: string, action: Action): Promise<void>;
19
20
  private progressJob;
21
+ private notifyWaitingOn;
22
+ private failJob;
20
23
  private updateJobInternal;
21
24
  private validateProperties;
22
25
  private propertyProblem;
@@ -1 +1 @@
1
- {"version":3,"file":"StateMachine.d.ts","sourceRoot":"","sources":["../src/StateMachine.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,MAAM,EACN,KAAK,EACL,QAAQ,EACR,OAAO,EAIP,GAAG,EACH,cAAc,EACd,kBAAkB,EAClB,KAAK,EACL,KAAK,EAGR,MAAM,eAAe,CAAC;AAQvB,cAAM,YAAa,YAAW,QAAQ;IAElC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAErD,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,YAAY,CAAO;IAC3B,OAAO,CAAC,OAAO,CAAU;IAEzB,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAsB;IAElE,YAAY,UAAU,EAAG,MAAM,EAAE,MAAM,EAAG,KAAK,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,EAAG,MAAM,EAAE,UAAU,GAAG,KAAK,CAAC,kBAAkB,CAAM,EAAE,WAAW,GAAG,cAAiD,EAAE,KAAK,GAAG,KAA+B,EAAE,OAAO,GAAG,OAAmC,EAoBjR;IAED,QAAQ,IAAK,MAAM,CAElB;IAED,OAAO,CAAC,QAAQ;IAKV,QAAQ,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,GAAG,KAAyB,GAAG,OAAO,CAAC,GAAG,CAAC,CAY7F;IAEK,SAAS,CAAC,KAAK,EAAG,MAAM,EAAE,UAAU,EAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAG,KAAK,GAAI,OAAO,CAAC,IAAI,CAAC,CAO5F;IAEK,aAAa,CAAC,KAAK,EAAG,MAAM,EAAE,MAAM,EAAG,MAAM,GAAI,OAAO,CAAC,IAAI,CAAC,CAcnE;YAEa,WAAW;YA6EX,iBAAiB;IAQ/B,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,SAAS;IAIX,OAAO,IAAK,OAAO,CAAC,IAAI,CAAC,CAE9B;IAED,OAAO,CAAC,cAAc;CAIzB;AAED,OAAO,EAAE,YAAY,EAAE,CAAA"}
1
+ {"version":3,"file":"StateMachine.d.ts","sourceRoot":"","sources":["../src/StateMachine.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,MAAM,EACN,KAAK,EACL,QAAQ,EACR,OAAO,EAIP,GAAG,EACH,cAAc,EACd,QAAQ,EACR,kBAAkB,EAClB,KAAK,EACL,KAAK,EAGR,MAAM,eAAe,CAAC;AASvB,cAAM,YAAa,YAAW,QAAQ;IAElC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAErD,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,YAAY,CAAO;IAC3B,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,OAAO,CAAU;IAEzB,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAsB;IAElE,YAAY,UAAU,EAAG,MAAM,EAAE,MAAM,EAAG,KAAK,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,EAAG,MAAM,EAAE,UAAU,GAAG,KAAK,CAAC,kBAAkB,CAAM,EAAE,WAAW,GAAG,cAAiD,EAAE,KAAK,GAAG,KAA+B,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAsC,EAAE,OAAO,GAAG,OAAmC,EAqB/U;IAED,QAAQ,IAAK,MAAM,CAElB;IAED,OAAO,CAAC,QAAQ;IAKV,QAAQ,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,GAAG,KAAyB,GAAG,OAAO,CAAC,GAAG,CAAC,CAY7F;IAEK,SAAS,CAAC,KAAK,EAAG,MAAM,EAAE,UAAU,EAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAG,KAAK,GAAI,OAAO,CAAC,IAAI,CAAC,CAO5F;IAEK,aAAa,CAAC,KAAK,EAAG,MAAM,EAAE,MAAM,EAAG,MAAM,GAAI,OAAO,CAAC,IAAI,CAAC,CAcnE;YAEa,WAAW;YAwFX,eAAe;YAgBf,OAAO;YAUP,iBAAiB;IAQ/B,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,SAAS;IAIX,OAAO,IAAK,OAAO,CAAC,IAAI,CAAC,CAE9B;IAED,OAAO,CAAC,cAAc;CAIzB;AAED,OAAO,EAAE,YAAY,EAAE,CAAA"}
@@ -1,6 +1,7 @@
1
1
  import { Await, currentAppId, Job, SystemActor, WorkflowDefinition } from "anbaric-tsapi";
2
2
  import { JobPersistenceFactory } from "./persistence/JobPersistenceFactory.js";
3
3
  import { QueueFactory } from "./scheduling/QueueFactory.js";
4
+ import { NotifierFactory } from "./notifications/NotifierFactory.js";
4
5
  import { ConsumerFactory } from "./scheduling/ConsumerFactory.js";
5
6
  import { AuditorFactory } from "./auditing/AuditorFactory.js";
6
7
  import { Code } from "./actors/Code.js";
@@ -13,9 +14,10 @@ class StateMachine {
13
14
  queue;
14
15
  consumer;
15
16
  machineActor;
17
+ notifier;
16
18
  auditor;
17
19
  NO_TRANSITION_REQUEUE_DELAY = 5 * 60_000;
18
- constructor(workflowId, states, startState, dataSchema = [], persistence = JobPersistenceFactory.instance(), queue = QueueFactory.instance(), auditor = AuditorFactory.instance()) {
20
+ constructor(workflowId, states, startState, dataSchema = [], persistence = JobPersistenceFactory.instance(), queue = QueueFactory.instance(), notifier = NotifierFactory.instance(), auditor = AuditorFactory.instance()) {
19
21
  // The workflow's identity is the composite (appId, workflowId): the app
20
22
  // it is deployed in (from the environment, via getAppId()) and the
21
23
  // machine's own id, kept as separate values rather than a concatenated
@@ -26,6 +28,7 @@ class StateMachine {
26
28
  this.dataSchema = new Map(dataSchema.map(property => [property.id, property]));
27
29
  this.persistence = persistence;
28
30
  this.queue = queue;
31
+ this.notifier = notifier;
29
32
  this.machineActor = new Code(this.workflowId, "state-machine");
30
33
  this.auditor = auditor;
31
34
  this.consumer = ConsumerFactory.instance(queue);
@@ -88,13 +91,20 @@ class StateMachine {
88
91
  job.awaitMetadata = item.waitForInput(job);
89
92
  job.waitingFor = crypto.randomUUID();
90
93
  await this.persistence.save(this.machineActor, `Job ${job.id} awaiting input`, job, propertiesChanged ? job.properties : undefined);
94
+ await this.notifyWaitingOn(item, job);
91
95
  return;
92
96
  }
93
97
  if (!item.predicate(job))
94
98
  continue;
95
99
  if (!this.authorizeActor(item.actor, job))
96
100
  continue;
97
- const newProperties = await item.run(job);
101
+ let newProperties;
102
+ try {
103
+ newProperties = await item.run(job);
104
+ }
105
+ catch (error) {
106
+ return this.failJob(job, item, error);
107
+ }
98
108
  let applied = false;
99
109
  for (const [key, value] of newProperties) {
100
110
  const problem = this.propertyProblem(key, value);
@@ -138,6 +148,32 @@ class StateMachine {
138
148
  await this.persistence.save(involvedActors[0] ?? this.machineActor, `Job ${job.id} progressed automatically`, job, job.properties);
139
149
  await this.queue.schedule(job.id, this.getAppId(), this.workflowId, new Date(Date.now() + this.NO_TRANSITION_REQUEUE_DELAY));
140
150
  }
151
+ /* Told after the job is parked, so the people notified can act on it the
152
+ moment they read the message. Notifying is a side channel: a notifier
153
+ that fails must not undo a job that is already legitimately waiting, so
154
+ the failure is logged and the job left alone. */
155
+ async notifyWaitingOn(waiting, job) {
156
+ if (!this.notifier || waiting.notify.length === 0 || !job.awaitMetadata)
157
+ return;
158
+ try {
159
+ await this.notifier.notify(waiting.notify, job, job.awaitMetadata);
160
+ }
161
+ catch (error) {
162
+ const reason = error instanceof Error ? error.message : String(error);
163
+ console.error(`[${this.workflowId}] could not notify ${waiting.notify.join(", ")} that job ${job.id} is waiting: ${reason}`);
164
+ }
165
+ }
166
+ /* An action that throws used to leave the job silently stuck: the queue
167
+ message was never confirmed, so the job neither advanced nor visibly
168
+ failed. Failing it here marks the job, records why in the audit trail,
169
+ and lets the consumer confirm the message. An update that moves the job
170
+ on clears the status, so a failure is recoverable rather than terminal. */
171
+ async failJob(job, action, error) {
172
+ const reason = error instanceof Error ? error.message : String(error);
173
+ job.status = Job.Status.FAILED;
174
+ console.error(`[${this.workflowId}] action "${action.name}" threw on job ${job.id}: ${reason}`);
175
+ await this.persistence.save(action.actor, `Action "${action.name}" failed on job ${job.id}: ${reason}`, job);
176
+ }
141
177
  async updateJobInternal(actor, message, job, newProperties, newState) {
142
178
  if (newProperties && !this.validateProperties(newProperties, false))
143
179
  throw new Error("Invalid properties");
@@ -1 +1 @@
1
- {"version":3,"file":"StateMachine.js","sourceRoot":"","sources":["../src/StateMachine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StateMachine.js","sourceRoot":"","sources":["../src/StateMachine.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Human.d.ts","sourceRoot":"","sources":["../../src/actors/Human.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAC,KAAK,EAAE,eAAe,EAAC,MAAM,eAAe,CAAC;AAIrD,cAAM,KAAM,YAAW,KAAK;IAExB,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IACjC,QAAQ,CAAC,EAAE,EAAG,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAE/B,YAAY,EAAE,EAAG,MAAM,EAAE,KAAK,EAAG,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,EAGtD;IAOD,OAAa,WAAW,CAAC,MAAM,EAAG,MAAM,GAAG,eAAe,EACjC,QAAQ,GAAG,eAAmD,GAAI,OAAO,CAAC,KAAK,CAAC,CAKxG;CAEJ;AAED,OAAO,EAAE,KAAK,EAAE,CAAA"}
1
+ {"version":3,"file":"Human.d.ts","sourceRoot":"","sources":["../../src/actors/Human.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAC,KAAK,EAAE,eAAe,EAAC,MAAM,eAAe,CAAC;AAIrD,cAAM,KAAM,YAAW,KAAK;IAExB,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IACjC,QAAQ,CAAC,EAAE,EAAG,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAE/B,YAAY,EAAE,EAAG,MAAM,EAAE,KAAK,EAAG,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,EAGtD;IAOD,OAAa,WAAW,CAAC,MAAM,EAAG,MAAM,GAAG,eAAe,EACjC,QAAQ,GAAG,eAAmD,GAAI,OAAO,CAAC,KAAK,CAAC,CAMxG;CAEJ;AAED,OAAO,EAAE,KAAK,EAAE,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"Human.js","sourceRoot":"","sources":["../../src/actors/Human.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,sBAAsB,EAAC,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAC,aAAa,EAAC,MAAM,8BAA8B,CAAC;AAE3D,MAAM,KAAK;IAEE,IAAI,GAAG,OAAgB,CAAC;IACxB,EAAE,CAAU;IACZ,KAAK,CAAiB;IAE/B,YAAY,EAAW,EAAE,KAA8B;QACnD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7D,CAAC;IAED;;;;gBAIY;IACZ,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAiC,EACjC,QAAQ,GAAqB,sBAAsB,CAAC,QAAQ,EAAE;QACnF,MAAM,KAAK,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC1E,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAClE,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC/D,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;CAEJ;AAED,OAAO,EAAE,KAAK,EAAE,CAAA"}
1
+ {"version":3,"file":"Human.js","sourceRoot":"","sources":["../../src/actors/Human.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,sBAAsB,EAAC,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAC,aAAa,EAAC,MAAM,8BAA8B,CAAC;AAE3D,MAAM,KAAK;IAEE,IAAI,GAAG,OAAgB,CAAC;IACxB,EAAE,CAAU;IACZ,KAAK,CAAiB;IAE/B,YAAY,EAAW,EAAE,KAA8B;QACnD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7D,CAAC;IAED;;;;gBAIY;IACZ,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAiC,EACjC,QAAQ,GAAqB,sBAAsB,CAAC,QAAQ,EAAE;QAEnF,MAAM,KAAK,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC1E,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAClE,IAAI,CAAE,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAChE,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;CAEJ;AAED,OAAO,EAAE,KAAK,EAAE,CAAA"}
package/dist/index.d.ts CHANGED
@@ -11,6 +11,11 @@ export * from "./scheduling/InMemoryQueue.js";
11
11
  export * from "./scheduling/PullConsumer.js";
12
12
  export * from "./scheduling/ConsumerFactory.js";
13
13
  export * from "./scheduling/QueueFactory.js";
14
+ export * from "./notifications/NotifierFactory.js";
15
+ export * from "./scheduling/Schedule.js";
16
+ export * from "./scheduling/JobRunScheduler.js";
17
+ export * from "./scheduling/InMemoryJobRunSchedulePersistence.js";
18
+ export * from "./scheduling/JobRunSchedulePersistenceFactory.js";
14
19
  export * from "./sessions/InMemorySessionResolver.js";
15
20
  export * from "./sessions/SessionResolverFactory.js";
16
21
  export * from "./sessions/sessionCookie.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,qCAAqC,CAAC;AACpD,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yCAAyC,CAAC;AACxD,cAAc,wCAAwC,CAAC;AACvD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uCAAuC,CAAC;AACtD,cAAc,sCAAsC,CAAC;AACrD,cAAc,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,qCAAqC,CAAC;AACpD,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yCAAyC,CAAC;AACxD,cAAc,wCAAwC,CAAC;AACvD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oCAAoC,CAAC;AACnD,cAAc,0BAA0B,CAAC;AACzC,cAAc,iCAAiC,CAAC;AAChD,cAAc,mDAAmD,CAAC;AAClE,cAAc,kDAAkD,CAAC;AACjE,cAAc,uCAAuC,CAAC;AACtD,cAAc,sCAAsC,CAAC;AACrD,cAAc,6BAA6B,CAAC"}
package/dist/index.js CHANGED
@@ -11,6 +11,11 @@ export * from "./scheduling/InMemoryQueue.js";
11
11
  export * from "./scheduling/PullConsumer.js";
12
12
  export * from "./scheduling/ConsumerFactory.js";
13
13
  export * from "./scheduling/QueueFactory.js";
14
+ export * from "./notifications/NotifierFactory.js";
15
+ export * from "./scheduling/Schedule.js";
16
+ export * from "./scheduling/JobRunScheduler.js";
17
+ export * from "./scheduling/InMemoryJobRunSchedulePersistence.js";
18
+ export * from "./scheduling/JobRunSchedulePersistenceFactory.js";
14
19
  export * from "./sessions/InMemorySessionResolver.js";
15
20
  export * from "./sessions/SessionResolverFactory.js";
16
21
  export * from "./sessions/sessionCookie.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,qCAAqC,CAAC;AACpD,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yCAAyC,CAAC;AACxD,cAAc,wCAAwC,CAAC;AACvD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uCAAuC,CAAC;AACtD,cAAc,sCAAsC,CAAC;AACrD,cAAc,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,qCAAqC,CAAC;AACpD,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yCAAyC,CAAC;AACxD,cAAc,wCAAwC,CAAC;AACvD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oCAAoC,CAAC;AACnD,cAAc,0BAA0B,CAAC;AACzC,cAAc,iCAAiC,CAAC;AAChD,cAAc,mDAAmD,CAAC;AAClE,cAAc,kDAAkD,CAAC;AACjE,cAAc,uCAAuC,CAAC;AACtD,cAAc,sCAAsC,CAAC;AACrD,cAAc,6BAA6B,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { Notifier } from "anbaric-tsapi";
2
+ declare const NotifierFactory: {
3
+ use(notifier: Notifier | undefined): void;
4
+ instance(): Notifier | undefined;
5
+ };
6
+ export { NotifierFactory };
7
+ //# sourceMappingURL=NotifierFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotifierFactory.d.ts","sourceRoot":"","sources":["../../src/notifications/NotifierFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAC;AAUvC,QAAA,MAAM,eAAe;IAEjB,GAAG,WAAY,QAAQ,GAAG,SAAS,GAAI,IAAI;IAI3C,QAAQ,IAAK,QAAQ,GAAG,SAAS;CAIpC,CAAA;AAED,OAAO,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,16 @@
1
+ /* Unlike the other factories there is no local implementation to fall back on:
2
+ nothing sensible can be delivered from a laptop, so running outside a
3
+ platform yields undefined and a state machine simply doesn't notify. A host
4
+ that can deliver registers one during start-up, before any state machine is
5
+ constructed, and every machine built afterwards picks it up. */
6
+ let registered;
7
+ const NotifierFactory = {
8
+ use(notifier) {
9
+ registered = notifier;
10
+ },
11
+ instance() {
12
+ return registered;
13
+ },
14
+ };
15
+ export { NotifierFactory };
16
+ //# sourceMappingURL=NotifierFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotifierFactory.js","sourceRoot":"","sources":["../../src/notifications/NotifierFactory.ts"],"names":[],"mappings":"AAEA;;;;kEAIkE;AAElE,IAAI,UAAiC,CAAC;AAEtC,MAAM,eAAe,GAAG;IAEpB,GAAG,CAAC,QAA+B;QAC/B,UAAU,GAAG,QAAQ,CAAC;IAC1B,CAAC;IAED,QAAQ;QACJ,OAAO,UAAU,CAAC;IACtB,CAAC;CAEJ,CAAA;AAED,OAAO,EAAE,eAAe,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ConsumerFactory.d.ts","sourceRoot":"","sources":["../../src/scheduling/ConsumerFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAW,KAAK,EAAC,MAAM,eAAe,CAAC;AAIvD,QAAA,MAAM,eAAe;IACjB,QAAQ,QAAS,KAAK,GAAI,QAAQ;CAOrC,CAAA;AAED,OAAO,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"ConsumerFactory.d.ts","sourceRoot":"","sources":["../../src/scheduling/ConsumerFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAW,KAAK,EAAC,MAAM,eAAe,CAAC;AAwBvD,QAAA,MAAM,eAAe;IAEjB,QAAQ,QAAS,KAAK,GAAI,QAAQ;CAmBrC,CAAA;AAED,OAAO,EAAE,eAAe,EAAE,CAAC"}
@@ -1,15 +1,40 @@
1
1
  import { Dequeue } from "anbaric-tsapi";
2
2
  import { PushConsumer } from "anbaric-impl-cloud";
3
3
  import { PullConsumer } from "./PullConsumer.js";
4
+ /* Consumers are shared rather than made per state machine. A push consumer
5
+ binds a port, so giving every machine its own meant the second machine in a
6
+ deployed app died on EADDRINUSE - an app could only ever have one machine.
7
+ Both consumers already key their subscribers by (appId, workflowId), so one
8
+ shared consumer dispatches each message to the right machine.
9
+
10
+ Neither is shared globally, because a consumer is only interchangeable with
11
+ another that talks to the same place. Pull consumers are shared per queue: a
12
+ machine built with its own queue still needs that queue drained, and
13
+ QueueFactory hands out a separate in-memory queue on every call. Push
14
+ consumers are shared per platform, since a consumer registers its callback
15
+ URL with one platform and confirms messages back to it. A process talks to a
16
+ single platform, so in a deployed app that is one consumer on one port. */
17
+ const pullConsumers = new WeakMap();
18
+ const pushConsumers = new Map();
19
+ const platform = () => process.env.ANBARIC_CLOUD_URL ?? "";
4
20
  const ConsumerFactory = {
5
21
  instance(queue) {
6
22
  if (Dequeue.supports(queue)) {
7
- return new PullConsumer(queue);
23
+ const existing = pullConsumers.get(queue);
24
+ if (existing)
25
+ return existing;
26
+ const consumer = new PullConsumer(queue);
27
+ pullConsumers.set(queue, consumer);
28
+ return consumer;
8
29
  }
9
- else {
10
- return new PushConsumer();
11
- }
12
- }
30
+ const platformUrl = platform();
31
+ const existing = pushConsumers.get(platformUrl);
32
+ if (existing)
33
+ return existing;
34
+ const consumer = new PushConsumer();
35
+ pushConsumers.set(platformUrl, consumer);
36
+ return consumer;
37
+ },
13
38
  };
14
39
  export { ConsumerFactory };
15
40
  //# sourceMappingURL=ConsumerFactory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConsumerFactory.js","sourceRoot":"","sources":["../../src/scheduling/ConsumerFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,OAAO,EAAQ,MAAM,eAAe,CAAC;AACvD,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAC,YAAY,EAAC,MAAM,mBAAmB,CAAC;AAE/C,MAAM,eAAe,GAAG;IACpB,QAAQ,CAAC,KAAa;QAClB,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACJ,OAAO,IAAI,YAAY,EAAE,CAAC;QAC9B,CAAC;IACL,CAAC;CACJ,CAAA;AAED,OAAO,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"ConsumerFactory.js","sourceRoot":"","sources":["../../src/scheduling/ConsumerFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,OAAO,EAAQ,MAAM,eAAe,CAAC;AACvD,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAC,YAAY,EAAC,MAAM,mBAAmB,CAAC;AAE/C;;;;;;;;;;;;6EAY6E;AAE7E,MAAM,aAAa,GAAG,IAAI,OAAO,EAAyB,CAAC;AAE3D,MAAM,aAAa,GAAG,IAAI,GAAG,EAAwB,CAAC;AAEtD,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC;AAE3D,MAAM,eAAe,GAAG;IAEpB,QAAQ,CAAC,KAAa;QAClB,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC1C,IAAI,QAAQ;gBAAE,OAAO,QAAQ,CAAC;YAE9B,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;YACzC,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACnC,OAAO,QAAQ,CAAC;QACpB,CAAC;QAED,MAAM,WAAW,GAAG,QAAQ,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAChD,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAE9B,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;QACpC,aAAa,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACzC,OAAO,QAAQ,CAAC;IACpB,CAAC;CAEJ,CAAA;AAED,OAAO,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { JobRunSchedulePersistence, ScheduledRun } from "anbaric-tsapi";
2
+ declare class InMemoryJobRunSchedulePersistence implements JobRunSchedulePersistence {
3
+ private runs;
4
+ highWaterMark(appId: string, workflowId: string): Promise<Date | undefined>;
5
+ plan(runs: Array<ScheduledRun>): Promise<void>;
6
+ claimDue(at: Date): Promise<Array<ScheduledRun>>;
7
+ private alreadyPlanned;
8
+ }
9
+ export { InMemoryJobRunSchedulePersistence };
10
+ //# sourceMappingURL=InMemoryJobRunSchedulePersistence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InMemoryJobRunSchedulePersistence.d.ts","sourceRoot":"","sources":["../../src/scheduling/InMemoryJobRunSchedulePersistence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,yBAAyB,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AAItE,cAAM,iCAAkC,YAAW,yBAAyB;IAExE,OAAO,CAAC,IAAI,CAA0B;IAEhC,aAAa,CAAC,KAAK,EAAG,MAAM,EAAE,UAAU,EAAG,MAAM,GAAI,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAKnF;IAEK,IAAI,CAAC,IAAI,EAAG,KAAK,CAAC,YAAY,CAAC,GAAI,OAAO,CAAC,IAAI,CAAC,CAKrD;IAEK,QAAQ,CAAC,EAAE,EAAG,IAAI,GAAI,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAIvD;IAED,OAAO,CAAC,cAAc;CAOzB;AAED,OAAO,EAAE,iCAAiC,EAAE,CAAC"}
@@ -0,0 +1,29 @@
1
+ class InMemoryJobRunSchedulePersistence {
2
+ runs = [];
3
+ async highWaterMark(appId, workflowId) {
4
+ const times = this.runs
5
+ .filter(run => run.appId === appId && run.workflowId === workflowId)
6
+ .map(run => run.runAt.getTime());
7
+ return times.length === 0 ? undefined : new Date(Math.max(...times));
8
+ }
9
+ async plan(runs) {
10
+ for (const run of runs) {
11
+ if (this.alreadyPlanned(run))
12
+ continue;
13
+ this.runs.push({ ...run, claimed: false });
14
+ }
15
+ }
16
+ async claimDue(at) {
17
+ const due = this.runs.filter(run => !run.claimed && run.runAt.getTime() <= at.getTime());
18
+ for (const run of due)
19
+ run.claimed = true;
20
+ return due.map(({ appId, workflowId, runAt }) => ({ appId, workflowId, runAt }));
21
+ }
22
+ alreadyPlanned(run) {
23
+ return this.runs.some(planned => planned.appId === run.appId
24
+ && planned.workflowId === run.workflowId
25
+ && planned.runAt.getTime() === run.runAt.getTime());
26
+ }
27
+ }
28
+ export { InMemoryJobRunSchedulePersistence };
29
+ //# sourceMappingURL=InMemoryJobRunSchedulePersistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InMemoryJobRunSchedulePersistence.js","sourceRoot":"","sources":["../../src/scheduling/InMemoryJobRunSchedulePersistence.ts"],"names":[],"mappings":"AAIA,MAAM,iCAAiC;IAE3B,IAAI,GAAuB,EAAE,CAAC;IAEtC,KAAK,CAAC,aAAa,CAAC,KAAc,EAAE,UAAmB;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI;aAClB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK,IAAI,GAAG,CAAC,UAAU,KAAK,UAAU,CAAC;aACnE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACrC,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAA0B;QACjC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;gBAAE,SAAS;YACvC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAS;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QACzF,KAAK,MAAM,GAAG,IAAI,GAAG;YAAE,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;QAC1C,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACrF,CAAC;IAEO,cAAc,CAAC,GAAkB;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAC5B,OAAO,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK;eACxB,OAAO,CAAC,UAAU,KAAK,GAAG,CAAC,UAAU;eACrC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5D,CAAC;CAEJ;AAED,OAAO,EAAE,iCAAiC,EAAE,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { JobRunSchedulePersistence } from "anbaric-tsapi";
2
+ declare const JobRunSchedulePersistenceFactory: {
3
+ instance(): JobRunSchedulePersistence;
4
+ };
5
+ export { JobRunSchedulePersistenceFactory };
6
+ //# sourceMappingURL=JobRunSchedulePersistenceFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JobRunSchedulePersistenceFactory.d.ts","sourceRoot":"","sources":["../../src/scheduling/JobRunSchedulePersistenceFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,yBAAyB,EAAC,MAAM,eAAe,CAAC;AAIxD,QAAA,MAAM,gCAAgC;IAClC,QAAQ,IAAK,yBAAyB;CASzC,CAAA;AAED,OAAO,EAAE,gCAAgC,EAAE,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { CloudJobRunSchedulePersistence } from "anbaric-impl-cloud";
2
+ import { InMemoryJobRunSchedulePersistence } from "./InMemoryJobRunSchedulePersistence.js";
3
+ const JobRunSchedulePersistenceFactory = {
4
+ instance() {
5
+ switch (process.env.ANBARIC_JOB_RUN_SCHEDULE_PERSISTENCE_TYPE) {
6
+ case "cloud":
7
+ return new CloudJobRunSchedulePersistence();
8
+ case "memory":
9
+ default:
10
+ return new InMemoryJobRunSchedulePersistence();
11
+ }
12
+ }
13
+ };
14
+ export { JobRunSchedulePersistenceFactory };
15
+ //# sourceMappingURL=JobRunSchedulePersistenceFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JobRunSchedulePersistenceFactory.js","sourceRoot":"","sources":["../../src/scheduling/JobRunSchedulePersistenceFactory.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,8BAA8B,EAAC,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAC,iCAAiC,EAAC,MAAM,wCAAwC,CAAC;AAEzF,MAAM,gCAAgC,GAAG;IACrC,QAAQ;QACJ,QAAQ,OAAO,CAAC,GAAG,CAAC,yCAAyC,EAAE,CAAC;YAC5D,KAAK,OAAO;gBACR,OAAO,IAAI,8BAA8B,EAAE,CAAC;YAChD,KAAK,QAAQ,CAAC;YACd;gBACI,OAAO,IAAI,iCAAiC,EAAE,CAAC;QACvD,CAAC;IACL,CAAC;CACJ,CAAA;AAED,OAAO,EAAE,gCAAgC,EAAE,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { JobRunSchedulePersistence } from "anbaric-tsapi";
2
+ import { StateMachine } from "../StateMachine.js";
3
+ import { Schedule } from "./Schedule.js";
4
+ declare class JobRunScheduler {
5
+ private persistence;
6
+ private static singleton?;
7
+ private machines;
8
+ private ticker?;
9
+ private ticking;
10
+ constructor(persistence?: JobRunSchedulePersistence);
11
+ static instance(): JobRunScheduler;
12
+ schedule(machine: StateMachine, at: Schedule, lookaheadMs?: number, randomRunOffsetMs?: [number, number]): void;
13
+ tick(now?: Date): Promise<void>;
14
+ cleanUp(): Promise<void>;
15
+ private start;
16
+ private tickOnce;
17
+ private planAhead;
18
+ private startDue;
19
+ private withOffset;
20
+ private propertiesFor;
21
+ private key;
22
+ }
23
+ export { JobRunScheduler };
24
+ //# sourceMappingURL=JobRunScheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JobRunScheduler.d.ts","sourceRoot":"","sources":["../../src/scheduling/JobRunScheduler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,yBAAyB,EAAe,MAAM,eAAe,CAAC;AACtE,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAC;AAuBvC,cAAM,eAAe;IAQL,OAAO,CAAC,WAAW;IAN/B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAmB;IAE5C,OAAO,CAAC,QAAQ,CAAuC;IACvD,OAAO,CAAC,MAAM,CAAC,CAAkC;IACjD,OAAO,CAAC,OAAO,CAAS;IAExB,YAAoB,WAAW,GAAG,yBAAuE,EAAI;IAE7G,MAAM,CAAC,QAAQ,IAAK,eAAe,CAGlC;IAED,QAAQ,CAAC,OAAO,EAAG,YAAY,EAAE,EAAE,EAAG,QAAQ,EAAE,WAAW,GAAG,MAA6B,EAAE,iBAAiB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAyB,GAAI,IAAI,CAIhK;IAGK,IAAI,CAAC,GAAG,GAAG,IAAiB,GAAI,OAAO,CAAC,IAAI,CAAC,CAGlD;IAEK,OAAO,IAAK,OAAO,CAAC,IAAI,CAAC,CAI9B;IAED,OAAO,CAAC,KAAK;YAOC,QAAQ;YAYR,SAAS;YAkBT,QAAQ;IAWtB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,GAAG;CAId;AAED,OAAO,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,106 @@
1
+ import { JobRunSchedulePersistenceFactory } from "./JobRunSchedulePersistenceFactory.js";
2
+ const TICK_INTERVAL_MS = 1000;
3
+ const DEFAULT_LOOKAHEAD_MS = 1000 * 60 * 60 * 24;
4
+ const DEFAULT_RUN_OFFSET_MS = [0, 1000 * 60 * 2];
5
+ /* Starts jobs on a timetable. Runs are planned ahead of time and stored, so
6
+ the plan survives a restart and a machine that was down does not silently
7
+ skip its runs; each tick plans further ahead and starts whatever has come
8
+ due. Planning and starting are separate on purpose - a run is a record long
9
+ before it is a job.
10
+
11
+ How safely two schedulers can share a plan is the persistence's business:
12
+ the in-memory one claims within a single process, while the platform-backed
13
+ one claims atomically, so a deployed app can run several instances and each
14
+ due run still starts exactly once. */
15
+ class JobRunScheduler {
16
+ persistence;
17
+ static singleton;
18
+ machines = new Map();
19
+ ticker;
20
+ ticking = false;
21
+ constructor(persistence = JobRunSchedulePersistenceFactory.instance()) {
22
+ this.persistence = persistence;
23
+ }
24
+ static instance() {
25
+ if (!JobRunScheduler.singleton)
26
+ JobRunScheduler.singleton = new JobRunScheduler();
27
+ return JobRunScheduler.singleton;
28
+ }
29
+ schedule(machine, at, lookaheadMs = DEFAULT_LOOKAHEAD_MS, randomRunOffsetMs = DEFAULT_RUN_OFFSET_MS) {
30
+ this.machines.set(this.key(machine.getAppId(), machine.workflowId), { machine, schedule: at, lookaheadMs, randomRunOffsetMs });
31
+ this.start();
32
+ }
33
+ // Plans and starts everything owed as at `now`, without waiting for a tick.
34
+ async tick(now = new Date()) {
35
+ for (const scheduled of this.machines.values())
36
+ await this.planAhead(scheduled, now);
37
+ await this.startDue(now);
38
+ }
39
+ async cleanUp() {
40
+ if (this.ticker)
41
+ clearInterval(this.ticker);
42
+ this.ticker = undefined;
43
+ this.machines.clear();
44
+ }
45
+ start() {
46
+ if (this.ticker)
47
+ return;
48
+ this.ticker = setInterval(() => void this.tickOnce(), TICK_INTERVAL_MS);
49
+ // Scheduling alone should not hold a process open.
50
+ this.ticker.unref?.();
51
+ }
52
+ async tickOnce() {
53
+ if (this.ticking)
54
+ return;
55
+ this.ticking = true;
56
+ try {
57
+ await this.tick();
58
+ }
59
+ catch {
60
+ // A failing tick must not kill the timer; the next one retries.
61
+ }
62
+ finally {
63
+ this.ticking = false;
64
+ }
65
+ }
66
+ async planAhead(scheduled, now) {
67
+ const appId = scheduled.machine.getAppId();
68
+ const workflowId = scheduled.machine.workflowId;
69
+ const planned = await this.persistence.highWaterMark(appId, workflowId);
70
+ const from = planned && planned.getTime() > now.getTime() ? planned : now;
71
+ const to = new Date(now.getTime() + scheduled.lookaheadMs);
72
+ if (to.getTime() <= from.getTime())
73
+ return;
74
+ const runs = scheduled.schedule.getRuns(from, to).map(runAt => ({
75
+ appId,
76
+ workflowId,
77
+ runAt: this.withOffset(runAt, scheduled.randomRunOffsetMs),
78
+ }));
79
+ if (runs.length > 0)
80
+ await this.persistence.plan(runs);
81
+ }
82
+ async startDue(now) {
83
+ for (const run of await this.persistence.claimDue(now)) {
84
+ const scheduled = this.machines.get(this.key(run.appId, run.workflowId));
85
+ if (!scheduled)
86
+ continue;
87
+ await scheduled.machine.startJob(this.propertiesFor(run));
88
+ }
89
+ }
90
+ // Spreads runs that would otherwise all fire on the same second. Applied
91
+ // when the run is planned, not when it starts, so the time that was stored
92
+ // is the time it actually runs.
93
+ withOffset(runAt, [lowest, highest]) {
94
+ if (highest <= lowest)
95
+ return runAt;
96
+ return new Date(runAt.getTime() + Math.round(Math.random() * (highest - lowest)) + lowest);
97
+ }
98
+ propertiesFor(run) {
99
+ return new Map([["scheduledFor", run.runAt.toISOString()]]);
100
+ }
101
+ key(appId, workflowId) {
102
+ return JSON.stringify([appId, workflowId]);
103
+ }
104
+ }
105
+ export { JobRunScheduler };
106
+ //# sourceMappingURL=JobRunScheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JobRunScheduler.js","sourceRoot":"","sources":["../../src/scheduling/JobRunScheduler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ type TimeOfDay = {
2
+ hours: number;
3
+ minutes: number;
4
+ };
5
+ declare class Schedule {
6
+ private dayTest;
7
+ private times;
8
+ constructor(dayTest: (date: Date) => boolean, times: Array<TimeOfDay>);
9
+ getRuns(from: Date, to: Date): Array<Date>;
10
+ static daysOfWeek(days: Array<number>): (date: Date) => boolean;
11
+ static daysOfMonth(days: Array<number>): (date: Date) => boolean;
12
+ static everyDay(): (_date: Date) => boolean;
13
+ }
14
+ export { Schedule };
15
+ export type { TimeOfDay };
16
+ //# sourceMappingURL=Schedule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Schedule.d.ts","sourceRoot":"","sources":["../../src/scheduling/Schedule.ts"],"names":[],"mappings":"AAAA,KAAK,SAAS,GAAG;IAAE,KAAK,EAAG,MAAM,CAAC;IAAC,OAAO,EAAG,MAAM,CAAA;CAAE,CAAC;AAKtD,cAAM,QAAQ;IAEE,OAAO,CAAC,OAAO;IAA6B,OAAO,CAAC,KAAK;IAArE,YAAoB,OAAO,EAAG,CAAC,IAAI,EAAG,IAAI,KAAK,OAAO,EAAU,KAAK,EAAG,KAAK,CAAC,SAAS,CAAC,EAAI;IAG5F,OAAO,CAAC,IAAI,EAAG,IAAI,EAAE,EAAE,EAAG,IAAI,GAAI,KAAK,CAAC,IAAI,CAAC,CAiB5C;IAED,MAAM,CAAC,UAAU,CAAC,IAAI,EAAG,KAAK,CAAC,MAAM,CAAC,UACnB,IAAI,aACtB;IAED,MAAM,CAAC,WAAW,CAAC,IAAI,EAAG,KAAK,CAAC,MAAM,CAAC,UACpB,IAAI,aACtB;IAED,MAAM,CAAC,QAAQ,YACK,IAAI,aACvB;CAEJ;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC;AACpB,YAAY,EAAE,SAAS,EAAE,CAAC"}
@@ -0,0 +1,39 @@
1
+ /* Which days a machine runs on and at what times. The day test and the times
2
+ are separate so "weekdays at 09:00 and 17:00" and "the 1st of the month at
3
+ midnight" are the same shape. */
4
+ class Schedule {
5
+ dayTest;
6
+ times;
7
+ constructor(dayTest, times) {
8
+ this.dayTest = dayTest;
9
+ this.times = times;
10
+ }
11
+ // Runs strictly after `from` and up to and including `to`, in order.
12
+ getRuns(from, to) {
13
+ const runs = [];
14
+ const day = new Date(from);
15
+ day.setHours(0, 0, 0, 0);
16
+ for (; day.getTime() <= to.getTime(); day.setDate(day.getDate() + 1)) {
17
+ if (!this.dayTest(day))
18
+ continue;
19
+ for (const time of this.times) {
20
+ const run = new Date(day);
21
+ run.setHours(time.hours, time.minutes, 0, 0);
22
+ if (run.getTime() > from.getTime() && run.getTime() <= to.getTime())
23
+ runs.push(run);
24
+ }
25
+ }
26
+ return runs.sort((left, right) => left.getTime() - right.getTime());
27
+ }
28
+ static daysOfWeek(days) {
29
+ return (date) => days.includes(date.getDay());
30
+ }
31
+ static daysOfMonth(days) {
32
+ return (date) => days.includes(date.getDate());
33
+ }
34
+ static everyDay() {
35
+ return (_date) => true;
36
+ }
37
+ }
38
+ export { Schedule };
39
+ //# sourceMappingURL=Schedule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Schedule.js","sourceRoot":"","sources":["../../src/scheduling/Schedule.ts"],"names":[],"mappings":"AAEA;;mCAEmC;AACnC,MAAM,QAAQ;IAEU,OAAO;IAAqC,KAAK;IAArE,YAAoB,OAAkC,EAAU,KAAwB;uBAApE,OAAO;qBAAqC,KAAK;IAAsB,CAAC;IAE5F,qEAAqE;IACrE,OAAO,CAAC,IAAW,EAAE,EAAS;QAC1B,MAAM,IAAI,GAAiB,EAAE,CAAC;QAE9B,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAEzB,OAAO,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;YACnE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;gBAAE,SAAS;YAEjC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC5B,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC1B,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC7C,IAAI,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE;oBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACxF,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,IAAoB;QAClC,OAAO,CAAC,IAAW,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAAoB;QACnC,OAAO,CAAC,IAAW,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,CAAC,QAAQ;QACX,OAAO,CAAC,KAAY,EAAE,EAAE,CAAC,IAAI,CAAC;IAClC,CAAC;CAEJ;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "anbaric-state-machine",
3
- "version": "1.23.2",
3
+ "version": "1.25.0",
4
4
  "description": "This is the state machine library that one can use to add state management to an application. It will, by default, be locally runnable but can deployed to the Anbaric Cloud via the CLI",
5
5
  "license": "MIT",
6
6
  "author": "chris@anbaric.ai",
@@ -24,8 +24,8 @@
24
24
  "typescript": "^7.0.2"
25
25
  },
26
26
  "dependencies": {
27
- "anbaric-impl-cloud": "^1.23.2",
28
- "anbaric-tsapi": "^1.23.2"
27
+ "anbaric-impl-cloud": "^1.25.0",
28
+ "anbaric-tsapi": "^1.25.0"
29
29
  },
30
30
  "files": [
31
31
  "dist"