@webda/async 2.0.0-beta.3 → 2.0.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.
- package/lib/index.d.ts +4 -4
- package/lib/index.js +4 -20
- package/lib/index.js.map +1 -1
- package/lib/models.js +4 -9
- package/lib/models.js.map +1 -1
- package/lib/services/asyncjobservice.d.ts +3 -4
- package/lib/services/asyncjobservice.js +160 -182
- package/lib/services/asyncjobservice.js.map +1 -1
- package/lib/services/localrunner.d.ts +4 -3
- package/lib/services/localrunner.js +48 -54
- package/lib/services/localrunner.js.map +1 -1
- package/lib/services/runner.d.ts +3 -3
- package/lib/services/runner.js +6 -12
- package/lib/services/runner.js.map +1 -1
- package/package.json +13 -10
- package/webda.module.json +448 -2
package/lib/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export * from "./models";
|
|
2
|
-
export * from "./services/asyncjobservice";
|
|
3
|
-
export * from "./services/runner";
|
|
4
|
-
export * from "./services/localrunner";
|
|
1
|
+
export * from "./models.js";
|
|
2
|
+
export * from "./services/asyncjobservice.js";
|
|
3
|
+
export * from "./services/runner.js";
|
|
4
|
+
export * from "./services/localrunner.js";
|
package/lib/index.js
CHANGED
|
@@ -1,21 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./models"), exports);
|
|
18
|
-
__exportStar(require("./services/asyncjobservice"), exports);
|
|
19
|
-
__exportStar(require("./services/runner"), exports);
|
|
20
|
-
__exportStar(require("./services/localrunner"), exports);
|
|
1
|
+
export * from "./models.js";
|
|
2
|
+
export * from "./services/asyncjobservice.js";
|
|
3
|
+
export * from "./services/runner.js";
|
|
4
|
+
export * from "./services/localrunner.js";
|
|
21
5
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC"}
|
package/lib/models.js
CHANGED
|
@@ -1,19 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AsyncAction = exports.WebdaAsyncAction = void 0;
|
|
4
|
-
const core_1 = require("@webda/core");
|
|
1
|
+
import { CoreModel } from "@webda/core";
|
|
5
2
|
/**
|
|
6
3
|
* Define here a model that can be used along with Store service
|
|
7
4
|
* @WebdaModel
|
|
8
5
|
*/
|
|
9
|
-
class AsyncAction extends
|
|
6
|
+
export default class AsyncAction extends CoreModel {
|
|
10
7
|
}
|
|
11
|
-
exports.default = AsyncAction;
|
|
12
|
-
exports.AsyncAction = AsyncAction;
|
|
13
8
|
/**
|
|
14
9
|
* Define a Webda Async Action
|
|
15
10
|
*/
|
|
16
|
-
class WebdaAsyncAction extends AsyncAction {
|
|
11
|
+
export class WebdaAsyncAction extends AsyncAction {
|
|
17
12
|
}
|
|
18
|
-
|
|
13
|
+
export { AsyncAction };
|
|
19
14
|
//# sourceMappingURL=models.js.map
|
package/lib/models.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAyBxC;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,SAAS;CAuDjD;AAED;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,WAAW;CAShD;AAED,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { CloudBinary, Context, Queue, RequestFilter, Service, ServiceParameters, Store } from "@webda/core";
|
|
2
|
-
import { AsyncAction, AsyncActionQueueItem } from "../models";
|
|
3
|
-
import { Runner } from "./runner";
|
|
2
|
+
import { AsyncAction, AsyncActionQueueItem } from "../models.js";
|
|
3
|
+
import { Runner } from "./runner.js";
|
|
4
4
|
/**
|
|
5
5
|
* Represent a Job information as you will find in env
|
|
6
6
|
*/
|
|
@@ -131,8 +131,7 @@ export default class AsyncJobService<T extends AsyncJobServiceParameters = Async
|
|
|
131
131
|
* @returns
|
|
132
132
|
*/
|
|
133
133
|
getHeaders(jobInfo: JobInfo): {
|
|
134
|
-
|
|
135
|
-
"X-Job-Time": string;
|
|
134
|
+
[key: string]: string;
|
|
136
135
|
};
|
|
137
136
|
/**
|
|
138
137
|
* Wrap async job and call the job status hook
|
|
@@ -1,40 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.AsyncJobService = exports.AsyncJobServiceParameters = void 0;
|
|
13
|
-
const core_1 = require("@webda/core");
|
|
14
|
-
const axios_1 = require("axios");
|
|
15
|
-
const crypto = require("crypto");
|
|
16
|
-
const uuid_1 = require("uuid");
|
|
17
|
-
const runner_1 = require("./runner");
|
|
1
|
+
import { Service, ServiceParameters } from "@webda/core";
|
|
2
|
+
import axios from "axios";
|
|
3
|
+
import * as crypto from "crypto";
|
|
4
|
+
import { v4 as uuidv4 } from "uuid";
|
|
5
|
+
import { Runner } from "./runner.js";
|
|
18
6
|
/**
|
|
19
7
|
* @inheritdoc
|
|
20
8
|
*/
|
|
21
|
-
class AsyncJobServiceParameters extends
|
|
9
|
+
export class AsyncJobServiceParameters extends ServiceParameters {
|
|
22
10
|
constructor(params) {
|
|
23
|
-
var _a, _b, _c, _d;
|
|
24
11
|
super(params);
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
12
|
+
this.url ?? (this.url = "/async/jobs");
|
|
13
|
+
this.queue ?? (this.queue = "AsyncActionsQueue");
|
|
14
|
+
this.store ?? (this.store = "AsyncActions");
|
|
15
|
+
this.runners ?? (this.runners = []);
|
|
29
16
|
}
|
|
30
17
|
}
|
|
31
|
-
exports.AsyncJobServiceParameters = AsyncJobServiceParameters;
|
|
32
18
|
/**
|
|
33
19
|
* AsyncService allows you to launch jobs and report status
|
|
34
20
|
*
|
|
35
21
|
* @WebdaModda
|
|
36
22
|
*/
|
|
37
|
-
class AsyncJobService extends
|
|
23
|
+
export default class AsyncJobService extends Service {
|
|
38
24
|
/**
|
|
39
25
|
* @inheritdoc
|
|
40
26
|
*/
|
|
@@ -91,128 +77,119 @@ class AsyncJobService extends core_1.Service {
|
|
|
91
77
|
/**
|
|
92
78
|
* Allow job status report url
|
|
93
79
|
*/
|
|
94
|
-
checkRequest(context) {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
return false;
|
|
103
|
-
});
|
|
80
|
+
async checkRequest(context) {
|
|
81
|
+
const url = context.getHttpContext().getRelativeUri();
|
|
82
|
+
if (url.startsWith(this.parameters.url)) {
|
|
83
|
+
// Allow status url to be called without other mechanism
|
|
84
|
+
await this.verifyJobRequest(context);
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
return false;
|
|
104
88
|
}
|
|
105
89
|
/**
|
|
106
90
|
*
|
|
107
91
|
* @param context
|
|
108
92
|
* @param action
|
|
109
93
|
*/
|
|
110
|
-
verifyJobRequest(context) {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
return action;
|
|
132
|
-
});
|
|
94
|
+
async verifyJobRequest(context) {
|
|
95
|
+
const jobId = context.getHttpContext().getUniqueHeader("X-Job-Id");
|
|
96
|
+
if (!jobId) {
|
|
97
|
+
this.log("TRACE", "Require Job Id");
|
|
98
|
+
throw 404;
|
|
99
|
+
}
|
|
100
|
+
const action = await this.store.get(jobId);
|
|
101
|
+
if (!action) {
|
|
102
|
+
this.log("TRACE", `Unknown Job Id '${jobId}'`);
|
|
103
|
+
throw 404;
|
|
104
|
+
}
|
|
105
|
+
const jobTime = context.getHttpContext().getUniqueHeader("X-Job-Time");
|
|
106
|
+
const jobHash = context.getHttpContext().getUniqueHeader("X-Job-Hash");
|
|
107
|
+
// Ensure hash mac is correct
|
|
108
|
+
if (jobHash !== crypto.createHmac(AsyncJobService.HMAC_ALGO, action.__secretKey).update(jobTime).digest("hex")) {
|
|
109
|
+
this.log("TRACE", "Invalid Job HMAC");
|
|
110
|
+
throw 403;
|
|
111
|
+
}
|
|
112
|
+
// Set the context extension
|
|
113
|
+
context.setExtension("asyncJob", action);
|
|
114
|
+
return action;
|
|
133
115
|
}
|
|
134
116
|
/**
|
|
135
117
|
* Status hook for job report
|
|
136
118
|
*
|
|
137
119
|
* Only updates specific fields: status, errorMessage, statusDetails, results, logs (appending)
|
|
138
120
|
*/
|
|
139
|
-
statusHook(context) {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
121
|
+
async statusHook(context) {
|
|
122
|
+
const action = await this.verifyJobRequest(context);
|
|
123
|
+
const body = await context.getRequestBody();
|
|
124
|
+
action._lastJobUpdate = Number.parseInt(context.getHttpContext().getUniqueHeader("X-Job-Time")) || 0;
|
|
125
|
+
if (Date.now() - action._lastJobUpdate > 60) {
|
|
126
|
+
action._lastJobUpdate = Date.now();
|
|
127
|
+
}
|
|
128
|
+
if (body.logs && Array.isArray(body.logs)) {
|
|
129
|
+
action.logs.push(...body.logs);
|
|
130
|
+
// Prevent having too much logs
|
|
131
|
+
if (action.logs.length > 100) {
|
|
132
|
+
action.logs = action.logs.slice(-100);
|
|
146
133
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
}
|
|
134
|
+
}
|
|
135
|
+
["status", "errorMessage", "statusDetails", "results"].forEach(k => {
|
|
136
|
+
if (body[k] !== undefined) {
|
|
137
|
+
// @ts-ignore
|
|
138
|
+
action[k] = body[k];
|
|
153
139
|
}
|
|
154
|
-
["status", "errorMessage", "statusDetails", "results"].forEach(k => {
|
|
155
|
-
if (body[k] !== undefined) {
|
|
156
|
-
action[k] = body[k];
|
|
157
|
-
}
|
|
158
|
-
});
|
|
159
|
-
yield this.store.save(action);
|
|
160
|
-
context.write(Object.assign(Object.assign({}, action), { logs: undefined, statusDetails: undefined }));
|
|
161
140
|
});
|
|
141
|
+
await this.store.save(action);
|
|
142
|
+
context.write({ ...action, logs: undefined, statusDetails: undefined });
|
|
162
143
|
}
|
|
163
144
|
/**
|
|
164
145
|
* Worker
|
|
165
146
|
*
|
|
166
147
|
* This will launch actions based on defined runners
|
|
167
148
|
*/
|
|
168
|
-
worker() {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
return this.queue.consume(this.handleEvent.bind(this));
|
|
174
|
-
});
|
|
149
|
+
async worker() {
|
|
150
|
+
if (this.runners.length === 0) {
|
|
151
|
+
throw new Error(`AsyncJobService.worker requires runners`);
|
|
152
|
+
}
|
|
153
|
+
return this.queue.consume(this.handleEvent.bind(this));
|
|
175
154
|
}
|
|
176
155
|
/**
|
|
177
156
|
* Handle one event from the queue and launch the job
|
|
178
157
|
* @param event
|
|
179
158
|
*/
|
|
180
|
-
handleEvent(event) {
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
break;
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
// Fallback if needed
|
|
191
|
-
if (selectedRunner === undefined && this.parameters.fallbackOnFirst) {
|
|
192
|
-
selectedRunner = this.runners[0];
|
|
193
|
-
}
|
|
194
|
-
if (selectedRunner === undefined) {
|
|
195
|
-
yield this.store.patch({
|
|
196
|
-
uuid: event.uuid,
|
|
197
|
-
status: "ERROR",
|
|
198
|
-
errorMessage: `No runner found for the job`
|
|
199
|
-
});
|
|
200
|
-
return;
|
|
159
|
+
async handleEvent(event) {
|
|
160
|
+
let selectedRunner;
|
|
161
|
+
// Take first to acknowledge the job
|
|
162
|
+
for (let runner of this.runners) {
|
|
163
|
+
if (runner.handleType(event.type)) {
|
|
164
|
+
selectedRunner = runner;
|
|
165
|
+
break;
|
|
201
166
|
}
|
|
202
|
-
|
|
167
|
+
}
|
|
168
|
+
// Fallback if needed
|
|
169
|
+
if (selectedRunner === undefined && this.parameters.fallbackOnFirst) {
|
|
170
|
+
selectedRunner = this.runners[0];
|
|
171
|
+
}
|
|
172
|
+
if (selectedRunner === undefined) {
|
|
173
|
+
await this.store.patch({
|
|
203
174
|
uuid: event.uuid,
|
|
204
|
-
status: "
|
|
205
|
-
|
|
206
|
-
const action = yield this.store.get(event.uuid);
|
|
207
|
-
const info = {
|
|
208
|
-
JOB_SECRET_KEY: action.__secretKey,
|
|
209
|
-
JOB_ID: action.getUuid(),
|
|
210
|
-
JOB_HOOK: this.getWebda().getApiUrl(this.parameters.url),
|
|
211
|
-
JOB_ORCHESTRATOR: this.getName()
|
|
212
|
-
};
|
|
213
|
-
yield action.update({
|
|
214
|
-
job: yield selectedRunner.launchAction(action, info)
|
|
175
|
+
status: "ERROR",
|
|
176
|
+
errorMessage: `No runner found for the job`
|
|
215
177
|
});
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
await this.store.patch({
|
|
181
|
+
uuid: event.uuid,
|
|
182
|
+
status: "STARTING"
|
|
183
|
+
});
|
|
184
|
+
const action = await this.store.get(event.uuid);
|
|
185
|
+
const info = {
|
|
186
|
+
JOB_SECRET_KEY: action.__secretKey,
|
|
187
|
+
JOB_ID: action.getUuid(),
|
|
188
|
+
JOB_HOOK: this.getWebda().getApiUrl(this.parameters.url),
|
|
189
|
+
JOB_ORCHESTRATOR: this.getName()
|
|
190
|
+
};
|
|
191
|
+
await action.update({
|
|
192
|
+
job: await selectedRunner.launchAction(action, info)
|
|
216
193
|
});
|
|
217
194
|
}
|
|
218
195
|
/**
|
|
@@ -220,17 +197,15 @@ class AsyncJobService extends core_1.Service {
|
|
|
220
197
|
* @param action
|
|
221
198
|
* @returns
|
|
222
199
|
*/
|
|
223
|
-
launchAction(action) {
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
return this.queue.sendMessage({ uuid: action.getUuid(), __secretKey: action.__secretKey, type: action.type });
|
|
233
|
-
});
|
|
200
|
+
async launchAction(action) {
|
|
201
|
+
action.status = "QUEUED";
|
|
202
|
+
action.type = action.constructor.name;
|
|
203
|
+
action.__secretKey = uuidv4();
|
|
204
|
+
await this.store.save(action);
|
|
205
|
+
if (this.parameters.localLaunch) {
|
|
206
|
+
return this.handleEvent({ uuid: action.getUuid(), __secretKey: action.__secretKey, type: action.type });
|
|
207
|
+
}
|
|
208
|
+
return this.queue.sendMessage({ uuid: action.getUuid(), __secretKey: action.__secretKey, type: action.type });
|
|
234
209
|
}
|
|
235
210
|
/**
|
|
236
211
|
* Return headers to request status hook
|
|
@@ -252,70 +227,73 @@ class AsyncJobService extends core_1.Service {
|
|
|
252
227
|
/**
|
|
253
228
|
* Wrap async job and call the job status hook
|
|
254
229
|
*/
|
|
255
|
-
runWebdaAsyncAction(jobInfo
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
230
|
+
async runWebdaAsyncAction(jobInfo) {
|
|
231
|
+
// Get it from environment
|
|
232
|
+
if (jobInfo === undefined) {
|
|
233
|
+
jobInfo = {};
|
|
234
|
+
Object.keys(process.env)
|
|
235
|
+
.filter(k => k.startsWith("JOB_"))
|
|
236
|
+
// @ts-ignore
|
|
237
|
+
.forEach((k) => (jobInfo[k] = process.env[k]));
|
|
238
|
+
}
|
|
239
|
+
// Ensure correct context
|
|
240
|
+
if (!jobInfo.JOB_ORCHESTRATOR || !jobInfo.JOB_ID || !jobInfo.JOB_SECRET_KEY || !jobInfo.JOB_HOOK) {
|
|
241
|
+
throw new Error("Cannot run AsyncAction without context");
|
|
242
|
+
}
|
|
243
|
+
// If we are not the target redirect to the right one
|
|
244
|
+
if (jobInfo.JOB_ORCHESTRATOR !== this.getName()) {
|
|
245
|
+
return this.getService(jobInfo.JOB_ORCHESTRATOR).runWebdaAsyncAction(jobInfo);
|
|
246
|
+
}
|
|
247
|
+
// Get action info by calling the hook
|
|
248
|
+
let action = (await axios.post(jobInfo.JOB_HOOK, {
|
|
249
|
+
agent: {
|
|
250
|
+
...Runner.getAgentInfo(),
|
|
251
|
+
nodeVersion: process.version
|
|
252
|
+
},
|
|
253
|
+
status: "RUNNING"
|
|
254
|
+
}, {
|
|
255
|
+
headers: this.getHeaders(jobInfo)
|
|
256
|
+
})).data;
|
|
257
|
+
let results;
|
|
258
|
+
try {
|
|
259
|
+
// Check it contains the right info
|
|
260
|
+
if (!action.method || !action.serviceName) {
|
|
261
|
+
throw new Error("WebdaAsyncAction must have method and serviceName defined at least");
|
|
263
262
|
}
|
|
264
|
-
//
|
|
265
|
-
|
|
266
|
-
|
|
263
|
+
// Call the service[method](...args)
|
|
264
|
+
let service = this.getService(action.serviceName);
|
|
265
|
+
if (!service) {
|
|
266
|
+
throw new Error(`WebdaAsyncAction Service '${action.serviceName}' not found: mismatch app version`);
|
|
267
267
|
}
|
|
268
|
-
//
|
|
269
|
-
if (
|
|
270
|
-
|
|
268
|
+
// @ts-ignore
|
|
269
|
+
if (!service[action.method]) {
|
|
270
|
+
throw new Error(`WebdaAsyncAction Method '${action.method}' not found in service ${action.serviceName}: mismatch app version`);
|
|
271
271
|
}
|
|
272
|
-
//
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
try {
|
|
281
|
-
// Check it contains the right info
|
|
282
|
-
if (!action.method || !action.serviceName) {
|
|
283
|
-
throw new Error("WebdaAsyncAction must have method and serviceName defined at least");
|
|
284
|
-
}
|
|
285
|
-
// Call the service[method](...args)
|
|
286
|
-
let service = this.getService(action.serviceName);
|
|
287
|
-
if (!service) {
|
|
288
|
-
throw new Error(`WebdaAsyncAction Service '${action.serviceName}' not found: mismatch app version`);
|
|
289
|
-
}
|
|
290
|
-
if (!service[action.method]) {
|
|
291
|
-
throw new Error(`WebdaAsyncAction Method '${action.method}' not found in service ${action.serviceName}: mismatch app version`);
|
|
292
|
-
}
|
|
293
|
-
results = yield service[action.method](...action.arguments);
|
|
294
|
-
}
|
|
295
|
-
catch (err) {
|
|
296
|
-
// Job is in error
|
|
297
|
-
yield axios_1.default.post(jobInfo.JOB_HOOK, {
|
|
298
|
-
errorMessage: err.message,
|
|
299
|
-
status: "ERROR"
|
|
300
|
-
}, {
|
|
301
|
-
headers: this.getHeaders(jobInfo)
|
|
302
|
-
});
|
|
303
|
-
return;
|
|
304
|
-
}
|
|
305
|
-
// Update status
|
|
306
|
-
yield axios_1.default.post(jobInfo.JOB_HOOK, {
|
|
307
|
-
results,
|
|
308
|
-
status: "SUCCESS"
|
|
272
|
+
// @ts-ignore
|
|
273
|
+
results = await service[action.method](...(action.arguments || []));
|
|
274
|
+
}
|
|
275
|
+
catch (err) {
|
|
276
|
+
// Job is in error
|
|
277
|
+
await axios.post(jobInfo.JOB_HOOK, {
|
|
278
|
+
errorMessage: err?.message,
|
|
279
|
+
status: "ERROR"
|
|
309
280
|
}, {
|
|
310
281
|
headers: this.getHeaders(jobInfo)
|
|
311
282
|
});
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
// Update status
|
|
286
|
+
await axios.post(jobInfo.JOB_HOOK, {
|
|
287
|
+
results,
|
|
288
|
+
status: "SUCCESS"
|
|
289
|
+
}, {
|
|
290
|
+
headers: this.getHeaders(jobInfo)
|
|
312
291
|
});
|
|
313
292
|
}
|
|
314
293
|
}
|
|
315
|
-
exports.default = AsyncJobService;
|
|
316
|
-
exports.AsyncJobService = AsyncJobService;
|
|
317
294
|
/**
|
|
318
295
|
* HMAC Algorithm used for simple auth
|
|
319
296
|
*/
|
|
320
297
|
AsyncJobService.HMAC_ALGO = "sha256";
|
|
298
|
+
export { AsyncJobService };
|
|
321
299
|
//# sourceMappingURL=asyncjobservice.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asyncjobservice.js","sourceRoot":"","sources":["../../src/services/asyncjobservice.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"asyncjobservice.js","sourceRoot":"","sources":["../../src/services/asyncjobservice.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { ServiceParameters } from "@webda/core";
|
|
3
3
|
import { SpawnOptions } from "child_process";
|
|
4
|
-
import { AsyncAction } from "../models";
|
|
5
|
-
import { JobInfo } from "./asyncjobservice";
|
|
6
|
-
import { AgentInfo, Runner, RunnerParameters } from "./runner";
|
|
4
|
+
import { AsyncAction } from "../models.js";
|
|
5
|
+
import { JobInfo } from "./asyncjobservice.js";
|
|
6
|
+
import { AgentInfo, Runner, RunnerParameters } from "./runner.js";
|
|
7
7
|
export declare class LocalRunnerParameters extends RunnerParameters {
|
|
8
8
|
/**
|
|
9
9
|
* Command to launch
|
|
@@ -42,6 +42,7 @@ export default class LocalRunner<T extends LocalRunnerParameters = LocalRunnerPa
|
|
|
42
42
|
* @inheritdoc
|
|
43
43
|
*/
|
|
44
44
|
loadParameters(params: any): ServiceParameters;
|
|
45
|
+
spawn(command: string, args: string[], options?: SpawnOptions | undefined): import("child_process").ChildProcess;
|
|
45
46
|
/**
|
|
46
47
|
* @inheritdoc
|
|
47
48
|
*/
|