@webda/async 4.0.0-beta.2 → 4.0.0-beta.4

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 (62) hide show
  1. package/README.md +89 -4
  2. package/lib/{models.d.ts → asyncaction.model.d.ts} +75 -37
  3. package/lib/asyncaction.model.d.ts.map +1 -0
  4. package/lib/asyncaction.model.js +269 -0
  5. package/lib/asyncaction.model.js.map +1 -0
  6. package/lib/index.d.ts +6 -4
  7. package/lib/index.d.ts.map +1 -1
  8. package/lib/index.js +6 -4
  9. package/lib/index.js.map +1 -1
  10. package/lib/services/asyncevents.service.d.ts +154 -0
  11. package/lib/services/asyncevents.service.d.ts.map +1 -0
  12. package/lib/services/asyncevents.service.js +219 -0
  13. package/lib/services/asyncevents.service.js.map +1 -0
  14. package/lib/services/{asyncjobservice.d.ts → asyncjobservice.service.d.ts} +78 -61
  15. package/lib/services/asyncjobservice.service.d.ts.map +1 -0
  16. package/lib/services/asyncjobservice.service.js +584 -0
  17. package/lib/services/asyncjobservice.service.js.map +1 -0
  18. package/lib/services/{localrunner.d.ts → localrunner.service.d.ts} +24 -10
  19. package/lib/services/localrunner.service.d.ts.map +1 -0
  20. package/lib/services/localrunner.service.js +87 -0
  21. package/lib/services/localrunner.service.js.map +1 -0
  22. package/lib/services/{runner.d.ts → runner.service.d.ts} +17 -12
  23. package/lib/services/runner.service.d.ts.map +1 -0
  24. package/lib/services/{runner.js → runner.service.js} +16 -13
  25. package/lib/services/runner.service.js.map +1 -0
  26. package/lib/services/servicerunner.service.d.ts +105 -0
  27. package/lib/services/servicerunner.service.d.ts.map +1 -0
  28. package/lib/services/servicerunner.service.js +131 -0
  29. package/lib/services/servicerunner.service.js.map +1 -0
  30. package/package.json +32 -42
  31. package/webda.module.json +1925 -890
  32. package/lib/models.d.ts.map +0 -1
  33. package/lib/models.js +0 -179
  34. package/lib/models.js.map +0 -1
  35. package/lib/models.spec.d.ts +0 -7
  36. package/lib/models.spec.d.ts.map +0 -1
  37. package/lib/models.spec.js +0 -64
  38. package/lib/models.spec.js.map +0 -1
  39. package/lib/services/asyncjobservice.d.ts.map +0 -1
  40. package/lib/services/asyncjobservice.js +0 -469
  41. package/lib/services/asyncjobservice.js.map +0 -1
  42. package/lib/services/asyncjobservice.spec.d.ts +0 -2
  43. package/lib/services/asyncjobservice.spec.d.ts.map +0 -1
  44. package/lib/services/asyncjobservice.spec.js +0 -561
  45. package/lib/services/asyncjobservice.spec.js.map +0 -1
  46. package/lib/services/localrunner.d.ts.map +0 -1
  47. package/lib/services/localrunner.js +0 -70
  48. package/lib/services/localrunner.js.map +0 -1
  49. package/lib/services/localrunner.spec.d.ts +0 -2
  50. package/lib/services/localrunner.spec.d.ts.map +0 -1
  51. package/lib/services/localrunner.spec.js +0 -113
  52. package/lib/services/localrunner.spec.js.map +0 -1
  53. package/lib/services/runner.d.ts.map +0 -1
  54. package/lib/services/runner.js.map +0 -1
  55. package/lib/services/servicerunner.d.ts +0 -68
  56. package/lib/services/servicerunner.d.ts.map +0 -1
  57. package/lib/services/servicerunner.js +0 -97
  58. package/lib/services/servicerunner.js.map +0 -1
  59. package/lib/services/servicerunner.spec.d.ts +0 -2
  60. package/lib/services/servicerunner.spec.d.ts.map +0 -1
  61. package/lib/services/servicerunner.spec.js +0 -111
  62. package/lib/services/servicerunner.spec.js.map +0 -1
