@xyo-network/sentinel-memory 2.89.0 → 2.89.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 (35) hide show
  1. package/dist/browser/MemorySentinel.d.cts +1 -1
  2. package/dist/browser/MemorySentinel.d.cts.map +1 -1
  3. package/dist/browser/MemorySentinel.d.mts +1 -1
  4. package/dist/browser/MemorySentinel.d.mts.map +1 -1
  5. package/dist/browser/MemorySentinel.d.ts +1 -1
  6. package/dist/browser/MemorySentinel.d.ts.map +1 -1
  7. package/dist/browser/SentinelRunner.d.cts +2 -2
  8. package/dist/browser/SentinelRunner.d.cts.map +1 -1
  9. package/dist/browser/SentinelRunner.d.mts +2 -2
  10. package/dist/browser/SentinelRunner.d.mts.map +1 -1
  11. package/dist/browser/SentinelRunner.d.ts +2 -2
  12. package/dist/browser/SentinelRunner.d.ts.map +1 -1
  13. package/dist/browser/index.cjs +65 -24
  14. package/dist/browser/index.cjs.map +1 -1
  15. package/dist/browser/index.js +65 -24
  16. package/dist/browser/index.js.map +1 -1
  17. package/dist/node/MemorySentinel.d.cts +1 -1
  18. package/dist/node/MemorySentinel.d.cts.map +1 -1
  19. package/dist/node/MemorySentinel.d.mts +1 -1
  20. package/dist/node/MemorySentinel.d.mts.map +1 -1
  21. package/dist/node/MemorySentinel.d.ts +1 -1
  22. package/dist/node/MemorySentinel.d.ts.map +1 -1
  23. package/dist/node/SentinelRunner.d.cts +2 -2
  24. package/dist/node/SentinelRunner.d.cts.map +1 -1
  25. package/dist/node/SentinelRunner.d.mts +2 -2
  26. package/dist/node/SentinelRunner.d.mts.map +1 -1
  27. package/dist/node/SentinelRunner.d.ts +2 -2
  28. package/dist/node/SentinelRunner.d.ts.map +1 -1
  29. package/dist/node/index.cjs +65 -24
  30. package/dist/node/index.cjs.map +1 -1
  31. package/dist/node/index.js +65 -24
  32. package/dist/node/index.js.map +1 -1
  33. package/package.json +15 -15
  34. package/src/MemorySentinel.ts +27 -19
  35. package/src/SentinelRunner.ts +4 -6
@@ -9,8 +9,8 @@ export declare class MemorySentinel<TParams extends MemorySentinelParams = Memor
9
9
  reportHandler(inPayloads?: Payload[]): Promise<Payload[]>;
10
10
  start(timeout?: number | undefined): Promise<boolean>;
11
11
  stop(timeout?: number | undefined): Promise<boolean>;
12
- private generateResults;
13
12
  private inputAddresses;
14
13
  private processPreviousResults;
14
+ private runJob;
15
15
  }
16
16
  //# sourceMappingURL=MemorySentinel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MemorySentinel.d.ts","sourceRoot":"","sources":["../../src/MemorySentinel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAGL,cAAc,EAEd,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACf,MAAM,6BAA6B,CAAA;AAKpC,MAAM,MAAM,oBAAoB,CAAC,OAAO,SAAS,eAAe,CAAC,cAAc,CAAC,GAAG,eAAe,CAAC,cAAc,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,CAAA;AAE7I,qBAAa,cAAc,CACzB,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,EAC3D,UAAU,SAAS,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAC1H,SAAQ,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7C,OAAgB,aAAa,WAAyB;IAEtD,OAAO,CAAC,MAAM,CAAC,CAAgB;IAEzB,aAAa,CAAC,UAAU,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAiBpD,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAWrD,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;YAQrD,eAAe;YAkDf,cAAc;IAS5B,OAAO,CAAC,sBAAsB;CAG/B"}
1
+ {"version":3,"file":"MemorySentinel.d.ts","sourceRoot":"","sources":["../../src/MemorySentinel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAGL,cAAc,EAEd,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACf,MAAM,6BAA6B,CAAA;AAKpC,MAAM,MAAM,oBAAoB,CAAC,OAAO,SAAS,eAAe,CAAC,cAAc,CAAC,GAAG,eAAe,CAAC,cAAc,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,CAAA;AAE7I,qBAAa,cAAc,CACzB,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,EAC3D,UAAU,SAAS,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAC1H,SAAQ,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7C,OAAgB,aAAa,WAAyB;IAEtD,OAAO,CAAC,MAAM,CAAC,CAAgB;IAEzB,aAAa,CAAC,UAAU,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAiBpD,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAWrD,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;YAQrD,cAAc;IAS5B,OAAO,CAAC,sBAAsB;YAIhB,MAAM;CAyDrB"}
@@ -9,8 +9,8 @@ export declare class MemorySentinel<TParams extends MemorySentinelParams = Memor
9
9
  reportHandler(inPayloads?: Payload[]): Promise<Payload[]>;
10
10
  start(timeout?: number | undefined): Promise<boolean>;
11
11
  stop(timeout?: number | undefined): Promise<boolean>;
12
- private generateResults;
13
12
  private inputAddresses;
14
13
  private processPreviousResults;
14
+ private runJob;
15
15
  }
16
16
  //# sourceMappingURL=MemorySentinel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MemorySentinel.d.ts","sourceRoot":"","sources":["../../src/MemorySentinel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAGL,cAAc,EAEd,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACf,MAAM,6BAA6B,CAAA;AAKpC,MAAM,MAAM,oBAAoB,CAAC,OAAO,SAAS,eAAe,CAAC,cAAc,CAAC,GAAG,eAAe,CAAC,cAAc,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,CAAA;AAE7I,qBAAa,cAAc,CACzB,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,EAC3D,UAAU,SAAS,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAC1H,SAAQ,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7C,OAAgB,aAAa,WAAyB;IAEtD,OAAO,CAAC,MAAM,CAAC,CAAgB;IAEzB,aAAa,CAAC,UAAU,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAiBpD,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAWrD,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;YAQrD,eAAe;YAkDf,cAAc;IAS5B,OAAO,CAAC,sBAAsB;CAG/B"}
1
+ {"version":3,"file":"MemorySentinel.d.ts","sourceRoot":"","sources":["../../src/MemorySentinel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAGL,cAAc,EAEd,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACf,MAAM,6BAA6B,CAAA;AAKpC,MAAM,MAAM,oBAAoB,CAAC,OAAO,SAAS,eAAe,CAAC,cAAc,CAAC,GAAG,eAAe,CAAC,cAAc,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,CAAA;AAE7I,qBAAa,cAAc,CACzB,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,EAC3D,UAAU,SAAS,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAC1H,SAAQ,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7C,OAAgB,aAAa,WAAyB;IAEtD,OAAO,CAAC,MAAM,CAAC,CAAgB;IAEzB,aAAa,CAAC,UAAU,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAiBpD,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAWrD,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;YAQrD,cAAc;IAS5B,OAAO,CAAC,sBAAsB;YAIhB,MAAM;CAyDrB"}
@@ -9,8 +9,8 @@ export declare class MemorySentinel<TParams extends MemorySentinelParams = Memor
9
9
  reportHandler(inPayloads?: Payload[]): Promise<Payload[]>;
10
10
  start(timeout?: number | undefined): Promise<boolean>;
11
11
  stop(timeout?: number | undefined): Promise<boolean>;
12
- private generateResults;
13
12
  private inputAddresses;
14
13
  private processPreviousResults;
14
+ private runJob;
15
15
  }
