@webiny/background-tasks 6.6.0-alpha.7 → 6.6.0-alpha.8
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/api/BackgroundTasksFeature.js +2 -2
- package/api/BackgroundTasksFeature.js.map +1 -1
- package/api/graphql/BackgroundTasksGraphQLSchema.d.ts +25 -0
- package/api/graphql/{BackgroundTasksContextualSchema.js → BackgroundTasksGraphQLSchema.js} +190 -136
- package/api/graphql/BackgroundTasksGraphQLSchema.js.map +1 -0
- package/api/index.d.ts +1 -1
- package/api/index.js +1 -1
- package/package.json +19 -21
- package/api/graphql/BackgroundTasksContextualSchema.d.ts +0 -21
- package/api/graphql/BackgroundTasksContextualSchema.js.map +0 -1
|
@@ -23,7 +23,7 @@ import { TestingRunTaskDefinition } from "./tasks/testingRunTask.js";
|
|
|
23
23
|
import { BackgroundTaskPermissionsFeature } from "./features/BackgroundTaskPermissions/feature.js";
|
|
24
24
|
import { GetBackgroundTaskSettingsFeature } from "./features/GetBackgroundTaskSettings/feature.js";
|
|
25
25
|
import { UpdateBackgroundTaskSettingsFeature } from "./features/UpdateBackgroundTaskSettings/feature.js";
|
|
26
|
-
import {
|
|
26
|
+
import { BackgroundTasksGraphQLSchema } from "./graphql/BackgroundTasksGraphQLSchema.js";
|
|
27
27
|
const BackgroundTasksFeature = createFeature({
|
|
28
28
|
name: "BackgroundTasks",
|
|
29
29
|
register (container) {
|
|
@@ -53,7 +53,7 @@ const BackgroundTasksFeature = createFeature({
|
|
|
53
53
|
BackgroundTaskPermissionsFeature.register(container);
|
|
54
54
|
GetBackgroundTaskSettingsFeature.register(container);
|
|
55
55
|
UpdateBackgroundTaskSettingsFeature.register(container);
|
|
56
|
-
container.register(
|
|
56
|
+
container.register(BackgroundTasksGraphQLSchema);
|
|
57
57
|
}
|
|
58
58
|
});
|
|
59
59
|
export { BackgroundTasksFeature };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api/BackgroundTasksFeature.js","sources":["../../src/api/BackgroundTasksFeature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { TaskService } from \"@webiny/api-core/features/task/TaskService/index.js\";\nimport { TaskDefinitionDefaultsDecorator } from \"./decorators/TaskDefinitionDefaultsDecorator.js\";\nimport { SelfCleaningTaskHandlerDecorator } from \"./decorators/SelfCleaningTaskHandlerDecorator.js\";\nimport { TaskController } from \"./features/TaskController/index.js\";\nimport { TaskPrivateModel } from \"./crud/TaskPrivateModel.js\";\nimport { TaskLogPrivateModel } from \"./crud/TaskLogPrivateModel.js\";\nimport { BackgroundTaskSettingsModel } from \"./models/BackgroundTaskSettingsModel.js\";\nimport { createDefinitionCrud } from \"./crud/definition.tasks.js\";\nimport { createServiceCrud } from \"./crud/service.tasks.js\";\nimport { createTaskCrud } from \"./crud/crud.tasks.js\";\nimport { TaskExecutionContextFeature } from \"./features/TaskExecutionContext/feature.js\";\nimport { TaskHandlerResolverFeature } from \"./features/TaskHandlerResolver/feature.js\";\nimport { GetRunnableTaskDefinitionFeature } from \"./features/GetRunnableTaskDefinition/feature.js\";\nimport { ListTaskDefinitionsFeature } from \"./features/ListTaskDefinitions/feature.js\";\nimport {\n CleanupTaskSubtreeUseCase,\n CleanupTaskSubtreeUseCaseImpl\n} from \"./features/CleanupTaskSubtree/index.js\";\nimport { TasksCrud } from \"./TasksCrud.js\";\nimport { TriggerTaskFeature } from \"./features/TriggerTask/feature.js\";\nimport { AbortTaskFeature } from \"./features/AbortTask/feature.js\";\nimport { GetTaskFeature } from \"./features/GetTask/feature.js\";\nimport { ListTasksFeature } from \"./features/ListTasks/feature.js\";\nimport { TestingRunTaskDefinition } from \"./tasks/testingRunTask.js\";\nimport { BackgroundTaskPermissionsFeature } from \"./features/BackgroundTaskPermissions/feature.js\";\nimport { GetBackgroundTaskSettingsFeature } from \"./features/GetBackgroundTaskSettings/feature.js\";\nimport { UpdateBackgroundTaskSettingsFeature } from \"./features/UpdateBackgroundTaskSettings/feature.js\";\nimport {
|
|
1
|
+
{"version":3,"file":"api/BackgroundTasksFeature.js","sources":["../../src/api/BackgroundTasksFeature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { TaskService } from \"@webiny/api-core/features/task/TaskService/index.js\";\nimport { TaskDefinitionDefaultsDecorator } from \"./decorators/TaskDefinitionDefaultsDecorator.js\";\nimport { SelfCleaningTaskHandlerDecorator } from \"./decorators/SelfCleaningTaskHandlerDecorator.js\";\nimport { TaskController } from \"./features/TaskController/index.js\";\nimport { TaskPrivateModel } from \"./crud/TaskPrivateModel.js\";\nimport { TaskLogPrivateModel } from \"./crud/TaskLogPrivateModel.js\";\nimport { BackgroundTaskSettingsModel } from \"./models/BackgroundTaskSettingsModel.js\";\nimport { createDefinitionCrud } from \"./crud/definition.tasks.js\";\nimport { createServiceCrud } from \"./crud/service.tasks.js\";\nimport { createTaskCrud } from \"./crud/crud.tasks.js\";\nimport { TaskExecutionContextFeature } from \"./features/TaskExecutionContext/feature.js\";\nimport { TaskHandlerResolverFeature } from \"./features/TaskHandlerResolver/feature.js\";\nimport { GetRunnableTaskDefinitionFeature } from \"./features/GetRunnableTaskDefinition/feature.js\";\nimport { ListTaskDefinitionsFeature } from \"./features/ListTaskDefinitions/feature.js\";\nimport {\n CleanupTaskSubtreeUseCase,\n CleanupTaskSubtreeUseCaseImpl\n} from \"./features/CleanupTaskSubtree/index.js\";\nimport { TasksCrud } from \"./TasksCrud.js\";\nimport { TriggerTaskFeature } from \"./features/TriggerTask/feature.js\";\nimport { AbortTaskFeature } from \"./features/AbortTask/feature.js\";\nimport { GetTaskFeature } from \"./features/GetTask/feature.js\";\nimport { ListTasksFeature } from \"./features/ListTasks/feature.js\";\nimport { TestingRunTaskDefinition } from \"./tasks/testingRunTask.js\";\nimport { BackgroundTaskPermissionsFeature } from \"./features/BackgroundTaskPermissions/feature.js\";\nimport { GetBackgroundTaskSettingsFeature } from \"./features/GetBackgroundTaskSettings/feature.js\";\nimport { UpdateBackgroundTaskSettingsFeature } from \"./features/UpdateBackgroundTaskSettings/feature.js\";\nimport { BackgroundTasksGraphQLSchema } from \"./graphql/BackgroundTasksGraphQLSchema.js\";\n\nexport const BackgroundTasksFeature = createFeature({\n name: \"BackgroundTasks\",\n register(container) {\n // Register models at register() time so they are available to GetModelUseCase when the\n // ModelsFetcher cache is first filled (which may happen during an earlier feature's enhance).\n container.register(TaskPrivateModel);\n container.register(TaskLogPrivateModel);\n container.register(BackgroundTaskSettingsModel);\n\n // Metadata rules, applied to every registered TaskDefinition.\n container.registerDecorator(TaskDefinitionDefaultsDecorator);\n\n // Self-cleanup runs in the lifecycle hooks, which belong to the handler. Applied when the\n // runner resolves the handler a definition names.\n container.registerDecorator(SelfCleaningTaskHandlerDecorator);\n\n // Task definition use cases.\n TaskHandlerResolverFeature.register(container);\n GetRunnableTaskDefinitionFeature.register(container);\n ListTaskDefinitionsFeature.register(container);\n\n // Build the tasks CRUD facade from the container and register it as the canonical TasksCrud\n // abstraction (plus the legacy TaskService alias). The factory methods resolve TasksCrud\n // lazily for sibling calls, so registering the assembled object up front is sufficient.\n const tasksCrud = {\n ...createDefinitionCrud(container),\n ...createTaskCrud(container),\n ...createServiceCrud(container)\n };\n container.registerInstance(TasksCrud, tasksCrud);\n container.registerInstance(TaskService, tasksCrud);\n\n // Task CRUD use cases (must be after TasksCrud is registered).\n TriggerTaskFeature.register(container);\n AbortTaskFeature.register(container);\n GetTaskFeature.register(container);\n ListTasksFeature.register(container);\n container.registerInstance(\n CleanupTaskSubtreeUseCase,\n new CleanupTaskSubtreeUseCaseImpl(container.resolve(TasksCrud))\n );\n\n // Execution context (singleton), controller, and the built-in test task.\n TaskExecutionContextFeature.register(container);\n container.register(TaskController);\n container.register(TestingRunTaskDefinition);\n\n // Permissions + settings features.\n BackgroundTaskPermissionsFeature.register(container);\n GetBackgroundTaskSettingsFeature.register(container);\n UpdateBackgroundTaskSettingsFeature.register(container);\n\n // GraphQL schema, rendered from the CMS task/log content models.\n container.register(BackgroundTasksGraphQLSchema);\n }\n});\n"],"names":["BackgroundTasksFeature","createFeature","container","TaskPrivateModel","TaskLogPrivateModel","BackgroundTaskSettingsModel","TaskDefinitionDefaultsDecorator","SelfCleaningTaskHandlerDecorator","TaskHandlerResolverFeature","GetRunnableTaskDefinitionFeature","ListTaskDefinitionsFeature","tasksCrud","createDefinitionCrud","createTaskCrud","createServiceCrud","TasksCrud","TaskService","TriggerTaskFeature","AbortTaskFeature","GetTaskFeature","ListTasksFeature","CleanupTaskSubtreeUseCase","CleanupTaskSubtreeUseCaseImpl","TaskExecutionContextFeature","TaskController","TestingRunTaskDefinition","BackgroundTaskPermissionsFeature","GetBackgroundTaskSettingsFeature","UpdateBackgroundTaskSettingsFeature","BackgroundTasksGraphQLSchema"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA8BO,MAAMA,yBAAyBC,cAAc;IAChD,MAAM;IACN,UAASC,SAAS;QAGdA,UAAU,QAAQ,CAACC;QACnBD,UAAU,QAAQ,CAACE;QACnBF,UAAU,QAAQ,CAACG;QAGnBH,UAAU,iBAAiB,CAACI;QAI5BJ,UAAU,iBAAiB,CAACK;QAG5BC,2BAA2B,QAAQ,CAACN;QACpCO,iCAAiC,QAAQ,CAACP;QAC1CQ,2BAA2B,QAAQ,CAACR;QAKpC,MAAMS,YAAY;YACd,GAAGC,qBAAqBV,UAAU;YAClC,GAAGW,eAAeX,UAAU;YAC5B,GAAGY,kBAAkBZ,UAAU;QACnC;QACAA,UAAU,gBAAgB,CAACa,WAAWJ;QACtCT,UAAU,gBAAgB,CAACc,aAAaL;QAGxCM,mBAAmB,QAAQ,CAACf;QAC5BgB,iBAAiB,QAAQ,CAAChB;QAC1BiB,eAAe,QAAQ,CAACjB;QACxBkB,iBAAiB,QAAQ,CAAClB;QAC1BA,UAAU,gBAAgB,CACtBmB,2BACA,IAAIC,8BAA8BpB,UAAU,OAAO,CAACa;QAIxDQ,4BAA4B,QAAQ,CAACrB;QACrCA,UAAU,QAAQ,CAACsB;QACnBtB,UAAU,QAAQ,CAACuB;QAGnBC,iCAAiC,QAAQ,CAACxB;QAC1CyB,iCAAiC,QAAQ,CAACzB;QAC1C0B,oCAAoC,QAAQ,CAAC1B;QAG7CA,UAAU,QAAQ,CAAC2B;IACvB;AACJ"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { GraphQLSchemaFactory } from "@webiny/api-graphql/graphql/abstractions.js";
|
|
2
|
+
import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js";
|
|
3
|
+
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js";
|
|
4
|
+
import { ListModelsUseCase } from "@webiny/api-headless-cms/features/contentModel/ListModels/index.js";
|
|
5
|
+
import { CmsModelFieldToGraphQLRegistry } from "@webiny/api-headless-cms/exports/api/cms/graphql.js";
|
|
6
|
+
import { TasksCrud } from "../../api/TasksCrud.js";
|
|
7
|
+
/**
|
|
8
|
+
* The background-tasks GraphQL schema. Its shape depends on the CMS task/log content models, which
|
|
9
|
+
* are loaded when the schema is composed. The settings schema lives here too, because it extends
|
|
10
|
+
* the task schema's `WebinyBackgroundTaskQuery`/`Mutation` types.
|
|
11
|
+
*/
|
|
12
|
+
declare class BackgroundTasksGraphQLSchemaImpl implements GraphQLSchemaFactory.Interface {
|
|
13
|
+
private readonly tenantContext;
|
|
14
|
+
private readonly identityContext;
|
|
15
|
+
private readonly tasksCrud;
|
|
16
|
+
private readonly listModelsUseCase;
|
|
17
|
+
private readonly fieldRegistry;
|
|
18
|
+
constructor(tenantContext: TenantContext.Interface, identityContext: IdentityContext.Interface, tasksCrud: TasksCrud.Interface, listModelsUseCase: ListModelsUseCase.Interface, fieldRegistry: CmsModelFieldToGraphQLRegistry.Interface);
|
|
19
|
+
execute(builder: GraphQLSchemaFactory.SchemaBuilder): Promise<GraphQLSchemaFactory.SchemaBuilder>;
|
|
20
|
+
private createTypeDefs;
|
|
21
|
+
}
|
|
22
|
+
export declare const BackgroundTasksGraphQLSchema: typeof BackgroundTasksGraphQLSchemaImpl & {
|
|
23
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/api-graphql/graphql/abstractions.public.js").IGraphQLSchemaFactory>;
|
|
24
|
+
};
|
|
25
|
+
export {};
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { mergeResolvers } from "@graphql-tools/merge";
|
|
3
|
-
import { GraphQLContextualSchema } from "@webiny/api-graphql";
|
|
1
|
+
import { GraphQLSchemaFactory } from "@webiny/api-graphql/graphql/abstractions.js";
|
|
4
2
|
import { renderSortEnum } from "@webiny/api-headless-cms/utils/renderSortEnum.js";
|
|
5
3
|
import { renderListFilterFields } from "@webiny/api-headless-cms/utils/renderListFilterFields.js";
|
|
6
4
|
import { renderFields } from "@webiny/api-headless-cms/utils/renderFields.js";
|
|
7
|
-
import { createBaseContentSchema } from "@webiny/api-headless-cms/graphql/schema/baseContentSchema.js";
|
|
8
5
|
import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js";
|
|
9
6
|
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js";
|
|
10
7
|
import { ListModelsUseCase } from "@webiny/api-headless-cms/features/contentModel/ListModels/index.js";
|
|
@@ -17,24 +14,187 @@ import { GetBackgroundTaskSettingsRepository } from "../features/GetBackgroundTa
|
|
|
17
14
|
import { UpdateBackgroundTaskSettingsUseCase } from "../features/UpdateBackgroundTaskSettings/abstractions.js";
|
|
18
15
|
import { emptyResolver, resolve, resolveList } from "./utils.js";
|
|
19
16
|
import { checkPermissions } from "./checkPermissions.js";
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
17
|
+
function addQueryResolvers(builder) {
|
|
18
|
+
builder.addResolver({
|
|
19
|
+
path: "Query.backgroundTasks",
|
|
20
|
+
resolver: ()=>emptyResolver
|
|
21
|
+
});
|
|
22
|
+
builder.addResolver({
|
|
23
|
+
path: "WebinyBackgroundTaskQuery.getTask",
|
|
24
|
+
dependencies: [
|
|
25
|
+
TasksCrud
|
|
26
|
+
],
|
|
27
|
+
resolver: (tasksCrud)=>({ args, context })=>resolve(async ()=>{
|
|
28
|
+
await checkPermissions(context, {
|
|
29
|
+
rwd: "r"
|
|
30
|
+
});
|
|
31
|
+
return await tasksCrud.getTask(args.id);
|
|
32
|
+
})
|
|
33
|
+
});
|
|
34
|
+
builder.addResolver({
|
|
35
|
+
path: "WebinyBackgroundTaskQuery.listTasks",
|
|
36
|
+
dependencies: [
|
|
37
|
+
TasksCrud
|
|
38
|
+
],
|
|
39
|
+
resolver: (tasksCrud)=>({ args, context })=>resolveList(async ()=>{
|
|
40
|
+
await checkPermissions(context, {
|
|
41
|
+
rwd: "r"
|
|
42
|
+
});
|
|
43
|
+
return await tasksCrud.listTasks(args);
|
|
44
|
+
})
|
|
45
|
+
});
|
|
46
|
+
builder.addResolver({
|
|
47
|
+
path: "WebinyBackgroundTaskQuery.listDefinitions",
|
|
48
|
+
dependencies: [
|
|
49
|
+
ListTaskDefinitionsUseCase
|
|
50
|
+
],
|
|
51
|
+
resolver: (listTaskDefinitions)=>({ context })=>resolve(async ()=>{
|
|
52
|
+
await checkPermissions(context, {
|
|
53
|
+
rwd: "r"
|
|
54
|
+
});
|
|
55
|
+
return listTaskDefinitions.execute().filter((item)=>!item.isPrivate);
|
|
56
|
+
})
|
|
57
|
+
});
|
|
58
|
+
builder.addResolver({
|
|
59
|
+
path: "WebinyBackgroundTaskQuery.listLogs",
|
|
60
|
+
dependencies: [
|
|
61
|
+
TasksCrud
|
|
62
|
+
],
|
|
63
|
+
resolver: (tasksCrud)=>({ args, context })=>resolveList(async ()=>{
|
|
64
|
+
await checkPermissions(context, {
|
|
65
|
+
rwd: "r"
|
|
66
|
+
});
|
|
67
|
+
return await tasksCrud.listLogs(args);
|
|
68
|
+
})
|
|
69
|
+
});
|
|
70
|
+
builder.addResolver({
|
|
71
|
+
path: "WebinyBackgroundTaskQuery.getSettings",
|
|
72
|
+
dependencies: [
|
|
73
|
+
GetBackgroundTaskSettingsRepository
|
|
74
|
+
],
|
|
75
|
+
resolver: (repository)=>({ context })=>resolve(async ()=>{
|
|
76
|
+
await checkPermissions(context, {
|
|
77
|
+
rwd: "r"
|
|
78
|
+
});
|
|
79
|
+
const result = await repository.execute();
|
|
80
|
+
if (result.isFail()) throw result.error;
|
|
81
|
+
return result.value;
|
|
82
|
+
})
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
function addMutationResolvers(builder) {
|
|
86
|
+
builder.addResolver({
|
|
87
|
+
path: "Mutation.backgroundTasks",
|
|
88
|
+
resolver: ()=>emptyResolver
|
|
89
|
+
});
|
|
90
|
+
builder.addResolver({
|
|
91
|
+
path: "WebinyBackgroundTaskMutation.abortTask",
|
|
92
|
+
dependencies: [
|
|
93
|
+
AbortTaskUseCase
|
|
94
|
+
],
|
|
95
|
+
resolver: (abortTask)=>async ({ args, context })=>{
|
|
96
|
+
await checkPermissions(context, {
|
|
97
|
+
rwd: "w"
|
|
98
|
+
});
|
|
99
|
+
return resolve(async ()=>{
|
|
100
|
+
const result = await abortTask.execute(args);
|
|
101
|
+
if (result.isOk()) return result.value;
|
|
102
|
+
throw result.error;
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
builder.addResolver({
|
|
107
|
+
path: "WebinyBackgroundTaskMutation.triggerTask",
|
|
108
|
+
dependencies: [
|
|
109
|
+
TriggerTaskUseCase
|
|
110
|
+
],
|
|
111
|
+
resolver: (triggerTask)=>async ({ args, context })=>{
|
|
112
|
+
await checkPermissions(context, {
|
|
113
|
+
rwd: "w"
|
|
114
|
+
});
|
|
115
|
+
return resolve(async ()=>{
|
|
116
|
+
const result = await triggerTask.execute(args);
|
|
117
|
+
if (result.isOk()) return result.value;
|
|
118
|
+
throw result.error;
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
builder.addResolver({
|
|
123
|
+
path: "WebinyBackgroundTaskMutation.deleteTask",
|
|
124
|
+
dependencies: [
|
|
125
|
+
TasksCrud
|
|
126
|
+
],
|
|
127
|
+
resolver: (tasksCrud)=>async ({ args, context })=>{
|
|
128
|
+
await checkPermissions(context, {
|
|
129
|
+
rwd: "d"
|
|
130
|
+
});
|
|
131
|
+
return resolve(async ()=>await tasksCrud.deleteTask(args.id));
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
builder.addResolver({
|
|
135
|
+
path: "WebinyBackgroundTaskMutation.updateSettings",
|
|
136
|
+
dependencies: [
|
|
137
|
+
UpdateBackgroundTaskSettingsUseCase
|
|
138
|
+
],
|
|
139
|
+
resolver: (updateSettings)=>({ args })=>resolve(async ()=>{
|
|
140
|
+
const result = await updateSettings.execute(args.input);
|
|
141
|
+
if (result.isFail()) throw result.error;
|
|
142
|
+
return result.value;
|
|
143
|
+
})
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
function addFieldResolvers(builder) {
|
|
147
|
+
builder.addResolver({
|
|
148
|
+
path: "WebinyBackgroundTask.logs",
|
|
149
|
+
dependencies: [
|
|
150
|
+
TasksCrud
|
|
151
|
+
],
|
|
152
|
+
resolver: (tasksCrud)=>async ({ parent, args })=>{
|
|
153
|
+
const { items } = await tasksCrud.listLogs({
|
|
154
|
+
sort: [
|
|
155
|
+
"createdBy_ASC"
|
|
156
|
+
],
|
|
157
|
+
limit: 10000,
|
|
158
|
+
...args,
|
|
159
|
+
where: {
|
|
160
|
+
...args?.where,
|
|
161
|
+
task: parent.id
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
return items;
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
builder.addResolver({
|
|
168
|
+
path: "WebinyBackgroundTaskLog.task",
|
|
169
|
+
dependencies: [
|
|
170
|
+
TasksCrud
|
|
171
|
+
],
|
|
172
|
+
resolver: (tasksCrud)=>async ({ parent })=>await tasksCrud.getTask(parent.task)
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
class BackgroundTasksGraphQLSchemaImpl {
|
|
176
|
+
constructor(tenantContext, identityContext, tasksCrud, listModelsUseCase, fieldRegistry){
|
|
177
|
+
this.tenantContext = tenantContext;
|
|
178
|
+
this.identityContext = identityContext;
|
|
179
|
+
this.tasksCrud = tasksCrud;
|
|
180
|
+
this.listModelsUseCase = listModelsUseCase;
|
|
181
|
+
this.fieldRegistry = fieldRegistry;
|
|
24
182
|
}
|
|
25
|
-
async
|
|
26
|
-
if (!this.
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
const
|
|
36
|
-
const
|
|
37
|
-
|
|
183
|
+
async execute(builder) {
|
|
184
|
+
if (!this.tenantContext.getTenant()) return builder;
|
|
185
|
+
const typeDefs = await this.createTypeDefs();
|
|
186
|
+
builder.addTypeDefs(typeDefs);
|
|
187
|
+
addQueryResolvers(builder);
|
|
188
|
+
addMutationResolvers(builder);
|
|
189
|
+
addFieldResolvers(builder);
|
|
190
|
+
return builder;
|
|
191
|
+
}
|
|
192
|
+
async createTypeDefs() {
|
|
193
|
+
const taskModel = await this.tasksCrud.getTaskModel();
|
|
194
|
+
const logModel = await this.tasksCrud.getLogModel();
|
|
195
|
+
const fieldRegistry = this.fieldRegistry;
|
|
196
|
+
const models = await this.identityContext.withoutAuthorization(async ()=>{
|
|
197
|
+
const modelsResult = await this.listModelsUseCase.execute({
|
|
38
198
|
includePrivate: false
|
|
39
199
|
});
|
|
40
200
|
return modelsResult.value.filter((model)=>model.fields.length > 0);
|
|
@@ -83,7 +243,7 @@ class BackgroundTasksContextualSchemaImpl {
|
|
|
83
243
|
fieldRegistry,
|
|
84
244
|
sorters: []
|
|
85
245
|
});
|
|
86
|
-
|
|
246
|
+
return `
|
|
87
247
|
type WebinyBackgroundTaskError {
|
|
88
248
|
message: String
|
|
89
249
|
code: String
|
|
@@ -246,124 +406,18 @@ class BackgroundTasksContextualSchemaImpl {
|
|
|
246
406
|
): WebinyBackgroundTaskSettingsResponse
|
|
247
407
|
}
|
|
248
408
|
`;
|
|
249
|
-
const resolvers = {
|
|
250
|
-
Query: {
|
|
251
|
-
backgroundTasks: emptyResolver
|
|
252
|
-
},
|
|
253
|
-
Mutation: {
|
|
254
|
-
backgroundTasks: emptyResolver
|
|
255
|
-
},
|
|
256
|
-
WebinyBackgroundTaskQuery: {
|
|
257
|
-
getTask: async (_, args, context)=>resolve(async ()=>{
|
|
258
|
-
await checkPermissions(context, {
|
|
259
|
-
rwd: "r"
|
|
260
|
-
});
|
|
261
|
-
return await context.container.resolve(TasksCrud).getTask(args.id);
|
|
262
|
-
}),
|
|
263
|
-
listTasks: async (_, args, context)=>resolveList(async ()=>{
|
|
264
|
-
await checkPermissions(context, {
|
|
265
|
-
rwd: "r"
|
|
266
|
-
});
|
|
267
|
-
return await context.container.resolve(TasksCrud).listTasks(args);
|
|
268
|
-
}),
|
|
269
|
-
listDefinitions: async (_, __, context)=>resolve(async ()=>{
|
|
270
|
-
await checkPermissions(context, {
|
|
271
|
-
rwd: "r"
|
|
272
|
-
});
|
|
273
|
-
const result = context.container.resolve(ListTaskDefinitionsUseCase).execute();
|
|
274
|
-
return result.filter((item)=>!item.isPrivate);
|
|
275
|
-
}),
|
|
276
|
-
listLogs: async (_, args, context)=>resolveList(async ()=>{
|
|
277
|
-
await checkPermissions(context, {
|
|
278
|
-
rwd: "r"
|
|
279
|
-
});
|
|
280
|
-
return await context.container.resolve(TasksCrud).listLogs(args);
|
|
281
|
-
}),
|
|
282
|
-
getSettings: async (_, __, context)=>resolve(async ()=>{
|
|
283
|
-
await checkPermissions(context, {
|
|
284
|
-
rwd: "r"
|
|
285
|
-
});
|
|
286
|
-
const repository = context.container.resolve(GetBackgroundTaskSettingsRepository);
|
|
287
|
-
const result = await repository.execute();
|
|
288
|
-
if (result.isFail()) throw result.error;
|
|
289
|
-
return result.value;
|
|
290
|
-
})
|
|
291
|
-
},
|
|
292
|
-
WebinyBackgroundTaskMutation: {
|
|
293
|
-
abortTask: async (_, args, context)=>{
|
|
294
|
-
await checkPermissions(context, {
|
|
295
|
-
rwd: "w"
|
|
296
|
-
});
|
|
297
|
-
return resolve(async ()=>{
|
|
298
|
-
const result = await context.container.resolve(AbortTaskUseCase).execute(args);
|
|
299
|
-
if (result.isOk()) return result.value;
|
|
300
|
-
throw result.error;
|
|
301
|
-
});
|
|
302
|
-
},
|
|
303
|
-
triggerTask: async (_, args, context)=>{
|
|
304
|
-
await checkPermissions(context, {
|
|
305
|
-
rwd: "w"
|
|
306
|
-
});
|
|
307
|
-
return resolve(async ()=>{
|
|
308
|
-
const result = await context.container.resolve(TriggerTaskUseCase).execute(args);
|
|
309
|
-
if (result.isOk()) return result.value;
|
|
310
|
-
throw result.error;
|
|
311
|
-
});
|
|
312
|
-
},
|
|
313
|
-
deleteTask: async (_, args, context)=>{
|
|
314
|
-
await checkPermissions(context, {
|
|
315
|
-
rwd: "d"
|
|
316
|
-
});
|
|
317
|
-
return resolve(async ()=>await context.container.resolve(TasksCrud).deleteTask(args.id));
|
|
318
|
-
},
|
|
319
|
-
updateSettings: async (_, args, context)=>resolve(async ()=>{
|
|
320
|
-
const useCase = context.container.resolve(UpdateBackgroundTaskSettingsUseCase);
|
|
321
|
-
const result = await useCase.execute(args.input);
|
|
322
|
-
if (result.isFail()) throw result.error;
|
|
323
|
-
return result.value;
|
|
324
|
-
})
|
|
325
|
-
},
|
|
326
|
-
WebinyBackgroundTask: {
|
|
327
|
-
logs: async (parent, args, context)=>{
|
|
328
|
-
const { items } = await context.container.resolve(TasksCrud).listLogs({
|
|
329
|
-
sort: [
|
|
330
|
-
"createdBy_ASC"
|
|
331
|
-
],
|
|
332
|
-
limit: 10000,
|
|
333
|
-
...args,
|
|
334
|
-
where: {
|
|
335
|
-
...args?.where,
|
|
336
|
-
task: parent.id
|
|
337
|
-
}
|
|
338
|
-
});
|
|
339
|
-
return items;
|
|
340
|
-
}
|
|
341
|
-
},
|
|
342
|
-
WebinyBackgroundTaskLog: {
|
|
343
|
-
task: async (parent, _, context)=>await context.container.resolve(TasksCrud).getTask(parent.task)
|
|
344
|
-
}
|
|
345
|
-
};
|
|
346
|
-
const baseContent = createBaseContentSchema();
|
|
347
|
-
return makeExecutableSchema({
|
|
348
|
-
typeDefs: [
|
|
349
|
-
baseContent.schema.typeDefs,
|
|
350
|
-
typeDefs
|
|
351
|
-
],
|
|
352
|
-
resolvers: mergeResolvers([
|
|
353
|
-
baseContent.schema.resolvers,
|
|
354
|
-
resolvers
|
|
355
|
-
]),
|
|
356
|
-
inheritResolversFromInterfaces: true
|
|
357
|
-
});
|
|
358
409
|
}
|
|
359
410
|
}
|
|
360
|
-
const
|
|
361
|
-
implementation:
|
|
411
|
+
const BackgroundTasksGraphQLSchema = GraphQLSchemaFactory.createImplementation({
|
|
412
|
+
implementation: BackgroundTasksGraphQLSchemaImpl,
|
|
362
413
|
dependencies: [
|
|
363
414
|
TenantContext,
|
|
364
|
-
IdentityContext
|
|
415
|
+
IdentityContext,
|
|
416
|
+
TasksCrud,
|
|
417
|
+
ListModelsUseCase,
|
|
418
|
+
CmsModelFieldToGraphQLRegistry
|
|
365
419
|
]
|
|
366
420
|
});
|
|
367
|
-
export {
|
|
421
|
+
export { BackgroundTasksGraphQLSchema };
|
|
368
422
|
|
|
369
|
-
//# sourceMappingURL=
|
|
423
|
+
//# sourceMappingURL=BackgroundTasksGraphQLSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api/graphql/BackgroundTasksGraphQLSchema.js","sources":["../../../src/api/graphql/BackgroundTasksGraphQLSchema.ts"],"sourcesContent":["import { GraphQLSchemaFactory } from \"@webiny/api-graphql/graphql/abstractions.js\";\nimport { renderSortEnum } from \"@webiny/api-headless-cms/utils/renderSortEnum.js\";\nimport { renderListFilterFields } from \"@webiny/api-headless-cms/utils/renderListFilterFields.js\";\nimport { renderFields } from \"@webiny/api-headless-cms/utils/renderFields.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/abstractions.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/abstractions.js\";\nimport { ListModelsUseCase } from \"@webiny/api-headless-cms/features/contentModel/ListModels/index.js\";\nimport { CmsModelFieldToGraphQLRegistry } from \"@webiny/api-headless-cms/exports/api/cms/graphql.js\";\nimport type { Context, IListTaskLogParams, IListTaskParams, ITask, ITaskLog } from \"~/api/types.js\";\nimport { TasksCrud } from \"~/api/TasksCrud.js\";\nimport { ListTaskDefinitionsUseCase } from \"~/api/features/ListTaskDefinitions/abstractions.js\";\nimport { TriggerTaskUseCase } from \"~/api/features/TriggerTask/abstractions.js\";\nimport { AbortTaskUseCase } from \"~/api/features/AbortTask/abstractions.js\";\nimport { GetBackgroundTaskSettingsRepository } from \"~/api/features/GetBackgroundTaskSettings/abstractions.js\";\nimport { UpdateBackgroundTaskSettingsUseCase } from \"~/api/features/UpdateBackgroundTaskSettings/abstractions.js\";\nimport type { IUpdateBackgroundTaskSettingsInput } from \"~/api/features/UpdateBackgroundTaskSettings/abstractions.js\";\nimport { emptyResolver, resolve, resolveList } from \"./utils.js\";\nimport { checkPermissions } from \"./checkPermissions.js\";\n\ninterface IGetTaskQueryParams {\n id: string;\n}\n\ninterface IAbortTaskMutationParams {\n id: string;\n message?: string;\n}\n\ninterface ITriggerTaskMutationParams {\n name?: string;\n definition: string;\n input?: Record<string, any>;\n delay?: number;\n}\n\ninterface IDeleteTaskMutationParams {\n id: string;\n}\n\ninterface IUpdateSettingsArgs {\n input: IUpdateBackgroundTaskSettingsInput;\n}\n\ninterface IResolverParams<TArgs = unknown, TParent = unknown> {\n parent: TParent;\n args: TArgs;\n context: Context;\n}\n\nfunction addQueryResolvers(builder: GraphQLSchemaFactory.SchemaBuilder): void {\n builder.addResolver({\n path: \"Query.backgroundTasks\",\n resolver: () => emptyResolver\n });\n\n builder.addResolver({\n path: \"WebinyBackgroundTaskQuery.getTask\",\n dependencies: [TasksCrud],\n resolver: (tasksCrud: TasksCrud.Interface) => {\n return ({ args, context }: IResolverParams<IGetTaskQueryParams>) => {\n return resolve(async () => {\n await checkPermissions(context, { rwd: \"r\" });\n return await tasksCrud.getTask(args.id);\n });\n };\n }\n });\n\n builder.addResolver({\n path: \"WebinyBackgroundTaskQuery.listTasks\",\n dependencies: [TasksCrud],\n resolver: (tasksCrud: TasksCrud.Interface) => {\n return ({ args, context }: IResolverParams<IListTaskParams>) => {\n return resolveList(async () => {\n await checkPermissions(context, { rwd: \"r\" });\n return await tasksCrud.listTasks(args);\n });\n };\n }\n });\n\n builder.addResolver({\n path: \"WebinyBackgroundTaskQuery.listDefinitions\",\n dependencies: [ListTaskDefinitionsUseCase],\n resolver: (listTaskDefinitions: ListTaskDefinitionsUseCase.Interface) => {\n return ({ context }: IResolverParams) => {\n return resolve(async () => {\n await checkPermissions(context, { rwd: \"r\" });\n // Do not output private tasks.\n return listTaskDefinitions.execute().filter(item => {\n return !item.isPrivate;\n });\n });\n };\n }\n });\n\n builder.addResolver({\n path: \"WebinyBackgroundTaskQuery.listLogs\",\n dependencies: [TasksCrud],\n resolver: (tasksCrud: TasksCrud.Interface) => {\n return ({ args, context }: IResolverParams<IListTaskLogParams>) => {\n return resolveList(async () => {\n await checkPermissions(context, { rwd: \"r\" });\n return await tasksCrud.listLogs(args);\n });\n };\n }\n });\n\n builder.addResolver({\n path: \"WebinyBackgroundTaskQuery.getSettings\",\n dependencies: [GetBackgroundTaskSettingsRepository],\n resolver: (repository: GetBackgroundTaskSettingsRepository.Interface) => {\n return ({ context }: IResolverParams) => {\n return resolve(async () => {\n await checkPermissions(context, { rwd: \"r\" });\n const result = await repository.execute();\n if (result.isFail()) {\n throw result.error;\n }\n return result.value;\n });\n };\n }\n });\n}\n\nfunction addMutationResolvers(builder: GraphQLSchemaFactory.SchemaBuilder): void {\n builder.addResolver({\n path: \"Mutation.backgroundTasks\",\n resolver: () => emptyResolver\n });\n\n builder.addResolver({\n path: \"WebinyBackgroundTaskMutation.abortTask\",\n dependencies: [AbortTaskUseCase],\n resolver: (abortTask: AbortTaskUseCase.Interface) => {\n return async ({ args, context }: IResolverParams<IAbortTaskMutationParams>) => {\n await checkPermissions(context, { rwd: \"w\" });\n return resolve<ITask>(async () => {\n const result = await abortTask.execute(args);\n if (result.isOk()) {\n return result.value;\n }\n\n throw result.error;\n });\n };\n }\n });\n\n builder.addResolver({\n path: \"WebinyBackgroundTaskMutation.triggerTask\",\n dependencies: [TriggerTaskUseCase],\n resolver: (triggerTask: TriggerTaskUseCase.Interface) => {\n return async ({ args, context }: IResolverParams<ITriggerTaskMutationParams>) => {\n await checkPermissions(context, { rwd: \"w\" });\n return resolve<ITask>(async () => {\n const result = await triggerTask.execute(args);\n if (result.isOk()) {\n return result.value;\n }\n\n throw result.error;\n });\n };\n }\n });\n\n builder.addResolver({\n path: \"WebinyBackgroundTaskMutation.deleteTask\",\n dependencies: [TasksCrud],\n resolver: (tasksCrud: TasksCrud.Interface) => {\n return async ({ args, context }: IResolverParams<IDeleteTaskMutationParams>) => {\n await checkPermissions(context, { rwd: \"d\" });\n return resolve(async () => {\n return await tasksCrud.deleteTask(args.id);\n });\n };\n }\n });\n\n builder.addResolver({\n path: \"WebinyBackgroundTaskMutation.updateSettings\",\n dependencies: [UpdateBackgroundTaskSettingsUseCase],\n resolver: (updateSettings: UpdateBackgroundTaskSettingsUseCase.Interface) => {\n return ({ args }: IResolverParams<IUpdateSettingsArgs>) => {\n return resolve(async () => {\n const result = await updateSettings.execute(args.input);\n if (result.isFail()) {\n throw result.error;\n }\n return result.value;\n });\n };\n }\n });\n}\n\nfunction addFieldResolvers(builder: GraphQLSchemaFactory.SchemaBuilder): void {\n builder.addResolver({\n path: \"WebinyBackgroundTask.logs\",\n dependencies: [TasksCrud],\n resolver: (tasksCrud: TasksCrud.Interface) => {\n return async ({ parent, args }: IResolverParams<IListTaskLogParams, ITask>) => {\n const { items } = await tasksCrud.listLogs({\n sort: [\"createdBy_ASC\"],\n limit: 10000,\n ...args,\n where: {\n ...args?.where,\n task: parent.id\n }\n });\n return items;\n };\n }\n });\n\n builder.addResolver({\n path: \"WebinyBackgroundTaskLog.task\",\n dependencies: [TasksCrud],\n resolver: (tasksCrud: TasksCrud.Interface) => {\n return async ({ parent }: IResolverParams<unknown, ITaskLog>) => {\n return await tasksCrud.getTask(parent.task);\n };\n }\n });\n}\n\n/**\n * The background-tasks GraphQL schema. Its shape depends on the CMS task/log content models, which\n * are loaded when the schema is composed. The settings schema lives here too, because it extends\n * the task schema's `WebinyBackgroundTaskQuery`/`Mutation` types.\n */\nclass BackgroundTasksGraphQLSchemaImpl implements GraphQLSchemaFactory.Interface {\n public constructor(\n private readonly tenantContext: TenantContext.Interface,\n private readonly identityContext: IdentityContext.Interface,\n private readonly tasksCrud: TasksCrud.Interface,\n private readonly listModelsUseCase: ListModelsUseCase.Interface,\n private readonly fieldRegistry: CmsModelFieldToGraphQLRegistry.Interface\n ) {}\n\n public async execute(\n builder: GraphQLSchemaFactory.SchemaBuilder\n ): Promise<GraphQLSchemaFactory.SchemaBuilder> {\n if (!this.tenantContext.getTenant()) {\n return builder;\n }\n\n const typeDefs = await this.createTypeDefs();\n\n builder.addTypeDefs(typeDefs);\n addQueryResolvers(builder);\n addMutationResolvers(builder);\n addFieldResolvers(builder);\n\n return builder;\n }\n\n private async createTypeDefs(): Promise<string> {\n const taskModel = await this.tasksCrud.getTaskModel();\n const logModel = await this.tasksCrud.getLogModel();\n const fieldRegistry = this.fieldRegistry;\n\n const models = await this.identityContext.withoutAuthorization(async () => {\n const modelsResult = await this.listModelsUseCase.execute({ includePrivate: false });\n return modelsResult.value.filter(model => model.fields.length > 0);\n });\n\n const taskFields = renderFields({\n models,\n model: taskModel,\n fields: taskModel.fields,\n type: \"manage\",\n fieldRegistry\n });\n\n const logFields = renderFields({\n models,\n model: logModel,\n fields: logModel.fields.filter(field => field.fieldId !== \"task\"),\n type: \"manage\",\n fieldRegistry\n });\n\n const listTasksFilterFieldsRender = renderListFilterFields({\n model: taskModel,\n fields: taskModel.fields,\n type: \"manage\",\n fieldRegistry,\n excludeFields: [\"entryId\"]\n });\n\n const listLogsFilterFieldsRender = renderListFilterFields({\n model: logModel,\n fields: logModel.fields,\n type: \"manage\",\n fieldRegistry,\n excludeFields: [\"entryId\"]\n });\n\n const sortTasksEnumRender = renderSortEnum({\n model: taskModel,\n fields: taskModel.fields,\n fieldRegistry,\n sorters: []\n });\n\n const sortLogsEnumRender = renderSortEnum({\n model: logModel,\n fields: logModel.fields,\n fieldRegistry,\n sorters: []\n });\n\n return /* GraphQL */ `\n type WebinyBackgroundTaskError {\n message: String\n code: String\n data: JSON\n stack: String\n }\n\n ${taskFields.map(f => f.typeDefs).join(\"\\n\")}\n ${logFields.map(f => f.typeDefs).join(\"\\n\")}\n\n type WebinyBackgroundTask {\n id: String!\n createdOn: DateTime!\n savedOn: DateTime\n createdBy: WebinyBackgroundTaskIdentity!\n logs(\n where: WebinyBackgroundTaskLogListWhereInput\n limit: Number\n sort: [WebinyBackgroundTaskLogListSorter!]\n ): [WebinyBackgroundTaskLog!]!\n ${taskFields.map(f => f.fields).join(\"\\n\")}\n }\n\n type WebinyBackgroundTaskResponse {\n data: WebinyBackgroundTask\n error: WebinyBackgroundTaskError\n }\n\n type WebinyBackgroundTaskMeta {\n cursor: String\n hasMoreItems: Boolean!\n totalCount: Int!\n }\n\n type WebinyBackgroundTaskListResponse {\n data: [WebinyBackgroundTask!]\n meta: WebinyBackgroundTaskMeta\n error: WebinyBackgroundTaskError\n }\n\n type WebinyBackgroundTaskLog {\n id: String!\n createdOn: DateTime!\n createdBy: WebinyBackgroundTaskIdentity!\n task: WebinyBackgroundTask!\n ${logFields.map(f => f.fields).join(\"\\n\")}\n }\n\n type WebinyBackgroundTaskLogListResponse {\n data: [WebinyBackgroundTaskLog!]\n meta: WebinyBackgroundTaskMeta\n error: WebinyBackgroundTaskError\n }\n\n type WebinyBackgroundTaskDefinition {\n id: String!\n title: String!\n description: String\n }\n\n type WebinyBackgroundTaskListDefinitionsResponse {\n data: [WebinyBackgroundTaskDefinition!]\n error: WebinyBackgroundTaskError\n }\n\n type WebinyBackgroundTaskIdentity {\n id: String!\n displayName: String!\n type: String\n }\n\n type WebinyBackgroundTaskTriggerResponse {\n data: WebinyBackgroundTask\n error: WebinyBackgroundTaskError\n }\n\n type WebinyBackgroundTaskDeleteResponse {\n data: Boolean\n error: WebinyBackgroundTaskError\n }\n\n input WebinyBackgroundTaskListWhereInput {\n ${listTasksFilterFieldsRender.allFiltersAsString() || \"_empty: String\"}\n }\n\n input WebinyBackgroundTaskLogListWhereInput {\n ${listLogsFilterFieldsRender.allFiltersAsString() || \"_empty: String\"}\n }\n\n enum WebinyBackgroundTaskListSorter {\n ${sortTasksEnumRender}\n }\n\n enum WebinyBackgroundTaskLogListSorter {\n ${sortLogsEnumRender}\n }\n\n type WebinyBackgroundTaskQuery {\n _empty: String\n }\n\n type WebinyBackgroundTaskMutation {\n _empty: String\n }\n\n extend type Query {\n backgroundTasks: WebinyBackgroundTaskQuery\n }\n\n extend type Mutation {\n backgroundTasks: WebinyBackgroundTaskMutation\n }\n\n extend type WebinyBackgroundTaskQuery {\n getTask(id: ID!): WebinyBackgroundTaskResponse!\n listTasks(\n where: WebinyBackgroundTaskListWhereInput\n sort: [WebinyBackgroundTaskListSorter!]\n limit: Int\n after: String\n search: String\n ): WebinyBackgroundTaskListResponse!\n listDefinitions: WebinyBackgroundTaskListDefinitionsResponse!\n\n listLogs(\n where: WebinyBackgroundTaskLogListWhereInput\n sort: [WebinyBackgroundTaskLogListSorter!]\n limit: Int\n after: String\n search: String\n ): WebinyBackgroundTaskLogListResponse!\n }\n\n extend type WebinyBackgroundTaskMutation {\n triggerTask(definition: String!, input: JSON, name: String, delay: Number): WebinyBackgroundTaskTriggerResponse!\n abortTask(id: ID!, message: String): WebinyBackgroundTaskResponse!\n deleteTask(id: ID!): WebinyBackgroundTaskDeleteResponse!\n }\n\n type WebinyBackgroundTaskSettings {\n retentionDays: Int\n }\n\n type WebinyBackgroundTaskSettingsResponse {\n data: WebinyBackgroundTaskSettings\n error: WebinyBackgroundTaskError\n }\n\n input UpdateBackgroundTaskSettingsInput {\n retentionDays: Int\n }\n\n extend type WebinyBackgroundTaskQuery {\n getSettings: WebinyBackgroundTaskSettingsResponse\n }\n\n extend type WebinyBackgroundTaskMutation {\n updateSettings(\n input: UpdateBackgroundTaskSettingsInput!\n ): WebinyBackgroundTaskSettingsResponse\n }\n `;\n }\n}\n\nexport const BackgroundTasksGraphQLSchema = GraphQLSchemaFactory.createImplementation({\n implementation: BackgroundTasksGraphQLSchemaImpl,\n dependencies: [\n TenantContext,\n IdentityContext,\n TasksCrud,\n ListModelsUseCase,\n CmsModelFieldToGraphQLRegistry\n ]\n});\n"],"names":["addQueryResolvers","builder","emptyResolver","TasksCrud","tasksCrud","args","context","resolve","checkPermissions","resolveList","ListTaskDefinitionsUseCase","listTaskDefinitions","item","GetBackgroundTaskSettingsRepository","repository","result","addMutationResolvers","AbortTaskUseCase","abortTask","TriggerTaskUseCase","triggerTask","UpdateBackgroundTaskSettingsUseCase","updateSettings","addFieldResolvers","parent","items","BackgroundTasksGraphQLSchemaImpl","tenantContext","identityContext","listModelsUseCase","fieldRegistry","typeDefs","taskModel","logModel","models","modelsResult","model","taskFields","renderFields","logFields","field","listTasksFilterFieldsRender","renderListFilterFields","listLogsFilterFieldsRender","sortTasksEnumRender","renderSortEnum","sortLogsEnumRender","f","BackgroundTasksGraphQLSchema","GraphQLSchemaFactory","TenantContext","IdentityContext","ListModelsUseCase","CmsModelFieldToGraphQLRegistry"],"mappings":"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"}
|
package/api/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ export { TaskService } from "./domain/TaskService.js";
|
|
|
3
3
|
export * from "./response/index.js";
|
|
4
4
|
export * from "./types.js";
|
|
5
5
|
export { BackgroundTasksFeature } from "./BackgroundTasksFeature.js";
|
|
6
|
-
export {
|
|
6
|
+
export { BackgroundTasksGraphQLSchema } from "./graphql/BackgroundTasksGraphQLSchema.js";
|
|
7
7
|
export { TasksCrud } from "./TasksCrud.js";
|
|
8
8
|
export { TriggerTaskUseCase } from "./features/TriggerTask/abstractions.js";
|
|
9
9
|
export { AbortTaskUseCase } from "./features/AbortTask/abstractions.js";
|
package/api/index.js
CHANGED
|
@@ -2,7 +2,7 @@ export * from "./response/index.js";
|
|
|
2
2
|
export * from "./types.js";
|
|
3
3
|
export { TaskService } from "./domain/TaskService.js";
|
|
4
4
|
export { BackgroundTasksFeature } from "./BackgroundTasksFeature.js";
|
|
5
|
-
export {
|
|
5
|
+
export { BackgroundTasksGraphQLSchema } from "./graphql/BackgroundTasksGraphQLSchema.js";
|
|
6
6
|
export { TasksCrud } from "./TasksCrud.js";
|
|
7
7
|
export { TriggerTaskUseCase } from "./features/TriggerTask/abstractions.js";
|
|
8
8
|
export { AbortTaskUseCase } from "./features/AbortTask/abstractions.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/background-tasks",
|
|
3
|
-
"version": "6.6.0-alpha.
|
|
3
|
+
"version": "6.6.0-alpha.8",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./index.js",
|
|
@@ -19,22 +19,20 @@
|
|
|
19
19
|
},
|
|
20
20
|
"license": "MIT",
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@
|
|
23
|
-
"@
|
|
24
|
-
"@webiny/
|
|
25
|
-
"@webiny/api": "6.6.0-alpha.
|
|
26
|
-
"@webiny/api-
|
|
27
|
-
"@webiny/
|
|
28
|
-
"@webiny/
|
|
29
|
-
"@webiny/
|
|
30
|
-
"@webiny/
|
|
31
|
-
"@webiny/
|
|
32
|
-
"@webiny/
|
|
33
|
-
"@webiny/
|
|
34
|
-
"@webiny/
|
|
35
|
-
"@webiny/
|
|
36
|
-
"@webiny/sdk": "6.6.0-alpha.7",
|
|
37
|
-
"@webiny/utils": "6.6.0-alpha.7",
|
|
22
|
+
"@webiny/admin-ui": "6.6.0-alpha.8",
|
|
23
|
+
"@webiny/api": "6.6.0-alpha.8",
|
|
24
|
+
"@webiny/api-core": "6.6.0-alpha.8",
|
|
25
|
+
"@webiny/api-graphql": "6.6.0-alpha.8",
|
|
26
|
+
"@webiny/api-headless-cms": "6.6.0-alpha.8",
|
|
27
|
+
"@webiny/app": "6.6.0-alpha.8",
|
|
28
|
+
"@webiny/app-admin": "6.6.0-alpha.8",
|
|
29
|
+
"@webiny/error": "6.6.0-alpha.8",
|
|
30
|
+
"@webiny/feature": "6.6.0-alpha.8",
|
|
31
|
+
"@webiny/handler": "6.6.0-alpha.8",
|
|
32
|
+
"@webiny/icons": "6.6.0-alpha.8",
|
|
33
|
+
"@webiny/plugins": "6.6.0-alpha.8",
|
|
34
|
+
"@webiny/sdk": "6.6.0-alpha.8",
|
|
35
|
+
"@webiny/utils": "6.6.0-alpha.8",
|
|
38
36
|
"deep-equal": "2.2.3",
|
|
39
37
|
"graphql": "16.14.2",
|
|
40
38
|
"lodash": "4.18.1",
|
|
@@ -47,11 +45,11 @@
|
|
|
47
45
|
"zod": "4.4.3"
|
|
48
46
|
},
|
|
49
47
|
"devDependencies": {
|
|
50
|
-
"@webiny/api-core-testing": "6.6.0-alpha.
|
|
51
|
-
"@webiny/build-tools": "6.6.0-alpha.
|
|
48
|
+
"@webiny/api-core-testing": "6.6.0-alpha.8",
|
|
49
|
+
"@webiny/build-tools": "6.6.0-alpha.8",
|
|
52
50
|
"@webiny/di": "1.1.0",
|
|
53
|
-
"@webiny/event-handler-core": "6.6.0-alpha.
|
|
54
|
-
"@webiny/wcp": "6.6.0-alpha.
|
|
51
|
+
"@webiny/event-handler-core": "6.6.0-alpha.8",
|
|
52
|
+
"@webiny/wcp": "6.6.0-alpha.8",
|
|
55
53
|
"rimraf": "6.1.3",
|
|
56
54
|
"type-fest": "5.8.0",
|
|
57
55
|
"typescript": "7.0.2",
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import type { GraphQLSchema } from "graphql";
|
|
2
|
-
import type { IGraphQLContextualSchema } from "@webiny/api-graphql";
|
|
3
|
-
import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js";
|
|
4
|
-
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js";
|
|
5
|
-
/**
|
|
6
|
-
* Builds the background-tasks GraphQL schema after context enhancement — the schema shape depends on
|
|
7
|
-
* the per-tenant CMS task/log content models, so it can only be rendered at request time (once the
|
|
8
|
-
* tenant is known and the CMS facade is resolvable). Replaces the legacy `createBackgroundTaskGraphQL`
|
|
9
|
-
* + `createBackgroundTaskSettingsGraphQL` ContextPlugins; the settings schema is merged in here
|
|
10
|
-
* because it extends the task schema's `WebinyBackgroundTaskQuery`/`Mutation` types.
|
|
11
|
-
*/
|
|
12
|
-
declare class BackgroundTasksContextualSchemaImpl implements IGraphQLContextualSchema {
|
|
13
|
-
private tenantCtx;
|
|
14
|
-
private identityCtx;
|
|
15
|
-
constructor(tenantCtx: TenantContext.Interface, identityCtx: IdentityContext.Interface);
|
|
16
|
-
build(ctx: Record<string, any>): Promise<GraphQLSchema>;
|
|
17
|
-
}
|
|
18
|
-
export declare const BackgroundTasksContextualSchema: typeof BackgroundTasksContextualSchemaImpl & {
|
|
19
|
-
__abstraction: import("@webiny/di").Abstraction<IGraphQLContextualSchema>;
|
|
20
|
-
};
|
|
21
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api/graphql/BackgroundTasksContextualSchema.js","sources":["../../../src/api/graphql/BackgroundTasksContextualSchema.ts"],"sourcesContent":["import type { Container } from \"@webiny/di\";\nimport type { GraphQLSchema } from \"graphql\";\nimport { makeExecutableSchema } from \"@graphql-tools/schema\";\nimport { mergeResolvers } from \"@graphql-tools/merge\";\nimport { GraphQLContextualSchema } from \"@webiny/api-graphql\";\nimport type { IGraphQLContextualSchema } from \"@webiny/api-graphql\";\nimport { renderSortEnum } from \"@webiny/api-headless-cms/utils/renderSortEnum.js\";\nimport { renderListFilterFields } from \"@webiny/api-headless-cms/utils/renderListFilterFields.js\";\nimport { renderFields } from \"@webiny/api-headless-cms/utils/renderFields.js\";\nimport { createBaseContentSchema } from \"@webiny/api-headless-cms/graphql/schema/baseContentSchema.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/abstractions.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/abstractions.js\";\nimport { ListModelsUseCase } from \"@webiny/api-headless-cms/features/contentModel/ListModels/index.js\";\nimport { CmsModelFieldToGraphQLRegistry } from \"@webiny/api-headless-cms/exports/api/cms/graphql.js\";\nimport type { Context, IListTaskLogParams, IListTaskParams, ITask, ITaskLog } from \"~/api/types.js\";\nimport { TasksCrud } from \"~/api/TasksCrud.js\";\nimport { ListTaskDefinitionsUseCase } from \"~/api/features/ListTaskDefinitions/abstractions.js\";\nimport { TriggerTaskUseCase } from \"~/api/features/TriggerTask/abstractions.js\";\nimport { AbortTaskUseCase } from \"~/api/features/AbortTask/abstractions.js\";\nimport { GetBackgroundTaskSettingsRepository } from \"~/api/features/GetBackgroundTaskSettings/abstractions.js\";\nimport { UpdateBackgroundTaskSettingsUseCase } from \"~/api/features/UpdateBackgroundTaskSettings/abstractions.js\";\nimport type { IUpdateBackgroundTaskSettingsInput } from \"~/api/features/UpdateBackgroundTaskSettings/abstractions.js\";\nimport { emptyResolver, resolve, resolveList } from \"./utils.js\";\nimport { checkPermissions } from \"./checkPermissions.js\";\n\ninterface IGetTaskQueryParams {\n id: string;\n}\n\ninterface IAbortTaskMutationParams {\n id: string;\n message?: string;\n}\n\ninterface ITriggerTaskMutationParams {\n name?: string;\n definition: string;\n input?: Record<string, any>;\n delay?: number;\n}\n\ninterface IDeleteTaskMutationParams {\n id: string;\n}\n\ninterface IUpdateSettingsArgs {\n input: IUpdateBackgroundTaskSettingsInput;\n}\n\n/**\n * Builds the background-tasks GraphQL schema after context enhancement — the schema shape depends on\n * the per-tenant CMS task/log content models, so it can only be rendered at request time (once the\n * tenant is known and the CMS facade is resolvable). Replaces the legacy `createBackgroundTaskGraphQL`\n * + `createBackgroundTaskSettingsGraphQL` ContextPlugins; the settings schema is merged in here\n * because it extends the task schema's `WebinyBackgroundTaskQuery`/`Mutation` types.\n */\nclass BackgroundTasksContextualSchemaImpl implements IGraphQLContextualSchema {\n constructor(\n private tenantCtx: TenantContext.Interface,\n private identityCtx: IdentityContext.Interface\n ) {}\n\n async build(ctx: Record<string, any>): Promise<GraphQLSchema> {\n if (!this.tenantCtx.getTenant()) {\n return makeExecutableSchema({\n typeDefs: \"type Query\\ntype Mutation\",\n assumeValidSDL: true\n });\n }\n\n const container = ctx.container as Container;\n\n const tasksCrud = container.resolve(TasksCrud);\n const taskModel = await tasksCrud.getTaskModel();\n const logModel = await tasksCrud.getLogModel();\n\n // Resolve the CMS use-cases lazily here (at build/request time) rather than as constructor\n // dependencies — they depend on registrations the CMS initializer only makes during its own\n // build(), so eager injection would fail when the engine constructs all contextual schemas.\n const listModels = container.resolve(ListModelsUseCase);\n const fieldRegistry = container.resolve(CmsModelFieldToGraphQLRegistry);\n\n const models = await this.identityCtx.withoutAuthorization(async () => {\n const modelsResult = await listModels.execute({ includePrivate: false });\n return modelsResult.value.filter(model => model.fields.length > 0);\n });\n\n const taskFields = renderFields({\n models,\n model: taskModel,\n fields: taskModel.fields,\n type: \"manage\",\n fieldRegistry\n });\n\n const logFields = renderFields({\n models,\n model: logModel,\n fields: logModel.fields.filter(field => field.fieldId !== \"task\"),\n type: \"manage\",\n fieldRegistry\n });\n\n const listTasksFilterFieldsRender = renderListFilterFields({\n model: taskModel,\n fields: taskModel.fields,\n type: \"manage\",\n fieldRegistry,\n excludeFields: [\"entryId\"]\n });\n\n const listLogsFilterFieldsRender = renderListFilterFields({\n model: logModel,\n fields: logModel.fields,\n type: \"manage\",\n fieldRegistry,\n excludeFields: [\"entryId\"]\n });\n\n const sortTasksEnumRender = renderSortEnum({\n model: taskModel,\n fields: taskModel.fields,\n fieldRegistry,\n sorters: []\n });\n\n const sortLogsEnumRender = renderSortEnum({\n model: logModel,\n fields: logModel.fields,\n fieldRegistry,\n sorters: []\n });\n\n const typeDefs = /* GraphQL */ `\n type WebinyBackgroundTaskError {\n message: String\n code: String\n data: JSON\n stack: String\n }\n\n ${taskFields.map(f => f.typeDefs).join(\"\\n\")}\n ${logFields.map(f => f.typeDefs).join(\"\\n\")}\n\n type WebinyBackgroundTask {\n id: String!\n createdOn: DateTime!\n savedOn: DateTime\n createdBy: WebinyBackgroundTaskIdentity!\n logs(\n where: WebinyBackgroundTaskLogListWhereInput\n limit: Number\n sort: [WebinyBackgroundTaskLogListSorter!]\n ): [WebinyBackgroundTaskLog!]!\n ${taskFields.map(f => f.fields).join(\"\\n\")}\n }\n\n type WebinyBackgroundTaskResponse {\n data: WebinyBackgroundTask\n error: WebinyBackgroundTaskError\n }\n\n type WebinyBackgroundTaskMeta {\n cursor: String\n hasMoreItems: Boolean!\n totalCount: Int!\n }\n\n type WebinyBackgroundTaskListResponse {\n data: [WebinyBackgroundTask!]\n meta: WebinyBackgroundTaskMeta\n error: WebinyBackgroundTaskError\n }\n\n type WebinyBackgroundTaskLog {\n id: String!\n createdOn: DateTime!\n createdBy: WebinyBackgroundTaskIdentity!\n task: WebinyBackgroundTask!\n ${logFields.map(f => f.fields).join(\"\\n\")}\n }\n\n type WebinyBackgroundTaskLogListResponse {\n data: [WebinyBackgroundTaskLog!]\n meta: WebinyBackgroundTaskMeta\n error: WebinyBackgroundTaskError\n }\n\n type WebinyBackgroundTaskDefinition {\n id: String!\n title: String!\n description: String\n }\n\n type WebinyBackgroundTaskListDefinitionsResponse {\n data: [WebinyBackgroundTaskDefinition!]\n error: WebinyBackgroundTaskError\n }\n\n type WebinyBackgroundTaskIdentity {\n id: String!\n displayName: String!\n type: String\n }\n\n type WebinyBackgroundTaskTriggerResponse {\n data: WebinyBackgroundTask\n error: WebinyBackgroundTaskError\n }\n\n type WebinyBackgroundTaskDeleteResponse {\n data: Boolean\n error: WebinyBackgroundTaskError\n }\n\n input WebinyBackgroundTaskListWhereInput {\n ${listTasksFilterFieldsRender.allFiltersAsString() || \"_empty: String\"}\n }\n\n input WebinyBackgroundTaskLogListWhereInput {\n ${listLogsFilterFieldsRender.allFiltersAsString() || \"_empty: String\"}\n }\n\n enum WebinyBackgroundTaskListSorter {\n ${sortTasksEnumRender}\n }\n\n enum WebinyBackgroundTaskLogListSorter {\n ${sortLogsEnumRender}\n }\n\n type WebinyBackgroundTaskQuery {\n _empty: String\n }\n\n type WebinyBackgroundTaskMutation {\n _empty: String\n }\n\n extend type Query {\n backgroundTasks: WebinyBackgroundTaskQuery\n }\n\n extend type Mutation {\n backgroundTasks: WebinyBackgroundTaskMutation\n }\n\n extend type WebinyBackgroundTaskQuery {\n getTask(id: ID!): WebinyBackgroundTaskResponse!\n listTasks(\n where: WebinyBackgroundTaskListWhereInput\n sort: [WebinyBackgroundTaskListSorter!]\n limit: Int\n after: String\n search: String\n ): WebinyBackgroundTaskListResponse!\n listDefinitions: WebinyBackgroundTaskListDefinitionsResponse!\n\n listLogs(\n where: WebinyBackgroundTaskLogListWhereInput\n sort: [WebinyBackgroundTaskLogListSorter!]\n limit: Int\n after: String\n search: String\n ): WebinyBackgroundTaskLogListResponse!\n }\n\n extend type WebinyBackgroundTaskMutation {\n triggerTask(definition: String!, input: JSON, name: String, delay: Number): WebinyBackgroundTaskTriggerResponse!\n abortTask(id: ID!, message: String): WebinyBackgroundTaskResponse!\n deleteTask(id: ID!): WebinyBackgroundTaskDeleteResponse!\n }\n\n type WebinyBackgroundTaskSettings {\n retentionDays: Int\n }\n\n type WebinyBackgroundTaskSettingsResponse {\n data: WebinyBackgroundTaskSettings\n error: WebinyBackgroundTaskError\n }\n\n input UpdateBackgroundTaskSettingsInput {\n retentionDays: Int\n }\n\n extend type WebinyBackgroundTaskQuery {\n getSettings: WebinyBackgroundTaskSettingsResponse\n }\n\n extend type WebinyBackgroundTaskMutation {\n updateSettings(\n input: UpdateBackgroundTaskSettingsInput!\n ): WebinyBackgroundTaskSettingsResponse\n }\n `;\n\n const resolvers = {\n Query: {\n backgroundTasks: emptyResolver\n },\n Mutation: {\n backgroundTasks: emptyResolver\n },\n WebinyBackgroundTaskQuery: {\n getTask: async (_: unknown, args: IGetTaskQueryParams, context: Context) => {\n return resolve(async () => {\n await checkPermissions(context, { rwd: \"r\" });\n return await context.container.resolve(TasksCrud).getTask(args.id);\n });\n },\n listTasks: async (_: unknown, args: IListTaskParams, context: Context) => {\n return resolveList(async () => {\n await checkPermissions(context, { rwd: \"r\" });\n return await context.container.resolve(TasksCrud).listTasks(args);\n });\n },\n listDefinitions: async (_: unknown, __: unknown, context: Context) => {\n return resolve(async () => {\n await checkPermissions(context, { rwd: \"r\" });\n const result = context.container\n .resolve(ListTaskDefinitionsUseCase)\n .execute();\n /**\n * Do not output private tasks.\n */\n return result.filter(item => {\n return !item.isPrivate;\n });\n });\n },\n listLogs: async (_: unknown, args: IListTaskLogParams, context: Context) => {\n return resolveList(async () => {\n await checkPermissions(context, { rwd: \"r\" });\n return await context.container.resolve(TasksCrud).listLogs(args);\n });\n },\n getSettings: async (_: unknown, __: unknown, context: Context) => {\n return resolve(async () => {\n await checkPermissions(context, { rwd: \"r\" });\n const repository = context.container.resolve(\n GetBackgroundTaskSettingsRepository\n );\n const result = await repository.execute();\n if (result.isFail()) {\n throw result.error;\n }\n return result.value;\n });\n }\n },\n WebinyBackgroundTaskMutation: {\n abortTask: async (_: unknown, args: IAbortTaskMutationParams, context: Context) => {\n await checkPermissions(context, { rwd: \"w\" });\n return resolve<ITask>(async () => {\n const result = await context.container\n .resolve(AbortTaskUseCase)\n .execute(args);\n if (result.isOk()) {\n return result.value;\n }\n\n throw result.error;\n });\n },\n triggerTask: async (\n _: unknown,\n args: ITriggerTaskMutationParams,\n context: Context\n ) => {\n await checkPermissions(context, { rwd: \"w\" });\n return resolve<ITask>(async () => {\n const result = await context.container\n .resolve(TriggerTaskUseCase)\n .execute(args);\n if (result.isOk()) {\n return result.value;\n }\n\n throw result.error;\n });\n },\n deleteTask: async (\n _: unknown,\n args: IDeleteTaskMutationParams,\n context: Context\n ) => {\n await checkPermissions(context, { rwd: \"d\" });\n return resolve(async () => {\n return await context.container.resolve(TasksCrud).deleteTask(args.id);\n });\n },\n updateSettings: async (_: unknown, args: IUpdateSettingsArgs, context: Context) => {\n return resolve(async () => {\n const useCase = context.container.resolve(\n UpdateBackgroundTaskSettingsUseCase\n );\n const result = await useCase.execute(args.input);\n if (result.isFail()) {\n throw result.error;\n }\n return result.value;\n });\n }\n },\n /**\n * Custom resolvers for fields\n */\n WebinyBackgroundTask: {\n logs: async (parent: ITask, args: IListTaskLogParams, context: Context) => {\n const { items } = await context.container.resolve(TasksCrud).listLogs({\n sort: [\"createdBy_ASC\"],\n limit: 10000,\n ...args,\n where: {\n ...args?.where,\n task: parent.id\n }\n });\n return items;\n }\n },\n WebinyBackgroundTaskLog: {\n task: async (parent: ITaskLog, _: unknown, context: Context) => {\n return await context.container.resolve(TasksCrud).getTask(parent.task);\n }\n }\n };\n\n // The generated task/log model schema references CMS base scalars (DateTime, JSON, Number,\n // ...). Include createBaseContentSchema() — which declares those scalars, their resolvers, and\n // the base Query/Mutation types — so this standalone schema is self-contained and valid before\n // the engine merges it with the composed static schema.\n const baseContent = createBaseContentSchema();\n\n return makeExecutableSchema({\n typeDefs: [baseContent.schema.typeDefs as string, typeDefs],\n resolvers: mergeResolvers([baseContent.schema.resolvers as any, resolvers as any]),\n inheritResolversFromInterfaces: true\n });\n }\n}\n\nexport const BackgroundTasksContextualSchema = GraphQLContextualSchema.createImplementation({\n implementation: BackgroundTasksContextualSchemaImpl,\n dependencies: [TenantContext, IdentityContext]\n});\n"],"names":["BackgroundTasksContextualSchemaImpl","tenantCtx","identityCtx","ctx","makeExecutableSchema","container","tasksCrud","TasksCrud","taskModel","logModel","listModels","ListModelsUseCase","fieldRegistry","CmsModelFieldToGraphQLRegistry","models","modelsResult","model","taskFields","renderFields","logFields","field","listTasksFilterFieldsRender","renderListFilterFields","listLogsFilterFieldsRender","sortTasksEnumRender","renderSortEnum","sortLogsEnumRender","typeDefs","f","resolvers","emptyResolver","_","args","context","resolve","checkPermissions","resolveList","__","result","ListTaskDefinitionsUseCase","item","repository","GetBackgroundTaskSettingsRepository","AbortTaskUseCase","TriggerTaskUseCase","useCase","UpdateBackgroundTaskSettingsUseCase","parent","items","baseContent","createBaseContentSchema","mergeResolvers","BackgroundTasksContextualSchema","GraphQLContextualSchema","TenantContext","IdentityContext"],"mappings":"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"}
|