@@ -0,0 +1,154 @@
1
+ import { Queue, Service, ServiceParameters } from "@webda/core";
2
+ import type { ModelClass } from "@webda/core";
3
+ /**
4
+ * AsyncEvent representation
5
+ */
6
+ export declare class AsyncEvent {
7
+ /**
8
+ * Service emitted the event
9
+ */
10
+ service: string;
11
+ /**
12
+ * Type of event
13
+ */
14
+ type: string;
15
+ /**
16
+ * Payload of the event
17
+ */
18
+ payload: any;
19
+ /**
20
+ * Time
21
+ */
22
+ time: Date;
23
+ /**
24
+ * Used when serializing a service
25
+ */
26
+ static ServiceTag: string;
27
+ /**
28
+ * @param service - the emitter: a service, a model class or its serialized name
29
+ * @param type - the event type
30
+ * @param payload - the event payload
31
+ */
32
+ constructor(service: string | Service | ModelClass, type: string, payload?: any);
33
+ /**
34
+ * Allow payload to contain Service but do not serialize them
35
+ * replacing them by a #Webda:Service:${service.getName()} so it
36
+ * can be revived
37
+ *
38
+ * @returns the serializable event
39
+ */
40
+ toJSON(): this & {
41
+ payload: string;
42
+ };
43
+ /**
44
+ * Deserialize from the queue, reviving any detected service
45
+ *
46
+ * @param data - the serialized event
47
+ * @returns the event
48
+ */
49
+ static fromQueue(data: any): AsyncEvent;
50
+ /**
51
+ * Mapper name
52
+ * @returns the mapper key
53
+ */
54
+ getMapper(): string;
55
+ }
56
+ /**
57
+ * Queues by name
58
+ */
59
+ interface QueueMap {
60
+ [key: string]: Queue;
61
+ }
62
+ /**
63
+ * @inheritdoc
64
+ */
65
+ export declare class EventServiceParameters extends ServiceParameters {
66
+ /**
67
+ * Queues to post async events to
68
+ */
69
+ queues?: {
70
+ [key: string]: string;
71
+ };
72
+ /**
73
+ * Make the event sending asynchronous
74
+ */
75
+ sync?: boolean;
76
+ /**
77
+ * @override
78
+ * @param params - the input parameters
79
+ * @returns this
80
+ */
81
+ load(params?: any): this;
82
+ }
83
+ /**
84
+ * @category CoreServices
85
+ * @WebdaModda AsyncEvents
86
+ */
87
+ declare class EventService<T extends EventServiceParameters = EventServiceParameters> extends Service<T> {
88
+ _callbacks: any;
89
+ _queues: QueueMap;
90
+ _defaultQueue: string;
91
+ _async: boolean;
92
+ /**
93
+ * Resolve the queues
94
+ * @returns this
95
+ */
96
+ resolve(): this;
97
+ /**
98
+ * Bind a asynchronous event
99
+ *
100
+ * ```mermaid
101
+ * sequenceDiagram
102
+ * participant S as Service
103
+ * participant As as AsyncEventService
104
+ * participant Q as Queue
105
+ * participant Aw as AsyncEventService Worker
106
+ *
107
+ * As->>S: Bind event to a sendQueue listener
108
+ * activate As
109
+ * S->>As: Emit event
110
+ * As->>Q: Push the event to the queue
111
+ * deactivate As
112
+ * Aw->>Q: Consume queue
113
+ * Aw->>Aw: Call the original listener
114
+ * ```
115
+ *
116
+ * @param service - the service or model class emitting the event
117
+ * @param event - the event name
118
+ * @param callback - the listener
119
+ * @param queue - the queue to use, default queue if not specified
120
+ */
121
+ bindAsyncListener(service: Service | ModelClass, event: string, callback: any, queue?: string): void;
122
+ /**
123
+ * Synchronous Listener to proxy to async
124
+ *
125
+ * @param service - the emitter
126
+ * @param type - the event type
127
+ * @param queue - the queue to use
128
+ * @param payload - the event payload
129
+ * @returns the send or handle promise
130
+ */
131
+ pushEvent(service: Service | ModelClass, type: string, queue: string, payload: any): Promise<void>;
132
+ /**
133
+ * Process one event
134
+ *
135
+ * @param event - the event
136
+ * @returns a promise resolved once all listeners are done
137
+ */
138
+ protected handleEvent(event: AsyncEvent): Promise<void>;
139
+ /**
140
+ * Process a serialized event
141
+ * @param event serialized event
142
+ * @returns the handle promise
143
+ */
144
+ protected handleRawEvent(event: AsyncEvent): Promise<void>;
145
+ /**
146
+ * Process asynchronous event on queue
147
+ * @param queue - the queue to consume
148
+ * @returns the consumer promise
149
+ */
150
+ worker(queue?: string): Promise<void>;
151
+ }
152
+ export { EventService };
153
+ export type { QueueMap };
154
+ //# sourceMappingURL=asyncevents.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asyncevents.service.d.ts","sourceRoot":"","sources":["../../src/services/asyncevents.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAoC,MAAM,aAAa,CAAC;AAClG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;GAEG;AACH,qBAAa,UAAU;IACrB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,OAAO,EAAE,GAAG,CAAC;IACb;;OAEG;IACH,IAAI,EAAE,IAAI,CAAC;IAEX;;OAEG;IACH,MAAM,CAAC,UAAU,SAAqB;IAEtC;;;;OAIG;IACH,YAAY,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,GAAQ,EAWlF;IAED;;;;;;OAMG;IACH,MAAM;;MAYL;IAED;;;;;OAKG;IACH,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,cAazB;IAED;;;OAGG;IACH,SAAS,WAER;CACF;AAED;;GAEG;AACH,UAAU,QAAQ;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC;CACtB;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,iBAAiB;IAC3D;;OAEG;IACH,MAAM,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IACnC;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf;;;;OAIG;IACH,IAAI,CAAC,MAAM,GAAE,GAAQ,GAAG,IAAI,CAK3B;CACF;AAED;;;GAGG;AACH,cAAM,YAAY,CAAC,CAAC,SAAS,sBAAsB,GAAG,sBAAsB,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAC;IAC9F,UAAU,EAAE,GAAG,CAAM;IACrB,OAAO,EAAE,QAAQ,CAAM;IACvB,aAAa,EAAE,MAAM,CAAM;IAC3B,MAAM,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,OAAO,IAAI,IAAI,CAiBd;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,KAAA,EAAE,KAAK,CAAC,EAAE,MAAM,QAiBvF;IAED;;;;;;;;OAQG;IACG,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,iBAOvF;IAED;;;;;OAKG;IACH,UAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAY5D;IAED;;;;OAIG;IACH,UAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,iBAE/C;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,GAAE,MAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAIxD;CACF;AAED,OAAO,EAAE,YAAY,EAAE,CAAC;AACxB,YAAY,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,219 @@
1
+ import { Service, ServiceParameters, useDynamicService, useRepository } from "@webda/core";
2
+ /**
3
+ * AsyncEvent representation
4
+ */
5
+ export class AsyncEvent {
6
+ /**
7
+ * @param service - the emitter: a service, a model class or its serialized name
8
+ * @param type - the event type
9
+ * @param payload - the event payload
10
+ */
11
+ constructor(service, type, payload = {}) {
12
+ if (service instanceof Service) {
13
+ this.service = `service:${service.getName()}`;
14
+ }
15
+ else if (typeof service === "string") {
16
+ this.service = service;
17
+ }
18
+ else {
19
+ this.service = `model:${service.name}`;
20
+ }
21
+ this.type = type;
22
+ this.payload = payload;
23
+ this.time = new Date();
24
+ }
25
+ /**
26
+ * Allow payload to contain Service but do not serialize them
27
+ * replacing them by a #Webda:Service:${service.getName()} so it
28
+ * can be revived
29
+ *
30
+ * @returns the serializable event
31
+ */
32
+ toJSON() {
33
+ return {
34
+ ...this,
35
+ payload: JSON.stringify(this.payload, function serviceReplacer(key, value) {
36
+ // Service.toJSON is applied before the replacer, check the raw value
37
+ const raw = key === "" ? value : this[key];
38
+ if (raw instanceof Service) {
39
+ return `${AsyncEvent.ServiceTag}${raw.getName()}`;
40
+ }
41
+ return value;
42
+ })
43
+ };
44
+ }
45
+ /**
46
+ * Deserialize from the queue, reviving any detected service
47
+ *
48
+ * @param data - the serialized event
49
+ * @returns the event
50
+ */
51
+ static fromQueue(data) {
52
+ const evt = new AsyncEvent(data.service, data.type, JSON.parse(data.payload, (_key, value) => {
53
+ if (typeof value === "string" && value.startsWith(AsyncEvent.ServiceTag)) {
54
+ return useDynamicService(value.substring(AsyncEvent.ServiceTag.length));
55
+ }
56
+ return value;
57
+ }));
58
+ evt.time = data.time;
59
+ return evt;
60
+ }
61
+ /**
62
+ * Mapper name
63
+ * @returns the mapper key
64
+ */
65
+ getMapper() {
66
+ return this.service + "_" + this.type;
67
+ }
68
+ }
69
+ /**
70
+ * Used when serializing a service
71
+ */
72
+ AsyncEvent.ServiceTag = "#Webda:Service:";
73
+ /**
74
+ * @inheritdoc
75
+ */
76
+ export class EventServiceParameters extends ServiceParameters {
77
+ /**
78
+ * @override
79
+ * @param params - the input parameters
80
+ * @returns this
81
+ */
82
+ load(params = {}) {
83
+ super.load(params);
84
+ this.queues ?? (this.queues = {});
85
+ this.sync ?? (this.sync = false);
86
+ return this;
87
+ }
88
+ }
89
+ /**
90
+ * @category CoreServices
91
+ * @WebdaModda AsyncEvents
92
+ */
93
+ class EventService extends Service {
94
+ constructor() {
95
+ super(...arguments);
96
+ this._callbacks = {};
97
+ this._queues = {};
98
+ this._defaultQueue = "";
99
+ }
100
+ /**
101
+ * Resolve the queues
102
+ * @returns this
103
+ */
104
+ resolve() {
105
+ super.resolve();
106
+ Object.keys(this.parameters.queues).forEach(key => {
107
+ // Define default as first queue
108
+ if (!this._defaultQueue) {
109
+ this._defaultQueue = key;
110
+ }
111
+ this._queues[key] = useDynamicService(this.parameters.queues[key]);
112
+ });
113
+ this._async = !this.parameters.sync;
114
+ // Check we have at least one queue to handle asynchronous
115
+ if (this._async && Object.keys(this._queues).length < 1) {
116
+ this.log("ERROR", "Need at least one queue for async to be ready", this.parameters);
117
+ throw Error("Need at least one queue for async to be ready");
118
+ }
119
+ return this;
120
+ }
121
+ /**
122
+ * Bind a asynchronous event
123
+ *
124
+ * ```mermaid
125
+ * sequenceDiagram
126
+ * participant S as Service
127
+ * participant As as AsyncEventService
128
+ * participant Q as Queue
129
+ * participant Aw as AsyncEventService Worker
130
+ *
131
+ * As->>S: Bind event to a sendQueue listener
132
+ * activate As
133
+ * S->>As: Emit event
134
+ * As->>Q: Push the event to the queue
135
+ * deactivate As
136
+ * Aw->>Q: Consume queue
137
+ * Aw->>Aw: Call the original listener
138
+ * ```
139
+ *
140
+ * @param service - the service or model class emitting the event
141
+ * @param event - the event name
142
+ * @param callback - the listener
143
+ * @param queue - the queue to use, default queue if not specified
144
+ */
145
+ bindAsyncListener(service, event, callback, queue) {
146
+ if (!this._async) {
147
+ throw Error("EventService is not configured for asynchronous");
148
+ }
149
+ if (!queue) {
150
+ queue = this._defaultQueue;
151
+ }
152
+ const mapper = new AsyncEvent(service, event).getMapper();
153
+ if (!this._callbacks[mapper]) {
154
+ if (service instanceof Service) {
155
+ service.on(event, data => this.pushEvent(service, event, queue, data));
156
+ }
157
+ else {
158
+ useRepository(service).on(event, data => this.pushEvent(service, event, queue, data));
159
+ }
160
+ this._callbacks[mapper] = [];
161
+ }
162
+ this._callbacks[mapper].push(callback);
163
+ }
164
+ /**
165
+ * Synchronous Listener to proxy to async
166
+ *
167
+ * @param service - the emitter
168
+ * @param type - the event type
169
+ * @param queue - the queue to use
170
+ * @param payload - the event payload
171
+ * @returns the send or handle promise
172
+ */
173
+ async pushEvent(service, type, queue, payload) {
174
+ const event = new AsyncEvent(service, type, payload);
175
+ if (this._async) {
176
+ return this._queues[queue].sendMessage(event);
177
+ }
178
+ else {
179
+ return this.handleEvent(event);
180
+ }
181
+ }
182
+ /**
183
+ * Process one event
184
+ *
185
+ * @param event - the event
186
+ * @returns a promise resolved once all listeners are done
187
+ */
188
+ async handleEvent(event) {
189
+ if (!this._callbacks[event.getMapper()]) {
190
+ return Promise.reject("Callbacks should not be empty, possible application version mismatch between emitter and worker");
191
+ }
192
+ const promises = [];
193
+ this._callbacks[event.getMapper()].map(executor => {
194
+ promises.push(executor(event.payload, event));
195
+ });
196
+ // Need to handle the failure
197
+ await Promise.all(promises);
198
+ }
199
+ /**
200
+ * Process a serialized event
201
+ * @param event serialized event
202
+ * @returns the handle promise
203
+ */
204
+ async handleRawEvent(event) {
205
+ return this.handleEvent(AsyncEvent.fromQueue(event));
206
+ }
207
+ /**
208
+ * Process asynchronous event on queue
209
+ * @param queue - the queue to consume
210
+ * @returns the consumer promise
211
+ */
212
+ worker(queue = this._defaultQueue) {
213
+ // Avoid loops
214
+ this._async = false;
215
+ return this._queues[queue].consume(this.handleRawEvent.bind(this));
216
+ }
217
+ }
218
+ export { EventService };
219
+ //# sourceMappingURL=asyncevents.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asyncevents.service.js","sourceRoot":"","sources":["../../src/services/asyncevents.service.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,11 @@
1
- import { CancelableLoopPromise, CancelablePromise, Constructor, CoreModelDefinition, CronDefinition, OperationContext, Queue, RequestFilter, Service, ServiceParameters, Store, WebContext } from "@webda/core";
1
+ import { CronDefinition, OperationContext, Queue, RequestFilter, Service, ServiceParameters, WebContext } from "@webda/core";
2
+ import type { ModelClass } from "@webda/core";
2
3
  import * as WebdaQL from "@webda/ql";
