@volcanicminds/backend 0.6.4 → 0.7.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/README.md +156 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/config/general.js +2 -1
- package/dist/lib/config/general.js.map +1 -1
- package/dist/lib/loader/general.js +2 -1
- package/dist/lib/loader/general.js.map +1 -1
- package/dist/lib/loader/router.js +9 -1
- package/dist/lib/loader/router.js.map +1 -1
- package/dist/lib/loader/schedules.js +117 -0
- package/dist/lib/loader/schedules.js.map +1 -0
- package/dist/lib/schedules/test.job.js +25 -0
- package/dist/lib/schedules/test.job.js.map +1 -0
- package/dist/package.json +5 -2
- package/index.d.ts +3 -1
- package/index.ts +19 -1
- package/lib/config/general.ts +2 -1
- package/lib/loader/general.ts +2 -1
- package/lib/loader/router.ts +10 -2
- package/lib/loader/schedules.ts +141 -0
- package/lib/schedules/test.job.ts +12 -0
- package/package.json +5 -2
- package/types/global.d.ts +22 -0
package/README.md
CHANGED
|
@@ -386,3 +386,159 @@ So, in your `routes.ts` (under the section `config`) you'll can use something li
|
|
|
386
386
|
body: { $ref: 'commonSchema#' },
|
|
387
387
|
headers: { $ref: 'commonSchema#' }
|
|
388
388
|
```
|
|
389
|
+
|
|
390
|
+
## Reset tokens on login
|
|
391
|
+
|
|
392
|
+
It's possible to specify that all JWT tokens belonging to the user who logs in are reset at each login. To enable this feature, it's necessary to add or change the property `reset_external_id_on_login` to `true` (the default is `false`).
|
|
393
|
+
|
|
394
|
+
```ts
|
|
395
|
+
// src/config/general.ts
|
|
396
|
+
'use strict'
|
|
397
|
+
|
|
398
|
+
module.exports = {
|
|
399
|
+
name: 'general',
|
|
400
|
+
enable: true,
|
|
401
|
+
options: {
|
|
402
|
+
reset_external_id_on_login: true
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
## Job Scheduler
|
|
408
|
+
|
|
409
|
+
It's possible to add a job scheduler. For more information, go to [Fastify Schedule](https://github.com/fastify/fastify-schedule). To enable this feature, it's necessary to add or change the property `scheduler` to `true` (the default is `false`).
|
|
410
|
+
|
|
411
|
+
```ts
|
|
412
|
+
// src/config/general.ts
|
|
413
|
+
'use strict'
|
|
414
|
+
|
|
415
|
+
module.exports = {
|
|
416
|
+
name: 'general',
|
|
417
|
+
enable: true,
|
|
418
|
+
options: {
|
|
419
|
+
scheduler: true
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
All jobs are to be created and placed in appropriate files under the /src/schedules/ folder.
|
|
425
|
+
Each file name must follow the pattern \*.job.ts (for example, test.job.ts).
|
|
426
|
+
|
|
427
|
+
Inside each job, both the configuration part and the job to be executed must be included using this syntax:
|
|
428
|
+
|
|
429
|
+
```ts
|
|
430
|
+
// src/schedules/test.job.ts
|
|
431
|
+
import { JobSchedule } from '@volcanicminds/backend'
|
|
432
|
+
|
|
433
|
+
export const schedule: JobSchedule = {
|
|
434
|
+
active: true,
|
|
435
|
+
interval: {
|
|
436
|
+
seconds: 2
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
export async function job() {
|
|
441
|
+
log.info('tick job 2 every 2 seconds')
|
|
442
|
+
}
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
The job scheduling can have this configuration:
|
|
446
|
+
|
|
447
|
+
```ts
|
|
448
|
+
export interface JobSchedule {
|
|
449
|
+
active: boolean // boolean (required)
|
|
450
|
+
type?: string // cron|interval, default: interval
|
|
451
|
+
async?: boolean // boolean, default: true
|
|
452
|
+
preventOverrun?: boolean // boolean, default: true
|
|
453
|
+
|
|
454
|
+
cron?: {
|
|
455
|
+
expression?: string // required if type = 'cron', use cron syntax (if not specified, cron will be disabled)
|
|
456
|
+
timezone?: string // optional, like "Europe/Rome" (to test)
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
interval?: {
|
|
460
|
+
days?: number // number, default 0
|
|
461
|
+
hours?: number // number, default 0
|
|
462
|
+
minutes?: number // number, default 0
|
|
463
|
+
seconds?: number // number, default 0
|
|
464
|
+
milliseconds?: number // number, default 0
|
|
465
|
+
runImmediately?: boolean // boolean, default: false
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
The active property is a boolean and is mandatory.
|
|
471
|
+
The `type` property can have values of `cron` or `interval` (default).
|
|
472
|
+
If the type is **cron**, the properties defined under `cron` are also considered.
|
|
473
|
+
If the type is **interval**, the properties defined under `interval` are also considered.
|
|
474
|
+
|
|
475
|
+
For cron type, the `cron.expression` property is mandatory and indicates the scheduling to be executed.
|
|
476
|
+
The `timezone` property is considered experimental and should be defined, for example, as `"Europe/Rome"`.
|
|
477
|
+
|
|
478
|
+
Below an example:
|
|
479
|
+
|
|
480
|
+
```ts
|
|
481
|
+
// src/schedules/test.job.ts
|
|
482
|
+
import { JobSchedule } from '@volcanicminds/backend'
|
|
483
|
+
|
|
484
|
+
export const schedule: JobSchedule = {
|
|
485
|
+
active: true,
|
|
486
|
+
type: 'cron',
|
|
487
|
+
|
|
488
|
+
// Run a task every 2 seconds
|
|
489
|
+
cron: {
|
|
490
|
+
expression: '*/2 * * * * *'
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
Below the cron schema:
|
|
496
|
+
|
|
497
|
+
```
|
|
498
|
+
┌──────────────── (optional) second (0 - 59)
|
|
499
|
+
│ ┌────────────── minute (0 - 59)
|
|
500
|
+
│ │ ┌──────────── hour (0 - 23)
|
|
501
|
+
│ │ │ ┌────────── day of month (1 - 31)
|
|
502
|
+
│ │ │ │ ┌──────── month (1 - 12, January - December)
|
|
503
|
+
│ │ │ │ │ ┌────── day of week (0 - 6, Sunday-Monday, Sunday is equal 0 or 7)
|
|
504
|
+
│ │ │ │ │ │
|
|
505
|
+
│ │ │ │ │ │
|
|
506
|
+
* * * * * *
|
|
507
|
+
|
|
508
|
+
// f.e. for every 2 seconds
|
|
509
|
+
const expression = '*/2 * * * * *'
|
|
510
|
+
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
A useful site that can be used to check a cron configuration is [crontab.guru](https://crontab.guru/)
|
|
514
|
+
|
|
515
|
+
For interval type, the sum of the properties `days, hours, minutes, seconds, milliseconds` (properly converted) must be equal to or greater than 1 second, otherwise the job will not be executed.
|
|
516
|
+
|
|
517
|
+
The `runImmediately` property indicates that the **interval** task will be executed for the first time immediately and not after the defined wait time.
|
|
518
|
+
|
|
519
|
+
Below an example:
|
|
520
|
+
|
|
521
|
+
```ts
|
|
522
|
+
// src/schedules/test.job.ts
|
|
523
|
+
import { JobSchedule } from '@volcanicminds/backend'
|
|
524
|
+
|
|
525
|
+
export const schedule: JobSchedule = {
|
|
526
|
+
active: true,
|
|
527
|
+
type: 'interval',
|
|
528
|
+
|
|
529
|
+
// Run a task every 1h 5m 30s
|
|
530
|
+
interval: {
|
|
531
|
+
days: 0,
|
|
532
|
+
hours: 1,
|
|
533
|
+
minutes: 5,
|
|
534
|
+
seconds: 30,
|
|
535
|
+
milliseconds: 0,
|
|
536
|
+
runImmediately: false
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
```
|
|
540
|
+
|
|
541
|
+
Other properties common to both types of jobs are:
|
|
542
|
+
|
|
543
|
+
- The **async** property, if true, indicates that a task will be executed as an async function.
|
|
544
|
+
- The **preventOverrun** property, if true, prevents the second instance of a task from being started while the first one is still running.
|
package/dist/index.js
CHANGED
|
@@ -52,10 +52,12 @@ const loaderSchemas = __importStar(require("./lib/loader/schemas"));
|
|
|
52
52
|
const loaderTracking = __importStar(require("./lib/loader/tracking"));
|
|
53
53
|
const loaderTranslation = __importStar(require("./lib/loader/translation"));
|
|
54
54
|
const loaderConfig = __importStar(require("./lib/loader/general"));
|
|
55
|
+
const loaderSchedules = __importStar(require("./lib/loader/schedules"));
|
|
55
56
|
const fastify_1 = __importDefault(require("fastify"));
|
|
56
57
|
const jwt_1 = __importDefault(require("@fastify/jwt"));
|
|
57
58
|
const swagger_1 = __importDefault(require("@fastify/swagger"));
|
|
58
59
|
const swagger_ui_1 = __importDefault(require("@fastify/swagger-ui"));
|
|
60
|
+
const schedule_1 = require("@fastify/schedule");
|
|
59
61
|
const cors_1 = __importDefault(require("@fastify/cors"));
|
|
60
62
|
const helmet_1 = __importDefault(require("@fastify/helmet"));
|
|
61
63
|
const compress_1 = __importDefault(require("@fastify/compress"));
|
|
@@ -156,6 +158,16 @@ function addFastifySwagger(server) {
|
|
|
156
158
|
}
|
|
157
159
|
});
|
|
158
160
|
}
|
|
161
|
+
function addFastifySchedule(server) {
|
|
162
|
+
var _a;
|
|
163
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
164
|
+
const { scheduler = false } = ((_a = global.config) === null || _a === void 0 ? void 0 : _a.options) || {};
|
|
165
|
+
if (scheduler) {
|
|
166
|
+
log.trace('Add scheduler plugin');
|
|
167
|
+
yield server.register(schedule_1.fastifySchedule);
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
}
|
|
159
171
|
const start = (decorators) => __awaiter(void 0, void 0, void 0, function* () {
|
|
160
172
|
const begin = new Date().getTime();
|
|
161
173
|
mark.print(logger_1.default);
|
|
@@ -192,6 +204,8 @@ const start = (decorators) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
192
204
|
yield addFastifySwagger(server);
|
|
193
205
|
yield addApolloRouting(server, apollo);
|
|
194
206
|
yield addFastifyRouting(server);
|
|
207
|
+
yield addFastifySchedule(server);
|
|
208
|
+
const schedules = loaderSchedules.load();
|
|
195
209
|
decorators = Object.assign({ userManager: {
|
|
196
210
|
isImplemented() {
|
|
197
211
|
return false;
|
|
@@ -323,6 +337,7 @@ const start = (decorators) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
323
337
|
loadSwagger && log.info(`Swagger ready ✨ at ${address}${process.env.SWAGGER_PREFIX_URL || '/documentation'}`);
|
|
324
338
|
});
|
|
325
339
|
global.server = server;
|
|
340
|
+
yield loaderSchedules.start(server, schedules);
|
|
326
341
|
return server;
|
|
327
342
|
});
|
|
328
343
|
exports.start = start;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEZ,oDAA2B;AAC3B,gBAAM,CAAC,MAAM,EAAE,CAAA;AAEf,uDAA8B;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"general.js","sourceRoot":"","sources":["../../../lib/config/general.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,MAAM,CAAC,OAAO,GAAG;IACf,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE;QACP,0BAA0B,EAAE,KAAK;
|
|
1
|
+
{"version":3,"file":"general.js","sourceRoot":"","sources":["../../../lib/config/general.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,MAAM,CAAC,OAAO,GAAG;IACf,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE;QACP,0BAA0B,EAAE,KAAK;QACjC,SAAS,EAAE,KAAK;KACjB;CACF,CAAA"}
|
|
@@ -8,7 +8,8 @@ function load() {
|
|
|
8
8
|
name: 'general',
|
|
9
9
|
enable: true,
|
|
10
10
|
options: {
|
|
11
|
-
reset_external_id_on_login: false
|
|
11
|
+
reset_external_id_on_login: false,
|
|
12
|
+
scheduler: false
|
|
12
13
|
}
|
|
13
14
|
};
|
|
14
15
|
const patterns = (0, path_1.normalizePatterns)(['..', 'config', 'general.{ts,js}'], ['src', 'config', 'general.{ts,js}']);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"general.js","sourceRoot":"","sources":["../../../lib/loader/general.ts"],"names":[],"mappings":";;;AACA,uCAAgD;AAChD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAE5B,SAAgB,IAAI;IAClB,MAAM,aAAa,GAAkB;QACnC,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE;YACP,0BAA0B,EAAE,KAAK;
|
|
1
|
+
{"version":3,"file":"general.js","sourceRoot":"","sources":["../../../lib/loader/general.ts"],"names":[],"mappings":";;;AACA,uCAAgD;AAChD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAE5B,SAAgB,IAAI;IAClB,MAAM,aAAa,GAAkB;QACnC,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE;YACP,0BAA0B,EAAE,KAAK;YACjC,SAAS,EAAE,KAAK;SACjB;KACF,CAAA;IAED,MAAM,QAAQ,GAAG,IAAA,wBAAiB,EAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAA;IAC7G,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC,CAAA;QAC5C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAS,EAAE,EAAE;YACvC,MAAM,MAAM,GAAkB,OAAO,CAAC,CAAC,CAAC,CAAA;YAExC,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI,EAAE,CAAC;gBACvC,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;gBACpC,aAAa,CAAC,OAAO,mCAChB,aAAa,CAAC,OAAO,GACrB,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAC1B,CAAA;YACH,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAA;IAClD,OAAO,aAAa,CAAA;AACtB,CAAC;AA5BD,oBA4BC"}
|
|
@@ -35,7 +35,15 @@ function load() {
|
|
|
35
35
|
const errors = [];
|
|
36
36
|
const { method: methodCase, path: pathName = '/', handler, config = {}, middlewares = [], roles: rs = [] } = route;
|
|
37
37
|
const rsp = !rs.length ? [roles.public] : rs;
|
|
38
|
-
|
|
38
|
+
let requiredRoles = [];
|
|
39
|
+
try {
|
|
40
|
+
requiredRoles = rsp.some((r) => r.code === roles.admin.code) ? rsp : [...rsp, roles.admin];
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
log.e && log.error(`Error in loading roles for ${methodCase} ${pathName} (${handler})`);
|
|
44
|
+
log.t && log.trace(err);
|
|
45
|
+
config.enable = false;
|
|
46
|
+
}
|
|
39
47
|
const reqAuth = middlewares.some((m) => authMiddlewares.includes(m)) ||
|
|
40
48
|
requiredRoles.every((r) => r.code !== roles.public.code);
|
|
41
49
|
if (!(config === null || config === void 0 ? void 0 : config.security) && reqAuth) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../../lib/loader/router.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,oDAA2B;AAG3B,uCAAgD;AAEhD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAC5B,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAA;AAE5E,SAAgB,IAAI;IAClB,MAAM,WAAW,GAAsB,EAAE,CAAA;IACzC,MAAM,QAAQ,GAAG,IAAA,wBAAiB,EAAC,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAA;IACjH,MAAM,eAAe,GAAG,CAAC,wBAAwB,EAAE,gBAAgB,CAAC,CAAA;IAEpE,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC,CAAA;QAC5C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAS,EAAE,KAAa,EAAE,MAAgB,EAAE,EAAE;YACxE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;YAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;YAG7C,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;YAC3B,MAAM,EAAE,MAAM,GAAG,EAAE,EAAE,MAAM,EAAE,aAAa,GAAG,EAAE,EAAE,GAAG,QAAQ,IAAI,EAAE,CAAA;YAElE,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,MAAM,CAAC,MAAM,gBAAgB,IAAI,EAAE,CAAC,CAAA;YAEhE,MAAM,CAAC,OAAO,CAAC,CAAC,KAAY,EAAE,KAAa,EAAE,EAAE;gBAC7C,MAAM,MAAM,GAAa,EAAE,CAAA;gBAC3B,MAAM,EACJ,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,QAAQ,GAAG,GAAG,EACpB,OAAO,EACP,MAAM,GAAG,EAAiB,EAC1B,WAAW,GAAG,EAAE,EAChB,KAAK,EAAE,EAAE,GAAG,EAAE,EACf,GAAG,KAAK,CAAA;gBAET,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;gBAC5C,
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../../lib/loader/router.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,oDAA2B;AAG3B,uCAAgD;AAEhD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAC5B,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAA;AAE5E,SAAgB,IAAI;IAClB,MAAM,WAAW,GAAsB,EAAE,CAAA;IACzC,MAAM,QAAQ,GAAG,IAAA,wBAAiB,EAAC,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAA;IACjH,MAAM,eAAe,GAAG,CAAC,wBAAwB,EAAE,gBAAgB,CAAC,CAAA;IAEpE,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC,CAAA;QAC5C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAS,EAAE,KAAa,EAAE,MAAgB,EAAE,EAAE;YACxE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;YAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;YAG7C,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;YAC3B,MAAM,EAAE,MAAM,GAAG,EAAE,EAAE,MAAM,EAAE,aAAa,GAAG,EAAE,EAAE,GAAG,QAAQ,IAAI,EAAE,CAAA;YAElE,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,MAAM,CAAC,MAAM,gBAAgB,IAAI,EAAE,CAAC,CAAA;YAEhE,MAAM,CAAC,OAAO,CAAC,CAAC,KAAY,EAAE,KAAa,EAAE,EAAE;gBAC7C,MAAM,MAAM,GAAa,EAAE,CAAA;gBAC3B,MAAM,EACJ,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,QAAQ,GAAG,GAAG,EACpB,OAAO,EACP,MAAM,GAAG,EAAiB,EAC1B,WAAW,GAAG,EAAE,EAChB,KAAK,EAAE,EAAE,GAAG,EAAE,EACf,GAAG,KAAK,CAAA;gBAET,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;gBAC5C,IAAI,aAAa,GAAW,EAAE,CAAA;gBAE9B,IAAI,CAAC;oBACH,aAAa,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;gBAC5F,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,8BAA8B,UAAU,IAAI,QAAQ,KAAK,OAAO,GAAG,CAAC,CAAA;oBACvF,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;oBACvB,MAAM,CAAC,MAAM,GAAG,KAAK,CAAA;gBACvB,CAAC;gBAED,MAAM,OAAO,GACX,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACpD,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;gBAE1D,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,CAAA,IAAI,OAAO,EAAE,CAAC;oBACjC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAA;gBAC5B,CAAC;gBAGD,MAAM,EACJ,KAAK,GAAG,EAAE,EACV,WAAW,GAAG,EAAE,EAChB,MAAM,GAAG,IAAA,YAAE,EAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,EACvC,UAAU,GAAG,IAAA,YAAE,EAAC,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,EAChD,IAAI,GAAG,aAAa,CAAC,IAAI,EACzB,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,EAAE,EACrC,QAAQ,GAAG,aAAa,CAAC,QAAQ,EACjC,KAAK,EACL,MAAM,EACN,IAAI,EACJ,QAAQ,EACT,GAAG,MAAM,IAAI,EAAE,CAAA;gBAGhB,MAAM,QAAQ,GAAG,GAAG,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAA;gBACxD,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,EAAE,CAAA;gBACvC,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,CAAA;gBACrB,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBAEvC,IAAI,MAAM,EAAE,CAAC;oBACX,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC9B,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,eAAe,QAAQ,iBAAiB,GAAG,EAAE,CAAC,CAAA;oBAC7E,CAAC;oBAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC9B,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,iBAAiB,MAAM,iBAAiB,GAAG,EAAE,CAAC,CAAA;oBAC7E,CAAC;oBAED,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC9B,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,kBAAkB,OAAO,iBAAiB,GAAG,EAAE,CAAC,CAAA;oBAC/E,CAAC;oBAED,MAAM,GAAG,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;oBACvC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,MAAA,CAAC,CAAC,GAAG,0CAAE,OAAO,EAAE,KAAK,GAAG,CAAA,EAAA,CAAC,EAAE,CAAC;wBAC7E,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,sBAAsB,QAAQ,iBAAiB,GAAG,EAAE,CAAC,CAAA;oBACpF,CAAC;oBAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACtB,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;oBACtD,CAAC;gBACH,CAAC;gBAED,MAAM,KAAK,GAAG,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,CAAA;gBAC3C,KAAK;oBACH,CAAC,CAAC,GAAG,CAAC,CAAC;wBACL,GAAG,CAAC,KAAK,CACP,aAAa,MAAM,UAAU,QAAQ,YAAY,OAAO,iBACtD,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,MAAM,KAAI,CACzB,cAAc,CACf;oBACH,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,aAAa,MAAM,UAAU,QAAQ,YAAY,OAAO,kBAAkB,CAAC,CAAA;gBAEjG,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,GAAG,GAAG;wBACV,OAAO,EAAE,KAAK;wBACd,WAAW;wBACX,UAAU;wBACV,IAAI;wBACJ,OAAO;wBACP,QAAQ,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ;wBAC7D,QAAQ;qBAYT,CAAA;oBAED,IAAI,KAAK;wBAAE,GAAG,CAAC,WAAW,GAAG,KAAK,CAAA;oBAClC,IAAI,MAAM;wBAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAA;oBAC/B,IAAI,IAAI;wBAAE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAA;oBAEzB,WAAW,CAAC,IAAI,CAAC;wBACf,OAAO;wBACP,MAAM;wBACN,IAAI,EAAE,GAAG,GAAG,QAAQ;wBACpB,WAAW;wBACX,KAAK,EAAE,aAAa;wBACpB,MAAM;wBACN,IAAI;wBACJ,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,UAAU,IAAI,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;wBAChF,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;wBACrB,GAAG,EAAE,GAAG;qBACT,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,kBAAkB,WAAW,CAAC,MAAM,EAAE,CAAC,CAAA;IAC1D,OAAO,WAAW,CAAA;AACpB,CAAC;AAnJD,oBAmJC;AAED,SAAe,aAAa,CAAC,QAAgB;;QAC3C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;gBACpD,OAAO,CAAC,QAAQ,CAAC,CAAA;YACnB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,GAAG,CAAC,CAAA;YACb,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;CAAA;AAED,SAAe,cAAc,CAAC,IAAY,EAAE,aAAqB,EAAE;;QACjE,MAAM,GAAG,GAAG,SAAS,CAAA;QACrB,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;QAC7C,IAAI,QAAQ,GAAQ,IAAI,CAAA;QAExB,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YAC7C,QAAQ,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,kBAAkB,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAS,EAAE;gBACvG,OAAO,MAAM,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,iBAAiB,GAAG,IAAI,CAAC,CAAC,CAAA;YAChF,CAAC,CAAA,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,cAAc,GAAG,UAAU,CAAC,CAAC,CAAA;QAClF,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,GAAG,CAAC,KAAK,CAAC,cAAc,UAAU,aAAa,CAAC,CAAA;YAChD,MAAM,IAAI,KAAK,CAAC,cAAc,UAAU,aAAa,CAAC,CAAA;QACxD,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC;CAAA;AAED,SAAe,eAAe,CAAC,IAAY,EAAE,cAAwB,EAAE;;QACrE,MAAM,KAAK,GAAG,EAAE,CAAA;QAChB,MAAM,OAAO,CAAC,GAAG,CACf,WAAW,CAAC,GAAG,CAAC,CAAO,CAAC,EAAE,EAAE;YAC1B,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;YAChD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;QACnG,CAAC,CAAA,CAAC,CACH,CAAA;QAED,OAAO,KAAK,CAAA;IACd,CAAC;CAAA;AAID,SAAgB,KAAK,CAAC,MAAW,EAAE,MAAyB;IAC1D,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,MAAM,CAAC,MAAM,8BAA8B,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IAErF,MAAM,CAAC,OAAO,CAAC,CAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE;QACpG,IAAI,MAAM,EAAE,CAAC;YACX,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,cAAc,MAAM,IAAI,IAAI,cAAc,OAAO,EAAE,CAAC,CAAA;YACvE,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;YAEtD,MAAM,CAAC,KAAK,+BACV,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,GAAG,IACR,KAAK,KACR,MAAM,EAAE;oBACN,aAAa,EAAE,KAAK,IAAI,EAAE;iBAC3B,EACD,OAAO,EAAE,UAAU,GAAmB,EAAE,KAAmB;oBACzD,IAAI,CAAC;wBACH,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;oBACxC,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,eAAe,IAAI,cAAc,IAAI,KAAK,GAAG,EAAE,CAAC,CAAA;wBACnE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAA;oBAC3D,CAAC;gBACH,CAAC,IACD,CAAA;QACJ,CAAC;IACH,CAAC,CAAA,CAAC,CAAA;AACJ,CAAC;AA3BD,sBA2BC"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.start = exports.load = void 0;
|
|
7
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
8
|
+
const path_1 = require("../util/path");
|
|
9
|
+
const toad_scheduler_1 = require("toad-scheduler");
|
|
10
|
+
const glob = require('glob');
|
|
11
|
+
const path = require('path');
|
|
12
|
+
function load() {
|
|
13
|
+
const patterns = (0, path_1.normalizePatterns)(['..', 'schedules', '*.job.{ts,js}'], ['src', 'schedules', '*.job.{ts,js}']);
|
|
14
|
+
const jobs = [];
|
|
15
|
+
const jobScheduleDefaults = {
|
|
16
|
+
active: false,
|
|
17
|
+
type: 'interval',
|
|
18
|
+
async: true,
|
|
19
|
+
preventOverrun: true,
|
|
20
|
+
cron: {},
|
|
21
|
+
interval: {
|
|
22
|
+
days: 0,
|
|
23
|
+
hours: 0,
|
|
24
|
+
minutes: 0,
|
|
25
|
+
seconds: 0,
|
|
26
|
+
milliseconds: 0,
|
|
27
|
+
runImmediately: false
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
patterns.forEach((pattern) => {
|
|
31
|
+
log.t && log.trace('Looking for ' + pattern);
|
|
32
|
+
glob.sync(pattern).forEach((f) => {
|
|
33
|
+
var _a;
|
|
34
|
+
log.t && log.trace(`* Add job schedule from ${f}`);
|
|
35
|
+
const jobName = path.basename(f, path.extname(f));
|
|
36
|
+
let { job, schedule: s } = require(f);
|
|
37
|
+
let isLoadedAndEnabled = false;
|
|
38
|
+
if (s && s.active) {
|
|
39
|
+
isLoadedAndEnabled = true;
|
|
40
|
+
let schedule = lodash_1.default.cloneDeep(jobScheduleDefaults);
|
|
41
|
+
schedule = lodash_1.default.merge(schedule, s);
|
|
42
|
+
if (!job || typeof job !== 'function') {
|
|
43
|
+
log.t && log.error(`* Job ${jobName} `);
|
|
44
|
+
isLoadedAndEnabled = false;
|
|
45
|
+
}
|
|
46
|
+
if (!schedule.type || !['cron', 'interval'].includes(schedule.type)) {
|
|
47
|
+
log.t && log.error(`* Job ${jobName}: schedule.type must be cron or interval`);
|
|
48
|
+
isLoadedAndEnabled = false;
|
|
49
|
+
}
|
|
50
|
+
if (schedule.type === 'cron' && !((_a = schedule.cron) === null || _a === void 0 ? void 0 : _a.expression)) {
|
|
51
|
+
log.t && log.error(`* Job ${jobName}: schedule.cron.expression not defined`);
|
|
52
|
+
isLoadedAndEnabled = false;
|
|
53
|
+
}
|
|
54
|
+
if (schedule.type === 'interval') {
|
|
55
|
+
const { days = 0, hours = 0, minutes = 0, seconds = 0, milliseconds = 0 } = schedule.interval || {};
|
|
56
|
+
const totalIntervalMs = milliseconds + 1000 * (seconds + 60 * (minutes + 60 * (hours + 24 * days)));
|
|
57
|
+
if (totalIntervalMs < 1000) {
|
|
58
|
+
log.t && log.error(`* Job ${jobName}: schedule.interval must have a total greater or equal to 1s`);
|
|
59
|
+
isLoadedAndEnabled = false;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
isLoadedAndEnabled &&
|
|
63
|
+
jobs.push({
|
|
64
|
+
jobName,
|
|
65
|
+
schedule,
|
|
66
|
+
job
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
log.t && log.trace(`* Job schedule ${jobName} ${isLoadedAndEnabled ? 'enabled' : 'disabled'}`);
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
log.d && log.debug(`Schedule Jobs loaded: ${(jobs === null || jobs === void 0 ? void 0 : jobs.length) || 0}`);
|
|
73
|
+
return jobs;
|
|
74
|
+
}
|
|
75
|
+
exports.load = load;
|
|
76
|
+
function start(server, jobs) {
|
|
77
|
+
if (jobs.length > 0) {
|
|
78
|
+
log.trace('* Job schedule attach all tasks');
|
|
79
|
+
jobs.forEach((job) => {
|
|
80
|
+
const { schedule, job: fn, jobName } = job;
|
|
81
|
+
let task = null;
|
|
82
|
+
if (schedule.async) {
|
|
83
|
+
task = new toad_scheduler_1.AsyncTask(jobName, fn, (err) => {
|
|
84
|
+
log.error(`Job ${jobName} throws an error`);
|
|
85
|
+
log.error(err);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
task = new toad_scheduler_1.Task(jobName, fn);
|
|
90
|
+
}
|
|
91
|
+
if (schedule.type === 'cron') {
|
|
92
|
+
const taskJob = new toad_scheduler_1.CronJob({
|
|
93
|
+
cronExpression: schedule.cron.expression,
|
|
94
|
+
timezone: schedule.cron.tomezone
|
|
95
|
+
}, task, {
|
|
96
|
+
preventOverrun: schedule.preventOverrun
|
|
97
|
+
});
|
|
98
|
+
server.schedule.addCronJob(taskJob);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
const taskJob = new toad_scheduler_1.SimpleIntervalJob({
|
|
102
|
+
days: schedule.interval.days || 0,
|
|
103
|
+
hours: schedule.interval.hours || 0,
|
|
104
|
+
minutes: schedule.interval.minutes || 0,
|
|
105
|
+
seconds: schedule.interval.seconds || 0,
|
|
106
|
+
milliseconds: schedule.interval.milliseconds || 0,
|
|
107
|
+
runImmediately: schedule.interval.runImmediately
|
|
108
|
+
}, task, {
|
|
109
|
+
preventOverrun: schedule.preventOverrun
|
|
110
|
+
});
|
|
111
|
+
server.scheduler.addSimpleIntervalJob(taskJob);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
exports.start = start;
|
|
117
|
+
//# sourceMappingURL=schedules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedules.js","sourceRoot":"","sources":["../../../lib/loader/schedules.ts"],"names":[],"mappings":";;;;;;AAAA,oDAAsB;AAEtB,uCAAgD;AAChD,mDAA4E;AAE5E,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAE5B,SAAgB,IAAI;IAClB,MAAM,QAAQ,GAAG,IAAA,wBAAiB,EAAC,CAAC,IAAI,EAAE,WAAW,EAAE,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC,CAAA;IAC/G,MAAM,IAAI,GAAQ,EAAE,CAAA;IAEpB,MAAM,mBAAmB,GAAgB;QACvC,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,IAAI;QACX,cAAc,EAAE,IAAI;QAEpB,IAAI,EAAE,EAGL;QAED,QAAQ,EAAE;YACR,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;YACV,YAAY,EAAE,CAAC;YACf,cAAc,EAAE,KAAK;SACtB;KACF,CAAA;IAED,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC,CAAA;QAC5C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAS,EAAE,EAAE;;YACvC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAA;YAElD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;YACjD,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;YAErC,IAAI,kBAAkB,GAAG,KAAK,CAAA;YAC9B,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;gBAClB,kBAAkB,GAAG,IAAI,CAAA;gBAIzB,IAAI,QAAQ,GAAG,gBAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAA;gBAC/C,QAAQ,GAAG,gBAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;gBAE/B,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;oBACtC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,OAAO,GAAG,CAAC,CAAA;oBACvC,kBAAkB,GAAG,KAAK,CAAA;gBAC5B,CAAC;gBAED,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBACpE,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,OAAO,0CAA0C,CAAC,CAAA;oBAC9E,kBAAkB,GAAG,KAAK,CAAA;gBAC5B,CAAC;gBAED,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAA,MAAA,QAAQ,CAAC,IAAI,0CAAE,UAAU,CAAA,EAAE,CAAC;oBAC3D,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,OAAO,wCAAwC,CAAC,CAAA;oBAC5E,kBAAkB,GAAG,KAAK,CAAA;gBAC5B,CAAC;gBAED,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;oBACjC,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,YAAY,GAAG,CAAC,EAAE,GAAG,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAA;oBACnG,MAAM,eAAe,GAAG,YAAY,GAAG,IAAI,GAAG,CAAC,OAAO,GAAG,EAAE,GAAG,CAAC,OAAO,GAAG,EAAE,GAAG,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;oBAEnG,IAAI,eAAe,GAAG,IAAI,EAAE,CAAC;wBAC3B,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,OAAO,8DAA8D,CAAC,CAAA;wBAClG,kBAAkB,GAAG,KAAK,CAAA;oBAC5B,CAAC;gBACH,CAAC;gBAED,kBAAkB;oBAChB,IAAI,CAAC,IAAI,CAAC;wBACR,OAAO;wBACP,QAAQ;wBACR,GAAG;qBACJ,CAAC,CAAA;YACN,CAAC;YAED,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,kBAAkB,OAAO,IAAI,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAA;QAChG,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,yBAAyB,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,KAAI,CAAC,EAAE,CAAC,CAAA;IAChE,OAAO,IAAI,CAAA;AACb,CAAC;AAjFD,oBAiFC;AAED,SAAgB,KAAK,CAAC,MAAW,EAAE,IAAW;IAC5C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,GAAG,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAA;QAE5C,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACnB,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,GAAG,CAAA;YAE1C,IAAI,IAAI,GAA4B,IAAI,CAAA;YAExC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACnB,IAAI,GAAG,IAAI,0BAAS,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;oBACxC,GAAG,CAAC,KAAK,CAAC,OAAO,OAAO,kBAAkB,CAAC,CAAA;oBAC3C,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBAChB,CAAC,CAAC,CAAA;YACJ,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,IAAI,qBAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;YAC9B,CAAC;YAED,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC7B,MAAM,OAAO,GAAG,IAAI,wBAAO,CACzB;oBACE,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU;oBACxC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ;iBACjC,EACD,IAAI,EACJ;oBACE,cAAc,EAAE,QAAQ,CAAC,cAAc;iBACxC,CACF,CAAA;gBACD,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;YACrC,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,GAAG,IAAI,kCAAiB,CACnC;oBACE,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;oBACjC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;oBACnC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC;oBACvC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC;oBACvC,YAAY,EAAE,QAAQ,CAAC,QAAQ,CAAC,YAAY,IAAI,CAAC;oBACjD,cAAc,EAAE,QAAQ,CAAC,QAAQ,CAAC,cAAc;iBACjD,EACD,IAAI,EACJ;oBACE,cAAc,EAAE,QAAQ,CAAC,cAAc;iBACxC,CACF,CAAA;gBACD,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAA;YAChD,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;AACH,CAAC;AAjDD,sBAiDC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
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.job = exports.schedule = void 0;
|
|
13
|
+
exports.schedule = {
|
|
14
|
+
active: false,
|
|
15
|
+
interval: {
|
|
16
|
+
seconds: 10
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
function job() {
|
|
20
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
21
|
+
log.info('tick job TEST every 10 seconds');
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
exports.job = job;
|
|
25
|
+
//# sourceMappingURL=test.job.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.job.js","sourceRoot":"","sources":["../../../lib/schedules/test.job.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEa,QAAA,QAAQ,GAAgB;IACnC,MAAM,EAAE,KAAK;IACb,QAAQ,EAAE;QACR,OAAO,EAAE,EAAE;KACZ;CACF,CAAA;AAED,SAAsB,GAAG;;QACvB,GAAG,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAA;IAC5C,CAAC;CAAA;AAFD,kBAEC"}
|
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@volcanicminds/backend",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"codename": "turin",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "The volcanic (minds) backend",
|
|
@@ -57,6 +57,7 @@
|
|
|
57
57
|
"@fastify/helmet": "^10.1.1",
|
|
58
58
|
"@fastify/jwt": "^6.7.1",
|
|
59
59
|
"@fastify/rate-limit": "^7.6.0",
|
|
60
|
+
"@fastify/schedule": "^4.1.1",
|
|
60
61
|
"@fastify/swagger": "^8.10.1",
|
|
61
62
|
"@fastify/swagger-ui": "^1.9.3",
|
|
62
63
|
"@types/node": "^20.7.0",
|
|
@@ -66,12 +67,14 @@
|
|
|
66
67
|
"glob": "^8.1.0",
|
|
67
68
|
"graphql": "^16.8.1",
|
|
68
69
|
"i18n": "^0.15.1",
|
|
70
|
+
"lodash": "^4.17.21",
|
|
69
71
|
"nanoid": "^4.0.2",
|
|
70
72
|
"object-sizeof": "^1.6.3",
|
|
71
73
|
"pino": "^8.15.1",
|
|
72
74
|
"pino-pretty": "^9.4.1",
|
|
73
75
|
"root-require": "^0.3.1",
|
|
74
|
-
"semver": "^7.5.4"
|
|
76
|
+
"semver": "^7.5.4",
|
|
77
|
+
"toad-scheduler": "^3.0.1"
|
|
75
78
|
},
|
|
76
79
|
"devDependencies": {
|
|
77
80
|
"@types/mocha": "^10.0.1",
|
package/index.d.ts
CHANGED
package/index.ts
CHANGED
|
@@ -15,11 +15,13 @@ import * as loaderSchemas from './lib/loader/schemas'
|
|
|
15
15
|
import * as loaderTracking from './lib/loader/tracking'
|
|
16
16
|
import * as loaderTranslation from './lib/loader/translation'
|
|
17
17
|
import * as loaderConfig from './lib/loader/general'
|
|
18
|
+
import * as loaderSchedules from './lib/loader/schedules'
|
|
18
19
|
|
|
19
20
|
import fastify, { FastifyInstance } from 'fastify'
|
|
20
21
|
import jwtValidator from '@fastify/jwt'
|
|
21
22
|
import swagger from '@fastify/swagger'
|
|
22
23
|
import swaggerUI from '@fastify/swagger-ui'
|
|
24
|
+
import { fastifySchedule } from '@fastify/schedule'
|
|
23
25
|
|
|
24
26
|
import cors from '@fastify/cors'
|
|
25
27
|
import helmet from '@fastify/helmet'
|
|
@@ -137,6 +139,15 @@ async function addFastifySwagger(server: FastifyInstance) {
|
|
|
137
139
|
}
|
|
138
140
|
}
|
|
139
141
|
|
|
142
|
+
async function addFastifySchedule(server: FastifyInstance) {
|
|
143
|
+
const { scheduler = false } = global.config?.options || {}
|
|
144
|
+
if (scheduler) {
|
|
145
|
+
log.trace('Add scheduler plugin')
|
|
146
|
+
|
|
147
|
+
await server.register(fastifySchedule)
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
140
151
|
const start = async (decorators) => {
|
|
141
152
|
const begin = new Date().getTime()
|
|
142
153
|
mark.print(logger)
|
|
@@ -190,6 +201,9 @@ const start = async (decorators) => {
|
|
|
190
201
|
await addFastifySwagger(server)
|
|
191
202
|
await addApolloRouting(server, apollo)
|
|
192
203
|
await addFastifyRouting(server)
|
|
204
|
+
await addFastifySchedule(server)
|
|
205
|
+
|
|
206
|
+
const schedules = loaderSchedules.load()
|
|
193
207
|
|
|
194
208
|
// defaults
|
|
195
209
|
decorators = {
|
|
@@ -334,6 +348,9 @@ const start = async (decorators) => {
|
|
|
334
348
|
})
|
|
335
349
|
|
|
336
350
|
global.server = server
|
|
351
|
+
|
|
352
|
+
// Ok, it's time to start the scheduler jobs
|
|
353
|
+
await loaderSchedules.start(server, schedules)
|
|
337
354
|
return server
|
|
338
355
|
}
|
|
339
356
|
|
|
@@ -350,7 +367,8 @@ export {
|
|
|
350
367
|
RouteConfig,
|
|
351
368
|
ConfiguredRoute,
|
|
352
369
|
UserManagement,
|
|
353
|
-
TokenManagement
|
|
370
|
+
TokenManagement,
|
|
371
|
+
JobSchedule
|
|
354
372
|
} from './types/global'
|
|
355
373
|
|
|
356
374
|
/**
|
package/lib/config/general.ts
CHANGED
package/lib/loader/general.ts
CHANGED
package/lib/loader/router.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import yn from '../util/yn'
|
|
2
|
-
import { Route, ConfiguredRoute, RouteConfig } from '../../types/global'
|
|
2
|
+
import { Role, Route, ConfiguredRoute, RouteConfig } from '../../types/global'
|
|
3
3
|
import { FastifyReply, FastifyRequest } from 'fastify'
|
|
4
4
|
import { normalizePatterns } from '../util/path'
|
|
5
5
|
|
|
@@ -37,7 +37,15 @@ export function load(): ConfiguredRoute[] {
|
|
|
37
37
|
} = route
|
|
38
38
|
|
|
39
39
|
const rsp = !rs.length ? [roles.public] : rs
|
|
40
|
-
|
|
40
|
+
let requiredRoles: Role[] = []
|
|
41
|
+
|
|
42
|
+
try {
|
|
43
|
+
requiredRoles = rsp.some((r) => r.code === roles.admin.code) ? rsp : [...rsp, roles.admin] // admin is always present
|
|
44
|
+
} catch (err) {
|
|
45
|
+
log.e && log.error(`Error in loading roles for ${methodCase} ${pathName} (${handler})`)
|
|
46
|
+
log.t && log.trace(err)
|
|
47
|
+
config.enable = false
|
|
48
|
+
}
|
|
41
49
|
|
|
42
50
|
const reqAuth: boolean =
|
|
43
51
|
middlewares.some((m) => authMiddlewares.includes(m)) ||
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import _ from 'lodash'
|
|
2
|
+
import { JobSchedule } from '../../types/global'
|
|
3
|
+
import { normalizePatterns } from '../util/path'
|
|
4
|
+
import { CronJob, SimpleIntervalJob, Task, AsyncTask } from 'toad-scheduler'
|
|
5
|
+
|
|
6
|
+
const glob = require('glob')
|
|
7
|
+
const path = require('path')
|
|
8
|
+
|
|
9
|
+
export function load(): any[] {
|
|
10
|
+
const patterns = normalizePatterns(['..', 'schedules', '*.job.{ts,js}'], ['src', 'schedules', '*.job.{ts,js}'])
|
|
11
|
+
const jobs: any = []
|
|
12
|
+
|
|
13
|
+
const jobScheduleDefaults: JobSchedule = {
|
|
14
|
+
active: false, // boolean (required)
|
|
15
|
+
type: 'interval', // cron|interval, default: interval
|
|
16
|
+
async: true, // boolean, default: true
|
|
17
|
+
preventOverrun: true, // boolean, default: true
|
|
18
|
+
|
|
19
|
+
cron: {
|
|
20
|
+
// expression: null // required if type = 'cron', use cron syntax (if not specified cron will be disabled)
|
|
21
|
+
// timezone: null // optional, like "Europe/Rome" (to test)
|
|
22
|
+
},
|
|
23
|
+
|
|
24
|
+
interval: {
|
|
25
|
+
days: 0, // number, default 0
|
|
26
|
+
hours: 0, // number, default 0
|
|
27
|
+
minutes: 0, // number, default 0
|
|
28
|
+
seconds: 0, // number, default 0
|
|
29
|
+
milliseconds: 0, // number, default 0
|
|
30
|
+
runImmediately: false // boolean, default: false
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
patterns.forEach((pattern) => {
|
|
35
|
+
log.t && log.trace('Looking for ' + pattern)
|
|
36
|
+
glob.sync(pattern).forEach((f: string) => {
|
|
37
|
+
log.t && log.trace(`* Add job schedule from ${f}`)
|
|
38
|
+
|
|
39
|
+
const jobName = path.basename(f, path.extname(f))
|
|
40
|
+
let { job, schedule: s } = require(f)
|
|
41
|
+
|
|
42
|
+
let isLoadedAndEnabled = false
|
|
43
|
+
if (s && s.active) {
|
|
44
|
+
isLoadedAndEnabled = true
|
|
45
|
+
|
|
46
|
+
// apply defaults
|
|
47
|
+
|
|
48
|
+
let schedule = _.cloneDeep(jobScheduleDefaults)
|
|
49
|
+
schedule = _.merge(schedule, s)
|
|
50
|
+
|
|
51
|
+
if (!job || typeof job !== 'function') {
|
|
52
|
+
log.t && log.error(`* Job ${jobName} `)
|
|
53
|
+
isLoadedAndEnabled = false
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (!schedule.type || !['cron', 'interval'].includes(schedule.type)) {
|
|
57
|
+
log.t && log.error(`* Job ${jobName}: schedule.type must be cron or interval`)
|
|
58
|
+
isLoadedAndEnabled = false
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (schedule.type === 'cron' && !schedule.cron?.expression) {
|
|
62
|
+
log.t && log.error(`* Job ${jobName}: schedule.cron.expression not defined`)
|
|
63
|
+
isLoadedAndEnabled = false
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (schedule.type === 'interval') {
|
|
67
|
+
const { days = 0, hours = 0, minutes = 0, seconds = 0, milliseconds = 0 } = schedule.interval || {}
|
|
68
|
+
const totalIntervalMs = milliseconds + 1000 * (seconds + 60 * (minutes + 60 * (hours + 24 * days)))
|
|
69
|
+
|
|
70
|
+
if (totalIntervalMs < 1000) {
|
|
71
|
+
log.t && log.error(`* Job ${jobName}: schedule.interval must have a total greater or equal to 1s`)
|
|
72
|
+
isLoadedAndEnabled = false
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
isLoadedAndEnabled &&
|
|
77
|
+
jobs.push({
|
|
78
|
+
jobName,
|
|
79
|
+
schedule,
|
|
80
|
+
job
|
|
81
|
+
})
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
log.t && log.trace(`* Job schedule ${jobName} ${isLoadedAndEnabled ? 'enabled' : 'disabled'}`)
|
|
85
|
+
})
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
log.d && log.debug(`Schedule Jobs loaded: ${jobs?.length || 0}`)
|
|
89
|
+
return jobs
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export function start(server: any, jobs: any[]) {
|
|
93
|
+
if (jobs.length > 0) {
|
|
94
|
+
log.trace('* Job schedule attach all tasks')
|
|
95
|
+
|
|
96
|
+
jobs.forEach((job) => {
|
|
97
|
+
const { schedule, job: fn, jobName } = job
|
|
98
|
+
|
|
99
|
+
let task: Task | AsyncTask | null = null
|
|
100
|
+
|
|
101
|
+
if (schedule.async) {
|
|
102
|
+
task = new AsyncTask(jobName, fn, (err) => {
|
|
103
|
+
log.error(`Job ${jobName} throws an error`)
|
|
104
|
+
log.error(err)
|
|
105
|
+
})
|
|
106
|
+
} else {
|
|
107
|
+
task = new Task(jobName, fn)
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (schedule.type === 'cron') {
|
|
111
|
+
const taskJob = new CronJob(
|
|
112
|
+
{
|
|
113
|
+
cronExpression: schedule.cron.expression,
|
|
114
|
+
timezone: schedule.cron.tomezone
|
|
115
|
+
},
|
|
116
|
+
task,
|
|
117
|
+
{
|
|
118
|
+
preventOverrun: schedule.preventOverrun
|
|
119
|
+
}
|
|
120
|
+
)
|
|
121
|
+
server.schedule.addCronJob(taskJob)
|
|
122
|
+
} else {
|
|
123
|
+
const taskJob = new SimpleIntervalJob(
|
|
124
|
+
{
|
|
125
|
+
days: schedule.interval.days || 0,
|
|
126
|
+
hours: schedule.interval.hours || 0,
|
|
127
|
+
minutes: schedule.interval.minutes || 0,
|
|
128
|
+
seconds: schedule.interval.seconds || 0,
|
|
129
|
+
milliseconds: schedule.interval.milliseconds || 0,
|
|
130
|
+
runImmediately: schedule.interval.runImmediately
|
|
131
|
+
},
|
|
132
|
+
task,
|
|
133
|
+
{
|
|
134
|
+
preventOverrun: schedule.preventOverrun
|
|
135
|
+
}
|
|
136
|
+
)
|
|
137
|
+
server.scheduler.addSimpleIntervalJob(taskJob)
|
|
138
|
+
}
|
|
139
|
+
})
|
|
140
|
+
}
|
|
141
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@volcanicminds/backend",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"codename": "turin",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "The volcanic (minds) backend",
|
|
@@ -57,6 +57,7 @@
|
|
|
57
57
|
"@fastify/helmet": "^10.1.1",
|
|
58
58
|
"@fastify/jwt": "^6.7.1",
|
|
59
59
|
"@fastify/rate-limit": "^7.6.0",
|
|
60
|
+
"@fastify/schedule": "^4.1.1",
|
|
60
61
|
"@fastify/swagger": "^8.10.1",
|
|
61
62
|
"@fastify/swagger-ui": "^1.9.3",
|
|
62
63
|
"@types/node": "^20.7.0",
|
|
@@ -66,12 +67,14 @@
|
|
|
66
67
|
"glob": "^8.1.0",
|
|
67
68
|
"graphql": "^16.8.1",
|
|
68
69
|
"i18n": "^0.15.1",
|
|
70
|
+
"lodash": "^4.17.21",
|
|
69
71
|
"nanoid": "^4.0.2",
|
|
70
72
|
"object-sizeof": "^1.6.3",
|
|
71
73
|
"pino": "^8.15.1",
|
|
72
74
|
"pino-pretty": "^9.4.1",
|
|
73
75
|
"root-require": "^0.3.1",
|
|
74
|
-
"semver": "^7.5.4"
|
|
76
|
+
"semver": "^7.5.4",
|
|
77
|
+
"toad-scheduler": "^3.0.1"
|
|
75
78
|
},
|
|
76
79
|
"devDependencies": {
|
|
77
80
|
"@types/mocha": "^10.0.1",
|
package/types/global.d.ts
CHANGED
|
@@ -55,6 +55,28 @@ export interface GeneralConfig {
|
|
|
55
55
|
enable: boolean
|
|
56
56
|
options: {
|
|
57
57
|
reset_external_id_on_login: boolean
|
|
58
|
+
scheduler: boolean
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export interface JobSchedule {
|
|
63
|
+
active: boolean // boolean (required)
|
|
64
|
+
type?: string // cron|interval, default: interval
|
|
65
|
+
async?: boolean // boolean, default: true
|
|
66
|
+
preventOverrun?: boolean // boolean, default: true
|
|
67
|
+
|
|
68
|
+
cron?: {
|
|
69
|
+
expression?: string // required if type = 'cron', use cron syntax (if not specified cron will be disabled)
|
|
70
|
+
timezone?: string // optional, like "Europe/Rome" (to test)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
interval?: {
|
|
74
|
+
days?: number // number, default 0
|
|
75
|
+
hours?: number // number, default 0
|
|
76
|
+
minutes?: number // number, default 0
|
|
77
|
+
seconds?: number // number, default 0
|
|
78
|
+
milliseconds?: number // number, default 0
|
|
79
|
+
runImmediately?: boolean // boolean, default: false
|
|
58
80
|
}
|
|
59
81
|
}
|
|
60
82
|
|