@webiny/api-workflows 6.4.11 → 6.6.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/WorkflowsFeature.d.ts +5 -0
  2. package/WorkflowsFeature.js +70 -0
  3. package/WorkflowsFeature.js.map +1 -0
  4. package/WorkflowsSchemaFactory.d.ts +8 -0
  5. package/WorkflowsSchemaFactory.js +19 -0
  6. package/WorkflowsSchemaFactory.js.map +1 -0
  7. package/domain/workflow/abstractions.d.ts +13 -3
  8. package/domain/workflow/abstractions.js +2 -2
  9. package/domain/workflow/abstractions.js.map +1 -1
  10. package/domain/workflowState/WorkflowState.d.ts +1 -0
  11. package/domain/workflowState/WorkflowState.js +3 -0
  12. package/domain/workflowState/WorkflowState.js.map +1 -1
  13. package/domain/workflowState/WorkflowStateMapper.js +4 -2
  14. package/domain/workflowState/WorkflowStateMapper.js.map +1 -1
  15. package/domain/workflowState/abstractions.d.ts +16 -3
  16. package/domain/workflowState/abstractions.js +2 -2
  17. package/domain/workflowState/abstractions.js.map +1 -1
  18. package/domain/workflowState/stateModel.js +1 -0
  19. package/domain/workflowState/stateModel.js.map +1 -1
  20. package/features/WorkflowModelProviders.d.ts +34 -0
  21. package/features/WorkflowModelProviders.js +40 -0
  22. package/features/WorkflowModelProviders.js.map +1 -0
  23. package/features/workflow/CreateWorkflow/CreateWorkflowRepository.d.ts +3 -3
  24. package/features/workflow/CreateWorkflow/CreateWorkflowRepository.js +6 -5
  25. package/features/workflow/CreateWorkflow/CreateWorkflowRepository.js.map +1 -1
  26. package/features/workflow/DeleteWorkflow/DeleteWorkflowRepository.d.ts +3 -3
  27. package/features/workflow/DeleteWorkflow/DeleteWorkflowRepository.js +6 -5
  28. package/features/workflow/DeleteWorkflow/DeleteWorkflowRepository.js.map +1 -1
  29. package/features/workflow/GetWorkflow/GetWorkflowRepository.d.ts +3 -3
  30. package/features/workflow/GetWorkflow/GetWorkflowRepository.js +6 -5
  31. package/features/workflow/GetWorkflow/GetWorkflowRepository.js.map +1 -1
  32. package/features/workflow/ListWorkflows/ListWorkflowsRepository.d.ts +3 -3
  33. package/features/workflow/ListWorkflows/ListWorkflowsRepository.js +7 -6
  34. package/features/workflow/ListWorkflows/ListWorkflowsRepository.js.map +1 -1
  35. package/features/workflow/UpdateWorkflow/UpdateWorkflowRepository.d.ts +3 -3
  36. package/features/workflow/UpdateWorkflow/UpdateWorkflowRepository.js +6 -5
  37. package/features/workflow/UpdateWorkflow/UpdateWorkflowRepository.js.map +1 -1
  38. package/features/workflowState/CreateWorkflowState/CreateWorkflowStateRepository.d.ts +3 -3
  39. package/features/workflowState/CreateWorkflowState/CreateWorkflowStateRepository.js +6 -5
  40. package/features/workflowState/CreateWorkflowState/CreateWorkflowStateRepository.js.map +1 -1
  41. package/features/workflowState/CreateWorkflowState/CreateWorkflowStateUseCase.d.ts +3 -1
  42. package/features/workflowState/CreateWorkflowState/CreateWorkflowStateUseCase.js +10 -3
  43. package/features/workflowState/CreateWorkflowState/CreateWorkflowStateUseCase.js.map +1 -1
  44. package/features/workflowState/CreateWorkflowState/DefaultWorkflowStateContextProvider.d.ts +9 -0
  45. package/features/workflowState/CreateWorkflowState/DefaultWorkflowStateContextProvider.js +13 -0
  46. package/features/workflowState/CreateWorkflowState/DefaultWorkflowStateContextProvider.js.map +1 -0
  47. package/features/workflowState/CreateWorkflowState/WorkflowStateContextProvider.d.ts +13 -0
  48. package/features/workflowState/CreateWorkflowState/WorkflowStateContextProvider.js +5 -0
  49. package/features/workflowState/CreateWorkflowState/WorkflowStateContextProvider.js.map +1 -0
  50. package/features/workflowState/CreateWorkflowState/feature.js +2 -0
  51. package/features/workflowState/CreateWorkflowState/feature.js.map +1 -1
  52. package/features/workflowState/CreateWorkflowState/index.d.ts +1 -0
  53. package/features/workflowState/CreateWorkflowState/index.js +1 -0
  54. package/features/workflowState/DeleteTargetWorkflowState/DeleteTargetWorkflowStateUseCase.js +0 -1
  55. package/features/workflowState/DeleteTargetWorkflowState/DeleteTargetWorkflowStateUseCase.js.map +1 -1
  56. package/features/workflowState/DeleteWorkflowState/DeleteWorkflowStateRepository.d.ts +3 -3
  57. package/features/workflowState/DeleteWorkflowState/DeleteWorkflowStateRepository.js +6 -5
  58. package/features/workflowState/DeleteWorkflowState/DeleteWorkflowStateRepository.js.map +1 -1
  59. package/features/workflowState/GetTargetWorkflowState/GetTargetWorkflowStateRepository.d.ts +3 -3
  60. package/features/workflowState/GetTargetWorkflowState/GetTargetWorkflowStateRepository.js +6 -5
  61. package/features/workflowState/GetTargetWorkflowState/GetTargetWorkflowStateRepository.js.map +1 -1
  62. package/features/workflowState/GetTargetWorkflowState/GetTargetWorkflowStateUseCase.js +0 -1
  63. package/features/workflowState/GetTargetWorkflowState/GetTargetWorkflowStateUseCase.js.map +1 -1
  64. package/features/workflowState/GetWorkflowState/GetWorkflowStateRepository.d.ts +3 -3
  65. package/features/workflowState/GetWorkflowState/GetWorkflowStateRepository.js +6 -5
  66. package/features/workflowState/GetWorkflowState/GetWorkflowStateRepository.js.map +1 -1
  67. package/features/workflowState/GetWorkflowState/GetWorkflowStateUseCase.js +0 -1
  68. package/features/workflowState/GetWorkflowState/GetWorkflowStateUseCase.js.map +1 -1
  69. package/features/workflowState/ListWorkflowStates/DefaultWorkflowStateFilter.d.ts +9 -0
  70. package/features/workflowState/ListWorkflowStates/DefaultWorkflowStateFilter.js +13 -0
  71. package/features/workflowState/ListWorkflowStates/DefaultWorkflowStateFilter.js.map +1 -0
  72. package/features/workflowState/ListWorkflowStates/ListWorkflowStatesRepository.d.ts +3 -3
  73. package/features/workflowState/ListWorkflowStates/ListWorkflowStatesRepository.js +7 -6
  74. package/features/workflowState/ListWorkflowStates/ListWorkflowStatesRepository.js.map +1 -1
  75. package/features/workflowState/ListWorkflowStates/ListWorkflowStatesUseCase.d.ts +3 -1
  76. package/features/workflowState/ListWorkflowStates/ListWorkflowStatesUseCase.js +38 -8
  77. package/features/workflowState/ListWorkflowStates/ListWorkflowStatesUseCase.js.map +1 -1
  78. package/features/workflowState/ListWorkflowStates/WorkflowStateFilter.d.ts +8 -0
  79. package/features/workflowState/ListWorkflowStates/WorkflowStateFilter.js +5 -0
  80. package/features/workflowState/ListWorkflowStates/WorkflowStateFilter.js.map +1 -0
  81. package/features/workflowState/ListWorkflowStates/feature.js +2 -0
  82. package/features/workflowState/ListWorkflowStates/feature.js.map +1 -1
  83. package/features/workflowState/ListWorkflowStates/index.d.ts +1 -0
  84. package/features/workflowState/ListWorkflowStates/index.js +1 -0
  85. package/features/workflowState/UpdateWorkflowState/UpdateWorkflowStateRepository.d.ts +3 -3
  86. package/features/workflowState/UpdateWorkflowState/UpdateWorkflowStateRepository.js +7 -6
  87. package/features/workflowState/UpdateWorkflowState/UpdateWorkflowStateRepository.js.map +1 -1
  88. package/features/workflowState/UpdateWorkflowState/UpdateWorkflowStateUseCase.js +0 -1
  89. package/features/workflowState/UpdateWorkflowState/UpdateWorkflowStateUseCase.js.map +1 -1
  90. package/graphql/notifications.d.ts +2 -2
  91. package/graphql/notifications.js +44 -43
  92. package/graphql/notifications.js.map +1 -1
  93. package/graphql/validation/listWorkflowStates.d.ts +1 -1
  94. package/graphql/validation/listWorkflows.d.ts +1 -1
  95. package/graphql/workflowState.d.ts +2 -2
  96. package/graphql/workflowState.js +378 -306
  97. package/graphql/workflowState.js.map +1 -1
  98. package/graphql/workflows.d.ts +2 -2
  99. package/graphql/workflows.js +200 -178
  100. package/graphql/workflows.js.map +1 -1
  101. package/index.d.ts +1 -2
  102. package/index.js +1 -97
  103. package/package.json +15 -15
  104. package/index.js.map +0 -1