4
+ import { CancelableLoopPromise, CancelablePromise } from "@webda/utils";
3
5
  import { WorkerLogLevel } from "@webda/workout";
4
6
  import { JSONSchema7 } from "json-schema";
5
- import { AsyncAction, AsyncActionQueueItem, AsyncOperationAction, AsyncWebdaAction } from "../models.js";
6
- import { Runner } from "./runner.js";
7
+ import { AsyncAction, AsyncActionQueueItem, AsyncOperationAction, AsyncWebdaAction } from "../asyncaction.model.js";
8
+ import { Runner } from "./runner.service.js";
7
9
  /**
8
10
  * Represent a Job information as you will find in env
9
11
  */
@@ -98,22 +100,23 @@ export declare class AsyncJobServiceParameters extends ServiceParameters {
98
100
  * Generated with `webda operations operations.json`
99
101
  */
100
102
  asyncOperationDefinition?: string;
101
- constructor(params: any);
103
+ /**
104
+ * @override
105
+ * @param params - the input parameters
106
+ * @returns this
107
+ */
108
+ load(params?: any): this;
102
109
  }
103
110
  /**
104
111
  * AsyncService allows you to launch jobs and report status
105
112
  *
106
113
  * @WebdaModda
107
114
  */
108
- export default class AsyncJobService<T extends AsyncJobServiceParameters = AsyncJobServiceParameters> extends Service<T> implements RequestFilter {
115
+ export default class AsyncJobService<T extends AsyncJobServiceParameters = AsyncJobServiceParameters> extends Service<T> implements RequestFilter<WebContext> {
109
116
  /**
110
117
  * Queue for execution
111
118
  */
112
119
  protected queue: Queue<AsyncActionQueueItem>;
113
- /**
114
- * Store for async actions
115
- */
116
- protected store: Store<AsyncAction>;
117
120
  /**
118
121
  * Runner to use
119
122
  */
@@ -125,11 +128,11 @@ export default class AsyncJobService<T extends AsyncJobServiceParameters = Async
125
128
  /**
126
129
  * Model to use when launching action
127
130
  */
128
- model: Constructor<AsyncWebdaAction, [string, string, ...any[]]> & CoreModelDefinition<AsyncAction>;
131
+ model: (new (serviceName?: string, method?: string, ...args: any[]) => AsyncWebdaAction) & ModelClass<AsyncWebdaAction>;
129
132
  /**
130
- * Model to use when launching action
133
+ * Model to use when launching operation
131
134
  */
132
- operationModel: Constructor<AsyncOperationAction, [string, OperationContext, WorkerLogLevel?]>;
135
+ operationModel: new (operationId: string, context: OperationContext, logLevel?: WorkerLogLevel) => AsyncOperationAction;
133
136
  /**
134
137
  * Operations definition
135
138
  */
@@ -158,134 +161,148 @@ export default class AsyncJobService<T extends AsyncJobServiceParameters = Async
158
161
  };
159
162
  /**
160
163
  * @inheritdoc
161
- */
162
- loadParameters(params: any): ServiceParameters;
163
- /**
164
- * @inheritdoc
164
+ * @returns this
165
165
  */
166
166
  resolve(): this;
167
167
  /**
168
168
  * Register new operations
169
- * @param operations
169
+ * @param operations - the operations definition
170
170
  */
171
171
  registerOperations(operations: typeof this.operations): void;
172
172
  /**
173
173
  * Allow job status report url
174
+ * @param context - the web context
175
+ * @returns true if the request is a job status report
174
176
  */
175
177
  checkRequest(context: WebContext): Promise<boolean>;
176
178
  /**
177
179
  * Status hook for job report
178
180
  *
179
181
  * Only updates specific fields: status, errorMessage, statusDetails, results, logs (appending)
182
+ * @param context - the web context
180
183
  */
181
184
  protected statusHook(context: WebContext): Promise<void>;
182
185
  /**
183
186
  * Worker
184
187
  *
185
188
  * This will launch actions based on defined runners
189
+ * @returns a cancelable promise
186
190
  */
187
191
  worker(): CancelablePromise<void>;
188
192
  /**
189
193
  * Handle one event from the queue and launch the job
190
- * @param event
194
+ * @param event - the queue item
195
+ * @returns the job promise if any
191
196
  */
192
197
  protected handleEvent(event: AsyncActionQueueItem): Promise<void>;
198
+ /**
199
+ * Absolute url of the status hook remote runners POST their reports to
200
+ *
201
+ * It is this service status route: its request filter lets the job headers through
202
+ * and the HMAC is then verified by the action
203
+ * @returns the hook url
204
+ */
205
+ getHookUrl(): string;
193
206
  /**
194
207
  * Get the job info
195
- * @param action
196
- * @returns
208
+ * @param action - the action
209
+ * @returns the job information
197
210
  */
198
211
  getJobInfo(action: AsyncAction): JobInfo;
199
212
  /**
200
213
  * List available operations through this service
201
- * @param context
214
+ * @param context - the web context
202
215
  */
203
216
  listOperations(context: WebContext<void, {
204
- application: {
205
- name: string;
206
- version: string;
207
- };
208
- operations: {
209
- [key: string]: {
210
- id: string;
211
- input?: string;
212
- output?: string;
213
- };
214
- };
215
- schemas: {
216
- [key: string]: JSONSchema7;
217
- };
218
- } | string[]>): Promise<void>;
217
+ full?: boolean;
218
+ }>): Promise<void>;
219
219
  /**
220
220
  * Call an operation for an external system
221
- * @param context
222
- * @returns
221
+ * @param context - the operation context
222
+ * @returns the launched action
223
223
  */
