@vendure/core 3.2.3 → 3.3.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.
Files changed (197) hide show
  1. package/dist/api/api-internal-modules.js +4 -0
  2. package/dist/api/api-internal-modules.js.map +1 -1
  3. package/dist/api/middleware/asset-interceptor-plugin.js +17 -2
  4. package/dist/api/middleware/asset-interceptor-plugin.js.map +1 -1
  5. package/dist/api/resolvers/admin/draft-order.resolver.d.ts +2 -1
  6. package/dist/api/resolvers/admin/draft-order.resolver.js +14 -0
  7. package/dist/api/resolvers/admin/draft-order.resolver.js.map +1 -1
  8. package/dist/api/resolvers/admin/order.resolver.d.ts +1 -1
  9. package/dist/api/resolvers/admin/product.resolver.d.ts +1 -1
  10. package/dist/api/resolvers/admin/product.resolver.js +1 -2
  11. package/dist/api/resolvers/admin/product.resolver.js.map +1 -1
  12. package/dist/api/resolvers/admin/scheduled-task.resolver.d.ts +9 -0
  13. package/dist/api/resolvers/admin/scheduled-task.resolver.js +62 -0
  14. package/dist/api/resolvers/admin/scheduled-task.resolver.js.map +1 -0
  15. package/dist/api/schema/admin-api/scheduled-task.api.graphql +25 -0
  16. package/dist/cache/cache.service.js +2 -0
  17. package/dist/cache/cache.service.js.map +1 -1
  18. package/dist/common/index.d.ts +6 -5
  19. package/dist/common/index.js +6 -5
  20. package/dist/common/index.js.map +1 -1
  21. package/dist/common/instrument-decorator.d.ts +41 -0
  22. package/dist/common/instrument-decorator.js +103 -0
  23. package/dist/common/instrument-decorator.js.map +1 -0
  24. package/dist/config/auth/default-password-validation-strategy.d.ts +2 -1
  25. package/dist/config/auth/default-password-validation-strategy.js +7 -2
  26. package/dist/config/auth/default-password-validation-strategy.js.map +1 -1
  27. package/dist/config/config.module.js +4 -1
  28. package/dist/config/config.module.js.map +1 -1
  29. package/dist/config/config.service.d.ts +2 -1
  30. package/dist/config/config.service.js +3 -0
  31. package/dist/config/config.service.js.map +1 -1
  32. package/dist/config/default-config.js +10 -1
  33. package/dist/config/default-config.js.map +1 -1
  34. package/dist/config/index.d.ts +8 -7
  35. package/dist/config/index.js +8 -7
  36. package/dist/config/index.js.map +1 -1
  37. package/dist/config/system/instrumentation-strategy.d.ts +56 -0
  38. package/dist/config/system/instrumentation-strategy.js +3 -0
  39. package/dist/config/system/instrumentation-strategy.js.map +1 -0
  40. package/dist/config/system/noop-instrumentation-strategy.d.ts +4 -0
  41. package/dist/config/system/noop-instrumentation-strategy.js +10 -0
  42. package/dist/config/system/noop-instrumentation-strategy.js.map +1 -0
  43. package/dist/config/vendure-config.d.ts +47 -1
  44. package/dist/connection/connection.module.d.ts +1 -1
  45. package/dist/event-bus/event-bus.js +2 -0
  46. package/dist/event-bus/event-bus.js.map +1 -1
  47. package/dist/index.d.ts +9 -8
  48. package/dist/index.js +19 -18
  49. package/dist/index.js.map +1 -1
  50. package/dist/job-queue/job-queue.js +17 -2
  51. package/dist/job-queue/job-queue.js.map +1 -1
  52. package/dist/job-queue/job-queue.service.js +4 -1
  53. package/dist/job-queue/job-queue.service.js.map +1 -1
  54. package/dist/plugin/default-cache-plugin/sql-cache-strategy.js +16 -2
  55. package/dist/plugin/default-cache-plugin/sql-cache-strategy.js.map +1 -1
  56. package/dist/plugin/default-job-queue-plugin/clean-jobs-task.d.ts +11 -0
  57. package/dist/plugin/default-job-queue-plugin/clean-jobs-task.js +51 -0
  58. package/dist/plugin/default-job-queue-plugin/clean-jobs-task.js.map +1 -0
  59. package/dist/plugin/default-job-queue-plugin/constants.d.ts +2 -0
  60. package/dist/plugin/default-job-queue-plugin/constants.js +6 -0
  61. package/dist/plugin/default-job-queue-plugin/constants.js.map +1 -0
  62. package/dist/plugin/default-job-queue-plugin/default-job-queue-plugin.d.ts +24 -81
  63. package/dist/plugin/default-job-queue-plugin/default-job-queue-plugin.js +34 -0
  64. package/dist/plugin/default-job-queue-plugin/default-job-queue-plugin.js.map +1 -1
  65. package/dist/plugin/default-job-queue-plugin/types.d.ts +101 -0
  66. package/dist/plugin/default-job-queue-plugin/types.js +3 -0
  67. package/dist/plugin/default-job-queue-plugin/types.js.map +1 -0
  68. package/dist/plugin/default-scheduler-plugin/constants.d.ts +3 -0
  69. package/dist/plugin/default-scheduler-plugin/constants.js +7 -0
  70. package/dist/plugin/default-scheduler-plugin/constants.js.map +1 -0
  71. package/dist/plugin/default-scheduler-plugin/default-scheduler-strategy.d.ts +34 -0
  72. package/dist/plugin/default-scheduler-plugin/default-scheduler-strategy.js +203 -0
  73. package/dist/plugin/default-scheduler-plugin/default-scheduler-strategy.js.map +1 -0
  74. package/dist/plugin/default-scheduler-plugin/default-scheduler.plugin.d.ts +31 -0
  75. package/dist/plugin/default-scheduler-plugin/default-scheduler.plugin.js +69 -0
  76. package/dist/plugin/default-scheduler-plugin/default-scheduler.plugin.js.map +1 -0
  77. package/dist/plugin/default-scheduler-plugin/scheduled-task-record.entity.d.ts +10 -0
  78. package/dist/plugin/default-scheduler-plugin/scheduled-task-record.entity.js +50 -0
  79. package/dist/plugin/default-scheduler-plugin/scheduled-task-record.entity.js.map +1 -0
  80. package/dist/plugin/default-scheduler-plugin/types.d.ts +24 -0
  81. package/dist/plugin/default-scheduler-plugin/types.js +3 -0
  82. package/dist/plugin/default-scheduler-plugin/types.js.map +1 -0
  83. package/dist/plugin/index.d.ts +8 -6
  84. package/dist/plugin/index.js +8 -6
  85. package/dist/plugin/index.js.map +1 -1
  86. package/dist/plugin/plugin-utils.js +2 -1
  87. package/dist/plugin/plugin-utils.js.map +1 -1
  88. package/dist/scheduler/index.d.ts +4 -0
  89. package/dist/scheduler/index.js +21 -0
  90. package/dist/scheduler/index.js.map +1 -0
  91. package/dist/scheduler/noop-scheduler-strategy.d.ts +10 -0
  92. package/dist/scheduler/noop-scheduler-strategy.js +24 -0
  93. package/dist/scheduler/noop-scheduler-strategy.js.map +1 -0
  94. package/dist/scheduler/scheduled-task.d.ts +142 -0
  95. package/dist/scheduler/scheduled-task.js +88 -0
  96. package/dist/scheduler/scheduled-task.js.map +1 -0
  97. package/dist/scheduler/scheduler-strategy.d.ts +91 -0
  98. package/dist/scheduler/scheduler-strategy.js +3 -0
  99. package/dist/scheduler/scheduler-strategy.js.map +1 -0
  100. package/dist/scheduler/scheduler.module.d.ts +2 -0
  101. package/dist/scheduler/scheduler.module.js +23 -0
  102. package/dist/scheduler/scheduler.module.js.map +1 -0
  103. package/dist/scheduler/scheduler.service.d.ts +40 -0
  104. package/dist/scheduler/scheduler.service.js +160 -0
  105. package/dist/scheduler/scheduler.service.js.map +1 -0
  106. package/dist/scheduler/tasks/clean-sessions-task.d.ts +37 -0
  107. package/dist/scheduler/tasks/clean-sessions-task.js +52 -0
  108. package/dist/scheduler/tasks/clean-sessions-task.js.map +1 -0
  109. package/dist/service/helpers/list-query-builder/list-query-builder.d.ts +2 -0
  110. package/dist/service/helpers/list-query-builder/list-query-builder.js +28 -4
  111. package/dist/service/helpers/list-query-builder/list-query-builder.js.map +1 -1
  112. package/dist/service/helpers/order-calculator/order-calculator.js +2 -0
  113. package/dist/service/helpers/order-calculator/order-calculator.js.map +1 -1
  114. package/dist/service/helpers/order-modifier/order-modifier.d.ts +1 -1
  115. package/dist/service/helpers/order-modifier/order-modifier.js +4 -2
  116. package/dist/service/helpers/order-modifier/order-modifier.js.map +1 -1
  117. package/dist/service/service.module.js +2 -1
  118. package/dist/service/service.module.js.map +1 -1
  119. package/dist/service/services/administrator.service.js +2 -0
  120. package/dist/service/services/administrator.service.js.map +1 -1
  121. package/dist/service/services/asset.service.js +3 -1
  122. package/dist/service/services/asset.service.js.map +1 -1
  123. package/dist/service/services/auth.service.d.ts +1 -1
  124. package/dist/service/services/auth.service.js +2 -0
  125. package/dist/service/services/auth.service.js.map +1 -1
  126. package/dist/service/services/channel.service.js +2 -0
  127. package/dist/service/services/channel.service.js.map +1 -1
  128. package/dist/service/services/collection.service.js +12 -6
  129. package/dist/service/services/collection.service.js.map +1 -1
  130. package/dist/service/services/country.service.js +2 -0
  131. package/dist/service/services/country.service.js.map +1 -1
  132. package/dist/service/services/customer-group.service.d.ts +1 -1
  133. package/dist/service/services/customer-group.service.js +3 -1
  134. package/dist/service/services/customer-group.service.js.map +1 -1
  135. package/dist/service/services/customer.service.d.ts +1 -1
  136. package/dist/service/services/customer.service.js +2 -0
  137. package/dist/service/services/customer.service.js.map +1 -1
  138. package/dist/service/services/facet-value.service.d.ts +1 -1
  139. package/dist/service/services/facet-value.service.js +2 -0
  140. package/dist/service/services/facet-value.service.js.map +1 -1
  141. package/dist/service/services/facet.service.js +2 -1
  142. package/dist/service/services/facet.service.js.map +1 -1
  143. package/dist/service/services/fulfillment.service.d.ts +1 -1
  144. package/dist/service/services/fulfillment.service.js +4 -2
  145. package/dist/service/services/fulfillment.service.js.map +1 -1
  146. package/dist/service/services/global-settings.service.js +2 -0
  147. package/dist/service/services/global-settings.service.js.map +1 -1
  148. package/dist/service/services/history.service.js +2 -0
  149. package/dist/service/services/history.service.js.map +1 -1
  150. package/dist/service/services/order-testing.service.js +3 -1
  151. package/dist/service/services/order-testing.service.js.map +1 -1
  152. package/dist/service/services/order.service.d.ts +1 -1
  153. package/dist/service/services/order.service.js +4 -2
  154. package/dist/service/services/order.service.js.map +1 -1
  155. package/dist/service/services/payment-method.service.js +2 -0
  156. package/dist/service/services/payment-method.service.js.map +1 -1
  157. package/dist/service/services/payment.service.js +4 -2
  158. package/dist/service/services/payment.service.js.map +1 -1
  159. package/dist/service/services/product-option-group.service.js +3 -1
  160. package/dist/service/services/product-option-group.service.js.map +1 -1
  161. package/dist/service/services/product-option.service.d.ts +1 -1
  162. package/dist/service/services/product-option.service.js +3 -1
  163. package/dist/service/services/product-option.service.js.map +1 -1
  164. package/dist/service/services/product-variant.service.d.ts +1 -1
  165. package/dist/service/services/product-variant.service.js +3 -1
  166. package/dist/service/services/product-variant.service.js.map +1 -1
  167. package/dist/service/services/product.service.js +13 -4
  168. package/dist/service/services/product.service.js.map +1 -1
  169. package/dist/service/services/promotion.service.js +2 -0
  170. package/dist/service/services/promotion.service.js.map +1 -1
  171. package/dist/service/services/role.service.js +2 -0
  172. package/dist/service/services/role.service.js.map +1 -1
  173. package/dist/service/services/seller.service.js +2 -0
  174. package/dist/service/services/seller.service.js.map +1 -1
  175. package/dist/service/services/session.service.d.ts +19 -2
  176. package/dist/service/services/session.service.js +60 -2
  177. package/dist/service/services/session.service.js.map +1 -1
  178. package/dist/service/services/shipping-method.service.js +2 -0
  179. package/dist/service/services/shipping-method.service.js.map +1 -1
  180. package/dist/service/services/stock-level.service.js +2 -0
  181. package/dist/service/services/stock-level.service.js.map +1 -1
  182. package/dist/service/services/stock-location.service.js +2 -0
  183. package/dist/service/services/stock-location.service.js.map +1 -1
  184. package/dist/service/services/stock-movement.service.d.ts +1 -3
  185. package/dist/service/services/stock-movement.service.js +4 -5
  186. package/dist/service/services/stock-movement.service.js.map +1 -1
  187. package/dist/service/services/tag.service.js +4 -1
  188. package/dist/service/services/tag.service.js.map +1 -1
  189. package/dist/service/services/tax-category.service.js +2 -0
  190. package/dist/service/services/tax-category.service.js.map +1 -1
  191. package/dist/service/services/tax-rate.service.js +2 -0
  192. package/dist/service/services/tax-rate.service.js.map +1 -1
  193. package/dist/service/services/user.service.js +2 -0
  194. package/dist/service/services/user.service.js.map +1 -1
  195. package/dist/service/services/zone.service.js +2 -0
  196. package/dist/service/services/zone.service.js.map +1 -1
  197. package/package.json +7 -4