@@ -0,0 +1,5 @@
1
+ import { type Container } from "@webiny/feature/api";
2
+ export declare const WorkflowsFeature: {
3
+ name: string;
4
+ register(container: Container): void;
5
+ };
@@ -0,0 +1,70 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import { FeatureFlags } from "@webiny/api-core/features/featureFlags/abstractions.js";
3
+ import { WorkflowsSchemaFactory } from "./WorkflowsSchemaFactory.js";
4
+ import { WorkflowModel } from "./domain/workflow/workflowModel.js";
5
+ import { WorkflowStateModel } from "./domain/workflowState/stateModel.js";
6
+ import { WorkflowModelProviderImpl, WorkflowStateModelProviderImpl } from "./features/WorkflowModelProviders.js";
7
+ import { WorkflowMapper } from "./domain/workflow/WorkflowMapper.js";
8
+ import { WorkflowStateMapper } from "./domain/workflowState/WorkflowStateMapper.js";
9
+ import { GetWorkflowFeature } from "./features/workflow/GetWorkflow/feature.js";
10
+ import { ListWorkflowsFeature } from "./features/workflow/ListWorkflows/feature.js";
11
+ import { CreateWorkflowFeature } from "./features/workflow/CreateWorkflow/feature.js";
12
+ import { DeleteWorkflowFeature } from "./features/workflow/DeleteWorkflow/feature.js";
13
+ import { UpdateWorkflowFeature } from "./features/workflow/UpdateWorkflow/feature.js";
14
+ import { StoreWorkflowFeature } from "./features/workflow/StoreWorkflow/feature.js";
15
+ import { GetWorkflowStateFeature } from "./features/workflowState/GetWorkflowState/feature.js";
16
+ import { GetTargetWorkflowStateFeature } from "./features/workflowState/GetTargetWorkflowState/feature.js";
17
+ import { ListOwnWorkflowStatesFeature } from "./features/workflowState/ListOwnWorkflowStates/feature.js";
18
+ import { ListWorkflowStatesFeature } from "./features/workflowState/ListWorkflowStates/feature.js";
19
+ import { ListRequestedWorkflowStatesFeature } from "./features/workflowState/ListRequestedWorkflowStates/feature.js";
20
+ import { CreateWorkflowStateFeature } from "./features/workflowState/CreateWorkflowState/feature.js";
21
+ import { UpdateWorkflowStateFeature } from "./features/workflowState/UpdateWorkflowState/feature.js";
22
+ import { CancelWorkflowStateFeature } from "./features/workflowState/CancelWorkflowState/feature.js";
23
+ import { DeleteWorkflowStateFeature } from "./features/workflowState/DeleteWorkflowState/feature.js";
24
+ import { DeleteTargetWorkflowStateFeature } from "./features/workflowState/DeleteTargetWorkflowState/feature.js";
25
+ import { StartWorkflowStateStepFeature } from "./features/workflowState/StartWorkflowStateStep/feature.js";
26
+ import { ApproveWorkflowStateStepFeature } from "./features/workflowState/ApproveWorkflowStateStep/feature.js";
27
+ import { RejectWorkflowStateStepFeature } from "./features/workflowState/RejectWorkflowStateStep/feature.js";
28
+ import { TakeOverWorkflowStateStepFeature } from "./features/workflowState/TakeOverWorkflowStateStep/feature.js";
29
+ import { GetUserTeamsFeature } from "./features/internal/GetUserTeams/feature.js";
30
+ import { ListNotificationTypesFeature } from "./features/notifications/ListNotificationTypes/index.js";
31
+ import { NotificationTransportFeature } from "./features/notifications/NotificationTransport/index.js";
32
+ const WorkflowsFeature = createFeature({
33
+ name: "Workflows",
34
+ register (container) {
35
+ if (!container.resolve(FeatureFlags).get().isEnabled("advancedPublishingWorkflow")) return;
36
+ container.register(WorkflowModel);
37
+ container.register(WorkflowStateModel);
38
+ container.register(WorkflowsSchemaFactory);
39
+ container.register(WorkflowModelProviderImpl);
40
+ container.register(WorkflowStateModelProviderImpl);
41
+ container.register(WorkflowMapper);
42
+ container.register(WorkflowStateMapper);
43
+ ListNotificationTypesFeature.register(container);
44
+ NotificationTransportFeature.register(container);
45
+ GetWorkflowFeature.register(container);
46
+ ListWorkflowsFeature.register(container);
47
+ CreateWorkflowFeature.register(container);
48
+ DeleteWorkflowFeature.register(container);
49
+ UpdateWorkflowFeature.register(container);
50
+ StoreWorkflowFeature.register(container);
51
+ GetUserTeamsFeature.register(container);
52
+ GetWorkflowStateFeature.register(container);
53
+ GetTargetWorkflowStateFeature.register(container);
54
+ ListOwnWorkflowStatesFeature.register(container);
55
+ ListWorkflowStatesFeature.register(container);
56
+ ListRequestedWorkflowStatesFeature.register(container);
57
+ CreateWorkflowStateFeature.register(container);
58
+ UpdateWorkflowStateFeature.register(container);
59
+ CancelWorkflowStateFeature.register(container);
60
+ DeleteWorkflowStateFeature.register(container);
61
+ DeleteTargetWorkflowStateFeature.register(container);
62
+ StartWorkflowStateStepFeature.register(container);
63
+ ApproveWorkflowStateStepFeature.register(container);
64
+ RejectWorkflowStateStepFeature.register(container);
65
+ TakeOverWorkflowStateStepFeature.register(container);
66
+ }
67
+ });
68
+ export { WorkflowsFeature };
69
+
70
+ //# sourceMappingURL=WorkflowsFeature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkflowsFeature.js","sources":["../src/WorkflowsFeature.ts"],"sourcesContent":["import { type Container, createFeature } from \"@webiny/feature/api\";\nimport { FeatureFlags } from \"@webiny/api-core/features/featureFlags/abstractions.js\";\nimport { WorkflowsSchemaFactory } from \"./WorkflowsSchemaFactory.js\";\nimport { WorkflowModel as WorkflowPrivateModel } from \"./domain/workflow/workflowModel.js\";\nimport { WorkflowStateModel as WorkflowStatePrivateModel } from \"./domain/workflowState/stateModel.js\";\nimport {\n WorkflowModelProviderImpl,\n WorkflowStateModelProviderImpl\n} from \"~/features/WorkflowModelProviders.js\";\nimport { WorkflowMapper } from \"~/domain/workflow/WorkflowMapper.js\";\nimport { WorkflowStateMapper } from \"~/domain/workflowState/WorkflowStateMapper.js\";\nimport { GetWorkflowFeature } from \"~/features/workflow/GetWorkflow/feature.js\";\nimport { ListWorkflowsFeature } from \"~/features/workflow/ListWorkflows/feature.js\";\nimport { CreateWorkflowFeature } from \"~/features/workflow/CreateWorkflow/feature.js\";\nimport { DeleteWorkflowFeature } from \"~/features/workflow/DeleteWorkflow/feature.js\";\nimport { UpdateWorkflowFeature } from \"~/features/workflow/UpdateWorkflow/feature.js\";\nimport { StoreWorkflowFeature } from \"~/features/workflow/StoreWorkflow/feature.js\";\nimport { GetWorkflowStateFeature } from \"~/features/workflowState/GetWorkflowState/feature.js\";\nimport { GetTargetWorkflowStateFeature } from \"~/features/workflowState/GetTargetWorkflowState/feature.js\";\nimport { ListOwnWorkflowStatesFeature } from \"~/features/workflowState/ListOwnWorkflowStates/feature.js\";\nimport { ListWorkflowStatesFeature } from \"~/features/workflowState/ListWorkflowStates/feature.js\";\nimport { ListRequestedWorkflowStatesFeature } from \"~/features/workflowState/ListRequestedWorkflowStates/feature.js\";\nimport { CreateWorkflowStateFeature } from \"~/features/workflowState/CreateWorkflowState/feature.js\";\nimport { UpdateWorkflowStateFeature } from \"~/features/workflowState/UpdateWorkflowState/feature.js\";\nimport { CancelWorkflowStateFeature } from \"~/features/workflowState/CancelWorkflowState/feature.js\";\nimport { DeleteWorkflowStateFeature } from \"~/features/workflowState/DeleteWorkflowState/feature.js\";\nimport { DeleteTargetWorkflowStateFeature } from \"~/features/workflowState/DeleteTargetWorkflowState/feature.js\";\nimport { StartWorkflowStateStepFeature } from \"~/features/workflowState/StartWorkflowStateStep/feature.js\";\nimport { ApproveWorkflowStateStepFeature } from \"~/features/workflowState/ApproveWorkflowStateStep/feature.js\";\nimport { RejectWorkflowStateStepFeature } from \"~/features/workflowState/RejectWorkflowStateStep/feature.js\";\nimport { TakeOverWorkflowStateStepFeature } from \"~/features/workflowState/TakeOverWorkflowStateStep/feature.js\";\nimport { GetUserTeamsFeature } from \"~/features/internal/GetUserTeams/feature.js\";\nimport { ListNotificationTypesFeature } from \"~/features/notifications/ListNotificationTypes/index.js\";\nimport { NotificationTransportFeature } from \"./features/notifications/NotificationTransport/index.js\";\n\nexport const WorkflowsFeature = createFeature({\n name: \"Workflows\",\n register(container: Container) {\n // Advanced publishing workflow is license-gated. Check the effective flag at register time\n // (the license is refreshed pre-register) so nothing is wired up without the entitlement.\n if (!container.resolve(FeatureFlags).get().isEnabled(\"advancedPublishingWorkflow\")) {\n return;\n }\n\n // Register private CMS model definitions early so HeadlessCmsInitializerImpl\n // picks them up when it builds the model list during the enhance phase.\n container.register(WorkflowPrivateModel);\n container.register(WorkflowStatePrivateModel);\n container.register(WorkflowsSchemaFactory);\n\n // The per-tenant models are resolved on demand — see WorkflowModelProviders.\n container.register(WorkflowModelProviderImpl);\n container.register(WorkflowStateModelProviderImpl);\n\n container.register(WorkflowMapper);\n container.register(WorkflowStateMapper);\n\n // Notifications\n ListNotificationTypesFeature.register(container);\n NotificationTransportFeature.register(container);\n\n // Workflows\n GetWorkflowFeature.register(container);\n ListWorkflowsFeature.register(container);\n CreateWorkflowFeature.register(container);\n DeleteWorkflowFeature.register(container);\n UpdateWorkflowFeature.register(container);\n StoreWorkflowFeature.register(container);\n\n // Internal\n GetUserTeamsFeature.register(container);\n\n // Workflow state\n GetWorkflowStateFeature.register(container);\n GetTargetWorkflowStateFeature.register(container);\n ListOwnWorkflowStatesFeature.register(container);\n ListWorkflowStatesFeature.register(container);\n ListRequestedWorkflowStatesFeature.register(container);\n CreateWorkflowStateFeature.register(container);\n UpdateWorkflowStateFeature.register(container);\n CancelWorkflowStateFeature.register(container);\n DeleteWorkflowStateFeature.register(container);\n DeleteTargetWorkflowStateFeature.register(container);\n StartWorkflowStateStepFeature.register(container);\n ApproveWorkflowStateStepFeature.register(container);\n RejectWorkflowStateStepFeature.register(container);\n TakeOverWorkflowStateStepFeature.register(container);\n }\n});\n"],"names":["WorkflowsFeature","createFeature","container","FeatureFlags","WorkflowPrivateModel","WorkflowStatePrivateModel","WorkflowsSchemaFactory","WorkflowModelProviderImpl","WorkflowStateModelProviderImpl","WorkflowMapper","WorkflowStateMapper","ListNotificationTypesFeature","NotificationTransportFeature","GetWorkflowFeature","ListWorkflowsFeature","CreateWorkflowFeature","DeleteWorkflowFeature","UpdateWorkflowFeature","StoreWorkflowFeature","GetUserTeamsFeature","GetWorkflowStateFeature","GetTargetWorkflowStateFeature","ListOwnWorkflowStatesFeature","ListWorkflowStatesFeature","ListRequestedWorkflowStatesFeature","CreateWorkflowStateFeature","UpdateWorkflowStateFeature","CancelWorkflowStateFeature","DeleteWorkflowStateFeature","DeleteTargetWorkflowStateFeature","StartWorkflowStateStepFeature","ApproveWorkflowStateStepFeature","RejectWorkflowStateStepFeature","TakeOverWorkflowStateStepFeature"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCO,MAAMA,mBAAmBC,cAAc;IAC1C,MAAM;IACN,UAASC,SAAoB;QAGzB,IAAI,CAACA,UAAU,OAAO,CAACC,cAAc,GAAG,GAAG,SAAS,CAAC,+BACjD;QAKJD,UAAU,QAAQ,CAACE;QACnBF,UAAU,QAAQ,CAACG;QACnBH,UAAU,QAAQ,CAACI;QAGnBJ,UAAU,QAAQ,CAACK;QACnBL,UAAU,QAAQ,CAACM;QAEnBN,UAAU,QAAQ,CAACO;QACnBP,UAAU,QAAQ,CAACQ;QAGnBC,6BAA6B,QAAQ,CAACT;QACtCU,6BAA6B,QAAQ,CAACV;QAGtCW,mBAAmB,QAAQ,CAACX;QAC5BY,qBAAqB,QAAQ,CAACZ;QAC9Ba,sBAAsB,QAAQ,CAACb;QAC/Bc,sBAAsB,QAAQ,CAACd;QAC/Be,sBAAsB,QAAQ,CAACf;QAC/BgB,qBAAqB,QAAQ,CAAChB;QAG9BiB,oBAAoB,QAAQ,CAACjB;QAG7BkB,wBAAwB,QAAQ,CAAClB;QACjCmB,8BAA8B,QAAQ,CAACnB;QACvCoB,6BAA6B,QAAQ,CAACpB;QACtCqB,0BAA0B,QAAQ,CAACrB;QACnCsB,mCAAmC,QAAQ,CAACtB;QAC5CuB,2BAA2B,QAAQ,CAACvB;QACpCwB,2BAA2B,QAAQ,CAACxB;QACpCyB,2BAA2B,QAAQ,CAACzB;QACpC0B,2BAA2B,QAAQ,CAAC1B;QACpC2B,iCAAiC,QAAQ,CAAC3B;QAC1C4B,8BAA8B,QAAQ,CAAC5B;QACvC6B,gCAAgC,QAAQ,CAAC7B;QACzC8B,+BAA+B,QAAQ,CAAC9B;QACxC+B,iCAAiC,QAAQ,CAAC/B;IAC9C;AACJ"}
@@ -0,0 +1,8 @@
1
+ import type { IGraphQLSchemaFactory, GraphQLSchemaFactory as GQLSchemaFactory } from "@webiny/api-graphql/graphql/abstractions.js";
2
+ declare class WorkflowsSchemaFactoryImpl implements IGraphQLSchemaFactory {
3
+ execute(builder: GQLSchemaFactory.SchemaBuilder): Promise<GQLSchemaFactory.SchemaBuilder>;
4
+ }
5
+ export declare const WorkflowsSchemaFactory: typeof WorkflowsSchemaFactoryImpl & {
6
+ __abstraction: import("@webiny/di").Abstraction<IGraphQLSchemaFactory>;
7
+ };
8
+ export {};
@@ -0,0 +1,19 @@
1
+ import { GraphQLSchemaFactory } from "@webiny/api-graphql/graphql/abstractions.js";
2
+ import { addNotificationsSchema } from "./graphql/notifications.js";
3
+ import { addWorkflowsSchema } from "./graphql/workflows.js";
4
+ import { addWorkflowStateSchema } from "./graphql/workflowState.js";
5
+ class WorkflowsSchemaFactoryImpl {
6
+ async execute(builder) {
7
+ addWorkflowsSchema(builder);
8
+ addWorkflowStateSchema(builder);
9
+ addNotificationsSchema(builder);
10
+ return builder;
11
+ }
12
+ }
13
+ const WorkflowsSchemaFactory = GraphQLSchemaFactory.createImplementation({
14
+ implementation: WorkflowsSchemaFactoryImpl,
15
+ dependencies: []
16
+ });
17
+ export { WorkflowsSchemaFactory };
18
+
19
+ //# sourceMappingURL=WorkflowsSchemaFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkflowsSchemaFactory.js","sources":["../src/WorkflowsSchemaFactory.ts"],"sourcesContent":["import { GraphQLSchemaFactory } from \"@webiny/api-graphql/graphql/abstractions.js\";\nimport type {\n IGraphQLSchemaFactory,\n GraphQLSchemaFactory as GQLSchemaFactory\n} from \"@webiny/api-graphql/graphql/abstractions.js\";\nimport { addNotificationsSchema } from \"~/graphql/notifications.js\";\nimport { addWorkflowsSchema } from \"~/graphql/workflows.js\";\nimport { addWorkflowStateSchema } from \"~/graphql/workflowState.js\";\n\nclass WorkflowsSchemaFactoryImpl implements IGraphQLSchemaFactory {\n async execute(\n builder: GQLSchemaFactory.SchemaBuilder\n ): Promise<GQLSchemaFactory.SchemaBuilder> {\n addWorkflowsSchema(builder);\n addWorkflowStateSchema(builder);\n addNotificationsSchema(builder);\n\n return builder;\n }\n}\n\nexport const WorkflowsSchemaFactory = GraphQLSchemaFactory.createImplementation({\n implementation: WorkflowsSchemaFactoryImpl,\n dependencies: []\n});\n"],"names":["WorkflowsSchemaFactoryImpl","builder","addWorkflowsSchema","addWorkflowStateSchema","addNotificationsSchema","WorkflowsSchemaFactory","GraphQLSchemaFactory"],"mappings":";;;;AASA,MAAMA;IACF,MAAM,QACFC,OAAuC,EACA;QACvCC,mBAAmBD;QACnBE,uBAAuBF;QACvBG,uBAAuBH;QAEvB,OAAOA;IACX;AACJ;AAEO,MAAMI,yBAAyBC,qBAAqB,oBAAoB,CAAC;IAC5E,gBAAgBN;IAChB,cAAc,EAAE;AACpB"}
@@ -23,9 +23,19 @@ export interface IWorkflowValues {
23
23
  export interface IWorkflow extends IWorkflowValues {
24
24
  id: string;
25
25
  }
26
- export declare const WorkflowModel: import("@webiny/di").Abstraction<CmsModel>;
27
- export declare namespace WorkflowModel {
28
- type Interface = CmsModel;
26
+ /**
27
+ * Provides the tenant's workflow CMS model.
28
+ *
29
+ * A provider rather than the model itself: fetching a model is asynchronous and tenant-dependent,
30
+ * while DI resolution is synchronous — so an already-resolved `CmsModel` could only be supplied by a
31
+ * per-request hook running before every consumer. Consumers `await get()` at the point of use.
32
+ */
33
+ export interface IWorkflowModelProvider {
34
+ get(): Promise<CmsModel>;
35
+ }
36
+ export declare const WorkflowModelProvider: import("@webiny/di").Abstraction<IWorkflowModelProvider>;
37
+ export declare namespace WorkflowModelProvider {
38
+ type Interface = IWorkflowModelProvider;
29
39
  }
30
40
  export interface IWorkflowMapper {
31
41
  fromCmsEntry(input: CmsEntry<Omit<IWorkflow, "id">>): IWorkflow;
@@ -1,6 +1,6 @@
1
1
  import { createAbstraction } from "@webiny/feature/api";
2
- const WorkflowModel = createAbstraction("WorkflowModel");
2
+ const WorkflowModelProvider = createAbstraction("WorkflowModelProvider");
3
3
  const WorkflowMapper = createAbstraction("WorkflowMapper");
4
- export { WorkflowMapper, WorkflowModel };
4
+ export { WorkflowMapper, WorkflowModelProvider };
5
5
 
6
6
  //# sourceMappingURL=abstractions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"domain/workflow/abstractions.js","sources":["../../../src/domain/workflow/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { CmsEntry, CmsModel } from \"@webiny/api-headless-cms/types\";\nimport type { NonEmptyArray } from \"@webiny/api/types.js\";\nimport type { IWorkflowInput } from \"~/features/shared/abstractions.js\";\n\nexport interface IWorkflowStepNotification {\n id: string;\n}\n\nexport interface IWorkflowStepTeam {\n id: string;\n}\n\nexport interface IWorkflowStep {\n id: string;\n title: string;\n color: string;\n description?: string;\n teams: NonEmptyArray<IWorkflowStepTeam>;\n notifications?: IWorkflowStepNotification[];\n}\n\nexport interface IWorkflowValues {\n app: string;\n name: string;\n steps: NonEmptyArray<IWorkflowStep>;\n}\n\nexport interface IWorkflow extends IWorkflowValues {\n id: string;\n}\n\n// Abstractions\nexport const WorkflowModel = createAbstraction<CmsModel>(\"WorkflowModel\");\n\nexport namespace WorkflowModel {\n export type Interface = CmsModel;\n}\n\nexport interface IWorkflowMapper {\n fromCmsEntry(input: CmsEntry<Omit<IWorkflow, \"id\">>): IWorkflow;\n toCmsEntry(input: IWorkflowInput): IWorkflow;\n}\n\nexport const WorkflowMapper = createAbstraction<IWorkflowMapper>(\"WorkflowMapper\");\n\nexport namespace WorkflowMapper {\n export type Interface = IWorkflowMapper;\n}\n"],"names":["WorkflowModel","createAbstraction","WorkflowMapper"],"mappings":";AAiCO,MAAMA,gBAAgBC,kBAA4B;AAWlD,MAAMC,iBAAiBD,kBAAmC"}
1
+ {"version":3,"file":"domain/workflow/abstractions.js","sources":["../../../src/domain/workflow/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { CmsEntry, CmsModel } from \"@webiny/api-headless-cms/types\";\nimport type { NonEmptyArray } from \"@webiny/api/types.js\";\nimport type { IWorkflowInput } from \"~/features/shared/abstractions.js\";\n\nexport interface IWorkflowStepNotification {\n id: string;\n}\n\nexport interface IWorkflowStepTeam {\n id: string;\n}\n\nexport interface IWorkflowStep {\n id: string;\n title: string;\n color: string;\n description?: string;\n teams: NonEmptyArray<IWorkflowStepTeam>;\n notifications?: IWorkflowStepNotification[];\n}\n\nexport interface IWorkflowValues {\n app: string;\n name: string;\n steps: NonEmptyArray<IWorkflowStep>;\n}\n\nexport interface IWorkflow extends IWorkflowValues {\n id: string;\n}\n\n// Abstractions\n/**\n * Provides the tenant's workflow CMS model.\n *\n * A provider rather than the model itself: fetching a model is asynchronous and tenant-dependent,\n * while DI resolution is synchronous — so an already-resolved `CmsModel` could only be supplied by a\n * per-request hook running before every consumer. Consumers `await get()` at the point of use.\n */\nexport interface IWorkflowModelProvider {\n get(): Promise<CmsModel>;\n}\n\nexport const WorkflowModelProvider =\n createAbstraction<IWorkflowModelProvider>(\"WorkflowModelProvider\");\n\nexport namespace WorkflowModelProvider {\n export type Interface = IWorkflowModelProvider;\n}\n\nexport interface IWorkflowMapper {\n fromCmsEntry(input: CmsEntry<Omit<IWorkflow, \"id\">>): IWorkflow;\n toCmsEntry(input: IWorkflowInput): IWorkflow;\n}\n\nexport const WorkflowMapper = createAbstraction<IWorkflowMapper>(\"WorkflowMapper\");\n\nexport namespace WorkflowMapper {\n export type Interface = IWorkflowMapper;\n}\n"],"names":["WorkflowModelProvider","createAbstraction","WorkflowMapper"],"mappings":";AA4CO,MAAMA,wBACTC,kBAA0C;AAWvC,MAAMC,iBAAiBD,kBAAmC"}
@@ -22,6 +22,7 @@ export declare class WorkflowState implements IWorkflowState {
22
22
  get savedOn(): Date;
23
23
  get createdBy(): IWorkflowStateIdentity;
24
24
  get savedBy(): IWorkflowStateIdentity;
25
+ get targetContext(): import("@webiny/api/types.js").GenericRecord;
25
26
  get done(): boolean;
26
27
  /**
27
28
  * Current step can be:
@@ -57,6 +57,9 @@ class WorkflowState {
57
57
  get savedBy() {
58
58
  return this.record.savedBy;
59
59
  }
60
+ get targetContext() {
61
+ return this.record.targetContext;
62
+ }
60
63
  get done() {
61
64
  if (0 === this.record.steps.length) return false;
62
65
  return this.record.steps.every((step)=>step.state === WorkflowStateRecordState.approved);
@@ -1 +1 @@
1
- {"version":3,"file":"domain/workflowState/WorkflowState.js","sources":["../../../src/domain/workflowState/WorkflowState.ts"],"sourcesContent":["import type {\n IWorkflowState,\n IWorkflowStateRecord,\n IWorkflowStateIdentity,\n IEnrichedWorkflowStateRecordStep,\n IWorkflowStateRecordStep\n} from \"./abstractions.js\";\nimport { WorkflowStateRecordState } from \"./abstractions.js\";\nimport { Result } from \"@webiny/feature/api\";\nimport type { IWorkflowStepTeam } from \"../workflow/abstractions.js\";\nimport {\n WorkflowStateNotAuthorizedError,\n WorkflowStateNoPendingStepError,\n WorkflowStateStepCannotReviewError,\n WorkflowStateStepCannotTakeOverError,\n WorkflowStateStepNotStepOwnerError,\n WorkflowStateInReviewError,\n WorkflowStateRejectedError,\n WorkflowStateNoCurrentStepError,\n WorkflowStateNotInReview\n} from \"./errors.js\";\nimport { canReview } from \"./guards/canReview.js\";\nimport { isRejected } from \"./guards/isRejected.js\";\nimport { canTakeOver } from \"./guards/canTakeOver.js\";\nimport { isInReview } from \"./guards/isInReview.js\";\nimport { isStepOwner } from \"./guards/isStepOwner.js\";\n\ninterface IEnrichStepWithPermissionParams {\n createdBy: Pick<IWorkflowStateIdentity, \"id\">;\n step: IWorkflowStateRecordStep;\n}\n\nexport class WorkflowState implements IWorkflowState {\n constructor(\n private record: IWorkflowStateRecord,\n private teams: IWorkflowStepTeam[],\n private currentIdentity: IWorkflowStateIdentity\n ) {}\n\n get id() {\n return this.record.id;\n }\n\n get app() {\n return this.record.app;\n }\n\n get title() {\n return this.record.title;\n }\n\n get workflowId() {\n return this.record.workflowId;\n }\n\n get targetId() {\n return this.record.targetId;\n }\n\n get targetRevisionId() {\n return this.record.targetRevisionId;\n }\n\n get isActive() {\n return this.record.isActive;\n }\n\n get comment() {\n return this.record.comment;\n }\n\n get state() {\n return this.record.state;\n }\n\n get steps() {\n return this.record.steps.map(step => {\n return this.enrichStep({ createdBy: this.record.createdBy, step });\n });\n }\n\n get createdOn() {\n return this.record.createdOn;\n }\n\n get savedOn() {\n return this.record.savedOn;\n }\n\n get createdBy() {\n return this.record.createdBy;\n }\n\n get savedBy() {\n return this.record.savedBy;\n }\n\n get done(): boolean {\n /**\n * A just-in-case check.\n */\n if (this.record.steps.length === 0) {\n return false;\n }\n return this.record.steps.every(step => {\n return step.state === WorkflowStateRecordState.approved;\n });\n }\n\n /**\n * Current step can be:\n * - in review step\n * - rejected step - can only be one\n * - first pending step\n * - last approved step\n */\n get currentStep(): IEnrichedWorkflowStateRecordStep {\n const steps = this.steps;\n const inReview = steps.find(step => step.state === WorkflowStateRecordState.inReview);\n if (inReview) {\n return inReview;\n }\n\n const rejected = steps.find(step => step.state === WorkflowStateRecordState.rejected);\n if (rejected) {\n return rejected;\n }\n const pending = steps.find(step => step.state === WorkflowStateRecordState.pending);\n if (pending) {\n return pending;\n }\n const approved = steps\n .toReversed()\n .find(step => step.state === WorkflowStateRecordState.approved);\n if (approved) {\n return approved;\n }\n throw new WorkflowStateNoCurrentStepError(steps);\n }\n\n get nextStep(): IEnrichedWorkflowStateRecordStep | null {\n const steps = this.steps;\n const currentStep = this.currentStep;\n const currentIndex = steps.findIndex(step => step.id === currentStep.id);\n if (currentIndex === -1) {\n return null;\n }\n return steps[currentIndex + 1] || null;\n }\n\n get previousStep(): IEnrichedWorkflowStateRecordStep | null {\n const steps = this.steps;\n const currentStep = this.currentStep;\n const currentIndex = steps.findIndex(step => step.id === currentStep.id);\n if (currentIndex <= 0) {\n return null;\n }\n return steps[currentIndex - 1] || null;\n }\n\n /**\n * Active step is the one that is currently \"inReview\". If there is a rejected step, returns null.\n */\n getActiveStep(): IEnrichedWorkflowStateRecordStep | null {\n const steps = this.steps;\n const hasRejected = steps.some(step => {\n return step.state === WorkflowStateRecordState.rejected;\n });\n if (hasRejected) {\n return null;\n }\n const step = steps.find(step => {\n return step.state === WorkflowStateRecordState.inReview;\n });\n return step || null;\n }\n\n start(): Result<void, WorkflowState.Error> {\n const stepResult = this.getPendingStep();\n if (stepResult.isFail()) {\n return Result.fail(stepResult.error);\n }\n\n const step = stepResult.value;\n\n if (!canReview(step)) {\n return Result.fail(new WorkflowStateStepCannotReviewError(step));\n }\n\n const identity = {\n id: this.currentIdentity.id,\n displayName: this.currentIdentity.displayName,\n type: this.currentIdentity.type\n };\n\n this.updateStep(step.id, {\n savedBy: identity,\n state: WorkflowStateRecordState.inReview\n });\n this.updateRecord({\n savedBy: identity,\n state: WorkflowStateRecordState.inReview\n });\n\n return Result.ok();\n }\n\n takeOver(): Result<void, WorkflowState.Error> {\n if (isRejected(this.record)) {\n return Result.fail(new WorkflowStateRejectedError(this.record));\n }\n const step = this.getActiveStep();\n if (!step) {\n return Result.fail(\n new WorkflowStateNotAuthorizedError(\n `Cannot take over a workflow state that is not in review.`\n )\n );\n }\n if (!canTakeOver(step)) {\n return Result.fail(new WorkflowStateStepCannotTakeOverError(step));\n }\n if (!canReview(step)) {\n return Result.fail(new WorkflowStateStepCannotReviewError(step));\n }\n\n const identity = {\n id: this.currentIdentity.id,\n displayName: this.currentIdentity.displayName,\n type: this.currentIdentity.type\n };\n\n this.updateStep(step.id, {\n savedBy: identity\n });\n this.updateRecord({\n savedBy: identity\n });\n\n return Result.ok();\n }\n\n approve(comment?: string): Result<void, WorkflowState.Error> {\n if (isRejected(this.record)) {\n return Result.fail(new WorkflowStateRejectedError(this.record));\n }\n const step = this.getActiveStep();\n /**\n * Step cannot be found - all steps are either approved or rejected.\n */\n if (!step) {\n return Result.fail(\n new WorkflowStateNotAuthorizedError(\n `Cannot approve a workflow state that is not in review.`\n )\n );\n }\n if (!canReview(step)) {\n return Result.fail(new WorkflowStateStepCannotReviewError(step));\n }\n if (!isStepOwner(step)) {\n return Result.fail(new WorkflowStateStepNotStepOwnerError(step));\n }\n\n this.approveStep(step.id, comment);\n\n const nextStep = this.getNextStep(step.id);\n\n this.updateRecord({\n state: nextStep ? WorkflowStateRecordState.pending : WorkflowStateRecordState.approved\n });\n\n return Result.ok();\n }\n\n reject(comment: string): Result<void, WorkflowState.Error> {\n if (isRejected(this.record)) {\n return Result.fail(new WorkflowStateRejectedError(this.record));\n }\n const step = this.getActiveStep();\n if (!step) {\n return Result.fail(\n new WorkflowStateNotInReview(\n `Cannot reject a workflow state that is not in review.`,\n this\n )\n );\n }\n\n if (!canReview(step)) {\n return Result.fail(new WorkflowStateStepCannotReviewError(step));\n }\n if (!isStepOwner(step)) {\n return Result.fail(new WorkflowStateStepNotStepOwnerError(step));\n }\n\n this.rejectStep(step.id, comment);\n this.updateRecord({\n state: WorkflowStateRecordState.rejected\n });\n\n return Result.ok();\n }\n\n private getPendingStep(): Result<\n IEnrichedWorkflowStateRecordStep,\n WorkflowStateRejectedError | WorkflowStateInReviewError | WorkflowStateNoPendingStepError\n > {\n if (isRejected(this.record)) {\n return Result.fail(new WorkflowStateRejectedError(this.record));\n }\n if (isInReview(this.record)) {\n return Result.fail(new WorkflowStateInReviewError(this.record));\n }\n for (const step of this.steps) {\n if (step.state === WorkflowStateRecordState.pending) {\n return Result.ok(step);\n }\n }\n return Result.fail(new WorkflowStateNoPendingStepError());\n }\n\n private updateRecord(record: Partial<Omit<IWorkflowStateRecord, \"id\">>): void {\n Object.assign(this.record, record);\n }\n\n private updateStep(id: string, input: Partial<Omit<IWorkflowStateRecordStep, \"id\">>): void {\n const step = this.record.steps.find(s => s.id === id);\n if (!step) {\n throw new Error(`Step with ID \"${id}\" not found.`);\n }\n Object.assign(step, {\n savedBy: {\n id: this.currentIdentity.id,\n displayName: this.currentIdentity.displayName,\n type: this.currentIdentity.type\n },\n ...input\n });\n }\n\n private approveStep(id: string, comment?: string): void {\n this.updateStep(id, {\n state: WorkflowStateRecordState.approved,\n comment\n });\n }\n\n private rejectStep(id: string, comment: string): void {\n this.updateStep(id, {\n state: WorkflowStateRecordState.rejected,\n comment\n });\n }\n\n private getNextStep(currentStepId: string): IWorkflowStateRecordStep | undefined {\n const index = this.record.steps.findIndex(s => s.id === currentStepId);\n if (index === -1) {\n return undefined;\n }\n return this.record.steps[index + 1];\n }\n\n private enrichStep(params: IEnrichStepWithPermissionParams): IEnrichedWorkflowStateRecordStep {\n const { step, createdBy } = params;\n const identity = this.currentIdentity;\n /**\n * User who created the workflow state cannot take part in reviewing it.\n */\n if (createdBy.id === identity.id) {\n return {\n ...step,\n isOwner: false,\n canTakeOver: false,\n canReview: false\n };\n }\n /**\n * Current user is step owner - they started the review.\n */\n const isOwner = step.savedBy?.id === identity.id;\n /**\n * Can current user actually review this step?\n */\n const canReview = step.teams.some(team => {\n return this.teams.some(t => {\n return t.id === team.id;\n });\n });\n /**\n * Can current user take over the review from another reviewer?\n * Taking over is only possible if current user did not start the review of the step - and review was actually started.\n */\n const canTakeOver =\n canReview && !!step.savedBy?.id && step.state === WorkflowStateRecordState.inReview;\n\n return {\n ...step,\n canTakeOver: !isOwner ? canTakeOver : false,\n isOwner,\n canReview\n };\n }\n\n toRecord(): IWorkflowStateRecord {\n return this.record;\n }\n}\n\nexport namespace WorkflowState {\n export type Error =\n | WorkflowStateNotAuthorizedError\n | WorkflowStateNoPendingStepError\n | WorkflowStateStepCannotReviewError\n | WorkflowStateStepCannotTakeOverError\n | WorkflowStateStepNotStepOwnerError\n | WorkflowStateInReviewError\n | WorkflowStateNotInReview\n | WorkflowStateRejectedError\n | WorkflowStateNoCurrentStepError;\n}\n"],"names":["WorkflowState","record","teams","currentIdentity","step","WorkflowStateRecordState","steps","inReview","rejected","pending","approved","WorkflowStateNoCurrentStepError","currentStep","currentIndex","hasRejected","stepResult","Result","canReview","WorkflowStateStepCannotReviewError","identity","isRejected","WorkflowStateRejectedError","WorkflowStateNotAuthorizedError","canTakeOver","WorkflowStateStepCannotTakeOverError","comment","isStepOwner","WorkflowStateStepNotStepOwnerError","nextStep","WorkflowStateNotInReview","isInReview","WorkflowStateInReviewError","WorkflowStateNoPendingStepError","Object","id","input","s","Error","currentStepId","index","params","createdBy","isOwner","team","t"],"mappings":"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"}
1
+ {"version":3,"file":"domain/workflowState/WorkflowState.js","sources":["../../../src/domain/workflowState/WorkflowState.ts"],"sourcesContent":["import type {\n IWorkflowState,\n IWorkflowStateRecord,\n IWorkflowStateIdentity,\n IEnrichedWorkflowStateRecordStep,\n IWorkflowStateRecordStep\n} from \"./abstractions.js\";\nimport { WorkflowStateRecordState } from \"./abstractions.js\";\nimport { Result } from \"@webiny/feature/api\";\nimport type { IWorkflowStepTeam } from \"../workflow/abstractions.js\";\nimport {\n WorkflowStateNotAuthorizedError,\n WorkflowStateNoPendingStepError,\n WorkflowStateStepCannotReviewError,\n WorkflowStateStepCannotTakeOverError,\n WorkflowStateStepNotStepOwnerError,\n WorkflowStateInReviewError,\n WorkflowStateRejectedError,\n WorkflowStateNoCurrentStepError,\n WorkflowStateNotInReview\n} from \"./errors.js\";\nimport { canReview } from \"./guards/canReview.js\";\nimport { isRejected } from \"./guards/isRejected.js\";\nimport { canTakeOver } from \"./guards/canTakeOver.js\";\nimport { isInReview } from \"./guards/isInReview.js\";\nimport { isStepOwner } from \"./guards/isStepOwner.js\";\n\ninterface IEnrichStepWithPermissionParams {\n createdBy: Pick<IWorkflowStateIdentity, \"id\">;\n step: IWorkflowStateRecordStep;\n}\n\nexport class WorkflowState implements IWorkflowState {\n constructor(\n private record: IWorkflowStateRecord,\n private teams: IWorkflowStepTeam[],\n private currentIdentity: IWorkflowStateIdentity\n ) {}\n\n get id() {\n return this.record.id;\n }\n\n get app() {\n return this.record.app;\n }\n\n get title() {\n return this.record.title;\n }\n\n get workflowId() {\n return this.record.workflowId;\n }\n\n get targetId() {\n return this.record.targetId;\n }\n\n get targetRevisionId() {\n return this.record.targetRevisionId;\n }\n\n get isActive() {\n return this.record.isActive;\n }\n\n get comment() {\n return this.record.comment;\n }\n\n get state() {\n return this.record.state;\n }\n\n get steps() {\n return this.record.steps.map(step => {\n return this.enrichStep({ createdBy: this.record.createdBy, step });\n });\n }\n\n get createdOn() {\n return this.record.createdOn;\n }\n\n get savedOn() {\n return this.record.savedOn;\n }\n\n get createdBy() {\n return this.record.createdBy;\n }\n\n get savedBy() {\n return this.record.savedBy;\n }\n\n get targetContext() {\n return this.record.targetContext;\n }\n\n get done(): boolean {\n /**\n * A just-in-case check.\n */\n if (this.record.steps.length === 0) {\n return false;\n }\n return this.record.steps.every(step => {\n return step.state === WorkflowStateRecordState.approved;\n });\n }\n\n /**\n * Current step can be:\n * - in review step\n * - rejected step - can only be one\n * - first pending step\n * - last approved step\n */\n get currentStep(): IEnrichedWorkflowStateRecordStep {\n const steps = this.steps;\n const inReview = steps.find(step => step.state === WorkflowStateRecordState.inReview);\n if (inReview) {\n return inReview;\n }\n\n const rejected = steps.find(step => step.state === WorkflowStateRecordState.rejected);\n if (rejected) {\n return rejected;\n }\n const pending = steps.find(step => step.state === WorkflowStateRecordState.pending);\n if (pending) {\n return pending;\n }\n const approved = steps\n .toReversed()\n .find(step => step.state === WorkflowStateRecordState.approved);\n if (approved) {\n return approved;\n }\n throw new WorkflowStateNoCurrentStepError(steps);\n }\n\n get nextStep(): IEnrichedWorkflowStateRecordStep | null {\n const steps = this.steps;\n const currentStep = this.currentStep;\n const currentIndex = steps.findIndex(step => step.id === currentStep.id);\n if (currentIndex === -1) {\n return null;\n }\n return steps[currentIndex + 1] || null;\n }\n\n get previousStep(): IEnrichedWorkflowStateRecordStep | null {\n const steps = this.steps;\n const currentStep = this.currentStep;\n const currentIndex = steps.findIndex(step => step.id === currentStep.id);\n if (currentIndex <= 0) {\n return null;\n }\n return steps[currentIndex - 1] || null;\n }\n\n /**\n * Active step is the one that is currently \"inReview\". If there is a rejected step, returns null.\n */\n getActiveStep(): IEnrichedWorkflowStateRecordStep | null {\n const steps = this.steps;\n const hasRejected = steps.some(step => {\n return step.state === WorkflowStateRecordState.rejected;\n });\n if (hasRejected) {\n return null;\n }\n const step = steps.find(step => {\n return step.state === WorkflowStateRecordState.inReview;\n });\n return step || null;\n }\n\n start(): Result<void, WorkflowState.Error> {\n const stepResult = this.getPendingStep();\n if (stepResult.isFail()) {\n return Result.fail(stepResult.error);\n }\n\n const step = stepResult.value;\n\n if (!canReview(step)) {\n return Result.fail(new WorkflowStateStepCannotReviewError(step));\n }\n\n const identity = {\n id: this.currentIdentity.id,\n displayName: this.currentIdentity.displayName,\n type: this.currentIdentity.type\n };\n\n this.updateStep(step.id, {\n savedBy: identity,\n state: WorkflowStateRecordState.inReview\n });\n this.updateRecord({\n savedBy: identity,\n state: WorkflowStateRecordState.inReview\n });\n\n return Result.ok();\n }\n\n takeOver(): Result<void, WorkflowState.Error> {\n if (isRejected(this.record)) {\n return Result.fail(new WorkflowStateRejectedError(this.record));\n }\n const step = this.getActiveStep();\n if (!step) {\n return Result.fail(\n new WorkflowStateNotAuthorizedError(\n `Cannot take over a workflow state that is not in review.`\n )\n );\n }\n if (!canTakeOver(step)) {\n return Result.fail(new WorkflowStateStepCannotTakeOverError(step));\n }\n if (!canReview(step)) {\n return Result.fail(new WorkflowStateStepCannotReviewError(step));\n }\n\n const identity = {\n id: this.currentIdentity.id,\n displayName: this.currentIdentity.displayName,\n type: this.currentIdentity.type\n };\n\n this.updateStep(step.id, {\n savedBy: identity\n });\n this.updateRecord({\n savedBy: identity\n });\n\n return Result.ok();\n }\n\n approve(comment?: string): Result<void, WorkflowState.Error> {\n if (isRejected(this.record)) {\n return Result.fail(new WorkflowStateRejectedError(this.record));\n }\n const step = this.getActiveStep();\n /**\n * Step cannot be found - all steps are either approved or rejected.\n */\n if (!step) {\n return Result.fail(\n new WorkflowStateNotAuthorizedError(\n `Cannot approve a workflow state that is not in review.`\n )\n );\n }\n if (!canReview(step)) {\n return Result.fail(new WorkflowStateStepCannotReviewError(step));\n }\n if (!isStepOwner(step)) {\n return Result.fail(new WorkflowStateStepNotStepOwnerError(step));\n }\n\n this.approveStep(step.id, comment);\n\n const nextStep = this.getNextStep(step.id);\n\n this.updateRecord({\n state: nextStep ? WorkflowStateRecordState.pending : WorkflowStateRecordState.approved\n });\n\n return Result.ok();\n }\n\n reject(comment: string): Result<void, WorkflowState.Error> {\n if (isRejected(this.record)) {\n return Result.fail(new WorkflowStateRejectedError(this.record));\n }\n const step = this.getActiveStep();\n if (!step) {\n return Result.fail(\n new WorkflowStateNotInReview(\n `Cannot reject a workflow state that is not in review.`,\n this\n )\n );\n }\n\n if (!canReview(step)) {\n return Result.fail(new WorkflowStateStepCannotReviewError(step));\n }\n if (!isStepOwner(step)) {\n return Result.fail(new WorkflowStateStepNotStepOwnerError(step));\n }\n\n this.rejectStep(step.id, comment);\n this.updateRecord({\n state: WorkflowStateRecordState.rejected\n });\n\n return Result.ok();\n }\n\n private getPendingStep(): Result<\n IEnrichedWorkflowStateRecordStep,\n WorkflowStateRejectedError | WorkflowStateInReviewError | WorkflowStateNoPendingStepError\n > {\n if (isRejected(this.record)) {\n return Result.fail(new WorkflowStateRejectedError(this.record));\n }\n if (isInReview(this.record)) {\n return Result.fail(new WorkflowStateInReviewError(this.record));\n }\n for (const step of this.steps) {\n if (step.state === WorkflowStateRecordState.pending) {\n return Result.ok(step);\n }\n }\n return Result.fail(new WorkflowStateNoPendingStepError());\n }\n\n private updateRecord(record: Partial<Omit<IWorkflowStateRecord, \"id\">>): void {\n Object.assign(this.record, record);\n }\n\n private updateStep(id: string, input: Partial<Omit<IWorkflowStateRecordStep, \"id\">>): void {\n const step = this.record.steps.find(s => s.id === id);\n if (!step) {\n throw new Error(`Step with ID \"${id}\" not found.`);\n }\n Object.assign(step, {\n savedBy: {\n id: this.currentIdentity.id,\n displayName: this.currentIdentity.displayName,\n type: this.currentIdentity.type\n },\n ...input\n });\n }\n\n private approveStep(id: string, comment?: string): void {\n this.updateStep(id, {\n state: WorkflowStateRecordState.approved,\n comment\n });\n }\n\n private rejectStep(id: string, comment: string): void {\n this.updateStep(id, {\n state: WorkflowStateRecordState.rejected,\n comment\n });\n }\n\n private getNextStep(currentStepId: string): IWorkflowStateRecordStep | undefined {\n const index = this.record.steps.findIndex(s => s.id === currentStepId);\n if (index === -1) {\n return undefined;\n }\n return this.record.steps[index + 1];\n }\n\n private enrichStep(params: IEnrichStepWithPermissionParams): IEnrichedWorkflowStateRecordStep {\n const { step, createdBy } = params;\n const identity = this.currentIdentity;\n /**\n * User who created the workflow state cannot take part in reviewing it.\n */\n if (createdBy.id === identity.id) {\n return {\n ...step,\n isOwner: false,\n canTakeOver: false,\n canReview: false\n };\n }\n /**\n * Current user is step owner - they started the review.\n */\n const isOwner = step.savedBy?.id === identity.id;\n /**\n * Can current user actually review this step?\n */\n const canReview = step.teams.some(team => {\n return this.teams.some(t => {\n return t.id === team.id;\n });\n });\n /**\n * Can current user take over the review from another reviewer?\n * Taking over is only possible if current user did not start the review of the step - and review was actually started.\n */\n const canTakeOver =\n canReview && !!step.savedBy?.id && step.state === WorkflowStateRecordState.inReview;\n\n return {\n ...step,\n canTakeOver: !isOwner ? canTakeOver : false,\n isOwner,\n canReview\n };\n }\n\n toRecord(): IWorkflowStateRecord {\n return this.record;\n }\n}\n\nexport namespace WorkflowState {\n export type Error =\n | WorkflowStateNotAuthorizedError\n | WorkflowStateNoPendingStepError\n | WorkflowStateStepCannotReviewError\n | WorkflowStateStepCannotTakeOverError\n | WorkflowStateStepNotStepOwnerError\n | WorkflowStateInReviewError\n | WorkflowStateNotInReview\n | WorkflowStateRejectedError\n | WorkflowStateNoCurrentStepError;\n}\n"],"names":["WorkflowState","record","teams","currentIdentity","step","WorkflowStateRecordState","steps","inReview","rejected","pending","approved","WorkflowStateNoCurrentStepError","currentStep","currentIndex","hasRejected","stepResult","Result","canReview","WorkflowStateStepCannotReviewError","identity","isRejected","WorkflowStateRejectedError","WorkflowStateNotAuthorizedError","canTakeOver","WorkflowStateStepCannotTakeOverError","comment","isStepOwner","WorkflowStateStepNotStepOwnerError","nextStep","WorkflowStateNotInReview","isInReview","WorkflowStateInReviewError","WorkflowStateNoPendingStepError","Object","id","input","s","Error","currentStepId","index","params","createdBy","isOwner","team","t"],"mappings":"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"}
@@ -15,7 +15,8 @@ class WorkflowStateMapperImpl {
15
15
  savedBy: input.savedBy,
16
16
  createdBy: input.createdBy,
17
17
  savedOn: new Date(input.savedOn),
18
- createdOn: new Date(input.createdOn)
18
+ createdOn: new Date(input.createdOn),
19
+ targetContext: input.values.targetContext || {}
19
20
  };
20
21
  }
21
22
  toCmsEntry(input) {
@@ -28,7 +29,8 @@ class WorkflowStateMapperImpl {
28
29
  steps: input.steps,
29
30
  app: input.app,
30
31
  state: input.state,
31
- comment: input.comment
32
+ comment: input.comment,
33
+ targetContext: input.targetContext || {}
32
34
  };
33
35
  }
34
36
  }