224
- callOperation(context: OperationContext): Promise<AsyncAction>;
224
+ callOperation(context: OperationContext): Promise<AsyncOperationAction>;
225
+ /**
226
+ * Check the operation exists, is allowed and its input is valid
227
+ * @param context - the operation context
228
+ * @param operationId - the operation id
229
+ */
230
+ checkOperation(context: OperationContext, operationId: string): Promise<void>;
225
231
  /**
226
232
  * Launch an operation through this service
233
+ * @param context - the web context
227
234
  */
228
235
  launchOperation(context: WebContext): Promise<void>;
229
236
  /**
230
237
  * Launch the action asynchronously
231
- * @param action
232
- * @returns
238
+ * @param action - the action
239
+ * @returns the action
233
240
  */
234
- launchAction(action: AsyncAction): Promise<AsyncAction>;
241
+ launchAction<A extends AsyncAction>(action: A): Promise<A>;
235
242
  /**
236
243
  * Schedule action for later execution
237
244
  *
238
- * @param action
239
- * @param timestamp
245
+ * @param action - the action
246
+ * @param timestamp - when to launch it
247
+ * @returns the action
240
248
  */
241
- scheduleAction(action: AsyncAction, timestamp: number): Promise<AsyncAction>;
249
+ scheduleAction<A extends AsyncAction>(action: A, timestamp: number): Promise<A>;
242
250
  /**
243
251
  * Return headers to request status hook
244
252
  *
245
- * @param jobInfo
246
- * @returns
253
+ * @param jobInfo - the job information
254
+ * @returns the headers
247
255
  */
