@webiny/api-headless-cms-bulk-actions 6.3.0 → 6.4.0-beta.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/abstractions/IUseCase.js +0 -3
- package/abstractions/index.js +0 -3
- package/domain/BulkActionName.js +9 -15
- package/domain/BulkActionName.js.map +1 -1
- package/features/BulkActionContext/abstractions.js +2 -3
- package/features/BulkActionContext/abstractions.js.map +1 -1
- package/features/BulkActionContext/index.js +0 -2
- package/features/DeleteEntriesBulkAction/DeleteEntriesBulkAction.js +22 -20
- package/features/DeleteEntriesBulkAction/DeleteEntriesBulkAction.js.map +1 -1
- package/features/DeleteEntriesBulkAction/feature.js +6 -5
- package/features/DeleteEntriesBulkAction/feature.js.map +1 -1
- package/features/EntriesBulkAction/abstractions.js +3 -2
- package/features/EntriesBulkAction/abstractions.js.map +1 -1
- package/features/EntriesBulkAction/createBulkActionTasks.js +114 -131
- package/features/EntriesBulkAction/createBulkActionTasks.js.map +1 -1
- package/features/EntriesBulkAction/internals/ChildTasksCleanup.js +27 -64
- package/features/EntriesBulkAction/internals/ChildTasksCleanup.js.map +1 -1
- package/features/EntriesBulkAction/internals/CreateTasksByModel.js +68 -99
- package/features/EntriesBulkAction/internals/CreateTasksByModel.js.map +1 -1
- package/features/EntriesBulkAction/internals/ProcessTask.js +35 -68
- package/features/EntriesBulkAction/internals/ProcessTask.js.map +1 -1
- package/features/EntriesBulkAction/internals/ProcessTaskResult.js +20 -19
- package/features/EntriesBulkAction/internals/ProcessTaskResult.js.map +1 -1
- package/features/EntriesBulkAction/internals/ProcessTasksByModel.js +37 -50
- package/features/EntriesBulkAction/internals/ProcessTasksByModel.js.map +1 -1
- package/features/EntriesBulkAction/internals/TaskCache.js +30 -64
- package/features/EntriesBulkAction/internals/TaskCache.js.map +1 -1
- package/features/MoveToFolderBulkAction/MoveToFolderBulkAction.js +20 -20
- package/features/MoveToFolderBulkAction/MoveToFolderBulkAction.js.map +1 -1
- package/features/MoveToFolderBulkAction/feature.js +6 -5
- package/features/MoveToFolderBulkAction/feature.js.map +1 -1
- package/features/MoveToTrashBulkAction/MoveToTrashBulkAction.js +22 -20
- package/features/MoveToTrashBulkAction/MoveToTrashBulkAction.js.map +1 -1
- package/features/MoveToTrashBulkAction/feature.js +6 -5
- package/features/MoveToTrashBulkAction/feature.js.map +1 -1
- package/features/PublishEntriesBulkAction/PublishEntriesBulkAction.js +27 -28
- package/features/PublishEntriesBulkAction/PublishEntriesBulkAction.js.map +1 -1
- package/features/PublishEntriesBulkAction/feature.js +6 -5
- package/features/PublishEntriesBulkAction/feature.js.map +1 -1
- package/features/RestoreEntriesBulkAction/RestoreEntriesBulkAction.js +20 -18
- package/features/RestoreEntriesBulkAction/RestoreEntriesBulkAction.js.map +1 -1
- package/features/RestoreEntriesBulkAction/feature.js +6 -5
- package/features/RestoreEntriesBulkAction/feature.js.map +1 -1
- package/features/UnpublishEntriesBulkAction/UnpublishEntriesBulkAction.js +20 -18
- package/features/UnpublishEntriesBulkAction/UnpublishEntriesBulkAction.js.map +1 -1
- package/features/UnpublishEntriesBulkAction/feature.js +6 -5
- package/features/UnpublishEntriesBulkAction/feature.js.map +1 -1
- package/graphql/createBulkActionGraphQL.js +44 -51
- package/graphql/createBulkActionGraphQL.js.map +1 -1
- package/graphql/createDefaultGraphQL.js +30 -34
- package/graphql/createDefaultGraphQL.js.map +1 -1
- package/handlers/eventBridgeEventHandler.js +23 -41
- package/handlers/eventBridgeEventHandler.js.map +1 -1
- package/handlers/index.js +5 -3
- package/handlers/index.js.map +1 -1
- package/handlers/setupEventsTenant.js +7 -9
- package/handlers/setupEventsTenant.js.map +1 -1
- package/index.js +29 -33
- package/index.js.map +1 -1
- package/package.json +17 -17
- package/tasks/EmptyTrashBinTaskDefinition.js +83 -109
- package/tasks/EmptyTrashBinTaskDefinition.js.map +1 -1
- package/tasks/createEmptyTrashBinsTask.js +4 -5
- package/tasks/createEmptyTrashBinsTask.js.map +1 -1
- package/tasks/index.js +0 -2
- package/types.js +7 -18
- package/types.js.map +1 -1
- package/abstractions/IUseCase.js.map +0 -1
- package/abstractions/index.js.map +0 -1
- package/features/BulkActionContext/index.js.map +0 -1
- package/tasks/index.js.map +0 -1
|
@@ -2,63 +2,56 @@ import { CmsGraphQLSchemaPlugin, isHeadlessCmsReady } from "@webiny/api-headless
|
|
|
2
2
|
import { Response } from "@webiny/handler-graphql";
|
|
3
3
|
import { CMS_MODEL_SINGLETON_TAG } from "@webiny/api-headless-cms/constants.js";
|
|
4
4
|
import { BulkActionName } from "../domain/BulkActionName.js";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
const tags = Array.isArray(model.tags) ? model.tags : [];
|
|
19
|
-
if (tags.includes(CMS_MODEL_SINGLETON_TAG)) {
|
|
20
|
-
return false;
|
|
21
|
-
}
|
|
22
|
-
if (bulkAction.modelIds?.length) {
|
|
23
|
-
return bulkAction.modelIds.includes(model.modelId);
|
|
24
|
-
}
|
|
25
|
-
return true;
|
|
5
|
+
const createBulkActionGraphQL = async (context, bulkAction)=>{
|
|
6
|
+
const tenant = context.tenancy.getCurrentTenant();
|
|
7
|
+
if (!await isHeadlessCmsReady(context)) return;
|
|
8
|
+
const models = await context.security.withoutAuthorization(async ()=>{
|
|
9
|
+
const allModels = await context.cms.listModels();
|
|
10
|
+
return allModels.filter((model)=>{
|
|
11
|
+
if (model.isPrivate) return false;
|
|
12
|
+
const tags = Array.isArray(model.tags) ? model.tags : [];
|
|
13
|
+
if (tags.includes(CMS_MODEL_SINGLETON_TAG)) return false;
|
|
14
|
+
if (bulkAction.modelIds?.length) return bulkAction.modelIds.includes(model.modelId);
|
|
15
|
+
return true;
|
|
16
|
+
});
|
|
26
17
|
});
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
typeDefs: /* GraphQL */`
|
|
18
|
+
const plugins = [];
|
|
19
|
+
models.forEach((model)=>{
|
|
20
|
+
const plugin = new CmsGraphQLSchemaPlugin({
|
|
21
|
+
typeDefs: `
|
|
32
22
|
extend enum BulkAction${model.singularApiName}Name {
|
|
33
23
|
${BulkActionName.from(bulkAction.name)}
|
|
34
24
|
}
|
|
35
25
|
`,
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
26
|
+
resolvers: {
|
|
27
|
+
Mutation: {
|
|
28
|
+
[`bulkAction${model.singularApiName}`]: async (_, args, context)=>{
|
|
29
|
+
const identity = context.security.getIdentity();
|
|
30
|
+
const response = await context.tasks.trigger({
|
|
31
|
+
definition: `hcmsBulkList${args.action}Entries`,
|
|
32
|
+
input: {
|
|
33
|
+
modelId: model.modelId,
|
|
34
|
+
where: args.where,
|
|
35
|
+
search: args.search,
|
|
36
|
+
data: args.data,
|
|
37
|
+
identity
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
return new Response({
|
|
41
|
+
id: response.value.id
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
isApplicable: (context)=>context.tenancy.getCurrentTenant().id === tenant.id
|
|
47
|
+
});
|
|
48
|
+
plugin.name = `headless-cms.graphql.schema.bulkAction.${model.modelId}.${bulkAction.name}`;
|
|
49
|
+
plugins.push(plugin);
|
|
57
50
|
});
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
context.plugins.register([...plugins]);
|
|
51
|
+
context.plugins.register([
|
|
52
|
+
...plugins
|
|
53
|
+
]);
|
|
62
54
|
};
|
|
55
|
+
export { createBulkActionGraphQL };
|
|
63
56
|
|
|
64
57
|
//# sourceMappingURL=createBulkActionGraphQL.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"graphql/createBulkActionGraphQL.js","sources":["../../src/graphql/createBulkActionGraphQL.ts"],"sourcesContent":["import type { HcmsBulkActionsContext } from \"~/types.js\";\nimport { CmsGraphQLSchemaPlugin, isHeadlessCmsReady } from \"@webiny/api-headless-cms\";\nimport { Response } from \"@webiny/handler-graphql\";\nimport { CMS_MODEL_SINGLETON_TAG } from \"@webiny/api-headless-cms/constants.js\";\nimport { EntriesBulkAction } from \"~/features/EntriesBulkAction/abstractions.js\";\nimport { BulkActionName } from \"~/domain/BulkActionName.js\";\n\nexport const createBulkActionGraphQL = async (\n context: HcmsBulkActionsContext,\n bulkAction: EntriesBulkAction.Interface\n) => {\n const tenant = context.tenancy.getCurrentTenant();\n\n // TODO: once we have GraphSchema plugin via an abstraction, we'll be able to remove this.\n if (!(await isHeadlessCmsReady(context))) {\n return;\n }\n\n const models = await context.security.withoutAuthorization(async () => {\n const allModels = await context.cms.listModels();\n return allModels.filter(model => {\n if (model.isPrivate) {\n return false;\n }\n const tags = Array.isArray(model.tags) ? model.tags : [];\n if (tags.includes(CMS_MODEL_SINGLETON_TAG)) {\n return false;\n }\n if (bulkAction.modelIds?.length) {\n return bulkAction.modelIds.includes(model.modelId);\n }\n return true;\n });\n });\n\n const plugins: CmsGraphQLSchemaPlugin<HcmsBulkActionsContext>[] = [];\n\n models.forEach(model => {\n const plugin = new CmsGraphQLSchemaPlugin<HcmsBulkActionsContext>({\n typeDefs: /* GraphQL */ `\n extend enum BulkAction${model.singularApiName}Name {\n ${BulkActionName.from(bulkAction.name)}\n }\n `,\n resolvers: {\n Mutation: {\n [`bulkAction${model.singularApiName}`]: async (_, args, context) => {\n const identity = context.security.getIdentity();\n\n const response = await context.tasks.trigger({\n definition: `hcmsBulkList${args.action}Entries`,\n input: {\n modelId: model.modelId,\n where: args.where,\n search: args.search,\n data: args.data,\n identity\n }\n });\n\n return new Response({\n id: response.value.id\n });\n }\n }\n },\n isApplicable: context => context.tenancy.getCurrentTenant().id === tenant.id\n });\n\n plugin.name = `headless-cms.graphql.schema.bulkAction.${model.modelId}.${bulkAction.name}`;\n plugins.push(plugin);\n });\n\n context.plugins.register([...plugins]);\n};\n"],"names":["createBulkActionGraphQL","context","bulkAction","tenant","isHeadlessCmsReady","models","allModels","model","tags","Array","CMS_MODEL_SINGLETON_TAG","plugins","plugin","CmsGraphQLSchemaPlugin","BulkActionName","_","args","identity","response","Response"],"mappings":";;;;AAOO,MAAMA,0BAA0B,OACnCC,SACAC;IAEA,MAAMC,SAASF,QAAQ,OAAO,CAAC,gBAAgB;IAG/C,IAAI,CAAE,MAAMG,mBAAmBH,UAC3B;IAGJ,MAAMI,SAAS,MAAMJ,QAAQ,QAAQ,CAAC,oBAAoB,CAAC;QACvD,MAAMK,YAAY,MAAML,QAAQ,GAAG,CAAC,UAAU;QAC9C,OAAOK,UAAU,MAAM,CAACC,CAAAA;YACpB,IAAIA,MAAM,SAAS,EACf,OAAO;YAEX,MAAMC,OAAOC,MAAM,OAAO,CAACF,MAAM,IAAI,IAAIA,MAAM,IAAI,GAAG,EAAE;YACxD,IAAIC,KAAK,QAAQ,CAACE,0BACd,OAAO;YAEX,IAAIR,WAAW,QAAQ,EAAE,QACrB,OAAOA,WAAW,QAAQ,CAAC,QAAQ,CAACK,MAAM,OAAO;YAErD,OAAO;QACX;IACJ;IAEA,MAAMI,UAA4D,EAAE;IAEpEN,OAAO,OAAO,CAACE,CAAAA;QACX,MAAMK,SAAS,IAAIC,uBAA+C;YAC9D,UAAwB,CAAC;2CACM,EAAEN,MAAM,eAAe,CAAC;wBAC3C,EAAEO,eAAe,IAAI,CAACZ,WAAW,IAAI,EAAE;;gBAE/C,CAAC;YACL,WAAW;gBACP,UAAU;oBACN,CAAC,CAAC,UAAU,EAAEK,MAAM,eAAe,EAAE,CAAC,EAAE,OAAOQ,GAAGC,MAAMf;wBACpD,MAAMgB,WAAWhB,QAAQ,QAAQ,CAAC,WAAW;wBAE7C,MAAMiB,WAAW,MAAMjB,QAAQ,KAAK,CAAC,OAAO,CAAC;4BACzC,YAAY,CAAC,YAAY,EAAEe,KAAK,MAAM,CAAC,OAAO,CAAC;4BAC/C,OAAO;gCACH,SAAST,MAAM,OAAO;gCACtB,OAAOS,KAAK,KAAK;gCACjB,QAAQA,KAAK,MAAM;gCACnB,MAAMA,KAAK,IAAI;gCACfC;4BACJ;wBACJ;wBAEA,OAAO,IAAIE,SAAS;4BAChB,IAAID,SAAS,KAAK,CAAC,EAAE;wBACzB;oBACJ;gBACJ;YACJ;YACA,cAAcjB,CAAAA,UAAWA,QAAQ,OAAO,CAAC,gBAAgB,GAAG,EAAE,KAAKE,OAAO,EAAE;QAChF;QAEAS,OAAO,IAAI,GAAG,CAAC,uCAAuC,EAAEL,MAAM,OAAO,CAAC,CAAC,EAAEL,WAAW,IAAI,EAAE;QAC1FS,QAAQ,IAAI,CAACC;IACjB;IAEAX,QAAQ,OAAO,CAAC,QAAQ,CAAC;WAAIU;KAAQ;AACzC"}
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
import { CmsGraphQLSchemaPlugin, isHeadlessCmsReady } from "@webiny/api-headless-cms";
|
|
2
2
|
import { CMS_MODEL_SINGLETON_TAG } from "@webiny/api-headless-cms/constants.js";
|
|
3
3
|
import { BeforeHandlerPlugin } from "@webiny/handler/plugins/BeforeHandlerPlugin.js";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
const defaultPlugin = new CmsGraphQLSchemaPlugin({
|
|
11
|
-
typeDefs: /* GraphQL */`
|
|
4
|
+
const createDefaultGraphQL = ()=>new BeforeHandlerPlugin(async (context)=>{
|
|
5
|
+
const tenant = context.tenancy.getCurrentTenant();
|
|
6
|
+
if (!await isHeadlessCmsReady(context)) return;
|
|
7
|
+
const defaultPlugin = new CmsGraphQLSchemaPlugin({
|
|
8
|
+
typeDefs: `
|
|
12
9
|
type BulkActionResponseData {
|
|
13
10
|
id: String
|
|
14
11
|
}
|
|
@@ -18,25 +15,21 @@ export const createDefaultGraphQL = () => {
|
|
|
18
15
|
error: CmsError
|
|
19
16
|
}
|
|
20
17
|
`
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
const modelPlugins = [];
|
|
37
|
-
models.forEach(model => {
|
|
38
|
-
const plugin = new CmsGraphQLSchemaPlugin({
|
|
39
|
-
typeDefs: /* GraphQL */`
|
|
18
|
+
});
|
|
19
|
+
defaultPlugin.name = "headless-cms.graphql.schema.bulkAction.default";
|
|
20
|
+
const models = await context.security.withoutAuthorization(async ()=>{
|
|
21
|
+
const allModels = await context.cms.listModels();
|
|
22
|
+
return allModels.filter((model)=>{
|
|
23
|
+
if (model.isPrivate) return false;
|
|
24
|
+
const tags = Array.isArray(model.tags) ? model.tags : [];
|
|
25
|
+
if (tags.includes(CMS_MODEL_SINGLETON_TAG)) return false;
|
|
26
|
+
return true;
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
const modelPlugins = [];
|
|
30
|
+
models.forEach((model)=>{
|
|
31
|
+
const plugin = new CmsGraphQLSchemaPlugin({
|
|
32
|
+
typeDefs: `
|
|
40
33
|
enum BulkAction${model.singularApiName}Name {
|
|
41
34
|
_empty
|
|
42
35
|
}
|
|
@@ -50,13 +43,16 @@ export const createDefaultGraphQL = () => {
|
|
|
50
43
|
): BulkActionResponse
|
|
51
44
|
}
|
|
52
45
|
`,
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
46
|
+
isApplicable: (context)=>context.tenancy.getCurrentTenant().id === tenant.id
|
|
47
|
+
});
|
|
48
|
+
plugin.name = `headless-cms.graphql.schema.bulkAction.default.${model.modelId}`;
|
|
49
|
+
modelPlugins.push(plugin);
|
|
50
|
+
});
|
|
51
|
+
context.plugins.register([
|
|
52
|
+
defaultPlugin,
|
|
53
|
+
...modelPlugins
|
|
54
|
+
]);
|
|
57
55
|
});
|
|
58
|
-
|
|
59
|
-
});
|
|
60
|
-
};
|
|
56
|
+
export { createDefaultGraphQL };
|
|
61
57
|
|
|
62
58
|
//# sourceMappingURL=createDefaultGraphQL.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"graphql/createDefaultGraphQL.js","sources":["../../src/graphql/createDefaultGraphQL.ts"],"sourcesContent":["import type { HcmsBulkActionsContext } from \"~/types.js\";\nimport { CmsGraphQLSchemaPlugin, isHeadlessCmsReady } from \"@webiny/api-headless-cms\";\nimport { CMS_MODEL_SINGLETON_TAG } from \"@webiny/api-headless-cms/constants.js\";\nimport { BeforeHandlerPlugin } from \"@webiny/handler/plugins/BeforeHandlerPlugin.js\";\n\nexport const createDefaultGraphQL = () => {\n return new BeforeHandlerPlugin<HcmsBulkActionsContext>(async context => {\n const tenant = context.tenancy.getCurrentTenant();\n\n if (!(await isHeadlessCmsReady(context))) {\n return;\n }\n\n const defaultPlugin = new CmsGraphQLSchemaPlugin({\n typeDefs: /* GraphQL */ `\n type BulkActionResponseData {\n id: String\n }\n\n type BulkActionResponse {\n data: BulkActionResponseData\n error: CmsError\n }\n `\n });\n defaultPlugin.name = `headless-cms.graphql.schema.bulkAction.default`;\n\n const models = await context.security.withoutAuthorization(async () => {\n const allModels = await context.cms.listModels();\n return allModels.filter(model => {\n if (model.isPrivate) {\n return false;\n }\n const tags = Array.isArray(model.tags) ? model.tags : [];\n if (tags.includes(CMS_MODEL_SINGLETON_TAG)) {\n return false;\n }\n return true;\n });\n });\n\n const modelPlugins: CmsGraphQLSchemaPlugin<HcmsBulkActionsContext>[] = [];\n\n models.forEach(model => {\n const plugin = new CmsGraphQLSchemaPlugin({\n typeDefs: /* GraphQL */ `\n enum BulkAction${model.singularApiName}Name {\n _empty\n }\n \n extend type Mutation {\n bulkAction${model.singularApiName}(\n action: BulkAction${model.singularApiName}Name!\n where: ${model.singularApiName}ListWhereInput\n search: String\n data: JSON\n ): BulkActionResponse\n }\n `,\n isApplicable: context => context.tenancy.getCurrentTenant().id === tenant.id\n });\n\n plugin.name = `headless-cms.graphql.schema.bulkAction.default.${model.modelId}`;\n modelPlugins.push(plugin);\n });\n\n context.plugins.register([defaultPlugin, ...modelPlugins]);\n });\n};\n"],"names":["createDefaultGraphQL","BeforeHandlerPlugin","context","tenant","isHeadlessCmsReady","defaultPlugin","CmsGraphQLSchemaPlugin","models","allModels","model","tags","Array","CMS_MODEL_SINGLETON_TAG","modelPlugins","plugin"],"mappings":";;;AAKO,MAAMA,uBAAuB,IACzB,IAAIC,oBAA4C,OAAMC;QACzD,MAAMC,SAASD,QAAQ,OAAO,CAAC,gBAAgB;QAE/C,IAAI,CAAE,MAAME,mBAAmBF,UAC3B;QAGJ,MAAMG,gBAAgB,IAAIC,uBAAuB;YAC7C,UAAwB,CAAC;;;;;;;;;YASzB,CAAC;QACL;QACAD,cAAc,IAAI,GAAG;QAErB,MAAME,SAAS,MAAML,QAAQ,QAAQ,CAAC,oBAAoB,CAAC;YACvD,MAAMM,YAAY,MAAMN,QAAQ,GAAG,CAAC,UAAU;YAC9C,OAAOM,UAAU,MAAM,CAACC,CAAAA;gBACpB,IAAIA,MAAM,SAAS,EACf,OAAO;gBAEX,MAAMC,OAAOC,MAAM,OAAO,CAACF,MAAM,IAAI,IAAIA,MAAM,IAAI,GAAG,EAAE;gBACxD,IAAIC,KAAK,QAAQ,CAACE,0BACd,OAAO;gBAEX,OAAO;YACX;QACJ;QAEA,MAAMC,eAAiE,EAAE;QAEzEN,OAAO,OAAO,CAACE,CAAAA;YACX,MAAMK,SAAS,IAAIR,uBAAuB;gBACtC,UAAwB,CAAC;mCACN,EAAEG,MAAM,eAAe,CAAC;;;;;kCAKzB,EAAEA,MAAM,eAAe,CAAC;8CACZ,EAAEA,MAAM,eAAe,CAAC;mCACnC,EAAEA,MAAM,eAAe,CAAC;;;;;gBAK3C,CAAC;gBACD,cAAcP,CAAAA,UAAWA,QAAQ,OAAO,CAAC,gBAAgB,GAAG,EAAE,KAAKC,OAAO,EAAE;YAChF;YAEAW,OAAO,IAAI,GAAG,CAAC,+CAA+C,EAAEL,MAAM,OAAO,EAAE;YAC/EI,aAAa,IAAI,CAACC;QACtB;QAEAZ,QAAQ,OAAO,CAAC,QAAQ,CAAC;YAACG;eAAkBQ;SAAa;IAC7D"}
|
|
@@ -1,46 +1,28 @@
|
|
|
1
1
|
import { createEventBridgeEventHandler } from "@webiny/handler-aws";
|
|
2
2
|
const DETAIL_TYPE = "WebinyEmptyTrashBin";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
*/
|
|
26
|
-
await context.tenancy.withRootTenant(async () => {
|
|
27
|
-
await context.tasks.trigger({
|
|
28
|
-
definition: "hcmsEntriesEmptyTrashBins"
|
|
29
|
-
});
|
|
30
|
-
});
|
|
31
|
-
return;
|
|
32
|
-
} catch (ex) {
|
|
33
|
-
console.error("[EVENT_BRIDGE_HANDLER_EMPTY_TRASH_BIN] => ", JSON.stringify({
|
|
34
|
-
message: ex.message,
|
|
35
|
-
code: ex.code,
|
|
36
|
-
data: ex.data
|
|
37
|
-
}));
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
// Assign a human-readable name for easier debugging.
|
|
42
|
-
handler.name = handler.type + ".cmsBulkActions";
|
|
43
|
-
return handler;
|
|
3
|
+
const createEventBridgeHandler = ()=>{
|
|
4
|
+
const handler = createEventBridgeEventHandler(async ({ context: ctx, payload, next })=>{
|
|
5
|
+
try {
|
|
6
|
+
if (payload["detail-type"] !== DETAIL_TYPE) return next();
|
|
7
|
+
const context = ctx;
|
|
8
|
+
if (!context.tasks || !context.tenancy) return void console.error("Missing tasks or tenancy definition on context.");
|
|
9
|
+
await context.tenancy.withRootTenant(async ()=>{
|
|
10
|
+
await context.tasks.trigger({
|
|
11
|
+
definition: "hcmsEntriesEmptyTrashBins"
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
return;
|
|
15
|
+
} catch (ex) {
|
|
16
|
+
console.error("[EVENT_BRIDGE_HANDLER_EMPTY_TRASH_BIN] => ", JSON.stringify({
|
|
17
|
+
message: ex.message,
|
|
18
|
+
code: ex.code,
|
|
19
|
+
data: ex.data
|
|
20
|
+
}));
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
handler.name = handler.type + ".cmsBulkActions";
|
|
24
|
+
return handler;
|
|
44
25
|
};
|
|
26
|
+
export { createEventBridgeHandler };
|
|
45
27
|
|
|
46
28
|
//# sourceMappingURL=eventBridgeEventHandler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"handlers/eventBridgeEventHandler.js","sources":["../../src/handlers/eventBridgeEventHandler.ts"],"sourcesContent":["import { createEventBridgeEventHandler } from \"@webiny/handler-aws\";\nimport type { HcmsBulkActionsContext } from \"~/types.js\";\n\nconst DETAIL_TYPE = \"WebinyEmptyTrashBin\";\n\nexport const createEventBridgeHandler = () => {\n const handler = createEventBridgeEventHandler<typeof DETAIL_TYPE, Record<string, any>>(\n async ({ context: ctx, payload, next }) => {\n try {\n /**\n * If we receive an event that is not \"WebinyEmptyTrashBin\", we should exit.\n */\n if (payload[\"detail-type\"] !== DETAIL_TYPE) {\n return next();\n }\n\n const context = ctx as unknown as HcmsBulkActionsContext;\n\n if (!context.tasks || !context.tenancy) {\n console.error(\"Missing tasks or tenancy definition on context.\");\n return;\n }\n\n /**\n * Since the event is at the infrastructure level, it has no knowledge about tenancy.\n * We trigger the `hcmsEntriesEmptyTrashBins` using root tenant.\n */\n await context.tenancy.withRootTenant(async () => {\n await context.tasks.trigger({\n definition: \"hcmsEntriesEmptyTrashBins\"\n });\n });\n\n return;\n } catch (ex) {\n console.error(\n \"[EVENT_BRIDGE_HANDLER_EMPTY_TRASH_BIN] => \",\n JSON.stringify({\n message: ex.message,\n code: ex.code,\n data: ex.data\n })\n );\n }\n }\n );\n\n // Assign a human-readable name for easier debugging.\n handler.name = handler.type + \".cmsBulkActions\";\n\n return handler;\n};\n"],"names":["DETAIL_TYPE","createEventBridgeHandler","handler","createEventBridgeEventHandler","ctx","payload","next","context","console","ex","JSON"],"mappings":";AAGA,MAAMA,cAAc;AAEb,MAAMC,2BAA2B;IACpC,MAAMC,UAAUC,8BACZ,OAAO,EAAE,SAASC,GAAG,EAAEC,OAAO,EAAEC,IAAI,EAAE;QAClC,IAAI;YAIA,IAAID,OAAO,CAAC,cAAc,KAAKL,aAC3B,OAAOM;YAGX,MAAMC,UAAUH;YAEhB,IAAI,CAACG,QAAQ,KAAK,IAAI,CAACA,QAAQ,OAAO,EAAE,YACpCC,QAAQ,KAAK,CAAC;YAQlB,MAAMD,QAAQ,OAAO,CAAC,cAAc,CAAC;gBACjC,MAAMA,QAAQ,KAAK,CAAC,OAAO,CAAC;oBACxB,YAAY;gBAChB;YACJ;YAEA;QACJ,EAAE,OAAOE,IAAI;YACTD,QAAQ,KAAK,CACT,8CACAE,KAAK,SAAS,CAAC;gBACX,SAASD,GAAG,OAAO;gBACnB,MAAMA,GAAG,IAAI;gBACb,MAAMA,GAAG,IAAI;YACjB;QAER;IACJ;IAIJP,QAAQ,IAAI,GAAGA,QAAQ,IAAI,GAAG;IAE9B,OAAOA;AACX"}
|
package/handlers/index.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { createEventBridgeHandler } from "./eventBridgeEventHandler.js";
|
|
2
2
|
import { setupEventsTenant } from "./setupEventsTenant.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
const createHandlers = ()=>[
|
|
4
|
+
setupEventsTenant(),
|
|
5
|
+
createEventBridgeHandler()
|
|
6
|
+
];
|
|
7
|
+
export { createHandlers };
|
|
6
8
|
|
|
7
9
|
//# sourceMappingURL=index.js.map
|
package/handlers/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"handlers/index.js","sources":["../../src/handlers/index.ts"],"sourcesContent":["import { createEventBridgeHandler } from \"./eventBridgeEventHandler.js\";\nimport { setupEventsTenant } from \"./setupEventsTenant.js\";\n\nexport const createHandlers = () => {\n return [setupEventsTenant(), createEventBridgeHandler()];\n};\n"],"names":["createHandlers","setupEventsTenant","createEventBridgeHandler"],"mappings":";;AAGO,MAAMA,iBAAiB,IACnB;QAACC;QAAqBC;KAA2B"}
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import { createHandlerOnRequest } from "@webiny/handler";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
});
|
|
10
|
-
};
|
|
2
|
+
const setupEventsTenant = ()=>createHandlerOnRequest(async (request)=>{
|
|
3
|
+
request.headers = {
|
|
4
|
+
...request.headers,
|
|
5
|
+
"x-tenant": request.headers["x-tenant"] || "root"
|
|
6
|
+
};
|
|
7
|
+
});
|
|
8
|
+
export { setupEventsTenant };
|
|
11
9
|
|
|
12
10
|
//# sourceMappingURL=setupEventsTenant.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"handlers/setupEventsTenant.js","sources":["../../src/handlers/setupEventsTenant.ts"],"sourcesContent":["import { createHandlerOnRequest } from \"@webiny/handler\";\n\nexport const setupEventsTenant = () => {\n return createHandlerOnRequest(async request => {\n request.headers = {\n ...request.headers,\n \"x-tenant\": request.headers[\"x-tenant\"] || \"root\"\n };\n\n return;\n });\n};\n"],"names":["setupEventsTenant","createHandlerOnRequest","request"],"mappings":";AAEO,MAAMA,oBAAoB,IACtBC,uBAAuB,OAAMC;QAChCA,QAAQ,OAAO,GAAG;YACd,GAAGA,QAAQ,OAAO;YAClB,YAAYA,QAAQ,OAAO,CAAC,WAAW,IAAI;QAC/C;IAGJ"}
|
package/index.js
CHANGED
|
@@ -12,39 +12,35 @@ import { MoveToTrashBulkActionFeature } from "./features/MoveToTrashBulkAction/f
|
|
|
12
12
|
import { PublishEntriesBulkActionFeature } from "./features/PublishEntriesBulkAction/feature.js";
|
|
13
13
|
import { UnpublishEntriesBulkActionFeature } from "./features/UnpublishEntriesBulkAction/feature.js";
|
|
14
14
|
import { RestoreEntriesBulkActionFeature } from "./features/RestoreEntriesBulkAction/feature.js";
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
const feature = createBulkActionTasks(bulkAction, bulkActionsConfig);
|
|
43
|
-
feature.register(context.container);
|
|
44
|
-
// Register GraphQL schema
|
|
45
|
-
await createBulkActionGraphQL(context, bulkAction);
|
|
46
|
-
}
|
|
47
|
-
})];
|
|
15
|
+
const createHcmsBulkActions = (config)=>{
|
|
16
|
+
const batchSize = config?.batchSize ?? 100;
|
|
17
|
+
return [
|
|
18
|
+
createHandlers(),
|
|
19
|
+
createDefaultGraphQL(),
|
|
20
|
+
createContextPlugin((context)=>{
|
|
21
|
+
context.container.registerInstance(EntriesBulkActionConfig, {
|
|
22
|
+
batchSize
|
|
23
|
+
});
|
|
24
|
+
DeleteEntriesBulkActionFeature.register(context.container);
|
|
25
|
+
MoveToFolderBulkActionFeature.register(context.container);
|
|
26
|
+
MoveToTrashBulkActionFeature.register(context.container);
|
|
27
|
+
PublishEntriesBulkActionFeature.register(context.container);
|
|
28
|
+
UnpublishEntriesBulkActionFeature.register(context.container);
|
|
29
|
+
RestoreEntriesBulkActionFeature.register(context.container);
|
|
30
|
+
}),
|
|
31
|
+
createBeforeHandlerPlugin(async (context)=>{
|
|
32
|
+
context.container.registerInstance(BulkActionContext, context);
|
|
33
|
+
const bulkActions = context.container.resolveAll(EntriesBulkAction);
|
|
34
|
+
const bulkActionsConfig = context.container.resolve(EntriesBulkActionConfig);
|
|
35
|
+
for (const bulkAction of bulkActions){
|
|
36
|
+
const feature = createBulkActionTasks(bulkAction, bulkActionsConfig);
|
|
37
|
+
feature.register(context.container);
|
|
38
|
+
await createBulkActionGraphQL(context, bulkAction);
|
|
39
|
+
}
|
|
40
|
+
})
|
|
41
|
+
];
|
|
48
42
|
};
|
|
43
|
+
export { createEmptyTrashBinsTask } from "./tasks/index.js";
|
|
44
|
+
export { createHandlers, createHcmsBulkActions };
|
|
49
45
|
|
|
50
46
|
//# sourceMappingURL=index.js.map
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { createHandlers } from \"~/handlers/index.js\";\nimport { createBeforeHandlerPlugin } from \"@webiny/handler/plugins/BeforeHandlerPlugin.js\";\nimport {\n EntriesBulkAction,\n EntriesBulkActionConfig\n} from \"~/features/EntriesBulkAction/abstractions.js\";\nimport { BulkActionContext } from \"~/features/BulkActionContext/index.js\";\nimport { createBulkActionTasks } from \"~/features/EntriesBulkAction/createBulkActionTasks.js\";\nimport { createDefaultGraphQL } from \"~/graphql/createDefaultGraphQL.js\";\nimport { createBulkActionGraphQL } from \"~/graphql/createBulkActionGraphQL.js\";\nimport { createContextPlugin } from \"@webiny/api\";\nimport { DeleteEntriesBulkActionFeature } from \"~/features/DeleteEntriesBulkAction/feature.js\";\nimport { MoveToFolderBulkActionFeature } from \"~/features/MoveToFolderBulkAction/feature.js\";\nimport { MoveToTrashBulkActionFeature } from \"~/features/MoveToTrashBulkAction/feature.js\";\nimport { PublishEntriesBulkActionFeature } from \"~/features/PublishEntriesBulkAction/feature.js\";\nimport { UnpublishEntriesBulkActionFeature } from \"~/features/UnpublishEntriesBulkAction/feature.js\";\nimport { RestoreEntriesBulkActionFeature } from \"~/features/RestoreEntriesBulkAction/feature.js\";\nimport type { HcmsBulkActionsContext } from \"~/types.js\";\n\nexport type * from \"./abstractions/index.js\";\nexport { createHandlers } from \"./handlers/index.js\";\nexport { createEmptyTrashBinsTask } from \"./tasks/index.js\";\n\ninterface BulkActionsConfig {\n batchSize?: number;\n}\n\nexport const createHcmsBulkActions = (config?: BulkActionsConfig) => {\n const batchSize = config?.batchSize ?? 100;\n\n return [\n createHandlers(),\n createDefaultGraphQL(),\n // Register bulk action features\n createContextPlugin(context => {\n // Bulk action config is shared among all bulk actions.\n context.container.registerInstance(EntriesBulkActionConfig, { batchSize });\n\n DeleteEntriesBulkActionFeature.register(context.container);\n MoveToFolderBulkActionFeature.register(context.container);\n MoveToTrashBulkActionFeature.register(context.container);\n PublishEntriesBulkActionFeature.register(context.container);\n UnpublishEntriesBulkActionFeature.register(context.container);\n RestoreEntriesBulkActionFeature.register(context.container);\n }),\n // Set up bulk actions after the context is bootstrapped, but before actual handler processing\n createBeforeHandlerPlugin<HcmsBulkActionsContext>(async context => {\n context.container.registerInstance(BulkActionContext, context);\n\n const bulkActions = context.container.resolveAll(EntriesBulkAction);\n const bulkActionsConfig = context.container.resolve(EntriesBulkActionConfig);\n\n // 2. For each EntriesBulkAction, create and register tasks + GraphQL schema\n for (const bulkAction of bulkActions) {\n // Register tasks implementation\n const feature = createBulkActionTasks(bulkAction, bulkActionsConfig);\n feature.register(context.container);\n // Register GraphQL schema\n await createBulkActionGraphQL(context, bulkAction);\n }\n })\n ];\n};\n"],"names":["createHcmsBulkActions","config","batchSize","createHandlers","createDefaultGraphQL","createContextPlugin","context","EntriesBulkActionConfig","DeleteEntriesBulkActionFeature","MoveToFolderBulkActionFeature","MoveToTrashBulkActionFeature","PublishEntriesBulkActionFeature","UnpublishEntriesBulkActionFeature","RestoreEntriesBulkActionFeature","createBeforeHandlerPlugin","BulkActionContext","bulkActions","EntriesBulkAction","bulkActionsConfig","bulkAction","feature","createBulkActionTasks","createBulkActionGraphQL"],"mappings":";;;;;;;;;;;;;;AA2BO,MAAMA,wBAAwB,CAACC;IAClC,MAAMC,YAAYD,QAAQ,aAAa;IAEvC,OAAO;QACHE;QACAC;QAEAC,oBAAoBC,CAAAA;YAEhBA,QAAQ,SAAS,CAAC,gBAAgB,CAACC,yBAAyB;gBAAEL;YAAU;YAExEM,+BAA+B,QAAQ,CAACF,QAAQ,SAAS;YACzDG,8BAA8B,QAAQ,CAACH,QAAQ,SAAS;YACxDI,6BAA6B,QAAQ,CAACJ,QAAQ,SAAS;YACvDK,gCAAgC,QAAQ,CAACL,QAAQ,SAAS;YAC1DM,kCAAkC,QAAQ,CAACN,QAAQ,SAAS;YAC5DO,gCAAgC,QAAQ,CAACP,QAAQ,SAAS;QAC9D;QAEAQ,0BAAkD,OAAMR;YACpDA,QAAQ,SAAS,CAAC,gBAAgB,CAACS,mBAAmBT;YAEtD,MAAMU,cAAcV,QAAQ,SAAS,CAAC,UAAU,CAACW;YACjD,MAAMC,oBAAoBZ,QAAQ,SAAS,CAAC,OAAO,CAACC;YAGpD,KAAK,MAAMY,cAAcH,YAAa;gBAElC,MAAMI,UAAUC,sBAAsBF,YAAYD;gBAClDE,QAAQ,QAAQ,CAACd,QAAQ,SAAS;gBAElC,MAAMgB,wBAAwBhB,SAASa;YAC3C;QACJ;KACH;AACL"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/api-headless-cms-bulk-actions",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.4.0-beta.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./index.js",
|
|
@@ -17,28 +17,28 @@
|
|
|
17
17
|
},
|
|
18
18
|
"license": "MIT",
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@webiny/api-headless-cms": "6.
|
|
21
|
-
"@webiny/feature": "6.
|
|
22
|
-
"@webiny/handler": "6.
|
|
23
|
-
"@webiny/handler-aws": "6.
|
|
24
|
-
"@webiny/tasks": "6.
|
|
25
|
-
"@webiny/utils": "6.
|
|
20
|
+
"@webiny/api-headless-cms": "6.4.0-beta.0",
|
|
21
|
+
"@webiny/feature": "6.4.0-beta.0",
|
|
22
|
+
"@webiny/handler": "6.4.0-beta.0",
|
|
23
|
+
"@webiny/handler-aws": "6.4.0-beta.0",
|
|
24
|
+
"@webiny/tasks": "6.4.0-beta.0",
|
|
25
|
+
"@webiny/utils": "6.4.0-beta.0"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
|
-
"@webiny/api": "6.
|
|
29
|
-
"@webiny/api-core": "6.
|
|
30
|
-
"@webiny/build-tools": "6.
|
|
31
|
-
"@webiny/handler-graphql": "6.
|
|
32
|
-
"@webiny/plugins": "6.
|
|
33
|
-
"@webiny/project-utils": "6.
|
|
34
|
-
"@webiny/wcp": "6.
|
|
35
|
-
"graphql": "16.
|
|
28
|
+
"@webiny/api": "6.4.0-beta.0",
|
|
29
|
+
"@webiny/api-core": "6.4.0-beta.0",
|
|
30
|
+
"@webiny/build-tools": "6.4.0-beta.0",
|
|
31
|
+
"@webiny/handler-graphql": "6.4.0-beta.0",
|
|
32
|
+
"@webiny/plugins": "6.4.0-beta.0",
|
|
33
|
+
"@webiny/project-utils": "6.4.0-beta.0",
|
|
34
|
+
"@webiny/wcp": "6.4.0-beta.0",
|
|
35
|
+
"graphql": "16.14.0",
|
|
36
36
|
"typescript": "6.0.3",
|
|
37
|
-
"vitest": "4.1.
|
|
37
|
+
"vitest": "4.1.6"
|
|
38
38
|
},
|
|
39
39
|
"publishConfig": {
|
|
40
40
|
"access": "public",
|
|
41
41
|
"directory": "dist"
|
|
42
42
|
},
|
|
43
|
-
"gitHead": "
|
|
43
|
+
"gitHead": "a545d7529828af07d08d49c3da1bcb967483b9ce"
|
|
44
44
|
}
|