@@ -1 +1 @@
1
- {"version":3,"file":"domain/workflowState/WorkflowStateMapper.js","sources":["../../../src/domain/workflowState/WorkflowStateMapper.ts"],"sourcesContent":["import type {\n IWorkflowStateMapper,\n IWorkflowStateTransformerFromCmsEntryInput,\n IWorkflowStateTransformerFromCmsEntryOutput,\n IWorkflowStateTransformerToCmsEntryInput,\n IWorkflowStateTransformerToCmsEntryOutput\n} from \"./abstractions.js\";\nimport { WorkflowStateMapper as WorkflowStateMapperAbstraction } from \"./abstractions.js\";\n\nclass WorkflowStateMapperImpl implements IWorkflowStateMapper {\n public fromCmsEntry(\n input: IWorkflowStateTransformerFromCmsEntryInput\n ): IWorkflowStateTransformerFromCmsEntryOutput {\n return {\n id: input.id,\n workflowId: input.values.workflowId,\n title: input.values.title,\n targetId: input.values.targetId,\n targetRevisionId: input.values.targetRevisionId,\n steps: input.values.steps,\n isActive: input.values.isActive,\n app: input.values.app,\n state: input.values.state,\n comment: input.values.comment,\n savedBy: input.savedBy,\n createdBy: input.createdBy,\n savedOn: new Date(input.savedOn),\n createdOn: new Date(input.createdOn)\n };\n }\n\n public toCmsEntry(\n input: IWorkflowStateTransformerToCmsEntryInput\n ): IWorkflowStateTransformerToCmsEntryOutput {\n return {\n isActive: input.isActive,\n title: input.title,\n workflowId: input.workflowId,\n targetId: input.targetId,\n targetRevisionId: input.targetRevisionId,\n steps: input.steps,\n app: input.app,\n state: input.state,\n comment: input.comment\n };\n }\n}\n\nexport const WorkflowStateMapper = WorkflowStateMapperAbstraction.createImplementation({\n implementation: WorkflowStateMapperImpl,\n dependencies: []\n});\n"],"names":["WorkflowStateMapperImpl","input","Date","WorkflowStateMapper","WorkflowStateMapperAbstraction"],"mappings":";AASA,MAAMA;IACK,aACHC,KAAiD,EACN;QAC3C,OAAO;YACH,IAAIA,MAAM,EAAE;YACZ,YAAYA,MAAM,MAAM,CAAC,UAAU;YACnC,OAAOA,MAAM,MAAM,CAAC,KAAK;YACzB,UAAUA,MAAM,MAAM,CAAC,QAAQ;YAC/B,kBAAkBA,MAAM,MAAM,CAAC,gBAAgB;YAC/C,OAAOA,MAAM,MAAM,CAAC,KAAK;YACzB,UAAUA,MAAM,MAAM,CAAC,QAAQ;YAC/B,KAAKA,MAAM,MAAM,CAAC,GAAG;YACrB,OAAOA,MAAM,MAAM,CAAC,KAAK;YACzB,SAASA,MAAM,MAAM,CAAC,OAAO;YAC7B,SAASA,MAAM,OAAO;YACtB,WAAWA,MAAM,SAAS;YAC1B,SAAS,IAAIC,KAAKD,MAAM,OAAO;YAC/B,WAAW,IAAIC,KAAKD,MAAM,SAAS;QACvC;IACJ;IAEO,WACHA,KAA+C,EACN;QACzC,OAAO;YACH,UAAUA,MAAM,QAAQ;YACxB,OAAOA,MAAM,KAAK;YAClB,YAAYA,MAAM,UAAU;YAC5B,UAAUA,MAAM,QAAQ;YACxB,kBAAkBA,MAAM,gBAAgB;YACxC,OAAOA,MAAM,KAAK;YAClB,KAAKA,MAAM,GAAG;YACd,OAAOA,MAAM,KAAK;YAClB,SAASA,MAAM,OAAO;QAC1B;IACJ;AACJ;AAEO,MAAME,0CAAsBC,oBAAAA,oBAAmD,CAAC;IACnF,gBAAgBJ;IAChB,cAAc,EAAE;AACpB"}
1
+ {"version":3,"file":"domain/workflowState/WorkflowStateMapper.js","sources":["../../../src/domain/workflowState/WorkflowStateMapper.ts"],"sourcesContent":["import type {\n IWorkflowStateMapper,\n IWorkflowStateTransformerFromCmsEntryInput,\n IWorkflowStateTransformerFromCmsEntryOutput,\n IWorkflowStateTransformerToCmsEntryInput,\n IWorkflowStateTransformerToCmsEntryOutput\n} from \"./abstractions.js\";\nimport { WorkflowStateMapper as WorkflowStateMapperAbstraction } from \"./abstractions.js\";\n\nclass WorkflowStateMapperImpl implements IWorkflowStateMapper {\n public fromCmsEntry(\n input: IWorkflowStateTransformerFromCmsEntryInput\n ): IWorkflowStateTransformerFromCmsEntryOutput {\n return {\n id: input.id,\n workflowId: input.values.workflowId,\n title: input.values.title,\n targetId: input.values.targetId,\n targetRevisionId: input.values.targetRevisionId,\n steps: input.values.steps,\n isActive: input.values.isActive,\n app: input.values.app,\n state: input.values.state,\n comment: input.values.comment,\n savedBy: input.savedBy,\n createdBy: input.createdBy,\n savedOn: new Date(input.savedOn),\n createdOn: new Date(input.createdOn),\n targetContext: input.values.targetContext || {}\n };\n }\n\n public toCmsEntry(\n input: IWorkflowStateTransformerToCmsEntryInput\n ): IWorkflowStateTransformerToCmsEntryOutput {\n return {\n isActive: input.isActive,\n title: input.title,\n workflowId: input.workflowId,\n targetId: input.targetId,\n targetRevisionId: input.targetRevisionId,\n steps: input.steps,\n app: input.app,\n state: input.state,\n comment: input.comment,\n targetContext: input.targetContext || {}\n };\n }\n}\n\nexport const WorkflowStateMapper = WorkflowStateMapperAbstraction.createImplementation({\n implementation: WorkflowStateMapperImpl,\n dependencies: []\n});\n"],"names":["WorkflowStateMapperImpl","input","Date","WorkflowStateMapper","WorkflowStateMapperAbstraction"],"mappings":";AASA,MAAMA;IACK,aACHC,KAAiD,EACN;QAC3C,OAAO;YACH,IAAIA,MAAM,EAAE;YACZ,YAAYA,MAAM,MAAM,CAAC,UAAU;YACnC,OAAOA,MAAM,MAAM,CAAC,KAAK;YACzB,UAAUA,MAAM,MAAM,CAAC,QAAQ;YAC/B,kBAAkBA,MAAM,MAAM,CAAC,gBAAgB;YAC/C,OAAOA,MAAM,MAAM,CAAC,KAAK;YACzB,UAAUA,MAAM,MAAM,CAAC,QAAQ;YAC/B,KAAKA,MAAM,MAAM,CAAC,GAAG;YACrB,OAAOA,MAAM,MAAM,CAAC,KAAK;YACzB,SAASA,MAAM,MAAM,CAAC,OAAO;YAC7B,SAASA,MAAM,OAAO;YACtB,WAAWA,MAAM,SAAS;YAC1B,SAAS,IAAIC,KAAKD,MAAM,OAAO;YAC/B,WAAW,IAAIC,KAAKD,MAAM,SAAS;YACnC,eAAeA,MAAM,MAAM,CAAC,aAAa,IAAI,CAAC;QAClD;IACJ;IAEO,WACHA,KAA+C,EACN;QACzC,OAAO;YACH,UAAUA,MAAM,QAAQ;YACxB,OAAOA,MAAM,KAAK;YAClB,YAAYA,MAAM,UAAU;YAC5B,UAAUA,MAAM,QAAQ;YACxB,kBAAkBA,MAAM,gBAAgB;YACxC,OAAOA,MAAM,KAAK;YAClB,KAAKA,MAAM,GAAG;YACd,OAAOA,MAAM,KAAK;YAClB,SAASA,MAAM,OAAO;YACtB,eAAeA,MAAM,aAAa,IAAI,CAAC;QAC3C;IACJ;AACJ;AAEO,MAAME,0CAAsBC,oBAAAA,oBAAmD,CAAC;IACnF,gBAAgBJ;IAChB,cAAc,EAAE;AACpB"}
@@ -1,5 +1,6 @@
1
1
  import type { CmsEntry, CmsModel } from "@webiny/api-headless-cms/types";