248
256
  getHeaders(jobInfo: JobInfo): {
249
257
  [key: string]: string;
250
258
  };
251
259
  /**
252
260
  * Post hook to a remote url or use local store to update status
253
- * @param jobInfo
254
- * @param message
255
- * @returns
261
+ * @param jobInfo - the job information
262
+ * @param message - the status report
263
+ * @returns the updated action
256
264
  */
257
265
  postHook(jobInfo: JobInfo, message: any): Promise<AsyncWebdaAction>;
258
266
  /**
259
267
  * Launch a service.method as an AsyncAction
260
- * @param serviceName
261
- * @param method
262
- * @param args
268
+ * @param serviceName - the service
269
+ * @param method - the method
270
+ * @param args - the arguments
271
+ * @returns the action
263
272
  */
264
- launchAsAsyncAction(serviceName: string, method: string, ...args: any[]): Promise<AsyncAction>;
273
+ launchAsAsyncAction(serviceName: string, method: string, ...args: any[]): Promise<AsyncWebdaAction>;
265
274
  /**
266
275
  * Execute a service.method as an AsyncAction
267
276
  *
268
277
  * Useful for crontab execution
269
- * @param serviceName
270
- * @param method
271
- * @param args
278
+ * @param serviceName - the service
279
+ * @param method - the method
280
+ * @param args - the arguments
281
+ * @returns the execution promise
272
282
  */