@@ -0,0 +1,142 @@
1
+ import CronTime from 'cron-time-generator';
2
+ import { RequestContext } from '../api';
3
+ import { Injector } from '../common/index';
4
+ /**
5
+ * @description
6
+ * The arguments passed to the execute method of a scheduled task.
7
+ *
8
+ * @since 3.3.0
9
+ * @docsCategory scheduled-tasks
10
+ * @docsPage ScheduledTask
11
+ */
12
+ export interface ScheduledTaskExecutionArgs<C extends Record<string, any> = Record<string, any>> {
13
+ /**
14
+ * @description
15
+ * The injector instance.
16
+ */
17
+ injector: Injector;
18
+ /**
19
+ * @description
20
+ * A RequestContext instance that is configured for the scheduled task.
21
+ */
22
+ scheduledContext: RequestContext;
23
+ /**
24
+ * @description
25
+ * The parameters for the scheduled task.
26
+ */
27
+ params: C;
28
+ }
29
+ /**
30
+ * @description
31
+ * The configuration for a scheduled task.
32
+ *
33
+ * @since 3.3.0
34
+ * @docsCategory scheduled-tasks
35
+ * @docsPage ScheduledTask
36
+ */
37
+ export interface ScheduledTaskConfig<C extends Record<string, any> = Record<string, any>> {
38
+ /**
39
+ * @description
40
+ * The unique identifier for the scheduled task.
41
+ */
42
+ id: string;
43
+ /**
44
+ * @description
45
+ * The description for the scheduled task.
46
+ */
47
+ description?: string;
48
+ /**
49
+ * @description
50
+ * Optional parameters that will be passed to the `execute` function.
51
+ */
52
+ params?: C;
53
+ /**
54
+ * @description
55
+ * The cron schedule for the scheduled task. This can be a standard cron expression or
56
+ * a function that returns a [cron-time-generator](https://www.npmjs.com/package/cron-time-generator)
57
+ * expression.
58
+ *
59
+ * @example
60
+ * ```ts
61
+ * // Standard cron expression
62
+ * { schedule: '0 0-23/5 * * *', } // every 5 hours
63
+ * { schedule: '0 22 * * *', } // every day at 10:00 PM
64
+ *
65
+ * // Cron-time-generator expression
66
+ * { schedule: cronTime => cronTime.every(2).minutes(), }
67
+ * { schedule: cronTime => cronTime.every(5).hours(), }
68
+ * ```
69
+ */
70
+ schedule: string | ((cronTime: typeof CronTime) => string);
71
+ /**
72
+ * @description
73
+ * The timeout for the scheduled task. If the task takes longer than the timeout, the task
74
+ * will be considered to have failed with a timeout error.
75
+ *
76
+ * @default 60_000ms
77
+ */
78
+ timeout?: number | string;
79
+ /**
80
+ * @description
81
+ * Whether the scheduled task should be prevented from running if it is already running.
82
+ *
83
+ * @default true
84
+ */
85
+ preventOverlap?: boolean;
86
+ /**
87
+ * @description
88
+ * The function that will be executed when the scheduled task is run.
89
+ */
90
+ execute(args: ScheduledTaskExecutionArgs<C>): Promise<any>;
91
+ }
92
+ /**
93
+ * @description
94
+ * Use this class to define a scheduled task that will be executed at a given cron schedule.
95
+ *
96
+ * @example
97
+ * ```ts
98
+ * import { ScheduledTask } from '\@vendure/core';
99
+ *
100
+ * const task = new ScheduledTask({
101
+ * id: 'test-job',
102
+ * schedule: cron => cron.every(2).minutes(),
103
+ * execute: async ({ injector, scheduledContext, params }) => {
104
+ * // some logic here
105
+ * },
106
+ * });
107
+ * ```
108
+ *
109
+ * @since 3.3.0
110
+ * @docsCategory scheduled-tasks
111
+ * @docsPage ScheduledTask
112
+ * @docsWeight 0
113
+ */
114
+ export declare class ScheduledTask<C extends Record<string, any> = Record<string, any>> {
115
+ private readonly config;
116
+ constructor(config: ScheduledTaskConfig<C>);
117
+ get id(): string;
118
+ get options(): ScheduledTaskConfig<C>;
119
+ execute(injector: Injector): Promise<any>;
120
+ /**
121
+ * @description
122
+ * This method allows you to further configure existing scheduled tasks. For example, you may
123
+ * wish to change the schedule or timeout of a task, without having to define a new task.
124
+ *
125
+ * @example
126
+ * ```ts
127
+ * import { ScheduledTask } from '\@vendure/core';
128
+ *
129
+ * const task = new ScheduledTask({
130
+ * id: 'test-job',
131
+ * schedule: cron => cron.every(2).minutes(),
132
+ * execute: async ({ injector, scheduledContext, params }) => {
133
+ * // some logic here
134
+ * },
135
+ * });
136
+ *
137
+ * // later, you can configure the task
138
+ * task.configure({ schedule: cron => cron.every(5).minutes() });
139
+ * ```
140
+ */
141
+ configure(additionalConfig: Partial<Pick<ScheduledTaskConfig<C>, 'schedule' | 'timeout' | 'params'>>): this;
142
+ }
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ScheduledTask = void 0;
4
+ const request_context_service_1 = require("../service/helpers/request-context/request-context.service");
5
+ const channel_service_1 = require("../service/services/channel.service");
6
+ /**
7
+ * @description
8
+ * Use this class to define a scheduled task that will be executed at a given cron schedule.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import { ScheduledTask } from '\@vendure/core';
13
+ *
14
+ * const task = new ScheduledTask({
15
+ * id: 'test-job',
16
+ * schedule: cron => cron.every(2).minutes(),
17
+ * execute: async ({ injector, scheduledContext, params }) => {
18
+ * // some logic here
19
+ * },
20
+ * });
21
+ * ```
22
+ *
23
+ * @since 3.3.0
24
+ * @docsCategory scheduled-tasks
25
+ * @docsPage ScheduledTask
26
+ * @docsWeight 0
27
+ */
28
+ class ScheduledTask {
29
+ constructor(config) {
30
+ this.config = config;
31
+ }
32
+ get id() {
33
+ return this.config.id;
34
+ }
35
+ get options() {
36
+ return this.config;
37
+ }
38
+ async execute(injector) {
39
+ var _a;
40
+ const requestContextService = injector.get(request_context_service_1.RequestContextService);
41
+ const channelService = injector.get(channel_service_1.ChannelService);
42
+ const defaultChannel = await channelService.getDefaultChannel();
43
+ const scheduledContext = await requestContextService.create({
44
+ apiType: 'admin',
45
+ channelOrToken: defaultChannel,
46
+ });
47
+ return this.config.execute({
48
+ injector,
49
+ scheduledContext,
50
+ params: (_a = this.config.params) !== null && _a !== void 0 ? _a : {},
51
+ });
52
+ }
53
+ /**
54
+ * @description
55
+ * This method allows you to further configure existing scheduled tasks. For example, you may
56
+ * wish to change the schedule or timeout of a task, without having to define a new task.
57
+ *
58
+ * @example
59
+ * ```ts
60
+ * import { ScheduledTask } from '\@vendure/core';
61
+ *
62
+ * const task = new ScheduledTask({
63
+ * id: 'test-job',
64
+ * schedule: cron => cron.every(2).minutes(),
65
+ * execute: async ({ injector, scheduledContext, params }) => {
66
+ * // some logic here
67
+ * },
68
+ * });
69
+ *
70
+ * // later, you can configure the task
71
+ * task.configure({ schedule: cron => cron.every(5).minutes() });
72
+ * ```
73
+ */
74
+ configure(additionalConfig) {
75
+ if (additionalConfig.schedule) {
76
+ this.config.schedule = additionalConfig.schedule;
77
+ }
78
+ if (additionalConfig.timeout) {
79
+ this.config.timeout = additionalConfig.timeout;
80
+ }
81
+ if (additionalConfig.params) {
82
+ this.config.params = additionalConfig.params;
83
+ }
84
+ return this;
85
+ }
86
+ }
87
+ exports.ScheduledTask = ScheduledTask;
88
+ //# sourceMappingURL=scheduled-task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduled-task.js","sourceRoot":"","sources":["../../src/scheduler/scheduled-task.ts"],"names":[],"mappings":";;;AAIA,wGAAmG;AACnG,yEAAqE;AA4FrE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAa,aAAa;IACtB,YAA6B,MAA8B;QAA9B,WAAM,GAAN,MAAM,CAAwB;IAAG,CAAC;IAE/D,IAAI,EAAE;QACF,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;IAC1B,CAAC;IAED,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,QAAkB;;QAC5B,MAAM,qBAAqB,GAAG,QAAQ,CAAC,GAAG,CAAC,+CAAqB,CAAC,CAAC;QAClE,MAAM,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC,gCAAc,CAAC,CAAC;QACpD,MAAM,cAAc,GAAG,MAAM,cAAc,CAAC,iBAAiB,EAAE,CAAC;QAEhE,MAAM,gBAAgB,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC;YACxD,OAAO,EAAE,OAAO;YAChB,cAAc,EAAE,cAAc;SACjC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;YACvB,QAAQ;YACR,gBAAgB;YAChB,MAAM,EAAE,MAAA,IAAI,CAAC,MAAM,CAAC,MAAM,mCAAK,EAAU;SAC5C,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,SAAS,CAAC,gBAA0F;QAChG,IAAI,gBAAgB,CAAC,QAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC;QACrD,CAAC;QACD,IAAI,gBAAgB,CAAC,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC;QACnD,CAAC;QACD,IAAI,gBAAgB,CAAC,MAAM,EAAE,CAAC;YAC1B,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC;QACjD,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AA7DD,sCA6DC"}
@@ -0,0 +1,91 @@
1
+ import { UpdateScheduledTaskInput } from '@vendure/common/lib/generated-types';
2
+ import { Cron } from 'croner';
3
+ import { InjectableStrategy } from '../common';
4
+ import { ScheduledTask } from './scheduled-task';
5
+ /**
6
+ * @description
7
+ * A report on the status of a scheduled task.
8
+ *
9
+ * @since 3.3.0
10
+ * @docsCategory scheduled-tasks
11
+ * @docsPage SchedulerStrategy
12
+ */
13
+ export interface TaskReport {
14
+ id: string;
15
+ lastExecutedAt: Date | null;
16
+ isRunning: boolean;
17
+ lastResult: any;
18
+ enabled: boolean;
19
+ }
20
+ /**
21
+ * @description
22
+ * This strategy is used to define the mechanism by which scheduled tasks are executed
23
+ * and how they are reported on. The main purpose of this strategy is to ensure
24
+ * that a given task is executed exactly once at the scheduled time, even if there
25
+ * are multiple instances of the worker running.
26
+ *
27
+ * To do this, the strategy must use some form of shared storage and a method of
28
+ * locking so that only a single worker is allowed to execute the task.
29
+ *
30
+ * By default, the {@link DefaultSchedulerStrategy} will use the database to enable
31
+ * this functionality.
32
+ *
33
+ * @since 3.3.0
34
+ * @docsCategory scheduled-tasks
35
+ * @docsPage SchedulerStrategy
36
+ * @docsWeight 0
37
+ */
38
+ export interface SchedulerStrategy extends InjectableStrategy {
39
+ /**
40
+ * @description
41
+ * An optional method that may be used by the strategy to register all the configured
42
+ * tasks ahead of time. This can be useful for keeping an internal reference of
43
+ * all the tasks to aid in the specific strategy implemetation.
44
+ */
45
+ registerTask?(task: ScheduledTask): void;
46
+ /**
47
+ * @description
48
+ * Execute a scheduled task. This method must also take care of
49
+ * ensuring that the task is executed exactly once at the scheduled time,
50
+ * even if there are multiple instances of the worker running.
51
+ *
52
+ * For instance, in the {@link DefaultSchedulerStrategy} we make use of a
53
+ * dedicated database table and a locking mechansim. If you implement a custom
54
+ * SchedulerStrategy, you must use some other form of shared locking mechanism
55
+ * that could make use of something like Redis etc. to ensure that the task
56
+ * is executed exactly once at the scheduled time.
57
+ *
58
+ * The function returned is then called in order to execture the task. The
59
+ * `job` argument is an instance of the croner `Cron` class, except when
60
+ * the task has been manually triggered, in which case it will be undefined.
61
+ */
62
+ executeTask(task: ScheduledTask): (job?: Cron) => Promise<any> | any;
63
+ /**
64
+ * @description
65
+ * Get all scheduled tasks.
66
+ */
67
+ getTasks(): Promise<TaskReport[]>;
68
+ /**
69
+ * @description
70
+ * Get a single scheduled task by its id.
71
+ */
72
+ getTask(id: string): Promise<TaskReport | undefined>;
73
+ /**
74
+ * @description
75
+ * Manually trigger a given task. This method is not used to actually invoke the
76
+ * task function itself, since that would cause the task to run on the server
77
+ * instance which we typically do not want. Instead, it should be used
78
+ * to signal to the strategy that this specific task needs to be invoked
79
+ * at the soonest opportunity.
80
+ *
81
+ * For instance, in the {@link DefaultSchedulerStrategy} this is done by setting
82
+ * a flag in the database table which is checked periodically and causes those tasks
83
+ * to get immediately invoked.
84
+ */
85
+ triggerTask(task: ScheduledTask): Promise<void>;
86
+ /**
87
+ * @description
88
+ * Update a scheduled task.
89
+ */
90
+ updateTask(input: UpdateScheduledTaskInput): Promise<TaskReport>;
91
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=scheduler-strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler-strategy.js","sourceRoot":"","sources":["../../src/scheduler/scheduler-strategy.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export declare class SchedulerModule {
2
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.SchedulerModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const index_1 = require("../config/index");
12
+ const scheduler_service_1 = require("./scheduler.service");
13
+ let SchedulerModule = class SchedulerModule {
14
+ };
15
+ exports.SchedulerModule = SchedulerModule;
16
+ exports.SchedulerModule = SchedulerModule = __decorate([
17
+ (0, common_1.Module)({
18
+ imports: [index_1.ConfigModule],
19
+ providers: [scheduler_service_1.SchedulerService],
20
+ exports: [scheduler_service_1.SchedulerService],
21
+ })
22
+ ], SchedulerModule);
23
+ //# sourceMappingURL=scheduler.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.module.js","sourceRoot":"","sources":["../../src/scheduler/scheduler.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AAExC,2CAA+C;AAE/C,2DAAuD;AAOhD,IAAM,eAAe,GAArB,MAAM,eAAe;CAAG,CAAA;AAAlB,0CAAe;0BAAf,eAAe;IAL3B,IAAA,eAAM,EAAC;QACJ,OAAO,EAAE,CAAC,oBAAY,CAAC;QACvB,SAAS,EAAE,CAAC,oCAAgB,CAAC;QAC7B,OAAO,EAAE,CAAC,oCAAgB,CAAC;KAC9B,CAAC;GACW,eAAe,CAAG"}
@@ -0,0 +1,40 @@
1
+ import { OnApplicationBootstrap, OnApplicationShutdown } from '@nestjs/common';
2
+ import { Success, UpdateScheduledTaskInput } from '@vendure/common/lib/generated-types';
3
+ import { ConfigService } from '../config/config.service';
4
+ import { ProcessContext } from '../process-context';
5
+ export interface TaskInfo {
6
+ id: string;
7
+ description: string;
8
+ schedule: string;
9
+ scheduleDescription: string;
10
+ lastExecutedAt: Date | null;
11
+ nextExecutionAt: Date | null;
12
+ isRunning: boolean;
13
+ lastResult: any;
14
+ enabled: boolean;
15
+ }
16
+ /**
17
+ * @description
18
+ * The service that is responsible for setting up and querying the scheduled tasks.
19
+ *
20
+ * @since 3.3.0
21
+ * @docsCategory scheduled-tasks
22
+ */
23
+ export declare class SchedulerService implements OnApplicationBootstrap, OnApplicationShutdown {
24
+ private readonly configService;
25
+ private readonly processContext;
26
+ private readonly jobs;
27
+ private shouldRunTasks;
28
+ constructor(configService: ConfigService, processContext: ProcessContext);
29
+ onApplicationBootstrap(): void;
30
+ onApplicationShutdown(signal?: string): void;
31
+ /**
32
+ * @description
33
+ * Returns a list of all the scheduled tasks and their current status.
34
+ */
35
+ getTaskList(): Promise<TaskInfo[]>;
36
+ updateTask(input: UpdateScheduledTaskInput): Promise<TaskInfo>;
37
+ runTask(taskId: string): Promise<Success>;
38
+ private createTaskInfo;
39
+ private createCronJob;
40
+ }
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.SchedulerService = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const cron_time_generator_1 = __importDefault(require("cron-time-generator"));
18
+ const croner_1 = require("croner");
19
+ const cronstrue_1 = __importDefault(require("cronstrue"));
20
+ const config_service_1 = require("../config/config.service");
21
+ const vendure_logger_1 = require("../config/logger/vendure-logger");
22
+ const process_context_1 = require("../process-context");
23
+ const noop_scheduler_strategy_1 = require("./noop-scheduler-strategy");
24
+ /**
25
+ * @description
26
+ * The service that is responsible for setting up and querying the scheduled tasks.
27
+ *
28
+ * @since 3.3.0
29
+ * @docsCategory scheduled-tasks
30
+ */
31
+ let SchedulerService = class SchedulerService {
32
+ constructor(configService, processContext) {
33
+ this.configService = configService;
34
+ this.processContext = processContext;
35
+ this.jobs = new Map();
36
+ this.shouldRunTasks = false;
37
+ }
38
+ onApplicationBootstrap() {
39
+ var _a, _b;
40
+ const schedulerStrategy = this.configService.schedulerOptions.schedulerStrategy;
41
+ if (!schedulerStrategy || schedulerStrategy instanceof noop_scheduler_strategy_1.NoopSchedulerStrategy) {
42
+ vendure_logger_1.Logger.warn('No scheduler strategy is configured! Scheduled tasks will not be executed.');
43
+ vendure_logger_1.Logger.warn('Please use the `DefaultSchedulerPlugin` (or alternative) to enable scheduled tasks.');
44
+ return;
45
+ }
46
+ this.shouldRunTasks =
47
+ this.configService.schedulerOptions.runTasksInWorkerOnly === false ||
48
+ this.processContext.isWorker;
49
+ const scheduledTasks = (_a = this.configService.schedulerOptions.tasks) !== null && _a !== void 0 ? _a : [];
50
+ for (const task of scheduledTasks) {
51
+ const job = this.createCronJob(task);
52
+ const pattern = job.getPattern();
53
+ if (!pattern) {
54
+ vendure_logger_1.Logger.warn(`Invalid cron pattern for task ${task.id}`);
55
+ }
56
+ else {
57
+ if (this.shouldRunTasks) {
58
+ const schedule = cronstrue_1.default.toString(pattern);
59
+ vendure_logger_1.Logger.info(`Registered scheduled task: ${task.id} - ${schedule}`);
60
+ }
61
+ this.jobs.set(task.id, { task, job });
62
+ }
63
+ (_b = schedulerStrategy.registerTask) === null || _b === void 0 ? void 0 : _b.call(schedulerStrategy, task);
64
+ }
65
+ }
66
+ onApplicationShutdown(signal) {
67
+ for (const job of this.jobs.values()) {
68
+ job.job.stop();
69
+ }
70
+ }
71
+ /**
72
+ * @description
73
+ * Returns a list of all the scheduled tasks and their current status.
74
+ */
75
+ getTaskList() {
76
+ return this.configService.schedulerOptions.schedulerStrategy
77
+ .getTasks()
78
+ .then(taskReports => taskReports.map(taskReport => this.createTaskInfo(taskReport)).filter(x => x !== undefined));
79
+ }
80
+ updateTask(input) {
81
+ return this.configService.schedulerOptions.schedulerStrategy.updateTask(input).then(taskReport => {
82
+ const taskInfo = this.createTaskInfo(taskReport);
83
+ if (!taskInfo) {
84
+ throw new Error(`Task ${input.id} not found`);
85
+ }
86
+ return taskInfo;
87
+ });
88
+ }
89
+ async runTask(taskId) {
90
+ const task = this.jobs.get(taskId);
91
+ if (!task) {
92
+ return {
93
+ success: false,
94
+ };
95
+ }
96
+ try {
97
+ await this.configService.schedulerOptions.schedulerStrategy.triggerTask(task.task);
98
+ return {
99
+ success: true,
100
+ };
101
+ }
102
+ catch (e) {
103
+ vendure_logger_1.Logger.error(`Could not trigger task: ` + e.message);
104
+ return {
105
+ success: false,
106
+ };
107
+ }
108
+ }
109
+ createTaskInfo(taskReport) {
110
+ var _a, _b, _c;
111
+ const job = (_a = this.jobs.get(taskReport.id)) === null || _a === void 0 ? void 0 : _a.job;
112
+ const task = (_b = this.jobs.get(taskReport.id)) === null || _b === void 0 ? void 0 : _b.task;
113
+ if (!job || !task) {
114
+ return;
115
+ }
116
+ const pattern = job.getPattern();
117
+ return {
118
+ id: taskReport.id,
119
+ description: (_c = task.options.description) !== null && _c !== void 0 ? _c : '',
120
+ schedule: pattern !== null && pattern !== void 0 ? pattern : 'unknown',
121
+ scheduleDescription: pattern ? cronstrue_1.default.toString(pattern) : 'unknown',
122
+ lastExecutedAt: taskReport.lastExecutedAt,
123
+ nextExecutionAt: job.nextRun(),
124
+ isRunning: taskReport.isRunning,
125
+ lastResult: taskReport.lastResult,
126
+ enabled: taskReport.enabled,
127
+ };
128
+ }
129
+ createCronJob(task) {
130
+ const schedulerStrategy = this.configService.schedulerOptions.schedulerStrategy;
131
+ const protectCallback = (_job) => {
132
+ const currentRun = _job.currentRun();
133
+ if (currentRun) {
134
+ vendure_logger_1.Logger.warn(`Task invocation of ${task.id} at ${new Date().toISOString()} was blocked because an existing task is still running at ${currentRun.toISOString()}`);
135
+ }
136
+ };
137
+ const schedule = typeof task.options.schedule === 'function'
138
+ ? task.options.schedule(cron_time_generator_1.default)
139
+ : task.options.schedule;
140
+ const job = new croner_1.Cron(schedule, {
141
+ name: task.id,
142
+ protect: task.options.preventOverlap ? protectCallback : undefined,
143
+ }, () => {
144
+ if (this.shouldRunTasks) {
145
+ // Only execute the cron task on the worker process
146
+ // so that any expensive logic does not affect
147
+ // the responsiveness of server processes
148
+ schedulerStrategy.executeTask(task)(job);
149
+ }
150
+ });
151
+ return job;
152
+ }
153
+ };
154
+ exports.SchedulerService = SchedulerService;
155
+ exports.SchedulerService = SchedulerService = __decorate([
156
+ (0, common_1.Injectable)(),
157
+ __metadata("design:paramtypes", [config_service_1.ConfigService,
158
+ process_context_1.ProcessContext])
159
+ ], SchedulerService);
160
+ //# sourceMappingURL=scheduler.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.service.js","sourceRoot":"","sources":["../../src/scheduler/scheduler.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { ScheduledTask } from '../scheduled-task';
2
+ /**
3
+ * @description
4
+ * A {@link ScheduledTask} that cleans expired & inactive sessions from the database.
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * import { cleanSessionsTask, VendureConfig } from '\@vendure/core';
9
+ *
10
+ * export const config: VendureConfig = {
11
+ * // ...
12
+ * schedulerOptions: {
13
+ * tasks: [
14
+ * // Use the task as is
15
+ * cleanSessionsTask,
16
+ * // or configure the task
17
+ * cleanSessionsTask.configure({
18
+ * // Run the task every day at 3:00am
19
+ * // The default schedule is every day at 00:00am
20
+ * schedule: cron => cron.everyDayAt(3, 0),
21
+ * params: {
22
+ * // How many sessions to process in each batch
23
+ * // Default: 1000
24
+ * batchSize: 5_000,
25
+ * },
26
+ * }),
27
+ * ],
28
+ * },
29
+ * };
30
+ * ```
31
+ *
32
+ * @since 3.3.0
33
+ * @docsCategory scheduled-tasks
34
+ */
35
+ export declare const cleanSessionsTask: ScheduledTask<{
36
+ batchSize: number;
37
+ }>;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cleanSessionsTask = void 0;
4
+ const session_service_1 = require("../../service/services/session.service");
5
+ const scheduled_task_1 = require("../scheduled-task");
6
+ /**
7
+ * @description
8
+ * A {@link ScheduledTask} that cleans expired & inactive sessions from the database.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import { cleanSessionsTask, VendureConfig } from '\@vendure/core';
13
+ *
14
+ * export const config: VendureConfig = {
15
+ * // ...
16
+ * schedulerOptions: {
17
+ * tasks: [
18
+ * // Use the task as is
19
+ * cleanSessionsTask,
20
+ * // or configure the task
21
+ * cleanSessionsTask.configure({
22
+ * // Run the task every day at 3:00am
23
+ * // The default schedule is every day at 00:00am
24
+ * schedule: cron => cron.everyDayAt(3, 0),
25
+ * params: {
26
+ * // How many sessions to process in each batch
27
+ * // Default: 1000
28
+ * batchSize: 5_000,
29
+ * },
30
+ * }),
31
+ * ],
32
+ * },
33
+ * };
34
+ * ```
35
+ *
36
+ * @since 3.3.0
37
+ * @docsCategory scheduled-tasks
38
+ */
39
+ exports.cleanSessionsTask = new scheduled_task_1.ScheduledTask({
40
+ id: 'clean-sessions',
41
+ description: 'Clean expired & inactive sessions from the database',
42
+ params: {
43
+ batchSize: 1000,
44
+ },
45
+ schedule: cron => cron.everyDayAt(0, 0),
46
+ async execute({ injector, params }) {
47
+ const sessionService = injector.get(session_service_1.SessionService);
48
+ await sessionService.triggerCleanSessionsJob(params.batchSize);
49
+ return { result: 'Triggered clean sessions job' };
50
+ },
51
+ });
52
+ //# sourceMappingURL=clean-sessions-task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean-sessions-task.js","sourceRoot":"","sources":["../../../src/scheduler/tasks/clean-sessions-task.ts"],"names":[],"mappings":";;;AAAA,4EAAwE;AACxE,sDAAkD;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACU,QAAA,iBAAiB,GAAG,IAAI,8BAAa,CAAC;IAC/C,EAAE,EAAE,gBAAgB;IACpB,WAAW,EAAE,qDAAqD;IAClE,MAAM,EAAE;QACJ,SAAS,EAAE,IAAI;KAClB;IACD,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;IACvC,KAAK,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE;QAC9B,MAAM,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC,gCAAc,CAAC,CAAC;QACpD,MAAM,cAAc,CAAC,uBAAuB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC/D,OAAO,EAAE,MAAM,EAAE,8BAA8B,EAAE,CAAC;IACtD,CAAC;CACJ,CAAC,CAAC"}