2
2
  import type { IWorkflowStep } from "../workflow/abstractions.js";
3
+ import type { GenericRecord } from "@webiny/api/types.js";
3
4
  export declare enum WorkflowStateRecordState {
4
5
  pending = "pending",
5
6
  inReview = "inReview",
@@ -31,6 +32,7 @@ export interface IWorkflowStateRecord<Steps extends IWorkflowStateRecordStep = I
31
32
  savedOn: Date;
32
33
  createdBy: IWorkflowStateIdentity;
33
34
  savedBy: IWorkflowStateIdentity;
35
+ targetContext: GenericRecord;
34
36
  }
35
37
  export interface IEnrichedWorkflowStateRecordStep extends IWorkflowStateRecordStep {
36
38
  isOwner: boolean;
@@ -52,14 +54,25 @@ export interface IWorkflowState {
52
54
  readonly savedOn: Date;
53
55
  readonly createdBy: IWorkflowStateIdentity;
54
56
  readonly savedBy: IWorkflowStateIdentity;
57
+ readonly targetContext: GenericRecord;
55
58
  readonly done: boolean;
56
59
  readonly currentStep: IEnrichedWorkflowStateRecordStep;
57
60
  readonly nextStep: IEnrichedWorkflowStateRecordStep | null;
58
61
  readonly previousStep: IEnrichedWorkflowStateRecordStep | null;
59
62
  }
60
- export declare const WorkflowStateModel: import("@webiny/di").Abstraction<CmsModel>;
61
- export declare namespace WorkflowStateModel {
62
- type Interface = CmsModel;
63
+ /**
64
+ * Provides the tenant's workflow state CMS model.
65
+ *
66
+ * A provider rather than the model itself: fetching a model is asynchronous and tenant-dependent,
67
+ * while DI resolution is synchronous — so an already-resolved `CmsModel` could only be supplied by a
68
+ * per-request hook running before every consumer. Consumers `await get()` at the point of use.
69
+ */
70
+ export interface IWorkflowStateModelProvider {
71
+ get(): Promise<CmsModel>;
72
+ }
73
+ export declare const WorkflowStateModelProvider: import("@webiny/di").Abstraction<IWorkflowStateModelProvider>;
74
+ export declare namespace WorkflowStateModelProvider {
75
+ type Interface = IWorkflowStateModelProvider;
63
76
  }
64
77
  export type IWorkflowStateTransformerFromCmsEntryInput = CmsEntry<Omit<IWorkflowStateRecord, "id" | "savedOn" | "createdOn" | "savedBy" | "createdBy">>;
65
78
  export type IWorkflowStateTransformerFromCmsEntryOutput = IWorkflowStateRecord;
@@ -6,8 +6,8 @@ var abstractions_WorkflowStateRecordState = /*#__PURE__*/ function(WorkflowState
6
6
  WorkflowStateRecordState["rejected"] = "rejected";
7
7
  return WorkflowStateRecordState;
8
8
  }({});
9
- const WorkflowStateModel = createAbstraction("WorkflowStateModel");
9
+ const WorkflowStateModelProvider = createAbstraction("WorkflowStateModelProvider");
10
10
  const WorkflowStateMapper = createAbstraction("WorkflowStateMapper");
11
- export { WorkflowStateMapper, WorkflowStateModel, abstractions_WorkflowStateRecordState as WorkflowStateRecordState };
11
+ export { WorkflowStateMapper, WorkflowStateModelProvider, abstractions_WorkflowStateRecordState as WorkflowStateRecordState };
12
12
 
13
13
  //# sourceMappingURL=abstractions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"domain/workflowState/abstractions.js","sources":["../../../src/domain/workflowState/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { CmsEntry, CmsModel } from \"@webiny/api-headless-cms/types\";\nimport type { IWorkflowStep } from \"../workflow/abstractions.js\";\n\nexport enum WorkflowStateRecordState {\n pending = \"pending\",\n inReview = \"inReview\",\n approved = \"approved\",\n rejected = \"rejected\"\n}\n\nexport interface IWorkflowStateIdentity {\n id: string;\n displayName: string;\n type: string;\n}\n\nexport interface IWorkflowStateRecordStep extends IWorkflowStep {\n state: WorkflowStateRecordState;\n comment: string | null;\n savedBy: IWorkflowStateIdentity | null;\n}\n\nexport interface IWorkflowStateRecord<\n Steps extends IWorkflowStateRecordStep = IWorkflowStateRecordStep\n> {\n id: string;\n app: string;\n title: string;\n workflowId: string;\n targetId: string;\n targetRevisionId: string;\n isActive: boolean;\n comment: string | undefined;\n state: WorkflowStateRecordState;\n steps: Steps[];\n createdOn: Date;\n savedOn: Date;\n createdBy: IWorkflowStateIdentity;\n savedBy: IWorkflowStateIdentity;\n}\n\nexport interface IEnrichedWorkflowStateRecordStep extends IWorkflowStateRecordStep {\n isOwner: boolean;\n canTakeOver: boolean;\n canReview: boolean;\n}\n\nexport interface IWorkflowState {\n readonly id: string;\n readonly app: string;\n readonly title: string;\n readonly workflowId: string;\n readonly targetId: string;\n readonly targetRevisionId: string;\n readonly isActive: boolean;\n readonly comment: string | undefined;\n readonly state: WorkflowStateRecordState;\n readonly steps: IEnrichedWorkflowStateRecordStep[];\n readonly createdOn: Date;\n readonly savedOn: Date;\n readonly createdBy: IWorkflowStateIdentity;\n readonly savedBy: IWorkflowStateIdentity;\n readonly done: boolean;\n readonly currentStep: IEnrichedWorkflowStateRecordStep;\n readonly nextStep: IEnrichedWorkflowStateRecordStep | null;\n readonly previousStep: IEnrichedWorkflowStateRecordStep | null;\n}\n\n// Abstractions\nexport const WorkflowStateModel = createAbstraction<CmsModel>(\"WorkflowStateModel\");\n\nexport namespace WorkflowStateModel {\n export type Interface = CmsModel;\n}\n\nexport type IWorkflowStateTransformerFromCmsEntryInput = CmsEntry<\n Omit<IWorkflowStateRecord, \"id\" | \"savedOn\" | \"createdOn\" | \"savedBy\" | \"createdBy\">\n>;\n\nexport type IWorkflowStateTransformerFromCmsEntryOutput = IWorkflowStateRecord;\n\nexport type IWorkflowStateTransformerToCmsEntryInput = Omit<\n IWorkflowStateRecord,\n \"savedOn\" | \"createdOn\" | \"savedBy\"\n>;\n\nexport type IWorkflowStateTransformerToCmsEntryOutput = Omit<\n IWorkflowStateRecord,\n \"id\" | \"savedOn\" | \"createdOn\" | \"savedBy\" | \"createdBy\"\n>;\n\nexport interface IWorkflowStateMapper {\n fromCmsEntry(\n input: IWorkflowStateTransformerFromCmsEntryInput\n ): IWorkflowStateTransformerFromCmsEntryOutput;\n toCmsEntry(\n input: IWorkflowStateTransformerToCmsEntryInput\n ): IWorkflowStateTransformerToCmsEntryOutput;\n}\n\nexport const WorkflowStateMapper = createAbstraction<IWorkflowStateMapper>(\"WorkflowStateMapper\");\n\nexport namespace WorkflowStateMapper {\n export type Interface = IWorkflowStateMapper;\n}\n"],"names":["WorkflowStateRecordState","WorkflowStateModel","createAbstraction","WorkflowStateMapper"],"mappings":";AAIO,IAAKA,wCAAwBA,WAAAA,GAAAA,SAAxBA,wBAAwB;;;;;WAAxBA;;AAkEL,MAAMC,qBAAqBC,kBAA4B;AA+BvD,MAAMC,sBAAsBD,kBAAwC"}
1
+ {"version":3,"file":"domain/workflowState/abstractions.js","sources":["../../../src/domain/workflowState/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { CmsEntry, CmsModel } from \"@webiny/api-headless-cms/types\";\nimport type { IWorkflowStep } from \"../workflow/abstractions.js\";\nimport type { GenericRecord } from \"@webiny/api/types.js\";\n\nexport enum WorkflowStateRecordState {\n pending = \"pending\",\n inReview = \"inReview\",\n approved = \"approved\",\n rejected = \"rejected\"\n}\n\nexport interface IWorkflowStateIdentity {\n id: string;\n displayName: string;\n type: string;\n}\n\nexport interface IWorkflowStateRecordStep extends IWorkflowStep {\n state: WorkflowStateRecordState;\n comment: string | null;\n savedBy: IWorkflowStateIdentity | null;\n}\n\nexport interface IWorkflowStateRecord<\n Steps extends IWorkflowStateRecordStep = IWorkflowStateRecordStep\n> {\n id: string;\n app: string;\n title: string;\n workflowId: string;\n targetId: string;\n targetRevisionId: string;\n isActive: boolean;\n comment: string | undefined;\n state: WorkflowStateRecordState;\n steps: Steps[];\n createdOn: Date;\n savedOn: Date;\n createdBy: IWorkflowStateIdentity;\n savedBy: IWorkflowStateIdentity;\n targetContext: GenericRecord;\n}\n\nexport interface IEnrichedWorkflowStateRecordStep extends IWorkflowStateRecordStep {\n isOwner: boolean;\n canTakeOver: boolean;\n canReview: boolean;\n}\n\nexport interface IWorkflowState {\n readonly id: string;\n readonly app: string;\n readonly title: string;\n readonly workflowId: string;\n readonly targetId: string;\n readonly targetRevisionId: string;\n readonly isActive: boolean;\n readonly comment: string | undefined;\n readonly state: WorkflowStateRecordState;\n readonly steps: IEnrichedWorkflowStateRecordStep[];\n readonly createdOn: Date;\n readonly savedOn: Date;\n readonly createdBy: IWorkflowStateIdentity;\n readonly savedBy: IWorkflowStateIdentity;\n readonly targetContext: GenericRecord;\n readonly done: boolean;\n readonly currentStep: IEnrichedWorkflowStateRecordStep;\n readonly nextStep: IEnrichedWorkflowStateRecordStep | null;\n readonly previousStep: IEnrichedWorkflowStateRecordStep | null;\n}\n\n// Abstractions\n/**\n * Provides the tenant's workflow state CMS model.\n *\n * A provider rather than the model itself: fetching a model is asynchronous and tenant-dependent,\n * while DI resolution is synchronous — so an already-resolved `CmsModel` could only be supplied by a\n * per-request hook running before every consumer. Consumers `await get()` at the point of use.\n */\nexport interface IWorkflowStateModelProvider {\n get(): Promise<CmsModel>;\n}\n\nexport const WorkflowStateModelProvider = createAbstraction<IWorkflowStateModelProvider>(\n \"WorkflowStateModelProvider\"\n);\n\nexport namespace WorkflowStateModelProvider {\n export type Interface = IWorkflowStateModelProvider;\n}\n\nexport type IWorkflowStateTransformerFromCmsEntryInput = CmsEntry<\n Omit<IWorkflowStateRecord, \"id\" | \"savedOn\" | \"createdOn\" | \"savedBy\" | \"createdBy\">\n>;\n\nexport type IWorkflowStateTransformerFromCmsEntryOutput = IWorkflowStateRecord;\n\nexport type IWorkflowStateTransformerToCmsEntryInput = Omit<\n IWorkflowStateRecord,\n \"savedOn\" | \"createdOn\" | \"savedBy\"\n>;\n\nexport type IWorkflowStateTransformerToCmsEntryOutput = Omit<\n IWorkflowStateRecord,\n \"id\" | \"savedOn\" | \"createdOn\" | \"savedBy\" | \"createdBy\"\n>;\n\nexport interface IWorkflowStateMapper {\n fromCmsEntry(\n input: IWorkflowStateTransformerFromCmsEntryInput\n ): IWorkflowStateTransformerFromCmsEntryOutput;\n toCmsEntry(\n input: IWorkflowStateTransformerToCmsEntryInput\n ): IWorkflowStateTransformerToCmsEntryOutput;\n}\n\nexport const WorkflowStateMapper = createAbstraction<IWorkflowStateMapper>(\"WorkflowStateMapper\");\n\nexport namespace WorkflowStateMapper {\n export type Interface = IWorkflowStateMapper;\n}\n"],"names":["WorkflowStateRecordState","WorkflowStateModelProvider","createAbstraction","WorkflowStateMapper"],"mappings":";AAKO,IAAKA,wCAAwBA,WAAAA,GAAAA,SAAxBA,wBAAwB;;;;;WAAxBA;;AA+EL,MAAMC,6BAA6BC,kBACtC;AAgCG,MAAMC,sBAAsBD,kBAAwC"}
@@ -34,6 +34,7 @@ class WorkflowStateModelImpl {
34
34
  isActive: fields.boolean().label("Is Active"),
35
35
  comment: fields.text().label("Comment"),
36
36
  state: fields.text().label("State").predefinedValues(states),
37
+ targetContext: fields.json().label("Target Context"),
37
38
  steps: fields.object().label("Steps").list().required("Steps are required.").listMinLength(1, "At least one step is required.").fields((stepFields)=>({
38
39
  id: stepFields.text().label("ID").required("ID is required."),
39
40
  title: stepFields.text().label("Title").required("Title is required."),
@@ -1 +1 @@
1
- {"version":3,"file":"domain/workflowState/stateModel.js","sources":["../../../src/domain/workflowState/stateModel.ts"],"sourcesContent":["import { ModelFactory } from \"@webiny/api-headless-cms/features/modelBuilder/index.js\";\nimport { WorkflowStateRecordState } from \"~/domain/workflowState/abstractions.js\";\n\nexport const WORKFLOW_STATE_MODEL_ID = \"wbyWorkflowState\";\n\nconst states = [\n {\n label: \"Pending\",\n value: WorkflowStateRecordState.pending\n },\n {\n label: \"In Review\",\n value: WorkflowStateRecordState.inReview\n },\n {\n label: \"Approved\",\n value: WorkflowStateRecordState.approved\n },\n {\n label: \"Rejected\",\n value: WorkflowStateRecordState.rejected\n }\n];\n\nclass WorkflowStateModelImpl implements ModelFactory.Interface {\n public async execute(builder: ModelFactory.Builder) {\n return [\n builder\n .private({\n modelId: WORKFLOW_STATE_MODEL_ID,\n name: \"RecordWorkflow State\"\n })\n .fields(fields => ({\n workflowId: fields.text().label(\"Workflow ID\"),\n app: fields.text().label(\"App\").required(\"App is required.\"),\n title: fields.text().label(\"Title\").required(\"Title is required.\"),\n targetRevisionId: fields.text().label(\"Target Revision ID\"),\n targetId: fields.text().label(\"Target ID\"),\n isActive: fields.boolean().label(\"Is Active\"),\n comment: fields.text().label(\"Comment\"),\n state: fields.text().label(\"State\").predefinedValues(states),\n steps: fields\n .object()\n .label(\"Steps\")\n .list()\n .required(\"Steps are required.\")\n .listMinLength(1, \"At least one step is required.\")\n .fields(stepFields => ({\n id: stepFields.text().label(\"ID\").required(\"ID is required.\"),\n title: stepFields.text().label(\"Title\").required(\"Title is required.\"),\n color: stepFields.text().label(\"Color\").required(\"Color is required.\"),\n description: stepFields.text().label(\"Description\"),\n teams: stepFields\n .object()\n .label(\"Teams\")\n .list()\n .required(\"At least one team is required.\")\n .listMinLength(1, \"At least one team is required.\")\n .fields(teamFields => ({\n id: teamFields.text().label(\"ID\").required(\"ID is required.\")\n })),\n notifications: stepFields\n .object()\n .label(\"Notifications\")\n .list()\n .fields(notificationFields => ({\n id: notificationFields\n .text()\n .label(\"ID\")\n .required(\"ID is required.\")\n })),\n state: stepFields.text().label(\"State\").predefinedValues(states),\n savedBy: stepFields\n .object()\n .label(\"User\")\n .fields(userFields => ({\n id: userFields.text().label(\"ID\").required(\"ID is required.\"),\n displayName: userFields\n .text()\n .label(\"Display Name\")\n .required(\"Display name is required.\"),\n type: userFields\n .text()\n .label(\"Type\")\n .required(\"Type is required.\")\n })),\n comment: stepFields.text().label(\"Comment\")\n }))\n }))\n ];\n }\n}\n\nexport const WorkflowStateModel = ModelFactory.createImplementation({\n implementation: WorkflowStateModelImpl,\n dependencies: []\n});\n"],"names":["WORKFLOW_STATE_MODEL_ID","states","WorkflowStateRecordState","WorkflowStateModelImpl","builder","fields","stepFields","teamFields","notificationFields","userFields","WorkflowStateModel","ModelFactory"],"mappings":";;AAGO,MAAMA,0BAA0B;AAEvC,MAAMC,SAAS;IACX;QACI,OAAO;QACP,OAAOC,yBAAyB,OAAO;IAC3C;IACA;QACI,OAAO;QACP,OAAOA,yBAAyB,QAAQ;IAC5C;IACA;QACI,OAAO;QACP,OAAOA,yBAAyB,QAAQ;IAC5C;IACA;QACI,OAAO;QACP,OAAOA,yBAAyB,QAAQ;IAC5C;CACH;AAED,MAAMC;IACF,MAAa,QAAQC,OAA6B,EAAE;QAChD,OAAO;YACHA,QACK,OAAO,CAAC;gBACL,SAASJ;gBACT,MAAM;YACV,GACC,MAAM,CAACK,CAAAA,SAAW;oBACf,YAAYA,OAAO,IAAI,GAAG,KAAK,CAAC;oBAChC,KAAKA,OAAO,IAAI,GAAG,KAAK,CAAC,OAAO,QAAQ,CAAC;oBACzC,OAAOA,OAAO,IAAI,GAAG,KAAK,CAAC,SAAS,QAAQ,CAAC;oBAC7C,kBAAkBA,OAAO,IAAI,GAAG,KAAK,CAAC;oBACtC,UAAUA,OAAO,IAAI,GAAG,KAAK,CAAC;oBAC9B,UAAUA,OAAO,OAAO,GAAG,KAAK,CAAC;oBACjC,SAASA,OAAO,IAAI,GAAG,KAAK,CAAC;oBAC7B,OAAOA,OAAO,IAAI,GAAG,KAAK,CAAC,SAAS,gBAAgB,CAACJ;oBACrD,OAAOI,OACF,MAAM,GACN,KAAK,CAAC,SACN,IAAI,GACJ,QAAQ,CAAC,uBACT,aAAa,CAAC,GAAG,kCACjB,MAAM,CAACC,CAAAA,aAAe;4BACnB,IAAIA,WAAW,IAAI,GAAG,KAAK,CAAC,MAAM,QAAQ,CAAC;4BAC3C,OAAOA,WAAW,IAAI,GAAG,KAAK,CAAC,SAAS,QAAQ,CAAC;4BACjD,OAAOA,WAAW,IAAI,GAAG,KAAK,CAAC,SAAS,QAAQ,CAAC;4BACjD,aAAaA,WAAW,IAAI,GAAG,KAAK,CAAC;4BACrC,OAAOA,WACF,MAAM,GACN,KAAK,CAAC,SACN,IAAI,GACJ,QAAQ,CAAC,kCACT,aAAa,CAAC,GAAG,kCACjB,MAAM,CAACC,CAAAA,aAAe;oCACnB,IAAIA,WAAW,IAAI,GAAG,KAAK,CAAC,MAAM,QAAQ,CAAC;gCAC/C;4BACJ,eAAeD,WACV,MAAM,GACN,KAAK,CAAC,iBACN,IAAI,GACJ,MAAM,CAACE,CAAAA,qBAAuB;oCAC3B,IAAIA,mBACC,IAAI,GACJ,KAAK,CAAC,MACN,QAAQ,CAAC;gCAClB;4BACJ,OAAOF,WAAW,IAAI,GAAG,KAAK,CAAC,SAAS,gBAAgB,CAACL;4BACzD,SAASK,WACJ,MAAM,GACN,KAAK,CAAC,QACN,MAAM,CAACG,CAAAA,aAAe;oCACnB,IAAIA,WAAW,IAAI,GAAG,KAAK,CAAC,MAAM,QAAQ,CAAC;oCAC3C,aAAaA,WACR,IAAI,GACJ,KAAK,CAAC,gBACN,QAAQ,CAAC;oCACd,MAAMA,WACD,IAAI,GACJ,KAAK,CAAC,QACN,QAAQ,CAAC;gCAClB;4BACJ,SAASH,WAAW,IAAI,GAAG,KAAK,CAAC;wBACrC;gBACR;SACP;IACL;AACJ;AAEO,MAAMI,qBAAqBC,aAAa,oBAAoB,CAAC;IAChE,gBAAgBR;IAChB,cAAc,EAAE;AACpB"}
1
+ {"version":3,"file":"domain/workflowState/stateModel.js","sources":["../../../src/domain/workflowState/stateModel.ts"],"sourcesContent":["import { ModelFactory } from \"@webiny/api-headless-cms/features/modelBuilder/index.js\";\nimport { WorkflowStateRecordState } from \"~/domain/workflowState/abstractions.js\";\n\nexport const WORKFLOW_STATE_MODEL_ID = \"wbyWorkflowState\";\n\nconst states = [\n {\n label: \"Pending\",\n value: WorkflowStateRecordState.pending\n },\n {\n label: \"In Review\",\n value: WorkflowStateRecordState.inReview\n },\n {\n label: \"Approved\",\n value: WorkflowStateRecordState.approved\n },\n {\n label: \"Rejected\",\n value: WorkflowStateRecordState.rejected\n }\n];\n\nclass WorkflowStateModelImpl implements ModelFactory.Interface {\n public async execute(builder: ModelFactory.Builder) {\n return [\n builder\n .private({\n modelId: WORKFLOW_STATE_MODEL_ID,\n name: \"RecordWorkflow State\"\n })\n .fields(fields => ({\n workflowId: fields.text().label(\"Workflow ID\"),\n app: fields.text().label(\"App\").required(\"App is required.\"),\n title: fields.text().label(\"Title\").required(\"Title is required.\"),\n targetRevisionId: fields.text().label(\"Target Revision ID\"),\n targetId: fields.text().label(\"Target ID\"),\n isActive: fields.boolean().label(\"Is Active\"),\n comment: fields.text().label(\"Comment\"),\n state: fields.text().label(\"State\").predefinedValues(states),\n targetContext: fields.json().label(\"Target Context\"),\n steps: fields\n .object()\n .label(\"Steps\")\n .list()\n .required(\"Steps are required.\")\n .listMinLength(1, \"At least one step is required.\")\n .fields(stepFields => ({\n id: stepFields.text().label(\"ID\").required(\"ID is required.\"),\n title: stepFields.text().label(\"Title\").required(\"Title is required.\"),\n color: stepFields.text().label(\"Color\").required(\"Color is required.\"),\n description: stepFields.text().label(\"Description\"),\n teams: stepFields\n .object()\n .label(\"Teams\")\n .list()\n .required(\"At least one team is required.\")\n .listMinLength(1, \"At least one team is required.\")\n .fields(teamFields => ({\n id: teamFields.text().label(\"ID\").required(\"ID is required.\")\n })),\n notifications: stepFields\n .object()\n .label(\"Notifications\")\n .list()\n .fields(notificationFields => ({\n id: notificationFields\n .text()\n .label(\"ID\")\n .required(\"ID is required.\")\n })),\n state: stepFields.text().label(\"State\").predefinedValues(states),\n savedBy: stepFields\n .object()\n .label(\"User\")\n .fields(userFields => ({\n id: userFields.text().label(\"ID\").required(\"ID is required.\"),\n displayName: userFields\n .text()\n .label(\"Display Name\")\n .required(\"Display name is required.\"),\n type: userFields\n .text()\n .label(\"Type\")\n .required(\"Type is required.\")\n })),\n comment: stepFields.text().label(\"Comment\")\n }))\n }))\n ];\n }\n}\n\nexport const WorkflowStateModel = ModelFactory.createImplementation({\n implementation: WorkflowStateModelImpl,\n dependencies: []\n});\n"],"names":["WORKFLOW_STATE_MODEL_ID","states","WorkflowStateRecordState","WorkflowStateModelImpl","builder","fields","stepFields","teamFields","notificationFields","userFields","WorkflowStateModel","ModelFactory"],"mappings":";;AAGO,MAAMA,0BAA0B;AAEvC,MAAMC,SAAS;IACX;QACI,OAAO;QACP,OAAOC,yBAAyB,OAAO;IAC3C;IACA;QACI,OAAO;QACP,OAAOA,yBAAyB,QAAQ;IAC5C;IACA;QACI,OAAO;QACP,OAAOA,yBAAyB,QAAQ;IAC5C;IACA;QACI,OAAO;QACP,OAAOA,yBAAyB,QAAQ;IAC5C;CACH;AAED,MAAMC;IACF,MAAa,QAAQC,OAA6B,EAAE;QAChD,OAAO;YACHA,QACK,OAAO,CAAC;gBACL,SAASJ;gBACT,MAAM;YACV,GACC,MAAM,CAACK,CAAAA,SAAW;oBACf,YAAYA,OAAO,IAAI,GAAG,KAAK,CAAC;oBAChC,KAAKA,OAAO,IAAI,GAAG,KAAK,CAAC,OAAO,QAAQ,CAAC;oBACzC,OAAOA,OAAO,IAAI,GAAG,KAAK,CAAC,SAAS,QAAQ,CAAC;oBAC7C,kBAAkBA,OAAO,IAAI,GAAG,KAAK,CAAC;oBACtC,UAAUA,OAAO,IAAI,GAAG,KAAK,CAAC;oBAC9B,UAAUA,OAAO,OAAO,GAAG,KAAK,CAAC;oBACjC,SAASA,OAAO,IAAI,GAAG,KAAK,CAAC;oBAC7B,OAAOA,OAAO,IAAI,GAAG,KAAK,CAAC,SAAS,gBAAgB,CAACJ;oBACrD,eAAeI,OAAO,IAAI,GAAG,KAAK,CAAC;oBACnC,OAAOA,OACF,MAAM,GACN,KAAK,CAAC,SACN,IAAI,GACJ,QAAQ,CAAC,uBACT,aAAa,CAAC,GAAG,kCACjB,MAAM,CAACC,CAAAA,aAAe;4BACnB,IAAIA,WAAW,IAAI,GAAG,KAAK,CAAC,MAAM,QAAQ,CAAC;4BAC3C,OAAOA,WAAW,IAAI,GAAG,KAAK,CAAC,SAAS,QAAQ,CAAC;4BACjD,OAAOA,WAAW,IAAI,GAAG,KAAK,CAAC,SAAS,QAAQ,CAAC;4BACjD,aAAaA,WAAW,IAAI,GAAG,KAAK,CAAC;4BACrC,OAAOA,WACF,MAAM,GACN,KAAK,CAAC,SACN,IAAI,GACJ,QAAQ,CAAC,kCACT,aAAa,CAAC,GAAG,kCACjB,MAAM,CAACC,CAAAA,aAAe;oCACnB,IAAIA,WAAW,IAAI,GAAG,KAAK,CAAC,MAAM,QAAQ,CAAC;gCAC/C;4BACJ,eAAeD,WACV,MAAM,GACN,KAAK,CAAC,iBACN,IAAI,GACJ,MAAM,CAACE,CAAAA,qBAAuB;oCAC3B,IAAIA,mBACC,IAAI,GACJ,KAAK,CAAC,MACN,QAAQ,CAAC;gCAClB;4BACJ,OAAOF,WAAW,IAAI,GAAG,KAAK,CAAC,SAAS,gBAAgB,CAACL;4BACzD,SAASK,WACJ,MAAM,GACN,KAAK,CAAC,QACN,MAAM,CAACG,CAAAA,aAAe;oCACnB,IAAIA,WAAW,IAAI,GAAG,KAAK,CAAC,MAAM,QAAQ,CAAC;oCAC3C,aAAaA,WACR,IAAI,GACJ,KAAK,CAAC,gBACN,QAAQ,CAAC;oCACd,MAAMA,WACD,IAAI,GACJ,KAAK,CAAC,QACN,QAAQ,CAAC;gCAClB;4BACJ,SAASH,WAAW,IAAI,GAAG,KAAK,CAAC;wBACrC;gBACR;SACP;IACL;AACJ;AAEO,MAAMI,qBAAqBC,aAAa,oBAAoB,CAAC;IAChE,gBAAgBR;IAChB,cAAc,EAAE;AACpB"}
@@ -0,0 +1,34 @@
1
+ import type { CmsModel } from "@webiny/api-headless-cms/types";
2
+ import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js";
3
+ import { WorkflowModelProvider } from "../domain/workflow/abstractions.js";
4
+ import { WorkflowStateModelProvider } from "../domain/workflowState/abstractions.js";
5
+ /**
6
+ * Resolve the tenant's workflow models on demand, replacing the per-request hook
7
+ * (`WorkflowsInitializer`) that used to push already-resolved models into the container.
8
+ *
9
+ * No memoization: `ModelsFetcher` already caches the model list per request (`ModelCache` is a
10
+ * per-request `createMemoryCache()`). No `withoutAuthorization` either — both models are private,
11
+ * and `PrivateModelBuilder` sets `authorization: false`, which short-circuits `canAccessModel()` to
12
+ * true for every identity, so the wrapper the initializer used changed nothing.
13
+ *
14
+ * `GetModelUseCase` is an ordinary constructor dependency: a provider is only constructed when a
15
+ * consumer first awaits `get()`, during request handling — after the CMS has registered everything
16
+ * the use case needs. That timing is what forced the initializer's lazy `container.resolve()`.
17
+ */
18
+ declare class WorkflowModelProviderImplementation implements WorkflowModelProvider.Interface {
19
+ private getModel;
20
+ constructor(getModel: GetModelUseCase.Interface);
21
+ get(): Promise<CmsModel>;
22
+ }
23
+ declare class WorkflowStateModelProviderImplementation implements WorkflowStateModelProvider.Interface {
24
+ private getModel;
25
+ constructor(getModel: GetModelUseCase.Interface);
26
+ get(): Promise<CmsModel>;
27
+ }
28
+ export declare const WorkflowModelProviderImpl: typeof WorkflowModelProviderImplementation & {
29
+ __abstraction: import("@webiny/di").Abstraction<import("~/domain/workflow/abstractions.js").IWorkflowModelProvider>;
30
+ };
31
+ export declare const WorkflowStateModelProviderImpl: typeof WorkflowStateModelProviderImplementation & {
32
+ __abstraction: import("@webiny/di").Abstraction<import("~/domain/workflowState/abstractions.js").IWorkflowStateModelProvider>;
33
+ };
34
+ export {};
@@ -0,0 +1,40 @@
1
+ import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js";
2
+ import { WorkflowModelProvider } from "../domain/workflow/abstractions.js";
3
+ import { WorkflowStateModelProvider } from "../domain/workflowState/abstractions.js";
4
+ import { WORKFLOW_MODEL_ID } from "../constants.js";
5
+ import { WORKFLOW_STATE_MODEL_ID } from "../domain/workflowState/stateModel.js";
6
+ class WorkflowModelProviderImplementation {
7
+ constructor(getModel){
8
+ this.getModel = getModel;
9
+ }
10
+ async get() {
11
+ const result = await this.getModel.execute(WORKFLOW_MODEL_ID);
12
+ if (result.isFail()) throw result.error;
13
+ return result.value;
14
+ }
15
+ }
16
+ class WorkflowStateModelProviderImplementation {
17
+ constructor(getModel){
18
+ this.getModel = getModel;
19
+ }
20
+ async get() {
21
+ const result = await this.getModel.execute(WORKFLOW_STATE_MODEL_ID);
22
+ if (result.isFail()) throw result.error;
23
+ return result.value;
24
+ }
25
+ }
26
+ const WorkflowModelProviderImpl = WorkflowModelProvider.createImplementation({
27
+ implementation: WorkflowModelProviderImplementation,
28
+ dependencies: [
29
+ GetModelUseCase
30
+ ]
31
+ });
32
+ const WorkflowStateModelProviderImpl = WorkflowStateModelProvider.createImplementation({
33
+ implementation: WorkflowStateModelProviderImplementation,
34
+ dependencies: [
35
+ GetModelUseCase
36
+ ]
37
+ });
38
+ export { WorkflowModelProviderImpl, WorkflowStateModelProviderImpl };
39
+
40
+ //# sourceMappingURL=WorkflowModelProviders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/WorkflowModelProviders.js","sources":["../../src/features/WorkflowModelProviders.ts"],"sourcesContent":["import type { CmsModel } from \"@webiny/api-headless-cms/types\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/index.js\";\nimport { WorkflowModelProvider } from \"~/domain/workflow/abstractions.js\";\nimport { WorkflowStateModelProvider } from \"~/domain/workflowState/abstractions.js\";\nimport { WORKFLOW_MODEL_ID } from \"~/constants.js\";\nimport { WORKFLOW_STATE_MODEL_ID } from \"~/domain/workflowState/stateModel.js\";\n\n/**\n * Resolve the tenant's workflow models on demand, replacing the per-request hook\n * (`WorkflowsInitializer`) that used to push already-resolved models into the container.\n *\n * No memoization: `ModelsFetcher` already caches the model list per request (`ModelCache` is a\n * per-request `createMemoryCache()`). No `withoutAuthorization` either — both models are private,\n * and `PrivateModelBuilder` sets `authorization: false`, which short-circuits `canAccessModel()` to\n * true for every identity, so the wrapper the initializer used changed nothing.\n *\n * `GetModelUseCase` is an ordinary constructor dependency: a provider is only constructed when a\n * consumer first awaits `get()`, during request handling — after the CMS has registered everything\n * the use case needs. That timing is what forced the initializer's lazy `container.resolve()`.\n */\nclass WorkflowModelProviderImplementation implements WorkflowModelProvider.Interface {\n constructor(private getModel: GetModelUseCase.Interface) {}\n\n async get(): Promise<CmsModel> {\n const result = await this.getModel.execute(WORKFLOW_MODEL_ID);\n if (result.isFail()) {\n throw result.error;\n }\n return result.value;\n }\n}\n\nclass WorkflowStateModelProviderImplementation implements WorkflowStateModelProvider.Interface {\n constructor(private getModel: GetModelUseCase.Interface) {}\n\n async get(): Promise<CmsModel> {\n const result = await this.getModel.execute(WORKFLOW_STATE_MODEL_ID);\n if (result.isFail()) {\n throw result.error;\n }\n return result.value;\n }\n}\n\nexport const WorkflowModelProviderImpl = WorkflowModelProvider.createImplementation({\n implementation: WorkflowModelProviderImplementation,\n dependencies: [GetModelUseCase]\n});\n\nexport const WorkflowStateModelProviderImpl = WorkflowStateModelProvider.createImplementation({\n implementation: WorkflowStateModelProviderImplementation,\n dependencies: [GetModelUseCase]\n});\n"],"names":["WorkflowModelProviderImplementation","getModel","result","WORKFLOW_MODEL_ID","WorkflowStateModelProviderImplementation","WORKFLOW_STATE_MODEL_ID","WorkflowModelProviderImpl","WorkflowModelProvider","GetModelUseCase","WorkflowStateModelProviderImpl","WorkflowStateModelProvider"],"mappings":";;;;;AAoBA,MAAMA;IACF,YAAoBC,QAAmC,CAAE;aAArCA,QAAQ,GAARA;IAAsC;IAE1D,MAAM,MAAyB;QAC3B,MAAMC,SAAS,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAACC;QAC3C,IAAID,OAAO,MAAM,IACb,MAAMA,OAAO,KAAK;QAEtB,OAAOA,OAAO,KAAK;IACvB;AACJ;AAEA,MAAME;IACF,YAAoBH,QAAmC,CAAE;aAArCA,QAAQ,GAARA;IAAsC;IAE1D,MAAM,MAAyB;QAC3B,MAAMC,SAAS,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAACG;QAC3C,IAAIH,OAAO,MAAM,IACb,MAAMA,OAAO,KAAK;QAEtB,OAAOA,OAAO,KAAK;IACvB;AACJ;AAEO,MAAMI,4BAA4BC,sBAAsB,oBAAoB,CAAC;IAChF,gBAAgBP;IAChB,cAAc;QAACQ;KAAgB;AACnC;AAEO,MAAMC,iCAAiCC,2BAA2B,oBAAoB,CAAC;IAC1F,gBAAgBN;IAChB,cAAc;QAACI;KAAgB;AACnC"}
@@ -1,11 +1,11 @@
1
1
  import { CreateEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/CreateEntry/index.js";
2
- import { WorkflowMapper, WorkflowModel } from "../../../domain/workflow/abstractions.js";
2
+ import { WorkflowMapper, WorkflowModelProvider } from "../../../domain/workflow/abstractions.js";
3
3
  import { CreateWorkflowRepository as Repository } from "./abstractions.js";
4
4
  declare class CreateWorkflowRepositoryImpl implements Repository.Interface {
5
5
  private createEntry;
6
- private model;
6
+ private modelProvider;
7
7
  private mapper;
8
- constructor(createEntry: CreateEntryUseCase.Interface, model: WorkflowModel.Interface, mapper: WorkflowMapper.Interface);
8
+ constructor(createEntry: CreateEntryUseCase.Interface, modelProvider: WorkflowModelProvider.Interface, mapper: WorkflowMapper.Interface);
9
9
  execute(input: Repository.Input): Repository.Return;
10
10
  }
11
11
  export declare const CreateWorkflowRepository: typeof CreateWorkflowRepositoryImpl & {