273
283
  executeAsAsyncAction(serviceName: string, method: string, ...args: any[]): Promise<void>;
284
+ /**
285
+ * Run the AsyncAction described by the JOB_* environment variables
286
+ * @returns the execution promise
287
+ */
288
+ runAction(): Promise<void>;
274
289
  /**
275
290
  * Wrap async job and call the job status hook
291
+ * @param jobInfo - the job information, from environment if not provided
292
+ * @returns a promise resolved once the job is reported
276
293
  */
277
294
  runAsyncOperationAction(jobInfo?: JobInfo): Promise<void>;
278
295
  /**
279
296
  * Get the cron callback function
280
- * @param cron
281
- * @returns
297
+ * @param cron - the cron definition
298
+ * @returns the cron callback
282
299
  */
283
300
  getCronExecutor(cron: CronDefinition): () => Promise<void>;
284
301
  /**
285
302
  * Manage scheduled actions and crontab actions
286
- * @returns
303
+ * @returns a cancelable loop promise
287
304
  */
288
305
  scheduler(): CancelableLoopPromise;
289
306
  }
290
307
  export { AsyncJobService };
291
- //# sourceMappingURL=asyncjobservice.d.ts.map
308
+ //# sourceMappingURL=asyncjobservice.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asyncjobservice.service.d.ts","sourceRoot":"","sources":["../../src/services/asyncjobservice.service.ts"],"names":[],"mappings":"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"}