16
16
  //# sourceMappingURL=MemorySentinel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MemorySentinel.d.ts","sourceRoot":"","sources":["../../src/MemorySentinel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAGL,cAAc,EAEd,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACf,MAAM,6BAA6B,CAAA;AAKpC,MAAM,MAAM,oBAAoB,CAAC,OAAO,SAAS,eAAe,CAAC,cAAc,CAAC,GAAG,eAAe,CAAC,cAAc,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,CAAA;AAE7I,qBAAa,cAAc,CACzB,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,EAC3D,UAAU,SAAS,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAC1H,SAAQ,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7C,OAAgB,aAAa,WAAyB;IAEtD,OAAO,CAAC,MAAM,CAAC,CAAgB;IAEzB,aAAa,CAAC,UAAU,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAiBpD,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAWrD,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;YAQrD,eAAe;YAkDf,cAAc;IAS5B,OAAO,CAAC,sBAAsB;CAG/B"}
1
+ {"version":3,"file":"MemorySentinel.d.ts","sourceRoot":"","sources":["../../src/MemorySentinel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAGL,cAAc,EAEd,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACf,MAAM,6BAA6B,CAAA;AAKpC,MAAM,MAAM,oBAAoB,CAAC,OAAO,SAAS,eAAe,CAAC,cAAc,CAAC,GAAG,eAAe,CAAC,cAAc,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,CAAA;AAE7I,qBAAa,cAAc,CACzB,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,EAC3D,UAAU,SAAS,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAC1H,SAAQ,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7C,OAAgB,aAAa,WAAyB;IAEtD,OAAO,CAAC,MAAM,CAAC,CAAgB;IAEzB,aAAa,CAAC,UAAU,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAiBpD,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAWrD,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;YAQrD,cAAc;IAS5B,OAAO,CAAC,sBAAsB;YAIhB,MAAM;CAyDrB"}
@@ -14,8 +14,8 @@ export declare class SentinelRunner {
14
14
  find(hash: string): void;
15
15
  remove(hash: string, restart?: boolean): Promise<void>;
16
16
  removeAll(): void;
17
- restart(): Promise<void>;
18
- start(): Promise<void>;
17
+ restart(): void;
18
+ start(): void;
19
19
  stop(): void;
20
20
  update(hash: string, automation: SentinelAutomationPayload, restart?: boolean): Promise<void>;
21
21
  private trigger;
@@ -1 +1 @@
1
- {"version":3,"file":"SentinelRunner.d.ts","sourceRoot":"","sources":["../../src/SentinelRunner.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAEL,yBAAyB,EACzB,gBAAgB,EAEjB,MAAM,6BAA6B,CAAA;AAIpC,MAAM,MAAM,6BAA6B,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;AAEvE,qBAAa,cAAc;IACzB,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAK;IACtE,SAAS,CAAC,eAAe,EAAE,6BAA6B,GAAG,SAAS,CAAA;IACpE,SAAS,CAAC,QAAQ,EAAE,gBAAgB,CAAA;IACpC,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;gBAE1C,QAAQ,EAAE,gBAAgB,EAAE,WAAW,CAAC,EAAE,yBAAyB,EAAE,EAAE,eAAe,CAAC,EAAE,6BAA6B;IAMlI,IAAI,WAAW,8CAEd;IAED,OAAO,KAAK,IAAI,GASf;IAEK,GAAG,CAAC,UAAU,EAAE,yBAAyB,EAAE,OAAO,UAAO;IAO/D,IAAI,CAAC,IAAI,EAAE,MAAM;IAIX,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,UAAO;IAKzC,SAAS;IAKH,OAAO;IAKP,KAAK;IAyBX,IAAI;IAOE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,yBAAyB,EAAE,OAAO,UAAO;YAMlE,OAAO;CAStB"}
1
+ {"version":3,"file":"SentinelRunner.d.ts","sourceRoot":"","sources":["../../src/SentinelRunner.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAEL,yBAAyB,EACzB,gBAAgB,EAEjB,MAAM,6BAA6B,CAAA;AAIpC,MAAM,MAAM,6BAA6B,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;AAEvE,qBAAa,cAAc;IACzB,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAK;IACtE,SAAS,CAAC,eAAe,EAAE,6BAA6B,GAAG,SAAS,CAAA;IACpE,SAAS,CAAC,QAAQ,EAAE,gBAAgB,CAAA;IACpC,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;gBAE1C,QAAQ,EAAE,gBAAgB,EAAE,WAAW,CAAC,EAAE,yBAAyB,EAAE,EAAE,eAAe,CAAC,EAAE,6BAA6B;IAMlI,IAAI,WAAW,8CAEd;IAED,OAAO,KAAK,IAAI,GASf;IAEK,GAAG,CAAC,UAAU,EAAE,yBAAyB,EAAE,OAAO,UAAO;IAO/D,IAAI,CAAC,IAAI,EAAE,MAAM;IAIX,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,UAAO;IAKzC,SAAS;IAKT,OAAO;IAKP,KAAK;IAuBL,IAAI;IAOE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,yBAAyB,EAAE,OAAO,UAAO;YAMlE,OAAO;CAStB"}
@@ -14,8 +14,8 @@ export declare class SentinelRunner {
14
14
  find(hash: string): void;
15
15
  remove(hash: string, restart?: boolean): Promise<void>;
16
16
  removeAll(): void;
17
- restart(): Promise<void>;
18
- start(): Promise<void>;
17
+ restart(): void;
18
+ start(): void;
19
19
  stop(): void;
20
20
  update(hash: string, automation: SentinelAutomationPayload, restart?: boolean): Promise<void>;
21
21
  private trigger;
@@ -1 +1 @@
1
- {"version":3,"file":"SentinelRunner.d.ts","sourceRoot":"","sources":["../../src/SentinelRunner.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAEL,yBAAyB,EACzB,gBAAgB,EAEjB,MAAM,6BAA6B,CAAA;AAIpC,MAAM,MAAM,6BAA6B,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;AAEvE,qBAAa,cAAc;IACzB,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAK;IACtE,SAAS,CAAC,eAAe,EAAE,6BAA6B,GAAG,SAAS,CAAA;IACpE,SAAS,CAAC,QAAQ,EAAE,gBAAgB,CAAA;IACpC,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;gBAE1C,QAAQ,EAAE,gBAAgB,EAAE,WAAW,CAAC,EAAE,yBAAyB,EAAE,EAAE,eAAe,CAAC,EAAE,6BAA6B;IAMlI,IAAI,WAAW,8CAEd;IAED,OAAO,KAAK,IAAI,GASf;IAEK,GAAG,CAAC,UAAU,EAAE,yBAAyB,EAAE,OAAO,UAAO;IAO/D,IAAI,CAAC,IAAI,EAAE,MAAM;IAIX,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,UAAO;IAKzC,SAAS;IAKH,OAAO;IAKP,KAAK;IAyBX,IAAI;IAOE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,yBAAyB,EAAE,OAAO,UAAO;YAMlE,OAAO;CAStB"}
1
+ {"version":3,"file":"SentinelRunner.d.ts","sourceRoot":"","sources":["../../src/SentinelRunner.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAEL,yBAAyB,EACzB,gBAAgB,EAEjB,MAAM,6BAA6B,CAAA;AAIpC,MAAM,MAAM,6BAA6B,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;AAEvE,qBAAa,cAAc;IACzB,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAK;IACtE,SAAS,CAAC,eAAe,EAAE,6BAA6B,GAAG,SAAS,CAAA;IACpE,SAAS,CAAC,QAAQ,EAAE,gBAAgB,CAAA;IACpC,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;gBAE1C,QAAQ,EAAE,gBAAgB,EAAE,WAAW,CAAC,EAAE,yBAAyB,EAAE,EAAE,eAAe,CAAC,EAAE,6BAA6B;IAMlI,IAAI,WAAW,8CAEd;IAED,OAAO,KAAK,IAAI,GASf;IAEK,GAAG,CAAC,UAAU,EAAE,yBAAyB,EAAE,OAAO,UAAO;IAO/D,IAAI,CAAC,IAAI,EAAE,MAAM;IAIX,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,UAAO;IAKzC,SAAS;IAKT,OAAO;IAKP,KAAK;IAuBL,IAAI;IAOE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,yBAAyB,EAAE,OAAO,UAAO;YAMlE,OAAO;CAStB"}
@@ -14,8 +14,8 @@ export declare class SentinelRunner {
14
14
  find(hash: string): void;
15
15
  remove(hash: string, restart?: boolean): Promise<void>;
16
16
  removeAll(): void;
17
- restart(): Promise<void>;
18
- start(): Promise<void>;
17
+ restart(): void;
18
+ start(): void;
19
19
  stop(): void;
20
20
  update(hash: string, automation: SentinelAutomationPayload, restart?: boolean): Promise<void>;
21
21
  private trigger;
@@ -1 +1 @@
1
- {"version":3,"file":"SentinelRunner.d.ts","sourceRoot":"","sources":["../../src/SentinelRunner.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAEL,yBAAyB,EACzB,gBAAgB,EAEjB,MAAM,6BAA6B,CAAA;AAIpC,MAAM,MAAM,6BAA6B,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;AAEvE,qBAAa,cAAc;IACzB,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAK;IACtE,SAAS,CAAC,eAAe,EAAE,6BAA6B,GAAG,SAAS,CAAA;IACpE,SAAS,CAAC,QAAQ,EAAE,gBAAgB,CAAA;IACpC,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;gBAE1C,QAAQ,EAAE,gBAAgB,EAAE,WAAW,CAAC,EAAE,yBAAyB,EAAE,EAAE,eAAe,CAAC,EAAE,6BAA6B;IAMlI,IAAI,WAAW,8CAEd;IAED,OAAO,KAAK,IAAI,GASf;IAEK,GAAG,CAAC,UAAU,EAAE,yBAAyB,EAAE,OAAO,UAAO;IAO/D,IAAI,CAAC,IAAI,EAAE,MAAM;IAIX,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,UAAO;IAKzC,SAAS;IAKH,OAAO;IAKP,KAAK;IAyBX,IAAI;IAOE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,yBAAyB,EAAE,OAAO,UAAO;YAMlE,OAAO;CAStB"}
1
+ {"version":3,"file":"SentinelRunner.d.ts","sourceRoot":"","sources":["../../src/SentinelRunner.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAEL,yBAAyB,EACzB,gBAAgB,EAEjB,MAAM,6BAA6B,CAAA;AAIpC,MAAM,MAAM,6BAA6B,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;AAEvE,qBAAa,cAAc;IACzB,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAK;IACtE,SAAS,CAAC,eAAe,EAAE,6BAA6B,GAAG,SAAS,CAAA;IACpE,SAAS,CAAC,QAAQ,EAAE,gBAAgB,CAAA;IACpC,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;gBAE1C,QAAQ,EAAE,gBAAgB,EAAE,WAAW,CAAC,EAAE,yBAAyB,EAAE,EAAE,eAAe,CAAC,EAAE,6BAA6B;IAMlI,IAAI,WAAW,8CAEd;IAED,OAAO,KAAK,IAAI,GASf;IAEK,GAAG,CAAC,UAAU,EAAE,yBAAyB,EAAE,OAAO,UAAO;IAO/D,IAAI,CAAC,IAAI,EAAE,MAAM;IAIX,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,UAAO;IAKzC,SAAS;IAKT,OAAO;IAKP,KAAK;IAuBL,IAAI;IAOE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,yBAAyB,EAAE,OAAO,UAAO;YAMlE,OAAO;CAStB"}
@@ -158,12 +158,11 @@ var SentinelRunner = class {
158
158
  this.stop();
159
159
  this._automations = {};
160
160
  }
161
- async restart() {
161
+ restart() {
162
162
  this.stop();
163
- await this.start();
163
+ this.start();
164
164
  }
165
- async start() {
166
- await Promise.resolve();
165
+ start() {
167
166
  (0, import_assert.assertEx)(this.timeoutId === void 0, "Already started");
168
167
  const automation = this.next;
169
168
  if ((0, import_sentinel_model.isSentinelIntervalAutomation)(automation)) {
@@ -176,7 +175,7 @@ var SentinelRunner = class {
176
175
  await this.trigger(automation);
177
176
  this.stop();
178
177
  } finally {
179
- await this.start();
178
+ this.start();
180
179
  }
181
180
  }, delay);
182
181
  }
@@ -220,7 +219,7 @@ var MemorySentinel = class extends import_sentinel_abstract.AbstractSentinel {
220
219
  let index = 0;
221
220
  let previousResults = {};
222
221
  while (index < job.tasks.length) {
223
- const generatedPayloads = await this.generateResults(job.tasks[index], previousResults, inPayloads);
222
+ const generatedPayloads = await this.runJob(job.tasks[index], previousResults, inPayloads);
224
223
  previousResults = generatedPayloads;
225
224
  index++;
226
225
  }
@@ -232,7 +231,7 @@ var MemorySentinel = class extends import_sentinel_abstract.AbstractSentinel {
232
231
  if (await super.start(timeout)) {
233
232
  if ((this.config.automations?.length ?? 0) > 0) {
234
233
  this.runner = new SentinelRunner(this, this.config.automations);
235
- await this.runner.start();
234
+ this.runner.start();
236
235
  }
237
236
  return true;
238
237
  }
@@ -245,17 +244,45 @@ var MemorySentinel = class extends import_sentinel_abstract.AbstractSentinel {
245
244
  }
246
245
  return await super.stop(timeout);
247
246
  }
248
- async generateResults(tasks, previousResults, inPayloads) {
249
- this.logger?.debug(`generateResults:tasks: ${JSON.stringify(tasks.length)}`);
250
- this.logger?.debug(`generateResults:previous: ${JSON.stringify(previousResults)}`);
251
- this.logger?.debug(`generateResults:in: ${JSON.stringify(inPayloads)}`);
247
+ async inputAddresses(input) {
248
+ if (Array.isArray(input)) {
249
+ return (await Promise.all(input.map(async (inputItem) => await this.inputAddresses(inputItem)))).flat();
250
+ } else {
251
+ const resolved = await this.resolve(input);
252
+ return resolved ? [
253
+ resolved.address
254
+ ] : [];
255
+ }
256
+ }
257
+ processPreviousResults(payloads, inputs) {
258
+ return inputs.flatMap((input) => payloads[input] ?? []);
259
+ }
260
+ async runJob(tasks, previousResults, inPayloads) {
261
+ await this.emit("jobStart", {
262
+ inPayloads,
263
+ module: this
264
+ });
265
+ this.logger?.debug(`runJob:tasks: ${JSON.stringify(tasks.length)}`);
266
+ this.logger?.debug(`runJob:previous: ${JSON.stringify(previousResults)}`);
267
+ this.logger?.debug(`runJob:in: ${JSON.stringify(inPayloads)}`);
252
268
  const results = await Promise.allSettled(tasks?.map(async (task) => {
253
269
  const input = task.input ?? false;
254
270
  const inPayloadsFound = input === true ? inPayloads : input === false ? [] : this.processPreviousResults(previousResults, await this.inputAddresses(input));
255
271
  const witness = (0, import_witness_model.asWitnessInstance)(task.module);
256
272
  if (witness) {
273
+ await this.emit("taskStart", {
274
+ address: witness.address,
275
+ inPayloads: inPayloadsFound,
276
+ module: this
277
+ });
257
278
  const observed = await witness.observe(inPayloadsFound);
258
279
  this.logger?.debug(`observed [${witness.id}]: ${JSON.stringify(observed)}`);
280
+ await this.emit("taskEnd", {
281
+ address: witness.address,
282
+ inPayloads: inPayloadsFound,
283
+ module: this,
284
+ outPayloads: observed
285
+ });
259
286
  return [
260
287
  witness.address,
261
288
  observed
@@ -263,8 +290,19 @@ var MemorySentinel = class extends import_sentinel_abstract.AbstractSentinel {
263
290
  }
264
291
  const diviner = (0, import_diviner_model.asDivinerInstance)(task.module);
265
292
  if (diviner) {
293
+ await this.emit("taskStart", {
294
+ address: diviner.address,
295
+ inPayloads: inPayloadsFound,
296
+ module: this
297
+ });
266
298
  const divined = await diviner.divine(inPayloadsFound);
267
299
  this.logger?.debug(`divined [${diviner.id}]: ${JSON.stringify(divined)}`);
300
+ await this.emit("taskEnd", {
301
+ address: diviner.address,
302
+ inPayloads: inPayloadsFound,
303
+ module: this,
304
+ outPayloads: divined
305
+ });
268
306
  return [
269
307
  diviner.address,
270
308
  divined
@@ -272,8 +310,19 @@ var MemorySentinel = class extends import_sentinel_abstract.AbstractSentinel {
272
310
  }
273
311
  const sentinel = (0, import_sentinel_model2.asSentinelInstance)(task.module);
274
312
  if (sentinel) {
313
+ await this.emit("taskStart", {
314
+ address: sentinel.address,
315
+ inPayloads: inPayloadsFound,
316
+ module: this
317
+ });
275
318
  const reported = await sentinel.report(inPayloadsFound);
276
319
  this.logger?.debug(`reported [${sentinel.id}]: ${JSON.stringify(reported)}`);
320
+ await this.emit("taskEnd", {
321
+ address: sentinel.address,
322
+ inPayloads: inPayloadsFound,
323
+ module: this,
324
+ outPayloads: reported
325
+ });
277
326
  return [
278
327
  sentinel.address,
279
328
  reported
@@ -294,20 +343,12 @@ var MemorySentinel = class extends import_sentinel_abstract.AbstractSentinel {
294
343
  }
295
344
  }
296
345
  this.logger?.debug(`generateResults:out: ${JSON.stringify(finalResult)}`);
346
+ await this.emit("jobEnd", {
347
+ finalResult,
348
+ inPayloads,
349
+ module: this
350
+ });
297
351
  return finalResult;
298
352
  }
299
- async inputAddresses(input) {
300
- if (Array.isArray(input)) {
301
- return (await Promise.all(input.map(async (inputItem) => await this.inputAddresses(inputItem)))).flat();
302
- } else {
303
- const resolved = await this.resolve(input);
304
- return resolved ? [
305
- resolved.address
306
- ] : [];
307
- }
308
- }
309
- processPreviousResults(payloads, inputs) {
310
- return inputs.flatMap((input) => payloads[input] ?? []);
311
- }
312
353
  };
313
354
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/MemorySentinel.ts","../../src/SentinelRunner.ts","../../src/SentinelIntervalAutomationWrapper.ts"],"sourcesContent":["export * from './MemorySentinel'\nexport * from './SentinelIntervalAutomationWrapper'\nexport * from './SentinelRunner'\n","import { Address } from '@xylabs/hex'\nimport { fulfilled, rejected } from '@xylabs/promise'\nimport { asDivinerInstance } from '@xyo-network/diviner-model'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { AbstractSentinel } from '@xyo-network/sentinel-abstract'\nimport {\n asSentinelInstance,\n ResolvedTask,\n SentinelConfig,\n SentinelConfigSchema,\n SentinelInstance,\n SentinelModuleEventData,\n SentinelParams,\n} from '@xyo-network/sentinel-model'\nimport { asWitnessInstance } from '@xyo-network/witness-model'\n\nimport { SentinelRunner } from './SentinelRunner'\n\nexport type MemorySentinelParams<TConfig extends AnyConfigSchema<SentinelConfig> = AnyConfigSchema<SentinelConfig>> = SentinelParams<TConfig>\n\nexport class MemorySentinel<\n TParams extends MemorySentinelParams = MemorySentinelParams,\n TEventData extends SentinelModuleEventData<SentinelInstance<TParams>> = SentinelModuleEventData<SentinelInstance<TParams>>,\n> extends AbstractSentinel<TParams, TEventData> {\n static override configSchemas = [SentinelConfigSchema]\n\n private runner?: SentinelRunner\n\n async reportHandler(inPayloads: Payload[] = []): Promise<Payload[]> {\n await this.started('throw')\n this.logger?.debug(`reportHandler:in: ${JSON.stringify(inPayloads)}`)\n const job = await this.jobPromise\n\n let index = 0\n let previousResults: Record<Address, Payload[]> = {}\n while (index < job.tasks.length) {\n const generatedPayloads = await this.generateResults(job.tasks[index], previousResults, inPayloads)\n previousResults = generatedPayloads\n index++\n }\n const result = Object.values(previousResults).flat()\n this.logger?.debug(`reportHandler:out: ${JSON.stringify(result)}`)\n return result\n }\n\n override async start(timeout?: number | undefined): Promise<boolean> {\n if (await super.start(timeout)) {\n if ((this.config.automations?.length ?? 0) > 0) {\n this.runner = new SentinelRunner(this, this.config.automations)\n await this.runner.start()\n }\n return true\n }\n return false\n }\n\n override async stop(timeout?: number | undefined): Promise<boolean> {\n if (this.runner) {\n this.runner.stop()\n this.runner = undefined\n }\n return await super.stop(timeout)\n }\n\n private async generateResults(\n tasks: ResolvedTask[],\n previousResults: Record<Address, Payload[]>,\n inPayloads?: Payload[],\n ): Promise<Record<Address, Payload[]>> {\n this.logger?.debug(`generateResults:tasks: ${JSON.stringify(tasks.length)}`)\n this.logger?.debug(`generateResults:previous: ${JSON.stringify(previousResults)}`)\n this.logger?.debug(`generateResults:in: ${JSON.stringify(inPayloads)}`)\n const results: PromiseSettledResult<[Address, Payload[]]>[] = await Promise.allSettled(\n tasks?.map(async (task) => {\n const input = task.input ?? false\n const inPayloadsFound =\n input === true ? inPayloads : input === false ? [] : this.processPreviousResults(previousResults, await this.inputAddresses(input))\n const witness = asWitnessInstance(task.module)\n if (witness) {\n const observed = await witness.observe(inPayloadsFound)\n this.logger?.debug(`observed [${witness.id}]: ${JSON.stringify(observed)}`)\n return [witness.address, observed]\n }\n const diviner = asDivinerInstance(task.module)\n if (diviner) {\n const divined = await diviner.divine(inPayloadsFound)\n this.logger?.debug(`divined [${diviner.id}]: ${JSON.stringify(divined)}`)\n return [diviner.address, divined]\n }\n const sentinel = asSentinelInstance(task.module)\n if (sentinel) {\n const reported = await sentinel.report(inPayloadsFound)\n this.logger?.debug(`reported [${sentinel.id}]: ${JSON.stringify(reported)}`)\n return [sentinel.address, reported]\n }\n throw new Error('Unsupported module type')\n }),\n )\n const finalResult: Record<Address, Payload[]> = {}\n for (const result of results.filter(fulfilled)) {\n const [address, payloads] = result.value\n finalResult[address] = finalResult[address] ?? []\n finalResult[address].push(...payloads)\n }\n if (this.throwErrors) {\n const errors = results.filter(rejected).map((result) => result.reason)\n if (errors.length > 0) {\n throw new Error('At least one module failed')\n }\n }\n this.logger?.debug(`generateResults:out: ${JSON.stringify(finalResult)}`)\n return finalResult\n }\n\n private async inputAddresses(input: string | string[]): Promise<string[]> {\n if (Array.isArray(input)) {\n return (await Promise.all(input.map(async (inputItem) => await this.inputAddresses(inputItem)))).flat()\n } else {\n const resolved = await this.resolve(input)\n return resolved ? [resolved.address] : []\n }\n }\n\n private processPreviousResults(payloads: Record<string, Payload[]>, inputs: string[]) {\n return inputs.flatMap((input) => payloads[input] ?? [])\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { forget } from '@xylabs/forget'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport {\n isSentinelIntervalAutomation,\n SentinelAutomationPayload,\n SentinelInstance,\n SentinelIntervalAutomationPayload,\n} from '@xyo-network/sentinel-model'\n\nimport { SentinelIntervalAutomationWrapper } from './SentinelIntervalAutomationWrapper'\n\nexport type OnSentinelRunnerTriggerResult = (result: Payload[]) => void\n\nexport class SentinelRunner {\n protected _automations: Record<string, SentinelAutomationPayload> = {}\n protected onTriggerResult: OnSentinelRunnerTriggerResult | undefined\n protected sentinel: SentinelInstance\n protected timeoutId?: NodeJS.Timeout | string | number\n\n constructor(sentinel: SentinelInstance, automations?: SentinelAutomationPayload[], onTriggerResult?: OnSentinelRunnerTriggerResult) {\n this.sentinel = sentinel\n this.onTriggerResult = onTriggerResult\n if (automations) for (const automation of automations) forget(this.add(automation))\n }\n\n get automations() {\n return this._automations\n }\n\n private get next() {\n // eslint-disable-next-line unicorn/no-array-reduce\n return Object.values(this._automations).reduce<SentinelAutomationPayload | undefined>((previous, current) => {\n if (isSentinelIntervalAutomation(current) && isSentinelIntervalAutomation(previous)) {\n return current.start < (previous?.start ?? Number.POSITIVE_INFINITY) ? current : previous\n }\n return current\n // eslint-disable-next-line unicorn/no-useless-undefined\n }, undefined)\n }\n\n async add(automation: SentinelAutomationPayload, restart = true) {\n const hash = await PayloadBuilder.dataHash(automation)\n this._automations[hash] = automation\n if (restart) await this.restart()\n return hash\n }\n\n find(hash: string) {\n Object.entries(this._automations).find(([key]) => key === hash)\n }\n\n async remove(hash: string, restart = true) {\n delete this._automations[hash]\n if (restart) await this.restart()\n }\n\n removeAll() {\n this.stop()\n this._automations = {}\n }\n\n async restart() {\n this.stop()\n await this.start()\n }\n\n async start() {\n // NOTE: Keep async to match module start signature\n await Promise.resolve()\n assertEx(this.timeoutId === undefined, 'Already started')\n const automation = this.next\n if (isSentinelIntervalAutomation(automation)) {\n const now = Date.now()\n const start = Math.max(automation.start ?? now, now)\n const delay = Math.max(start - now, 0)\n if (delay < Number.POSITIVE_INFINITY) {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n this.timeoutId = setTimeout(async () => {\n try {\n // Run the automation\n await this.trigger(automation)\n this.stop()\n } finally {\n // No matter what start the next automation\n await this.start()\n }\n }, delay)\n }\n }\n }\n\n stop() {\n if (this.timeoutId) {\n clearTimeout(this.timeoutId)\n this.timeoutId = undefined\n }\n }\n\n async update(hash: string, automation: SentinelAutomationPayload, restart = true) {\n await this.remove(hash, false)\n await this.add(automation, false)\n if (restart) await this.restart()\n }\n\n private async trigger(automation: SentinelIntervalAutomationPayload) {\n const wrapper = new SentinelIntervalAutomationWrapper(automation)\n await this.remove(await wrapper.dataHash(), false)\n wrapper.next()\n await this.add(wrapper.jsonPayload(), false)\n const triggerResult = await this.sentinel.report()\n this.onTriggerResult?.(triggerResult)\n // await this.start()\n }\n}\n","import { PayloadWrapper } from '@xyo-network/payload-wrapper'\nimport { SentinelIntervalAutomationPayload } from '@xyo-network/sentinel-model'\n\nexport class SentinelIntervalAutomationWrapper<\n T extends SentinelIntervalAutomationPayload = SentinelIntervalAutomationPayload,\n> extends PayloadWrapper<T> {\n constructor(payload: T) {\n super(payload)\n }\n\n protected get frequencyMillis() {\n const frequency = this.jsonPayload().frequency\n if (frequency === undefined) return Number.POSITIVE_INFINITY\n const frequencyUnits = this.jsonPayload().frequencyUnits\n switch (frequencyUnits ?? 'hour') {\n case 'second': {\n return frequency * 1000\n }\n case 'minute': {\n return frequency * 60 * 1000\n }\n case 'hour': {\n return frequency * 60 * 60 * 1000\n }\n case 'day': {\n return frequency * 24 * 60 * 60 * 1000\n }\n default: {\n return Number.POSITIVE_INFINITY\n }\n }\n }\n\n protected get remaining() {\n return this.jsonPayload().remaining ?? Number.POSITIVE_INFINITY\n }\n\n next() {\n const now = Date.now()\n const previousStart = this.jsonPayload()?.start ?? now\n const start = Math.max(previousStart, now)\n const nextStart = start + this.frequencyMillis\n this.setStart(nextStart)\n this.consumeRemaining()\n this.checkEnd()\n return this\n }\n\n protected checkEnd() {\n if (this.jsonPayload().start > (this.jsonPayload().end ?? Number.POSITIVE_INFINITY)) {\n this.setStart(Number.POSITIVE_INFINITY)\n }\n }\n\n protected consumeRemaining(count = 1) {\n const remaining = Math.max(this.remaining - count, 0)\n this.setRemaining(remaining)\n if (remaining <= 0) this.setStart(Number.POSITIVE_INFINITY)\n }\n\n /**\n * Sets the remaining of the wrapped automation\n * @param remaining The remaining time in milliseconds\n */\n protected setRemaining(remaining: number) {\n this.obj.remaining = remaining\n }\n\n /**\n * Sets the start of the wrapped automation\n * @param start The start time in milliseconds\n */\n protected setStart(start: number) {\n this.obj.start = start\n }\n}\n"],"mappings":"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","names":["import_sentinel_model","SentinelIntervalAutomationWrapper","PayloadWrapper","constructor","payload","frequencyMillis","frequency","jsonPayload","undefined","Number","POSITIVE_INFINITY","frequencyUnits","remaining","next","now","Date","previousStart","start","Math","max","nextStart","setStart","consumeRemaining","checkEnd","end","count","setRemaining","obj","SentinelRunner","_automations","onTriggerResult","sentinel","timeoutId","constructor","automations","automation","forget","add","next","Object","values","reduce","previous","current","isSentinelIntervalAutomation","start","Number","POSITIVE_INFINITY","undefined","restart","hash","PayloadBuilder","dataHash","find","entries","key","remove","removeAll","stop","Promise","resolve","assertEx","now","Date","Math","max","delay","setTimeout","trigger","clearTimeout","update","wrapper","SentinelIntervalAutomationWrapper","jsonPayload","triggerResult","report","MemorySentinel","AbstractSentinel","configSchemas","SentinelConfigSchema","runner","reportHandler","inPayloads","started","logger","debug","JSON","stringify","job","jobPromise","index","previousResults","tasks","length","generatedPayloads","generateResults","result","Object","values","flat","start","timeout","config","automations","SentinelRunner","stop","undefined","results","Promise","allSettled","map","task","input","inPayloadsFound","processPreviousResults","inputAddresses","witness","asWitnessInstance","module","observed","observe","id","address","diviner","asDivinerInstance","divined","divine","sentinel","asSentinelInstance","reported","report","Error","finalResult","filter","fulfilled","payloads","value","push","throwErrors","errors","rejected","reason","Array","isArray","all","inputItem","resolved","resolve","inputs","flatMap"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/MemorySentinel.ts","../../src/SentinelRunner.ts","../../src/SentinelIntervalAutomationWrapper.ts"],"sourcesContent":["export * from './MemorySentinel'\nexport * from './SentinelIntervalAutomationWrapper'\nexport * from './SentinelRunner'\n","import { Address } from '@xylabs/hex'\nimport { fulfilled, rejected } from '@xylabs/promise'\nimport { asDivinerInstance } from '@xyo-network/diviner-model'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { AbstractSentinel } from '@xyo-network/sentinel-abstract'\nimport {\n asSentinelInstance,\n ResolvedTask,\n SentinelConfig,\n SentinelConfigSchema,\n SentinelInstance,\n SentinelModuleEventData,\n SentinelParams,\n} from '@xyo-network/sentinel-model'\nimport { asWitnessInstance } from '@xyo-network/witness-model'\n\nimport { SentinelRunner } from './SentinelRunner'\n\nexport type MemorySentinelParams<TConfig extends AnyConfigSchema<SentinelConfig> = AnyConfigSchema<SentinelConfig>> = SentinelParams<TConfig>\n\nexport class MemorySentinel<\n TParams extends MemorySentinelParams = MemorySentinelParams,\n TEventData extends SentinelModuleEventData<SentinelInstance<TParams>> = SentinelModuleEventData<SentinelInstance<TParams>>,\n> extends AbstractSentinel<TParams, TEventData> {\n static override configSchemas = [SentinelConfigSchema]\n\n private runner?: SentinelRunner\n\n async reportHandler(inPayloads: Payload[] = []): Promise<Payload[]> {\n await this.started('throw')\n this.logger?.debug(`reportHandler:in: ${JSON.stringify(inPayloads)}`)\n const job = await this.jobPromise\n\n let index = 0\n let previousResults: Record<Address, Payload[]> = {}\n while (index < job.tasks.length) {\n const generatedPayloads = await this.runJob(job.tasks[index], previousResults, inPayloads)\n previousResults = generatedPayloads\n index++\n }\n const result = Object.values(previousResults).flat()\n this.logger?.debug(`reportHandler:out: ${JSON.stringify(result)}`)\n return result\n }\n\n override async start(timeout?: number | undefined): Promise<boolean> {\n if (await super.start(timeout)) {\n if ((this.config.automations?.length ?? 0) > 0) {\n this.runner = new SentinelRunner(this, this.config.automations)\n this.runner.start()\n }\n return true\n }\n return false\n }\n\n override async stop(timeout?: number | undefined): Promise<boolean> {\n if (this.runner) {\n this.runner.stop()\n this.runner = undefined\n }\n return await super.stop(timeout)\n }\n\n private async inputAddresses(input: string | string[]): Promise<string[]> {\n if (Array.isArray(input)) {\n return (await Promise.all(input.map(async (inputItem) => await this.inputAddresses(inputItem)))).flat()\n } else {\n const resolved = await this.resolve(input)\n return resolved ? [resolved.address] : []\n }\n }\n\n private processPreviousResults(payloads: Record<string, Payload[]>, inputs: string[]) {\n return inputs.flatMap((input) => payloads[input] ?? [])\n }\n\n private async runJob(\n tasks: ResolvedTask[],\n previousResults: Record<Address, Payload[]>,\n inPayloads?: Payload[],\n ): Promise<Record<Address, Payload[]>> {\n await this.emit('jobStart', { inPayloads, module: this })\n this.logger?.debug(`runJob:tasks: ${JSON.stringify(tasks.length)}`)\n this.logger?.debug(`runJob:previous: ${JSON.stringify(previousResults)}`)\n this.logger?.debug(`runJob:in: ${JSON.stringify(inPayloads)}`)\n const results: PromiseSettledResult<[Address, Payload[]]>[] = await Promise.allSettled(\n tasks?.map(async (task) => {\n const input = task.input ?? false\n const inPayloadsFound =\n input === true ? inPayloads : input === false ? [] : this.processPreviousResults(previousResults, await this.inputAddresses(input))\n const witness = asWitnessInstance(task.module)\n if (witness) {\n await this.emit('taskStart', { address: witness.address, inPayloads: inPayloadsFound, module: this })\n const observed = await witness.observe(inPayloadsFound)\n this.logger?.debug(`observed [${witness.id}]: ${JSON.stringify(observed)}`)\n await this.emit('taskEnd', { address: witness.address, inPayloads: inPayloadsFound, module: this, outPayloads: observed })\n return [witness.address, observed]\n }\n const diviner = asDivinerInstance(task.module)\n if (diviner) {\n await this.emit('taskStart', { address: diviner.address, inPayloads: inPayloadsFound, module: this })\n const divined = await diviner.divine(inPayloadsFound)\n this.logger?.debug(`divined [${diviner.id}]: ${JSON.stringify(divined)}`)\n await this.emit('taskEnd', { address: diviner.address, inPayloads: inPayloadsFound, module: this, outPayloads: divined })\n return [diviner.address, divined]\n }\n const sentinel = asSentinelInstance(task.module)\n if (sentinel) {\n await this.emit('taskStart', { address: sentinel.address, inPayloads: inPayloadsFound, module: this })\n const reported = await sentinel.report(inPayloadsFound)\n this.logger?.debug(`reported [${sentinel.id}]: ${JSON.stringify(reported)}`)\n await this.emit('taskEnd', { address: sentinel.address, inPayloads: inPayloadsFound, module: this, outPayloads: reported })\n return [sentinel.address, reported]\n }\n throw new Error('Unsupported module type')\n }),\n )\n const finalResult: Record<Address, Payload[]> = {}\n for (const result of results.filter(fulfilled)) {\n const [address, payloads] = result.value\n finalResult[address] = finalResult[address] ?? []\n finalResult[address].push(...payloads)\n }\n if (this.throwErrors) {\n const errors = results.filter(rejected).map((result) => result.reason)\n if (errors.length > 0) {\n throw new Error('At least one module failed')\n }\n }\n this.logger?.debug(`generateResults:out: ${JSON.stringify(finalResult)}`)\n await this.emit('jobEnd', { finalResult, inPayloads, module: this })\n return finalResult\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { forget } from '@xylabs/forget'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport {\n isSentinelIntervalAutomation,\n SentinelAutomationPayload,\n SentinelInstance,\n SentinelIntervalAutomationPayload,\n} from '@xyo-network/sentinel-model'\n\nimport { SentinelIntervalAutomationWrapper } from './SentinelIntervalAutomationWrapper'\n\nexport type OnSentinelRunnerTriggerResult = (result: Payload[]) => void\n\nexport class SentinelRunner {\n protected _automations: Record<string, SentinelAutomationPayload> = {}\n protected onTriggerResult: OnSentinelRunnerTriggerResult | undefined\n protected sentinel: SentinelInstance\n protected timeoutId?: NodeJS.Timeout | string | number\n\n constructor(sentinel: SentinelInstance, automations?: SentinelAutomationPayload[], onTriggerResult?: OnSentinelRunnerTriggerResult) {\n this.sentinel = sentinel\n this.onTriggerResult = onTriggerResult\n if (automations) for (const automation of automations) forget(this.add(automation))\n }\n\n get automations() {\n return this._automations\n }\n\n private get next() {\n // eslint-disable-next-line unicorn/no-array-reduce\n return Object.values(this._automations).reduce<SentinelAutomationPayload | undefined>((previous, current) => {\n if (isSentinelIntervalAutomation(current) && isSentinelIntervalAutomation(previous)) {\n return current.start < (previous?.start ?? Number.POSITIVE_INFINITY) ? current : previous\n }\n return current\n // eslint-disable-next-line unicorn/no-useless-undefined\n }, undefined)\n }\n\n async add(automation: SentinelAutomationPayload, restart = true) {\n const hash = await PayloadBuilder.dataHash(automation)\n this._automations[hash] = automation\n if (restart) await this.restart()\n return hash\n }\n\n find(hash: string) {\n Object.entries(this._automations).find(([key]) => key === hash)\n }\n\n async remove(hash: string, restart = true) {\n delete this._automations[hash]\n if (restart) await this.restart()\n }\n\n removeAll() {\n this.stop()\n this._automations = {}\n }\n\n restart() {\n this.stop()\n this.start()\n }\n\n start() {\n assertEx(this.timeoutId === undefined, 'Already started')\n const automation = this.next\n if (isSentinelIntervalAutomation(automation)) {\n const now = Date.now()\n const start = Math.max(automation.start ?? now, now)\n const delay = Math.max(start - now, 0)\n if (delay < Number.POSITIVE_INFINITY) {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n this.timeoutId = setTimeout(async () => {\n try {\n // Run the automation\n await this.trigger(automation)\n this.stop()\n } finally {\n // No matter what start the next automation\n this.start()\n }\n }, delay)\n }\n }\n }\n\n stop() {\n if (this.timeoutId) {\n clearTimeout(this.timeoutId)\n this.timeoutId = undefined\n }\n }\n\n async update(hash: string, automation: SentinelAutomationPayload, restart = true) {\n await this.remove(hash, false)\n await this.add(automation, false)\n if (restart) await this.restart()\n }\n\n private async trigger(automation: SentinelIntervalAutomationPayload) {\n const wrapper = new SentinelIntervalAutomationWrapper(automation)\n await this.remove(await wrapper.dataHash(), false)\n wrapper.next()\n await this.add(wrapper.jsonPayload(), false)\n const triggerResult = await this.sentinel.report()\n this.onTriggerResult?.(triggerResult)\n // await this.start()\n }\n}\n","import { PayloadWrapper } from '@xyo-network/payload-wrapper'\nimport { SentinelIntervalAutomationPayload } from '@xyo-network/sentinel-model'\n\nexport class SentinelIntervalAutomationWrapper<\n T extends SentinelIntervalAutomationPayload = SentinelIntervalAutomationPayload,\n> extends PayloadWrapper<T> {\n constructor(payload: T) {\n super(payload)\n }\n\n protected get frequencyMillis() {\n const frequency = this.jsonPayload().frequency\n if (frequency === undefined) return Number.POSITIVE_INFINITY\n const frequencyUnits = this.jsonPayload().frequencyUnits\n switch (frequencyUnits ?? 'hour') {\n case 'second': {\n return frequency * 1000\n }\n case 'minute': {\n return frequency * 60 * 1000\n }\n case 'hour': {\n return frequency * 60 * 60 * 1000\n }\n case 'day': {\n return frequency * 24 * 60 * 60 * 1000\n }\n default: {\n return Number.POSITIVE_INFINITY\n }\n }\n }\n\n protected get remaining() {\n return this.jsonPayload().remaining ?? Number.POSITIVE_INFINITY\n }\n\n next() {\n const now = Date.now()\n const previousStart = this.jsonPayload()?.start ?? now\n const start = Math.max(previousStart, now)\n const nextStart = start + this.frequencyMillis\n this.setStart(nextStart)\n this.consumeRemaining()\n this.checkEnd()\n return this\n }\n\n protected checkEnd() {\n if (this.jsonPayload().start > (this.jsonPayload().end ?? Number.POSITIVE_INFINITY)) {\n this.setStart(Number.POSITIVE_INFINITY)\n }\n }\n\n protected consumeRemaining(count = 1) {\n const remaining = Math.max(this.remaining - count, 0)\n this.setRemaining(remaining)\n if (remaining <= 0) this.setStart(Number.POSITIVE_INFINITY)\n }\n\n /**\n * Sets the remaining of the wrapped automation\n * @param remaining The remaining time in milliseconds\n */\n protected setRemaining(remaining: number) {\n this.obj.remaining = remaining\n }\n\n /**\n * Sets the start of the wrapped automation\n * @param start The start time in milliseconds\n */\n protected setStart(start: number) {\n this.obj.start = start\n }\n}\n"],"mappings":"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","names":["import_sentinel_model","SentinelIntervalAutomationWrapper","PayloadWrapper","constructor","payload","frequencyMillis","frequency","jsonPayload","undefined","Number","POSITIVE_INFINITY","frequencyUnits","remaining","next","now","Date","previousStart","start","Math","max","nextStart","setStart","consumeRemaining","checkEnd","end","count","setRemaining","obj","SentinelRunner","_automations","onTriggerResult","sentinel","timeoutId","constructor","automations","automation","forget","add","next","Object","values","reduce","previous","current","isSentinelIntervalAutomation","start","Number","POSITIVE_INFINITY","undefined","restart","hash","PayloadBuilder","dataHash","find","entries","key","remove","removeAll","stop","assertEx","now","Date","Math","max","delay","setTimeout","trigger","clearTimeout","update","wrapper","SentinelIntervalAutomationWrapper","jsonPayload","triggerResult","report","MemorySentinel","AbstractSentinel","configSchemas","SentinelConfigSchema","runner","reportHandler","inPayloads","started","logger","debug","JSON","stringify","job","jobPromise","index","previousResults","tasks","length","generatedPayloads","runJob","result","Object","values","flat","start","timeout","config","automations","SentinelRunner","stop","undefined","inputAddresses","input","Array","isArray","Promise","all","map","inputItem","resolved","resolve","address","processPreviousResults","payloads","inputs","flatMap","emit","module","results","allSettled","task","inPayloadsFound","witness","asWitnessInstance","observed","observe","id","outPayloads","diviner","asDivinerInstance","divined","divine","sentinel","asSentinelInstance","reported","report","Error","finalResult","filter","fulfilled","value","push","throwErrors","errors","rejected","reason"]}
@@ -132,12 +132,11 @@ var SentinelRunner = class {
132
132
  this.stop();
133
133
  this._automations = {};
134
134
  }
135
- async restart() {
135
+ restart() {
136
136
  this.stop();
137
- await this.start();
137
+ this.start();
138
138
  }
139
- async start() {
140
- await Promise.resolve();
139
+ start() {
141
140
  assertEx(this.timeoutId === void 0, "Already started");
142
141
  const automation = this.next;
143
142
  if (isSentinelIntervalAutomation(automation)) {
@@ -150,7 +149,7 @@ var SentinelRunner = class {
150
149
  await this.trigger(automation);
151
150
  this.stop();
152
151
  } finally {
153
- await this.start();
152
+ this.start();
154
153
  }
155
154
  }, delay);
156
155
  }
@@ -194,7 +193,7 @@ var MemorySentinel = class extends AbstractSentinel {
194
193
  let index = 0;
195
194
  let previousResults = {};
196
195
  while (index < job.tasks.length) {
197
- const generatedPayloads = await this.generateResults(job.tasks[index], previousResults, inPayloads);
196
+ const generatedPayloads = await this.runJob(job.tasks[index], previousResults, inPayloads);
198
197
  previousResults = generatedPayloads;
199
198
  index++;
200
199
  }
@@ -206,7 +205,7 @@ var MemorySentinel = class extends AbstractSentinel {
206
205
  if (await super.start(timeout)) {
207
206
  if ((this.config.automations?.length ?? 0) > 0) {
208
207
  this.runner = new SentinelRunner(this, this.config.automations);
209
- await this.runner.start();
208
+ this.runner.start();
210
209
  }
211
210
  return true;
212
211
  }
@@ -219,17 +218,45 @@ var MemorySentinel = class extends AbstractSentinel {
219
218
  }
220
219
  return await super.stop(timeout);
221
220
  }
222
- async generateResults(tasks, previousResults, inPayloads) {
223
- this.logger?.debug(`generateResults:tasks: ${JSON.stringify(tasks.length)}`);
224
- this.logger?.debug(`generateResults:previous: ${JSON.stringify(previousResults)}`);
225
- this.logger?.debug(`generateResults:in: ${JSON.stringify(inPayloads)}`);
221
+ async inputAddresses(input) {
222
+ if (Array.isArray(input)) {
223
+ return (await Promise.all(input.map(async (inputItem) => await this.inputAddresses(inputItem)))).flat();
224
+ } else {
225
+ const resolved = await this.resolve(input);
226
+ return resolved ? [
227
+ resolved.address
228
+ ] : [];
229
+ }
230
+ }
231
+ processPreviousResults(payloads, inputs) {
232
+ return inputs.flatMap((input) => payloads[input] ?? []);
233
+ }
234
+ async runJob(tasks, previousResults, inPayloads) {
235
+ await this.emit("jobStart", {
236
+ inPayloads,
237
+ module: this
238
+ });
239
+ this.logger?.debug(`runJob:tasks: ${JSON.stringify(tasks.length)}`);
240
+ this.logger?.debug(`runJob:previous: ${JSON.stringify(previousResults)}`);
241
+ this.logger?.debug(`runJob:in: ${JSON.stringify(inPayloads)}`);
226
242
  const results = await Promise.allSettled(tasks?.map(async (task) => {
227
243
  const input = task.input ?? false;
228
244
  const inPayloadsFound = input === true ? inPayloads : input === false ? [] : this.processPreviousResults(previousResults, await this.inputAddresses(input));
229
245
  const witness = asWitnessInstance(task.module);
230
246
  if (witness) {
247
+ await this.emit("taskStart", {
248
+ address: witness.address,
249
+ inPayloads: inPayloadsFound,
250
+ module: this
251
+ });
231
252
  const observed = await witness.observe(inPayloadsFound);
232
253
  this.logger?.debug(`observed [${witness.id}]: ${JSON.stringify(observed)}`);
254
+ await this.emit("taskEnd", {
255
+ address: witness.address,
256
+ inPayloads: inPayloadsFound,
257
+ module: this,
258
+ outPayloads: observed
259
+ });
233
260
  return [
234
261
  witness.address,
235
262
  observed
@@ -237,8 +264,19 @@ var MemorySentinel = class extends AbstractSentinel {
237
264
  }
238
265
  const diviner = asDivinerInstance(task.module);
239
266
  if (diviner) {
267
+ await this.emit("taskStart", {
268
+ address: diviner.address,
269
+ inPayloads: inPayloadsFound,
270
+ module: this
271
+ });
240
272
  const divined = await diviner.divine(inPayloadsFound);
241
273
  this.logger?.debug(`divined [${diviner.id}]: ${JSON.stringify(divined)}`);
274
+ await this.emit("taskEnd", {
275
+ address: diviner.address,
276
+ inPayloads: inPayloadsFound,
277
+ module: this,
278
+ outPayloads: divined
279
+ });
242
280
  return [
243
281
  diviner.address,
244
282
  divined
@@ -246,8 +284,19 @@ var MemorySentinel = class extends AbstractSentinel {
246
284
  }
247
285
  const sentinel = asSentinelInstance(task.module);
248
286
  if (sentinel) {
287
+ await this.emit("taskStart", {
288
+ address: sentinel.address,
289
+ inPayloads: inPayloadsFound,
290
+ module: this
291
+ });
249
292
  const reported = await sentinel.report(inPayloadsFound);
250
293
  this.logger?.debug(`reported [${sentinel.id}]: ${JSON.stringify(reported)}`);
294
+ await this.emit("taskEnd", {
295
+ address: sentinel.address,
296
+ inPayloads: inPayloadsFound,
297
+ module: this,
298
+ outPayloads: reported
299
+ });
251
300
  return [
252
301
  sentinel.address,
253
302
  reported
@@ -268,21 +317,13 @@ var MemorySentinel = class extends AbstractSentinel {
268
317
  }
269
318
  }
270
319
  this.logger?.debug(`generateResults:out: ${JSON.stringify(finalResult)}`);
320
+ await this.emit("jobEnd", {
321
+ finalResult,
322
+ inPayloads,
323
+ module: this
324
+ });
271
325
  return finalResult;
272
326
  }
273
- async inputAddresses(input) {
274
- if (Array.isArray(input)) {
275
- return (await Promise.all(input.map(async (inputItem) => await this.inputAddresses(inputItem)))).flat();
276
- } else {
277
- const resolved = await this.resolve(input);
278
- return resolved ? [
279
- resolved.address
280
- ] : [];
281
- }
282
- }
283
- processPreviousResults(payloads, inputs) {
284
- return inputs.flatMap((input) => payloads[input] ?? []);
285
- }
286
327
  };
287
328
  export {
288
329
  MemorySentinel,