@volcanicminds/backend 0.6.5 → 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 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":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,8 @@ module.exports = {
3
3
  name: 'general',
4
4
  enable: true,
5
5
  options: {
6
- reset_external_id_on_login: false
6
+ reset_external_id_on_login: false,
7
+ scheduler: false
7
8
  }
8
9
  };
9
10
  //# sourceMappingURL=general.js.map
@@ -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;KAClC;CACF,CAAA"}
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;SAClC;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;AA3BD,oBA2BC"}
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"}
@@ -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.6.5",
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
@@ -10,5 +10,7 @@ export {
10
10
  Route,
11
11
  RouteConfig,
12
12
  ConfiguredRoute,
13
- UserManagement
13
+ UserManagement,
14
+ TokenManagement,
15
+ JobSchedule
14
16
  } from './types/global'
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
  /**
@@ -4,6 +4,7 @@ module.exports = {
4
4
  name: 'general',
5
5
  enable: true,
6
6
  options: {
7
- reset_external_id_on_login: false
7
+ reset_external_id_on_login: false,
8
+ scheduler: false
8
9
  }
9
10
  }
@@ -7,7 +7,8 @@ export function load() {
7
7
  name: 'general',
8
8
  enable: true,
9
9
  options: {
10
- reset_external_id_on_login: false
10
+ reset_external_id_on_login: false,
11
+ scheduler: false
11
12
  }
12
13
  }
13
14
 
@@ -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
+ }
@@ -0,0 +1,12 @@
1
+ import { JobSchedule } from '../../types/global'
2
+
3
+ export const schedule: JobSchedule = {
4
+ active: false,
5
+ interval: {
6
+ seconds: 10
7
+ }
8
+ }
9
+
10
+ export async function job() {
11
+ log.info('tick job TEST every 10 seconds')
12
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@volcanicminds/backend",
3
- "version": "0.6.5",
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