@vendure/core 3.2.4 → 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.
- package/dist/api/api-internal-modules.js +4 -0
- package/dist/api/api-internal-modules.js.map +1 -1
- package/dist/api/middleware/asset-interceptor-plugin.js +17 -2
- package/dist/api/middleware/asset-interceptor-plugin.js.map +1 -1
- package/dist/api/resolvers/admin/draft-order.resolver.d.ts +1 -1
- package/dist/api/resolvers/admin/order.resolver.d.ts +1 -1
- package/dist/api/resolvers/admin/product.resolver.d.ts +1 -1
- package/dist/api/resolvers/admin/product.resolver.js +1 -1
- package/dist/api/resolvers/admin/product.resolver.js.map +1 -1
- package/dist/api/resolvers/admin/scheduled-task.resolver.d.ts +9 -0
- package/dist/api/resolvers/admin/scheduled-task.resolver.js +62 -0
- package/dist/api/resolvers/admin/scheduled-task.resolver.js.map +1 -0
- package/dist/api/schema/admin-api/scheduled-task.api.graphql +25 -0
- package/dist/cache/cache.service.js +2 -0
- package/dist/cache/cache.service.js.map +1 -1
- package/dist/common/index.d.ts +6 -5
- package/dist/common/index.js +6 -5
- package/dist/common/index.js.map +1 -1
- package/dist/common/instrument-decorator.d.ts +41 -0
- package/dist/common/instrument-decorator.js +103 -0
- package/dist/common/instrument-decorator.js.map +1 -0
- package/dist/config/config.module.js +4 -1
- package/dist/config/config.module.js.map +1 -1
- package/dist/config/config.service.d.ts +2 -1
- package/dist/config/config.service.js +3 -0
- package/dist/config/config.service.js.map +1 -1
- package/dist/config/default-config.js +9 -0
- package/dist/config/default-config.js.map +1 -1
- package/dist/config/index.d.ts +8 -7
- package/dist/config/index.js +8 -7
- package/dist/config/index.js.map +1 -1
- package/dist/config/system/instrumentation-strategy.d.ts +56 -0
- package/dist/config/system/instrumentation-strategy.js +3 -0
- package/dist/config/system/instrumentation-strategy.js.map +1 -0
- package/dist/config/system/noop-instrumentation-strategy.d.ts +4 -0
- package/dist/config/system/noop-instrumentation-strategy.js +10 -0
- package/dist/config/system/noop-instrumentation-strategy.js.map +1 -0
- package/dist/config/vendure-config.d.ts +47 -1
- package/dist/connection/connection.module.d.ts +1 -1
- package/dist/event-bus/event-bus.js +2 -0
- package/dist/event-bus/event-bus.js.map +1 -1
- package/dist/index.d.ts +9 -8
- package/dist/index.js +19 -18
- package/dist/index.js.map +1 -1
- package/dist/job-queue/job-queue.js +17 -2
- package/dist/job-queue/job-queue.js.map +1 -1
- package/dist/job-queue/job-queue.service.js +4 -1
- package/dist/job-queue/job-queue.service.js.map +1 -1
- package/dist/plugin/default-cache-plugin/sql-cache-strategy.js +16 -2
- package/dist/plugin/default-cache-plugin/sql-cache-strategy.js.map +1 -1
- package/dist/plugin/default-job-queue-plugin/clean-jobs-task.d.ts +11 -0
- package/dist/plugin/default-job-queue-plugin/clean-jobs-task.js +51 -0
- package/dist/plugin/default-job-queue-plugin/clean-jobs-task.js.map +1 -0
- package/dist/plugin/default-job-queue-plugin/constants.d.ts +2 -0
- package/dist/plugin/default-job-queue-plugin/constants.js +6 -0
- package/dist/plugin/default-job-queue-plugin/constants.js.map +1 -0
- package/dist/plugin/default-job-queue-plugin/default-job-queue-plugin.d.ts +24 -81
- package/dist/plugin/default-job-queue-plugin/default-job-queue-plugin.js +34 -0
- package/dist/plugin/default-job-queue-plugin/default-job-queue-plugin.js.map +1 -1
- package/dist/plugin/default-job-queue-plugin/types.d.ts +101 -0
- package/dist/plugin/default-job-queue-plugin/types.js +3 -0
- package/dist/plugin/default-job-queue-plugin/types.js.map +1 -0
- package/dist/plugin/default-scheduler-plugin/constants.d.ts +3 -0
- package/dist/plugin/default-scheduler-plugin/constants.js +7 -0
- package/dist/plugin/default-scheduler-plugin/constants.js.map +1 -0
- package/dist/plugin/default-scheduler-plugin/default-scheduler-strategy.d.ts +34 -0
- package/dist/plugin/default-scheduler-plugin/default-scheduler-strategy.js +203 -0
- package/dist/plugin/default-scheduler-plugin/default-scheduler-strategy.js.map +1 -0
- package/dist/plugin/default-scheduler-plugin/default-scheduler.plugin.d.ts +31 -0
- package/dist/plugin/default-scheduler-plugin/default-scheduler.plugin.js +69 -0
- package/dist/plugin/default-scheduler-plugin/default-scheduler.plugin.js.map +1 -0
- package/dist/plugin/default-scheduler-plugin/scheduled-task-record.entity.d.ts +10 -0
- package/dist/plugin/default-scheduler-plugin/scheduled-task-record.entity.js +50 -0
- package/dist/plugin/default-scheduler-plugin/scheduled-task-record.entity.js.map +1 -0
- package/dist/plugin/default-scheduler-plugin/types.d.ts +24 -0
- package/dist/plugin/default-scheduler-plugin/types.js +3 -0
- package/dist/plugin/default-scheduler-plugin/types.js.map +1 -0
- package/dist/plugin/index.d.ts +8 -6
- package/dist/plugin/index.js +8 -6
- package/dist/plugin/index.js.map +1 -1
- package/dist/scheduler/index.d.ts +4 -0
- package/dist/scheduler/index.js +21 -0
- package/dist/scheduler/index.js.map +1 -0
- package/dist/scheduler/noop-scheduler-strategy.d.ts +10 -0
- package/dist/scheduler/noop-scheduler-strategy.js +24 -0
- package/dist/scheduler/noop-scheduler-strategy.js.map +1 -0
- package/dist/scheduler/scheduled-task.d.ts +142 -0
- package/dist/scheduler/scheduled-task.js +88 -0
- package/dist/scheduler/scheduled-task.js.map +1 -0
- package/dist/scheduler/scheduler-strategy.d.ts +91 -0
- package/dist/scheduler/scheduler-strategy.js +3 -0
- package/dist/scheduler/scheduler-strategy.js.map +1 -0
- package/dist/scheduler/scheduler.module.d.ts +2 -0
- package/dist/scheduler/scheduler.module.js +23 -0
- package/dist/scheduler/scheduler.module.js.map +1 -0
- package/dist/scheduler/scheduler.service.d.ts +40 -0
- package/dist/scheduler/scheduler.service.js +160 -0
- package/dist/scheduler/scheduler.service.js.map +1 -0
- package/dist/scheduler/tasks/clean-sessions-task.d.ts +37 -0
- package/dist/scheduler/tasks/clean-sessions-task.js +52 -0
- package/dist/scheduler/tasks/clean-sessions-task.js.map +1 -0
- package/dist/service/helpers/list-query-builder/list-query-builder.js +2 -0
- package/dist/service/helpers/list-query-builder/list-query-builder.js.map +1 -1
- package/dist/service/helpers/order-calculator/order-calculator.js +2 -0
- package/dist/service/helpers/order-calculator/order-calculator.js.map +1 -1
- package/dist/service/helpers/order-modifier/order-modifier.d.ts +1 -1
- package/dist/service/helpers/order-modifier/order-modifier.js +4 -2
- package/dist/service/helpers/order-modifier/order-modifier.js.map +1 -1
- package/dist/service/service.module.js +2 -1
- package/dist/service/service.module.js.map +1 -1
- package/dist/service/services/administrator.service.js +2 -0
- package/dist/service/services/administrator.service.js.map +1 -1
- package/dist/service/services/asset.service.js +3 -1
- package/dist/service/services/asset.service.js.map +1 -1
- package/dist/service/services/auth.service.d.ts +1 -1
- package/dist/service/services/auth.service.js +2 -0
- package/dist/service/services/auth.service.js.map +1 -1
- package/dist/service/services/channel.service.js +2 -0
- package/dist/service/services/channel.service.js.map +1 -1
- package/dist/service/services/collection.service.js +2 -0
- package/dist/service/services/collection.service.js.map +1 -1
- package/dist/service/services/country.service.js +2 -0
- package/dist/service/services/country.service.js.map +1 -1
- package/dist/service/services/customer-group.service.d.ts +1 -1
- package/dist/service/services/customer-group.service.js +3 -1
- package/dist/service/services/customer-group.service.js.map +1 -1
- package/dist/service/services/customer.service.d.ts +1 -1
- package/dist/service/services/customer.service.js +2 -0
- package/dist/service/services/customer.service.js.map +1 -1
- package/dist/service/services/facet-value.service.d.ts +1 -1
- package/dist/service/services/facet-value.service.js +2 -0
- package/dist/service/services/facet-value.service.js.map +1 -1
- package/dist/service/services/facet.service.js +2 -1
- package/dist/service/services/facet.service.js.map +1 -1
- package/dist/service/services/fulfillment.service.d.ts +1 -1
- package/dist/service/services/fulfillment.service.js +4 -2
- package/dist/service/services/fulfillment.service.js.map +1 -1
- package/dist/service/services/global-settings.service.js +2 -0
- package/dist/service/services/global-settings.service.js.map +1 -1
- package/dist/service/services/history.service.js +2 -0
- package/dist/service/services/history.service.js.map +1 -1
- package/dist/service/services/order-testing.service.js +3 -1
- package/dist/service/services/order-testing.service.js.map +1 -1
- package/dist/service/services/order.service.d.ts +1 -1
- package/dist/service/services/order.service.js +4 -2
- package/dist/service/services/order.service.js.map +1 -1
- package/dist/service/services/payment-method.service.js +2 -0
- package/dist/service/services/payment-method.service.js.map +1 -1
- package/dist/service/services/payment.service.js +4 -2
- package/dist/service/services/payment.service.js.map +1 -1
- package/dist/service/services/product-option-group.service.js +3 -1
- package/dist/service/services/product-option-group.service.js.map +1 -1
- package/dist/service/services/product-option.service.d.ts +1 -1
- package/dist/service/services/product-option.service.js +3 -1
- package/dist/service/services/product-option.service.js.map +1 -1
- package/dist/service/services/product-variant.service.d.ts +1 -1
- package/dist/service/services/product-variant.service.js +3 -1
- package/dist/service/services/product-variant.service.js.map +1 -1
- package/dist/service/services/product.service.js +13 -4
- package/dist/service/services/product.service.js.map +1 -1
- package/dist/service/services/promotion.service.js +2 -0
- package/dist/service/services/promotion.service.js.map +1 -1
- package/dist/service/services/role.service.js +2 -0
- package/dist/service/services/role.service.js.map +1 -1
- package/dist/service/services/seller.service.js +2 -0
- package/dist/service/services/seller.service.js.map +1 -1
- package/dist/service/services/session.service.d.ts +19 -2
- package/dist/service/services/session.service.js +60 -2
- package/dist/service/services/session.service.js.map +1 -1
- package/dist/service/services/shipping-method.service.js +2 -0
- package/dist/service/services/shipping-method.service.js.map +1 -1
- package/dist/service/services/stock-level.service.js +2 -0
- package/dist/service/services/stock-level.service.js.map +1 -1
- package/dist/service/services/stock-location.service.js +2 -0
- package/dist/service/services/stock-location.service.js.map +1 -1
- package/dist/service/services/stock-movement.service.d.ts +1 -3
- package/dist/service/services/stock-movement.service.js +4 -5
- package/dist/service/services/stock-movement.service.js.map +1 -1
- package/dist/service/services/tag.service.js +4 -1
- package/dist/service/services/tag.service.js.map +1 -1
- package/dist/service/services/tax-category.service.js +2 -0
- package/dist/service/services/tax-category.service.js.map +1 -1
- package/dist/service/services/tax-rate.service.js +2 -0
- package/dist/service/services/tax-rate.service.js.map +1 -1
- package/dist/service/services/user.service.js +2 -0
- package/dist/service/services/user.service.js.map +1 -1
- package/dist/service/services/zone.service.js +2 -0
- package/dist/service/services/zone.service.js.map +1 -1
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler-strategy.js","sourceRoot":"","sources":["../../src/scheduler/scheduler-strategy.ts"],"names":[],"mappings":""}
|
|
@@ -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"}
|